Re: Interrupt疑問
|
||||
---|---|---|---|---|
資深會員
|
參照:
那就把完整的貼上來 比較快吧
發表於: 2009/7/20 10:34
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to yiming
stage這個變數原本我就設定為全域變數 這部分我到現在還是不曉得為什麼一到中斷完成後 值又消失了 感謝你的回應
發表於: 2009/7/20 9:35
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to nicecookie
原本就把UART放在while之前 答案是一樣的 我也不知道為什麼 對於只放上片段code造成誤解還真是抱歉 感謝你的回應
發表於: 2009/7/18 18:41
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
資深會員
|
參照:
你那樣當然會沒有中斷 因為你的UART init是排在while迴圈後面 那樣永遠不會被執行 整體看來 應該是你程式的結構安排有問題 建議再把整個流程想清楚點吧 從power ON開始 甚麼時候做初始化 甚麼時候該show出 wellcome 時麼時候開始啟動中斷
發表於: 2009/7/18 11:54
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to Ryang
底下是我參照datasheet設定UART的部份 void UART2Init() { // Set directions of UART IOs UART2_TX_TRIS = 0; UART2_RX_TRIS = 1; U2BRG = BAUDRATEREG2; U2MODE = 0x8000;//Enable Uart for 8-bit data //no parity, 1 STOP bit U2STA = 0; U2MODEbits.UARTEN = 1; U2STAbits.UTXEN = 1; // reset RX flag IFS1bits.U2RXIF = 0; IPC3bits.U1TXIP2 = 1; //Set Uart TX Interrupt Priority IPC3bits.U1TXIP1 = 0; IPC3bits.U1TXIP0 = 0; IPC2bits.U1RXIP2 = 1; //Set Uart RX Interrupt Priority IPC2bits.U1RXIP1 = 0; IPC2bits.U1RXIP0 = 0; U1STAbits.UTXEN = 1; //Enable Transmit IEC0bits.U1TXIE = 1; //Enable Transmit Interrupt IEC0bits.U1RXIE = 1; //Enable Receive Interrupt } 在main()的部份是直接呼叫UART2Init(); to yiming 那個程式碼只是做一個測試 我只是想試看看中斷的時候數值會不會去變化 在斷點的時候是有stage = 1;這部份 但是一跳開中斷的時候就stage不見了 這部分我就不知道該怎麼辦了 to nicecookie while(1) { switch (stage) { case 1: work(); break; case 2: empty(); break; default: welcome(); break; } } 是這樣嗎? 我改這樣會變成沒有中斷 感謝你們的回覆與指教 另外我說明一下 我的構想是當PIC還未與UART連接時 先SHOW幾個STRING 也就是welcome()的部份 開始接收到UART才透過中段跳到work() or empty() 這樣不知道我還需要補充些什麼 感謝
發表於: 2009/7/18 10:13
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
資深會員
|
因為沒有while()
發表於: 2009/7/17 9:11
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
資深會員
|
怪怪的,stege = 1; 那永遠只會做case1
出SWITCH後應該要像版大說的 清除 stege(當然會跑default) 建議在SWITCH後加一點時間延遲 斷點下在stege = 1; 看有沒有收到資料而中斷,如果收不到資料 那檢查UART設定. 有收到資料 就剩stege = ??; 的狀態設定了. 參照:
發表於: 2009/7/17 8:28
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to Ryang
我是想在一開始先SHOW幾個String在LCD上 之後有從UART收到訊息後才跳入到WORK()或是empty() 如果都沒收到UART的DATA則是一直在welcome() 也就是default的部分 不知道在哪個環節有弄錯 感謝你的回應
發表於: 2009/7/16 18:34
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
版主
|
邏輯架構有錯,在判斷 stage 之前沒有啟動中斷又怎會有收到東西呢?
一但收到 stage ==1 後執行 case 敘訴前要記的將 stage 旗號清除。 你的程式只有片段而已,看不出整體的錯誤,因為我看不到 UART 的設定函數。
發表於: 2009/7/16 15:46
|
|||
|