关于串口通讯的一个关键问题

haihong 2000-03-30 06:24:00
各位大虾:
小弟近日想要往串口发命令,控制联在串口上的modem,发的命令它不认。
以前我曾做过类似的程序,当时是往一个端口写一个值,用来关掉系统的中断。
然后发命令才行。现在天长日久,程序也丢了,怎么也想不起来往那个端口写
什么了。
望帮助!!!
haihong
...全文
440 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrbqian 2000-08-04
  • 打赏
  • 举报
回复
outportb(0x21,inportb(0x21)&0xef); // 关闭COM1的IRQ4
outportb(0x21,inportb(0x21)&0xf7); // 关闭COM2的IRQ3
接管IRQ4,IRQ3的中断处理0xc,0xb,从COM口读取数据
zxf_hl 2000-06-06
  • 打赏
  • 举报
回复
交换一段源程序吧,跟据你的用法改一改吧!不行的话Email:zxf_hl@263.net
asm {
mov al,0x80
mov dx,0x3fb //LCR LOCK THE BOAD REGESTER
out dx,al
//**********
mov al,0
mov dx,0x3f9 //BOAD REGESTER HIGH 9600 BP/S
out dx,al
//**********
mov al,0x0c
mov dx,COM1 //BOAD regester low
out dx,al
/*;*/
mov al,0x0b //No parity check,8 BIT,1 STOP BIT,DLAB=0
mov dx,0x3fb //Define the control regester
out dx,al
//**********
mov dx,0x3fc //MCR
mov al,0x03 //设置 MODEM 控制字
//13 自发自收 03 Opsite
out dx,al
//**********
mov al,0 //禁止 INTR
mov dx,0x3f9
out dx,al
//**********
}
愿你好运!
slip 2000-05-24
  • 打赏
  • 举报
回复
必须要开放关闭8259中断

可以读写:
0x21端口:每一个bit控制Irq0 - Irq 7 ( 含Irq 9, 不含Irq 2) 相应中断
0xa1端口:对应 Irq 8 - Irq 15( 含Irq 2, 不含Irq 9) 相应中断

1 开放, 0 禁止?

另外,中断处理程序后不要忘了
outportb(0x20, 0x20), 或者outportb(0xa0, 0x20)

haihong 2000-04-04
  • 打赏
  • 举报
回复
用_inp(0x2f8)得到的总是5,怎么回事??????
Un1 2000-03-31
  • 打赏
  • 举报
回复
你用什么方法操纵串口?!
haihong 2000-03-31
  • 打赏
  • 举报
回复
反正是关掉系统的一个口子,这样才能认得我给发的命令,
否则就只认得从超级终端写的命令。
haihong 2000-03-31
  • 打赏
  • 举报
回复
不对,试验了一下还是那样,我记得好像是0x21端口,是控制所有irq的。各位大虾再
帮忙想想,指点迷津。必有重谢!
另:(不提问怎么给分??)
always 2000-03-31
  • 打赏
  • 举报
回复
你用的大概是查询方式,这种方式下必须禁止所有通信中断,
地址是portaddress+1(如2f8,2f8+1),用 outp(portaddress+1,0x0);
可以禁止所有的通信中断.
haihong 2000-03-31
  • 打赏
  • 举报
回复
_inp(),_outp()
syz 2000-03-30
  • 打赏
  • 举报
回复
呵呵,不会吧?那也能忘?AT 指令呀!关闭中断?真的!硬INT?

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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