c语言串口通信范例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) printf("%c",InChar); } Restore(); } 接收程序: #include #include #include #include #include #include #define RXD 0 //接收 #define TXD 0 //发送 #define LSB 0 //波特率调节低8位 #define MSB 1 //波特率调节高8位