51微控制器串列埠通訊中斷的問題,51微控制器串列埠通訊問題

時間 2021-08-31 20:02:19

1樓:

肯定不會執行while(ti==0);下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while(ti==0);無限迴圈。

程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題哈。

你不要使用查詢功能,就一直使用中斷,具體程式檢視下面:

#include

#define uint unsigned int#define uchar unsigned charvoid delay(int z);

char a,flag;

void main()

void ser_interrupt()interrupt 4else if(ti==1)ti=0;}

2樓:匿名使用者

串列埠接收與傳送都是用的相同中斷源。所以在中斷函式中要判斷是接收還是傳送中斷,同時,要軟體清中斷。所以中斷函式修改

void ser_interrupt()interrupt 4}if(ti)

}主函式中可改為

if(flag==1)

3樓:匿名使用者

開啟pc串列埠軟體就有資料接收,是和第一次發的資料一樣嗎,具體是什麼樣的資料。

你把 while ( ri == 0) ;放到中斷第一句,再把main中的es=0放進中斷最後看看。

4樓:倫哲齊騫

對於51而言,每幀產生一次中斷。接收4個位元組是分4次中斷接收完成的。51的uart模組從序列移位暫存器接收完成後是直接放入接收緩衝的,而且接收緩衝只有一個單元。

51微控制器串列埠通訊問題

5樓:匿名使用者

c51微控制器的程式:

1、初始化程式:

tmod=0x20; th1=0xfd; tl1=0xfd;sm0=0; sm1=1; ren=1; tr1=1; ea=1; es=1;

2、傳送程式:

void comdata_send()//串列埠傳送資料3、接收資料:

void comdata_receive() interrupt 4}

6樓:魔靨一陣風

#include

#define uchar unsigned char

#define uint unsigned int

uchar idata trdata=;

sbit k1=p3^2; //對應開發板k1按鍵

//串列埠初始化

void uart_init(void)

void delay1ms(uint i)}}

//串列埠傳送一個位元組

void uart_sendchar(unsigned char dat)

//串列埠傳送一個字串

void uart_sendstring()

//主函式

void main(void)}}

//串列埠接收中斷函式

void int_uartrcv(void) interrupt 4}

7樓:曾年胥昌黎

樓主,傳送與接收不要放在同一個中斷服務程式中,rx_data[i]=sbuf;

sbuf=rx_data[i];

這兩句不應放在同一個中斷服務程式中啊,都放在main()}rx_data[i]=sbuf,放在中斷服務程式中;

8樓:奈妍杭綺琴

這個很難說,可能是其它程式問題,你仔細檢查一下,你整段程式,總能發現其中問題的!一步一步的找,和執行看看,一下哪步出問題了

51微控制器串列埠通訊出現問題,5V微控制器與3 3V微控制器串列埠通訊問題

做而論道 void main 如果是ascii碼,加上引號即可 if sbuf 0 p0 smg 0 通過數碼管顯示接收到的資訊 if sbuf 1 p0 smg 2 通過數碼管顯示接收到的資訊 if sbuf 2 p0 smg 12 通過數碼管顯示接收到的資訊 if sbuf 3 p0 smg 1...

微控制器串列埠中斷問題

樓主的問題我覺得應該出在這裡 該中斷函式是將接收的資料加一然後回顯,方法簡單明瞭,不錯。但是進入了死迴圈。void serial void interrupt 4 using 3 中斷內再出中斷,打亂了中斷服務程式的返回。if ti 修改的如下,希望樓主看完後明白這個是同步互斥的問題。void se...

51微控制器UART通訊問題

定時器1工作在自動重灌模式時,不需要軟體加以干預,就可以為uart的波特率提供連續穩定的時鐘。之所以只能用定時器1作為uart的波特率時鐘,這是由微控制器內部硬體所決定的。但並不是定時器1工作在自動重灌模式時才成為uart的波特率,定時器1工作在其它模式也可以為uart提供波特率時鐘,比如工作在模式...