找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5829|回复: 4
打印 上一主题 下一主题
收起左侧

求助:请帮忙分析一下程序

[复制链接]
跳转到指定楼层
楼主
ID:8896 发表于 2009-4-21 23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG 0000H ;程序功能平时8个LED闪烁,外中断0时左移流水灯3次
LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 0030H
MAIN:     MOV IE,#81H
             CLR IT0
             MOV SP,#70H
START:  MOV P1,#0FFH
             LCALL DELAY
             MOV P1,#00H
             LCALL DELAY
             LJMP START
EXT0:    PUSH ACC
             PUSH PSW
             CLR RS0   ;更换工作寄存器组
             SETB RS1

             MOV R1,#3
LOOP:    MOV A,#0FEH
LOOP1:  MOV P1,A
             LCALL DELAY
             RL A
             CJNE A,#0FEH,LOOP1
             DJNZ R1,LOOP
             POP ACC
             POP PSW
             RETI
DELAY:  MOV R5,#2
L1:        MOV R6,#0
L2:        MOV R7,#0
             DJNZ R7,$
             DJNZ R6,L2
             DJNZ R5,L1
             RET
             END
这个程序不明白为什么要在外部中断中更换工作寄存器组(R0~R7)。
如果不更换的话满足不了功能要求,加上就好了。
可是怎么都分析不出来,望高人解答!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:10282 发表于 2009-4-22 23:48 | 只看该作者
中断有调用delay子程序,执行中断程序之后,R5,R6,R7全部被清0,中断若从delay程序里面产生,返回后R6,R7在延时程序的内循环里,R6,R7赋值为0,产生的延时同设置为255等同(只相差2个循环周期),而R5清零之后产生的效果共R6=2相比则相差128倍了,故程序返回之后的第一次延时会很长,之后便正常了。更换寄存器组,中断时不改变原有的值,中断返回之前pop psw指令又将寄存器组调回使用了。

解释有点啰嗦。
回复

使用道具 举报

板凳
ID:9596 发表于 2009-4-23 00:09 | 只看该作者

不对啊,即使加上 CLR RS0   ;更换工作寄存器组
                       SETB
RS1                            , 外中断0时左移流水灯大部分时候是3次,但不是恒定的3次,我也没想得通是哪里的问题,另外你既然用的是电平触发方式(CLR IT0),在中断返回前要撤除/INT0的低电平的,同样希望有哪个高手指点,感激……

回复

使用道具 举报

地板
ID:8896 发表于 2009-4-23 16:32 | 只看该作者
以下是引用xushiming在2009-4-22 23:48:08的发言:
中断有调用delay子程序,执行中断程序之后,R5,R6,R7全部被清0,中断若从delay程序里面产生,返回后R6,R7在延时程序的内循环里,R6,R7赋值为0,产生的延时同设置为255等同(只相差2个循环周期),而R5清零之后产生的效果共R6=2相比则相差128倍了,故程序返回之后的第一次延时会很长,之后便正常了。更换寄存器组,中断时不改变原有的值,中断返回之前pop psw指令又将寄存器组调回使用了。

解释有点啰嗦。

很明白的解释,真是高人阿,谢谢咯!

回复

使用道具 举报

5#
ID:9972 发表于 2009-4-24 21:08 | 只看该作者

呵呵,学会了一点,又进步了一下,谢谢。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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