⑴ 51單片機,通過串口助手向單片機發送字元串,單片機將字元串逆序發送回計算機,用C語言編程
像這種發送字元串的,需要有一個字元串結束標志,不能用0作為字元串結束標志了!這里以回車作0xd為結束標志!
#include <reg51.h>
typedef unsigned char uint8;
bit flag = 0;
uint8 idata buf[30];
uint8 ct;
void InitUART(void) //串口初始化 9600bps
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void Send(uint8 c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
char j;
InitUART();
while(1)
{
if(flag) //是否接收到回車 字元串發送完
{
flag = 0;
for(j = ct ; j > 0 ; j--)
{
Send(buf[j-1]);
}
}
}
}
void UARTInterrupt(void) interrupt 4
{
static uint8 i = 0;
if(RI)
{
RI = 0;
buf[i++] = SBUF;
if(SBUF == 0x0d) //接受到回車
{
ct = i-1 ;
flag = 1;
i = 0;
}
}
else
TI = 0;
}
模擬結果
程序作為參考 希望 你自己能理解程序!只有自己掌握了才能很好地用!
⑵ 51單片機通信問題,串口調試助手能接受單片機發送的數據,但是單片機卻不能接受串口調試助手發送的數據。
不需要延時的。下面的程序可以正常接收。
ORG 0000H
SJMP START
ORG 0030H
START:
MOV P1, #0FBH ;給p1附初值
MOV SCON, #50H ;設置串口工作方式1
MOV PCON, #00H ;波特率不加倍
MOV TMOD, #20H ;設置定時器1工作方式2
MOV TL1, #0FDH
MOV TH1, #0FDH ;給定時器賦值,波特率為9600
SETB TR1 ;啟動定時器
MAIN:
JBC RI, RCV ;若RI為1,則轉到RCV,否則跳轉MAIN
SJMP MAIN
RCV:
MOV A, SBUF ;將接受到的數據讀到累加器中
MOV P1, A ;將累加器中的數據送到P1口顯示
SJMP MAIN ;跳轉主程序
END
⑶ 51單片機與計算機串口通信無法讀出數據
答:
1 判斷你的硬體有沒有問題;方法是 用跳線講串口的pin2 和pin3短接,用串口調試助手發送數據看調試助手能不 能自己收到,能就說明是單片機程序有問題
2 你檢查你的波特率是生成程序是否正確, 中斷和主程序用 1樓給你程序,我看了 沒問題。
這樣就可以實現串口通信了
⑷ 51單片機中串口通信在哪個埠,有沒有固定的。。
51單片機中的串口通信是通過P3口的兩個引腳(即P3.0和P3.1)實現的,其中P3.0口為串口接收引腳(RXD),P3.1口為串口發送引腳(TXD)。在51單片機中,串口通信的埠是固定的,即P3.0口和P3.1口。這兩個引派差腳通過串口通信電路與串口通信晶元相連,實現串口通信功能。需要注意的是,在使用51單片機進行串口通信時,需要根據遲羨隱具體的通信協議和波特率等參數進行相關的配置,並在程碼廳序中編寫相應的串口通信代碼,才能實現數據的發送和接收。