久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

用VC++6.0實現(xiàn)PC機與單片機之間的數(shù)據(jù)交換


程序示例

串口初始化

if (!m_comm.GetPortOpen())m_comm.SetPortOpen(TURE); /*打開串口*/

m_comm.SetSettings("4800,n,8,1"); /*串口參數(shù)設置*/
m_comm.SetInputMode(0); /*設置TEXT緩沖區(qū)輸入方式*/
m_comm.SetRthresHold(1); /*每接收一個字符則激發(fā)OnComm()事件*/

接收數(shù)據(jù)

m_comm.SetInputLen(1); /*每次讀取一個字符
VARINAT V1=m_comm.GetInput();

/*讀入字符*/

m_V1=V1.bstrval;

發(fā)送字符
m_comm.SetOutput(Colevariant ("Hello"); /*發(fā)送 “Hello” */

3.3 注意

  SetOutput方法可以傳輸文本數(shù)據(jù)或二進制數(shù)據(jù)。用SetOutput方法傳輸文本數(shù)據(jù),必須定義一個包含一個字符串的Variant。
發(fā)送二進制數(shù)據(jù),必須傳遞一個包含字節(jié)數(shù)組的Variant 到 Output 屬性。正常情況下,如果發(fā)送一個 ANSI 字符串到應用程序,
可以以文本數(shù)據(jù)的形式發(fā)送。如果發(fā)送包含嵌入控制字符、Null 字符等的數(shù)據(jù),要以二進制形式發(fā)送。此處望引起讀者注意,筆
者曾經(jīng)在此犯錯。

4 VC++類CSerial

4.1 串行通信類CSerial簡介

Cserial 是由MuMega Technologies公司提供的一個免費的VC++類,可方便地實現(xiàn)串行通信。以下為該類定義的說明部分。

class CSerial
{
public:
CSerial();
~CSerial();
BOOL Open( int nPort = 2, int nBaud = 9600 );
BOOL Close( void );
int ReadData( void *, int );
int SendData( const char *, int );
int ReadDataWaiting( void );
BOOL IsOpened( void ){ return( m_bOpened ); }
protected:
BOOL WriteCommByte( unsigned char );
HANDLE m_hIDComDev;
OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
BOOL m_bOpened;

}


4.2 串行通信類Cserial 成員函數(shù)簡介

1. CSerial::Cserial是類構(gòu)造函數(shù),不帶參數(shù),負責初始化所有類成員變量。

2. CSerial:: Open這個成員函數(shù)打開通信端口。帶兩個參數(shù),第一個是埠號,有效值是1到4,第二個參數(shù)是波特率,返回一個布
爾量。

3. CSerial:: Close函數(shù)關閉通信端口。類析構(gòu)函數(shù)調(diào)用這個函數(shù),所以可不用顯式調(diào)用這個函數(shù)。

4. CSerial:: SendData函數(shù)把數(shù)據(jù)從一個緩沖區(qū)寫到串行端口。它所帶的第一個參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;
這個函數(shù)返回已寫到端口的實際字節(jié)數(shù)。

5. CSerial:: ReadDataWaiting函數(shù)返回等待在通信端口緩沖區(qū)中的數(shù)據(jù),不帶參數(shù)。 6. CSerial:: ReadData函數(shù)從端口接收緩沖區(qū)讀入數(shù)據(jù)。第一個參數(shù)是void*緩沖區(qū)指針,資料將被放入該緩沖區(qū);第二個參
數(shù)是個整數(shù)值,給出緩沖區(qū)的大小。

4.3 應用VC類的一個實例

1. 固定式EBM氣溶膠滅火系統(tǒng)簡介

  固定式EBM氣溶膠滅火裝置分區(qū)啟動器是專為EBM滅火裝置設計的自動控制設備。可與兩線制感溫、感煙探測器配套使用,當監(jiān)
測部位發(fā)生火情時,探測器發(fā)出電信號給分區(qū)啟動器,經(jīng)邏輯判斷后發(fā)出聲、光報警,延時后自動啟動EBM滅火裝置。為了便于火災
事故的事后分析,需對重要的火警事件和關鍵性操作進行記錄,記錄應能從PC機讀出來;PC機能控制、協(xié)調(diào)整個系統(tǒng)的工作,這些
都涉及通信。本例中啟動器采用RS-485通信接口,系統(tǒng)為主從式網(wǎng)絡,PC機為上位機。具體的通信協(xié)議為:
(1)下位機定時向上傳送記錄的事件;
(2)應答發(fā)送,即PC機要得到最新事件記錄,而傳送時間未到時,PC機發(fā)送命令,下位機接收命令后,把最新記錄傳給上位機;
(3)上位機發(fā)送其它命令如校時、啟動、停止、手/自動等。

2. 通信程序設計

部分上位機程序

(1)發(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)&&(count<3))
{
count++;
goto resend
}

if(count>=3)
MessageBox(“發(fā)送命令字失敗”);
}

else //if-2
MessageBox("接收數(shù)據(jù)錯誤");

}
else //if-1
MessageBox("串行口打開失敗");
}

下位機通信程序:

#include<reg51.h>
#include<stdlib.h>
#include<stdio.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()
{

/*初始化串口和定時器*/

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; //時
buffer[6] = minute; //分
buffer[7] = second; //秒
buffer[8] = recordID; //事件號

for(po=0;po<count;po++)
sum+=buffer[po];

buffer[9]=sum; //校驗和

}

/*發(fā)送中斷服務程序*/

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ù)和校驗和//
while(TI==0);
TI=0;
}
while(RI==0);
RI=0;
} while(SBUF!=0); //主機接收不正確,重新發(fā)送//

EA=1;

Return;
}

5 應用總結(jié)

  根據(jù)不同需要,選擇合適的方法。我們選用的用VC++類實現(xiàn)的上位機和下位機的串行通信方法具有使用簡單、編寫程序方便的
特點。經(jīng)過半年多應用于EBM滅火系統(tǒng)的情況來看,該方法實現(xiàn)的系統(tǒng)運行穩(wěn)定可靠,是一種值得推廣的簡單易行的通信方法。

COPYRIGHT(C) 2011 廈門永宏亞得機電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生