菜鸟求助:I/O地址问题
小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,
outportb(0x2fb,0x80);
outportb(0x2f8,0x30);
outportb(0x2fb,0x03);
串口地址为0X2F8 ,OUTPORTB 是将值写到一个地址中去,对2FB操作好象是设置它的比特率,可是
1。我不明白为什么是2FB设置他的比特率,
2。还有0X03代表的是9600,不知道这个是怎么算的。
3。这个是串口,对于其他的IO呢,如并口,GPIO,怎么进行设置?
4。对于计算机IO地址的分配,不知道是怎么样的一个原理,有哪方面的书可以介绍看一下。
各位大虾帮帮忙,先谢谢了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
outportb(0x2fb,0x80); //0x2fb告诉UART这条指令是命令,操作地址是0x80
outportb(0x2f8,0x30); //0x2f8告诉UART这条指令是数据,操作数是0x30,将0x30写入0x80;
outportb(0x2fb,0x03);//同上
具体情况具体对待,就是这个样子~~~
关于pc io地址,你可以看看这篇文章
http://www.lupaworld.com/151392/viewspace_109014.html
对于串口通信:
波特率设置字的计算方法:
b=1843200/(16*baud_rate);
比如你要设置为9600波特率,那么b=1843200/(16*9600)=12(0xc)
这时设置应该是:
mov dx,IOBASE //这里IOBASE 是你的0x2f8或3f8等...
add dx,03h
mov al,80h
out dx,al
mov ax,b // 注意是给了ax,而不是al
mov dx,IOBASE
out dx,al //al of b
add dx,01h
mov al,ah
out dx,al // ah of b
除此之外还有frameformat字节设置:
mov dx,IOBASE
add dx,03h
mov al,00h
out dx,al
mov al,frameformat
and al,07fh
out dx,al
mov dx,IOBASE
add dx,04h
mov al,03h
out dx,al
中断和收发也有很多文献介绍,这里就不重复了
[ 本帖最后由 system888net 于 2008-7-17 18:55 编辑 ]