Ⅰ 單片機的串口接收端為什麼加上一個二極體,而且還是反向的,如下圖
RX應該接有上拉。 只要RO為低,由於拉電流,RX一樣會被拉低;RO為高時,RO電平應該比RX高,二極體截止,RX也為高。
這樣目的應該是為了將485與單片機簡單隔離,其實這樣也不怎麼安全,產品上我們一般會用光耦來隔離而不是用二極體。
Ⅱ STC單片機串口線的原理圖
STC單片機的數據說明書里有原理圖。去宏晶公司的主頁上找就有了
Ⅲ 單片機的串列口怎麼接
這個接法沒問題,是TXD和Tin相連,單片機的TXD是發送數據(從單片機發往計算機),MAX232的Tin是發送數據輸入。
Rout和Rxd相連,是MAX232的Rout接收數據輸出(從計算機發往單片機),Rxd是單片機的接受數據輸入。如果是兩個單片機之間通訊的話就是TXD->RXD;RXD->TXD.
Ⅳ 單片機,什麼是串列口,什麼是並行口
兩種介面都是用來傳送二進制數據的介面形式。
串列介面,一般有一根時鍾線,一根數據線,一個時鍾周期傳送二進制1位,要傳送一個位元組至少需要8個時鍾周期,串列線根數少,遠程傳輸抗干擾能力強,成本低。
並行介面,比如8位並行介面,除具備時鍾線外,還有8根數據線,另外還有幾根輔助信號線,一個時鍾8位數據全部可傳送完畢,並行線根數多,電纜成本高、容易受干擾因而距離受限(電纜長度受限)。
單片機的硬體特性:
1、主流單片機包括CPU、4KB容量的RAM、128 KB容量的ROM、 2個16位定時/計數器、4個8位並行口、全雙工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。
2、系統結構簡單,使用方便,實現模塊化。
3、單片機可靠性高,可工作到10^6 ~10^7小時無故障。
4、處理功能強,速度快。
5、低電壓,低功耗,便於生產攜帶型產品。
6、控制功能強。
7、環境適應能力強。
Ⅳ 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=='