㈠ 51單片機中,用串口通信助手向單片機發送數據時,不用16進制的話,發送1,勾上16
發送的時候選擇16進制發送,否則按字元發送,就是發送ASCII碼,1的ASCII碼是49,16進制就是31.
具體網路一下ASCII
㈡ 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單片機與PC進行通信,通過串口助手進行調試
首先檢測你的硬體電路。
方法是,拔掉你的單片機,把rxd和txd腳短路。然後在串口調試助手裡面,選任意波特率發送任意字元,如果收到的是發送的內容,則能肯定max232和rs-232之間連接正確。
接下來就要檢查你的程序了
最容易出問題的就是波特率了。
如果你用12m的晶振,那麼,最好設置波特率為1200
或
2400。
㈣ 51單片機串口發送的數據和51助手收到的數據不一樣,什麼原因
波特率問題,建議用11.05926MHZ的晶振並重新計算初始值
㈤ 怎麼用手機藍牙調試助手控制51單片機上的LED燈亮
#include<reg52.h>
typedef unsigned char unit8;
typedef unsigned short unit_16;
void Receive_Handle(unit8 Value)
{
switch(Value)//具體發送過來的是什麼數據 需要自己自己通過串口調試助手查看
//改變這裡面對應的數據即可
{
case 0x00:P2=0xff;break;
case 0x01:P2=0xfe;break;
case 0x02;P2=0xfd;break;
case 0x03:P2=0xfb;break;
case 0x04:P2=0xf7;break;
default:P2=0xff;break;
}
}
void main()
{
TMOD |= 0x20;//定時器1 工作方式2 8位自動重裝模式
SCON = 0x50;//串口工作方式1 允許接收 8位數據位
TH1 = 0xfd; //波特率9600
TR1 = 1;
ES = 1;
EA = 1;
while(1);
}
void UART1_Rountine()interrupt 4
{
static unit8 Receive_Data=0;
ES = 0;
while(!RI);
RI=0;
Receive_Data = SBUF;
Receive_Handle(Receive_Data);
ES = 1;
}
/*---------------------------------------------------------------------------------------
如有問題可再咨詢
----------------------------------------------------------------------------------------*/
㈥ 求個口串口助手控制51單片機LED亮與滅程序
#include<stc89.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1 = P1 ^ 1; //定義兩個LED燈
sbit led2 = P1 ^ 2; // 這里需要你自己定義你的I/O口
uchar a;
//void delay(uint z);
void init();
void main()
{
init();
while(1)
{
if (a == 0x31)
{
led1 = 0;
led2 = 0;
}
if (a == 0x32)
{
led1 = 1;
led2 = 1;
}
if (a == 0x33)
{
led1 = 0;
}
if (a == 0x34)
{
led1 = 1;
}
}
}
void init() //初始化
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;
EA =1;
SCON=0x50;
}
/*void delay(uint z) //延時
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
*/
void Serial() interrupt 4 //串口中斷程序
{
RI = 0;
a = SBUF;
}
/*
----------------
說明:
波特率 9600
在串口助手裡面(把16進制關閉) 輸入 31 是 開啟燈亮
32 是 關閉
也可以用switch語句
----------------
*/
㈦ 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單片機 如何編程實現通過串口助手輸入內容
可以的,實際上就是利用串口實現輸入輸出,只需要正確設置串口波特率就行了。
void mInitSTDIO( void )
{
SCON = 0x50;
PCON = 0x80;
TMOD = 0x21;
TH1 = 0xf3; /* 24MHz晶振, 9600bps */
TR1 = 1;
TI = 1;
}
main( )
{
mInitSTDIO( ); /* 為了讓計算機通過串口監控演示過程 */
printf( "Start\n" );
while(1);
}
㈨ 我想知道proteus模擬的51單片機怎樣發送數據到串口助手 很急的 能解答嗎
要用PROTEUS中的一個元件:COMPIM,還要安裝一個虛擬終端(這個上網找吧),在程序,COMPIM,虛擬終端,串口助手的通信參數都要一致,如果程序與接線正確,就可以通信了.
㈩ 怎麼用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];//啟動發送
}