51单片机延迟程序(汇编语言)解析
DLY1S:MOV35H,#255MOV36H,#0MOV37H,#4DLYB:NOPDJNZ35H,DLYBDJNZ36H,DLYBDJNZ37H,DLYBRET在这个...
DLY1S: MOV 35H, #255
MOV 36H, #0
MOV 37H,#4
DLYB: NOP
DJNZ 35H, DLYB
DJNZ 36H, DLYB
DJNZ 37H,DLYB
RET
在这个程序中36H被赋值为0,那减1循环能实现不??假设采用12M晶振,则整个定时程序定时为多少?? 展开
MOV 36H, #0
MOV 37H,#4
DLYB: NOP
DJNZ 35H, DLYB
DJNZ 36H, DLYB
DJNZ 37H,DLYB
RET
在这个程序中36H被赋值为0,那减1循环能实现不??假设采用12M晶振,则整个定时程序定时为多少?? 展开
5个回答
展开全部
DJNZ指令是先减一再判断结果是不是为0,所以36H赋值0是可以的,标识要循环256次.
延时计算:
12M的晶振换算指令周期为1uS
MDLY1S: MOV 35H, #255 ;2uS
MOV 36H, #0 ;2uS
MOV 37H,#4 ;2uS
DLYB: NOP ;1us
DJNZ 35H, DLYB ;2us,第一次循环为255*(1+2)=765,以
;后为256*(1+2)=768
DJNZ 36H, DLYB ;2us 765+(255*768)+(2*256)=197119
DJNZ 37H,DLYB ;2us 197119+(197122*3)+(2*4)=788493
RET ;2us
所以,从进入函数开始到返回调用地址总的延时时间为: 2+2+2+788493+2 = 788501us
延时计算:
12M的晶振换算指令周期为1uS
MDLY1S: MOV 35H, #255 ;2uS
MOV 36H, #0 ;2uS
MOV 37H,#4 ;2uS
DLYB: NOP ;1us
DJNZ 35H, DLYB ;2us,第一次循环为255*(1+2)=765,以
;后为256*(1+2)=768
DJNZ 36H, DLYB ;2us 765+(255*768)+(2*256)=197119
DJNZ 37H,DLYB ;2us 197119+(197122*3)+(2*4)=788493
RET ;2us
所以,从进入函数开始到返回调用地址总的延时时间为: 2+2+2+788493+2 = 788501us
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种32位的微控制器,由意法半导体(STMicroelectronics)公司设计和生产。STM32是一种非常常见的嵌入式系统芯片,广泛应用于物联网、汽车、工业控制、医疗设备等领域。STM32具有以下特点:1. 体积小巧:STM...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
DLYB: NOP
DJNZ 35H, DLYB
35H中为255这块会执行255次 每次三个机器周期
3us
DLYB: NOP
DJNZ 35H, DLYB
DJNZ 36H, DLYB;他会执行256次且每次都包含上一层循环,但是此次的上层循环每次执行的是256次而不是255次因为他是从0开始减的。0-1=255;
DJNZ 37H,DLYB这句执行四次,每次又将前面的两层循环包含在里面
所以粗略的计算延时总计为:3*256*256*4=786432us 也就是大概787毫秒
DJNZ 35H, DLYB
35H中为255这块会执行255次 每次三个机器周期
3us
DLYB: NOP
DJNZ 35H, DLYB
DJNZ 36H, DLYB;他会执行256次且每次都包含上一层循环,但是此次的上层循环每次执行的是256次而不是255次因为他是从0开始减的。0-1=255;
DJNZ 37H,DLYB这句执行四次,每次又将前面的两层循环包含在里面
所以粗略的计算延时总计为:3*256*256*4=786432us 也就是大概787毫秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
减一循环能实现,12M晶振定时为788493uS,我是在keil上试的一下哈,我也不会算这个时间,不记得每条指令需要的始终周期了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DJNZ指令是先减一再判断结果是不是为0,所以36H赋值0是可以的,标识要循环256次.
延时计算:
12M的晶振换算指令周期为1uS
MDLY1S:
MOV
35H,
#255
;2uS
MOV
36H,
#0
;2uS
MOV
37H,#4
;2uS
DLYB:
NOP
;1us
DJNZ
35H,
DLYB
;2us,第一次循环为255*(1+2)=765,以
;后为256*(1+2)=768
DJNZ
36H,
DLYB
;2us
765+(255*768)+(2*256)=197119
DJNZ
37H,DLYB
;2us
197119+(197122*3)+(2*4)=788493
RET
;2us
所以,从进入函数开始到返回调用地址总的延时时间为:
2+2+2+788493+2
=
788501us
延时计算:
12M的晶振换算指令周期为1uS
MDLY1S:
MOV
35H,
#255
;2uS
MOV
36H,
#0
;2uS
MOV
37H,#4
;2uS
DLYB:
NOP
;1us
DJNZ
35H,
DLYB
;2us,第一次循环为255*(1+2)=765,以
;后为256*(1+2)=768
DJNZ
36H,
DLYB
;2us
765+(255*768)+(2*256)=197119
DJNZ
37H,DLYB
;2us
197119+(197122*3)+(2*4)=788493
RET
;2us
所以,从进入函数开始到返回调用地址总的延时时间为:
2+2+2+788493+2
=
788501us
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询