看板 ASM 關於我們 聯絡資訊
※ 引述《BlueFeel (藍色感覺)》之銘言: : sorry~之前那篇問得有一點攏統,重寫一下問題... : 程式如下. : 程式正確時,test會因為0x0130, while跳開而完成case0. : 我將 : printf("\r\n%04X",test); : 加在 : while(test < x0130); : 下面 : 程式不正確時,test會為0x0100,且while跳開,完成case0. : 問題就在........為什麼 test有0x0100, while會跳開呢? : 後來, 我又加了 : while(test < x0130); : 在 : while(test < x0130); : 後面, : 此問題就不再發生了... : 雖然這是一個解決方法,但是原因一直找不到.... : 感覺好像是中斷在test=0x0100先跳回主程式,讓case0先完成, : 資料又進來了,又跳到中斷將test計數完(資料會一直進來) : test 我宣告全域變數耶? why? : 理論上,中斷跳回,應該會卡在while等, 因為沒有大於0x0130.. : 但printf test 卻顯示最後是0x0100..... : 一直想不通!! 這現象是偶然發生,不是一直發生... : ================================ : 主程式 : case '0' : : test =0; : while(test < x0130); : break; : 串列函式 : static void Serial_Port_ISR (void) interrupt 4 : { : /* Received data interrupt. */ : if (RI) : { : RI = 0; : if (upload == 1) : { : XBYTE[test] = SBUF; : test++; : } : } : else : { : if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0) : { : rbuf [r_in & (RBUF_SIZE-1)] = SBUF; : r_in++; : } : } : } 補TI Code /* Transmitted data interrupt. */ if (TI) { TI = 0; if (t_in != t_out) { SBUF = tbuf [t_out & (TBUF_SIZE-1)]; t_out++; ti_restart = 0; } else ti_restart = 1; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.236.8
ksmrt0123:看起來有TI時還是會執行到 RI 那邊的 else 部份 11/26 12:42