菜鸟求助:I/O地址问题

发布于 2022-09-24 02:23:11 字数 482 浏览 15 评论 0

小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0x2f8,0x30);       
        outportb(0x2fb,0x03);

串口地址为0X2F8 ,OUTPORTB 是将值写到一个地址中去,对2FB操作好象是设置它的比特率,可是
1。我不明白为什么是2FB设置他的比特率,
2。还有0X03代表的是9600,不知道这个是怎么算的。
3。这个是串口,对于其他的IO呢,如并口,GPIO,怎么进行设置?
4。对于计算机IO地址的分配,不知道是怎么样的一个原理,有哪方面的书可以介绍看一下。

各位大虾帮帮忙,先谢谢了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北城孤痞 2022-10-01 02:23:11

outportb(0x2fb,0x80);    //0x2fb告诉UART这条指令是命令,操作地址是0x80
        outportb(0x2f8,0x30);       //0x2f8告诉UART这条指令是数据,操作数是0x30,将0x30写入0x80;
        outportb(0x2fb,0x03);//同上

具体情况具体对待,就是这个样子~~~

风吹短裙飘 2022-10-01 02:23:11

关于pc io地址,你可以看看这篇文章
http://www.lupaworld.com/151392/viewspace_109014.html

少年亿悲伤 2022-10-01 02:23:11

原帖由 heefly 于 2008-3-4 17:19 发表
小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0x2f8,0x30);       
        outportb(0x2fb,0x03);

串口地址为0X2F8 ,OUTPORTB 是将值写到一个地址中 ...

对于串口通信:

波特率设置字的计算方法:
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 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文