dos串行通讯设置

silent 2000-12-14 04:03:00
请教高手:
dos 中串行通讯用outportb设置波特率、起始停止位、校验位的具体的用法
另dos下com1 comc2 中断优先级是相同的吧,怎样设置com2优先于com1.
ri振铃的解决?
谢谢各位!
...全文
128 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
满桌烟灰 2000-12-16
  • 打赏
  • 举报
回复
除TXD,RXD和GND外,其他都是与外设的握手信号(如:使用调制解调器),在一般的通讯应用中可不虞理会.
abcicq 2000-12-15
  • 打赏
  • 举报
回复
RS232九个脚中,只用到了三个2,3,5。一收一发一地。
silent 2000-12-15
  • 打赏
  • 举报
回复
谢谢gigix
谢谢ColdSpring
Ri rs-232 引脚的一个吧,数据传输中他要有信号的,处理他有什么要注意的

ColdSpring 2000-12-14
  • 打赏
  • 举报
回复
#define COM_BASE_ADDR 0x3f8 /*com2=0x2f8*/
#define COM_INT_NUM 0x0c /*com2=0x0b*/
#define COM_MASK_BIT 0x10 /*com2=0x08*/
#define COM_TX COM_BASE_ADDR /* send data register */
#define COM_RX COM_BASE_ADDR /* receive data register */
#define COM_BL COM_BASE_ADDR /* baudrate_LSB low byte */
#define COM_BH COM_BASE_ADDR+1 /* baudrate_MSB high byte */
#define COM_IM COM_BASE_ADDR+1 /* interrupt mask register */
#define COM_IS COM_BASE_ADDR+2 /* intr_status register */
#define COM_LC COM_BASE_ADDR+3 /* line control register */
#define COM_MC COM_BASE_ADDR+4 /* modem control register */
#define COM_LS COM_BASE_ADDR+5 /* line status register */
#define COM_MS COM_BASE_ADDR+6 /* modem status register */
#define RTU_MODE 0x03 /* 8 bits data,1 stop bit,no parity*/
#define pcpc_baud 9600 /*bund */


void ComSetMode(unsigned long baudrate,unsigned char mode)
{
unsigned char baud_high,baud_low;
baud_low=(short)(115200L/baudrate)&0x00ff;
baud_high=115200L/baudrate>>0x08;

outp(COM_LC,0x80); /* set DLAB=1 */
outp(COM_BL,baud_low); /* 60=1200 18=4800 10=7200 0c=9600 08=14400*/
// line control reg. bin=0011
// bit1_bit0=11: DATA 8 bits,
// bit2=0 : STOP 0 bit,
// bit3=0 : No parity
outp(COM_BH,baud_high);
outp(COM_LC,mode&0x7f);
outp(COM_IM,0x01);
outp(COM_MC,0x09);
inp(COM_LS); /* reset interrupt */
inp(COM_RX); /* reset interrupt */
inp(COM_IS); /* reset interrupt */
inp(COM_MS); /* reset interrupt */
}
gigix 2000-12-14
  • 打赏
  • 举报
回复
DOS下com1的中断级别是4,com2是3(都是外部中断),你说那个震铃的问题,不
太明白你的意思,说详细点?
gigix 2000-12-14
  • 打赏
  • 举报
回复
设置祯结构:
void set_format(int port, unsigned char data,
unsigned char stop, unsigned char parity){
unsigned char portaddr;
unsigned char lcr;
portaddr=peek(0x40, port*2);
lcr=data|stop|parity;
outportb(portaddr+LCR, lcr); /* LCR : #define LCR 3 */
}

设置波特率:
void set_baudrate(int port, unsigned int baud){
unsigned portaddr;
unsigned char lcr, lsb, msb;

lsb=baud&0xff;
msb=baud>>8;
portaddr=peek(0x40, port*2);
lcr=inportb(portaddr+LCR); /* 保存LCR内容 */
outportb(portaddr+LCR, 0x80);
outportb(portaddr+LSB, lsb); /* #define LSB 0 */
outportb(portaddr+MSB, msb); /* #define MSB 1 */
outportb(portaddr+LCR, lcr); /* 恢复LCR */
}
gigix 2000-12-14
  • 打赏
  • 举报
回复
设置祯结构:
void set_format(int port, unsigned char data,
unsigned char stop, unsigned char parity){
unsigned char portaddr;
unsigned char lcr;
portaddr=peek(0x40, port*2);
lcr=data|stop|parity;
outportb(portaddr+LCR, lcr); /* LCR : #define LCR 3 */
}

设置波特率:
void set_baudrate(int port, unsigned int baud){
unsigned portaddr;
unsigned char lcr, lsb, msb;

lsb=baud&0xff;
msb=baud>>8;
portaddr=peek(0x40, port*2);
lcr=inportb(portaddr+LCR); /* 保存LCR内容 */
outportb(portaddr+LCR, 0x80);
outportb(portaddr+LSB, lsb); /* #define LSB 0 */
outportb(portaddr+MSB, msb); /* #define MSB 1 */
outportb(portaddr+LCR, lcr); /* 恢复LCR */
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧