導航:首頁 > 操作系統 > 51單片機串口字元串

51單片機串口字元串

發布時間:2023-05-17 15:46:24

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;//接收中斷信號清零,表示將繼續接收
}

閱讀全文

與51單片機串口字元串相關的資料

熱點內容
光模塊伺服器怎麼直接連電腦 瀏覽:376
編譯器識別單詞 瀏覽:344
2b2t伺服器怎麼獲得金蘋果 瀏覽:344
SQL如何進行伺服器配置 瀏覽:175
貿易公司適合在什麼app引流 瀏覽:717
高級c語言編程還在用turboc 瀏覽:884
cad如何畫單片機 瀏覽:13
管理雲伺服器哪個軟體好 瀏覽:747
什麼app可以消除照片一片水印 瀏覽:242
在什麼app上發表條漫 瀏覽:88
安卓電腦主機怎麼打開 瀏覽:819
eos生態app什麼時候可以登陸 瀏覽:397
找安裝維修工人用什麼App 瀏覽:300
區位碼加密 瀏覽:854
考編教師用什麼app 瀏覽:189
靜態面向對象編程語言 瀏覽:906
炒股密碼pdf 瀏覽:666
差分演算法有哪些 瀏覽:567
佳明怎麼配對安卓 瀏覽:247
用什麼app校對試卷 瀏覽:103