永发信息网

单片机 汇编语言 求助。

答案:4  悬赏:50  手机版
解决时间 2021-04-13 13:33
假设系统时钟频率采用6MHz,要在P1.0上输出1个周期为2ms的方波。方波周期用定时器TO来确定即在TO中设置一个初值,在初值基础上进行技术,每隔1ms产生一次中断,cpu响应中断后,在P1.0处取反。TO中断处入口地址为000BH。程序如下:
ORG 0000H
RESET:AJMP MAIN
ORG 000BH
AJMP ITOP
ORG 0100H
MAIN: MOV SP,#60H
MOV TMOD,#01H
ACALL PTOMO
HERE: AJMP HERE
PTOMO:MOV TLO,#0CH
MOV THO,#0FEH
SETB TR0
SETB ET0
SETB EA
RET
ITOP:MOV TLO,#0CH
MOV TH0,#0FEH
CPL P1.0
RETI
谁给我解释下RET执行完执行哪一段程序啊,执行完RETI执行哪一段啊?这个RET,和RETI到底咋回事啊??看不懂这个程序,整个程序能否解释一下??高分
最佳答案
ORG 0000H ;汇编标志,伪指令,就是单片机不执行
;的,表示汇编时从程序地址0000H开始
RESET:AJMP MAIN ;跳转到MAIN
ORG 000BH ;同上,从000BH开始
AJMP ITOP ;跳转到ITOP,不要用LCALL
ORG 0100H ;继续伪指令...从0100H开始
MAIN: MOV SP,#60H ;堆栈从61H开始
MOV TMOD,#01H ; 定时器0在16位方式下工作
ACALL PTOMO ;调用PTOMO
HERE: AJMP HERE ;跳转到HERE
PTOMO:MOV TLO,#0CH ;这句打错了,是TL0
MOV THO,#0FEH ;也错了,是TH0
;这两句是给T0赋初值
SETB TR0 ;启动定时器T0
SETB ET0 ;允许T0中断
SETB EA ;中断使能
RET ;返回
ITOP:MOV TLO,#0CH ;和PTOMO的前两句是一样的
MOV TH0,#0FEH ;这个就打对了呢~~
CPL P1.0 ;P1.0取反
RETI ;中断返回

定时器的内容就看书吧~

RET
调用返回,弹出堆栈顶的两字节作为PC值,然后转向这个地址

RETI
中断返回,除了RET的功能外,还会改变一些其它寄存器的值,比如中断优先标志等等...

PC
指向当前执行语句的下一条语句

单片机执行一条指令可以分为两个阶段:取指令 、执行指令
在取指令阶段PC会自动增加,增加值为当前要执行指令字节数
跳转、调用、返回指令会在执行阶段改变PC内容

假设
ACALL这句地址为 0104H,
HERE为0106H,
PTOMO 为0108H,
ITOP为XXXXH

执行过程如下:

首先从0000H开始
AJMP MAIN 取指时PC=0002H 执行后PC=0100H,下一条执行MAIN

MAIN执行到MOV TMOD,#01H这句时 PC=0104H

到ACALL ... 的时候,先取指令,PC=0106H,再执行ACALL
ACALL执行时,先将PC值0106H压栈,然后将PC改为PTOMO这句的值,也就是PC=0108H

接下来到PTOMO这句,取指,PC增加,执行......直到RET

执行RET时,取指阶段后PC=XXXXH,然后执行时将0106H弹回PC

于是到HERE这句,取指,PC=0108H, 执行,将PC改为0106H

响应中断时,先将当前PC压栈,然后机器内部自动执行一条调用指令,执行000BH地址的指令

然后又是转移,去执行ITOP,直到RETI

如果单片机是在执行完HERE这句响应中断,会返回到HERE处
否则,也可能返回到PTOMO这句...

此外,我猜测,PTOMO、ITOP中的O可能也是0,不过这个就无所谓了~
================ 以上
全部回答
执行完RET返回到HERE,然后在HERE处死循环(等待中断),因为RET是子程序PTOMO的返回指令,ACALL PTOMO后当然执行下一条指令,即HERE:AJMP HERE;当定时时间到,执行中断响应程序ITOP,执行完后,RETI返回到中断处,这里一般会在HERE处。
ORG 0000H RESET:AJMP MAIN ORG 000BH;这是中断程序的入口地址,当产生中断时会将PC值变为此值执行下一句的AJMP ITOP但是我觉得用LCALL更好一些RETI是返回中断,返回后会将一些值POP,也就是出栈 AJMP ITOP ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#01H ACALL PTOMO HERE: AJMP HERE PTOMO:MOV TLO,#0CH MOV THO,#0FEH SETB TR0 SETB ET0 SETB EA RET ITOP:MOV TLO,#0CH MOV TH0,#0FEH CPL P1.0 RETI RET返回的是一般函数,压栈的值较少一些
ret执行完返回ACALL PTOMO的下一条指令,也就是HERE: AJMP HERE,此后单片机一直执行HERE: AJMP HERE 由于T0中断间隔是1MS,T0产生中断后执行完某次HERE: AJMP HERE后执行中断将P1.0取反,执行完后RETI返回HERE: AJMP HERE继续等待中断。这样每隔1MS中断一次P1.0取反一次。P1.0每隔两个中断就会输出一个高电平,就得到你想要的2MS的方波了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我觉得少女时代比Wonder girls漂亮又有实力,
杭州西湖区有没有寺庙之类场所
单选题Hedidn'tmentionanythingaboutthe
爆米花的 糖浆怎样做??求解
金立gn152怎么吧软件移到SD卡中
香烟的价格比烟草局零售价贵10块钱以内,违法
篮球怎么过,怎么把篮球抓起来啊?
爲什麽好友下線沒有提示啊
(780一480÷30)x45
什么东东祛痘好
单选题在今年日内瓦世界人权会议上,美国利用
客来顺美食城地址在哪,我要去那里办事
药品销售技巧和话术有哪些?
面镜重磨是什么意思算命时的说法
地下城进不去怎么办啊
推荐资讯
负数的补码与正数的补码怎么计算
圣诞节那天,济南哪个地方好玩啊?
DNF骨戒跟神兽是哪个深渊出?
南昌到湖口水路多少公里
手机G币如何购买?
表达青海美景的诗句,形容青海的句子
海星集团外汇短线交易长春客户服务中心地址在
4o硌锰钼淬火能达到多少度
(急)求答案
求卡巴斯基手机版8.0激活码
请问现在摩托车问题
怎么样走进水瓶座男孩的世界
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?