用汇编怎么写51单片机的延时程序

延时n微秒怎么写是不是还要考虑晶振,哪位可以给我详细讲讲,以前给分太多了,任何问题都是几十分,现在只两分了,HEHE.怎么我看用汇编写单片机程序要考虑延时计算,定时器计数... 延时n微秒怎么写是不是还要考虑晶振,哪位可以给我详细讲讲,以前给分太多了,任何问题都是几十分,现在只两分了,HEHE.怎么我看用汇编写单片机程序要考虑延时计算,定时器计数器,串口,中断这么多因素是不是汇编开发效率没C高,指的就是这些原因?书上就只有延时程序,没注释没说明看不懂!自学单片机问题真多啊! 展开
 我来答
大别山的蜗牛
高粉答主

2016-01-12 · 一只互联网搬运的蜗牛
大别山的蜗牛
采纳数:6928 获赞数:12024

向TA提问 私信TA
展开全部
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
哈尔滨单片机
2010-10-17 · 超过13用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:28.3万
展开全部
假定晶振是12M的 CPU AT89X51
MOV R0,#10 这条是1us (一个机器周期)执行1次 1us
DJNZ R0,$ 这条是两us(两个机器周期)执行10次*2=20us
一共 1us+20us=21us
也就是 总的时间=1us+2*r0(us)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fmh0813
2010-10-17
知道答主
回答量:28
采纳率:0%
帮助的人:23.9万
展开全部
呵呵,我大概给你说说吧,例如MOV指令,执行这条指令需要一个机器周期。DJNZ指令,执行这条指令需要2个机器周期。(一机器周期=1微秒)。
你要是用定时器工作的话需要先定义一下TMOD TH TL的数值 这个就用到晶振了了。要先看多少晶振,假如6MHZ,就用12除6,得出来的是2毫秒。在利用计算公式算出你需要的延时时间。(计算公式我没记住。呵呵,你可以在书上看看,应该有的)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d27b829
2010-10-17 · TA获得超过113个赞
知道答主
回答量:32
采纳率:0%
帮助的人:11.8万
展开全部
和前两位的差不多,最简单的就是运用MOV赋值的,再用DJNZ递减的方式,计算出每条指令执行时间,再加上循环字数,延时时间按照你自己的时间编写循环次数和赋值大小;另外,你也可以用定时器编写,计算好你的延时时间,当时间达到时输出高电平,作为中断信号,返回主程序,执行设定延时后的目标程序。
汇编和C各有好处,就我个人而言,浮点数的计算最好用C编,汇编不好解决,而且需要的很多代码,C很容易就可以实现!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shihoumacili
高粉答主

2015-12-24 · 每个回答都超有意思的
知道大有可为答主
回答量:1.1万
采纳率:87%
帮助的人:489万
展开全部
单片机汇编实现延迟的程序代码:
DELAY: MOV R7,#250 ;
D1: MOV R6,#250 ;
D2: DJNZ R6,D2 ;
DJNZ R7,D1 ;
RET

冒号前面的“DELAY”、“D1”、“D2”为语句行的名字,是为了程序的条件语句跳转用的,分号后面为注释,计算机执行时将过滤掉这些信息,最大限度减少代码长度,提高效率。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式