由数字电路中的计数电路构成用于记录输入脉冲的个数,常用于定时中断、定时检测
A
、B
、C
端口每个端口都是8位A组
控制端口A和端口C的高部(PC7PC4),`B组`控制B端口和C端口的低半部(PC3PC0)工作方式0是一种基本的输入输出方式,不需要应答式的联络信号
D0~D7
:8255与处理器间的数据引脚端口
:是指8255与外设间的数据引脚PA0~PA7
、PB0~PB7
、和PC0~PC7
当处理器执行IN指令时,产生读信号~RD
,控制8255从端口读取外设的输入数据,然后从D0~D7
输入处理器
当处理器执行输出OUT指令时,产生写信号~WR
,将处理器的数据从D0~D7
提供给8255,然后控制8255将该数据从端口提供给外设
8255的三个端口都可以工作在基本输入输出方式,
借助于选通(应答)联络信号进行输入或输出的工作方式。8225只有端口A和端口B
可以采用方式1,但是每个数据端口要利用端口C的3个数据引脚作为应答联络信号。
当8225的端口A
和端口B
都工作于方式1,此时端口C剩下的两个引脚还可作为基本输入输出引脚
(~STB)选通信号
:这是由外设提供的输入信号,有效时,将输入设备送来的数据锁存至8255的输入锁存器IBF
:输入缓冲满信号,8255的联络信号,当此信号有效时,表示数据已锁存至输出锁存器INTR
:中断请求信号,用于向处理器发出中断请求,要求处理器读取外设数据8225是通用并行接口,在具体应用时,要根据实际情况选择工作方式,也就是需要进行输出设置。
8255的初始化编程只需要一个方式控制字就可以把三个端口设置完成
例如我们要把A端口指定为方式1输出,C端口上半部分指定为输出,B端口指定为方式0输出,C端口下半部分指定为输入,方式控制字:0B1H,或10110001B
mov dx, 0fffeh ;假设控制端口的地址为FFFEH
mov ak,0b1h ;方式控制字
out ax,al ;送到控制端口
mov dx,0fffah ;B端口地址假设位FFFAH
in al,dx ;读出B端口原输出内容
or al, 80h ;使D7=PB7=1
out dx,al ;输出新的内容
mov al,10011001b ;8255的方式控制字我9H
out 63h,al ;设置端口A和端口C为方式0输入,端口B为方式0输出
采用端口C的PC7引脚产生负脉冲选通信号,PC2引脚连接打印机的忙信号查询其状态,处理器利用擦查询方式输出数据。
;初始化程序段
mov dx,0fffeh ;控制端口地址为FFFEH
mov al,10000001B ;方式控制字
out dx,al ;A端口方式0输出C端口上半部分输出、下半部分输入(端口B任意)
mov al,00001111B ;端口C的复位/置位控制字
out dx,al ;使PC7=1,即置~STORBE=1
;输出打印数据子程序,入口参数AH=打印数据
printc prc
push ax
push dx
prn: mov dx,0fffch ;读取端口C
in al,dx ;查询打印机的状态
and al,04h ;打印机忙否
jnz prn ;PC2=1打印机忙,则循环等待
mov dx,0fff8h ;PC2=0打印机不忙,则输出数据
mov al,ah
out dx,al ;将打印数据从端口A输出
mov dx, 0fffeh ;从端口C的PC7送出控制低脉冲
mov al,00001110B;使PC7=0,即置~STORBE=0
out dx,al
nop ;适当延时,产生一定宽度的低电平
nop
mov al,00001111B;使PC7=1,置~STROBE=1
out dx,al
pop dx
pop ax
ret
printc endp
LED数码管的主要部分是7段发光管,这七段发光管顺时针分别被称为a、b、c、d、e、f、g,有的还有一个小数点h。通过7个发光段的不同组合,数码管可以显示09和AF共16个字母数字,从而实现十六进制数的显示。
LED数码管有共阳极和共阴极两种结构。如果共阳极结构。
共阳极的话就是低电平有效
共阴极的话就是高电平有效
为了将一位十六进制数在一个LED数码管上显示出来,就需要将一位十六进制数译为LED的7位显示代码,一种方法是硬件方法,另一种方法是软件方法,软件方法就是将0~F这16个数字对应的显示代码组成一个表,通过查表进行译码
ledtb byte 3f,06h,5bh,...,显示数码表
mov bx,1 ;要显示的数字
mov al,ledtb[bx];
mov dx,port ;假设port表似乎与数码管相接的端口地址
out dx,al ;输出显示
多个数码管进行显示的话我们需要考虑两个问题,就是选中那个数码管,然后让这个数码管显示什么数字,首先我们已经把第二个问题(显示什么数字)解决了(单个数码管的显示),然后选中那个数码管可以用一个位控制端口
位控制端口
:控制哪个数码管显示段控制端口
:决定具体显示什么数码 ;数据段
ledt byte 8 dup(0)
;主程序
mov si,offset ledt ;指向数码缓冲区
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位数码管都显示一遍,返回
ledtb byte 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
byte 80h,90h,88h,83h,0c6h,0c1h,86h,8eh
displed endp
timer =10 ;延时常量(需要根据实际情况确定具体数值)
delay pro
...
delay endp
在现实中许多信号并不是数字信号,而是计算机无法处理的模拟信号,模拟接口就是为了处理这类信号。
传感器
:将各种现场的物理量测量出来并转换成电信号放大器
: 把传感器输出的信号放大到ADC所需的量程范围低通滤波器
:降低噪声、滤去高频干扰多路开关
:把多个现场信号分时地接通到A/D转换器上转换采样保持器
:对高速变化的信号进行A/D转换时,为了保持转换精度,需要使用采样保持器,周期性采样连续信号,并在A/D转换期间保持不变D/A转换器(DAC)将微机处理后的数字量转换为模拟量
将数字量转换为模拟量,先把每一位代码按其权值的大小转换成相应的模拟分量,然后将各模拟分量相加,总和就是与数字量相应的模拟量。例如1101B=13
Vref:基准电压,提供给转换电路的稳定的电压源,也称参考电压Vref
DAC0832内部具有输入寄存器和DAC寄存器两级数字量缓冲寄存器
DI0~DI7
是8为数字量输入引脚
ILE
、~CS
、~WR1
控制输入寄存器锁存信号LE1
~XFER
、WR2
:控制DAC寄存器的锁存信号LE2
三种工作方式
直通方式
:LE1和LE2一直为高,数据可以直接进入D/A转换器单缓冲方式
:LE1或LE2一直为高,只控制一级缓冲双缓冲方式
:不让LE1和LE2一直为高,控制两级寄存器DAC0832的模拟输出有Iout1
、Iout2
、Rfb
Iout1
:模拟输出电流1,是逻辑电平为1的各位输出电流之和,输出全为1的时候值最大,输出全为0的时候值最小Iout2
:模拟输出电流2,是逻辑电平为0的各位输出电流之和,Iout1 + Iout2 = 常量Rfb
:反馈电阻引出端,用作外接运算放大器的反馈电阻VREF
:参考电压输出端Vcc
:电源电压AGND
:模拟地DGND
:数字地DAC芯片作为一个输出设备接口电路,与主机相连时中间需要有锁存器
mov al,buf ;取数字量
mov dx,portd ;PORTD为DAC端口地址
out dx,al ;输出,进行D/A转换
A/D转换器将模拟量转换为数字两输入微机处理
ADC主要有两种实现技术,一种是计数器式,一种是逐次逼近式。
计数式的原理:就是从0开始加,产生数字量,然后用D/A转换器,将数字量转换成模拟量,和输入进来的模拟量进行比较,看是否相同,不相同的话继续累加,遇到相同的则说明此时寄存器里面存储的就是该模拟信号要转换的数字量
逐次逼近式:是从最大的数开始减,类似计数式
IN0~IN7
:8个模拟电压输入端ADDA、ADDB、ADDC
:3个地址输入线,经过译码器后选择一个模拟输入端进行A/D转换ADC0809内部对转换后的数字量具有锁存能力,数字量输出端D0D7具有三态功能,只有在OE为高电平有效时,才将三态锁存器的梭子两从D0D7输出
8为A/D转换器,从输入模拟量Vin转换为数字模拟量N的公式:
ADC芯片是一个向主机输出的设备。
ADC开始转换时需要一个启动信号。
ADC转换结束时,ADC输出一个转换结束信号,通知主机读取结果,主机检查判断A/D转换结束的方式主要有两种一种是查询方式、一种是中断方式
查询方式
:ADC开始转换后,主机不断查询数据总线上的某一位(这一位是ADC在转换结束后发送到数据总线上的),发现结束信号有效时,才读取数据中断方式
:把结束信号作为中断请求信号接到主机的中断请求线上。ADC转换结束后,主动向处理器申请中断。处理器响应中断后,在中断服务程序中读取数据。;.data设置缓冲区
adtemp byte 0
;.code
... ;设置中断向量表等工作
sti ;开中断
mov dx,220h
out ad,al ;启动A/D转换
... ;其他工作
中断服务程序
:
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 ;送入缓冲区
mov al, 20h ;给中断控制器发送EOI命令
out 20h,al
pop ds
pop dx
pop ax
iret ;中断返回
adint endp
;.data
counter equ 8
buf byte counter dup(0)
;.code
mov bx, offset buf;数据缓冲区偏移地址
mov cx, counter;检测的数据个数
mov dx,220h ;从IN0开始转换
start1:
out dx,al ;启动A/D转换
push dx
mov dx, 238h ;循环查询是否转换结束
start2:
in al, dx ;读入状态信息
test al, 80h ;D7=1转换结束
jz start2 ;没有结束继续查询
pop dx ;转换结束
in al,dx ;读取数据
mov [bx],al ;存入缓存区
inc cx
inc dx ;转向下一个模拟通道进行检测
loop start1
... 数据处理