A. 51單片機 串口通信 檢查接收的字元串
首先SBUF只有8位 即一位元組,而"adcd"有4位元組+『 』個,你這把temp和「abcd」比較永遠只能為假。所以LED1=!LED1;這條語句不能執行。正確的做法是建立一個變數,將SBUF接受到的字元存入變數,然後再比較
B. 51單片機C語言-串口輸入字元串並響應
給你個思路吧,不帶通訊協議,不帶中斷的,你自己往上填
#include "regx52.h"
#define 0x1 OPEN_LED
#define 0x2 CLOSE_LED
main()
{
TH1=0x;//設置波特率
//設置串口通訊方式,8位接收,1停止位
//啟動T1
while(1)
{
if(RI)//如果接收到字元
{
switch(SBUF)
{
case OPEN_LED:P4_6=1;break;//如果接收到開燈命令,燈亮
case CLOSE+LED:P4_6=0;break;
default:;
}
RI=0;
}
}
}
C. 51單片機串口收發字元串求助
51單片機串口發字元串的方法有多種,比較容易理解的方法是:先定義一個要發送的字元串,就是一個字元串數組。
發送時,連續發送個數組。
接收字元串,也可以採用類似的方法,先聲明一個字元串,接收時,每接收一個就存入這個串中,接收結束,查這個字元串就行了。
D. 51單片機串口接收字元串
51單片機串口接收字元串,接收的字元串長度不定,無結束符,要判斷這個字元串結束,確實比較難。如果每個字元串還是連續發送,幾乎是無法判斷的。如果每個字元串之前有一定的空閑時間,可以根據最短的空閑時間來判斷結束。即接收每一個字元都開始計時,接收下一個字元結束計時,如果計時的時間超過最短的空閑時間,則前一個字元為結束,且新字元串開始。並再重新計時。
E. 怎麼用51單片機向串口調試助手發送字元串有程序解釋更好啊,求解~
ASCII碼在單片機中也是用16進制來表示的,只是解碼後顯示的是字元,你要是隨便發一個字元,串口調試助手選擇字元顯示接收就可以顯示一個字元出來(可能我們不認識這個字元)。發送一個字元串就是不停的發送直到發送完畢,51單片機有自己的串列發送埠P3.0和P3.1埠,但是它是一個位元組一個位元組發送的,發送完一個位元組會產生一個中斷(也可以用判斷TI的方式判斷是否發送完),中斷響應後再次啟動發送SBUF=0Xxx,就會自動連續的發送,再加上判斷就可以控制發送的位元組數。
串口初始化:
void uart_init()
{
TMOD=0x20;//定時器1,模式2
SCON=0x50;//串口通訊方式1
TH1=0xfd;//波特率9600
TL1=0xfd;
button=0;
delay(1);
TI=0;//發送中斷標志位清零
RI=0;//接收中斷標志位清零
TR1=1;//啟動定時器1
EA=1; //使能全局中斷
ES=1; //啟動串口中斷
}
}
void main()
{ P1=0xff;
uart_init() ;
while(1)
{
}
// 串列中斷程序
void commIntProc() interrupt 4
{
if(TI)
{
TI = 0;
if(sendPosi < sendCount) //判斷是否發送完成
{
sendPosi++; //發送一次計數器加一
SBUF = sendBuf[sendPosi];//啟動發送
}
F. 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;
}
模擬結果
程序作為參考 希望 你自己能理解程序!只有自己掌握了才能很好地用!
G. 51單片機串口接收中斷連續接收字元串,中斷一直佔有CPU時間直到字元串接收完畢
1樓薯譽的說法明顯不對,串口接收時有標志位RI,當串口接收到一個字元(8位)時,RI會自動被置1,此時CPU會從主程序轉去執行串列中斷,普通單串口51單片機一般為 interrupt 4 子程序,當執行完時會自動回滲冊到主程序繼續執行,因此自 interrupt 4子程序結尾要把RI清零,以接受下一個中斷,否則無法再接收下一個數據
interrupt 4主程序中一般處理方式是將接收寄存器SBUF中的數據轉存到事先定義的緩存中,如果是接受字元串時請叢手宏注意緩存需移位,常式如下:
void Serial_interrupt() interrupt 4
{
uchar temp;
rec_data[i++]=SBUF; // rec_data為事先定義的接收緩存,可以持續接收,直到你需要串口數據時來取為止
RI=0;//接收中斷信號清零,表示將繼續接收
}