① 如何用用單片機keil軟體和串口調試助手實現串口通信
要用單片機搞串口通信,是實物單片機開發板與電腦做串口通信嗎?還是只想用keil 做模擬調試?串口調試助手是電腦上的軟體,那應該用實物單片機開發板才能做了。那keil 只不過是用來編譯C程序的,並不用它測試什麼。對於用單片機開發板,先用C語言寫程序,或匯編語言寫程序。寫好程序用keil 編譯出HEX代碼文件,再把HEX代碼文件燒錄到單片機里,即可運行調試了。如果只是想用keil 模擬,就不能用串口調試助手。要用proteus 模擬就更方便容易了,用不著什麼串口調試助手。
② 怎麼用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];//啟動發送
}
③ 單片機向串口調試助手發送數據 c語言
ucharidataSystemBuf[10];//用於接收
ucharRx=0;//接收數據條數
ucharcodeAT[]="YES,ITIS";
voidUART_init(void)
{
TMOD=0x20;//用定時器1
PCON=0x00;//波特率不加倍
SCON=0x50;//串列方式1
TH1=0xFD;//9600
TL1=0xFD;//
EA=1;//
ES=1;//
TR1=1;
}
voidsendchar(ucharch)//串口送一個位元組
{
SBUF=ch;
while(TI==0);
TI=0;
}
voidsendstring(uchar*p)//送字元串
{
while(*p)
{
sendchar(*p);
p++;
}
}
///////
voidreceive(void)interrupt4using1//中斷
{
if(RI)
{
if(Rx<10)//這兒最多收10個位元組
{
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
///
voidmain()
{
uchari;
UART_init();
while(1)
{
if(SystemBuf=='S')
{
sendstring(AT);
for(i=0;i<10;i++)//接收清0
{
SystemBuf[i]=0;
}
Rx=0;
}
}
}
④ 怎麼用stc89c52單片機利用串口助手向電腦每秒發送從零開始的數據啊
這個問題,你提問過,還沒有寫出程序呀。對串口程序不熟悉呀。
程序很簡單的,如下
#include <reg51.h>
unsigned char t0n;//T0中斷20次為1秒
main()
{
unsigned char second;
TMOD=0x21;
TH1 =0xFD;//晶振頻率=11.0592,波特率=9600
TL1 =0xFD;
SCON=0x50;
TH0 =0x4B;//晶振頻率=11.0592,定時50us
TL0 =0xFD;
EA =1;
ET0 =1;
TR0 =1;
TR1 =1;
while(1)
{
if(t0n>=20)//定時器T0中斷20次,1秒到
{
t0n=0;
second++;
if((0x0f&second)==0x0a)//變成10進制數發送
{second+=6;}//刪掉這兩行,按十六進制數發送
SBUF=second;//發送秒
while(TI==0);
TI=0;
}
}
}
void T0_int() interrupt 1
{
TH0 =0x4B;
TL0 =0xFD;
t0n++;
}
下圖是串口調試助手接收的情況
1,單片機按十進制數形式發送時,接收數據如下,是按十六進制數顯示,但沒有十六進制數了
⑤ 串口調試助手和單片機通訊,為什麼有的可以有的
串口調試助手和單片機通訊,單片機有時候會丟失數據,因為單片機速度較慢,而電腦發送數據是不管不顧的,發出去就完。不管對方是否接受到。單片機處理不及時的話就會丟失數據。
⑥ 如何用串口調試助手發送數據給單片機並使LED燈亮
基本沒錯。就是第一次發送沒反應,第二次時才開始反應。應該是開串口中斷放後面的原因。
就是buf[n]=SBUF;//這條不知什麼用 。
還有,ES=1放在串口初始化中。
⑦ 為什麼一打開串口調試助手,單片機的程序就停了
很可能是程序串口配置不正確,
再檢測下你的其他單片機外圍設備是否與串口配置相互沖突
一般沖突的話還可能導致電腦藍屏
⑧ 串口調試助手向單片機發送一串數字,單片機只顯示最後一位,該怎麼解決
你好!!
你每次串口中斷的時候都會 uint m=0;
那你 m++ 還有什麼意義,把 uint m=0; 拿到中斷的外面;中斷結束後 m 清零
還有,別用 while 循環,用 if 判斷
⑨ 用串口調試助手向單片機發送數據
這就對了。電腦顯示的是ASCII碼。1的ACII碼正是31H
⑩ 用51單片機與PC進行通信,通過串口助手進行調試
REN=1;
SM0=0;
SM1=1;
把SM0=0和SM1=1寫在REN前面。在開始工作時,單片機默認為00工作方式,這時候你就已經通過REN=1啟動單片機,那麼輸出一定有問題。必須先將工作方式定位01後,再啟動REN