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

時間 2021-09-10 12:12:59

1樓:做而論道

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[14]; //通過數碼管顯示接收到的資訊

2樓:清澤憶夢

再除錯一下,收到串列埠助手資料之後再讓它返回到電腦串列埠,看看是否是原始資料。目的是查一下是串列埠出了問題還是數碼管程式設計有問題

3樓:成子盾

lz採用t1的定時器方式是2為自動重灌初值,很明顯th1和tl1這兩個值不一致,波特率有問題

5v微控制器與3.3v微控制器串列埠通訊問題

4樓:yesyes科

5v微控制器與3.3v微控制器串列埠不能通訊,是設定錯誤造成的,解決方法如下:

1、首先51微控制器的可用記憶體只有00h~7fh,堆疊指標設定在60h,則堆疊的大小就是60h~7fh。這算是有規定大小的。

2、堆疊主要是為子程式呼叫和中斷操作而設立的,因此對應有兩項功能:保護斷點和保護現場。

3、微控制器的程式歸根結底是個死迴圈,反覆在執行main函式(主程式)。

4、可以只寫一個函式main,那麼這個函式隨著功能的增多而變得異常大,而且非常不具備可讀,這個時候就需要子函式(子程式)了。

5、主函式在呼叫完子函式後會返回到主函式中,這樣就可以呼叫其它函式並且繼續這個死迴圈。

5樓:匿名使用者

遇到這種介面問題,首先必須確認兩個板子上的txd/rxd/gnd  若用到cts/rts當然也要

確認,確認它們的輸出電壓.(若是標準rs-232訊號,那就確認兩塊板子的rxd/txd對接

就是1板子的txd接2板子的rxd.....),有時候板子上輸出的是ttl電壓(5v/0v),串列埠標準電壓

是正負12v

一般拿出來賣的功能應該是有的,具體就是你怎麼用?

sp232是標準rs-232d介面,要加正負12v電壓。sp3232的電壓是3v-5.5v 也就是0v-3.3或5.5v

兩個當然不能直接接在一起。你看看是不是這個問題!

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

6樓:匿名使用者

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}

7樓:魔靨一陣風

#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}

8樓:曾年胥昌黎

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

sbuf=rx_data[i];

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

9樓:奈妍杭綺琴

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

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

10樓:

肯定不會執行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;}

11樓:匿名使用者

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

void ser_interrupt()interrupt 4}if(ti)

}主函式中可改為

if(flag==1)

12樓:匿名使用者

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

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

13樓:倫哲齊騫

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

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

肯定不會執行while ti 0 下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while ti 0 無限迴圈。程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題...

51微控制器UART通訊問題

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

用51微控制器控制12V繼電器,也就是5V控制12V的繼電器

我是一值魚 看你的意思你用的是pnp型三極體吧,這樣你還是不行的。你的微控制器輸出低時,三極體發射極與基極的電壓為12v,發射結正偏,是不,貌似可以導通吧。好吧,當你輸出高電平時,三極體發射極與基極的電壓為12v 5v 7v,發射結還是正偏是不,你的始終導通,沒法控制了。況且,你的電路正好滿足發射結...