單片機系統調試通不過,現貼上原理圖和程序請大家幫一下討論下.
全部回復(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
回復