赞
踩
定时控制具有极为重要的作用
微机控制系统中常需要定时中断、定时检测、定时扫描等
实时操作系统和多任务操作系统中要定时进行进程调度
PC机的日时钟计时、DRAM刷新定时和扬声器音调控制都采用了定时控制技术
可编程定时器芯片
软硬件相结合、方便灵活的定时电路
软件延时方法
处理器执行延时子程序
定时器(计数器):由数字电路中的计数电路构成,记录输入脉冲的个数
脉冲信号具有一定随机性,通过脉冲的个数可以获知外设的状态变化次数(计数)
脉冲信号的周期固定(使用高精度晶振产生脉冲信号),个数乘以周期就是时间间隔(定时)
Intel 8253/8254可编程间隔定时器
3个独立的16位计数器通道
每个计数器有6种工作方式
内部结构和引脚
3个相互独立的计数器通道,结构完全相同:
计数器0
计数器1
计数器2
每个计数器通道:
16位减法计数器
16位预置寄存器
输出锁存器
定时器外设引脚
CLK时钟输入信号:
在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1
GATE门控输入信号:
控制计数器工作,可分成电平控制和上升沿控制两种类型
OUT计数器输出信号:
当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号
连接处理器引脚:
D0~D7数据线 A0~A1地址线
RD读信号 WR写信号
CS*片选信号
8253有6种工作方式,由方式控制字确定
每种工作方式的过程类似:
① 设定工作方式
② 设定计数初值
③ 硬件启动
④ 计数初值进入减1计数器
⑤ 每输入一个时钟计数器减1的计数过程
⑥ 计数过程结束
定时器方式0:计数结束中断
定时器方式1:可编程单稳脉冲
定时器方式2:频率发生器(分频器)
定时器方式3:方波发生器
定时器方式4:软件触发选通信号
定时器方式5:硬件触发选通信号
写入方式控制字
方式控制字编程示例
; 8253的计数器0、1、2端口和控制端口地址:40H~43H
;设置其中计数器0为方式0
;采用二进制计数,先低后高写入计数值
mov al,30h
;方式控制字:30H=00 11 000 0B
out 43h,al
;写入控制端口:43H
写入计数值:
选择二进制时
计数值范围:0000H~FFFFH
0000H是最大值,代表65536
选择十进制(BCD码)
计数值范围:0000~9999
0000代表最大值10000
计数值写入计数器各自的I/O地址
按方式控制字规定的读写格式进行
计数值编程示例:
; 8253的计数器0、1、2端口和控制端口地址:40H~43H
;设置计数器0采用二进制计数
;写入计数初值:1024(=400H)
mov ax,1024 ;计数初值:1024(=400H)
;写入计数器0地址:40H
out 40h,al ;写入低字节计数初值
mov al,ah
out 40h,al ;写入高字节计数初值
1.定时中断
mov al,36h ; 计数器0为方式3,二进制计数
; 先低后高写入计数值
out 43h,al ; 写入方式控制字
mov al,0 ; 计数值为0
out 40h,al ; 写入低字节计数值
out 40h,al ; 写入高字节计数值
计数器0:方式3,计数值:65536,输出方波
频率:1.19318MHz÷65536=18.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.扬声器控制
;发音频率设置子程序
;入口参数:AX=1.19318×106÷发音频率
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 ;D1D0=PB1PB0=11,其他不变
out 61h,al ;直接控制发声
pop ax
ret
speakon endp
;扬声器关子程序
and al,0fch
;D1D0=PB1PB0=00,其他不变
〔例8-1〕控制扬声器程序
;数据段
freq dw 1193180/600 ;给一个600Hz的频率
;代码段
mov ax,freq
call speaker ;设置扬声器的音调
call speakon ;打开扬声器声音
call readc ;等待按键
call speakoff ;关闭扬声器声音
;子程序
……
并行数据传输:以计算机字长,通常是8、16或32位为传输单位,利用8、16或32个数据信号线一次传送一个字长的数据。
适合于外部设备与微机之间进行近距离、大量和快速的信息交换,如微机与并行接口打印机、磁盘驱动器等;
微机系统中最基本的信息交换方法,例如系统板上各部件之间的数据交换
并行数据传输需要并行接口的支持
具有多种功能的可编程并行接口电路芯片
最基本的接口电路:三态缓冲器和锁存器
与CPU间、与外设间的接口电路:状态寄存器和控制寄存器
还有端口的译码和控制电路、中断控制电路
分3个端口,共24个外设引脚
共3种输入输出工作方式
方式0:基本输入输出方式
方式1:选通输入输出方式
方式2:双向选通传送方式
端口A:PA0~PA7
A组,支持工作方式0、1、2
常作数据端口,功能最强大
端口B:PB0~PB7
B组,支持工作方式0、1
常作数据端口
端口C:PC0~PC7
仅支持工作方式0,分两个4位,每位可独立操作
A组控制高4位PC4~PC7,B组控制低4位PC0~PC3
可作数据、状态和控制端口
控制最灵活,最难掌握
方式0输入
执行输入IN指令,输入外设数据
方式0输出
执行输出OUT指令,将数据送给外设
借助于选通(应答)联络信号进行输入或输出
只有端口A和端口B可以采用方式1
作为输入或输出的数据端口
利用端口C的3个引脚作为应答联络信号
还提供有中断请求逻辑和中断允许触发器
对输入和输出的数据都进行锁存
适用于查询和中断方式的接口电路
8255工作方式1输入引脚:
A组引脚:
选通输入工作时序:
异步时序:没有时钟,由引脚控制信号定时
STB*和IBF是外设和8255间应答联络信号
B组引脚:
8255工作方式1输出引脚
A组引脚
选通输出工作时序
异步时序:没有时钟,由引脚控制信号定时
OBF和ACK是外设和8255间应答联络信号
B组引脚
写入方式控制字
控制字写入控制字I/O地址:A1A0=11
写入方式控制字示例
要求:
A端口:方式1输入
C端口上半部:输出,C口下半部:输入
B端口:方式0输出
方式控制字:10110001B或B1H
初始化的程序段:
mov dx,0ffefh ;假设控制端口为FFEFH
mov al,0b1h ;方式控制字
out dx,al ;送到控制端口
读写数据端口
利用数据端口I/O地址:A1A0=00(A) 01(B) 10(C)
作输入接口,执行输入IN指令获取外设数据
作输出接口,执行输出OUT指令将数据送出
8255具有锁存输出数据的能力
对输出方式的端口同样可以输入
不是读取外设数据,而是上次给外设的数据
可实现按位输出控制
对输出端口B的PB7位置位的程序段
mov dx,0fff9h ;B端口假设为FFF9H
in al,dx ;读出B端口原输出内容
or al,80h ;使PB7=D7=1
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的读出内容:
端口A,B,C和控制字地址
60H,61H,62H和63H
工作在基本输入/输出方式0
端口A为方式0输入,用来读取键盘扫描码
端口B工作于方式0输出,例如控制扬声器等
端口C为方式0输入,读取系统状态和配置
系统的初始化编程:
mov al,10011001b ;方式控制字99H
out 63h,al
端口A为方式0输出打印数据
PC7引脚产生负脉冲选通信号
PC2引脚连接忙信号查询其状态
微处理器利用查询方式输出数据
打印机接口时序:
打印机时序:
方式0初始化程序段
mov dx,0fffeh ;控制端口地址为FFFEH
mov al,10000001b ;方式控制字
out dx,al
;A端口方式0输出,端口B任意
;C端口上半部输出、下半部输入
mov al,00001111b ;端口C复位置位控制字
out dx,al
;使PC7=1,即置STORE*=1
打印数据子程序-1
printc proc ;AH=打印数据
push ax
push dx
prn: mov dx,0fffch ;读取端口C
in al,dx ;查询打印机的状态
and al,04h ;忙否(PC2=BUSY=0)?
jnz prn ;PC2=1,打印机忙,等待
mov dx,0fff8h
;PC2=0,打印机不忙,输出
mov al,ah
out dx,al ;将打印数据从端口A输出
打印数据子程序-2
mov dx,0fffeh ;从PC7送出控制低脉冲
mov al,00001110b ;使PC7=STROBE*=0
out dx,al
nop ;产生一定宽度的低电平
nop
mov al,00001111b ;使PC7=STROBE*=1
out dx,al ;产生低脉冲STROBE*信号
pop dx
pop ax
ret
printc endp
分别对8255A的控制端口写入80H和08H,它们的作用各是什么?
解答:
对8255A的控制端口写入80H是方式控制字,其作用是设置A端口为方式0输出,端口B为方式0输出,端口C为方式0输出。
对8255A的控制端口写入08H是端口C位控制字,其作用是设置PC4为0
设定8255芯片的端口A为方式1输入,端口B为方式1输出,写出此时读取端口C的数据各位的含义。
PC0:端口B的中断请求信号(INTRB)
PC1:端口B输出缓冲器满信号(OBFB)
PC2:端口B的中断允许控制信号(INTEB)
PC3:端口A的中断请求信号(INTRA)
PC4:端口A的中断允许控制信号(INTEA)
PC5:端口A输入缓冲器满信号(IBFA)
PC6/PC7:I/O信号
主程序:获取原来的中断向量,设置新的中断向量,修改屏蔽字
mov dx,283h;设定端口A为选通输出方式
mov al,0a0h
out dx,al
mov al,0dh;使INTEA(PC6)为1,允许中断
out dx,al
mov counter,0
mov al,0 ;输出一个数据(才能引起中断)
mov dx,288h
out dx,al
sti
键盘是微机系统最常使用的输入设备
小键盘:适用于单板机或以处理器为基础的仪器,实现数据、地址、命令及指令等输入
独立键盘:通过5芯电缆与PC微机主机连接
识别按键的扫描方法:
先使第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=行值
查找键代码 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 ; 全部不相同 ; 返回继续检测(或转向其他程序片断) key5: mov al,[di] ; 获取键代码送AL …… ; 判断按键释放,没有则等待 call delay ; 按键释放,延时消除抖动 …… ; 后续处理 ; 键盘的行列值表:低字节是列值、高字节是行值 table word 0fefeh ; 键0的行列值 word 0fefdh ; 键1的行列值 …… ; 其他键的行列值 ; 键盘的键代码表 char byte …… ; 键0的代码值 byte …… ; 键1的代码值 …… ; 其他键的代码值
发光二极管LED是最简单的显示设备
由7段LED就可以组成的LED数码管
LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中
LED数码管可以显示内存地址和数据等
ledtb byte 3fh,06h,5bh,…… ;显示代码表
; 实现1个LED数码管显示
mov bx,1 ; BX←要显示的数字
mov al,ledtb[bx]
; 换码为显示代码:AL←LEBTB[BX]
mov dx,port ; port=数码管端口地址
out dx,al ; 输出显示
硬件上用公用的驱动电路来驱动各数码管
软件上用扫描方法实现数码显示
8个数码管:用2个8位输出端口控制:
位控制端口:控制哪个(位)数码管显示
段控制端口:控制哪个段显示,决定具体显示什么数码
稳定数字显示:依次显示,不断重复
重复频率越高,数字显示越稳定
延时显示时间越长,显示亮度就越高
各种显示效果:控制重复频率和延时时间
依次显示8位数码管程序 ; 数据段 leddt byte 8 dup(0) ; 数码缓冲区 ; 主程序 mov si,offset leddt ; 指向数码缓冲区 call displed ; 调用显示子程序 ; 子程序:显示一次数码缓冲区的8个数码 ; 入口参数:DS:SI=缓冲区首地址 displed proc push ax push bx push dx xor bx,bx mov ah,0feh ; 指向最左边数码管 led1: mov bl,[si] ; 取出要显示的数字 inc si mov al,ledtb[bx] ; 得到显示代码:AL←LEDTB[BX] mov dx,segport ; segport为段控制端口 out dx,al ; 送出段码 mov al,ah ; 取出位显示代码 mov dx,bitport ; bitport为位控制端口 out dx,al ; 送出位码 call delay ; 实现数码管延时显示 rol ah,1 ; 指向下一个数码管 cmp ah,0feh ; 是否指向最右边数码管 jnz led1 ; 没有,显示下一个数字 pop dx pop bx pop ax ret ; 8位数码管都显示一遍 ; 显示代码表,按照0~9、A~F的顺序 ledtb byte 0c0h,0f9h,0a4h,……,86h,8eh displed endp 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
D/A转换器(DAC)
将数字量转换成为模拟量(电压或电流)
DAC芯片有多种类型
按DAC的性能:通用、高速和高精度等转换器
按内部结构:不包含、包含数据寄存器
按位数:8位、12位、16位等
按输出模拟信号:电流输出型和电压输出型
把每位代码按其权的大小转换成相应的模拟分量,将各模拟分量相加
1101B=1×23+1×22+0×21+1×20=13
D/A转换器:
主要由电阻网络、电子开关和基准电压组成
DAC集成电路多采用R-2R梯形解码网络
输入数字量控制电子开关
使电阻网络中的不同电阻和基准电压接通
输出端产生成比例的模拟电流或电压
基准电压(参考电压VREF):稳定的电压源
DAC0832的内部结构
典型的8位、电流输出型、通用DAC芯片
DAC0832的数字接口:
8位数字输入端
DI0~DI7(DI0为最低位)
输入寄存器(第1级)控制端
ILE、CS*、WR1*
DAC寄存器(第2级)控制端
XFER*、WR2*
直通锁存器的工作方式
两级缓冲寄存器都是直通锁存器
LE=1,直通(输出等于输入)
LE=0,锁存(输出保持不变)
DAC0832的工作方式:直通方式
LE1=LE2=1
输入的数字数据直接进入D/A转换器
DAC0832的工作方式:单缓冲方式:
DAC0832的工作方式:双缓冲方式
两个寄存器都处于受控(缓冲)状态
能够对一个数据进行D/A转换的同时;输入另一个数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。