一个dos下传串口的c代码加一点项目感想

本文介绍了一个在DOS环境下使用C语言进行串口通信的代码示例,包括初始化串口、接收和发送数据的函数,并展示了如何处理中断。代码适用于COM1-COM4,支持不同波特率和配置。
摘要由CSDN通过智能技术生成

在回了1000多个帖子,判了近千份卷子,长出了一口气之后。

最近串口的方案终于定下来了,这个东西也要快点结束掉,否则又会吃掉好多时间,拖延是魔鬼。

找了个代码,参考一下

#include <dos.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define RXD 0   //接收
#define TXD 0    //发送
#define LSB 0     //波特率调节低8位
#define MSB 1     //波特率调节高8位
#define IER 1    // 中断起用寄存器
#define IIR 2    //中断标识寄存器
#define LCR 3    //线路控制寄存器
#define 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 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 characters*/
#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[]={0x180,0xc0,0x60,0x30,0x18,0x0c,0x06};
unsigned char paritytable[]={0x08,0x18,0x00,0x28,0x38};
unsigned char buffer[BUFFLEN];//recv buf
int 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;
 if(++buffin==BUFFLEN)
  buffin=0;
 if(buffin!=buffout)
  {buffer[buffin]=ch;
  //      printf("bufferin[%d]=%c",buffer[buffin]);
  //     getch();
  }
 else
  buffin=temp;
 };
unsigned char getb()//read a char from the recvbuf
 {
 if(buffout!=buffin)
  {
  if(++buffo

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值