單片機系統(tǒng)調(diào)試通不過,現(xiàn)貼上原理圖和程序請大家?guī)鸵幌掠懻撓?
全部回復(fù)(14)
正序查看
倒序查看
@翟曉輝
中斷服務(wù)程序太長
DELAY:
mov R6,#8 ;延時消除抖動
D1: mov R7,#235 ;7,570us;6MHz
djnz R7,$
djnz R6,D1
RET
如果在主程序里正好執(zhí)行到發(fā)送燈狀態(tài)程序,發(fā)生T0中斷(因為中斷里有調(diào)用發(fā)送燈狀態(tài)程序),此時燈的指示狀態(tài)異常.如果在主程序里正好執(zhí)行到delay中 DJNZ R7指令時,發(fā)生T0中斷,此時由于中斷有調(diào)用delay程序),中斷返回后R6,R7同時為0h,此時再執(zhí)行 DJNZ R7條指令時,R7會溢出等于0FFh,然后同理R6也會等于0FFh,此時延時等于130多MS ,然后再T0中斷,重復(fù)以上過程,程序在DELYA內(nèi)死循環(huán),也就跟死機差不多.這樣會出現(xiàn)樓主所說的現(xiàn)象.不知道我分析對不對?
mov R6,#8 ;延時消除抖動
D1: mov R7,#235 ;7,570us;6MHz
djnz R7,$
djnz R6,D1
RET
如果在主程序里正好執(zhí)行到發(fā)送燈狀態(tài)程序,發(fā)生T0中斷(因為中斷里有調(diào)用發(fā)送燈狀態(tài)程序),此時燈的指示狀態(tài)異常.如果在主程序里正好執(zhí)行到delay中 DJNZ R7指令時,發(fā)生T0中斷,此時由于中斷有調(diào)用delay程序),中斷返回后R6,R7同時為0h,此時再執(zhí)行 DJNZ R7條指令時,R7會溢出等于0FFh,然后同理R6也會等于0FFh,此時延時等于130多MS ,然后再T0中斷,重復(fù)以上過程,程序在DELYA內(nèi)死循環(huán),也就跟死機差不多.這樣會出現(xiàn)樓主所說的現(xiàn)象.不知道我分析對不對?
0
回復(fù)
@yg1977s
DELAY: mov R6,#8 ;延時消除抖動D1: mov R7,#235 ;7,570us;6MHz djnz R7,$ djnz R6,D1 RET如果在主程序里正好執(zhí)行到發(fā)送燈狀態(tài)程序,發(fā)生T0中斷(因為中斷里有調(diào)用發(fā)送燈狀態(tài)程序),此時燈的指示狀態(tài)異常.如果在主程序里正好執(zhí)行到delay中DJNZR7指令時,發(fā)生T0中斷,此時由于中斷有調(diào)用delay程序),中斷返回后R6,R7同時為0h,此時再執(zhí)行DJNZR7條指令時,R7會溢出等于0FFh,然后同理R6也會等于0FFh,此時延時等于130多MS,然后再T0中斷,重復(fù)以上過程,程序在DELYA內(nèi)死循環(huán),也就跟死機差不多.這樣會出現(xiàn)樓主所說的現(xiàn)象.不知道我分析對不對?
恩,分析的很透徹!!!這點我確實沒有想到,多謝指點!我馬上去整理下.請問你位朋友有其他聯(lián)系方式嗎?想你交個朋友呵呵
0
回復(fù)
@frankfeng
恩,分析的很透徹!!!這點我確實沒有想到,多謝指點!我馬上去整理下.請問你位朋友有其他聯(lián)系方式嗎?想你交個朋友呵呵
;<>
T0INT:
CLR EA
CLR ET0 ;關(guān)定時中斷
CLR TR0 ;停止定時器0計數(shù)
PUSH ACC ;保護(hù)現(xiàn)場
PUSH PSW ;***保護(hù)A和標(biāo)志位***
SETB RS0 ;轉(zhuǎn)用1組
CLR RS1
.....
CLR RS0 ;回0組
CLR RS1
POP PSW ;恢復(fù)現(xiàn)場
POP ACC ;***恢復(fù)A和標(biāo)志位***
SETB TR0 ;定時開始計數(shù)
SETB ET0 ;開定時中斷
SETB EA
RET
是不是要修改成這樣就沒有問題了?幫忙看看
T0INT:
CLR EA
CLR ET0 ;關(guān)定時中斷
CLR TR0 ;停止定時器0計數(shù)
PUSH ACC ;保護(hù)現(xiàn)場
PUSH PSW ;***保護(hù)A和標(biāo)志位***
SETB RS0 ;轉(zhuǎn)用1組
CLR RS1
.....
CLR RS0 ;回0組
CLR RS1
POP PSW ;恢復(fù)現(xiàn)場
POP ACC ;***恢復(fù)A和標(biāo)志位***
SETB TR0 ;定時開始計數(shù)
SETB ET0 ;開定時中斷
SETB EA
RET
是不是要修改成這樣就沒有問題了?幫忙看看
0
回復(fù)