电子工程师提升计划-第8章 接口技术【2.5】

8.1.2 键盘输入接口

        开关可以给单片机输入信号,但单个开关实现的输入功能少,而采用键盘可以实现多功能输入。键盘是由多个按键组成的,在使用时,它需要与键盘输入电路组合在一起。单片机常用的键盘输入电路有:独立式键盘输入电路和矩阵式键盘输入电路。矩阵式键盘输入电路比较复杂,这里只介绍独立式键盘输入电路。
        独立式键盘输入电路如图8-4所示。该键盘采用了4只按键S0~S3,它们分别接到单片机的P3.0~P3.3 引脚。当按下某只按键时,相应的引脚为低电平;按键弹起时,引脚为高电平。

        为了让单片机能识别按下了哪只按键,需要编写程序,再将程序汇编后写入单片机,在程序的控制下,单片机就能识别按下了哪只按键,并执行相应的操作。编写程序时要注意消除按键的抖动。
        程序的编写思路是:依次检测P3.0~P3.3端口的电平,当检测到某端口为低电平时,表明该端口所接的按键被按下,马上执行延时子程序,延时10~20ms进行防抖,延时子程序执行完后检测端口是否仍为低电平,若为低电平,则去执行按下该键所对应的子程序。
程序如下:
ORG 0000H   ;让下一条指令从0000H地址开始
JMP START   ;跳转执行START标号处的指令
ORG 0100H   ;让下一条指令从0100H地址开始
START: MOV P3 #0FFH  ;将P3.0~P3.7端口均置“1”
JNB P3.0,DELAY  ;检测P3.0端口是否为“0”,为“0”则执
行标号DELAY处的延时子
;程序,否则执行下一条指令
JNB P3.0,CTRL0  ;再检测P3.0端口是否为“0”,为“0”则
执行标号CTRL0处的子程
;序,否则执行下一条指令
JNB P3.1,DELAY  ;检测P3.1端口是否为“0”,为“0”则执
行标号DELAY处的延时子
;程序,否则执行下一条指令
JNB P3.1,CTRL1  ;再检测P3.1端口是否为“0”,为“0”则
执行标号CTRL1处的子程
;序,否则执行下一条指令
JNB P3.2,DELAY  ;检测 P3.2 端口是否为“0”,为“0”则
执行标号 DELAY 处的延时子
;程序,否则执行下一条指令
JNB P3.2,CTRL2  ;再检测 P3.2 端口是否为“0”,为“0”
则执行标号 CTRL2 处的子程
;序,否则执行下一条指令
JNB P3.3,DELAY  ;检测 P3.3 端口是否为“0”,为“0”则
执行标号 DELAY 处的延时子
;程序,否则执行下一条指令
JNB P3.3,CTRL3  ;再检测 P3.3 端口是否为“0”,为“0”
则执行标号 CTRL3 处的子程
;序,否则执行下一条指令
AJMP START   ;跳转执行标号START处的指令
;以下为延时子程序
DELAY: MOV R7,#40   ;将数据40送入寄存器R7中
D1: MOV R6,#200   ;将数据200送入寄存器R6中
DJNZ R6,$   ;将 R6 中的值减 1,若为“0”则执行下一条指令,否则再执行本条

;指令,本指令需执行200次才能使R6中的值为“0”
DJNZ R7,D1   ;将 R7 中的值减 1,若为“0”则执行下一
条指令,否则执行标号 D1
;处的指令
RET     ;子程序返回
;下面为按下按键时应执行的子程序
CTRL0: …     ;此处为按下S0时应执行的子程序,可根据
需要编写

RET     ;子程序返回(返回至“JNB P3.0,CTRL0”指令的
下一条指令)
CTRL1: …     ;此处为按下S1时应执行的子程序

RET     ;子程序返回(返回至“JNB P3.1,CTRL1”指令的
下一条指令)
CTRL2: …     ;此处为按下S2时应执行的子程序

RET     ;子程序返回(返回至“JNB P3.2,CTRL2”指令的
下一条指令)
CTRL3: …     ;此处为按下S3时应执行的子程序

RET     ;子程序返回(返回至“JNB P3.3,CTRL3”指令的下一条指令)END

8.1.3 模拟量输入接口

        单片机的主要用途是控制和测量,但它在工作时,只能接收并处理二进制数字量,而温度、湿度和压力等传感器产生的信号都是连续变化的模拟量。解决这个问题的方法就是使用模拟量输入接口将模拟量转换成数字量,这里的模拟量输入接口实际上就是A/D转换器。
1.A/D转换器
        A/D转换器即模/数转换器,又称ADC电路,它的功能是将模拟信号转换成数字信号。A/D转换由采样、保持、量化和编码4个步骤完成。A/D转换过程如图8-5所示,模拟信号经采样、保持、量化和编码后就转换成数字信号。

(1)采样和保持
        采样就是每隔一定的时间对模拟信号进行取值,而保持则是将采样取得的信号电压保存下来。采样和保持往往结合在一起应用,图8-6所示就是采样和保持电路。
        图中的S为模拟开关,实际上一般为三极管或场效应管。S的通断受采样脉冲Us的控制,当采样脉冲到来时,S闭合,输入信号可以通过;采样脉冲过后,S断开,输入信号无法通过,S起采样作用。电容C为保持电容,它能保存采样过来的信号电压值。
        给采样开关S输入图8-6(b)所示的模拟信号Ui,同时给开关S控制端加采样脉冲Us。当第1个采样脉冲到来时,S闭合,此时正好模拟信号A点电压到来,A点电压通过开关S对保持电容C充电,在电容C上充得与A点相同的电压,脉冲过后,S断开,电容C无法放电,所以在电容C上保持了与A点一样的电压。
        当第2个采样脉冲到来时,S闭合,此时正好模拟信号B点电压到来,B点电压通过开关S对保持电容C充电,在电容上充得与B点相同的电压,脉冲过后,S断开,电容C无法放电,所以在电容C上保持了与B点一样的电压。
        当第3个采样脉冲到来时,在电容C上保持了与C点一样的电压。当第4个采样脉冲到来时,S闭合,此时正好模拟信号D点电压到来,由于D点电压较电容C上的电压(第3个脉冲到来时C点对电容C充得的电压)略低,电容C通过开关S向输入端放电,放电使电容C上的电压下降到与模拟信号D点相同,脉冲过后,S断开,电容C无法放电,所以在电容C上保持了与D点一样的电压。

        当第5个采样脉冲到来时,S闭合,此时正好模拟信号E点电压到来,由于E点电压较电容C上的电压低,电容C通过开关S向输入端放电,放电使电容C上的电压下降到与模拟信号E点相同,脉冲过后,S断开,电容C无法放电,所以在电容C上保持了与E点一样的电压。如此工作后,在电容C上就得到图8-6(b)所示的Uo信号。
(2)量化与编码
        量化是指根据编码位数的需要,将采样信号电压分割成整数个电压段的过程。编码是指将每个电压段用相应的二进制数表示的过程。以图8-6(b)所示信号为例,模拟信号Ui经采样、保持得到采样信号电压Uo,Uo的电压变化范围是0~7.5V,现在需要用3位二进制数对它进行编码,由于3位二进制数只有23=8个数值,所以将0~7.5V分成8份:0~0.5 V为第1份(又称第一等级),以0 V作为基准,即在0~0.5V范围内的电压都当成是 0V,编码时用 000 表示;0.5~1.5 V 为第 2 份,基准值为 1V,编码时用 001 表示;1.5~2.5V为第3份,基准值为2V,编码时用010表示;依此类推,5.5~6.5V为第7份,基准值为6V,编码时用110表示;6.5~7.5V为第8份,基准值为7V,编码时用111表示。
        综上所述,图8-6(b)中的模拟信号Ui经采样、保持后得到采样电压Uo,采样电压Uo再经量化、编码后就转换成数字信号(000 100110 111 111 101 011 001 000 001 100),从而完成了A/D转换过程。
2.A/D转换器ADC0809的介绍
(1)内部结构
        ADC0809是一个8位A/D转换器,其内部结构如图8-7所示。从图中可以看出,ADC0809内部有8路模拟量开关、地址锁存与译码器、8位A/D转换器和三态门输出锁存器。

        8路模拟量开关可外接8路模拟信号输入;地址锁存与译码器的功能是锁存A、B、C引脚送入的地址选通信号,对其译码得到控制信号来选择8路模拟量开关中的某一路与A/D转换器接通;8位A/D转换器的功能是将模拟信号转换成数字信号;三态门输出锁存器的功能是将 A/D转换器送来的数字信号锁存起来,当 OE 端由低电平变为高电平时,锁存器中的数据会将数字量从D0~D7端输出。
        (2)各引脚功能说明
        ADC0809的引脚排列及功能标注如图8-8所示。现将各引脚的功能说明如下。

IN0~IN7:8路模拟量输入端口。
D0(2-8)~D7(2-1):8路数字量输出端口。
START:A/D转换器启动控制端。当START加正脉冲后, A/D转换器
开始工作。
ADDA、ADDB、ADDC:8路模拟量开关地址选通输入端。三端输入不同的值可以选择8路中的1路输入,具体见表8-1。

        ALE:地址锁存控制端。当该端为高电平时,将ADDA、ADDB、ADDC端的地址选通信号送入地址锁存器,并译码得到地址输出到8路模拟量开关,选择相应通道的模拟量输入。
        EOC:转换结束信号输出端。在进行A/D转换时,EOC为低电平;转换结束时,EOC变为高电平。根据这个信号可以知道A/D转换器的状态,该信号可以作为中断请求信号。
        OE:输出允许控制端。当 OE 由低变高时,打开三态门输出锁存器,锁存的数字量会从 D0~D7端送出。
        CLK:时钟信号输入端。该端输入的时钟信号用于控制A/D转换器的转换速度,它的频率范围为50~800 kHz,该信号通常由单片机的ALE端输出信号经分频而获得。
REF(+)、REF(-):参考电压输入端。REF(+)端通常与 VCC
端相连,而 REF(-)端与GND相连。
VCC:电源。
GND:接地。
3.ADC0809的应用
        ADC0809可以用作MCS-51系列单片机的A/D转换器,它与MCS-51系列单片机的连接如图8-9所示。

(1)ADC0809工作过程
ADC0809的工作分为以下几个过程。
        ① 选择模拟量输入通道。单片机通过P0、P2端口发出16位地址,其中P0端口的低8位地址送入8位锁存器74LS373,在ALE端脉冲的控制下,74LS373的③、④、⑦脚输入的值从②、⑤、⑥脚输出,通过ADDA、ADDB、ADDC引脚进入ADC0809进行地址译码,选择IN0~IN7中的
某一路模拟量输入通道。
        ② A/D转换。在单片机P0端口发出地址选中IN0~IN7中的某一输入通道时,从P2端口发出的地址(实际只用到了P2.0一个端口)与、 端输出的信号分别经两个或非门形成控制信号,并分别送到ADC0809的START、ALE和OE引脚,启动内部电路对选择的IN0~IN7中某一通道的信号进行A/D转换,得到的8位数据从D0(2-8)~D7(2-1)引脚输出,送至单片机的P0.0~P0.7端口。
        ③ 申请中断。当 ADC0809 中的A/D 转换器转换结束时,会从EOC 引脚输出高电平,它经非门后变为低电平,送到单片机的端,向CPU发出中断请求信号。
        ④响应中断,取走数据。当CPU从 端接收到中断请求信号后,马上将P0.0~P0.7端口的数据取走,并保存到内部数据存储器中。
(2)ADC0809应用编程
        为了让 ADC0809 工作,需要给单片机编写相应的程序,单片机在执行程序时会产生各种控制信号来控制ADC0809的工作。
        举例:编写程序,让ADC0809依次对8路模拟信号进行A/D转换,将转换得到的8组数字量依次保存在片内数据存储器的78H~7FH单元中。程序如下:
ORG 0000H
JMP START
ORG 0013H
JMP ITS
ORG 0100H
START: MOV R0,#78H   ;将数据78H送入寄存器R0(即设定
数据存储区的首地址)
MOV R7,#08H   ;将数据08H送入寄存器R7(即设定数据存储
区的长度)
LP1:  MOV A,#00H   ;将累加器A清0
MOV @R0,A   ;将A中的数据送入R0中的地址所指单元中
INC R0    ;将R0中的值加1
DJNZ R7,LP1   ;将 R7 中的值减 1,不为“0”则转移执行
LP1 处的指令,为“0”则

;执行下一条指令,LP1到本条的指令要执行8次,目的是将78H~7FH单
;元都清0
SETB IT1   ;将寄存器TCON的IT1位设为“1”(即设置INT1
为下降沿触发中断)
SETB EA    ;将寄存器IE的EA位置“1”(即开总中断)
SETB EX1   ;将IE的EX1位置“1”(即开外部中断INT1)
LP3:  MOV R0,#78H   ;设置数据存储区的首地址
MOV R7,#08H   ;设置数据存储区的长度
MOV DPTR,#0FE00H ;将数据0FE00H送入数据指针寄存器
(DPTR)(设置通道的地址)
LP2:  MOVX @DPTR,A  ;将A中的数据送入外部0FE00H单元
中,启动A/D转换器工作
CLR F0    ;将PSW的F0位清0(即将标志位清0)
JNB F0,$   ;检测 F0 位是否为“0”,为“0”仍执行本条
指令,为“1”则执行下
;一条指令(该指令用来等待中断,一旦INT1端有中断请求信号输
入,
;则跳转执行中断子程序)
CLR F0    ;将F0位清0
MOVX A,@DPTR  ;将外部0FE00H单元中的数据送入A中
MOV @R0,A   ;将 A 中的数据送入 R0 中的地址所指的单元
中(即将数据送入设定的
;数据存储区)
INC DPTR   ;将DPTR中的值加1(即选择下一个输入通道)
INC R0    ;将R0中的值加1(即设定下一个通道的数据保存
地址)
DJNZ R7,LP2   ;将 R7 中的值减 1,不为“0”则执行 LP2
处的指令,为“0”执行下
;一条指令,LP2到本条的指令要执行8次,目的是将8个通道的数

;依次存入78H~7FH单元中
;以下为中断子程序
ITS:  SETB F0    ;将PSW的F0位置“1”
RETI     ;中断返回(返回到“CLR F0”指令)

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值