基于PC/104的多串口通讯的设计
发布时间:2007/4/23 0:00:00 访问次数:616
本文采用的是HXL-COM4A的4串口扩展板,该板上集成了高性能的16C554控制芯片(相当于4个16C550),每个通道有独立的16字节接收缓冲器和16字节发送缓冲器,可以达到更高的通讯速率而无需占用过多的CPU资源,并且每个串口可配制成RS232\RS422\RS485模式。
1 多串口通讯软件的设计:
由于大部分的基于PC/104软件的设计都是在DOS平台上的,所以本文以BRAODLORD C为编译环境进行设计多串口通讯软件的设计。程序框图见图1
一般情况下串口的地址是:COM1:3F8 COM2:2F8 COM3:3E8 COM4:2E8 COM5:3A8 COM6:2A8, 如有区别参照多串口卡的手册。
1.1串口波特率和数据格式的设置:
首先向LCR(线路设置寄存器)的高位写入1,然后在设置波特率:在基地址和基地址+1的地方写入的数据为1843200/(16*波特率)。然后设置LCR,最后设置Modem控制寄存器和中断允许寄存器。
代码如下:
void init_com(int com_X)
{ outportb(com_X+3,0x80);
outportb(com_X,0x06);
outportb(com_X+1,0x00);//波特率为19200
outportb(com_X+3,0x0b);//数据格式:8个数据位,一个停止位,奇校验
outportb(com_X+4,0x0b);//允许将中断信号送到系统总线
outportb(com_X+1,0x01);}//允许接收产生中断
1.2中断的允许和禁止:
一般情况下,串口通常配置成接收产生中断,发送不产生中断。在PC/104上的设计可以参照PC机的设计方式,中断控制器为两片8259,一片为主片,另一片为从片。当串口所用的中断为8以下时,设置主片8259的IMR(中断屏蔽寄存器)。当中断为8以上时,要设置从片的8259的IMR。
代码如下:
void OpenInterrupt(unsigned char IntNum)//开中断
{
int mask;
char ControlWord[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
mask=inportb(0x21);
if(IntNum<8) outportb(0x21,mask&ControlWord[IntNum]);
else
{ outportb(0xa1,inportb(0xa1)&ControlWord[IntNum-8]);
outportb(0x21,inportb(0x21)&0xfb);
}
}
void CloseInterrupt(unsigned char IntNum) 电缆线直接连接标准RS232端口。若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,只需要如图2进行连接即可。
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口。若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,只需要如图2进行连接即可。
3 结束语:
本文较全面介绍了基于PC/104的多串口卡的通讯软件的设计,提出了串口通讯应注意的问题,并将此串口通讯软件应用在大庆油田的数据采集系统中,系统工作稳定,可靠。
本文采用的是HXL-COM4A的4串口扩展板,该板上集成了高性能的16C554控制芯片(相当于4个16C550),每个通道有独立的16字节接收缓冲器和16字节发送缓冲器,可以达到更高的通讯速率而无需占用过多的CPU资源,并且每个串口可配制成RS232\RS422\RS485模式。
1 多串口通讯软件的设计:
由于大部分的基于PC/104软件的设计都是在DOS平台上的,所以本文以BRAODLORD C为编译环境进行设计多串口通讯软件的设计。程序框图见图1
一般情况下串口的地址是:COM1:3F8 COM2:2F8 COM3:3E8 COM4:2E8 COM5:3A8 COM6:2A8, 如有区别参照多串口卡的手册。
1.1串口波特率和数据格式的设置:
首先向LCR(线路设置寄存器)的高位写入1,然后在设置波特率:在基地址和基地址+1的地方写入的数据为1843200/(16*波特率)。然后设置LCR,最后设置Modem控制寄存器和中断允许寄存器。
代码如下:
void init_com(int com_X)
{ outportb(com_X+3,0x80);
outportb(com_X,0x06);
outportb(com_X+1,0x00);//波特率为19200
outportb(com_X+3,0x0b);//数据格式:8个数据位,一个停止位,奇校验
outportb(com_X+4,0x0b);//允许将中断信号送到系统总线
outportb(com_X+1,0x01);}//允许接收产生中断
1.2中断的允许和禁止:
一般情况下,串口通常配置成接收产生中断,发送不产生中断。在PC/104上的设计可以参照PC机的设计方式,中断控制器为两片8259,一片为主片,另一片为从片。当串口所用的中断为8以下时,设置主片8259的IMR(中断屏蔽寄存器)。当中断为8以上时,要设置从片的8259的IMR。
代码如下:
void OpenInterrupt(unsigned char IntNum)//开中断
{
int mask;
char ControlWord[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
mask=inportb(0x21);
if(IntNum<8) outportb(0x21,mask&ControlWord[IntNum]);
else
{ outportb(0xa1,inportb(0xa1)&ControlWord[IntNum-8]);
outportb(0x21,inportb(0x21)&0xfb);
}
}
void CloseInterrupt(unsigned char IntNum) 电缆线直接连接标准RS232端口。若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,只需要如图2进行连接即可。
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口。若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,只需要如图2进行连接即可。
3 结束语:
本文较全面介绍了基于PC/104的多串口卡的通讯软件的设计,提出了串口通讯应注意的问题,并将此串口通讯软件应用在大庆油田的数据采集系统中,系统工作稳定,可靠。
上一篇:介绍一种高精度位置环系统