第八章 功能器件的应用第一节 概述第二节 实时时钟第三节 串行方式的 LED显示器接口第四节 A/D与 D/A转换接口第五节 电路看门狗本章要点
单片机应用系统的外围功能器件品种繁多,而且新的器件不断推出,不可能也不必要一一加以介绍,本章只选择一些典型的常用芯片,介绍它的使用方法。
根据这些方法就能了解功能器件的使用要点。
使用功能器件主要是掌握它与单片机的连接,使用前的初始化,以及程序的编制方法,本章着重介绍串行扩展的程序的编制。
第一节 概述
1.功能器件是指一些为实现某种功能而设计的专用集成电路 。
2.功能器件是为了解决片内功能的不足,
需要在片外扩展,以满足单片机应用系统的功能需要 。
3.功能器件的扩展方法有并行扩展或串行扩展两种 。 串行扩展由于所占用的 I/O
口少 。 特别适用于小控制系统 。
并行扩展与串行扩展并行扩展法是利用单片机的三总线 (地址总线、数据总线和控制总线 )与被扩展的器件相连接,接口与存储器统一编址。
串行扩展法有一线制、两线制和三线制等几种,其中两线制的 总线、三线制的 SPI总线比较常用。
返回本章首页
CI2
第二节 实时时钟配置实时时钟,便于按时钟所提供的时间按时操作或按时记录 。 时钟芯片有并行和串行两种形式 。
一,并行时钟
1.并行时钟硬件结构常用 并行实时时钟芯片有 MC146818,DS12887、
DS12887A等。它们都具有完备的时钟、闹钟及万年历功能。能实时提供年、
月、日、时、分、秒,且可任意选 12或 24小时制。
图为 DS12887A的引脚图。
2.DS12887A与单片机的连接方法
5V
3.,DS12887A内存单元的地址分配
4.DS12887中寄存器 A各位定义
5.DS12887中寄存器 B各位定义
D7 D6 D5 D4 D3 D2 D1 D0
UIP DV2 DV1 DV0 RS3 RS2 RS1 RS
0
D7 D6 D5 D4 D3 D2 D1 D0
SET PIE AIE UI
E
SQW
E
D
M
24/1
2
DS
E
6.DS12887中寄存器 C各位定义
7.DS12887中寄存器 D各位定义
D7 D6 D5 D4 D3 D2 D1 D0
IRQF PF AF UF 0 0 0 0
D7 D6 D5 D4 D3 D2 D1 D0
VRT 0 0 0 0 0 0 0
8,初始化及写入程序初始化是指时钟使用前根据使用要求对寄存器 A、
B进行设置,以决定时钟、日历的工作制式。以及通过程序对时钟、日历和闹钟当前时间进行初始化,俗称拨钟,以便将实时的秒、分、时和年、
月、日值赋予 00H-09H的 10个时间单元。以
DS12887A为例。
初始化部分
MOV DPTR,#7F0AH ;7F0AH为寄存器 A的地址
MOV A,#70H ;设置分频器复位
MOVX @DPTR,A
INC DPTR ;指向寄存器 B的地址
MOV A,#82H ;SET=1钟暂停,选 BCD24小时制
MOV X,@DPTR,A
设置当前时间
MOV DPL,#00H ;指向秒单元地址
MOV A,#00H ;拨成 0秒
MOVX @DPTR,A
MOV DPL,#02H ;指向分单元地址
MOV A,#00H ;拨成 0分
MOVX @DPTR,A
MOV DPL,#04H ;指向时单元地址
MOV A,#08H ;拨成 8时
MOVX @DPTR,A
MOV DPL,#07H ;指向日单元地址
MOV A,#15H ;15日
MOVX @DPTR,A
INC DPTR ;指向月单元地址
MOV A,#12H ;12月
MOVX @DPTR,A
INC DPTR ;指向年单元地址
MOV A,#05H ;2005年
MOVX @DPTR,A
二、串行实时时钟
1.硬件结构串行时钟只需要一根数据线来读出或写入数据。
DS1302的引脚图 DS1302与单片机的连接
2.读写程序
DS1302的读写步骤
1.将 RST置高。
2.写入带有地址和命令的控制字,控制字共 8位。
D7必须为 1,如果为 0,不能写入 。
D6即 RAM/CK,0为存取日历时钟数据,1表示存取 RAM数据 。
D5至 D1用来表示操作地址,7个日历,时钟寄存器的地址分别为 00000~ 00110。
D0即 RD/WR,若为 0表示进行写操作,为 1表示读操作 。
控制字的值所代表的意义,可参看 教材 表 8-6。
D7 D6 D5 D4 D3 D2 D1 D0
1 RAM/CK A4 A3 A2 A1 A0 RD/WR
3.输入或输出数据时序输入时,跟在写地址和命令控制字节的 8个 SCLK
周期之后,在下 8个 SCLK周期的上升沿写入数据字节。数据输入从低到高,要求采用 BCD码。
输出读操作时,跟随在输入写地址和命令控制字节的 8个 SCLK周期之后,在下 8个 SCLK周期的 下降沿读出该地址 数据。数据 读出同样 从低到高。
传送结束,将 RST置低,所有传送停止 。
返回本章首页串行实时时钟的 读写程序 ( 通过调用子程序的方法 )
1,启动子程序
ST02,CLR P1.0 ;SCLK置低
CLR P1.2
NOP
SETB P1.2 ;~RST置高
RET
2,写入控制字为 BF的子程序
WR02,MOV R7,#08H
MOV A,#0BFH ;一次性写入控制字 0BFH
LP02,CLR P1.0 ;SCLK置低
RRC A
MOV P1.1,C ;写入一位
NOP
SETB P1.0 ;SCLK置高
NOP
DJNZ R7,LP02 ;未写完 8位继续
RET
3.串行实时时钟 读出一个字节子程序
RD02,MOV R7,#08H
LP021,CLR P1.0 ;SCLK置低
NOP
MOV C,P1.1 ;读出一位
RRC A
SETB P1.0 ;SCLK置高
NOP
DJNZ R7,LP021 ;未读完 8位继续
RET
4,结束子程序
STOP,CLR P1.2 ; 置高
NOP
RET
5.读出秒,分,时,日,月,周日,年全部 7个字节
LCALL ST02 ;启动
MOV A,#0BFH
LCALL WR02 ;写入控制字
MOV R6,#07H
MOV R0,#49H
LP,LCALL RD02 ;读入一个字节
MOV @R0,A
INC R0
DJNZ R6,LP ;7个字节未完继续
LCALL STOP
RET
第三节 串行方式的 LED显示器接口最简单的 LED显示器串行扩展方式是利用单片机的串口,
通过串入并出移位寄存器,接到 LED数码显示器如图所示 。
现在则多采用串行接口芯片如 PS7219。
一,PS7219的引脚及与单片机的连接二,PS7219内部的控制寄存器
1.译码方式寄存器(地址 09H)
2,亮度寄存器 ( 地址 0AH)
3.数据个数扫描界线寄存器(地址 0BH)
用来设置所要接的数码管个数,最多接 8个此寄存器的值对应数码管的亮度,它们之间的关系见教材的表 8--8。
共 8位,每一位与一个 LED数码显示器相对应。每个数码显示器可设为 BCD译码(置,1” );或设为非代码操作(置,0” ),此时存于 01H到 08H寄存器的显示数据必须是七段码。
PS7219内部的控制寄存器共 15个,其中 01H? 08HC存放待显示的数据,09H? 0FH为控制寄存器。
4.掉电控制寄存器(地址 0CH)
控制两种工作方式,当其 D0位为,0”,
选择工作于正常显示方式; D0位为,1”,
选择工作于测试显示方式。
6.显示测试寄存器(地址 0FH)
共 8位,某位置,1”时,该位对应的数码显示器处于闪烁状态,否则为正常显示。
5.闪烁控制寄存器(地址 0DH)
置,1” 时,芯片正常工作;置,0” 时,工作于掉电模式,显示器不显示,但数据保持不变。
三,PS7219中串行数据传送显示时必须分别向以上 15个寄存器传送数据,
每一个寄存器都要送 16位数据,数据的格式:
数据从 PS7219 的 DIN端输入,高位在前低位在后,可以用一个子程序来完成 。
传送数据的通信时序见图 8-10。
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
目标寄存器地址 传送给寄存器的数据无关位四、显示程序举例设连接如上图,要显示的 8个数码以 BCD码的形式存放在单片机的 50H-53H存储单元,试编程显示。
主程序,
ADDR DATA 30H ;30H存地址
DBUF DATA 31H ;31H存数据
LOAD EQU P2.0
DO EQU P2.1
CLK EQU P2.2
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN,ACALL DISPLAY
ACALL MS300
AJMP MAIN
显示子程序,在显示子程序中应先送控制字
DISPLAY,CLR LOAD
MOV ADDR,#09H ;设置译码方式
MOV DBUF,#0FFH
ACALL SEND16
MOV ADDR,#0AH ;设置亮度
MOV DBUF,#0FH
ACALL SEND16
MOV ADDR,#0BH ;设置扫描界限
MOV DBUF,#07H
ACALL SEND16
MOV ADDR,#0CH ;设置掉电控制 MOV
MOV DBUF,#01H
ACALL SEND16
MOV ADDR,#0FH ;设置是否测试
MOV DBUF,#00H
ACALL SEND16
ACALL MS2
续上
MOV R7,#04H ;控制字后送 4个字节
MOV R1,#50H
MOV ADDR,#00H ;待显示数码送的 01H-08H
DIS1,INC ADDR ;取 PS7219地址
MOV A,@R1
ANL A,#0F0H
SWAP A
MOV DBUF,A
ACALL SEND16
INC ADDR
MOV A,@R1
ANL A,#0FH
MOV DBUF,A
ACALL SEND16
INC R1
DJNZ R7,DIS1
RET
串行通信子程序,入口条件为发送数据存于 DBUF,发送到
PS7219的地址存于 ADDR
MOV R7,#08H;送数据
MOV A,DBUF
SEND2:SETB CLK
RLC A
MOV DO,C
ACALL MS2
CLR CLK
DJNZ R7,SEND2
SETB LOAD
SETB CLK
ACALL MS2
RET
SEND16:CLR LOAD
NOP
MOV R7,#08H;送地址
MOV A,ADDR
SEND1,SETB CLK
RLC A
MOV DO,C
ACALL MS2
CLR CLK
ACALL MS2
DJNZ R7,SEND1
ACALL MS2
延时子程序,
MS2,MOV R2,#20H
M1,DJNZ R2,M1
RET
MS300:MOV R3,#20H
M2,MOV R2,#0FH
M3,DJNZ R2,M3
DJNZ R3,M2
RET
返回本章首页第四节 A/D与 D/A转换接口一,A/D转换接口 ADC0809
1,ADC0809 结构
ADC0809是采用逐次逼近式并行输电的芯片 。 通过逐次比较使产生出的等价数字量,最接近于被测模拟量,转换速度高 。
2.ADC0809的引脚从引脚 D0~D7输出的数字量与输入电压及参考电压有关。
为输入模拟电压为参考电压与其中
in
r e fr e f
r e fr e f
r e fin
V
VV
VV
VV
N
256
)()(
)()(
)(


3.ADC0809应用实例利用单片机测量炉温的系统如图所示,设温度传感器信号接 IN3,利用单片机 P2,7作为地址线选的高位线,将
0809的地址定在 7FF0H~7FF7H.。
4.测量炉温的 A/D转换程序
MOV R0,#30H
MOV DPTR,#7FF3H
MOVX @DPTR,A
SETB P1.0
LOOP,JNB P1.0,LOOP ;读转换结束标志
MOVX A,@ DPTR ;EOC为 1读结果
MOV R0,A
RET
二,8位串行 D/A转换接口 MAX518
1.内部结构
MAX518是两线串行接口的 8位数 -模转换器,两路转换器可分别将两个 8位数字量转换为两路模拟量从
OUT0,OUT1输出 。 电源电压同时作为参考电压,当数字量为 FFH时,最大的输出模拟电压约等于 5V。
2.MAX518与 AT89C51的连接 与引脚排列
P1.6和 P1.7分别虚拟 SCL和 SDA
引脚排列连接电路
3,MAX518转换程序按上图连接,若置 AD1=0,AD0=0写操作时的从地址为
58H。 若 R2=0,R1=0,R0=0,RST=0,PD=0,A0=0、
00H则写操作指令为 00H,也可用 01H。 A/D转换子程序如下 。
入口条件:待转换模拟量的数据置于 B。
MOV A,B ; 取出数据
LCALL WRB ;完成转换
LCALL STOP
RET
ADDR EQU 58H ;从地址值
DAC0 EQU 00H ;写操作指令
OUT0,LCALL START
MOV A,#ADDR
LCALL WRB
MOV A,#DAC0
LCALL WRB
返回本章首页第五节 看门狗电路看门狗定时器简称看门狗或 WDT(Wacth Dog
Timer),它是监视程序正常运行的一种定时器。
一、内置看门狗电路某些单片机片内有 内置看门狗电路,例如
AT89S51,但使用必须 先激活,或称为初始化。激活方法是向地址为 0A6H的看门狗寄存器 WDTRST写入 1EH,再写入 0E1H。激活以后,
看门狗即开始计时,在正常程序中,要在
16ms内插入一个喂狗指令。喂狗指令也是向地址 0A6H寄存器写入 1EH,再写入 0E1H。 如果程序跑飞,到时没有喂狗指令,系统就会马上复位 。
二、外置看门狗电路例如 MAX706P芯片,其引脚及典型应用电路如下,如果在
1.6s内,给 WDI输入一个跳变沿(上升沿或下降沿),相当于 安排一条对该端口取反的指令,看门狗定时器即被清零,
否则 就会因 WDO输出低电平而导致复位。
引脚图连接电路返回本章首页