Ⅰ 51單片機通過串口實現數據的發送與接收程序
串口收發,要有通信協議。也就是什麼時候開始接收,接收到指令後,轉發什麼數據。這個要知道,才可以寫。而且使用不同的51單片機,其內部寄存器配置是不同的。
一般來說,過程如下:
1,配置串口參數、波特率等,開啟串口中斷;
void Init_UART()
{
}
2,中斷函數里寫中斷響應函數,根據接收的指令或者數據,執行相應的動作;
程序一般為:
void UART_ISR() interrupt x using y
{
;串口中斷處理函數
}
x - 單片機的C51中斷號
y - 指定使用的當前工作寄存器組號(0-3 PSW中的RS0,RS1組合)
3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//數據發送函數
}
}
Ⅱ 51單片機串口通信是全雙工的,但是為什麼又說它的發送和接受不可以同時進行呢
51單片機串口通信是全雙工的,發送和接受可以同時進行。不可以同時進行的是半雙工。
全雙工方式分別由兩根不同的傳輸線傳送數據時,通信雙方都能在同一時刻進行發送和接收操作,通信系統的每一端都設置了發送器和接收器,因此,能控制數據同時在發送和接受兩個方向上傳送。
半雙工使用同一根傳輸線既作接收又作發送,雖然數據可以在兩個方向上傳送,但通信雙方不能同時收發數據。採用半雙工方式時,通信系統每一端的發送器和接收器,通過收/發開關轉接到通信線上,進行方向的切換,因此,會產生時間延遲。收/發開關實際上是由軟體控制的電子開關。
(2)51單片機同時收發程序擴展閱讀:
全雙工方式在發送設備的發送方和接收設備的接收方之間採取點到點的連接,這意味著在全雙工的傳送方式下,可以得到更高的數據傳輸速度。
全雙工方式無需進行方向的切換,因此,沒有切換操作所產生的時間延遲,這對那些不能有時間延誤的互動式應用(例如遠程監測和控制系統)十分有利。這種方式要求通訊雙方均有發送器和接收器,同時,需要2根數據線傳送數據信號。
Ⅲ 兩個51單片機串口通信程序
串列發送程序 Tx.asm :
PCON, #00H ;; 波特率不倍增
SETB TR1 ;; 啟動定時器T1
MOV IE, #0 ;; 禁止任何中斷
CALL DLY125 ;; 延時125ms
;;--------------------------------------------
T_X: ;; 透傳發送字串
ACALL DSPLED ;; P2.0控制LED閃亮
MOV R3, #4 ;; 待發送字元個數
MOV DPTR, #TAB_TX ;; 數據表首址
TX_LP1: CLR A
MOVC A, @A+DPTR ;; A←數據表的1個字元
CLR TI ;; TI清零,允許發送
MOV SBUF,A ;; 發送1個字元
JNB TI, $ ;; 等待1個字元幀發送結束
DJNZ R3, TX_next
CALL DLY500 ;; 延時500ms
SJMP T_X ;; 重復發送
TX_next: ;; 發送另一字元
INC DPTR ;; 數據表指針移動
SJMP TX_LP1
;;--------------------------------------------
DSPLED: ;;開機或復位,P2.0控制LED閃亮6遍
MOV R2, #6 ;; 循環次數
LEDLP1: CLR P2.0 ;; LED亮
CALL DLY125 ;; 延時125ms
SETB P2.0 ;; LED滅
CALL DLY125
DJNZ R2,LEDLP1 ;; 循環
RET
;;----------------------------------------------
DLY125: ;; 延時125ms
DLY125A: MOV R5,#250
DLY125B: MOV R6,#250
DJNZ R6,$
DJNZ R5,DLY125B
RET
;; 250*250*2μs=125 000μs =125ms
;;----------------------------------------------
DLY500: ;; 延時500ms
MOV R7,#4
DLY500A: MOV R6,#250
DLY500B: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY500B
DJNZ R7,DLY500A
RET
;; 4*250*250*2μs=500 000μs =500ms
;;-------------------------------------------------
TAB_TX: DB 38H,30H,35H,31H, ...
;; 8 0 5 1 ...
;;----------------------------------------------
END
Ⅳ 51單片機怎麼同時收發數據,緩存不就一個嗎
51單片機串列通信收發的特殊功能寄存器SFR為SBUF,但要知道實際上是UART中接收、發送的SBUF有兩個,一個負責接收、另一個負責發送。這兩個SBUF名字一樣、地址也一樣,但一個只讀、另一個只寫,所以讀寫操作的不是同一個SBUF,自然單片機也就能同時進行收發數據。
Ⅳ 51單片機多串口同時通信
51單片機是通過sbuf這個串口專用寄存器和串口模塊來收發數據的。發送時,只要將數據送入到sbuf,等等ti狀態到1就發送完畢。同樣接收時,ri為1,那麼說明sbuf接收完畢一幀數據,可以直接從sbuf讀取數據了。