- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8250通信编程
8250通信编程1、8250初始化(1) 设置波特率例如,设波特率为9600,查表7.6得,波特 率因子为12。 MOV DX, 3FBH MOV AL, 80H OUT DX, AL MOV DX, 3F8H MOV AL, 12 OUT DX, AL INC DX MOV AL, 0 OUT DX, AL (2) 设置串行通信数据格式 例如,数据格式为8位数据位,1位停止位,奇校验。 MOV AL, 0BH MOV DX, 3FBH OUT DX, AL (3) 设置工作方式 无中断: MOV AL, 3 ;OUT2=0 MOV DX, 3FCH OUT DX, AL 有中断: MOV AL, 0BH ;OUT2=1 MOV DX, 3FCH OUT DX, AL 循环测试(自发自收): MOV AL, 13H MOV DX, 3FCH OUT DX, AL 2、程序查询方式通信程序 发送程序:读LSR(3FDH)中D5位,检查发送保持器是否空(D5=1)。 TR: MOV DX, 3FDH IN AL, DX TEST AL, 20H JZ TR ;发送保持器不空,转TR MOV AL, [SI] ;发送保持器空, 发下一数据 MOV DX, 3F8H OUT DX, AL 接收程序:读LSR(3FDH)中D0位,检查接收数据寄存器是否就绪(D0=1)。 RE: MOV DX, 3FDH IN AL, DX TEST AL, 1 JZ RE ;接收缓冲器不满,转RE MOV DX, 3F8H ;接收缓冲器满,读数据 IN AL, DX MOV [DI], AL 3、用中断方式编程 1)设置8259的屏蔽字(OCW1),允许串口中断IRQ4 IN AL, 21H AND AL, OUT 21H, AL 2)设置中断向量IRQ4 对IRQ4,中断类型号为0CH, 0CH×4=30H。因此,应在30H,31H存放IP值,32H,33H存放CS值。 设中断服务程序入口地址为2000:100H XOR AX,AX MOV DS,AX MOV AX,100H MOV WORD PTR[0030H],AX ;送100H到00030H和00031H内存单元中 MOV AX,2000H MOV WORD PTR[0032H],AX ;送2000H到00032H和00033H内存单元中 3)对8250送中断允许寄存器(3F9H), 设置允许/屏蔽位。 例如,允许发送与接收中断请求。 MOV AL,3 MOV DX,3F9H OUT DX,AL 4)在中断结束返回时,需要对8259A发EOI命令,保证 8259A可以重新响应中断请求。 MOV AL,20H OUT 20H,AL ;发EOI命令,OCW2 IRET ;中断返回 8250应用举例 例 按查询方式编制一个发送与接收程序,能将键入的每一个ASCII码字符发送出去,并显示在CRT上,同时能把接收到的每一个字符也显示出来。 设:数据传输速率为9600波特,通信格式为8位数据位,一位停止位,奇校验。 1.自发自收 KEY: MOV DX, 3FBH ;写LCR MOV AL, 80h OUT DX, AL MOV DX, 3F8H ;送波特率常数 MOV AL, 12 OUT DX, AL ;低8位 INC DX MOV AL, 0 OUT DX, AL ;高8位 MOV AL,0BH MOV DX,3FBH OUT DX,AL ;写LCR,设通信格式 MOV AL,13H ;自发自收 ;RTS=1,DTR=1 MOV DX,3FCH OUT DX,AL ;写MCR,设置工作方式 CHECK:MOV DX,3FDH ;读LSR IN AL,DX TEST AL,1 ;查接收缓冲器是否满? JNZ REV ;若满,转REV TEST AL,20H ;查发送保持器
文档评论(0)