微控制器串列埠中斷問題

時間 2021-08-30 09:55:54

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的地線相連即可。...