1、通訊格式=[幀頭]+ [資料長度]+ [指令**]+ [通訊內容]+ [校驗和]+ [幀尾]。
2、資料長度為從幀頭至幀尾的所有位元組(包含幀頭、幀尾)總數;
3、校驗和為校驗位前面所有位元組的異或;
4、rs232 串列埠通訊,波特率 9600,無奇偶校驗,8 位資料位,1 位停止位。
5、多位元組傳送資料時,高位在前,低位在後
// port.cpp : 定義控制台應用程式的入口點。
#include "stdafx.h"
#include
#include
handle hcom;
int main(void)
hcom = createfile(text("com1"),//com1口
generic_read | generic_write, //允許讀和寫
0, //獨佔方式
null,
open_existing, //開啟而不是建立
0, //同步方式
null);
if (hcom == (handle)-1)
printf("開啟com失敗!\n");
return false;
else
printf("com開啟成功!\n");
setupcomm(hcom, 1024, 1024); //輸入緩衝區和輸出緩衝區的大小都是1024
commtimeouts timeouts;
//設定讀超時
timeouts.readintervaltimeout = 1000;
timeouts.readtotaltimeoutmultiplier = 5000;
timeouts.readtotaltimeoutconstant = 5000;
//設定寫超時
timeouts.writetotaltimeoutmultiplier = 5000;
timeouts.writetotaltimeoutconstant = 2000;
setcommtimeouts(hcom, &timeouts); //設定超時
dcb dcb;
getcommstate(hcom, &dcb);
dcb.baudrate = 9600; //波特率為9600
dcb.bytesize = 8; //每個位元組有8位
dcb.parity = noparity; //無奇偶校驗位
dcb.stopbits = one5stopbits; //1個停止位
setcommstate(hcom, &dcb);
dword wcount=12;//讀取的位元組數
bool breadstat;
while (1)
purgecomm(hcom, purge_txclear | purge_rxclear); //清空緩衝區
unsigned char str[13] = ;
printf("%s\n", str);
breadstat = readfile(hcom, str,13, &wcount, null);
if (!breadstat)
printf("讀串列埠失敗!");
return false;
else
str[12] = '*';
for (int i = 0; str[i] != '*'; i++){
printf("%02x ", str[i]);
//printf("%u",str[i]);
//unsigned char a='0';
//unsigned char b = '0x01';
if (str[6]==0){
printf(" 無車");
else if(str[6]==1){
printf(" 有車");
else
printf(" 有錯");
printf("\n");
sleep(100);
c 讀取16進製制檔案
1.為什麼有這種需求 因為有些情況需要避免出現亂碼。不管什麼編碼都是二進位制的,這樣表示為16進製制就可以啦。2.如何讀取16進製制檔案 最近程式設計用這一問題,網上查了一下,感覺還是自己寫吧。16進製制資料一般是 text 0x340xb5.就是0x開頭,之後是兩個數字十六進製制數。如果直接使用s...
C C 讀取16進製制檔案
1.為什麼有這種需求 因為有些情況需要避免出現亂碼。不管什麼編碼都是二進位制的,這樣表示為16進製制就可以啦。2.如何讀取16進製制檔案 最近程式設計用這一問題,網上查了一下,感覺還是自己寫吧。16進製制資料一般是 text 0x340xb5.就是0x開頭,之後是兩個數字十六進製制數。如果直接使用s...
C 讀取檔案 16 進製資料
參考 include stdafx.h include include include include include include using namespace std char hex 16 void setindex int num,char hexnumber 設定新的行下標 int i...