『壹』 C51單片機串列介面的結構是怎樣的
C51系列單片機內部有一個功能很強的全雙工串列非同步通信介面(UART)。如圖所示為C51單片機的串列口結構框圖。它主要由兩個串列數據緩沖器(SBUF)、發送控制、發送埠、接收控制、接收埠和波特率控制等組成。
C51系列單片機串列介面結構框圖
『貳』 哪位大俠會用51單片機控制串口列印機的接線圖,簡單列印程序(C語言)
你要先用標准PC串口軟體來模擬,成功了再移植到單片中工作。
『叄』 單片機的串列口怎麼接
這個接法沒問題,是TXD和Tin相連,單片機的TXD是發送數據(從單片機發往計算機),MAX232的Tin是發送數據輸入。
Rout和Rxd相連,是MAX232的Rout接收數據輸出(從計算機發往單片機),Rxd是單片機的接受數據輸入。如果是兩個單片機之間通訊的話就是TXD->RXD;RXD->TXD.
『肆』 單片機串口通訊RXD與TXD如何對接詳解(獨家!)
相信很多人都對單片機與計算機或者晶元通信時,RXD與TXD如何連接比較困惑。因為在一些電路圖中,有的是直連接法,有的是交叉接法,讓人有點摸不著頭腦。
首先需要明白兩個概念,就是DTE和DCE。DTE是指數據終端設備,典型的DTE就是計算機和單片機。DCE是指數據通信設備,典型的DCE就是MODEM。RS232串口標准中的RXD和TXD都是站在DTE立場上的,而不是DCE。明白了這一點,再講下面的接線方法,就很好理解了。單片機與計算機進行串口通信時,單片機的RXD接計算機的TXD,單片機的TXD接計算機的RXD。(1)使用串口直通線。設計電路時,單片機的RXD連接電路板DB9的TXD,單片機的TXD連接電路板DB9的RXD,具體實現可在232電平轉換晶元處反接。(2)使用串口交叉線。設計電路時,因為串口線已做交叉,單片機的RXD連接電路板DB9的RXD,單片機的TXD連接電路板DB9的TXD,均直連即可。這就可以解釋為什麼有的電路中使用直連接法,有的電路中使用交叉接法,就是因為使用的串口線不同。單片機與串口設備(如GPRS模塊、載波晶元等)通信時,一律將RXD與TXD反接,即單片機的RXD接設備的TXD,單片機的TXD接設備的RXD。
『伍』 51單片機和計算機之間實現串口通信的電路圖
串口通訊參考程序如下:
來源:深入淺出AVR單片機
#include<reg51.h>
unsignedcharUART_RX;//定義串口接收數據變數
unsignedcharRX_flag;//定義穿行接收標記
/*********************************************************************************************
函數名:UART串口初始化函數
調用:UART_init();
參數:無
返回值:無
結果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(佔用)
備註:振盪晶體為12MHz,PC串口端設置[4800,8,無,1,無]
/**********************************************************************************************/
voidUART_init(void){
EA=1;//允許總中斷(如不使用中斷,可用//屏蔽)
ES=1;//允許UART串口的中斷
TMOD=0x20;//定時器T/C1工作方式2
SCON=0x50;//串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)
TH1=0xF3;//定時器初值高8位設置
TL1=0xF3;//定時器初值低8位設置
PCON=0x80;//波特率倍頻(屏蔽本句波特率為2400)
TR1=1;//定時器啟動
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:UART串口接收中斷處理函數
調用:[SBUF收到數據後中斷處理]
參數:無
返回值:無
結果:UART串口接收到數據時產生中斷,用戶對數據進行處理(並發送回去)
備註:過長的處理程序會影響後面數據的接收
/**********************************************************************************************/
voidUART_R(void)interrupt4using1{//切換寄存器組到1
RI=0;//令接收中斷標志位為0(軟體清零)
UART_RX=SBUF;//將接收到的數據送入變數UART_data
RX_flag=1;//標記接收
//用戶函數內容(用戶可使用UART_data做數據處理)
//SBUF=UART_data;//將接收的數據發送回去(刪除//即生效)
//while(TI==0);//檢查發送中斷標志位
//TI=0;//令發送中斷標志位為0(軟體清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:UART串口發送函數
調用:UART_T(?);
參數:需要UART串口發送的數據(8位/1位元組)
返回值:無
結果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式
備註:
/**********************************************************************************************/
voidUART_T(unsignedcharUART_data){//定義串口發送數據變數
ES=0;//禁止穿行中斷
SBUF=UART_data;//將接收的數據發送回去
while(TI==0);//檢查發送中斷標志位
TI=0;//令發送中斷標志位為0(軟體清零)
ES=1;//打開穿行中斷
}
/*********************************************************************************************
函數名:UART串口發送字元串函數
調用:UART_S(?);
參數:需要UART串口發送的數據(8位/1位元組)
返回值:無
結果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式
備註:
/**********************************************************************************************/
voidUART_S(unsignedchar*str)
{
while(1)
{
if(*str=='