c语言串口通信范例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个c语言的串口通信程序例

标签:

分类:技术笔记

c语言

串口通信

通信程序

it

最近接触一个项目,用HL-C1C激光位移传感器+易控组态软件完成生产线高度跳变检测,好久没有接触c c#,一些资料,找来做个记录,也许大家用的着

#include

#include

#include

#include

#define COM232 0x2f8

#define COMINT 0x0b

#define MaxBufLen 500

#define Port8259 0x20

#define EofInt 0x20

static int comportaddr;

static char intvectnum;

static unsigned char maskb;

static unsigned char Buffer[MaxBufLen];

static int CharsInBuf,CircIn,CircOut;

static void (interrupt far *OldAsyncInt)();

static void interrupt far AsyncInt(void);

void Init_COM(int ComPortAddr, unsigned char IntVectNum, int Baud, unsigned char Data, unsigned char Stop, unsigned char Parity) {

unsigned char High,Low;

int f;

comportaddr=ComPortAddr;

intvectnum=IntVectNum;

CharsInBuf=0;CircIn=0;CircOut=0;

f=(Baud/100);

f=1152/f; High=f/256;

Low=f-High*256;

outp(ComPortAddr+3,0x80);

outp(ComPortAddr,Low);

outp(ComPortAddr+1,High);

Data=(Data-5)|((Stop-1)*4);

if(Parity==2) Data=Data|0x18;

else if(Parity==1) Data=Data|0x8;

outp(ComPortAddr+3,Data);

outp(ComPortAddr+4,0x0a);

outp(ComPortAddr+1,0x01);

disable();

OldAsyncInt=getvect( IntVectNum );

setvect( IntVectNum, AsyncInt );

enable();

maskb=inp(Port8259+1);

if(IntVectNum==0x0c)outp(Port8259+1,maskb&0xef); else outp(Port8259+1,maskb&0xf7);

}

static void interrupt far AsyncInt(void)

{

disable();

if(CharsInBuf

Buffer[CircIn]=inp(comportaddr);

if(CircIn

else CircIn=0;

if(CircIn==CircOut) CircOut++;

else CharsInBuf++;

enable();

outp(Port8259,EofInt);

}

void Restore(void)

{

setvect(intvectnum,OldAsyncInt);

outp(Port8259+1,maskb);

}

int GetCharInBuf(unsigned char *Char)

{

int Flag;

Flag=-1;

if(CharsInBuf>0)

{

(*Char)=Buffer[CircOut];

if(CircOut

else CircOut=0;

CharsInBuf--;

Flag=0;

}

return Flag;

}

int SendChar(unsigned char Char)

{

if((inp(comportaddr+5)&0x20)==0) return -1; outp(comportaddr,Char);

return 0;

}

main()

{

int i,c;

unsigned char InChar;

Init_COM(COM232,COMINT,1200,8,1,0);

while(1)

{

if(kbhit())

{if((InChar=getch())==27)break;

else while(SendChar(InChar));

}

if(GetCharInBuf(&InChar)==0)

相关文档
最新文档