Download presentation
Presentation is loading. Please wait.
1
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS8250 2.PC16450/PC16550
带16字节的发送缓冲器和16字节的接收缓冲器 FIFO 3.端口基地址,硬件中断请求号,中断向量: COM1: 3F8H,4,0C COM2: 2F8H, 3, 0B 当加入其他的串口卡后,其地址一般为 COM3: 3E8, 4 ,0C COM4: 2E8, 4 , 0B 由于冲突,一般应该将中断请求修改为其他保留的号。 4.多串口卡:2,4,8,16,32 如MOXA卡 提供标准的编程开发包。 端口地址:每个一口,但中断一个(多个)
2
二、UART的简单应用 1.连线:RS232C接口标准,不需要进行电平转换,3线或7线连接方式
2.编程: 1)DOS下按照文件编程,文件名就是COM1:或COM2: 2)WINDOWS下VB编程,用MSCOMM控件编程 3) WINDOWS下VC编程,用控件,或者按文件编程。 4)用开发包编程:有很多,可以从网上下载。
3
三、UART的管脚与结构 1.管脚:不需要掌握 2.内部结构:见书 四、寄存器与BPS 1.地址分配及其复用 3根地址信号线:A2 A1 A0 8个地址,7个可用,10个可编程物理端口。 复用:。。。。。。。 2.10个寄存器及其每位的作用 。。。。。。。。。。。。。 2.波特率除数 波特率除数(BRD)是16位数,它与UART的数据传输速率 (波特率)有关。当使用UART的内部时钟频率为1.8432MHz时, 则波特率除数BRD与波特率Baud之间的关系如下式所示: BRD=时钟频率/(16×Baud)。 例如,若要计算波特率为1200b/s的波特率除数,则有: BDR= /(16×1200)=0060H。
4
五、8250工作过程 1.数据发送过程 CPU将要发送的数据以字符为单位写到8250的THR中()。当TSR中的数据全部移出变空时,存于THR中待发送的数据将会自动发送并行送到TSR(8250初始化后,TSR为空状态,所以初始化后传送到THR的第一个字符总是立即送到TSRE。)。TSR在发送时钟的激励下,按照事先和接收方约定的字符传送式(参见图7-35),加上起始位,奇偶校验位和停止位,再以约定的波特率(由波特率控制部分产生)按照从底到高的顺序一位一位的由SOUT端发送出去。 一旦THR的内容送到TSR ,就会在LSR中建立"数据发送保持寄存器空"的状态位;而且也可以用此状态位来触发产生中断。因此,查询状态位或者利用该状态触发的中断即可实现数据的连续发送。
5
2.数据接收过程 由通信对方来的数据在接收时钟RCLK的作用下,通过SIN端逐位进入RSR。RSR根据初始化时定义的数据位数确定接收到了一个完整的数据后会立即将数据自动并行传送到RBR。RBR收到RSR 的数据后,就立即在状态寄存器中建立"接收到数据准备好"的状态,而且也可以用此状态位来触发中断。因此,查询状态位或者利用该状态触发的中断即可实现数据的连续接收。 由于串行异步通信的速率低,无论是用查询方式还是中断方式来实现异步通信均不很困难。
6
8250初始化时,通常首先使通信控制字的D7=1,即使DLAB为1 .在此条件下,将除数低8位和高8位分别写入8250内部的除数寄存器。
六、8250初始化编程 1.写BPS 8250初始化时,通常首先使通信控制字的D7=1,即使DLAB为1 .在此条件下,将除数低8位和高8位分别写入8250内部的除数寄存器。 MOV DX,3FBH ;LCR的地址 MOV AL,80H ;开始 OUT DX,AL; MOV DX,3F8H ;使LCR的D7=1 MOV AL,60H ;DLL的地址 OUT DX,AL ;写除数低8位 INC DX ;DLH的地址 MOV AL,0 OUT DX,AL ;写除数高8位
7
2.写通讯线控制字 MOV DX,3FBH ;LCR的地址 MOV AL,0AH ;1 位停止位,7位数据位,奇校验 OUT DX,AL ;初始化通信控制寄存器 3.写MODEM控制字 MOV DX,3FCH ;MCR的地址 MOV AL,03H ;使DTR和RTS有效 OUT DX,AL ;初始化modem控制器 4.写中断允许字(中断方式) MOV DX,3F9H ;IER的地址 MOV AX,0 ;禁止所有中断 OUT DX,AL ;写中断允许寄存器
8
假定要发送的字节数放在BX中,要发送的数据顺序存放在以DATA为首地址的内存区中,则发送数据的程序段如下所示。
七、8250的应用举例 1.查询方式 假定要发送的字节数放在BX中,要发送的数据顺序存放在以DATA为首地址的内存区中,则发送数据的程序段如下所示。 SENDPRG: MOV DX,3FDH LEA SI,DATA WAITTHR: IN AL,DX TEST AL,20H;检查THR是否空 JZ WAITTHR PUSH DX MOV DX,3F8H LODSB OUT DX,AL POP DX DEC BX JNZ WAITTHR 查询方式实现数据的接收。 RECVPRG: MOV DX,3FDH WAITRBR: IN AL,DX TEST AL,1EH ;检查是否有任何错误产生 JNZ ERROR TEST AL,01H ;检查数据准备好否 JZ WAITRBR MOV DX,3F8H IN AL,DX ;接收一个字节 AND AL,7FH ;只保留低7位 …
9
2. 中断方式 以查询方式发送数据,以中断方式接收数据, INISIR:MOV DX,3FBH MOV AL,80H OUT DX,AL ;置DLAB=1 MOV DX,3F8H MOV AL,0CH OUT DX,AL MOV DX,3F9H MOV AL,0 ;置除数为000CH,规定波特率为9600波特 MOV DX,3FBH MOV AL,0AH ;1 位停止位,7位数据位,奇校验 OUT DX,AL ;初始化通信控制寄存器 MOV DX,3FCH MOV AL,0BH ;使OUT2 ,DTR和RTS 有效 OUT DX,AL ;初始化MODEM 寄存器 MOV AL,01H ;允许接收数据寄存器满产生中断 OUT DX,AL ;初始化中断允许寄存器 STI ;CPU 开中断
10
中断服务程序 RECVE: SAVEDATA: PUSH AX PUSH BX PUSH DX PUSH DS MOV DX,3FDH
IN AL,DX MOV AH,AL ;保存接收状态 MOV DX,3F8H IN AL,DX ;读入接收到的数据 AND AL,7FH TEST AH,1EH ;检查有无错误产生 JZ SAVEDATA MOV AL,'?' ;出错的数据用问号替代 SAVEDATA: MOV DX,SEG BUFFER MOV DS,DX MOV BX,OFFSET BUFFER MOV [BX],AL MOV DX ;中断控制器端口地址 MOV AL,20H ;将EOI命令发给中断控制器8259 OUT DX,AL POP DS POP DX POP BX POP AX STI IRET
11
作业 不用任何连线,编写汇编语言程序,测试本计算机的COM1口是否能够正常工作。
两台计算机,把其串口连线,编写程序,一端发送文件,另一端接收文件。 (先发文件名)。 建议使用C或VB语言编程。也可以用汇编语言编程。
Similar presentations