微控制器串列埠通訊

2022-08-16 10:21:13 字數 2152 閱讀 9770

1、需求:實現電腦端控制微控制器開啟燈光風扇,顯示微控制器傳遞過來的資料【如溫度、濕度等】

2、工具、平台軟體:【驅動人生】、【vs2012】、【keil4】

3、下面就開始吧:

4、檢視我們當前的通訊埠號:【如圖:】

然後確定我們微控制器的晶振,我是用的是11.0592m的【即9600】,差不多我們就可以開始我們的開發了

5、我們預設不定義複雜的通訊協議

我們先來開發我們的微控制器程式吧:

#include #include 

#include

#include

sbit text=p1^0; //

測試sbit fs=p1^1; //

控制風扇

sbit dg=p1^2; //

控制燈光

sbit jb=p1^3; //

控制警報

sbit test5=p1^5; //

測試sbit test6=p1^6; //

測試sbit test7=p1^7; //

測試sbit pin_rxd=p3^0

;sbit pin_txd=p3^1;//

sbit rxdend=0;

//結束位

char temp;//

接收快取

unsigned char count=0;//

串列埠接收計數的變數

unsigned char receive[6];//

接收快取

unsigned char *rxdbuf;

unsigned

char* chs ="

1;2;3

"; //

要傳送的資料

void initserialport(); //

串列埠初始化

void getdate();//

接受資料

void getbytedate(void

);void senddate(char* chs);//

傳送資料

void

main()

//串列埠中斷函式

void open_led() interrupt 4}//

串列埠初始化

void

initserialport()

void getbytedate(void

)else

if(count==1&&receive[count]=='0')

if(count==2&&receive[count]=='1'

)

else

if(count==2&&receive[count]=='

0')

if(count==3&&receive[count]=='1'

)

else

if(count==3&&receive[count]=='0')

count++;

}//count=0;

sbuf=receive;

}

在這裡我沒有寫傳送的**:只寫了接收的**;

後面將會補充完整;

//

說明:微控制器接收資料是按照一位一位的度乙個字元乙個字元的讀,

所以我在如下**中定義了乙個中間變數temp來接收,當讀到o時表示讀完

void getbytedate(void

)else

if(count==1&&receive[count]=='0')

if(count==2&&receive[count]=='1'

)

else

if(count==2&&receive[count]=='

0')

if(count==3&&receive[count]=='1'

)

else

if(count==3&&receive[count]=='0')

count++;

}//count=0;

sbuf=receive;//

資料回顯,用於除錯

}

微控制器串列埠通訊

微控制器串列埠通訊 通常的usb序列通訊方式為全雙工,即兩條資料線 rxd和txd,一條用於傳送資料,一條用於接收資料。在序列通訊前,需要對序列通訊進行配置。對於微控制器 ri為接受中斷標誌位,未通訊時ri 0 當電腦傳送第乙個位元組幀a0到微控制器時,sbuf a0,中斷標誌位ri 1,微控制器呼...

微控制器串列埠通訊

1 每隔1秒鐘,a向b通過串列埠傳送乙個位元組c num 該位元組按照0x00 0x09迴圈,例如某一時刻傳送c num 0x 3 2 b接收到資料後,做9 c num的計算,並將計算結果通過串列埠傳送給a微控制器。例如b接收到0x03,則b要通過串列埠返回0x09 0x03 0x06給微控制器a ...

微控制器串列埠通訊小結

網上有很多講串列埠通訊的知識點,看了很多,今天就總結一下吧,歡迎拍磚!1.資料傳輸 微控制器的序列通訊使用的是非同步序列通訊,所謂非同步就是指傳送端和接收端使用的不是同一時鐘。非同步序列通訊通常以字元 或者位元組 為單位 組成字元幀傳送。字元幀由傳送端一幀一幀的傳送,接收端通過傳輸線一幀一幀地接收。...