标题:关于51单片机汇编中中断的问题,小弟写的程序出现了一些错误,没有找到准确 ...
只看楼主
a616781689
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-2-21
 问题点数:0 回复次数:1 
关于51单片机汇编中中断的问题,小弟写的程序出现了一些错误,没有找到准确的解决办法,求指导
下面是程序的源代码:
程序代码:
//**************************************************************************************
//程序名称:汇编语言的基础运用,中断打断数码管
//调试环境:proteus仿真
//作    者:CAIN
//预期效果:当开关按下的时候数码管会停止变化,led灯流水显示,之后继续执行数码管程序
//创建日期:2016.2.19
//**************************************************************************************
//                           中断程序位置的配置
//**************************************************************************************
           ORG    0000H
           AJMP   MAIN
           ORG    0003H
           LJMP   IN0
           ORG    0030H
//**************************************************************************************
//                                                         主函数
//**************************************************************************************
MAIN:      SETB   EA
           SETB   EX0
           SETB   IT0
START:     MOV    A,#01H
           MOV    R3,#9H
           MOV    R4,#1H
L1:        MOV    DPTR,#TABLE
           MOV    A,R4   
           MOVC   A,@A+DPTR
           MOV    P2,A
           INC    R4    
           ACALL  DELAY
           DJNZ   R3,L1
           AJMP   START
//**************************************************************************************
//                                                         延时函数
//**************************************************************************************
DELAY: 
           MOV    R5,#0AH
L4:        MOV    R6,#64H
L3:        MOV    R7,#0C8H
L2:        NOP
           NOP
           NOP
           DJNZ   R7,L2
           DJNZ   R6,L3  
           DJNZ   R5,L4 
           RET
//**************************************************************************************
//                                                         外部中断0服务函数
//**************************************************************************************
IN0:   
           PUSH   ACC
           PUSH   DPH
           PUSH   DPL
           PUSH   PSW
           MOV    R2,#8H
           MOV    A,#01H
L5:        MOV    P1,A
           ACALL  DELAY
           RL     A
           DJNZ   R2,L5
           POP    PSW
           POP    DPL
           POP    DPH
           POP    ACC
           RETI  
//**************************************************************************************
//                                                         数码管段选数组
//**************************************************************************************
TABLE:  DB    3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,40H
        END
//**************************************************************************************
//                                                                          END
//**************************************************************************************



程序中有以下问题:
接通单片机电源后,按下开关,执行完中断程序后会有两种错误情况,第一种是需要等待一段时间后数码管才会继续变化,另一种是执行完中断之后数码管会从1(设定的初值)开始变话
本人认为问题可能在的地方,我觉得问题是处在延时函数上,具体原因没有找到,请大神们找一找是什么原因


[此贴子已经被作者于2016-2-21 10:28编辑过]

搜索更多相关主题的帖子: 源代码 单片机 数码管 led灯 
2016-02-21 10:06
a616781689
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-2-21
得分:0 
经过几天的调试,发现我忽略了一个问题,当我在中断中调用延时函数时,最后将几个通用寄存器清零了,导致回到主函数调用的延时函数时进行-1后判断时出现了负数,而负数的补码十分大,所以导致延时时间超长,导致需要等待很久。
修正方法为切换寄存器区域(RS0 RS1)
2016-02-21 12:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-461830-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042315 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved