c语言串口通信典范文本.doc
《c语言串口通信典范文本.doc》由会员分享,可在线阅读,更多相关《c语言串口通信典范文本.doc(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一个一个 c 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 0x20static int comportaddr; sta
2、tic char intvectnum; static unsigned char maskb; static unsigned char BufferMaxBufLen; 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, unsig
3、ned 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
4、=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,maskbelse outp(Port8259+1,maskb
5、static void interrupt far AsyncInt(void) disable();if(CharsInBuf0)(*Char)=BufferCircOut;if(CircOut#include #include #include #include #include #define RXD 0 /接收#define TXD 0 /发送#define LSB 0 /波特率调节低 8 位#define MSB 1 /波特率调节高 8 位#define IER 1 / 中断起用寄存器#define IIR 2 /中断标识寄存器#define LCR 3 /线路控制寄存器#defin
6、e MCR 4 /调制解调器控制寄存器#define LSR 5 /线路状态寄存器#define MSR 6 /调制解调器状态寄存器#define IERV 1#define OUT2 0x08#define ERTS 2#define EDTR 1#define EMPTY 0X20#define READY 0X30#define ICREG 0X20#define IMASKREG 0X21#define EOI 0X20#define WAITCOUNT 5000#define BUFFLEN 2048 /用于存储字符的数组的界#define ALTE 0X12#define ALTQ
7、 0X10#define SER_BAUD_1200 96 #define SER_BAUD_2400 48#define SER_BAUD_9600 0x0C#define SER_BAUD_19200 6#define SER_STOP_1 0 /*/ 1 stop bit per character*/#define SER_STOP_2 4 /*/ 2 stop bits per character*/#define SER_BITS_5 0 /*/ send 5 bit characters*/#define SER_BITS_6 1 /*/ send 6 bit character
8、s*/#define SER_BITS_7 2 /*/ send 7 bit characters*/#define SER_BITS_8 3 /*/ send 8 bit characters*/#define SER_PARITY_NONE 0 /*/ no parity*/#define SER_PARITY_ODD 8 /*/ odd parity*/#define SER_PARITY_EVEN 24 /*/ even parity*/int port;int ComNum;unsigned portaddr;unsigned portf;unsigned int baudtable
9、=0x180,0xc0,0x60,0x30,0x18,0x0c,0x06;unsigned char paritytable=0x08,0x18,0x00,0x28,0x38;unsigned char bufferBUFFLEN;/recv bufint buffin=0;int buffout=0;int incount=0;int outcount=0;void interrupt(*vect_com)(.);void putb(unsigned char ch)/write a char to the recvbuf 将中断得到的数据写 到缓冲区int temp;temp=buffin
10、;if(+buffin=BUFFLEN)buffin=0;if(buffin!=buffout)bufferbuffin=ch;/ printf(“bufferin%d=%c“,bufferbuffin);/ getch();elsebuffin=temp;unsigned char getb()/read a char from the recvbufif(buffout!=buffin)if(+buffout=BUFFLEN)buffout=0;/printf(“bufferout%d=%c“,buffout,bufferbuffout);return(bufferbuffout);els
11、ereturn(0xff);/*unsigned char sender( unsigned char ch)outportb(portaddr2+TXD,ch);printf(“nsender outportdata=%cn“,ch);outcount+;return(1);*/void interrupt receiver(.)unsigned char ch;ch=inportb(portaddr+RXD);putb(ch);incount+; /记录接收了多少个数据。outportb(ICREG,EOI);void SerInit(int baud,int configuration)
12、disable();outportb(portaddr+LCR,0x80);outportb(portaddr+LSB,baud);outportb(portaddr+MSB,0x00);outportb(portaddr+LCR,configuration);enable();void SerOpen(void)vect_com=getvect(portf+8);disable();inportb(portaddr+RXD);inportb(portaddr+MSR);inportb(portaddr+LSR);inportb(portaddr+IIR);outportb(portaddr+
13、IER,IERV);outportb(portaddr+MCR,OUT2|ERTS|EDTR);outportb(IMASKREG,inportb(IMASKREG)printf(“the current com set is:9600,even, data bits 8, stop 1,“);Int();printf(“nnOVERn“);exit(0);发送文件程序#include #include #include #include #include #include #ifdef _cplusplus#define _CPPARGS .#else#define _CPPARGS#end
14、if#define SER_RBF 0 #define SER_THR 0 #define SER_IER 1 #define SER_IIR 2 #define SER_LCR 3 #define SER_MCR 4 #define SER_LSR 5 #define SER_MSR 6 #define SER_DLL 0 #define SER_DLH 1 #define SER_BAUD_1200 96 #define SER_BAUD_2400 48#define SER_BAUD_9600 12#define SER_BAUD_19200 6#define SER_GP02 8 #d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 串口 通信 典范 文本
限制150内