<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機和PC通過(guò)串口通信

單片機和PC通過(guò)串口通信

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
通信協(xié)議:每次PC單片機發(fā)送10個(gè)字節的數據,第一個(gè)字節為0XFA,數據開(kāi)始標志,后面8個(gè)字節為任意數據,最后一個(gè)字節為前9個(gè)數據和的低字節(高字節忽略),作為校驗和。

串口設置:PC串口參數設置

本文引用地址:http://dyxdggzs.com/article/201611/318354.htm

串口號:COM1(默認,具體視使用情況而定)

波特率:9600

數據位:8

其他默認

測試方法:可以用串口調試工具的字符串輸入框輸入:FAFAFA FA FA FA FA FA FACA,選擇HEX發(fā)送,HEX顯示,如果每發(fā)送一次就接收到以上數據,并在單片機開(kāi)發(fā)板上正確顯示,則測試成功。

//52單片機串口接收和發(fā)送測試程序;

//接收采用中斷方式,發(fā)送采用查詢(xún)方式;

//52串口通信,T1做串口波特率發(fā)生器;

#include "Port_Config.h"http://單片機端口定義

#include "LCD_Driver.h"http://單片機LCD顯示

#include "52_UART.h"http://52串口

#defineREC_BUF_LEN10//數據長(cháng)度

#defineucharunsigned char;

#defineuintunsigned int;

ucharrec_buf[REC_BUF_LEN];//接收數據緩沖區

uintcheck_sum= 0;//接收數據校驗和

ucharcount= 0;//當前接收數據個(gè)數

bitrec_flag= 0;//數據接收完成標志

bitstart_flag= 0;//接收數據起始標志

//==================================================

//函數:void Init_UART1(void)

//描述:串口初始化函數,使用T1方式2自重載方式做波特率發(fā)生器,

//串口使用方式1,8位數據,可變波特率

//參數:無(wú)

//返回:無(wú)

//作者:geoff日期:2010/11/04

//修改:日期:

//版本:V1.1

//==================================================

void UART1_Init(void)

{

SCON=0x50 ;//方式1,8位可變波特率

TMOD=0x20 ;//定時(shí)器1,方式2,8位自重載

PCON=0x00 ;//倍頻禁用

TH1=0xfa ;//晶振22.1184MHz,波特率9600;

TL1=0xfa ;//9600

IE|=0x90 ;//開(kāi)中斷

TR1=1 ;//啟動(dòng)定時(shí)器

}

//==================================================

//函數:uchar UART1_Receive_Char(void)

//描述:?jiǎn)纹瑱C從串口接收一個(gè)字符

//參數:無(wú)

//返回:uchar dat//接收到的數據

//作者:geoff日期:2010/11/11

//修改:日期:

//版本:V1.1

//==================================================

uchar UART1_Receive_Char(void)

{

uchar rec_data;

while(!RI);//等待接收完成

RI = 0;//接收完成后,清接收完成中斷

rec_data = SBUF;

return rec_data;

}

//==================================================

//函數:void UART1_Send_Char(uchar send_data)

//描述:?jiǎn)纹瑱C向串口發(fā)送一個(gè)字符

//參數:uchar send_data//待發(fā)送數據

//返回:無(wú)

//作者:geoff日期:2010/11/09

//修改:日期:

//版本:V1.1

//==================================================

void UART1_Send_Char(uchar send_data)

{

SBUF = send_data;

while(!TI);//等待發(fā)送完成

TI = 0;//發(fā)送完成后,清發(fā)送完成中斷

}

//==================================================

//函數:void UART1_Send_String(uchar *str, uchar len)

//描述:?jiǎn)纹瑱C向串口發(fā)送一個(gè)字符串

//參數:uchar *str//待發(fā)送數據

//uchar len//字符串長(cháng)度

//返回:無(wú)

//作者:geoff日期:2010/11/10

//修改:日期:

//版本:V1.1

//==================================================

void UART1_Send_String(uchar *str, uchar len)

{

uchar i;

for(i=0; i

{

UART1_Send_Char(*(str+i));

}

}

//==================================================

//函數:void UART1_Intr(void) interrupt 4

//描述:串口中斷處理函數,接受串口向單片機發(fā)來(lái)的數據

//參數:無(wú)

//返回:無(wú)

//作者:geoff日期:2010/11/10

//修改:geoff日期:2010/11/12

//版本:V2.1注意:第一個(gè)數據以0XFA開(kāi)始

//==================================================

void UART1_Intr(void) interrupt 4

{

uchar rec_temp;

if(RI)//RI=1,串口接收到數據

{

RI = 0;//清RI

rec_temp = SBUF;//接收數據

if((rec_temp==0xfa)&&(count==0))//判斷數據是否以OXFA開(kāi)始

{

check_sum = 0;//清校驗和

rec_buf[count] = rec_temp;//把接收到的數據存到接收數組里

count++;//

/////測試用

LCD_DataWrite(rec_temp);//在LCD上顯示接收數據

check_sum += rec_temp;//計算校驗和

start_flag = 1;//數據以OXFA開(kāi)始,置開(kāi)始標志

}

else if(start_flag==1)//判斷數據是否開(kāi)始

{

rec_buf[count] = rec_temp;//接收數據

count++;//

/////測試用

LCD_DataWrite(rec_temp);//在LCD上顯示接收數據

check_sum += rec_temp;//計算校驗和

if(count==REC_BUF_LEN)//判斷是否是最后一位數據,第十位

{

count = 0;//從0重新計數

start_flag = 0;//接收數據結束

check_sum -= rec_temp;//計算最終校驗和

if((uchar)check_sum==rec_temp)//判斷數據接收是否正確,

{//數據最后一位是校驗和的后8位

rec_flag = 1;//置接收完成標志

}

}

}

}

}

//==================================================

//函數:void UART1_Demo(void)

//描述:串口通信測試程序,使用T1方式2自重載方式做波特率發(fā)生器,

//串口使用方式1,8位,可變波特率

//晶振22.1184MHz,波特率9600;

//參數:無(wú)

//返回:無(wú)

//作者:geoff日期:2010/11/08

//修改:geoff日期:2010/11/09

//版本:V1.1

//==================================================

void UART1_Demo(void)

{

UART1_Init();

TI = 1;//SBUF置空

/////測試用

LCD_RegWrite(0x80);

while(1)

{

if(rec_flag == 1)//把接收到的數據,發(fā)送到串口輸出

{

rec_flag = 0;//清接收完成標志

UART1_Send_String(rec_buf,REC_BUF_LEN);

}

Rst_WDT();//喂狗

}

}

//==================================================

//函數:void main(void)

//描述:主函數

//參數:無(wú)

//返回:無(wú)

//作者:geoff日期:2010/11/08

//修改:日期:

//版本:V1.1

//==================================================

void main(void)

{

LCD_Init();//單片機LCD初始化

UART1_Demo();

}

本文通過(guò)約定特定通信協(xié)議,實(shí)現單片機和PC的通信,經(jīng)過(guò)測試,單片機收發(fā)正常;出現不能通信時(shí),可以多發(fā)幾個(gè)非0XFA數據,讓單片機準備接收,然后按照約定的格式發(fā)送,并保證每次發(fā)送字符長(cháng)度為10個(gè)字節。



關(guān)鍵詞: 單片機PC串口通

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>