Re: CCS #int_RDA 中斷觀念問題
|
||||
---|---|---|---|---|
高級會員
|
我也是使用CCS,也用UART的中斷來接收字元放進一個接收緩衝區中.我提供我的方式,您看看能不能合用,有問題再討論.
首先在RESET後先給UART通信格式協定的設定,再啟動UART中斷及全域致能中斷. 先宣告一個全域變數的接收緩衝區"char Com_p[100];"以及一個緩衝區的指標."char *Com_p;",當中斷發生時,一次接收一個字元,再將接收到的字元一個一個放進接收緩衝區.程式碼範例如下: void System_init(void) { setup_uart(9600);//通信格式協定的設定 enable_interrupts(INT_RDA);//致能UART中斷 enable_interrupts(GLOBAL);//致能中斷 } #INT_RDA void serial_isr()//使用中斷函式接收RS232的字元. { char Re_ch; Re_ch=fgetc(PC);//接收一個字元 Com_buf[Com_p]=Re_ch;//放進接收緩衝區 Com_p++; if(Com_p > 100)//判斷有無溢位(over flow) { OV_FLOW=1; Com_p=0; } }
發表於: 2008/12/22 12:25
|
|||
|
CCS #int_RDA 中斷觀念問題
|
||||
---|---|---|---|---|
高級會員
|
之前有發過一篇UART的接收問題
http://www.microchip.com.tw/modules/n ... php?topic_id=6150&forum=1 對於CCS的中斷我有點模糊了 ~ 希望有寫CCS的大大指點我一下 ~ #int_RDA 這個應該是中斷接收語法 下面片段 #int_RDA void RDA_isr() { for(i=0 ; i<512 ; i++) { Msg_Array[i] = getc(); //接收字元一個個放進陣列 Ram_Array[i] = Msg_Array[i]; //複製到另一個陣列 } { for(i=0 ; i<512 ; i++) printf("%c",Ram_Array[i]); //印出來 Msg_Array[i] = ‘ ‘; //清空 } } void main() { enable_interrupts(INT_RDA); enable_interrupts(INT_TBE); enable_interrupts(GLOBAL); 主程式裡目前沒有東西 ~ } --------------------------------------------------------------------------------- #int_RDA 問過幾個大仔,這個就是接收中斷,CCS會自己產生 就因為如此所以我模糊了,我覺得是我不知道該把程式片段給設定 在哪邊的問題 ~ 1. 我有把印出的程式片斷丟在主程式裡面,但那樣做沒有反應 ~ 2. 我又試著把印出片段放在 #int_RDA(如我貼的) 裡面,可以印 出,但是只能印一次,這應該就是nicecookie大仔說的,TX時 我沒有把RX停掉導致 主要也是問這問題,CCS裡面我要停 RX怎麼停 !? 因為有人說CCS會自己產生,所以腦袋打結 …
發表於: 2008/12/22 10:35
|
|||
|