c语言串口通信范例

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

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

分类:技术笔记

标签:

c语言

串口通信

通信程序

it

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

#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)?

????? printf("%c",InChar);

?}

Restore();

}

下面介绍最重要的MFC:

CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。 CDocument 文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)

CView视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。

CDialog对话框

CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。

CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。

CPen笔,画线

CBrush刷子,填充

相关文档
最新文档