单片机程序中SJMP $指令怎样用?
SJMP $ 意思即跳转到本指令的起始位置开始执行,这样就变成了循环执行,即原地跳转,一般用来等待中断。
但是本指令也不宜滥用。这是一条死循环指令,如果系统的中断是开放的,那么SJMP $指令实际上是在等待中断,当有中断申请后,CPU 转至执行中断服务程序。
中断返回时,仍然返回到这条死循环指令,继续等待中断,而不是返回到该指令的下一条指令。这是因为执行SJMP $后,PC 仍指向这条指令,中断的断点就是这条指令的首字节地址。
51单片机指令。
功能:短转移(Short Jump)
格式:SJMP rel ;
作用: PC <-PC+2 , PC <-PC+rel短转移指令(-128—+127范围内的转移指令)。
短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。
因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel(操作码 地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。
扩展资料:
单片机指令系统:
MCS-51共111条指令。
指令分类:
1、按指令所占的字节来分:
(1)单字节指令(49条) 如MOV A,R2,(机器码11101010)
(2)双字节指令(46条) 如MOV A,#0BH,(机器码74H,0BH)
(3)三字节指令(16条) 如MOV 0BH, #0BH ,(机器码75H,0BH,0BH)
2、按指令的执行时间来分:(1个机器周期为12个时钟周期)
(1) 1个机器周期(64条) ,如MOV A,R2 MOV A,#0BH,
(2) 2个机器周期(45条) ,如MOV 0BH, #0BH
(3) 4个机器周期(2条) ,乘、除指令。
指令格式:
一、按操作码和操作数分。
1、操作码:用来规定指令进行什么操作。
如MOV A,#0BH,(机器码74H,0BH)
其中74H为操作码,指明“将立即数送入ACC”这种操作;
2、操作数:则是指令操作的对象,有可能是数据,也可能是地址。
如MOV A,#0BH,其中#0BH为操作数。
有单字节指令、双字节指令、三字节不同长度的指令,格式不同:
(1)单字节指令:操作码、操作数同在一个字节中。
(2)双字节指令:操作码+操作数。
(3)三字节指令:操作码+操作数+操作数。
二、按助记符和操作数分:
操作助记符[目的操作数,源操作数]
如MOV A,#0BH,(机器码74H,0BH),其中:
(1)MOV为操作助记符, 指明“内部数据传送”这种操作;
(2)A为目的操作数,指明“数据传送的目的寄存器”是A;
(3) #0BH为源操作数。
参考资料来源:百度百科-单片机指令
参考资料来源:百度百科-SJMP
sjmp 短距离跳转指令,可前跳127或后跳127字节, 指令共两个字节 多用于程序空间不够用和提高速度时 但要注意是跳转 点太远编译时就会报错
ajmp 中距离跳转指令,可前跳2K或后跳2K字节, 指令共两个字节 多用于程序空间不够用和提高速度
ljmp 长距离跳转指令,可前跳64K或后跳64K字节, 指令共3个字节 可以任意应用.
sjmp $ 就是跳到此处,也就是原地踏步,是个死循环。让程序停在此处。
单片机上机考试,河北工业大学 大三
M.MCS—51的串行口工作方式中适合多机通信的是B。方式3 。MCS—51的串行数据缓冲器SBUF用于B。存放待发送或已收到的数据 。M.MCS—51的立即寻址的指令中,立即数就是B。放在程序中得常数。M.MCS—51的立即寻址方式中,立即数前面D。应加前缀“#”号。M.MCS—51的片内外的ROM是统一编址的,如果端保持高...
基于MCS-51单片机的数字时钟系统设计
掉电模式可以通过硬件复位和外部中断退出。复位重新定义了SFR 的值,但不改变片上RAM 的值。在VCC未恢复到正常工作电压时,硬件复位不能无效,并且应保持足够长的时间以使晶振重新工作和初始化。表6 空闲模式和掉电模式下的外部引脚状态模式程序存储器ALE PSEN PORT0 PORT1 PORT2 PORT3空闲内部1 1 数据数据数据...
急求高手解决51单片机串行口3机通信的问题!!!
你的主机第一字节发送的是02H或03H,从机在收到后 CJNE A,#01,LOOP就回去了,主机就一直等从机回复了,从机就等主机发下一次,死锁了。程序调通后,主机控制也应加个超时限制,防止实际使用时出现干扰,接受不到信息时死机。另外建议将CASE1和CASE2合并,MOV SBUF, #03H改为MOV SBUF,A,在...
RTX51 Tiny的原理
该值可以在CONF_TNY.A51配置文件中修改。附注:l可以在RTX51的定时滴答中断里追加自己的代码。参见CONF_TNY.A51 配置文件。l关于RTX51 Tiny如何使用中断可以参考概述中中断一节的叙述。 RTX51 Tiny本质上是一个任务切换器,建立一个RTX51 Tiny程序,就是建立一个或多个任务函数的应用程序。下面的信息...
有谁有单片机原理的试题
http:\/\/wenku.baidu.com\/view\/1c53c27ca26925c52cc5bfe8.html 看看这里吧很多的
高分求课程设计:利用D\/A芯片实现电机转速控制
电机变速一般都是直流电机,所以电压是改变电机速度的办法,只能一步一步的实验才行,仅仅靠理论是不行的
如何编写程序将片内RAM20H、21H、22H单元的内容存入片外RAM20H、21H...
将片内RAM的20H,21H,22H单元的内容依次存入片外RAM的20H,21H,22H中:MOV R0,#20H MOV R1,#03H;用于控制循环次数 MOV DPTR,#20H LOOP:MOV A, @R0 MOVX @DPTR , A INC R0;片内RAM地址加一 INC DPTR;外部RAM地址加一 DJNZ R1,LOOP;未循环完3次,跳回继续移数值 SJMP $;...
如何编写程序将片内RAM20H、21H、22H单元的内容存入片外RAM20H、21H...
将片内RAM的20H,21H,22H单元的内容依次存入片外RAM的20H,21H,22H中:MOV R0,#20H MOV R1,#03H;用于控制循环次数 MOV DPTR,#20H LOOP:MOV A, @R0 MOVX @DPTR , A INC R0;片内RAM地址加一 INC DPTR;外部RAM地址加一 DJNZ R1,LOOP;未循环完3次,跳回继续移数值 SJMP $;...
编程将片内RAM中30H到3FH单元全部清0(利用循环转移指令)
编程将片内RAM中30H到3FH单元全部清0(利用循环转移指令),主要考察单片机原理。代码如下:ORG 0000H SJMP MAIN MAIN: CLR A MOV R0, #30H MOV R2, #16 LOOP:MOV @R0, A INC R0 DJNZ R2, LOOP SJMP END
施非维可: $ 代表本指令的地址 sjmp $ 就是跳到此处,也就是原地踏步,是个死循环.让程序停在此处.
巴州区19517694898: 单片机,中断程序中结尾会有《SJMP $>是什么意思有什么用啊 - ?
施非维可: 是原地跳转指令 的确是死循环,所以可以不用,一般用来等待中断 如果有中断会转到中断程序运行,否则原地跳转 这条指令应该在主程序里,不会在中断程序里吧
巴州区19517694898: 关于单片机里的SJMP $,知道的请进 - ?
施非维可: SJMP $是在原地循环,一般都用在等待中断到来,然后进入中断处理程序. 处理完了,再继续在原地循环.比如你的手机现在不用了,估计也在这里循环,你按下键,它就当是有中断 来了,就去处理,处理完了,它又开始循环等待你的操作了.END是每个程序必须写的指令,如果你的程序走到了这条指令就停下来了. 一般的程序是不会让它走到这条指令的,因为走到了就结束了,不能去处理 你的实时中断了.
巴州区19517694898: 51单片机汇编语言中 SJMP $ 是什么意思 - ?
施非维可: 就是一个无限循环 SJMP是个短跳转 $就是当前指令的起始地址
巴州区19517694898: 单片机中 为什么要用SJMP $ - ?
施非维可: 单片机运行到 SJMP $ 时就原地踏步,不再往下执行,也就是死循环.一般主程序的最后一句就是SJMP $,然后往下就是子程序,包括中断处理程序.
巴州区19517694898: HERE:SJMP HERE - ?
施非维可: HERE:SJMP HERE这条指令的意思是跳到here这个标号下的程序里执行但是这个标号下面只有这个跳转指令也就是说,单片机执行到这里的时候它反复的在这里跳,不往下执行了一般也可以这样写,sjmp $ 所以一般写在程序结尾就像C里面的while(1);一样防止程序跑飞,就在结尾让程序陷入死循环.中断的话用这句就是为了让单片机在这里等待中断.欢迎追问
巴州区19517694898: 汇编语言中ret和SJMP $有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用RET呢?? - ?
施非维可: RET 是子程序返回指令,运行到RET时将从堆栈中弹出调用时的地址值给程序计数器PC. SJMP $是转移到前地址的指令,是原地等待的死循环,只有中断可以跳出,中断结束后仍然会回到这里死循环. 有些程序结束时用到SJMP $是因为该单片机主要依靠中断完成各项功能控制,主程序就处于死循环状态,如果没有的话,那么单片机就会陷入混乱状态了,因为程序不知道飞到哪里去了,尽管有 中断时也可以执行中断,但一旦结束中断,程序又乱执行了,所以程序不可控,这也是这句语句所起的作用.
巴州区19517694898: 一个单片机程序中有可以几个SJMP $ - ?
施非维可: 一个单片机程序中有可以使用无数条 SJMP $ 指令 没有数量上的限制 SJMP $ 指令的含义就是一条相对转移指令 自己还转移到自己的这条指令上 即为暂停 等待系统中的中断响应. 呵呵 满意 就选满意回答
巴州区19517694898: 单片机HERE:SJMP HERE指令 - ?
施非维可: 就是原地踏步走. 一般指主程序暂时无事可做时,就这样做一个原地踏步的动作,等同于指令 SJMP $ 原地踏步的动作通常是一些简单的程序、或者教学用的演示程序采用这种程序动作
巴州区19517694898: 单片机编程中,END\AJMP $\SJMP $,有什么区别? - ?
施非维可: 个人觉得最好用的是ljmp,因为它是长转移,所以无论程序在何处,都可以跳到你要的地方,同样lcall也是非常好用,它是长调用子程序,也是无论程序执行到何处,遇到它都可以调内存里任何一个位置子程序 所以我用最简单的一句话告诉你,在你需要跳转的时候就用ljmp,在你需要调程序的时候就用lcall