⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ars232a.cpp

📁 汽车气门生产自控系统控制算法及源码
💻 CPP
字号:
//---------------------------------------//
//  工程文件: ARON.PRJ
//      程序: RS232A.CPP
//      功能: 串行通讯控制函数集
//      时间: 97,9,15
//---------------------------------------//
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<bios.h>
#include<io.h>
#include<fcntl.h>
#include<ctype.h>
#include<string.h>
#include "adps.h"

extern char *combuf;
extern int comerror,sendcount,receivecount;
extern int sendready;
extern DPS *head;
extern int COMREGBASE;
extern int COMINTRNO;
extern int COMOPEN;
extern int COMCLOSE;
//------------------------------------------//
//      函数: InitCom()
//      功能: 初始化串口
//      入口参数:
//      出口参数:
//------------------------------------------//
void InitCom()
{
    outport(COMREGBASE+3,0x80); //设置波特率=9600BPS
    outport(COMREGBASE,0x0b);
    outport(COMREGBASE+1,0x00);
    outport(COMREGBASE+3,0x03); //设置数据格式:1起始位,8数据位,1停止位
    outport(COMREGBASE+4,0x08); //置OUT2有效,允许请求中断
}

//------------------------------------------//
//      函数: SetComIntr()
//      功能: 设置串口中断地址
//      入口参数:
//      出口参数:
//------------------------------------------//
void SetComIntr()
{
    union REGS inregs,outregs;
    struct SREGS segs;
    void interrupt far ComHandler(void);

    inregs.h.ah=0x25;         //设置串口中断服务程序
    inregs.h.al=COMINTRNO;
    inregs.x.dx=FP_OFF(ComHandler);
    segs.ds=FP_SEG(ComHandler);
    intdosx(&inregs,&outregs,&segs);

    outport(0x021,inport(0x021)&COMOPEN); //开放8259相应串口中断IR4/IR3
}
//------------------------------------------//
//      函数: CloseComIntr()
//      功能: 关串口中断
//      入口参数:
//      出口参数:
//------------------------------------------//
void ComIntrClose()
{
	outport(COMREGBASE+1,0x00); //置OUT2无效,关请求中断
}

//------------------------------------------//
//      函数: SendByte()
//      功能: 从串口发送一字节
//      入口参数:
//      出口参数:
//------------------------------------------//
void SendByte(char byte)
{
    outport(COMREGBASE,byte&0x0ff);     //发送一字节数据
    outport(COMREGBASE+1,0x03);         //允许收发中断
}

//------------------------------------------//
//      函数: ComHandler()
//      功能: 串口中断服务程序
//      入口参数:
//      出口参数:
//------------------------------------------//
void interrupt far ComHandler(void)
{
    int linestatus,modemstatus,interruptflag;
    char receivebyte;
    do {
	interruptflag=inport(COMREGBASE+2)&0x07; //读中断标志寄存器,清发送寄存器空中断标志
	switch(interruptflag)
	{
	     case 0x02:         //发送寄存器空引起的中断
		  sendcount++;  //修改计数
		  break;
	     case 0x04:         //接收数据寄存器满引起的中断
		  receivebyte=inport(COMREGBASE)&0x00ff; //读接收数据寄存器,清中断标志
		  combuf[receivecount]=receivebyte;
		  receivecount++;       //修改计数
		  sendready=1;          //可以发送
		  break;
	}
    }while((interruptflag&0x01)==0);    //循环直到所有串口中断请求被处理完

    outport(0x20,0x20);      //向8259发EOI
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -