大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
每一遍,如果是1us,才能是延时约1s。但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
成都创新互联自2013年起,是专业互联网技术服务公司,拥有项目网站制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元多伦做网站,已为上家服务,为多伦各地企业和个人服务,联系电话:18980820575
void main(){ TMOD=0x00;TH1=0x3c;TL1=0xb0;EA=1;ET1=1;TR1=1;while(1){ if(i==20){ i=0;//下面写你要处理的的其他程序,你只要了定时1s。
记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1。多试几个A,差不多调到1s就够了。我一般都这么调。你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧。
51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
比如12M晶振for(j=0;j120;j++);大概延时1毫秒,10592M晶振那么for(j=0;j110;j++);延时1毫秒,你这里的for(j=0;j100;j++);延时1毫秒的话,晶振应该是10M,不太常见哟,特别是在单片机方面。
C:0x0809 70FC JNZ C:0807;A=0?,2时钟 循环共249次,一个循环共需4个时钟周期,加上第一个赋值语句1周期。
我以前写的控制跑马灯的程序,有1s定时,也有中断,根据需要修改修改就可以了。
1、C语言的语句,就要更多。在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。
2、C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
3、C语言的延迟函数一般是利用无意义程序运行来控制时间从而达到延时的目的举个例子:for(i=0;ix;i++) for(j=0;j120;j++);这是延时x毫秒的for循环语句。值得注意的是记得最后的;一定得记得写。
4、Sleep中的第一个英文字符为大写的S ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep。
5、如果采用12Mhz的晶振,一条语句运行一次约为1us,你这个函数延时应该是Z ms,delay(10)就是10 ms,不是很精确。如果要写精确的延时函数,就要采用单片机中的定时器,很多单片机的书中都有讲到,可以去查相关资料。
6、_nop_(); // 直接当成一条语句使用,产生一条NOP指令NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。注:使用该函数时,需要将头文件#includeintrins.h包含进源文件中。