找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1076|回复: 6
收起左侧

51单片机设计东西,南北方向通行30秒,警告5秒,禁止35秒,东西或南北出现异常,该...

[复制链接]
ID:712014 发表于 2020-3-28 10:00 | 显示全部楼层 |阅读模式
汇编语言东西方出现异常,东西绿灯闪,南北红灯闪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
谢谢!

回复

使用道具 举报

ID:235200 发表于 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是寄存器
回复

使用道具 举报

ID:712014 发表于 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。
谢谢。
回复

使用道具 举报

ID:235200 发表于 2020-3-28 15:41 | 显示全部楼层
fxl1111 发表于 2020-3-28 14:02
延时程序是用到了R4,但这个异常中断好像没有用到R4啊,为什么要保护它?
MOV A,P1
PUSH ACC

是的,指令要求PUSH 和POP指令后是直接地址,所以只能用 PUSH ACC 或POP ACC
回复

使用道具 举报

ID:235200 发表于 2020-3-28 15:41 | 显示全部楼层
fxl1111 发表于 2020-3-28 14:02
延时程序是用到了R4,但这个异常中断好像没有用到R4啊,为什么要保护它?
MOV A,P1
PUSH ACC

POP ACC不能改为POP  A
回复

使用道具 举报

ID:712014 发表于 2020-3-30 07:51 | 显示全部楼层
csmyldl 发表于 2020-3-28 15:41
POP ACC不能改为POP  A

POP ACC不能改为A,那结尾的MOV P1,ACC能不能改为MOV P1,A。
回复

使用道具 举报

ID:712014 发表于 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。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表