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.資料傳輸 微控制器的序列通訊使用的是非同步序列通訊,所謂非同步就是指傳送端和接收端使用的不是同一時鐘。非同步序列通訊通常以字元 或者位元組 為單位 組成字元幀傳送。字元幀由傳送端一幀一幀的傳送,接收端通過傳輸線一幀一幀地接收。...