Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to nicecookie
因為我在放上while()這部分有問題暫時先刪掉了 不曉得nicecookie大哥要看的是這個重點 我補上while的部分如下 main () { LCDInit(); UART2Init(); while(1) { switch (stage) { case 1: workdis(); break; case 2: empty(); break; default: DisplayStart(); break; } Delay(1); } } 我寫這樣的時候就變成中斷失去作用 不曉得原因在哪 感謝你的意見與指教
發表於: 2009/7/22 7:59
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
以下是code的部份
static unsigned char stage; unsigned char temp; void Delay ( int count) { while(count!=0) { int i; for(i = 0; i < 0x9900; i++); count--; } } main () { LCDInit(); UART2Init(); switch (stage) { case 1: workdis(); break; case 2: empty(); break; default: DisplayStart(); break; } Delay(1); } DisplayStart() { LCDClear(); LCDL1Home(); // Set cursor to Line 1 of LCD char *T = " Welcome "; putrsLCD(T); } void _ISR _U1RXInterrupt() { _U1RXIF = 0; temp = UART2GetChar(); stage = 1; } workdis() { LCDClear(); LCDL1Home(); // Set cursor to Line 1 of LCD char *T = " Working "; putrsLCD(T); Delay(5); stage = 2; } empty() { char *T =" It's empty!!"; LCDClear(); LCDHome(); putrsLCD(T); } //--------------------------------Uart init 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 }
發表於: 2009/7/21 9:39
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to yiming
stage這個變數原本我就設定為全域變數 這部分我到現在還是不曉得為什麼一到中斷完成後 值又消失了 感謝你的回應
發表於: 2009/7/20 9:35
|
|||
|
Re: Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
to nicecookie
原本就把UART放在while之前 答案是一樣的 我也不知道為什麼 對於只放上片段code造成誤解還真是抱歉 感謝你的回應
發表於: 2009/7/18 18:41
|
|||
|
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疑問
|
||||
---|---|---|---|---|
新會員
|
to Ryang
我是想在一開始先SHOW幾個String在LCD上 之後有從UART收到訊息後才跳入到WORK()或是empty() 如果都沒收到UART的DATA則是一直在welcome() 也就是default的部分 不知道在哪個環節有弄錯 感謝你的回應
發表於: 2009/7/16 18:34
|
|||
|
Interrupt疑問
|
||||
---|---|---|---|---|
新會員
|
各位先進你們好
我在使用中斷的時候遇到的問題 不知該如何解決 假設我的code如下 unsigned char stage; main () { switch (stage) { case 1: work(); break; case 2: empty(); break; default: welcome(); break; } U1STAbits.UTXEN = 1; //Enable Transmit IEC0bits.U1TXIE = 1; //Enable Transmit Interrupt IEC0bits.U1RXIE = 1; //Enable Receive Interrupt } void _ISR _U1RXInterrupt() { _U1RXIF = 0; int i; for(i = 0; i < (sizeof temp) ; i++ ) { temp[i] = UART2GetChar(); } stege = 1; } 我發現在Interrupt function的stage = 1 好像沒有任何作用 不曉得該如何處理才好 單步執行只看的到stage的值又消失了 感謝各位的指教
發表於: 2009/7/16 14:39
|
|||
|
Re: Uart疑問
|
||||
---|---|---|---|---|
新會員
|
to biko
在沒看到你的留言之前 我才想到 收到必須要有時間緩衝 最後 收到那部份 我方向搞錯了 變成先關閉PORT才收資料 這我剛剛才發現 我還真是... 最後 感謝你們給我的建議與回答^^
發表於: 2009/7/16 13:35
|
|||
|
Re: Uart疑問
|
||||
---|---|---|---|---|
新會員
|
to yiming
PIC_TX也確認無誤 網路上BCB寫的UART也並不多 別人測試OK的UART程式 UART的部分也跟我寫的一樣 降到9600也是一樣 PIC_RX是收到資料了 PIC_TX也傳了 但是程式上收到的卻是空白的 這我就不明白了 到底是哪個環節錯了? 感謝你的指教
發表於: 2009/7/16 10:19
|
|||
|