单片机C语言常用语句详解
- 格式:ppt
- 大小:167.50 KB
- 文档页数:22


1.标准的C语言中没有空语句。
但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在keil C51中,直接调用库函数:#include<intrins.h> // 声明了void _nop_(void);_nop_(); // 产生一条NOP指令作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
2。
在选择C51中循环语句时,要注意以下几个问题第一、定义的C51中循环变量,尽量采用无符号字符型变量。
第二、在FOR循环语句中,尽量采用变量减减来做循环。
第三、在do…while,while语句中,循环体内变量也采用减减方法。
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。
下面举例说明:unsigned char I;for(i=0;i<255;i++);unsigned char I;for(i=255;i>0;i--);其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令:MOV09H,#0FFHLOOP:DJNZ09H,LOOP指令相当简洁,也很好计算精确的延时时间。
同样对do…while,while循环语句中,也是如此例:unsigned char n;n=255;do{n--}while(n);或n=255;while(n){n--};这两个循环语句经过C51编译之后,形成DJNZ来完成的方法,故其精确时间的计算也很方便。
其三:对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
单片机数据传送指令c语言单片机是一种集成电路,也称为微控制器。
它内部集成了处理器、存储器和各种外围设备接口,并且可以通过程序来控制其工作。
在单片机编程过程中,数据传送指令是常用的指令之一。
数据传送指令用于在单片机中传输数据,可以实现寄存器之间的数据传递、数据移动和数据保存等功能。
下面我将详细介绍单片机数据传送指令的使用方法。
首先,我们需要了解数据传送指令的基本格式。
数据传送指令通常以下面的形式出现:MOV destination, source。
其中,destination表示目标操作数,source表示源操作数。
要执行一条数据传送指令,首先需要确定传输数据的源和目标,然后根据具体需求选择合适的寻址方式来指定源和目标的地址。
下面我将介绍几种常用的寻址方式。
第一种寻址方式是立即寻址(Immediate Addressing)。
在立即寻址中,source指定了一个立即数,表示需要传送的数据。
立即数是在指令中给出的常数值,可以直接传送到目标寄存器或内存地址中。
例如,MOV A, #15表示将立即数15传送到A寄存器中。
第二种寻址方式是直接寻址(Direct Addressing)。
直接寻址中,source 指定了一个源寄存器或内存地址,将该寄存器或内存地址中的内容传送到目标寄存器或内存地址中。
例如,MOV A, B表示将B寄存器中的内容传送到A寄存器中。
第三种寻址方式是寄存器间接寻址(Register Indirect Addressing)。
在寄存器间接寻址中,source指定了一个寄存器的地址,将该寄存器中的内容传送到目标寄存器或内存地址中。
例如,MOVX @DPTR, A表示将A 寄存器中的内容传送到DPTR寄存器指向的内存地址中。
第四种寻址方式是间接偏移寻址(Indirect Offset Addressing)。
在间接偏移寻址中,source指定了一个源寄存器和一个偏移量,将源寄存器地址加上偏移量得到的地址中的内容传送到目标寄存器或内存地址中。