随后逐次逼近型(SAR)控制逻辑移至下一位,并将该位设置为高电平,进行下一次比较。
这个过程一直持续到最低有效位(LSB)。
上述操作结束后,也就完成了转换,N位转换结果储存在寄存器内。
2.4MC51单片机概述[4]
51单片机组成结构中包含运算器、控制器、片内存储器、4个并行I/O口,串行口,定时/计算器、中断系统、振荡器等功能部件。
在此次设计中,51单片机起到衔接作用,其主要动作即为控制ADC0809进行模拟数据的采集及转换,并将转换的结果暂存在寄存器中,在输出到相应的显示器件上。
在此次设计中应用的中断方式读入结果,当A/D转换结束后会自动产生EOC信号,将其与51单片机的外部中断相连接,此时单片接接收转换完成的结果。
双列直插(DIP)式封装的51单片机芯片一般为40条引脚,每个引脚功能说明如下:
1.主电源引脚
VCC(40脚):
接+5V电源正端;
VSS(20脚):
接+5V电源地端。
2.输入/输出引脚
(1)P0口(39-32):
P0.0-P0.7统称为P0口。
在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。
在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。
(2)P3口(10-17脚):
P3.0-P3.7统称为P3口。
除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能,其中P3.2口的第二功能为
外部中断0请求输入端,低电平有效。
3.控制线
(1)ALE/
(30脚):
地址锁存有效信号输出端。
(2)PSEN(29脚):
片外程序存储器读选通信号输出端,低电平有效。
在从外部程序存储器读取指令或常数期间,在每个机器周期内该信号两次有效,以通过数据总线P0口读回指令或常数。
在访问片外数据存储器期间,PSEN信号将不出现。
(3)RES/VPD(9脚):
RES即RESET,VPD为备用电源,该引脚为单片机的上电复位或掉电保护端。
(4)EA/VPP(31脚):
EA为外部程序存储器选用端。
该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。
2.58255可编程并行I/O接口芯片概述[2]
8255是单片机应用系统中广泛被采用的可编程外部I/O扩展芯片。
它有3个8位并行I/O口,每个口有三种工作方式。
2.5.1芯片引脚及其内部结构
各引脚功能如下:
Vcc:
电源的+5V断
GND:
电源的0端
RESET:
复位信号输出端,使内部各复位信号输出端,使内部各寄存器清除,置A,B,C口为输入口。
:
写信号输入端,使CPU输出数据或控制字到8255。
:
读信号输入端,使8255送数据或状态信号呢到CPU。
:
片选端。
A1、A0:
地址总线的最低2位,用于决定端口地址。
D7-D0:
双向数据总线。
PA7-PA0:
A口的8位I/O引脚。
PB7-PB0:
B口的8位I/O引脚。
PC7-PC0:
C口的8位I/O引脚。
:
芯片选择信号。
来自片外译码电路,用于选中8255A芯片,低电平有效。
:
芯片读出信号,低电平有效。
即当
为‘0’时,51单片机从8255A读入数据或状态信息。
:
芯片写入信号,低电平有效。
即当
为‘0’时,51单片机向8255A写出数据或控制字。
A1、A0:
端口选择信号。
用于寻址8255A内部各端口,A1、A0的不同状态与各端口的对应关系如下:
A1A0对应的端口
00A口
01B口
11C口
11控制口
电源与地线:
VCC:
电源线,+5V。
GND:
接地线。
图2.48255内部结构框图
2.5.28255的内部结构
8255的内部结构由三个端口寄存器(端口A、端口B、端口C)、两组控制电路、一个数据总线缓冲器、一个读写控制逻辑电路部分组成。
其内部结构框图如图2.4所示。
各部分功能如下:
1.三个输入/输出端口
8255有3个8口数据端口A、B、C,每个端口都可以用软件设置成输入或输出端口,但也有各自的功能特点。
1)端口A:
对应有一个8位数据输入锁存器和一个8位数据输出锁存器/缓冲器,因此端口A可以为8位双向输入/输出口,且输入/输出均具有锁存功能。
2)端口B:
对应有一个8位数据输入缓冲器和一个8位数据输出锁存器/缓冲器,因此端口B可以为8位双向输入/输出口,且输出具有锁存功能。
3)端口C:
对应两组4位双向输入/输出口,它含有一个8位数据输入缓冲器和一个8位数据数输出锁存器/缓冲器,即输出锁存,输入不锁存。
4)A口和B口常常独立设为输入/输出。
C口常常通过命令分为两个4位端口,每个4位端口包含一个4位的输入缓冲和一个4位的输出锁存/缓冲器,分别为A口和B口提供控制信号和状态信号。
2.两组控制电路
A、B两组控制电路分别实现对A组I/D端口线(A7-A0和C7-C4)和B组I/O端口线(B7-B0和C3-C0)的输入/输出控制。
一方面接收来自内部总线上的控制字一方面接收来自读/写控制逻辑的读/写命令,从而决定两组端口工作方式和读/写操作。
A组:
端口A和端口C(上半部分)PC7-PC4。
B组:
端口B和端口C(下半部分)PC3-PC0。
3.读/写控制逻辑电路
读/写控制逻辑负责管理8255的数据传输过程。
根据地址译码后的片选
、来自控制总线的信号
、
以及来自地址总线的地址信息A1、A0,实现对数据、状态、控制信号的传输。
如表2.3所示为8255的控制信号与传输动作的对应关系。
4.数据总线缓冲器
数据总线缓冲器为双向三态8为缓冲器,它是8255与微机数据总线的接口。
其上传输的信息有输入数据、输出数据、51单片机写给8255的控制字以及从8255读入的状态信息。
2.6发光二极管概述[6]
在此次设计中基本设计实现的显示元件时8个不同颜色的发光二极管,当有高电平通过时,发光二极管亮,低电平时发光二极管灭。
电平信号的来源是8255的PA口。
2.7LED数码管概述[7]
LED数码管是由发光二极管显示字段组成的显示器件,在此次单片机应用系统中是八段LED。
这种显示器有共阴极和共阳极两种,此次系统中使用的是共阴极显示器,如图所示。
共阴极LED显示器的发光二极管的阴极接地,发光二极管的阳极为高电平时,发光二极管点亮。
显示字符
共阴极段选码
显示字符
共阴极段选码
0
3FH
C
39H
1
06H
D
5EH
2
5BH
E
79H
3
4FH
F
71H
4
66H
P
73H
5
6DH
U
3EH
6
7DH
T
31H
7
07H
y
6EH
8
7FH
8.
FFH
9
6FH
“灭”
00H
A
77H
…
…
B
7CH
表2.1八段LED的段选码
八段LED显示器中有8个发光二极管,其中7个发光二极管构成7笔字形“”,1个发光二极管构成小数点。
八段LED显示块的管教如图所示。
从a-b管教输出不同的8位二进制数,可显示不同的数字或字符。
通常把控制发光二极管的8位二进制数称为段选码,共阳极与共阴极的段选码互为反码,如表2.1所示。
3A/D转换的具体设计及程序实现
3.1A/D转换的总体设计[8]
在本次设计中,当51单片机给ADC0809的START引脚一个高电平,标志着转换的开始,ADC0809通过IN0通道进行模拟信号的采集,IN0通道是通过地址锁存器来确定的,3位端口地址与8位数据口的前三位是复用的。
采集模拟信号之后在ADC0809的内部进行模数转换,这时ADC0809的EOC引脚输出电平为低电平,表示转换正在进行,当转换完毕,EOC输出高电平给51单片机的INT0引脚,引起中断,51单片机给ADC0809的OE引脚一高电平,ADC0809随即输出转换完成的数据,到51单片机的内部寄存器中。
一方面51单片机通过8255的PA口将数据输出到8位发光二极管上进行显示,另一方面,51单片机将8位二进制数转换为3位BCD码并输出到3位7段数码管上进行显示。
电位器ADC80951单片机显示部分
图3.1总体设计图
3.251单片机的中断[10]
3.2.1中断的基本概念
所谓中断,是指CPU对系统中或系统外发生的某个事件的一种响应过程,即CPU暂时停止现行程序的执行,而自动转去执行预先安排好的处理该事件的服务子程序;当处理结束后,再返回到被暂停程序的断点处,继续执行原来的程序。
实现这种中断功能的硬件系统和软件系统称为中断系统。
中断系统是计算机的重要组成部分。
实时控制、故障自动处理时往往用到中断系统,计算机与外部设备间传送数据及实现人机联系时常常采用中断方式。
3.2.2程序的入口地址
程序地址空间可以任意安排,但复位和中断源的程序入口地址在51单片机中式固定的,不能更改。
这些入口地址见表。
复位后,CPU从0000H地址开始执行程序。
其他地址为中断服务程序入口地址,响应某个中断时,将自动从其对应的入口地址执行中断服务程序如表3.1.
操作
入口地址
复位
0000H
外部中断0
0003H
定时器/计数器0溢出
000BH
外部中断1
0013H
定时器/计数器1溢出
001BH
串行口中断
0023H
表3.1中断服务程序入口地址
3.2.3中断响应的条件、过程与时间
(1)中断响应的条件
单片机响应中断的条件为中断源有请求(中断允许寄存器IE相应位置1),且CPU开中断(即EA=1)。
这样,在每个机器周期的S5P2期间,对所有中断源按用户设置的优先级和内部规定的优先级进行顺序检查,并可在SP6期间找到所有有效的中断请求。
如有中断请求,且满足下列条件,则在下一个机器周期的SP1期间响应中断,否则将丢弃中断采样的结果:
1)无同级或高级中断正在处理。
2)现行指令到最后一个机器周期且已结束。
3)现行指令为RETI或访问IE、IP指令,执行完该指令且紧随其后的另一条指令也已执行完毕。
(2)中断响应过程[9]
CPU响应中断后,由硬件自动执行如下的功能操作:
1)根据中断请求的源的优先级高低,对相应的优先级状态触发器置1.
2)保护断点,即把程序计数器PC的内容压入堆栈保护。
3)清内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)。
4)把被相应的中断服务程序入口地址送入PC,从而转入相应的中断服务程序执行。
各中断服务程序的入口地址见表。
中断服务程序的最后一条指令必须是中断返回指令RETI。
CPU执行该指令时,先将相应的优先级状态触发器清0,然后从堆栈中弹出断点地址到PC,从而返回到断点处。
由以上过程可知,51单片机响应中断后,只保护断点而不保护现场信息,且不能清除串行口中断标志T1和R1,也无法清除电平触发的外部中断请求信号。
3.3ADC0809的工作过程[5]
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,
ADDC
ADDB
ADDA
选通的通道
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
IN7
表3.2ADC0809通道地址选择表
必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
IN0-IN7为8路模拟量输入端,模拟量输入电压的范围是0-5V,对应的数字量为00H-FFH,转换时间为100us。
ADDA、ADDB、ADDC为通道地址线,用于选通通道,详细情况如表3.2所示。
ALE是通道地址锁存信号,其上出现脉冲上升沿时,把ADDA、ADDB、ADDC地址状态送入地址锁存器中。
VREF(+)、VREF(-)接基准电源,在精度要求不太高的情况下,供电电源可用作基准电源。
START是启动引脚,其上脉冲的下降沿启动一次新的A/D转换。
ECO是转换结束信号,可用于向单片机申请中断或供单片机查询。
CLK是时钟端,典型的时钟频率为640KHZ。
ADC0809的工作的定时关系如图3.1所示。
图3.2ADC0809转换工作时序
从图中可以看出在进行A/D转换时,通道地址应先送到ADDA-ADDC输入端。
然后在ALE输入端加一个正跳变脉冲,将通道地址锁存到ADC0809内部的地址锁存器中,这样对应的模拟电压输入就和内部变换电路接通。
为了启动,必须在START端加一个负跳变信号。
此后,变换工作就开始进行,标志ADC0809正在工作的状态信号EOC由高电平(空闲状态)变为低电平(工作状态)。
一旦变换结束,EOC信号就又由低电平变成高,此时只要在OE端加一个高电平,即可打开数据线的三态缓冲器从D0-D7数据线读得一次变换后的数据。
数字量输出及控制线:
11条
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(+),VREF(-)为参考电压输入。
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
3