第4章51单片机内部功能模块及其应用单片机.docx

上传人:飞猪 文档编号:427387 上传时间:2025-07-20 格式:DOCX 页数:79 大小:844.02KB
下载 相关 举报
第4章51单片机内部功能模块及其应用单片机.docx_第1页
第1页 / 共79页
第4章51单片机内部功能模块及其应用单片机.docx_第2页
第2页 / 共79页
第4章51单片机内部功能模块及其应用单片机.docx_第3页
第3页 / 共79页
第4章51单片机内部功能模块及其应用单片机.docx_第4页
第4页 / 共79页
第4章51单片机内部功能模块及其应用单片机.docx_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、第4章51系列单片机的功能模块及其应用本章介绍51内部接口的应用。51系列单片机内部集成了: CPUUI条指令 ROM0K4K8K (可扩为 64KB) 内 RAM128/256 B (可扩外部 64KB) 定时/计数器接口2个/3个16位定时/计数器TO、TK T2 全双工异步串行通信接口一 并行接口提供4个8位并行端口 中断控制器一可以管理5个/6个中断源接口电路(InterfaCe) 简称“接口”,是连接CPU总线和外设的桥梁。接口卡=适配器(Adapter)复杂接口电路,仅仅一片IC还不够,需要以某种核心IC芯片搭配外围元器件构造成一个 电路板。比如:网卡、声卡、显卡、数据采集卡、图像

2、采集卡等。端口 (Port)简称“巴是指接口电路中的寄存器,硬件连线决定了每 个寄存器的I/O地址,对接口电路的编程实质是对接口寄存器的编程。CPU控制外设的实质就是控制接口电路,控制接口电路的实质就是控制接口寄存器。4.0中断系统4.0.1中断概念(教材第2章第5节)中断是针对“条件I/O”的外设而设置的一种I/O工作方式(另一种方式是查询)。与查询方 式相比,中断方式减少了 CPU的负担,是计算机系统中重要概念和必不可少的内容。举例:把人看成CPU,手表和电话看成是外设,访问这两个外设就是两种I/O类型:手表一无条件I/O的典型,随时可以访问,自然也不涉及查询和中断方式的选择。电话条件I/

3、O的典型,可以设计成查询方式,也可以设计成中断方式。显然,查询方式用 在这里很“愚蠢”!而采用中断方式就很自如。实现中断工作方式的几个条件: 外设能够产生中断申请信号; CPU支持中断工作方式CPU能够接受外设的中断申请并做出响应; 有一个独立于CPU的中断控制电路一能够区分多路中断源,进行中断允许和优先权设置。正确使用中断需要搞清:中断屏蔽、优先权、响应过程、激活方法、中服调用和返回等。4.0.2 51单片机的中断系统51单片机内部集成了一个中断接口电路(中断控制电路)。1 .中断源51子系列的中断接口电路可以连接5路中断信号(中断源),分别为:INTO、INTK定时器0、 定时器1、串口。

4、前2个是用户可以随意安排使用的,后3个已经固定连接到内部接口电路。图中凡是开关就是控制环节,每个控制环节的通过控制寄存器的设置来实现。硬件查询52子系列的中断系统:比51子系列多了 1个中断源T2。INTOTFOINTlTFl埼RTF2 EXF2ES IO-ET2 I oooEA中金开放中断开放IP寄存器高级中断请求中断查询 k顺序C级中断请求图2-IS 89C52中断系统结构外部中断源INTO、INTl 内部中断源3个定时器中断TFO、TF1 TF2+EXF2 1个串口中断RI+TI2 .中断控制寄存器51单片机的中断控制寄存器有2个(IE和IP),以及TCON的低4位。中断允许寄存器IE

5、A8H) : 1允O禁EAET2ESETlEXlETO EXOEA:总允许位,EA=O禁止一切中断,EA=I总体允许;ET2:定时器2中断允许位,EXl = I允许,EXl=O禁止;ES:串行口中断允许位,ES=I允许,ES=O禁止;ET1:定时器1中断允许位,ETl = I允许,ETl=O禁止;EX1:外部中断1允许位,EXl = I允许,EXl=O禁止;ETO:定时器0中断允许位,ETO=I允许,ETO=O禁止;EXO:外部中断0允许位,EXO=I允许,EXo=O禁止。中断优先级寄存器IP(B8H) : 1高O低XXPT2PSPTlPXlPTOPXO中断源有一个固定的查询顺序,称为内部辅

6、助优先级(同级隐含优先级)。(见上图)定时器电路有一个TCoN中的寄存器,其高4位是关于定时器的控制,而低4位则是关于外部中断INTl和INTO的控制。(后面具体介绍!)TFlTRlTFOTROIElITlIEOITO3 .中断优先级的作用:两个中断同时申请,高优先级的中断申请先被响应;高优先级的申请可以中断低级的响应(中断嵌套),同级不可中断;内部辅助优先级:同级中断同时申请,由内部固定的查询顺序决定响应顺序;中断受阻三情况:同级或高级中断正在服务;当前执行的指令没有结束;正执行RETI指令,则返回后至少再执行一条指令才响应中断。4 .中断响应过程(单片机在每个机器周期的S5P2期间对5个中

7、断源检测一次,所以任何中断申请都可以在1 个机器周期内被CPU发现) 中断源发出中断申请,单片机检测到某个中断请求,等待当前指令执行完毕(可能是1、2、 4个机器周期的指令),从下一个机器周期的Sl开始响应中断; 优先级激活触发器置位,阻断同级和低级中断,清除中断请求标志; 硬件实现当前PC值入栈(为中断返回做准备); 5个特定中断入口地址(中断矢量)之一近入PC, (PSW不会自动入栈); 中服结尾RETl (优先级激活触发器清0,栈顶2字节弹给PC)。5 .中断请求的撤除一个中断申请信号在中断被响应之后应该立即撤消,否则会引起重复中断。内部定时器的TO、Tl的中断(TFK TFO)可以自动

8、撤除;内部定时器的T2中断(TF2和EXF2)不会自动撤除,需要程序撤除;串行通信的中断(TI、RD不会自动撤除,需要编程时软件撤除,由于这些中断信号都是内部 寄存器的某一位,只需在中服中增加对该位的清零指令就可以撤除该项中断申请;外中断在沿触发时也是自动撤除(本来就维持不住,IEX是自动撤除的);只有外中断采用电 平触发时需要自己从硬件上考虑撤除方案。6 .外部中断响应时间毫不受阻的情况下,从提出申请到被响应需要3个机器周期。如果受阻,除了正在执行高级或 同级中断服务程序时间无法确定以外,另外两种受阻的最长等待时间为5个机器周期,合计8个 机器周期。4.0.3外部中断触发方式选择1.外部中断

9、两种激活方式中断请求信号必须有一定形式,51单片的三个内部中断都是在控制寄存器中有相应的中断位 (TRK TRO, TK RI),事件出现则置位,可以看出是属于电平触发方式。内部中断触发信号(3 个定时器和串口)是设计单片机的时候统一设计的,所以信号固定、可靠。对于两个外部中断INTl 和INTO,是由用户连接某种外部端口产生的中断申请,中断申请信号的形式不确定,当然不外乎 电平信号或脉冲信号。为此51单片机设计成对两种外部中断信号的形式都会识别。寄存器TCON的低4位就是与外部中断触发方式有关。TFlTRlTFOTROIElITlIEOITOIE1:如果外中断1连接的是脉冲信号而不是电平信号

10、这叫沿触发,确切说是下降沿触发), 用此位实现中断挂号,来一个中断脉冲(在下降沿时)此位自动置位,响应中断后自动清除。IT1:外中断1的触发方式设置,ITl=O是低电平触发,ITI=I是下降沿触发。注意这种设置是 被动的,取决于外设中断触发信号的类型。如果中断源是脉冲信号,则必须设为下降沿触发。如 果中断源是电平信号,就应该设成电平触发。IE0:外中断0为下降沿触发时的中断挂号。ITO:外中断0的触发方式设置。采用什么触发方式,取决于外设的性质。沿触发时,由于信号无法持久,所以用IEX协助记录 触发(挂号),或者说沿触发通过IEX转化为电平。电平触发要求电平一直保持到中断被响应,一 旦响应要

11、在响应结束前撤除触发电平,否则会引起第二次中断。4.0.4中断的应用51单片机系统中是否启用中断由编程决定。编程两个内容:主程序中进行中断允许、中断优先级的设置(中断初始化); 编写相应的中断服务程序(包括入口地址的设置)。例如:一个51单片机系统,需要启用INTO中断和Tl中断,并且Tl中断为高优先级,INTO 中断为低优先级而且是沿触发。程序相关指令和结构如下:ORG 0000HLJMP STARTORG0003H;LJMP INT_WOORGOOlBH;LJMPINT_T1ORGOlOOHSTART:MOVIE, #10001001BMOVIP, #00001000BSETBITO;中断

12、服务程序 INT_WO: RETIINT_T1:RETI这2句是INTO的中服入口设置这2句是Tl的中服入口设置;设置总允许和INTo允许、Tl允许(可以用位操作实现) ;设置Tl位高优先级(可以用位操作);设置INTO为沿触发(下降沿触发)SETB EA -SETB EXO ,等效于 MOV IE, #89HSETB ETlSETB PTl 等效于 MOV IP, #08H两种指令的效果区别:位操作只改变指定位,不影响其他位。这在程序中 间进行某个中断的变化时比较常用。字节操作影响全部中断,初始化的时候常用。仿照这个例题,考虑5个中断都启用的程序写法。4.1 51内部的并行端口及其应用51系

13、列单片机内部集成了一个并行接口芯片,使用户得到了 4个8位的并行I/O端口,记作 PO、PK P2和P3,共32条I/O 口线,可以用这些口线连接输入设备(开关、按键、传感器等) 或输出设备(LED、蜂鸣器、数码管、液晶屏等)。这4个并行口的内部分别对应一个寄存器,名称也是PO、Pl、P2和P3,每个寄存器可以字节 寻址也可以位寻址。讨论单片机系统硬件连接的时候,凡是说Pl 口连接XX、P2 口连接YY,显 然说的是口线,而在程序中表示向口输出、从P2 口输入则是针对寄存器。PO. PK P2和P3这4个并行口除了最本职的I/O功能以外,多数兼有第2功能,这就导致了 这些口线在电路结构和功能特

14、性上是基本相同的,但又各具特点,使用方法也略有差异。并口寄存器P0、Pl P2、P3属于SFR,只能直接寻址(程序中使用P0、PK P2、P3仅仅是 用代号表达了直接地址,实际等效于直接使用80H、90H、A0H. BOo教材P.31)。几个概念:任何用于输出的端口 (Port)都应该具有锁存功能端口能够记住总线的瞬间数据; 任何用于输入的端口 (Port)应该具有缓冲功能一一外来的输入不能随便进入总线; 51单片机的四个并行I/O端口 (PO. PK P2和P3)都是8位双向口(可入可出),所以 电路必需同时具有输入缓冲和输出锁存的功能。这就导致了每根口线电路结构的复杂性。单纯完成I/O功能

15、所需要的电路结构:(这是1根口线的电路)注意上图左侧的4条水平引线的文字说明:内部总线通向CPU,无论是输出还是输入,数据 都要经过内部总线;读锁存器、写锁存器、读引脚是3个控制信号,用于控制数据的3个走向。 在对I/O 口进行输入输出操作的时候,根据命令的不同将产生不同的控制信号,从而决定数据的传 输方向。输出数据用MOV指令向并口输出字节,指令译码的结果是写锁存器信号有效,数据 从内部总线传输到D触发器的D端(锁存),同时D触发器的/Q端输出一个相反的值控制驱动FETo 如果D=I贝Q=0, FET截止,引脚=1;如果D=O则/Q=l, FET饱和导通,引脚=0。读引脚(输入)一用MOV指

16、令读并口的字节,指令译码的结果是读引脚信号有效,打 开了引脚缓冲三态门,引脚数据经三态门进入内部总线。需要注意的是,读引脚的时候FET必须 处于截止状态,才能读到引脚的正确电平。如果FET处于饱和导通状态,相当于引脚接地,就不 能读到正确的结果。所以,读引脚之前,要先向锁存器写1。读锁存器一有一些对并口操作的指令,不是单纯的读或者写,而是先读入当前状态、进 行修改、再写出修改后的结果(简称:读-修改-写指令),这类指令译码的结果是读锁存器信号有 效,把Q端的值从内部总线读入,处理之后再写出到D触发器的D端。三类操作指令举例列表:类别指令举例指令功能操作输出指令MOV Pl, A向Pl 口输出A

17、中8位数据经内部总线写入Pl 口 8个锁存器读引脚指令MOV A, P2从P2 口读入P2 口 8个引脚的状态经过内部总线进入A读-修改-写 指令ANL Pl, A对Pl 口与操作以并口为目的数的指令,只要操作与并 口的原值相关,就是读-修改-写指令。ORL P3, A对Pl 口或操作XRL PO, A对Pl 口异或INC P2P2加1操作DEC PlPl减1操作DJNZ P3, XXXP3减1不为0跳CPL P1.0PLO求反位操作指令中,凡是改变并口某一位值 的操作,都是先把并口 8位整个读入,修 改某一位之后,再写出。SETB P3.3P3.3 置 1CLR P2.6P2.6 清 0JB

18、C P1.7, XXXP1.7为1则清0跳MOV P2.2, CP2.2赋值51并行口 Do功能的用法:图4-2: Pl 口的低4位接4只LED,高4位接了 4个开关。要求编程实现:读取开关状态, 送LED显示。例4.1用字节操作指令实现。KLA:MOV A, PlSWAP AORL A, #0F0HMOV Pl, ARET例4.2用位操作指令实现。KLB:MOV C, P1.4MOV P1.0, CMOV C, Pl.5MOV Pl.l, CMOV C, P1.6MOV Pl.2, CMOV C, P1.7MOV Pl.3, CRET补充题:8只LED显示按键次数P3.3接开关,人工控制产生

19、输入脉冲,Pl 口 LED按2进制显示开关次数。算法:不断检查开关状态并输出A值,用标志控制A是否加1。人工按键一次的时间单位是几十毫秒甚至几百毫秒,而程序读取一次端口的时间是几个微秒, 所以程序中如果没有避免重复加1的措施,每次按键程序会读成上千次。这是本算法的要点。没有考虑重复加1的程序解决了重复加1的程序ORG0000HORG0000HLJMPSTARTLJMPSTARTORG0200HORG0200HSTART:MOVA, #0FFHSTART:MOVA, #OFFHSETBP3.3SETBP3.3LOOP:MOVPl, ALOOP:MOVPl, AMOVC, P3. 3MOVC, P

20、3. 3JCNOADDJCNOADDDECAJBF0, NEXTNOADD:LJMPLOOPDECAENDSETBFOLJMPNEXTNOADD:CLRFONEXT:LJMPLOOPENDF面介绍51并行口的整体功能:4.1.1 Pl 口对于51子系列,Pl 口最单纯,8位都只有单一的I/O功能,只能用于I/O。对于52子系列,Pl 口的最低2位兼了第二功能(用于定时/计数器T2),高6位还是单纯的I/O 口。4.1.2 P3 口双功能口,8条线均有第二功能:(第一功能是什么?)口线名称/第二功能名称第二功能P3.0/RXD串行接口电路的串行输入端P3.1/TXD串行接口电路的串行输出端P3.

21、2/INT0外部中断O的中断申请输入端P3.3/INT1外部中断1的中断申请输入端P3.4/T0TO用于计数方式时,计数脉冲输入端P3.5/T1Tl用于计数方式时,计数脉冲输入端P3.6/WR读外部RAM时,读有效信号输出端P3.7/RD写外部RAM时,写有效信号输出端内部电路增加了一个与非门,解决作为第二功能的输出。作为第一功能使用的时候,性能与单纯I/O 口无异。4.1.3 P2 口外部扩展时,兼任地址总线高8位(负责输出高8位地址)。由于高8位地址不是来自内部总线,所以增加了单刀双掷开关进行切换。作为第一功能使用的时候,性能与单纯I/O 口无异。(教材上电路有误!)4.1.4 PO 口外

22、部扩展时,兼任地址总线低8位并且兼任8位数据总线,地址/数据分时复用。PO 的任务最复杂,所以电路也变化最大。作为地址/数据都要传输的口线,需要有高阻态(第 三态),所以内部上拉电阻变成了 FETo上通下止输出1,上止下通输出0,上下都止高阻(引脚 浮空=引脚与内部电路的断开)。这就导致PO 口在作为I/O使用的时候,不同于另外三个口,而是相当于一个没有内部上拉电 阻的输出端OC门或漏极开路的门,必须在外部接一个IOK上拉电阻,否则无法输出1,也无 法输入1。51系列单片机的并行口,按其特性可以分为以下类型: 单一的准双向口(如89C52的PL 2P1. 7); 多种功能复用的准双向口(如89

23、C52的PL 0、Pl. 1, P3.OP3.7); 可作为地址总线输出口的准双向口(P2 口); 可作为地址/数据总线口的三态双向口口。口)。图4H(a)(d)分别给出了 89C52这4种类型并行口的1位结构框图。第二输出功能(a)单一功能准双向口内部总线- 写锁存器-内部上拉引脚读引脚二I第二输入功能(b)多功能准双向口(c)可作为地址总线口的准双向口 P2读锁存器内部总线 写锁存器地址/数据 控制T2D QCL Q读引脚Vcc引脚(d)可作为地址/数据总线口的三态双向口 Po图4-1并行结构框图补充内容:驱动的概念、拉电流输出、灌电流输出和OC门驱动=功率放大单片机输出的控制信号只能提供

24、控制逻辑,没有带负载的能力,如果需要 带负载,必须对单片机的逻辑信号进行放大(电压、电流),放大就是驱动。小功率负载的驱动一可以用门电路实现小功率驱动,20mA以内可以使用普通的非门(反相 器)、同相门等,10OmA以内可以用OC门或三极管进行放大。大功率负载的驱动多级放大:口线一一驱动门/三极管一一继电器与驱动紧密相关的一个概念隔离。(光耦、继电器等)单片机是5V直流电压的电路,如 果用于控制直流12V、24V乃至交流220V、380V,就需要解决不同电压的电路的耦合方法=隔离 方法。设计专门的元器件,使得信号可以在不同电压的电路中传递,但是电压互不影响。逻辑门的拉电流用法和灌电流用法一驱动

25、门的逻辑符号如上面图中所示(三角形符号),但 是其内部还是用三极管一类元件构造,所以负载电流的方向不仅可以向三角形外,也可以向三角 形内。Rl .Ig18XTAL1XTAL2RSTP0.0A P0.1/AD1 P0.2/AD2 P0.3AD P0.4/AD4 P0.5/AD5 P0.6/AD6P0.7/AD739 .38 .37 .36 .35 .34 .33 .32 .濯 . .;电流J1:A .J - ZAD2.LED P2.0/P2.1BP2.2/A1021122 .23 .MLS04 -30 工PSEN ALE EAP2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14

26、P2.7/A15P3.0/RXD P3.1/TXD P3.2iNT0 P3.3/INT1P3.WT0P3.5/T1P3.6/WRP3.7/RD24 ,.25 .26 .273/立. .专.12_ 3_45_ 6_7_ 8_P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.728 .10_H .12 .13 ._14 .15 .17 . ?r4LS04 - =TEXTA -电流fcj D.1 . LE D ,. R2.4CkJ T TTL电路的OC 可以作为驱动的门电路有两种,一种是普通门(内部接有上拉电阻),另一种是集电极开路 (OpenCollector) (内部没有上拉电阻)。

27、前者驱动能力较小(电流固定),后者驱动能力较大 (自己外接上拉电阻任意控制电流)。(在 CMOS 电路中称为 OD 门Open Drain electrode)晶体管(Transistor):发射极(Emitter )、集电极(Collector) 基极(BaSe)场效应管(Field Effect Transistor):源极(SourceElectrode), 漏极(Drain Electrode)栅极(Grid Electrode)TTL电路(TranSiStOr-TranSiStorLogiC)晶体管构成的集成电路CMOS 电路(ComPIementary Metal-Oxide-Se

28、miconductor)互补金属氧化物半导体构成的集成电路(基于场效应管构成的集成电路)普通门拉电流接法4.1.5并行的I/O应用1蜂鸣器、可控硅的接口和编程1 .蜂鸣器接口在监控系统中,经常用到声、光双重报警,光报警通常用LED,声音报警常用蜂鸣器。一般说到发音器件都会想到扬声器。但是扬声器发音需要控制电路提供一定频率的振荡脉冲。 当然,扬声器可以发出复杂的声音。如果仅仅需要一个简单的嘀、嘀一类的提示音,蜂鸣器则是 最佳器件。蜂鸣器的特点是加上直流电就自己振动而产生声音,不用程序来产生振荡,这使得控 制电路和控制程序都很简单,与点亮LED很相似。当然蜂鸣器的声音很单调,频率是器件固有的, 不

29、可变。我们通过编程可以控制的效果变化就是间歇发音(简单间歇、长短结合)。参见图4-4,用1根口线控制一个蜂鸣器。蜂鸣器工作电流远大于LED,所以一般驱动门不能 胜任。因此外接一个三极管进行驱动,调整三极管基极和反馈电阻,使三极管工作在开关状态。 如果使用PNP三极管,则口线输出0时,三极管导通,蜂鸣器响;线输出1时,三极管截止,蜂鸣器不响。若使用NPN三极管,控制逻辑正相反。例题4.7使蜂鸣器间歇响5次的子程序。模拟演示一一蜂鸣器(两种接法)BEEP:MOVR7,#5BEEPL: CLRP1.0LCALLDEL5SETBP1.0LCALLDELlODJNZR7,BEEPLRETDEL5:MOV

30、R6,#5LJMPDELllDELIO:MOVR6,#20DELll:MOVR5,#200HDEL12:MOVR4,#125HDJNZR4,$DJNZR5,DEL12DJNZR6,DELllRET2 .可控硅接口这部分内容很有实用价值,需要认真思考才能充分理解。这部分包含了:光电隔离器件的运用不同电压的电路如何连接一一耦合! 可控硅器件的控制控制角、导通角、过零电路可控硅可控硅是一种大功率整流器件、又称晶闸管可以理解为可控二极管、可控PN结。可控硅符号如下图。AK之间是否导通取决于控制极G的触发电流。显然,这样的性能用于直 流电路没有任何价值(AK如果通直流,则一旦导通就永远导通,没什么意思)

31、阳极A Z阴极K控制极G如果用于交流电路,控制极G的电流仅仅能使可控硅导通一个正半周,负半周的时候AK之 间反相截止。再到正半周又需要触发才能再次导通。如果我们精确对触发时刻进行控制,就可以改变正半周导通的比例(控制角、导通角),实现 电机调速、可控加热、调光台灯等产品的效果。上图表示的是单向可控硅,还有正负半周都可控导通的双向可控硅。光电隔离器件=光电耦合器件=光耦一个电路中用到几种不同的电压,甚至有交流有直流,不能直接耦合在一起。为此,专门有一 类既能连通控制关系又能隔离不同电压的器件:继电器、干簧管、光耦、。继电器、干簧管利用电磁效应实现隔离耦合:低压电路控制线圈的通断,线圈通电产生的

32、 电磁力吸和开关触点,开关触点连接高电压、大电流的电路。光耦利用光电效应实现隔离耦合:一个集成芯片内部有一个LED和一个光敏三极管,低 压电路LED的亮灭,LED点亮时,光敏三极管导通,接通高电压、大电流的电路。过零检测如何实现在交流电每个正半周的准确位置发出触发脉冲(如何保证导通角的准确)。由于交流 电的50HZ周期不稳定,所以触发脉冲不能依赖单片机自己的定时,必须检测交流电的正脉冲时间, 特别是过零瞬间。(C)过零电路图4-6 可控的加热电路例4.8单片机P3.2连接过零检测电路,PLO输出触发脉冲,检测到过零的负跳变到发出触发 脉冲的时间间隔决定导通角,时间间隔用延时程序来实现,假设延时

33、程序的延时参数在30H、31H 单元,可控硅控制程序如下:POIIU:JBP3.2, $LCALLCDEL SETB P1.0 NOP NOP NOPCLR P1.0JNB P3.2, $ SJMP POIIUCDEL:MOV R6,30HCDELl:MOV R5,31HDJNZ R5, $ DJNZ R6, CDELl RET稍加思考就可以意识到,此程序只能是控制原理的示范,用于实际系统中根本无法保证控制的 精度。因为实用的单片机系统不可能只管理这一个内容,如果系统中启用了某种中断,一旦出现 中断,CPU就会执行中断服务程序,而离开了主程序,检测过零以及控制导通角的延时程序就会 受影响。例题

34、4.14有真正实用的方法一用定时器控制导通角的延时。4.1.6并行的I/O应用2拨码盘的接口和编程1. BCD拨码盘的构造向计算机输入数据的典型设备是键盘,但是如果数据输入量很少、很偶然,就不必兴师动众扩 展键盘,拨码盘就是比较简单的数据输入器件。BCD拨码盘的构造:拨码盘是一个机械部件,不是电路,利用机械结构实现触点的不同接触。BCD码是4位2进 制数,我们用一个转盘和5条线就可以制做一个拨码盘:一条线输入VCG四条线输出BCD码, 随着转盘的10个位置,四条输出线与输入VCC线有不同的10种接触组合,从而得到了 10个不 同的4位2进制数,这就是BCD码。参见表4-2。2. BCD拨码盘的

35、接口和编程每个拨码盘可以输入1位10进制数,需要与4条口线连通。两个拨码盘占用一个8位并行端 口,如图4-8。4个拨码盘简单连接就需要占用16条口线,代价有点大。所以图4-9示范了 4个拨码盘的一种 节省口线的连接方法,只用8条口线即可。这里面体现了一种扫描的思想。3*拨码盘+5V7 65 PPP1拨码盘2”拨码盘0拨码盘图+9 4位BCD码拨码盘的接口方法例4.9对图4-9的管理程序,要求把拨码盘数据读入内RAM的30H、31H单元。分析算法(与指令逐条对应)程序 根据题目要求,30H单元用 于存放3#、2#拨码盘的数 据,31H单元用于存放1#、 0#拨码盘的数据。根据电路,读哪个拨码盘就

36、 应该把该拨码盘的输入控制 端清0,其它拨码盘的输入 控制端置Io这样每个与非 门的4条输入端有3个=1, 另外1个输入端得值取决于 对应拨码盘的状态。读取步骤:先向Pl 口输出 一个高4位有1位为0的数据 (低4位全1),选中一个拨码 盘,然后读入Pl 口的值,低4 位即所选拨码盘的值。利用字节 交换等方法存储该值即可。Ro指向30H单元选中3#拨码盘读入Pl 口的8位值把低4位交换到高4位存入30H单元选中2#拨码盘读入Pl 口的8位值A与30H低4位交换修改指针,RO指31H单元选中1#拨码盘读入Pl 口的8位值把低4位交换到高4位存入31H单元选中0#拨码盘读入Pl 口的8位值A与31

37、H低4位交换完毕INBCD:MOVRO, #30H;MOVPl, #7FH;MOVA, Pl;SWAPA;MOVR0, A;MOV Pl, #0BFH;MOVA, Pl;XCHDA, R0;INC RO;MOV Pl, #0DFH;MOV A, Pl;SWAP A;XCHA, R0;MOV Pl, #0EFH;MOVA, Pl;XCHDA, R0;RET;作业一:1 .参考教材画图:51单片机+晶振电路+上电复位电路。2 .参考实验在上图基础上画图:Pl 口接8只LED (要求:拉电流方式带非门驱动),PO 口 接8只按键(要求:每键接上拉电阻,按下键得到低电平)。3 .编程:对上题硬件电路,

38、设计8种点亮LED的方式,要求程序依次显示这8种方式。4 .编程:在上一步真正清楚的前提下,再完成:按几号键则以第几种方式重复显示,直到按 另一个键才变换到另一种方式。5 .计算:已知LED压降2V,额定工作电流20mA,请说明电阻阻值如何计算以及计算结果。(练习很重要、很基本,请认真独立思考、彻底理解,才能真正掌握!)键盘就是按钮的组合,使用单个按钮的方法是一条口线接一个按钮(如转向灯和上面作业)。如果按键数量较多,仍然采用一个按键占用一条线的方案不够经济,常用方法是组成键盘矩 阵。1 .矩阵键盘的工作原理N条行线和M条列线不在同一平面,所以行列之间信号不通。按图示的口线状态,假设从Pl 口

39、低4位输出OOO0,则4条列线都处于低电平状态,此时读入Pl 高4位肯定都是高电平。如果 在行列的每个交点上安装一个连接行线和列线的按钮,当某个交点的按钮按下就能使该按钮所连 接的行和列接通,列线的低电平就会使对应行线变为Oo 8条口线采用4行4列可以出现4*4=16 个交点,可连接16个按键。2 .键盘状态的判断从行线/列线输出低电平,读取列线/行线,判断其中是否有低电平的位,有则表明有键按下, 没有则表明没有键按下。举例:参考图4-10,假定列线输出、行线输入,判断有无按键的子程序如下:KEYS:MOV Pl,#0F0H ; 4条行线置1, 4条列线输出0MOV A, PlCJNE A,

40、0F0H, KEYY ;行线非全L说明有键,跳到标号KEYYSETB C;无键,令C=I (标志)KEYY:CLR C ;有键,令 C=O (标志)RET;返回主程序,根据C值确定下一步的动作上图所示的键盘结构连接到单片机的Pl 口、P2 口、P3 口可行,连接到PO 口则不行。Pl 口、 P2 口、P3 口可行的原因是向口线输出1以后,只要口线不接地就可以读到Io PO 口则不具备这样 的性能,键盘连接到其它接口芯片的并口时,也存在PO 口同样的问题。所以,通用的键盘结构应 该自带上拉电阻。8个按键的独立连接3 .闭合键的识别上面的程序可以判断是否有键按下,但是没有识别具体是哪个键。判断具

41、体按键位置的程序算 法有两种:扫描法一首先由硬件连接方案决定以行为输入 还是以列为输入,如图所示是以行为输入,列为输出。 列为输出就称为列扫描方式。扫描的方法就是输出的列线值每次只有I列为0 (列号确定),这时读出行线值确定行号,行号列号 可以定位一个键的位置。每次扫描需要让所有的列依次为0,如果有8列 就要输出8次列值和读入8次行值并判断。如果这段指令总计100条,执行时间约150US左右,不 到1ms。人按键的动作导致触点接触的时间至少是几十毫秒甚至几百毫秒,所以不用担心扫描过程 中按键被漏过。反转法一如果采用行列反转法进行键盘扫描,首先硬件连线要按右图:行线、列线都接上拉电阻,行 线、列

42、线都可以输入和输出。首先以行为输出列为输入,行线输出全0,列线读 入以后如果某列为0,肯定有按键,但是无法确定行值。 变列为输出行为输入,列线输出刚才读到的数据,行 线读入以后可以确定按键所在的行。闭合键的位置表达有两种方法,一种是给出按键的 序号(如图4-10所标示的015),另一种是给出按键 的行值和列值。例4.10利用反转法识别键号给出所按键的序号假设经过调用KEYS,返回的C=O,那么就可以接着调用键值计算子程序以下是键值计算子程序,首先获取键的位置(行列值),然后计算出键的序号;教材上KEYN那段与KEYS重复,这里就不用了!KEYNl:ANLA, #0F0H;屏蔽列值(A的值来自K

43、EYS)MOVB, A;保留行值(在高4位)于B (低4位为0) XXXX0000ORLA, #0FH;A的低4位置1(注意高4位是刚才读到的行值)MOVPl,A;反转输出到Pl (把读到的行值输出),列线置1为了输入MOVA, Pl;读入,这时低4位应该有为零的位ANLA, #0FH;屏蔽高4位(低4位是列值)0000YYYYORLB, A;至此,B中是键行列值(XXXXYYYY),以下程序确定序号MOVDPTR, #KTAB;表中是16个按键对应的行列值的顺序排列MOVR3,#0;查表得初始偏移量KEYN2:MOVA, R3;A获得偏移量MOVCA, A+DPTR;查表指令,查出一个行列值CJNEA, B9NEXT;查表得到的数据不等于B中按键的行列值则继续查MOVA, R3;直到相等,则R3值(偏移量)就是按键序号(0-15)!RETNEXT:INCR3;修改偏移量,继续查LJMP KEYN2;以下是键行列值的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信/电子 > 电子设计

宁ICP备18001539号-1