单片机C语言中的空语句.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
单片机C语言中的空语句 单片机技术是一种微控制器技术,需要使用C语言来编程。在C语言中,没有空语句的概念,但是单片机C语言编程中,经常需要使用空语句来产生短延时的效果。 在Keil C51中,直接调用库函数#include<intrins.h>,然后使用_nop_()函数来产生一条NOP 指令,该函数相当于汇编语言中的NOP 指令,延时几微秒。 NOP 指令是一条单周期指令,可以由晶振频率算出延时时间,对于 12M 晶振,延时 1uS。 在单片机C语言编程中, delay 函数是非常重要的,需要使用不同的循环语句来实现不同的延时效果。循环语句可以分为三种: 1. 使用 _nop_ 函数来实现短延时,延时时间在 us 级。 2. 使用 for 循环语句或 do…while 循环语句来实现中等延时,延时时间在 ms 级。 3. 使用嵌套循环语句来实现长延时,延时时间在 ms 级以上。 在选择循环语句时,需要注意以下几个问题: 1. 定义的循环变量,尽量采用无符号字符型变量。 2. 在 for 循环语句中,尽量采用变量减减来做循环。 3. 在 do…while,while 语句中,循环体内变量也采用减减方法。 例如,unsigned char I;for(i=0;i<255;i++); 或 unsigned char I;for(i=255;i>0;i--); 这两个循环语句经过 C51 编译之后,形成 DJNZ 指令来完成的方法,故其精确时间的计算也很方便。 对于要求精确延时时间更长,需要采用循环嵌套的方法来实现。例如,unsigned char i,j;for(i=255;i>0;i--)for(j=255;j>0;j--); 或 unsigned char i,j;i=255;do{j=255;do{j--;}while(j);}while(i); 或 unsigned char i,j;i=255;while(i){j=255;while(j){j--;}i--;}; 这三种方法都是用 DJNZ 指令嵌套实现循环的,由 C51 编译器用下面的指令组合来完成的。 在设计延时子程序时,需要注意以下几个问题: 1. 在 C51 中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。 2. 在延时子程序设计时,采用 do…while 结构做循环体要比 for 结构做循环体好。 3. 在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。 例如,unsigned char delay(unsigned char i,unsigned char j,unsigned char k){...}; 这精确延时子程序就被 C51 编译为有下面的指令组合完成delay 延时子程序如下: MOV R6,05H MOV R4,03H C0012:DJNZ R6,C0012 ... 单片机C语言中的空语句是一种非常重要的技术,需要根据不同的延时需求选择合适的循环语句和嵌套方法来实现。
- 粉丝: 30
- 资源: 5万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助