求51单片机 延时1秒钟的子程序(没什么要求)

求51单片机 延时1秒钟的子程序(没什么要求),第1张

如果是11.0592MHz的晶振,那么程序是:

void delay(uint xms)

{

int i,j

for(int i=xmsi>0i--)

for(j=148j>0j--)

}

delay(1)是延时1ms,所以延时一秒就是delay(1000)

还有不懂的可以继续问

DELAY1S:

MOV R2,#10

DLY1:

MOV R3,#200

DLY2:

MOV R4,#248

DJNZ R4,$

DJNZ R3,DLY2

DJNZ R2,DLY1

RET

用中断,定时器工作方式1,计数最大数为65536,那么从15536开始计数,达到65536要计50000次,6M的晶振机器周期为2微秒,那么溢出一次耗时为100000微秒,计数溢出10次即为1秒钟

ORG 000BH

AJMP TIME0

ORG 30H

MAIN:

MOV 30H,#00H先把30H地址的数据清零,用做给溢出计数用

MOV TMOD,#00000001B

MOV TH0,#3CH

MOV TL0,#0B0H

SETB EA

SETB ET0

SETB TR0

LOOP:AJMP LOOP

TIME0:PUSH ACC

PUSH PSW

INC 30H进入中断后就自增

MOV A,30H

CJNE A,#10,T_RET看计数器的溢出到了10次没,没有就跳到T_RET再继续从15536计数

T_L1:延时1秒到了,写自己的程序吧。

MOV 30H,#00H记得把溢出计数器再次清零

T_RET:MOV TH0,#3CH

MOV TL0,#0B0H

POP PSW

POP ACC

RETI

END


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

原文地址: http://outofmemory.cn/yw/11505323.html

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

发表评论

登录后才能评论

评论列表(0条)

保存