
求一个51单片机延时1秒的程序,用汇编!!
3个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
DEL1S:MOV R7,#10
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等
2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等
2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5

2021-01-14 广告
void delay(unsigned int x) //延时 x ms { unsigned int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } 延时1m...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
时钟频率为12MHz的一秒延时汇编代码(8051):机器周期T=(1/12M)*12=1us
因为一个机器周期=6个接拍、1个节拍=2个时钟周期,这是机器周期的定义。
ORG 1000H
MOV R5, #4
L3: MOV R6, #250 ;1T
L2: MOV R7, #200 ;1T
L1: NOP ;1T
NOP ;1T
NOP ;1T
DJNZ R7, L1 ;(1+1+1+2)*200T=1ms
DJNZ R6, L2 ;{1+2+(1+1+1+2)*200}*250T=250750us
DJNZ R5, L3 ;(3+250750)*4=1003012us=1.003012s
RET
END
仅供参考,期中R7可以设成256,误差会小点,这为了好算就设成200。
因为一个机器周期=6个接拍、1个节拍=2个时钟周期,这是机器周期的定义。
ORG 1000H
MOV R5, #4
L3: MOV R6, #250 ;1T
L2: MOV R7, #200 ;1T
L1: NOP ;1T
NOP ;1T
NOP ;1T
DJNZ R7, L1 ;(1+1+1+2)*200T=1ms
DJNZ R6, L2 ;{1+2+(1+1+1+2)*200}*250T=250750us
DJNZ R5, L3 ;(3+250750)*4=1003012us=1.003012s
RET
END
仅供参考,期中R7可以设成256,误差会小点,这为了好算就设成200。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果用6M晶振的话,一个机器周期为2*10(-6)s
那么1s=2*500000
2*500000=250*200*10
DELAY: mov r5,#10 ;延时子程序
D1: mov r1,#200
D2: mov r2,#250
djnz r2,$
djnz r1,d2
djnz r5,r1
ret
那么1s=2*500000
2*500000=250*200*10
DELAY: mov r5,#10 ;延时子程序
D1: mov r1,#200
D2: mov r2,#250
djnz r2,$
djnz r1,d2
djnz r5,r1
ret
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询