這是我們的實驗要求:
效果1 : 單片機發(fā)送數據給PC機,PC機利用串口調試助手將數據顯示出來。(40分)
效果2 : PC機發(fā)送數據給單片機,單片機將收到的數據返回給PC機,并通過串口調試助手顯示出來。(50分)
01電路圖
這個圖的最小系統的電路是有問題的?!揪褪菃纹瑱C左邊的電路,參考時要慎重】
虛擬串口:
然后是單片機的串口設置
我們把虛擬串口com2給了MCU,那么我們把com3給PC端
02寫代碼前的一些設置
1.晶振設置為11.0592MHz
2.我們的波特率為9600
SCON = 0X50; //SM0=0,SM1 =1【方式一】,REN =1【允許串口接收】
PCON = 0X80; //控制波特率的倍速提高一倍:SMOD = 1
TMOD |= 0X20; //使用的是定時器T1
TH1 = 0XFA; //波特率為9600
TL1 = 0XFA;
TR1 = 1;
IE = 0X90; // 1001 0000 EA 置為1 ES 置為1
//EA 中斷總允許位 ES 串行中斷允許位
【注意】 定時器T1作為默認的波特率發(fā)生器,要記得禁止T1中斷。
接下來說說我們的TH1和TL1怎么計算的
TL1 = TH1 = 256-(2^SMOD * f_osc )/ 32 * 12 * 波特率
f_osc:晶振頻率 (單位:MHz) 計算時,記得乘以10^6
例如我們本次實驗使用的是提高一倍的波特率的倍速
PCON = 0X80; //控制波特率的倍速提高一倍:SMOD = 1
波特率為9600,晶振為11.0592MHz
那么我們的TH1 = 256-(211.059210^6)/(32129600)=250
打開電腦的計算器:將十進制數轉換為十六進制數,在DEC那里輸入250,我們要獲取的就是HEX的值
最后TH1=TL1 = 0XFA;
這里也要設置哦
這個是串口助手的設置
03代碼
代碼很短小哦
#include < reg51.h >
#define u8 unsigned char
#define u16 unsigned int
u8 data_r;
void init()
{
SCON = 0X50;
PCON = 0X80;
TMOD |= 0X20;
TH1 = 0XFA;
TL1 = 0XFA;
TR1 = 1;
IE = 0X90;
}
void putchar(u8 n)
{
SBUF = n;
while(TI == 0);
TI = 0;
}
void main(){
init();
putchar('H');
putchar('E');
putchar('L');
putchar('L');
putchar('O');
while(1)
{
}
}
void Usart () interrupt 4
{
if(RI == 1)
{
data_r = SBUF ;
putchar(data_r);
RI = 0;
}
}
04分塊來講
//串口、定時器T1的初始化
void init()
{
SCON = 0X50;
PCON = 0X80;
TMOD |= 0X20;
TH1 = 0XFA;
TL1 = 0XFA;
TR1 = 1;
IE = 0X90;
}
這個初始化就不多說了,我們的“02”部分,要點已經講完了。
void putchar(u8 n)
{
SBUF = n;
while(TI == 0);
TI = 0;
}
這一部分也沒啥好講的,就是一個發(fā)送字符的函數,我們將要發(fā)送的字符,放進我們的發(fā)送寄存器SBUF中,TI是系統自動產生的中斷信號,最后記得T1手動清零哦。
TI = 0;
這個是串口中斷函數:
void Usart () interrupt 4
{
if(RI == 1)
{
data_r = SBUF ;
putchar(data_r); //寫了這句話,是為了在串口助手看到你發(fā)過去的數據
RI = 0;
}
}
這個SBUF是接收寄存器SBUF
data_r = SBUF ;
將接收到的字符存入我們的data_r中,再通過這句代碼,就可以在串口助手上,看到我們發(fā)送給單片機的數據
putchar(data_r); //寫了這句話,是為了在串口助手看到你發(fā)過去的數據
最后是我們的主函數
void main(){
init();
putchar('H');
putchar('E');
putchar('L');
putchar('L');
putchar('O');
while(1)
{
}
}
這塊代碼的效果:串口助手顯示:HELLO【可以自己去試一試昂】
putchar('H');
putchar('E');
putchar('L');
putchar('L');
putchar('O');
-
電路圖
+關注
關注
10344文章
10721瀏覽量
530641 -
單片機
+關注
關注
6037文章
44558瀏覽量
635352 -
PC機
+關注
關注
2文章
201瀏覽量
28578 -
串口通信
+關注
關注
34文章
1626瀏覽量
55529
發(fā)布評論請先 登錄
相關推薦
評論