- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 10.6.2 异步通信适配器的初始化编程 对8250的内部控制寄存器进行编程写入 ⑴ 写入除数寄存器——设置传输率 ⑵ 写入通信线路控制寄存器——设置字符格式 ⑶ 写入调制解调器控制寄存器——设置工作方式 ⑷ 写入中断允许寄存器——设置中断允许或屏蔽 * 8250内部寄存器的地址 DLAB A2 A1 A0 寄存器操作 com1 com2 0 0 0 0 读接收缓冲器/写发送保持寄存器 3F8+0 2F8+0 0 0 0 1 中断允许寄存器 3F8+1 2F8+1 0 0 1 0 中断识别寄存器(只读) 3F8+2 2F8+2 * 0 1 1 通信线路控制寄存器 3F8+3 2F8+3 * 1 0 0 调制解调器控制寄存器 3F8+4 2F8+4 * 1 0 1 通信线路状态寄存器 3F8+5 2F8+5 * 1 1 0 调制解调器状态寄存器 3F8+6 2F8+6 * 1 1 1 不用 3F8+1 2F8+1 1 0 0 0 除数寄存器(低8位) 3F8+0 2F8+0 1 0 0 1 除数寄存器(高8位) 3F8+1 2F8+1 返回 * 设置传输率 mov al,80h mov dx,3fbh out dx,al ;写入通信线路控制寄存器,使DLAB=1 mov ax,96 ;分频系数:1.8432MHz÷(1200×16)=96 mov dx,3f8h out dx,al ;写入除数寄存器低8位 mov al,ah inc dx out dx,al ;写入除数寄存器高8位 写入除数寄存器 * 设置字符格式 mov al mov dx,3fbh out dx,al ;写入通信线路控制寄存器 ;这段程序同时使DLAB=0 写入通信线路控制寄存器 * 设置工作方式 设置查询通信方式 mov al,03h ;控制-OUT2为高, -DTR和-RTS为低 mov dx,3fch out dx,al ;写入调制解调器控制寄存器 设置中断通信方式 mov al,0bh ;控制为-OUT2低,允许INTRPT产生请求 mov dx,3fch out dx,al 写入调制解调器控制寄存器 * 设置中断允许或屏蔽位 mov al,0 ;禁止所有中断 mov dx,3f9h out dx,al ;写入中断允许寄存器(此时DLAB=0) 写入中断允许寄存器 * 10.6.3 异步通信程序举例 程序循环读取串口2(com2,基地址2f8)中8250的通信状态寄存器 数据传输错误就显示一个问号“?” 接收到数据就显示出来 从键盘输入发送字符(用户没有输入字符就不发送)当发送保持寄存器空时进行发送 如果键盘输入ESC键则返回DOS * 查询通信线路状态 statue: mov dx,2fdh ;读通信线路状态寄存器 in al,dx test al,1eh ;接收有错误否(D4-D1)? jnz error ;有错,则转错误处理 test al,01h ;接收到数据吗(D0)? jnz receive ;是,转接收处理 test al,20h ;保持寄存器空吗(D5)? jz statue ;不能,循环查询 异步通信程序 * 检测键盘输入 mov ah,0bh ;检测键盘有无输入字符 int 21h cmp al,0 jz statue ;无输入字符,循环等待 mov ah,0 ;有输入字符,读取字符 int 16h ;采用01号DOS功能调用,则有回显 cmp al,1bh jz done ;是ESC键,程序返回DOS 异步通信程序 * 发送数据 mov dx,2f8h ;将字符输出给发送保持寄存器 out dx,al ;串行发送数据 jmp statue ;继续查询 异步通信程序 * 接收数据 receive: mov dx,2f8h ;从输入缓冲寄存器读取字符 in al,dx and al,7fh ;传送标准ASCII码(7个数据位) ;所以仅取低7位 push ax ;保存数据 异步通信程序 * 显示数据 mov dl,al ;屏幕显示该数据 mov ah,2 int 21h pop ax ;恢复数据 cmp al,0dh ;数据是回车符吗? jnz statue ;不是,则循环 mov dl,0ah ;是,再进行换行 mov ah,2 int 21h jmp statue ;继续查询 异步通信程序 * 接收错误
文档评论(0)