汇编语言编写一段延时1000个指令周期的子程序

 我来答
做而论道
高能答主

推荐于2017-10-29 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8813万
展开全部
要求编写延时子程序,就不要使用定时器;
也不要用C语言,因为C语言的执行时间,并不确定。
用汇编语言,是最简单、准确的。
51单片机的程序如下:

DL1000:
MOV R7,#248
DJNZ R7,$
MOV R7,#250
DJNZ R7,$
RET

正好1000个机器周期。
R7,是8位寄存器,其最大数值是255,不能直接存入500。
梅谷1245
2010-09-25
知道答主
回答量:67
采纳率:0%
帮助的人:20万
展开全部
不同频率晶振的单片机指令周期不一样,假如指令周期是1us,1000个指令周期就是1000us=1ms就是写一个1ms的延时,最准确的方法用定时器,汇编写很麻烦的,要计算初值建议用c语言,初始化为
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
中断程序:
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
。。。。。。。;内部操作自己补上
}
这个程序不一定对的,更具自己要求再改动。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gcbjoy
2017-10-29 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2735万
展开全部
nop 指令空转3个时钟周期
mov cx,118   4个时钟周期
push         15个
pop          12个
loop          5个
ret          20个  


delay  proc
    push cx
    mov cx,118
@delay:
    nop
    loop @delay
    pop cx
    ret
    endp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiagang850625
2010-09-25 · TA获得超过161个赞
知道答主
回答量:98
采纳率:0%
帮助的人:99.9万
展开全部
这要根据你的晶振频率和每条指令的指令周期来编写,有的指令是1个机器周期,有的是2或4个……,你所说的1000个指令周期到底是多少?你想要延时多久,软件延时还是定时器延时?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
香瓜39
2010-09-25
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
MOV R7,#500
DJNZ R7,$
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式