单片机SJMP START和SJMP $能互换吗?互换后有什么结果?
作者&投稿:御面 (若有异议请与网页底部的电邮联系)
不要容易死机,因为单片机的程序是一直在走,走到最后一条就乱了,俗称“跑飞”,外表看起来就死机了。
SJMP $是在原地循环,一般都用在等待中断到来,然后进入中断处理程序。
处理完了,再继续在原地循环。
比如你的手机现在不用了,估计也在这里循环,你按下键,它就当是有中断
来了,就去处理,处理完了,它又开始循环等待你的操作了。
END是每个程序必须写的指令,如果你的程序走到了这条指令就停下来了。
一般的程序是不会让它走到这条指令的,因为走到了就结束了,不能去处理
你的实时中断了。
$---->在汇编中当作地址计数器,当它用在指令中时代表当前该条指令的所在位置的PC值,因此
SJMP $表示自己转到自己了,属无限循环,在单片机中常用该指令作挂起使用.下面是有关$的一种应用比较多的情况,如:
DELAY:
MOV R6,#20
MOV R7,#250
DJNZ R7,$ ;R7减1不为0则自循环
DJNZ R6,$-4 ;R6减1不为0则由此向上跳4个单元,因为DJNZ,MOV指令占两个字节,所以
;会转到MOV R7,#250处,这样就省去了定义标号的麻烦了.
RET
只有一种情况下可以互换如下:
START:SJMP $
START:SJMP START
SJMP START是转移到START这个标号的地址执行
SJMP $是转移到当前地址执行
不能,SJMP START是跳转到START这个标号的位置.
SJMP$是跳转到当前指令,像当于C语言中的while(1).
两个不同的含义,位是当使用START:SJMP START 这个时,应该含义相同.
$是汇编当前值的符号
柏武甘氨: 单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波, 以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,假设晶振频率为 12MHz,用汇编语言编程如下: ORG 0000HSJMP STARTORG 001...
裕民县18773465498: 单片机指令中长转移LJMP,短转移SJMP和绝对转移AJMP还有JMP到底有什么区别 - ?
柏武甘氨: 跳的距离不一样,SJMP,AJMP,LJMP就像立定跳、跑跳和三步跳,其实写程序时,只要写JMP就可以了,keil编译时让它自己做,我们不必理会它是具体哪一个.
裕民县18773465498: 有关单片机中断的问题.单片机返回到SJMP $之后是不是就一直死循环了啊?那不是没办法继续输出方波 - ?
柏武甘氨: 单片机中断, 在程序中 开启中断后,不管主程序运行到什么 位置,只要有 中断触发 就会进入中断 运行中断服务程序,上例 50 mS 中断 P2.3 取反,产生周期 100 mS 连续方波,没有问题.在主程序 中没有 其它任务需要处理 用 SJMP $ 原地循环语句 也没有问题.SJMP $ ; 原地等待,有中断 执行 中断服务程序,中断结束 返回这里.
裕民县18773465498: 89s52单片机,要求独立键盘实现按键控制发光二极管的点亮和熄灭(汇编语言) - ?
柏武甘氨: START:ORL P1, #01H ; 准备读入P1.0的引脚信号 MOV C, P1.0 ; 读入的P1.0信号暂存于C JC NEXT ; 判断P1.0的信号是否为高,K是否闭合 SETB P1.1 ; K闭合,P1.1输出高电平,点亮发光二极管 SJMP START ; 转向START重新测试 NEXT:CLR P1.1 ; K断开,P1.1输出低电平,熄灭发光二极管 SJMP START ; 循环
裕民县18773465498: 单片机中SJMP与NJMP有什么区别? - ?
柏武甘氨: SJMP,是short jump 短跳转,跳转的范围是+-127,NJMP是判别某个寄存器为零时跳转,不为零是向下执行
裕民县18773465498: 单片机中定时器0以中断定时方式发生方波脉冲,P1.6脚输出,每1ms产生脉冲,脉冲宽度0.5ms,频率6MHZ汇编语 - ?
柏武甘氨: 500us中断一次,对P1.6引脚取反即可. ORG 0000H SJMP START ORG 000BH SJMP T0_INT START: MOV TMOD, #02H ;自动重新装入初始值方式 MOV TH0, #6 ;250*2=500us MOV TL0, #6 SETB TR0 ;启动T0 MOV IE, #82H ;开放中断 SJMP $ ;等待中断发生 T0_INT: CPL P1.6 RETI END
裕民县18773465498: 帮我分析一下这段单片机代码的意思,急急急! - ?
柏武甘氨: ORG 0000H ;定位主程序入口 LJMP START ;跳转到START ORG 0100H ;主程序开始地址 START: MOV SP,#60H ;堆栈栈顶为60H CLR A ;初值,第一次0 位LED 亮 START1: MOV P1,A ;第一个LED值送P1 ACALL DLTIME ;延时 INC ...
裕民县18773465498: 51单片机串口通迅为什么只能接收到两个字节 - ?
柏武甘氨: SETB ET1,这一句,应该删除.SJMP START,应该改为 SJMP $ 否则,你总是不停的重复初始化,那么,能收到两个字节,都是很奇怪的了.另外,程序中,缺少 RETI 指令.
裕民县18773465498: 单片机 简单程序 - ?
柏武甘氨: ORG 0000H SJMP START ORG 0100H START:MOV R0,#20H MOV R2,#00H LOOP: MOV A,@R0 JNZ NEXT INC R2 NEXT: INC R0 CJNZ R0,#51H,LOOP MOV 52H,R2 END 和1楼程序差不多只不过稍微规范点
裕民县18773465498: 简单单片机程序设计 15 - 25条最佳 外加流程图 - ?
柏武甘氨: LED_BIT_1 EQU 30H ; 存放8位数码管的段码 LED_BIT_2 EQU 31H LED_BIT_3 EQU 32H LED_BIT_4 EQU 33H LED_BIT_5 EQU 34H LED_BIT_6 EQU 35H LED_BIT_7 EQU 36H LED_BIT_8 EQU 37H ; 存放初始密码 SECOND EQU 60H ...