延时n(us)就是
void delay(unsigned int n)//延时1us*n
{
while(n--) _nop_();
}
?
那是不准的,要想很准,就直接是_nop_();就算
void delay(void)
{
_nop_();
}
也不是1us,
只有_nop_();是一个周期(12M为1us)
STC11F04E是1T,还是12T的,如果是1 T要12个_nop_();才是1us
怎样设置为1T?
追答不用设,STC11F40E本身就是1T的,串口和定时器要用1T 得要设,有专用寄存器来设置
单片机外接12M的晶振,1ms的基准延时函数用C语言怎么写?
名称:delay1ms 功能:延时1ms 晶振:12MHz 机器周期1us 时间计算:t=2+1+995+2=1000us =1.000ms ---*\/ LCALL DELAY1MS ;2us DELAY1MS:MOV R6,#5 ;1us DEL1: MOV R7,#98 ;1us DJNZ R7,$ ;2*98=196us DJNZ R6,DEL1 ;2us DLE1执行完所用时间(1+196+2)*5...
51单片机c语言延时函数 Void delay 1ms(unsigned int ms){un
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。void delay_ms(unsigned int ms_number) \/\/ ms延时函数 (AT89C51 @ 11.0...
51单片机1us延时c语言程序 while语句 晶振12MHZ
51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。include<reg51.h> include<intrins.h> main(){ _nop_(); \/\/延时1us while(1);}
...是刚开始学单片机,用的是51的片子,晶振是12MHz,
void delay(){;;} 大概就是1us了
如何用c语言实现单片机延时?
最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);} ...
单片机C语言编程中,编一个延时约1s的语句
每一遍,如果是1us,才能是延时约1s。但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。
C语言延时函数的一点问题
如果采用12Mhz的晶振,一条语句运行一次约为1us,你这个函数延时应该是Z ms,delay(10)就是10 ms,不是很精确。 如果要写精确的延时函数,就要采用单片机中的定时器,很多单片机的书中都有讲到,可以去查相关资料。
单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而执行了255次 假如你的晶振是12MHZ的 则你执行一个指令周期是1us 255次是0.255ms ...
单片机使用的晶体振荡器的频率是12MHz,运行下列延时程序的延时时间是多...
首先要明白,晶振12MHz时,机器周期1μs。MOV R7,#,指令周期1μs NOP,指令周期1μs DJNZ R,指令周期2μs RET,指令周期2μs 为计算程序执行时间,以注释形式给每条指令加上标号 DELAY: MOV R7,#250 ;1 LOOP2: MOV R6,#200 ;2 LOOP1:NOP ;3 NOP ;4 NOP...
单片机的c语言延迟函数
这里假定单片机是时钟频率为12MHz,则一个机器周期为:1us.参考了51单片机 Keil C 延时程序的简单研究后,我们可知道, 在Keil C中获得最为准确的延时函数将是void delay(unsigned char t){ while(--t);}反汇编代码如下:执行DJNZ指令需要2个机器周期,RET指令同样需要2个机器周期,根据输入t,...