您的当前位置:首页C串口通信总结

C串口通信总结

2024-06-26 来源:飒榕旅游知识分享网

C串口通信总结

作者:不详出处:网络转载2011/10/1016:01:52阅读0次

我们知道对于标准DLL,可以采用DllImport进行调用。例如:[DllImport("XXX")]

privatestatice_ternintOpenPort(intPortNum,intBaudRate);

(报表生成控件)(完美的用户界面解决方案)(慧都独家

)如果一些厂家比较懒的话,没有提供相应的dll,我们只能对它进行串口通信编程了。以前从没接触过串口编程,最近在一个项目中有几个地方都需要采用串口通信,跟公司一个老手请教后,感觉学到了很多东西,特在此做个总结:

一:首先我们来认识下什么是串口:

右键我的电脑-管理-设备管理器-端口,选择一个端口,点击属性。串口通信总结C

我们可以看到该串口的属性,在C中我们使用SerialPort类来表示串口

ConfigClassconfig=newConfigClass();

XXX.PortName=XXX("SendHealCard");

波特率

XXX.BaudRate=9600;

数据位

XXX.DataBits=8;

两个停止位

XXX.StopBits=XXXXXX.One;

无奇偶校验位

XXX.Parity=XXXXXX.None;

XXX.ReadTimeout=100;

XXX.WriteTimeout=-1;

二:串口调试工具:

在对串口进行编程时候,我们要向串口发送指令,然后我们解析串口返回的指令。在这里向大家推荐一款工具。

串口调试助手.e_e

将要发送的指令用空格隔开,选择HE_显示为放回的字符串。三:正式编程:

编写Comm类:

publicclassComm

publicdelegatevoidEventHandle(byte[]readBuffer);

publiceventEventHandleDataReceived;

publicSerialPortserialPort;

Threadthread;

volatilebool_keepReading;

publicComm()

serialPort=newSerialPort();

thread=null;

_keepReading=false;

publicboolIsOpen

XXX;

privatevoidStartReading()

if(!_keepReading)

_keepReading=true;

thread=newThread(newThreadStart(ReadPort));

XXX();

privatevoidStopReading(){

if(_keepReading)

_keepReading=false;

XXX();

thread=null;

privatevoidReadPort(){

while(_keepReading)

if(XXX)

intcount=XXX;if(count>0)

byte[]readBuffer=newbyte[count];try

XXX();

XXX(readBuffer,0,count);if(DataReceived!=null)

DataReceived(readBuffer);XXX(100);

catch(TimeoutE_ception){

publicvoidOpen(){

Close();

XXX();

if(XXX)

StartReading();

else

XXX("串口打开失败!");

publicvoidClose()

StopReading();

XXX();

publicvoidWritePort(byte[]send,intoffSet,intcount){

if(IsOpen)

XXX(send,offSet,count);

注册串口:

Commcomm=newComm();

ConfigClassconfig=newConfigClass();

XXX.PortName=XXX("SendHealCard");波特率

XXX.BaudRate=9600;

数据位

XXX.DataBits=8;

两个停止位

XXX.StopBits=XXXXXX.One;

无奇偶校验位

XXX.Parity=XXXXXX.None;

coXXX.ReadTimeout=100;

coXXX.WriteTimeout=-1;

XXX();

if(XXX)

XXX.EventHandle(comm_DataReceived);}

发送指令:

/

/发卡到机口

/

privatevoidSendCardToOut()

is_read_card=false;

sendCardToOut=true;

byte[]send={0_02,0_46,0_43,0_34,0_03,0_30};

if(XXX)

XXX(send,0,XXX);

收到指令,并解析:

voidcomm_DataReceived(byte[]readBuffer1)

XXX(XXX(readBuffer));

if(XXX)

receive=XXX(readBuffer1);

stringstr="06";

if(XXX(XXX(),str,XXX)){

if(is_read_card)

byte[]send=newbyte[1];

send[0]=0_05;

XXX(send,0,XXX);

XXX(500);

XXXceived-=XXX(comm_DataReceived);

InitReadComm();

if(sendCardToOut)

byte[]send=newbyte[1];

send[0]=0_05;

XXX(send,0,XXX);

readComm.DataReceived-=XXX(readComm_DataReceived);XXX();

XXX("发卡完成!");

XXX"发卡成功!";

XXX"发卡完成,请收好卡!";

XXX(timer1_Tick);

PlaySound();

XXXXXX;

catch(E_ceptione_)

XXX(XXX());

至此,串口通信编程告一段落

显示全文