求51单片机10分钟延时程序

求51单片机10分钟延时程序,第1张

BITST DATA 20HTIME10MINOK BIT BITST1;10分钟的标志位TIMEL EQU 3CH ;50ms,定时器0时间常数TIMEH EQU B0HORG 0000H LJMP START ORG 0BH LJMP T0START: LCALL INIT LCALL DELAY SJMP $;上面是你的其他的程序;要想延时10分你是要调用DELAY即可T0: PUSH PSW MOV PSW,#10H MOV TH0,#TIMEH MOV TL0,#TIMEL INC R7 CJNE R7,#14H,T0IT1 MOV R7,#00H INC R6 CJNE R6,#3C,T0IT1 MOV R6,#00H INC R5 CJNE R5,#10,T0IT1 MOV R5,#00H SETB TIME10MINOKT0IT1: POP PSW RETIINIT: MOV TMOD,#00000001B ;定时器0工作方式1(位) MOV TH0,#TIMEH MOV TL0,#TIMEL</SPAN> SETB ET0 CLR TR0 SETB EA MOV PSW,#00H CLR TIME10MINOK RETDELAY: SETB TR0 JNB TIME10MINOK,DELAY RET END;;以上程序中请不要用R7,R6,R5这三个寄存器;因为定时器在使用,你只要判断TIME10MINOK;这个标志为当为1时就为10分到了。;DELAY就是10分的延时函数,通过判断TIME10MINOK;是否跳出DELAY,来达到10分延时;

这个是延时程序,你通过keil编译调试中,会看到其汇编代码;

当带入的参数=1时,你单步执行汇编代码,直至 ret,然后你看看都执行了哪些指令,并把所消耗的指令周期累加起来,大致就10个机器周期,而当单片机晶振为12MHz时,则一个机器周期约为 1uS,那么就是从进入这个延时程序到返回,所经历的时间正好是10uS;

如果是精确的话,需要用定时器,不是太精确的话,软件延时就可以。

假如12M晶振

void delay10s()

{

int i,j;

for(i=0;i<10000;i++)

for(j=0;j<120;j++);

}

void delay10s()

{

unsigned char i;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

i=200;

while(i--)

{

while(TF0==0);

TF0=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

}

DEL1S:MOV R7,#10\x0d\D1: MOV R6,#200\x0d\D2: MOV R5,#250\x0d\ DJNZ R5,$\x0d\ DJNZ R6,D2\x0d\ DJNZ R7,D1\x0d\ RET\x0d\\x0d\说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等\x0d\ 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5

以上就是关于求51单片机10分钟延时程序全部的内容,包括:求51单片机10分钟延时程序、单片机LED延时原理问题、编写一个延时10秒的程序单片机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9853009.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存