标题: 51单片机设计东西,南北方向通行30秒,警告5秒,禁止35秒,东西或南北出现异常,该... [打印本页]

作者: fxl1111    时间: 2020-3-28 10:00
标题: 51单片机设计东西,南北方向通行30秒,警告5秒,禁止35秒,东西或南北出现异常,该...
汇编语言东西方出现异常,东西绿灯闪,南北红灯闪60秒
INT0:MOV A,P1
           PUSH ACC
           MOV B,R4
          MOV R2,#60
LINT0:MOV P1,#00010001B
            LCALL DELL500ms
           MOV P1,#00000000B
            LCALL DELL500ms
          DJNZ R2,LINT0
          MOV R4,B
           POP ACC
         MOV P1,ACC
      RETI
有两个疑问请教大家:MOV B,R4MOV R4,B这两句指令什么意思?
                                MOV A,P1MOV P1,ACC什么意思,MOV P1,ACC是不是应该改成MOV P1,A
谢谢!


作者: csmyldl    时间: 2020-3-28 11:25
从这个中断程序来看,MOV B,R4和MOV R4,B这两句在程序中完成了R4寄存器的保护功能,可能原因是:延时程序DELL500ms中用到了寄存器R4,为了不使R4寄存器中的数据丢失,因而进行保护
MOV A,P1和MOV P1,ACC什么意思,MOV P1,ACC是不是应该改成MOV P1,A
MOV A,P1是检测P1口状态,如按键,MOV P1,ACC是改变P1口指示,如LED灯
MOV P1,ACC是不是应该改成MOV P1,A: 可以改可以不改,ACC是A的地址, A是寄存器
作者: fxl1111    时间: 2020-3-28 14:02
csmyldl 发表于 2020-3-28 11:25
从这个中断程序来看,MOV B,R4和MOV R4,B这两句在程序中完成了R4寄存器的保护功能,可能原因是:延时程序DELL ...

延时程序是用到了R4,但这个异常中断好像没有用到R4啊,为什么要保护它?
MOV A,P1
PUSH ACC
结尾POP ACC
      MOV P1,A
可不可理解为将中断前的p1状态保存,出栈后,再将中断前的p1状态还给p1。所以结尾的ACC可以改成A。
谢谢。
作者: csmyldl    时间: 2020-3-28 15:41
fxl1111 发表于 2020-3-28 14:02
延时程序是用到了R4,但这个异常中断好像没有用到R4啊,为什么要保护它?
MOV A,P1
PUSH ACC

是的,指令要求PUSH 和POP指令后是直接地址,所以只能用 PUSH ACC 或POP ACC
作者: csmyldl    时间: 2020-3-28 15:41
fxl1111 发表于 2020-3-28 14:02
延时程序是用到了R4,但这个异常中断好像没有用到R4啊,为什么要保护它?
MOV A,P1
PUSH ACC

POP ACC不能改为POP  A
作者: fxl1111    时间: 2020-3-30 07:51
csmyldl 发表于 2020-3-28 15:41
POP ACC不能改为POP  A

POP ACC不能改为A,那结尾的MOV P1,ACC能不能改为MOV P1,A。
作者: fxl1111    时间: 2020-3-30 07:53
csmyldl 发表于 2020-3-28 15:41
是的,指令要求PUSH 和POP指令后是直接地址,所以只能用 PUSH ACC 或POP ACC

这个是不能用A。只能用ACC进出栈。那结尾的MOV P1,ACC能不能改为MOV P1,A。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1