物联网控制技术 知识点总结 第三章 汇编语言 第四章 C51语言

51单片机的编程语言

编程语言的应用主要出现在综合应用题使用编程语言设计算法,多结合实验实例,练习编程能力,小编觉得不用纠结语言。

汇编语言

结合寻址方式理解汇编语言指令

51单片机的寻址方式

结合51单片机的体系结构来理解不同的寻址方式

立即寻址

操作数包含在指令代码中,称为立即数,用"#"表示。

寻址空间:程序存储器

masm 复制代码
MOV A, #30H 
直接寻址

直接使用数所在的单元的地址找到操作数。

寻址空间:片内RAM低128字节、SFR

masm 复制代码
MOV A, 00H 
寄存器寻址

对工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进行操作。

寻址空间:工作寄存器R0~R7, A, B, DPTR

masm 复制代码
MOV A, Rn
寄存器间接寻址

将寄存器中存储的地址处的数据取出。"@"间址提示符。

寻址空间:

片内RAM: @R0, @R1, SP

片外RAM: @R0, @R1, @DPTR

asm 复制代码
MOV A, @R0
变址寻址

常用于访问存放在ROM单元中的数据表格,实现查表操作。

ROM:@A+PC, @A+DPTR

asm 复制代码
MOVC A, @A+DPTR
相对寻址

将PC中的当前内容(基地址)与指令第二字节给出的数(偏移量)相加,结果作为跳转指令的转移地址。

寻址空间:ROM256字节范围内:PC+偏移量

asm 复制代码
JC 23H ;若C=1则跳转至 当前PC基地址+23
位寻址

对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。

寻址空间:片内RAM的位寻址区(20H~2FH字节地址)某些可位寻址的专用寄存器SFR

asm 复制代码
MOV C, 30H
SETB 3DH

C51语言

C51语言,使用C51语言写中断

中断服务函数

函数类型 函数名 (形式参数表)[interrupt n][using n]

  1. 中断函数没有返回值
  2. 中断函数不能进行参数传递
  3. 任何情况下都不能直接调用中断函数
  4. 如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须和中断函数使用的寄存器区不同

中断初始化程序:选择外部中断的触发方式、开中断、设置中断优先级

中断服务程序

控制8只LED交替闪烁

c 复制代码
#include <reg51.h>
//定义延时函数Delay(),i时形式参数,不能赋初值
void Delay(unsigned int j){
	unsigned int j;
	for(;i>0;i--)
		for(j=0;j<333;j++)
			{;}		//空函数
}
//主函数
void main(){
	EA=1;		//总中断允许
	EX0=1;		//外部中断0中断允许
	IT0=1;		//选择外部中断0为跳沿触发方式
	while(1){	//循环
		P1=0;	//P1口的8至LED全亮
	}
}
void int0()interrupt 0 using 0{
	EX0=0;		//禁止外部中断0中断
	P1=0x0f;	//低4位LED灭,高4位LED亮
	Delay(800);	//延时800ms
	P1=0xf0;	//高4位LED灭,低4位LED亮
	Delay(800);	//延时800ms
	EX0=1;		//中断返回前,打开外部中断0中断
}

定时器0方式1中断

c 复制代码
#include <reg51.h>
char i=100;		//给变量i赋初值
void main(){
	TMOD=0x01;	//设置定时器T0为方式1
	TH0=0xee;	//向TH0写入初值的高8位
	TL0=0x00;	//向TL0写入初值的低8位
	P1=0x00;	//P1口8只LED点亮
	EA=1;		//总中断允许
	ET0=1;		//定时器T0中断允许
	TR0=1;		//启动定时器T0
	while(1);	//循环
	{;}
}
//定时器T0中断服务程序
void T0_int(void) interrupt 1{
	TH0=0xee;	//给T0装入16位初值,计数4608后,T0溢出
	TL0=0x00;
	i--;		//循环次数减1
	if(i<=0){
		P1=~P1;	//P1口按位取反
		i=100;	//重新设置循环次数
	}
}

串行口方式0

c 复制代码
#include <reg51.h>
#include <stdio.h>
sbit P10=0x90;
Xdata char nIndex;
Delay();
main(){
	SCON=0x00;		//串行口初始化为方式0
	ES=1;
	EA=1;			//全局中断允许
	nIndex=1;
	SBUF=nIndex;
	P10=0;
	while(1){;}
}
void Serial_Port()interrupt 4 using 0{
	if(TI==1){
		P10=1;
		Delay();
		P10=1;
		nIndex<<=1;
		if(nIndex==0) nIndex=1;
		SBUF=nIndex;
	}
	TI=0;
	RI=0;
}
Delay(){
	int nCounter;
	for(nCounter=0;nCounter<128;nCounter++);
}
相关推荐
半桔6 小时前
【Linux手册】进程的状态:从创建到消亡的“生命百态”
linux·运维·服务器·汇编·深度学习·面试
武汉唯众智创7 小时前
基于人工智能的物联网全栈智能应用实训系统实训室解决方案
人工智能·物联网·物联网实训室·物联网实验室·物联网全栈实训室·物联网全栈智能应用实训系统·物联网全栈智能实训室
国产化创客7 小时前
国产ARM/RISCV与OpenHarmony物联网项目(一)总体设计说明
物联网·鸿蒙系统·国产化
蓝蜂物联网11 小时前
PLC 远程运维新范式:物联网打破空间限制
运维·物联网·信息可视化·制造
国产化创客21 小时前
国产ARM/RISCV与OpenHarmony物联网项目(二)网关数据显示
物联网·鸿蒙系统·国产化
qq_25929724731 天前
网络编程TCP与UDP
c语言·物联网
小狗祈祷诗1 天前
day40- 硬件学习之 51单片机II (中断处理)
51单片机·keil
Java小白,一起学习1 天前
ESP32开发入门
单片机·物联网·iot
Hy行者勇哥1 天前
物联网传输网关、RTU、DTU及SCADA系统技术解析
物联网