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