资源描述
第 8 章 常用接口技术,8.1 定时控制接口 8.2 并行接口 8.3 异步串行通信接口 8.4 模拟接口,8.1 定时控制接口,定时控制具有极为重要的作用 微机控制系统中常需要定时中断、定时检测、定时扫描等 实时操作系统和多任务操作系统中要定时进行进程调度 PC机的日时钟计时、DRAM刷新定时和扬声器音调控制都采用了定时控制技术 可编程定时器芯片 软硬件相结合、方便灵活的定时电路 软件延时方法 处理器执行延时子程序,8.1.1 8253/8254定时器,定时器(计数器):由数字电路中的计数电路构成,记录输入脉冲的个数 脉冲信号具有一定随机性,往往通过脉冲的个数可以获知外设的状态变化次数(计数) 脉冲信号的周期固定(使用高精度晶振产生脉冲信号),个数乘以周期就是时间间隔(定时) Intel 8253/8254可编程间隔定时器 3个独立的16位计数器通道 每个计数器有6种工作方式,1. 内部结构和引脚,3个相互独立的计数器通道,结构完全相同 计数器0 计数器1 计数器2 每个计数器通道 16位减法计数器 16位预置寄存器 输出锁存器,定时器外设引脚,CLK时钟输入信号 在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1 GATE门控输入信号 控制计数器工作,可分成电平控制和上升沿控制两种类型 OUT计数器输出信号 当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号,连接处理器引脚,D0D7数据线 A0A1地址线 RD*读信号 WR*写信号 CS*片选信号,2. 工作方式,8253有6种工作方式,由方式控制字确定 每种工作方式的过程类似: 设定工作方式 设定计数初值 硬件启动 计数初值进入减1计数器 每输入一个时钟计数器减1的计数过程 计数过程结束,定时器方式0:计数结束中断, 设 定 工 作 方 式, 设 定 计 数 初 值, 计 数 值 送 入 计 数 器, 计 数 过 程, 计 数 结 束,定时器方式1:可编程单稳脉冲, 设 定 工 作 方 式, 设 定 计 数 初 值, 硬 件 启 动, 计 数 值 送 入 计 数 器, 计 数 过 程, 计 数 结 束,定时器方式2:频率发生器(分频器),定时器方式3:方波发生器,定时器方式4:软件触发选通信号,定时器方式5:硬件触发选通信号,3. 编程:写入方式控制字,控制字写入控制字I/O地址:A1A011,00 计数器0 01 计数器1 10 计数器2 11 非法 (8253) 11 读回命令 (8254),00 计数器锁存命令 01 只读写低字节 10 只读写高字节 11 先读写低字节 后读写高字节,000 方式0 001 方式1 *10 方式2 *11 方式3 100 方式4 101 方式5,0 二进制 1 十进制,方式控制字编程示例,; 8253的计数器0、1、2端口和控制端口地址:40H43H ;设置其中计数器0为方式0 ;采用二进制计数,先低后高写入计数值 mov al,30h ;方式控制字:30H00 11 000 0B out 43h,al ;写入控制端口:43H,3. 编程:写入计数值,选择二进制时 计数值范围:0000HFFFFH 0000H是最大值,代表65536 选择十进制(BCD码) 计数值范围:00009999 0000代表最大值10000 计数值写入计数器各自的I/O地址 按方式控制字规定的读写格式进行,计数值编程示例,; 8253的计数器0、1、2端口和控制端口地址:40H43H ;设置计数器0采用二进制计数 ;写入计数初值:1024(400H) mov ax,1024 ;计数初值:1024(400H) ;写入计数器0地址:40H out 40h,al ;写入低字节计数初值 mov al,ah out 40h,al ;写入高字节计数初值,8.1.2 定时器的应用,1. 定时中断,mov al,36h ; 计数器0为方式3,二进制计数 ; 先低后高写入计数值 out 43h,al ; 写入方式控制字 mov al,0 ; 计数值为0 out 40h,al ; 写入低字节计数值 out 40h,al ; 写入高字节计数值 计数器0:方式3,计数值:65536,输出方波 频率:1.19318MHz6553618.206Hz,不断产生 OUT0端接8259A的IRQ0,每秒产生18.206次中断请求,或说每隔55ms(54.925493ms)申请一次中断 DOS系统利用计数器0的这个特点,通过08号中断服务程序实现了日时钟计时功能,2. 定时刷新,需要重复不断提出刷新请求 门控总为高,选择方式2或3 2ms内刷新128次,即15.6s刷新一次 计数初值为18 mov al,54h ;计数器1为方式2 ;采用二进制计数,只写低8位计数值 out 43h,al ;写入方式控制字 mov al,18 ;计数初值为18 out 41h,al ;写入计数值,3. 扬声器控制,;发音频率设置子程序 ;入口参数:AX1.19318106发音频率 speaker proc push ax ;暂存入口参数 mov al,0b6h ;定时器2为方式3,先低后高 out 43h,al ;写入方式控制字 pop ax ;恢复入口参数 out 42h,al ;写入低8位计数值 mov al,ah out 42h,al ;写入高8位计数值 ret speaker endp,扬声器发音控制,speakon proc ;扬声器开子程序 push ax in al,61h ;读取61H端口的原控制信息 or al,03h ;D1D0PB1PB011,其他不变 out 61h,al ;直接控制发声 pop ax ret speakon endp,;扬声器关子程序 and al,0fch ;D1D0PB1PB000,其他不变,例8-1控制扬声器程序,;数据段 freq dw 1193180/600 ;给一个600Hz的频率 ;代码段 mov ax,freq call speaker ;设置扬声器的音调 call speakon ;打开扬声器声音 call readc ;等待按键 call speakoff ;关闭扬声器声音 ;子程序 ,输出:明确向哪个端口输出什么数据 输入:清楚从哪个端口输入什么数据,8.2 并行接口,并行数据传输:以计算机字长,通常是8、16或32位为传输单位,利用8、16或32个数据信号线一次传送一个字长的数据 适合于外部设备与微机之间进行近距离、大量和快速的信息交换,如微机与并行接口打印机、磁盘驱动器等 微机系统中最基本的信息交换方法,例如系统板上各部件之间的数据交换 并行数据传输需要并行接口的支持,8.2.1 并行接口电路8255,具有多种功能的可编程并行接口电路芯片 最基本的接口电路:三态缓冲器和锁存器 与CPU间、与外设间的接口电路:状态寄存器和控制寄存器 还有端口的译码和控制电路、中断控制电路 分3个端口,共24个外设引脚 共3种输入输出工作方式 方式0:基本输入输出方式 方式1:选通输入输出方式 方式2:双向选通传送方式,1. 内部结构和引脚,8255外设数据端口,端口A:PA0PA7 A组,支持工作方式0、1、2 常作数据端口,功能最强大 端口B:PB0PB7 B组,支持工作方式0、1 常作数据端口 端口C:PC0PC7 仅支持工作方式0,分两个4位,每位可独立操作 A组控制高4位PC4PC7,B组控制低4位PC0PC3 可作数据、状态和控制端口 控制最灵活,最难掌握,2. 工作方式0:基本输入输出方式,方式0输入 执行输入IN指令,输入外设数据,2. 工作方式0:基本输入输出方式,方式0输出 执行输出OUT指令,将数据送给外设,3. 工作方式1:选通输入输出方式,借助于选通(应答)联络信号进行输入或输出 只有端口A和端口B可以采用方式1 作为输入或输出的数据端口 利用端口C的3个引脚作为应答联络信号 还提供有中断请求逻辑和中断允许触发器 对输入和输出的数据都进行锁存 适用于查询和中断方式的接口电路,8255工作方式1输入引脚,A组引脚,选通输入工作时序,异步时序:没有时钟,由引脚控制信号定时 STB*和IBF是外设和8255间应答联络信号,B组引脚,8255工作方式1输出引脚,A组引脚,选通输出工作时序,异步时序:没有时钟,由引脚控制信号定时 OBF*和ACK*是外设和8255间应答联络信号,B组引脚,4. 8255的编程:写入方式控制字,控制字写入控制字I/O地址:A1A011,D7,写入方式控制字示例,要求: A端口:方式1输入 C端口上半部:输出,C口下半部:输入 B端口:方式0输出 方式控制字:10110001B或B1H 初始化的程序段: mov dx,0fffeh ;假设控制端口为FFFEH mov al,0b1h ;方式控制字 out dx,al ;送到控制端口,4. 8255的编程:读写数据端口,利用数据端口I/O地址:A1A000(A) 01(B) 10(C) 作输入接口,执行输入IN指令获取外设数据 作输出接口,执行输出OUT指令将数据送出 8255具有锁存输出数据的能力 对输出方式的端口同样可以输入 不是读取外设数据,而是上次给外设的数据 可实现按位输出控制 对输出端口B的PB7位置位的程序段 mov dx,0fffah ;B端口假设为FFFAH in al,dx ;读出B端口原输出内容 or al,80h ;使PB7D71 out dx,al ;输出新的内容,端口C的特点,C端口被分成两个4位端口 只能以方式0工作,可分别选择输入或输出 上半部和A端口编为A组 下半部和B端口编为B组 A和B端口在方式1或方式2时 C端口的部分或全部引脚将被征用 其余引脚工作在方式0,端口C的输出,通过端口C的I/O地址 向C端口直接写入字节数据 写进C端口的输出锁存器,并从输出引脚输出 对设置为输入的引脚无效 通过控制端口的I/O地址 向C端口写入位控字 使C端口的某个引脚输出1或0 或置位复位内部的中断允许触发器,示意图,端口C位控制字,返回,端口C的输入,未被A和B端口征用的引脚 定义为输入的端口读到引脚输入的信息 定义为输出的端口读到输出锁存器的信息 被A和B端口征用作为联络线的引脚 读到反映8255状态的状态字,示意图,端口C的读出内容,返回,8.2.2 并行接口的应用,端口A,B,C和控制字地址 60H,61H,62H和63H 工作在基本输入/输出方式0 端口A为方式0输入,用来读取键盘扫描码 端口B工作于方式0输出,例如控制扬声器等 端口C为方式0输入,读取系统状态和配置 系统的初始化编程: mov al,10011001b ;方式控制字99H out 63h,al,1. 用8255方式0与打印机接口,端口A为方式0输出打印数据 PC7引脚产生负脉冲选通信号 PC2引脚连接忙信号查询其状态 微处理器利用查询方式输出数据,打印机接口时序,典型的异步时序 DATA0DATA7(8位并行数据)信号 主机输出打印数据和命令 STROBE*(选通)信号 输出低有效,才能使打印机接收数据 ACK*(响应)信号 打印机接收数据结束回送负脉冲响应信号 BUSY(忙状态)信号 打印机忙于处理接收的数据,不接收新的数据,示意图,打印机时序,返回,方式0初始化程序段,mov dx,0fffeh ;控制端口地址为FFFEH mov al,10000001b ;方式控制字 out dx,al ;A端口方式0输出,端口B任意 ;C端口上半部输出、下半部输入 mov al,00001111b ;端口C复位置位控制字 out dx,al ;使PC71,即置STORE*1,打印数据子程序1,printc proc ;AH打印数据 push ax push dx prn: mov dx,0fffch ;读取端口C in al,dx ;查询打印机的状态 and al,04h ;忙否(PC2BUSY0)? jnz prn ;PC21,打印机忙,等待 mov dx,0fff8h ;PC20,打印机不忙,输出 mov al,ah out dx,al ;将打印数据从端口A输出,打印数据子程序2,mov dx,0fffeh ;从PC7送出控制低脉冲 mov al,00001110b ;使PC7STROBE*0 out dx,al nop ;产生一定宽度的低电平 nop mov al,00001111b ;使PC7STROBE*1 out dx,al ;产生低脉冲STROBE*信号 pop dx pop ax ret printc endp,2. 用8255方式1与打印机接口,端口A选通输出连接打印机 PC7OBF*输出,PC6ACK*输入,PC3INTR输出 通过PC6控制INTEA,方式1时序配合,8255的OBF*引脚对应打印机STROBE*引脚 略有差别,不能直接连接,方式1初始化程序段,mov dx,0fffeh ;设定端口A为选通输出方式 mov al,0a0h out dx,al mov al,0ch ;使INTEA(PC6)为0,禁止中断 out dx,al mov cx,counter ;打印字节数送CX mov bx,offset buffer ;取字符串首地址送BX call prints ;调用打印子程序,打印字符串子程序1,;入口参数:DS:BX字符串首地址 ;CX字符个数 prints proc push ax ;保护寄存器 push dx print1: mov al,bx ;取一个数据 mov dx,0fff8h out dx,al ;从端口A输出,打印字符串子程序2,mov dx,0fffch print2: in al,dx ;读取端口C test al,80h ;检测OBF*(PC7)为1否? jz print2 ;为0,说明打印机没有响应,继续检测 inc bx ;为1,说明打印机已接受数据 loop print1 ;准备取下一个数据输出 pop dx ;打印结束,恢复寄存器 pop ax ret ;返回 prints endp,8.2.3 键盘及其接口,键盘是微机系统最常使用的输入设备 小键盘:适用于单板机或以处理器为基础的仪器,实现数据、地址、命令及指令等输入 独立键盘:通过5芯电缆与PC微机主机连接,1. 简易键盘,线性结构键盘,矩阵结构键盘,识别按键的扫描方法,先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合(通过检查列线电位实现) 再将第1行接地,检测列线是否有变为低电位的线 如此往下一行一行地扫描,直到最后一行 扫描过程中,发现某一行有键闭合时(列线输入中有一位为0),便在扫描中途退出 通过组合行线和列线识别此刻按下哪一键,键盘扫描程序第1段:判断是否有键按下,key1: mov al,00 mov dx,rowport ; rowport行线端口地址 out dx,al ; 使所有行线为低电平 mov dx,colport ; colport列线端口地址 in al,dx ; 读取列值 cmp al,0ffh ; 判定列线是否为低电平 jz key1 ; 没有,无闭合键 ; 则循环等待(或转向其他程序片断) call delay ; 有,延迟20ms消除抖动,键盘扫描程序第2段:识别按键,mov cx,8 ; 行数送CX mov ah,0feh ; 扫描初值送AH key2: mov al,ah mov dx,rowport out dx,al ; 输出行值(扫描值) mov dx,colport in al,dx ; 读进列值 cmp al,0ffh ; 判断有无低电平的列线 jnz key3 ; 有,则转下一步处理 rol ah,1 ; 无,则移位扫描值 loop key2 ; 准备下一行扫描 jmp key1 ; 所有行都没有按键 key3: ; AL列值,AH行值,键盘扫描程序第3段:查找键代码1,key3: mov si,offset table ; SI指向键行列值表 mov di,offset char ; DI指向键代码表 mov cx,64 ; CX键的个数 key4: cmp ax,si ; 与按键的行列值比较 jz key5 ; 相同,说明查到 inc si ; 不相同,继续比较 inc si inc di loop key4 jmp key1 ; 全部不相同 ; 返回继续检测(或转向其他程序片断),键盘扫描程序第3段:查找键代码2,key5: mov al,di ; 获取键代码送AL ; 判断按键释放,没有则等待 call delay ; 按键释放,延时消除抖动 ; 后续处理 ; 键盘的行列值表:低字节是列值、高字节是行值 table word 0fefeh ; 键0的行列值 word 0fefdh ; 键1的行列值 ; 其他键的行列值 ; 键盘的键代码表 char byte ; 键0的代码值 byte ; 键1的代码值 ; 其他键的代码值,2. PC机键盘,与主机箱分开的一个独立装置 通过一根五芯电缆与主机相连 PC及PC/XT机采用83(或84)键的标准键盘,PC机键盘的工作过程,键盘电路正常工作时不断地扫描键盘矩阵 有按键,则确定按键位置之后以串行数据形式发送给系统板键盘接口电路 键按下时,发送该键的接通扫描码 键松开时,发送该键的断开扫描码 若一直按住某键,则以拍发速率(每秒230次)连续发送该键的接通扫描码,接通扫描码键盘上的位置 断开扫描码接通扫描码80H,键盘接口电路的工作过程,接收一个串行形式字符,进行串并转换 产生键盘中断IRQ1请求,等待读取键盘数据 CPU响应中断,进入09H键盘中断服务程序: 读取键盘扫描码:用IN AL,60H即可 响应键盘:系统使PB71 允许键盘工作:系统使PB70 处理键盘数据 给8259A中断结束EOI命令,中断返回,例8-2键盘中断服务程序1,09H号中断服务程序(kbint过程) 完成常规的操作 处理键盘数据 将扫描码通过查表转换为对应ASCII码送缓冲区 不能显示的按键,转换为0,且不再送至缓冲区 键盘I/O功能程序(kbget子程序) 从缓冲区中读取转换后的ASCII码 功能调用(主程序) 循环显示键入的字符,例8-2键盘中断服务程序2,键盘缓冲区 中断服务程序与子程序之间传递参数 先进先出循环队列,例8-2键盘中断服务程序3,; 数据段 buffer byte 10 dup(0) ; 键盘缓冲区 bufptr1 word 0 ; 队列头指针 bufptr2 word 0 ; 队列尾指针 ; 按扫描码顺序给出字符的ASCII码 ; 不能显示的按键为0 ; 第一个0不对应按键,仅用于查表指令 scantb byte 0,1,1234567890-=,08h ; 键盘第1排的按键,从ESC到退格 byte 0,0,789-456+1230. ; 右边小键盘,从Num Lock到Del,例8-2键盘中断服务程序4,; 代码段 mov ax,3509h ; 获取保存原中断向量表项 int 21h push es push bx cli ; 关中断 push ds ; 设置09H号新中断向量表项 mov ax,seg kbint mov ds,ax mov dx,offset kbint mov ax,2509h int 21h pop ds,例8-2键盘中断服务程序5,in al,21h ; 允许IRQ1中断 push ax and al,0fdh out 21h,al sti ; 开中断 start1: call kbget ; 调用KBGET获取按键的ASCII码 cmp al,1 jz start2 ; 是ESC键,则退出 push ax ; 保护字符 call dispc ; 显示字符 pop ax ; 恢复字符,例8-2键盘中断服务程序6,cmp al,0dh ; 该字符是回车符吗? jnz start1 ; 不是,取下个按键字符 mov al,0ah ; 是回车符,再进行换行 call dispc jmp start1 ; 继续取字符 start2: cli ; 恢复中断原状态 pop ax out 21h,al pop dx pop ds mov ax,2509h int 21h sti,例8-2键盘中断服务程序7,; KBGET子程序从缓冲区取字符送AL kbget proc push bx ; 保护BX kbget1: cli ; 关中断 mov bx,bufptr1 ; 取缓冲区队列头指针 cmp bx,bufptr2 ; 与尾指针相等否? jnz kbget2 ; 不相等,有字符 sti ; 相等,缓冲区空 jmp kbget1 ; 等待缓冲区有字符,例8-2键盘中断服务程序8,kbget2: mov al,bufferbx ; 从队列头取字符送AL inc bx ; 队列头指针增量 cmp bx,10 ; 指针指向队列末端? jc kbget3 ; 没有,转移 mov bx,0 ; 循环指向始端 kbget3: mov bufptr1,bx ; 设定新队列头指针 sti ; 开中断 pop bx ; 恢复BX ret ; 子程序返回 kbget endp,例8-2键盘中断服务程序9,; KBINT中断服务程序处理09H号键盘中断 kbint proc sti ; 开中断 push ax ; 保护寄存器 push bx in al,60h ; 读取键盘扫描码 mov bl,al ; 扫描码保存在BL in al,61h ; 使PB71,响应键盘 or al,80h out 61h,al and al,7fh ; 使PB70,允许键盘 out 61h,al,例8-2键盘中断服务程序10,test bl,80h ; 键盘数据处理 jnz kbint2 ; 是断开扫描码,退出 xor bh,bh mov al,scantbbx ; 是接通扫描码,转换 cmp al,0 ; 合法的ASCII码? jz kbint2 ; 不是,退出 mov bx,bufptr2 ; 是,取队列尾指针 mov bufferbx,al ; 存入缓冲区队列尾 inc bx ; 队列尾指针增量 cmp bx,10 ; 指针指向队列末端? jc kbint1 ; 没有,转移 mov bx,0 ; 循环指向始端,例8-2键盘中断服务程序11,kbint1: cmp bx,bufptr1 ; 缓冲区是否已满? jz kbint2 ; 队列满,退出 mov bufptr2,bx ; 队列不满,设置新的队列尾指针 kbint2: mov al,20h ; 普通中断结束命令 out 20h,al pop bx ; 恢复寄存器 pop ax iret ; 中断返回 kbint endp,示意图,队列满,返回,8.2.4 数码管及其接口,发光二极管LED是最简单的显示设备 由7段LED就可以组成的LED数码管 LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中 LED数码管可以显示内存地址和数据等,1. LED数码管的工作原理,主要部分是7段发光管 顺时针分别称为a、b、c、d、e、f、g 有的产品还附带有一个小数点h 通过7个发光段的不同组合 主要显示09 也可显示AF(16进制数) 还可显示个别特殊字符:、P 共阳极结构 共用阳极接高电平 共阴极结构 共用阴极接低电平,示意图,LED数码管的结构,返回,共阳极,共阴极,2. 单个数码管的显示,LED数码管显示一位十六进制数(4位二进制数) 硬件方法:专用的带驱动器的LED段译码器 软件方法:组成显示代码表,通过查表进行译码 ledtb byte 3fh,06h,5bh, ;显示代码表 ; 实现1个LED数码管显示 mov bx,1 ; BX要显示的数字 mov al,ledtbbx ; 换码为显示代码:ALLEBTBBX mov dx,port ; port数码管端口地址 out dx,al ; 输出显示,示意图,单个数码管的显示,返回,3. 多个数码管的显示,硬件上用公用的驱动电路来驱动各数码管 软件上用扫描方法实现数码显示 8个数码管:用2个8位输出端口控制 位控制端口:控制哪个(位)数码管显示 段控制端口:控制哪个段显示,决定具体显示什么数码 稳定数字显示:依次显示,不断重复 重复频率越高,数字显示越稳定 延时显示时间越长,显示亮度就越高 各种显示效果:控制重复频率和延时时间,位控制端口,位控制:Di0,相应位发光,段控制端口,段控制:Di0,相应段发光,依次显示8位数码管程序1,; 数据段 leddt byte 8 dup(0) ; 数码缓冲区 ; 主程序 mov si,offset leddt ; 指向数码缓冲区 call displed ; 调用显示子程序 ; 子程序:显示一次数码缓冲区的8个数码 ; 入口参数:DS:SI缓冲区首地址 displed proc push ax push bx push dx,依次显示8位数码管程序2,xor bx,bx mov ah,0feh ; 指向最左边数码管 led1: mov bl,si ; 取出要显示的数字 inc si mov al,ledtbbx ; 得到显示代码:ALLEDTBBX mov dx,segport ; segport为段控制端口 out dx,al ; 送出段码 mov al,ah ; 取出位显示代码 mov dx,bitport ; bitport为位控制端口 out dx,al ; 送出位码,依次显示8位数码管程序3,call delay ; 实现数码管延时显示 rol ah,1 ; 指向下一个数码管 cmp ah,0feh ; 是否指向最右边数码管 jnz led1 ; 没有,显示下一个数字 pop dx pop bx pop ax ret ; 8位数码管都显示一遍 ; 显示代码表,按照09、AF的顺序 ledtb byte 0c0h,0f9h,0a4h,86h,8eh displed endp,依次显示8位数码管程序4,timer = 10 ; 延时常量 delay proc ; 软件延时子程序 push bx push cx mov bx,timer ; 外循环:timer次数 delay1: xor cx,cx delay2: loop delay2 ; 内循环:216次循环 dec bx jnz delay1 pop cx pop bx ret delay endp,8.3 异步串行通信接口,串行通信:将数据分解成二进制位用一条信号线,一位一位顺序传送的方式 串行通信的优势:用于通信的线路少,因而在远距离通信时可以极大地降低成本 串行通信适合于远距离数据传送,也常用于速度要求不高的近距离数据传送 通信协议(通信规程):收发双方共同遵守,解决传送速率、信息格式、位同步、字符同步、数据校验等问题 串行异步通信:以字符为单位进行传输 串行同步通信:以一个数据块(帧)为传输单位,8.3.1 异步串行通信格式,起始位每个字符开始传送的标志,起始位采用逻辑0电平,数据位数据位紧跟着起始位传送。由58个二进制位组成,低位先传送,校验位用于校验是否传送正确;可选择奇检验、偶校验或不传送校验位,停止位表示该字符传送结束。停止位采用逻辑1电平,可选择1、1.5或2位,空闲位传送字符之间的逻辑1电平,表示没有进行传送,数据传输速率,数据传输速率比特率(Bit Rate) 每秒传输的二进制位数bps 字符中每个二进制位持续的时间长度都一样,为数据传输速率的倒数 进行二进制数码传输,每位时间长度相等: 比特率波特率(Baud Rate) 过去,限制在50 bps到9600 bps之间 现在,可以达到115200 bps或更高,8.3.2 异步串行接口标准,美国电子工业协会EIA制定 1962年公布,1969年修订 1987年1月正式改名为EIA-232D 数据终端设备DTE与数据通信设备DCE标准接口 调制解调器Modem 通信线路信号与数字信号相互转换的设备 传输制式 全双工:双根传输线,能够同时发送和接收 半双工:单根传输线,不能同时发送和接收 单工:单根传输线只用作发送或只用作接收,1. 232C的引脚定义,TxD:发送数据 RxD:接收数据 RTS:请求发送 CTS:清除发送(允许发送) DTR:数据终端准备好 DSR:数据装置准备好 GND:信号地 CD:载波检测(DCD) RI:振铃指示,保护地(机壳地) TxC:发送器时钟 RxC:接收器时钟,2. 232C的连接,连接调制解调器:通过电话线路远距离通信 直接(零调制解调器)连接:进行短距离通信,不使用联络信号的3线相连,“伪”使用联络信号的3线相连,2. 232C的连接,连接调制解调器:通过电话线路远距离通信 直接(零调制解调器)连接:进行短距离通信,使用联络信号的多线相连,8.3.3 异步串行通信程序,IBM PC/XT机的UART芯片是INS 8250 后续PC机采用兼容的NS16450和NS16550 现在32位PC机芯片组兼容NS16550 实现起止式串行异步通信协议 数据位为58位,停止位1、1.5或2位 奇偶校验,具有奇偶、帧和溢出错误检测电路 支持全双工通信 8250支持的数据传输速率为509600 bps 16550支持的速率高达115200 bps,1. 8250的寄存器,9种可访问的寄存器 用引脚A0A2来寻址,DLAB位区别,8250的接收缓冲寄存器RBR,存放串行接收后转换成并行的数据,8250的发送保持寄存器THR,包含将要串行发送的并行数据,8250的除数寄存器,除数寄存器保存设定的分频系数 分频系数基准时钟频率(16比特率),8250的通信线路控制寄存器LCR,指定串行异步通信的字符格式,8250的通信线路状态寄存器LSR,提供串行异步通信的当前状态,奇偶错误PE 帧错误FE 溢出错误OE,8250的引脚,分成连接CPU的部分和连接外设的部分 注意:8250不是Intel公司的产品,所以该芯片引脚名称与前面学习的8253、8255等Intel产品有所不同,但是引脚功能却是类似的,1. 处理器接口引脚(1),数据线D0D7:在CPU与8250之间交换信息 地址线A0A2:寻址8250内部寄存器 片选线:8250设计了3个片选输入信号CS0、CS1、CS2*和一个片选输出信号CSOUT。3个片选输入都有效时,才选中8250芯片,同时CSOUT输出高电平有效。 地址选通信号ADS*:当该信号低有效时,锁存上述地址线和片选线的输入状态,保证读写期间的地址稳定,1. 处理器接口引脚(2),读控制线 数据输入选通DISTR(高有效)和DISTR*(低有效)有一个信号有效,CPU从8250内部寄存器读出数据 相当于I/O读信号 写控制线 数据输出选通DOSTR(高有效)和DOSTR*(低有效)有一个有效,CPU就将数据写入8250内部寄存器 相当于I/O写信号 8250读写控制信号有两对,每对信号作用完全相同,只不过有效电平不同而己,1. 处理器接口引脚(3),驱动器禁止信号DDIS:CPU从8250读取数据时,DDIS引脚输出低电平,用来禁止外部收发器对系统总线的驱动;其他时间,DDIS为高电平 主复位线MR:硬件复位信号RESET 中断请求线INTRPT:8250有4级共10个中断源,当任一个未被屏蔽的中断源有请求时,INTRPT输出高电平向CPU请求中断,2. 时钟信号,时钟输入引脚XTAL1:8250的基准工作时钟 时钟输出引脚XTAL2:基准时钟信号的输出端 波特率输出引脚BAUDOUT*:基准时钟经8250内部波特率发生器分频后产生发送时钟 接收时钟引脚RCLK:接收外部提供的接收时钟信号;若采用发送时钟作为接收时钟,则只要将RCLK引脚和BAUDOUT*引脚直接相连,3. 串行异步接口引脚,4. 输出线,OUT1*和OUT2*: 两个一般用途的输出信号 由调制解调器控制寄存器的D2和D3使其输出低电平有效信号 复位使其恢复为高,8250的调制解调器控制寄存器MCR,设置8250与数据通信设备联络的输出信号,循环工作方式: 4个控制输入信号在内部与4个控制输出信号相连 发送的串行数据在内部被接收 检测8250发送和接收功能,不必外连线,8250的4个控制输入信号,CTS*:允许发送,当数据通信设备已准备好接收数据终端设备的传送数据时,发送CTS有效信号来响应RTS信号 DSR*:数据装置准备好,表示数据通信设备已接通电源连到通信线路上,并处于数据传输方式 RLSD*:对应载波检测CD RI*:振铃指示,8250的调制解调器状态寄存器MSR,反映4个控制输入信号的当前状态及其变化 MSR高4位中某位为1: 相应输入信号当前为低,否则为高 MSR低4位中某位为1: 从上次CPU读取该状态字后,相应输入信号已发生改变,从高变低或反之 MCR低4位任一位置1,均产生调制解调器状态中断,当CPU读取该寄存器或复位后,低4位被清零,8250的中断允许寄存器IER,8250有4级10个中断 接收线路状态中断(4个)(D2) 奇偶错、溢出错、帧错和中止字符 接收器数据准备好中断(D0) 发送保持寄存器空中断(D1) 调制解调器状态中断(4个)(D3) 中断允许寄存器低4位控制4级中断是否允许 某位为1,则对应的中断被允许 否则,被禁止,8250的中断识别寄存器IIR,表明是否有中断 保存正在请求中断优先权最高中断级别编码,2. 初始化编程,对8250的内部控制寄存器进行编程写入 设置传输率 写入除数寄存器 设置字符格式 写入通信线路控制寄存器 设置工作方式 写入调制解调器控制寄存器 设置中断允许或屏蔽位 写入中断允许寄存器,写入除数寄存器设置传输率,mov al,80h mov dx,2fbh out dx,al ; 写入通信线路控制寄存器,使DLAB1 mov ax,96 ; 分频系数 ; 1.8432MHz(120016)9660H mov dx,2f8h out dx,al ; 写入除数寄存器低8位 mov al,ah inc dx out dx,al ; 写入除数寄存器高8位,写入通信线路控制寄存器设置字符格式,; 假设使用7个数据位、1个停止位、奇校验 mov al,00001010b mov dx,2fbh out dx,al ;写入通信线路控制寄存器 ; 同时使DLAB0,以方便下述初始化过程,异步通信适配器,IBM PC/XT机的串行异步通信适配器 以8250为核心 完成发送时的并转串和接收时的串转并以及相应的控制工作 配置了TTL电平与EIA电平转换电路等 展开异步通信适配器的 硬件电路 软件编程,异步通信适配器的接口电路,写入调制解调器控制寄存器设置工作方式,; 设置查询通信方式 mov al,03h ; 禁止中断(D30) mov dx,2fch out dx,al ; 写入调制解调器控制寄存器 ; 设置中断通信方式 mov al,0bh ; 允许中断(D31) mov dx,2fch out dx,al ; 设置查询的循环测试通信方式 mov al,13h ; 循环测试(D41) mov dx,2fch ; 禁止中断(D30) out dx,al,写入中断允许寄存器设置中断允许或屏蔽位,;禁止所有中断 mov al,0 mov dx,2f9h out dx,al ;写入中断允许寄存器(DLAB0) ;仅允许接收中断 mov al,1 mov dx,2f9h out dx,al ;写入中断允许寄存器(DLAB0),例8-3异步通信程序1,; 数据段 msg byte What you see is .,13,10,0 ; 代码段 ; 初始化编程 mov si,offset msg ; SI指向发送信息 mov bx,1 ; BX1需要发送信息 mov cx,1 ; CX1可以接收信息 ; 读取通信线路状态,查询工作 statue: mov ax,bx or ax,cx ; BXCX0,接发完成 jz done ; 转向结束,例8-3异步通信程序2,mov dx,2fdh ; 读取线路状态寄存器 in al,dx test al,1eh ; 接收有错误否? jz statue1 ; 没有错误,继续 ; 接收有错,响铃报警 mov dx,2f8h; 读出接收有误的数据, 丢掉 in al,dx mov al,07h ; 响铃控制的ASCII码 call dispc jmp statue ; 继续查询,例8-3异步通信程序3,statue1: test al,01h ; 接收到数据吗? jz statue2 ; 没有收到数据,继续 ; 已接收字符,读取该字符并显示 mov dx,2f8h ;读取输入缓冲寄存器 in al,dx cmp al,0 ; 是结尾字符吗? jnz receive xor cx,cx ; CX0,不再接收数据 jmp statue ; 继续查询 receive: and al,7fh ; 标准ASCII码取低7位 call dispc ; 屏幕显示该数据 jmp statue ; 继续查询,例8-3异步通信程序4,statue2: cmp bx,1 ; 有要发送的字符吗? jne statue ; 无字符,继续查询 test al,20h ; 能输出数据吗? jz statue ; 不能输出,继续查询 ; 保持寄存器已空,可以发送数据 mov al,si ; 获得要发送的字符 inc si cmp al,0 ; 是结尾字符吗? jnz transmit xor bx,bx ; 无发送字符,BX0 jmp statue ; 继续查询,例8-3异步通信程序5,transmit: mov dx,2f8h ; 将字符输出给发送保持寄存器 out dx,al ; 串行发送数据 jmp statue ; 继续查询 done: ; 返回DOS,What you see is what you get.,显示结果,8.4 模拟接口,模拟量连续变化的物理量,数字量时间和数值上都离散的量,8.4.1 模拟输入输出系统,8.4.1 模拟输入输出系统,传感器 将各种现场的物理量测量出来 并转换成电信号(模拟电压或电流),放大器 把传感器输出的信号放大到ADC所需 的量程范围,低通滤波器 用于降低噪声、滤去高频干扰, 以增加信噪比,多路开关 把多个现场信号分时地接通到A/D转换器,采样保持器 周期性地采样连续信号, 并在A/D转换期间保持不变,8.4.2 D/A转换器,D/A转换器(DAC) 将数字量转换成为模拟量(电压或电流) DAC芯片有多种类型 按DAC的性能:通用、高速和高精度等转换器 按内部结构:不包含、包含数据寄存器 按位数:8位、12位、16位等 按输出模拟信号:电流输出型和电压输出型,1. D/A转换原理,把每位代码按其权的大小转换成相应的模拟分量,将各模拟分量相加 1101B12312202112013 D/A转换器: 主要由电阻网络、电子开关和基准电压组成 DAC集成电路多采用R-2R梯形解码网络 输入数字量控制电子开关 使电阻网络中的不同电阻和基准电压接通 输出端产生成比例的模拟电流或电压 基准电压(参考电压VREF):稳定的电压源,D/A转换器的原理图(1),D/A转换器的原理图(2),D/A转换器的原理图(3),VaVREF VbVREF/2 VcVREF/4 VdVREF/8,I0Vd/2RVREF/(82R) I1Vd/2RVREF/(42R) I2Vd/2RVREF/(22R) I3Vd/2RVREF/(12R),D/A转换器的原理图(4),Iout1I0I1I2I3 VREF/2R(1/81/41/21) RfbR VoutIout1Rfb VREF(20212223)/24,Vout(D/2n)VREF,DAC0832的内部结构,典型的8位、电流输出型、通用DAC芯片,2. DAC0832的数字接口,8位数字输入端 DI0DI7(DI0为最低位) 输入寄存器(第1级)控制端 ILE、CS*、WR1* DAC寄存器(第2级)控制端 XFER*、WR2*,直通方式 单缓冲方式 双缓冲方式,直通锁存器的工作方式,两级缓冲寄存器都是直通锁存器 LE1,直通(输出等于输入) LE0,锁存(输出保持不变),DAC0832的工作方式:直通方式,LE1LE21 输入的数字数据直接进入D/A转换器,DAC0832的工作方式:单缓冲方式,LE11,或者LE21 两个寄存器之一始终处于直通状态 另一个寄存器处于受控状态(缓冲状态),DAC0832的工作方式:双缓冲方式,两个寄存器都处于受控(缓冲)状态 能够对一个数据进行D/A转换的同时;输入另一个数据,3. DAC0832的模拟输出,Iout1、Iout2电流输出端 Rfb反馈电阻引出端(电阻在芯片内) VREF参考电压输入端 10V10V AGND模拟信号地 VCC电源电压输入端 5V15V DGND数字信号地,单极性电压输出,设 VREF5V DFFH255时,最大输出电压: Vmax-(255/256)5V-4.98V D00H时,最小输出电压: Vmin-(0/256)5V0V D01H时,一个最低有效位电压: VLSB-(1/256)5V-0.02V,Vout(D/2n)VREF,双极性电压输出:电路,双极性电压输出:公式,取 R2R32R1 得 Vout2(2Vout1VREF) 因 Vout1(D/28)VREF 故 Vout2(D27)/27)VREF,双极性电压输出,Vmax(255-128)/1285V4.96V Vmin(0-128)/1285V-5V VLSB(129-128/1285V0.04V,Vout(D2n-1)/2n-1VREF,4. DAC芯片与主机的连接,DAC芯片相当于一个“输出设备” 不带锁存器的DAC,至少需要一级锁存器作为接口电路,mov al,buf mov dx,portd out dx,al,DAC0832单缓冲方式,DAC芯片的应用,mov dx,portd mov al,0 repeat: out dx,al inc al jmp repeat,输出正向锯齿波,8.4.3 A/D转换器,A/D转换器(ADC) 将模拟量(电压或电流)转换成为数字量 ADC芯片主要以模拟到数字转换技术来区别 有些ADC芯片不仅具有A/D转换的基本功能,还包含内部放大器和三态输出锁存器 有的还包括多路开关、采样保持器等,1. 计数器式,以最低位为增减量 单位的逐步计数法,2. 逐次逼近式,从最高位开始 的逐位试探法,3. 双积分式,两个积分阶段 实质是电压/时间变换,4. 并行式,速度快成本高 直接比较法,ADC0809的内部结构,8位逐次逼近式ADC,多路开关和三态锁存缓冲器,2. ADC0809的模拟输入,IN0IN7:8个模拟电压输入端 ADDA、ADDB、ADDC:3个地址输入线 ALE:地址锁存允许信号 提供一个8通道的多路开关和寻址逻辑 ALE的上升沿用于锁存3个地址输入的状态 译码器从8个选择一个模拟输入进行A/D转换,3. ADC0809的转换时序,4. ADC0809的数字输出,输出允许信号OE高电平有效 将三态锁存缓冲器的数字量从D0D7输出,基准电压VREF(+)5V,VREF()0V 输入模拟电压Vin1.5V N(1.50)(50)25676.8774DH,5. ADC芯片与主机的连接,ADC芯片相当于“输入设备” 需要接口电路提供数据缓冲器 转换开始需要启动信号 软件编程或硬件定时产生脉冲信号或电平信号 转换结束输出结束信号 主机获知转换是否结束,进行数据输入 查询方式:把结束信号作为状态信号 中断方式:把结束信号作为中断请求信号 延时方式:不使用转换结束信号 DMA方式:把结束信号作为DMA请求信号,6. ADC芯片的应用:中断方式,中断方式:主程序,;数据段设置缓冲区 adtemp db 0 ;给定一个临时变量 ;代码段 ;设置中断向量等工作 sti ;开中断 mov dx,220h out dx,al ;启动A/D转换 ;其他工作,中断方式:中断服务程序1,adint proc ;中断服务程序 sti ;开中断 push ax ;保护寄存器 push dx push ds mov ax,data ;设置数据段DS的段地址 mov ds,ax mov dx,220h in al,dx ;读取A/D转换后的数字量 mov adtemp,al ;送入缓冲区,中断方式:中断服务程序2,mov al,20h ;给中断控制器发送EOI命令 out 20h,al pop ds ;恢复寄存器 pop dx pop ax iret ;中断返回 adint endp,7. ADC芯片的应用:查询方式,查询方式程序1,;数据段 counter equ 8 buf db counter dup(0) ;设立数据缓冲区 ;代码段 mov bx,offset buf ;BX缓冲区偏移地址 mov cx,counter ;CX检测的数据个数 mov dx,220h ;从IN0开始转换 start1: out dx,al ;启动A/D转换 push dx,查询方式程序2,mov dx,238h ;循环查询是否转换结束 start2: in al,dx ;读入状态信息 test al,80h ;D71,转换结束否? jz start2 ;没有结束,则继续查询 pop dx ;转换结束 in al,dx ;读取数据 mov bx,al ;存入缓冲区 inc bx inc dx loop start1 ;转向下一个模拟通道 ;数据处理,掌握8253引脚、工作方式、编程和应用 熟悉8255A的结构特点和引脚功能 掌握8255A的方式0/1的编程及应用 掌握简易键盘编程和理解PC机键盘的工作原理 掌握LED数码管编程 掌握起止式通信协议、232C引脚定义和连接 了解8250的内部寄存器功能 理解异步通信适配器的初始化编程和通信程序 了解模拟输入输出系统 熟悉DAC0832和ADC0809 理解DAC和ADC芯片与主机连接问题 掌握ADC芯片的应用,教学要求,第8章 常用接口技术,第8章 习题,8.1 简答题 8.2 判断题 8.3 填空题 8.6 8.10 8.11 8.12 8.14 8.20 8.21,DMA控制器8237A,每个8237A芯片有4个DMA通道,就是有4个DMA控制器 每个DMA通道具有不同的优先权 每个DMA通道可以分别允许和禁止 每个DMA通道有4种工作方式 一次传送的最大长度可达64KB 多个8237A芯片可以级连,扩展通道数,8237A的内部结构和引脚,内部结构和外部引脚都相对
展开阅读全文