ZKX's LAB

汇编语言循环延时子程序的原理 麻烦分析一下这段汇编语言代码——延时子程序,急!我们搞课程设计

2021-04-05知识5

汇编语言编写一段延时1000个指令周期的子程序 要求编写延时子程序,就不要使用定时器;也不要用C语言,因为C语言的执行时间,并不确定。用汇编语言,是最简单、准确的。51单片机的程序如下:DL1000:MOV R7,#248 DJNZ R7。

51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算过程以及详细说明, 如果单纯延时,可以用实验的办法,在keilc51里面仿真void Delay1S(char n){char i,j;n=n*4;for;n;n-){for(i=6;i;i+){for(j=7;j;j+)/一个循环e68a84e8a2ad7a686964616f31333335306265约为1mS}}}看编译后的汇编:C:0x0805 7D01 MOV R5,#0x06;j=1,1时钟C:0x0807 0D INC R5;j+,1时钟C:0x0808 ED MOV A,R5;A=R5,1时钟C:0x0809 70FC JNZ C:0807;A=0?2时钟循环共249次,一个循环共需4个时钟周期,加上第一个赋值语句1周期。共997uS,加上外层循环,一次约1mS,如果要精确的延时建议采用中断:include\"reg51.htimer initvoid initTimer(void){TMOD=0x2;TH0=0x6;TL0=0x6;}int T250uS;char T_mark;timer0/counter0 interruptvoid timer0(void)interrupt 1{add your code here.T250uS+;T_mark=0;}void Delay1S(char n){for;n;n-)for(T250uS=0;T250uS;{T_mark=1;while(T_mark);}}the main funvoid main(void){initTimer();TR0=1;ET0=1;EA=1;while(1){Delay1S(1);}}

求解释!!!汇编语言:延时程序 需要注意zhidao的一点就是DJNZ指令是2周期的,所以你的时间是循环次数乘以2.DELAY:MOV R7,回#250DEL1:MOV R6,#100DEL2:MOV R5,#10DJNZ:R5,$;2个机器周期DJNZ:R6,DL2DJNZ R7,DL12*10*100*250=500000us=0.5s以上时间只是大概值,没有考答虑其它指令的周期,但影响不大。

#汇编语言循环延时子程序的原理

随机阅读

qrcode
访问手机版