1、第第7 7章章 微型机接口技术微型机接口技术n 可编程定时可编程定时/记数器记数器n可编程并行接口可编程并行接口n串行通信和串行接口串行通信和串行接口n*模拟通道接口模拟通道接口概述概述I/O接口的功能:接口的功能:地址译码和地址译码和I/O设备选择设备选择信息的输入与输出信息的输入与输出数据的缓冲及锁存数据的缓冲及锁存信息的转换信息的转换可编程定时可编程定时/计数器计数器定时控制在微机系统中具有极为重要的作用,计定时控制在微机系统中具有极为重要的作用,计数是许多过程控制领域常用的功能(数是许多过程控制领域常用的功能(P272)定时器定时器由数字电路中的计数电路构成,通过记录由数字电路中的计数
2、电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间高精度晶振脉冲信号的个数,输出准确的时间间隔隔计数电路用于记录外设提供的具有一定随机性的计数电路用于记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为外设的某种状态),常又称为计数器计数器定时功能的实现方法定时功能的实现方法软件延时软件延时利用微处理器执行一个延时程序段实现利用微处理器执行一个延时程序段实现不用硬件,但占用不用硬件,但占用CPU时间、定时精度不高,随系时间、定时精度不高,随系统时钟频率改变统时钟频率改变不可编程的硬件定时不可编程的
3、硬件定时采用分频器、单稳电路或简易定时电路控制定时时间采用分频器、单稳电路或简易定时电路控制定时时间定时电路简单、定时时间可以在一定范围改变定时电路简单、定时时间可以在一定范围改变可编程的硬件定时可编程的硬件定时软件硬件相结合、用可编程定时器芯片构成一个方便软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路灵活的定时电路具有多种工作方式、能够输出多种控制信号具有多种工作方式、能够输出多种控制信号8253/8254定时计数器定时计数器3个独立的个独立的16位计数器通道位计数器通道每个计数器有每个计数器有6种工作方式种工作方式按二进制或十进制(按二进制或十进制(BCD码)计数码)计数82
4、54是是8253的改进型的改进型8253/8254的内部结构和引脚的内部结构和引脚D7D0计数器0控制字寄存器计数器1计数器2内部数据总线数据总线缓冲器读写控制逻辑RDWRA0A1CSCLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT21.1.计数器计数器预置寄存器预置寄存器GATECLKOUT减减1计数器计数器输出锁存器输出锁存器计数初值存于计数初值存于预置寄存器预置寄存器;在计数过程中,在计数过程中,减法计数器减法计数器的值不断递减,的值不断递减,而预置寄存器中的预置不变。而预置寄存器中的预置不变。输出锁存器输出锁存器用于写入锁存命令时,用于写入锁存命令时,锁定当
5、前计数值锁定当前计数值计数器的计数器的3个引脚个引脚CLK时钟输入信号时钟输入信号 在计数过程中,此引脚上每输入一个时钟信号在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减(下降沿),计数器的计数值减1GATE门控输入信号门控输入信号 控制计数器工作,当控制计数器工作,当GATE引脚为低电平时,引脚为低电平时,禁止计数器工作;只有当禁止计数器工作;只有当GATE为高电平时,为高电平时,才允许计数器工作才允许计数器工作OUT计数器输出信号计数器输出信号 当一次计数过程结束(计数值减为当一次计数过程结束(计数值减为0),),OUT引脚上将产生一个输出信号引脚上将产生一个输出信号
6、与处理器接口与处理器接口D0 D7数据线数据线A0 A1地址线地址线CS*片选信号片选信号RD*读信号读信号WR*写信号写信号CS*A1 A0I/O地址地址读操作读操作RD*写操作写操作WR*0 0 00 0 10 1 00 1 140H41H42H43H读计数器读计数器0读计数器读计数器1读计数器读计数器2无操作无操作写计数器写计数器0写计数器写计数器1写计数器写计数器2写控制字写控制字8253/8254的工作方式的工作方式8253有有6种工作方式,由方式控制字确定种工作方式,由方式控制字确定每种工作方式的工作过程相类似:每种工作方式的工作过程相类似:设定工作方式设定工作方式 设定计数初值设
7、定计数初值 硬件启动硬件启动 计数初值进入减计数初值进入减1计数器计数器 每输入一个时钟计数器减每输入一个时钟计数器减1的计数过程的计数过程 计数过程结束计数过程结束方式方式0:计数结束中断:计数结束中断GATEOUTCLK 031244方式方式0WR设设定定工工作作方方式式设设定定计计数数初初值值计计数数值值送送入入计计数数器器计计数数过过程程计计数数结结束束方式方式0的主要特点的主要特点计数器只计数一遍,当计数到计数器只计数一遍,当计数到0时,并不恢复计数时,并不恢复计数初值,且输出保持为高。初值,且输出保持为高。8253内部是在内部是在CPU写计数值的写计数值的WR信号上升沿,信号上升沿
8、,将此值写入通道的预置寄存器,在将此值写入通道的预置寄存器,在WR信号上升沿信号上升沿后的下一个后的下一个CLK脉冲,才将计数值由预置寄存器送脉冲,才将计数值由预置寄存器送至减至减1计数器作为初值,开始计数。所以,计数器作为初值,开始计数。所以,8253是是在写计数值命令后经过一个输入脉冲,才将计数值在写计数值命令后经过一个输入脉冲,才将计数值装入减装入减1计数器,下一个脉冲才开始计数。因此,计数器,下一个脉冲才开始计数。因此,如果设置计数初值为如果设置计数初值为N,则输出信号,则输出信号OUT是在是在N+1个个CLK脉冲之后才变高的。脉冲之后才变高的。在计数过程中,可由门控制信号在计数过程中
9、,可由门控制信号GATE控制暂停。控制暂停。当当GATE=0时,计数暂停;当时,计数暂停;当GATE变高后,就接变高后,就接着计数着计数在计数过程中可以改变计数值。若是在计数过程中可以改变计数值。若是8位计数,则位计数,则在写入新的计数值后,计数器将按新的计数值重新在写入新的计数值后,计数器将按新的计数值重新开始计数;如果是开始计数;如果是16位计数,在写入第一个字节后,位计数,在写入第一个字节后,计数器停止计数,在写入第二个字节后,计数器便计数器停止计数,在写入第二个字节后,计数器便按照新的数值开始计数,即改变计数值是立即有效按照新的数值开始计数,即改变计数值是立即有效的的方式方式1:可重复
10、触发的单稳触发器:可重复触发的单稳触发器设设定定工工作作方方式式设设定定计计数数初初值值硬硬件件启启动动计计数数值值送送入入计计数数器器计计数数过过程程计计数数结结束束GATEOUTCLK 031244方式方式1WR方式方式1的主要特点的主要特点若设置的计数值为若设置的计数值为N,则输出的单拍脉冲的,则输出的单拍脉冲的宽度即为宽度即为N个输入脉冲间隔。个输入脉冲间隔。当计数到当计数到0后,可再次由外部后,可再次由外部GATE触发启触发启动,于是可再输出一个同样宽度的单拍脉动,于是可再输出一个同样宽度的单拍脉冲,而不用再次送入一个计数值。冲,而不用再次送入一个计数值。在计数过程中,外部可发出门控
11、脉冲进行再触发。在计数过程中,外部可发出门控脉冲进行再触发。在再触发脉冲上升沿之后的一个在再触发脉冲上升沿之后的一个CLK脉冲的下降脉冲的下降沿,计数器将重新开始计数。沿,计数器将重新开始计数。在计数过程中,在计数过程中,CPU可改变计数值,这时计数过可改变计数值,这时计数过程不受影响,计数到程不受影响,计数到0后输出为高。若再次触发后输出为高。若再次触发启动,则计数器将重按新输入的计数值计数,即启动,则计数器将重按新输入的计数值计数,即计数值是下次有效。计数值是下次有效。方式方式2:频率发生器(分频器):频率发生器(分频器)03124GATEOUTCLK 4方式方式2031240312403
12、124WR方式方式2的主要特点的主要特点不用重新设置计数值,通道能够连续工作,输出不用重新设置计数值,通道能够连续工作,输出固定频率的脉冲。固定频率的脉冲。计数器写入控制字和计数初值后,如计数器写入控制字和计数初值后,如GATE一直一直处于高电平,则在下一脉冲开始计数。这种通过处于高电平,则在下一脉冲开始计数。这种通过写入计数初值使计数器同步,称为写入计数初值使计数器同步,称为软件同步软件同步计数过程可由计数过程可由GATE控制脉冲。当控制脉冲。当GATE变低时,变低时,就暂停计数;在就暂停计数;在GATE变高后的下一个变高后的下一个CLK脉冲脉冲使计数器恢复初值,重新开始计数。这种通过门使计
13、数器恢复初值,重新开始计数。这种通过门控信号实现计数器的同步,称为控信号实现计数器的同步,称为硬件同步硬件同步在计数过程中可以改变计数值,这对正在进行的在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,但在计数到计数过程没有影响,但在计数到1时输出变低,过时输出变低,过一个一个CLK周期输出又变高,计数器将按新的计数周期输出又变高,计数器将按新的计数值计数,所以改变计数值是下次有效的值计数,所以改变计数值是下次有效的方式方式3:方波发生器:方波发生器03124GATEOUTCLK 4方式方式3031240312403124WR方式方式3和方式和方式2的输出都是周期性的,它们的输出都是
14、周期性的,它们的主要区别是:方式的主要区别是:方式3在计数过程中输出有在计数过程中输出有一半时间为高,另一半时间为低。一半时间为高,另一半时间为低。若计数值为若计数值为N,则方式,则方式3的输出为方波,周的输出为方波,周期是期是N个个CLK脉冲。在这种方式,当脉冲。在这种方式,当CPU设设置控制字后,输出将为高,在写完计数值置控制字后,输出将为高,在写完计数值后就自动开始计数,输出保持为高;当计后就自动开始计数,输出保持为高;当计数到一半计数值时,输出变为低,直至计数到一半计数值时,输出变为低,直至计数到数到0,输出又变高,重新开始计数。,输出又变高,重新开始计数。方式方式3的主要特点的主要特
15、点若计数值为偶数,在装入计数值后,每一个若计数值为偶数,在装入计数值后,每一个CLK脉冲都使计数值减脉冲都使计数值减2,当计数值减到,当计数值减到0时,一方面时,一方面使输出改变状态,另一方面又重新装入计数值开使输出改变状态,另一方面又重新装入计数值开始新的计数始新的计数若计数值为奇数,则在装入计数值后的第一个若计数值为奇数,则在装入计数值后的第一个CLK脉冲使计数器减脉冲使计数器减1,其后每一个,其后每一个CLK脉冲使脉冲使计数器减计数器减2。当计数到。当计数到0时,改变输出状态,同时时,改变输出状态,同时重新装入计数值。这以后的第一个重新装入计数值。这以后的第一个CLK脉冲使计脉冲使计数器
16、减数器减3,以后每一个,以后每一个CLK脉冲,计数器仍减脉冲,计数器仍减2,直到计数器再次到直到计数器再次到0时,输出恢复为高。所以,时,输出恢复为高。所以,如果计数值如果计数值N是奇数,则输出有是奇数,则输出有(N+1)/2个个CLK脉脉冲周期为高,而在冲周期为高,而在(N-1)/2脉冲周期为低。即脉冲周期为低。即OUT为高将比其为低多一个为高将比其为低多一个CLK周期时间。周期时间。GATE信号能使计数过程重新开始。信号能使计数过程重新开始。GATE=1允允许计数,许计数,GATE=0禁止计数。如果在输出禁止计数。如果在输出OUT为为低期间,低期间,GATE=0,OUT将立即变高,停止计数
17、。将立即变高,停止计数。当当GATE变高以后,计数器将重新装入初始值,变高以后,计数器将重新装入初始值,重新开始计数。重新开始计数。若在计数期间写入一个新的计数值,并不若在计数期间写入一个新的计数值,并不影响现行的计数过程。但是若在方波半周影响现行的计数过程。但是若在方波半周期结束之前和新计数值写入之后收到期结束之前和新计数值写入之后收到GATE脉冲,计数器将在下一个脉冲,计数器将在下一个CLK脉冲时装人脉冲时装人新的计数值并以这个计数值开始计数。否新的计数值并以这个计数值开始计数。否则,新计数值将在现行半周结束时装入计则,新计数值将在现行半周结束时装入计数器数器方式方式4:软件触发选通信号:
18、软件触发选通信号GATEOUTCLK031244方式方式4223331 0WR方式方式4的特点的特点CPU写入计数值后的下一个写入计数值后的下一个CLK脉冲,把脉冲,把计数值写入计数器,再下一个计数值写入计数器,再下一个CLK脉冲开脉冲开始减数。因此,若设置的计数值为始减数。因此,若设置的计数值为N,则是,则是在写了计数值后的在写了计数值后的N+1个脉冲,才输出一个个脉冲,才输出一个负脉冲。负脉冲。若计数值是双字节,则在设置第一字节时若计数值是双字节,则在设置第一字节时停止计数,在设置第二字节后,按照新的停止计数,在设置第二字节后,按照新的计数值开始计数计数值开始计数当当GATE=1时允许计数
19、,而时允许计数,而GATE=0时禁止计数。时禁止计数。所以,要做到软件启动,则所以,要做到软件启动,则GATE应保持为应保持为1若在计数过程中,改变计数值,则按新的计数值若在计数过程中,改变计数值,则按新的计数值重新开始计数。重新开始计数。方式方式5:硬件触发选通信号:硬件触发选通信号GATEOUTCLK031244方式方式52233311 0WR方式方式5的特点的特点若设置计数值为若设置计数值为N,则在门控脉冲触发后,经过,则在门控脉冲触发后,经过N+1个个CLK脉冲,才输出一个负脉冲脉冲,才输出一个负脉冲若在计数过程中使用门控脉冲,则使计数器重新若在计数过程中使用门控脉冲,则使计数器重新开
20、始计数,但对输出的状态没有影响开始计数,但对输出的状态没有影响若在计数过程中改变计数值,只要没有门控信号的触发,若在计数过程中改变计数值,只要没有门控信号的触发,不影响计数过程。当计数到不影响计数过程。当计数到0后,若有新的门控信号的后,若有新的门控信号的触发,则按新的计数值计数触发,则按新的计数值计数但若在写入了新的计数值后,在没有计数到但若在写入了新的计数值后,在没有计数到0之前,有之前,有新的门控脉冲触发,则立即按新的计数值重新开始计数新的门控脉冲触发,则立即按新的计数值重新开始计数各种工作方式的输出波形各种工作方式的输出波形方式方式 0方式方式 1方式方式 2方式方式 3方式方式 4方
21、式方式 50N0N0N0/N110NN/2 N/2 0/N0N0 1N0 1N0 18253/8254的编程的编程8253加电后的工作方式不确定加电后的工作方式不确定8253必须初始化编程,才能正常工作必须初始化编程,才能正常工作 写入控制字写入控制字 写入计数初值写入计数初值 读取计数值读取计数值D7D6D5D4D3D2D1D01.写入方式控制字写入方式控制字计数器计数器读写格式读写格式工作方式工作方式数制数制D7D6D5D4D3D2D1D000 计数器计数器001 计数器计数器110 计数器计数器211 非法非法00 计数器锁存命计数器锁存命令令 01 只读写低字节只读写低字节10 只读写
22、高字节只读写高字节11 先读写低字节先读写低字节 后读写高字节后读写高字节000 方式方式0001 方式方式1010 方式方式2011 方式方式3100 方式方式4101 方式方式50 二进制二进制1 十进制十进制控制字写入控制字控制字写入控制字I/O地址(地址(A1A011)2.写入计数值写入计数值选择二进制时选择二进制时 计数值范围:计数值范围:0000HFFFFH 0000H是最大值,代表是最大值,代表65536选择十进制(选择十进制(BCD码)码)计数值范围:计数值范围:00009999 0000代表最大值代表最大值10000计数值写入计数器各自的计数值写入计数器各自的I/O地址地址3
23、.读取计数值读取计数值对对8位数据线,读取位数据线,读取16位计数值需分两次位计数值需分两次计数在不断进行,应该将当前计数值先行计数在不断进行,应该将当前计数值先行锁存,然后读取:锁存,然后读取:向控制字向控制字I/O地址:给地址:给8253写入锁存命令写入锁存命令 从计数器从计数器I/O地址:读取锁存的计数值地址:读取锁存的计数值读取计数值,要注意读写格式和计数数制读取计数值,要注意读写格式和计数数制8254Intel 8254是是Intel 8253的改进型,因此它的改进型,因此它的操作方式以及引脚与的操作方式以及引脚与8253完全相同。它完全相同。它的改进主要反映在两个方面:的改进主要反
24、映在两个方面:(1)8254的计数频率更高。的计数频率更高。8254计数频计数频率可达到率可达到6MHz,8254-2频率可高达频率可高达10MHz。(2)8254多了一个读回命令,可锁存最多多了一个读回命令,可锁存最多三个计数器的当前计数值和状态信息三个计数器的当前计数值和状态信息读回命令格式读回命令格式A1A0=11,CS*=0,RD*=1,WR*=0当读回命令把某通道的计数值和状态信息锁存后,对该端当读回命令把某通道的计数值和状态信息锁存后,对该端口第一次读操作读取状态字节,第二(或三)次读操作读口第一次读操作读取状态字节,第二(或三)次读操作读取计数值取计数值状态字格式状态字格式D5D
25、0:写入此通道的控制字的相应部分。:写入此通道的控制字的相应部分。D6:反映预置寄存器中的计数值是否已经写入计数单元反映预置寄存器中的计数值是否已经写入计数单元D6=1:空计数值:空计数值D6=0:计数值有效:计数值有效D7反映了该计数器的输出引脚反映了该计数器的输出引脚OUT信号的状态,输出信号的状态,输出(OUT)为高电平,则)为高电平,则D7=1;输出为低电平,则;输出为低电平,则D7=0。8253在在IBM PC系列机上的应用系列机上的应用A0A1 A0 A1D0D7D0D7OUT1OUT2OUT0GATE0GATE1GATE2CLK0CLK1CLK2D QCLK+5V接至接至DMA控
26、制器控制器接至扬声器驱动器接至扬声器驱动器PB0PB1IRQ0DRQ0 8253+5V1.19318MHzDACK0 BRDIORIOWRDWRCST/CCS1.定时中断和定时刷新定时中断和定时刷新从阅读初始化程序段看从阅读初始化程序段看计数器计数器0作为定时中断作为定时中断的作用的作用n将将计数器计数器1作为定时刷新作为定时刷新看看如何编写初始化程序段如何编写初始化程序段计数器计数器0 0:初始化程序:初始化程序mov al,36h;36H00 11 011 0B;计数器;计数器0为方式为方式3,采用二进制计数,采用二进制计数;先低后高写入计数值;先低后高写入计数值out 43h,al;写入
27、方式控制字;写入方式控制字mov al,0;计数值为;计数值为0out 40h,al;写入低字节计数值;写入低字节计数值out 40h,al;写入高字节计数值;写入高字节计数值计数器计数器0:定时中断:定时中断计数器计数器0:方式方式3,计数值:计数值:65536,输出频率为,输出频率为1.19318MHz6553618.206Hz的方波的方波门控为常启状态,这个方波信号不断产生门控为常启状态,这个方波信号不断产生OUT0端接端接8259A的的IRQ0,用作中断请求信号,用作中断请求信号每秒产生每秒产生18.206次中断请求,或说每隔次中断请求,或说每隔55ms(54.925493ms)申请一
28、次中断)申请一次中断DOS系统利用计数器系统利用计数器0的这个特点,通过的这个特点,通过08号中断号中断服务程序实现了日时钟计时功能服务程序实现了日时钟计时功能计数器计数器1:定时刷新:定时刷新需要重复不断提出刷新请求需要重复不断提出刷新请求门控总为高,选择方式门控总为高,选择方式2或或3n2ms内刷新内刷新128次,即次,即15.6 s刷新一次刷新一次计数初值为计数初值为18计数器计数器1:初始化程序:初始化程序mov al,54h;54H01 01 010 0 B;计数器计数器1为方式为方式2,采用二进制计数,采用二进制计数;只写低;只写低8位计数值位计数值out 43h,al;写入方式控
29、制字;写入方式控制字mov al,18;计数初值为;计数初值为18out 41h,al;写入计数值;写入计数值2.扬声器控制扬声器控制计数器计数器2的输出控制扬声器的发声音调的输出控制扬声器的发声音调计数器计数器2只能工作在方式只能工作在方式3,才能,才能输出一定输出一定频率的方波,经滤波后得到近似的正弦波,频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声进而推动扬声器发声扬声器还受控于并行接口(扬声器还受控于并行接口(8255芯片)芯片)必须使必须使PB0和和PB1同时为高电平,扬声器才同时为高电平,扬声器才能发出预先设定频率的声音能发出预先设定频率的声音发音发音频率设置子程序频率设
30、置子程序;入口参数;入口参数AX1.19318106发音频率发音频率speakerprocpush axmov al,0b6h;b6h10110110bout 43h,al;写入控制字;写入控制字pop axout 42h,al;写入低;写入低8位计数值位计数值mov al,ahout 42h,al;写入高;写入高8位计数值位计数值retspeakerendp扬声器开子程序扬声器开子程序speakon procpush axin al,61h;PB端口的地址为端口的地址为61Hor al,03h;D1D0PB1PB011B,其他位不变,其他位不变out 61h,alpop axretspeak
31、on endp扬声器关子程序扬声器关子程序speakoffprocpush axin al,61h;PB端口的地址为端口的地址为61Hand al,0fch;D1D0PB1PB000B,其他位不变,其他位不变out 61h,alpop axretspeakoffendp例例 扬声器声音的控制扬声器声音的控制;数据段;数据段freq dw 1193180/600;代码段;代码段mov ax,freqcall speaker;设置扬声器音调;设置扬声器音调call speakon;打开扬声器声音;打开扬声器声音mov ah,1;等待按键;等待按键int 21h;按键后;按键后call speako
32、ff;关闭扬声器声音;关闭扬声器声音3.扩充定时计数器的应用扩充定时计数器的应用A0A1 A0 A1外部事件产生源外部事件产生源8253OUT0GATE0CLK0200207HIRQD0D7D0D7译码译码电路电路AENA3A9+5VCSIORIOWRDWR例例 外部事件的计数外部事件的计数mov dx,203h;设置方式控制字;设置方式控制字mov al,10hout dx,al mov dx,200h;设置计数初值;设置计数初值mov al,64h;计数初值为;计数初值为100out dx,al输出:输出:明确向哪个明确向哪个端口端口输出什么输出什么数据数据输入:输入:清楚从哪个清楚从哪个端口端口输入什么输入什么数据数据