C語言讀取串列埠資料並16進製制列印

2021-08-21 12:27:43 字數 2064 閱讀 3098

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...