
你好!
你要先写一个延时基准(50毫秒),在延时1秒就是做20次基准,2秒就是40个基准!
也可以用定时器,定时50毫秒,定时器中断计数,计数20就是1秒,计数40次就是2秒(推荐用定时器!)
仅代表个人观点,不喜勿喷,谢谢。
DELAY1S: MOV R0,#10H
LOOP0:LCALL DELAY
DJNZ R0,LOOP0
RET
DELAY:MOV R6,#0C8H; 外循环 200 次
LOOP1:MOV R7,#0F8H; 内循环 248 次
NOP
LOOP2:DJNZ R7,LOOP2; 延时2 μs×248=496 μs
DJNZ R6,LOOP1; 延时 500 μs×200=100 ms
RET
将上面函数调用两次就可以啦
通过调用这个子程序就可以实现
DEL1S: MOV R1,#10
DEL1: MOV R2,#100
DEL2: MOV R3,#250
DEL3: DJNZ R3,DEL3 ;2225010010=1000000us
DJNZ R2,DEL2
DJNZ R1,DEL1
RET
没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间
最好的方式是使用定时器中断来做延时,更精确
1循环延时的方法
DELAY: ;误差 0us
MOV R7,#25H
DL1:
MOV R6,#9AH
DL0:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
不过这不实用。40MS时间单片机都 在这里循环,不作能它事。
1可以用定时中断的方法:
ORG 0000H
LJMP START
ORG 000BH
LJMP Timer0Interrupt
START:
MOV SP,#60H
LCALL InitTimer0
LOOP:
;add your code here!
LJMP LOOP
InitTimer0:
MOV TMOD,#01H
MOV TH0,#63H
MOV TL0,#0C0H
SETB EA
SETB ET0
SETB TR0
RET
Timer0Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH0,#63H
MOV TL0,#0C0H
;========================
;add your code here!
;========================
POP ACC
POP DPL
POP DPH
RETI
END
以上就是关于单片机 延迟一秒程序怎么写延迟2秒我是初学者,想请教一下。全部的内容,包括:单片机 延迟一秒程序怎么写延迟2秒我是初学者,想请教一下。、单片机汇编 只有1s延时子程序 怎么延时2s..不能改变子程序。、单片机51软件延时1s 晶振6M的编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)