你是刚学习单片机吗?
对于Ljmp和Ajmp 只是寻址范围稍有区别 前者为长转移指令 后者是绝对转移指令,后者范围转移范围在同一个2K字节空间以内,一般没有太大的区别。程序写的较短较密的用后一个就可以。
还有哦
你的程序中有几个错误
T0的入口地址可是000Bh
堆栈指针是C51中已经定义好的专用指针,用于暂存一些有用变量中的内容
20次循环为14h
还有中断返回带乱返回到等待区就好,表示继续执行同样的程序,这样才能循环1S的方波
建议你可以看看你的教材 上面应该都有介绍的。
《单片机原理及应用教程》 第2版 机械工业出版社
这本书是我学过的教材,我觉得挺实用的,你可以参考一下上面107页的程序。
下面是我给你改过的程序 可以参考一下哦!
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP PART1
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#0AH
MOV IE,#82H;这个和你的按位启动是一样效果
SETB TR0
SJMP $
PART1:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,FANHUI
CPL P1.0
MOV R7,#0AH
FANHUI:
RETI
end
其实堆栈指针在51系列中已经定义好了一段区域,最多用于子程序中,例如你在主程序中用了寄存器R1,而且其值弊汪在你主程序的其他位置还有用,而且你需要用到一个跳转指令在子程序中进行操作,怕在子程序中也要用到R1,那么先蠢卜档用堆栈将R1的值暂存起来,等完成子程序得时候再退栈,这样原来的R1中的值将不会被破坏。这里还要注意哦,堆栈是顺序操作的,它是后进先出原则哦,这个你可以参考一下C语言。
看来楼主需要系统的总结下了:)
正确区分LJMP、AJMP、SJMP、JMP指令
无条件转移指令(共4条)
LJMP addr16 ; PC〈—— addr16
AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11
SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel
JMP @A+DPTR ; PC〈—— A+DPTR
第一条指令称为长转移指令(Long Jump);
第二条指令叫作绝对转移指令(Absolute Jump);
第三条指令称作短转移指令(Short Jump);
第四条指令是变址寻址转移指令(伏团散转指令)。
显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。
(1)长转移指令(64KB范围内转移指令)
长转移指令为三字节,双周期指令。
长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移喊衡的指令。
(2)绝对转移指令(2KB范围内的转移指令)
绝对转移指令是一条双字节,双周期指令。
11位地址addr11(a10—a0)在指令中的分布是:
a10 a9 a8 0 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作码。
绝对转移指令执行时分为两步:
第一步是取指令操作,缺渗橘程序计数器PC中内容被加1两次;
第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目标转移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
其中,a10—a0的地址范围是全“0”——全“1”。因此,绝对转移指令可以在2KB范围内向前或向后跳转。
如果把单片机64KB寻址区分成32页(每页2KB),则PC15—PC11(00000B—11111B)称为页面地址(即:0页—31页),a10—a0称为页内地址,但应注意:AJMP指令的目标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。
例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故目标转移地址必在3000H—37FFH这2KB区域中,切记!
(3)短转移指令(-126—+129范围内的转移指令)
短转移指令是一条双字节,双周期指令。
短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,指令码格式为:80H rel(操作码 地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量。
(4)变址寻址转移指令(常用于实现分支程序转移)
变址寻址转移指令是一条单字节,双周期指令。
在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR,目标转移地址对基地址的偏移量放在累加器A中。在指令执行时,MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中。
通常,DPTR中基地址是一个确定的值,常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移。
哇,一楼真的细心,加个好有
动画效运渣仿定时槐悄喊器原理,生动有铅野趣