用VC++6.0實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的數(shù)據(jù)交換
2. 通信程序設(shè)計(jì)
部分上位機(jī)程序
?。?)發(fā)送命令字程序,代碼如下
void CCommDlg::OnSend()
{
CSerial Serial;
//構(gòu)造串口類,初始化串行口
if (Serial.Open(2,9600)) //if-1
//打開串行口2,波特率為9600bps
{
static char szMessage[]="0";
//命令碼(可定義各種命令碼)
int nBytesSent;
int count=0;
resend:
nBytesSent=Serial.SendData(szMessage,strlen(szMessage));
//發(fā)送命令碼
char rdMessage [20];
if (Serial.ReadDataWaiting()) //if-2
{
Serial.ReadData(rdMessage,88);
//rdMessage 定義接收字節(jié)存儲區(qū),為全局變量//
if ((rdMessage[0]!=0x7f)(count3))
{
count++;
goto resend
}
if(count>=3)
MessageBox(“發(fā)送命令字失敗”);
}
else //if-2
MessageBox("接收數(shù)據(jù)錯(cuò)誤");
}
else //if-1
MessageBox("串行口打開失敗");
}
下位機(jī)通信程序:
#includereg51.h>
#includestdlib.h>
#includestdio.h>
#define count 9
#define com_code 0x00
#define com_code1 0xff
unsigned char buffer[count];
int po,year,month,date,hour;
int minute,second,recordID ;
int sum;
main()
{
…
/*初始化串口和定時(shí)器*/
TMOD=0×20;
TH1=0×fd;
TR1=0×01;
ET1=0×00;
ES=1;
EA=1;
/*待發(fā)送數(shù)據(jù)送緩沖區(qū)*/
buffer[0] = 0×ff; //數(shù)據(jù)特征碼
buffer[1] = count+1; //數(shù)據(jù)長度
buffer[2] = year; //年
buffer[3] = month; //月
buffer[4] = date; //日
buffer[5] = hour; //時(shí)
buffer[6] = minute; //分
buffer[7] = second; //秒
buffer[8] = recordID; //事件號
for(po=0;pocount;po++)
sum+=buffer[po];
buffer[9]=sum; //校驗(yàn)和
…
}
/*發(fā)送中斷服務(wù)程序*/
void send(void) interrupt 4 using 1
{
int i;
RI=0;
EA=0;
do
{
for(i=0;i=count;i++)
{
SBUF=buffer[i]; //發(fā)送數(shù)據(jù)和校驗(yàn)和//
while(TI==0);
TI=0;
}
while(RI==0);
RI=0;
} while(SBUF!=0); //主機(jī)接收不正確,重新發(fā)送//
EA=1;
Return;
}
5 應(yīng)用總結(jié)
根據(jù)不同需要,選擇合適的方法。我們選用的用VC++類實(shí)現(xiàn)的上位機(jī)和下位機(jī)的串行通信方法具有使用簡單、編寫程序方便的特點(diǎn)。經(jīng)過半年多應(yīng)用于EBM滅火系統(tǒng)的情況來看,該方法實(shí)現(xiàn)的系統(tǒng)運(yùn)行穩(wěn)定可靠,是一種值得推廣的簡單易行的通信方法。
c語言相關(guān)文章:c語言教程
單片機(jī)相關(guān)文章:單片機(jī)教程
c++相關(guān)文章:c++教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
評論