单片机系统调试通不过,现贴上原理图和程序请大家帮一下讨论下.
全部回复(14)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@翟晓辉
中断服务程序太长
DELAY:
mov R6,#8 ;延时消除抖动
D1: mov R7,#235 ;7,570us;6MHz
djnz R7,$
djnz R6,D1
RET
如果在主程序里正好执行到发送灯状态程序,发生T0中断(因为中断里有调用发送灯状态程序),此时灯的指示状态异常.如果在主程序里正好执行到delay中 DJNZ R7指令时,发生T0中断,此时由于中断有调用delay程序),中断返回后R6,R7同时为0h,此时再执行 DJNZ R7条指令时,R7会溢出等于0FFh,然后同理R6也会等于0FFh,此时延时等于130多MS ,然后再T0中断,重复以上过程,程序在DELYA内死循环,也就跟死机差不多.这样会出现楼主所说的现象.不知道我分析对不对?
mov R6,#8 ;延时消除抖动
D1: mov R7,#235 ;7,570us;6MHz
djnz R7,$
djnz R6,D1
RET
如果在主程序里正好执行到发送灯状态程序,发生T0中断(因为中断里有调用发送灯状态程序),此时灯的指示状态异常.如果在主程序里正好执行到delay中 DJNZ R7指令时,发生T0中断,此时由于中断有调用delay程序),中断返回后R6,R7同时为0h,此时再执行 DJNZ R7条指令时,R7会溢出等于0FFh,然后同理R6也会等于0FFh,此时延时等于130多MS ,然后再T0中断,重复以上过程,程序在DELYA内死循环,也就跟死机差不多.这样会出现楼主所说的现象.不知道我分析对不对?
0
回复
提示
@yg1977s
DELAY: mov R6,#8 ;延时消除抖动D1: mov R7,#235 ;7,570us;6MHz djnz R7,$ djnz R6,D1 RET如果在主程序里正好执行到发送灯状态程序,发生T0中断(因为中断里有调用发送灯状态程序),此时灯的指示状态异常.如果在主程序里正好执行到delay中DJNZR7指令时,发生T0中断,此时由于中断有调用delay程序),中断返回后R6,R7同时为0h,此时再执行DJNZR7条指令时,R7会溢出等于0FFh,然后同理R6也会等于0FFh,此时延时等于130多MS,然后再T0中断,重复以上过程,程序在DELYA内死循环,也就跟死机差不多.这样会出现楼主所说的现象.不知道我分析对不对?
恩,分析的很透彻!!!这点我确实没有想到,多谢指点!我马上去整理下.请问你位朋友有其他联系方式吗?想你交个朋友呵呵
0
回复
提示
@frankfeng
恩,分析的很透彻!!!这点我确实没有想到,多谢指点!我马上去整理下.请问你位朋友有其他联系方式吗?想你交个朋友呵呵
;<>
T0INT:
CLR EA
CLR ET0 ;关定时中断
CLR TR0 ;停止定时器0计数
PUSH ACC ;保护现场
PUSH PSW ;***保护A和标志位***
SETB RS0 ;转用1组
CLR RS1
.....
CLR RS0 ;回0组
CLR RS1
POP PSW ;恢复现场
POP ACC ;***恢复A和标志位***
SETB TR0 ;定时开始计数
SETB ET0 ;开定时中断
SETB EA
RET
是不是要修改成这样就没有问题了?帮忙看看
T0INT:
CLR EA
CLR ET0 ;关定时中断
CLR TR0 ;停止定时器0计数
PUSH ACC ;保护现场
PUSH PSW ;***保护A和标志位***
SETB RS0 ;转用1组
CLR RS1
.....
CLR RS0 ;回0组
CLR RS1
POP PSW ;恢复现场
POP ACC ;***恢复A和标志位***
SETB TR0 ;定时开始计数
SETB ET0 ;开定时中断
SETB EA
RET
是不是要修改成这样就没有问题了?帮忙看看
0
回复
提示