1樓:匿名使用者
樓主的問題我覺得應該出在這裡:該中斷函式是將接收的資料加一然後回顯,方法簡單明瞭,不錯。但是進入了死迴圈。
void serial(void) interrupt 4 using 3
//中斷內再出中斷,打亂了中斷服務程式的返回。
if(ti)
}修改的如下,希望樓主看完後明白這個是同步互斥的問題。
void serial(void) interrupt 4 using 3
//中斷內再出中斷,打亂了中斷服務程式的返回。
es=1;//開穿行中斷
if(ti)
}完整而完善的串列埠服務函式可以給樓主參考:
#include
unsigned char uart_rx; //定義串列埠接收資料變數
unsigned char rx_flag; //定義穿行接收標記
函式名:uart串列埠初始化函式
調 用:uart_init();
參 數:無
返回值:無
結 果:啟動uart串列埠接收中斷,允許串列埠接收,啟動t/c1產生波特率(佔用)
備 注:振盪晶體為11.0592mhz,pc串列埠端設定 [ 2400,8,無,1,無 ]
void uart_init (void)
函式名:uart串列埠接收中斷處理函式
調 用:[sbuf收到資料後中斷處理]
參 數:無
返回值:無
結 果:uart串列埠接收到資料時產生中斷,使用者對資料進行處理(併傳送回去)
備 注:過長的處理程式會影響後面資料的接收
void uart_r (void) interrupt 4 using 1
函式名:uart串列埠傳送函式
調 用:uart_t (?);
參 數:需要uart串列埠傳送的資料(8位/1位元組)
返回值:無
結 果:將引數中的資料傳送給uart串列埠,確認傳送完成後退出,採用非中斷方式
備 注:
void uart_t (unsigned char uart_data)
函式名:uart串列埠傳送字串函式
調 用:uart_s (?);
參 數:需要uart串列埠傳送的資料(8位/1位元組)
返回值:無
結 果:將引數中的資料傳送給uart串列埠,確認傳送完成後退出,採用非中斷方式
備 注:
void uart_s(unsigned char *str)
函式名:主函式
調 用:main();
參 數:
返回值:無
結 果:
備 注:
void main()
;uart_init();
uart_s(buf_data);
while(1)}}
2樓:匿名使用者
串列埠中斷處理裡ri沒清,只能收第一個位元組,以後就卡住了。
另外es=1別給註釋掉,要不有資料不進串列埠中斷
3樓:匿名使用者
if(ri)
要加入 ri = 0;
4樓:烏臨靳昆銳
1,只要,ri和ti中有一個為1就會馬上進入中斷服務子程式。
2,開了中斷,不會先進入if(ri)的。
3,不會在delay停留。會再次從while(1)開始。
4,先串列埠初始化,進入動態掃描和判斷ri(也就是while(1)中。如果ri為1,則向外傳送receiving
data
。傳送完後就再開啟中斷。
在中斷服務程式中,先取出資料,並關中斷。
5,sbuf是同一地址。根據ri和ti可以判斷是傳送還是接收。
大概就是這樣了。。
51微控制器串列埠通訊中斷的問題,51微控制器串列埠通訊問題
肯定不會執行while ti 0 下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while ti 0 無限迴圈。程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題...
微控制器的中斷問題,關於微控制器中斷的問題
那個中斷函式和主函式直接是什麼關係?為什麼寫在主函式後邊但是主函式又沒引用?中斷函式無需被顯式呼叫。當有相應的中斷產生時,程式會自動中止當前的執行 記錄位置,然後跳轉到相應的中斷入口處。而在中斷入口會進行二次跳轉,到程式中對應的中斷處理函式內並執行。中斷處理函式執行完畢返回後,跳回到剛才中止執行的位...
微控制器通過串列埠控制另外微控制器問題
撒辰狂綺南 沒試過兩個微控制器直接tx對rx,rx對tx。貌似這樣不安全。我試過加上max232的。如圖所示的那種,不要九針底座。u2的t1out可以直接連線到u3的r1in。再u2的r1in直接連線到t1out.另外兩個微控制器的地線一定要相連,即電壓0點相同。可用u2的地線和u3的地線相連即可。...