方案三的可见光检测电路精度要高于前两种方案,因为它的调光需要一个精确的反馈值来设定调光电路的工作。
尽管方案一是最简单,最基本的方案,却也体现了智能照明的基本思路。
方案二实现两种等级的控制,方案三实现一种连续的控制是比较难的。
这次设计我就以第一种方案来设计该照明系统。
第二章硬件设计
第一节主机电路核心器件介绍
一、AT89C51单片机性能介绍
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4KB闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。
如图2-1为AT89C51外形图。
图2-1AT89C51外形图
AT89C51主要性能参数:
与MCS-51产品指令系统完全兼容
4K字节可重擦写Flash闪速存储器
1000次擦写周期
全静态操作:
0Hz~24MHz
128×8字节内部RAM
32个可编程I/O口线
2个16位定时/计数器
6个中断源
可编程串行UART通道
低功率空闲和掉电模式
(一)AT89C51结构框图于引脚说明
图2-2AT89C51结构框图
AT89C51结构框图如图2-2所示。
引脚功能说明
Vcc:
电源电压
GND:
地
P0口:
P0口是一组8位漏极开路型双向I/O,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉倒高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,P1接收低8位地址。
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVA,@A+DPTR指令)时。
P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(例如执行MOVX@Ri,A指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区总R2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其他控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口,P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
如下表2-1所示:
表2-1P3口第二功能
P3端口
第二功能
第二功能说明
P3.0
RXD
串行口输入端
P3.1
TXD
串行口输出端
P3.2
————INT0
外部中断0输入端
P3.3
————INT1
外部中断1输入端
P3.4
T0
定时器/计数器0外部信号输入端
P3.5
T1
定时器/计数器1外部信号输入端
P3.6
———WR
外部RAM写选通输出信号
P3.7
———RD
外部RAM读选通输出信号
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将单片机复位。
ALE/
:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器。
ALE仍一时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
但要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(
)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活,此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
:
程序存储允许(
)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲,在此期间,当访问外部数据存储器,这两次有效的
信号不出现。
/VPP:
外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H~FFFFH),
端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如
端为高电平(接VCC端),CPU则执行内部会锁存
端状态。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器3放大器的输出端。
时钟振荡器
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路如图2-3:
图2-3振荡电路
外接石英晶体(或陶瓷振荡器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低,振荡器工作的稳定性,起振的难易程序及温度稳定性,如果使用石英晶体,则推荐电容使用30pF,而如使用陶瓷振荡器建议选择40pF。
(二)AT89C51的工作特点
空闲节电模式:
AT89C51有两种可用软件编程的省电模式,它们是空闲模式和掉点工作模式。
这两种方式是控制专用寄存器PCON(即电源控制寄存器)中的PD(PCON.1)和IDL(PCON.0)位来实现的。
PD是掉电模式,当PD=1时,激活掉电工作模式,单片机模式,即PD和IOL同时为1,则先激活掉电模式。
在空闲工作模式状态,CPU保持睡眠状态而所有片内的外设保持激活状态,这种方式由软件产生。
此时,片内RAM和所有特殊功能寄存器的内容保持不变。
空闲模式可由任何允许的中断请求或硬件复位终止。
终止空闲工作模式的方法有两种,其一是任何一条被允许中断的事件被激活,IDL(PCON.0)被硬件清除,即刻终止空闲工作模式。
程序会首先响应中断,进入中断服务程序,执行完中断服务程序并紧随RETI(中断返回)指令后,下一条要执行的指令就是使单片机进入空闲模式那条指令后面的一条指令。
其二是通过硬件复位也可将空闲工作模式终止。
需要注意的是,当有硬件复位来终止空闲工作模式时,CPU通常是从激活空闲模式那条指令的下一条指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要保持两个机器周期(24个时钟周期)有效,在这种情况下,内部禁止CPU访问片内RAM,而允许访问其它端口。
为了避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。
掉电模式:
在掉点模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。
退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但不改变RAM中的内容,在VCC恢复到正常电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。
如表2-2所示。
表2-2空闲和掉电模式外部引脚
模式
程序存储器
ALE
P0
P1
P2
P3
空闲模式
内部
1
1
数据
数据
数据
数据
空闲模式
外部
1
1
浮空
数据
地址
数据
掉电模式
内部
0
0
数据
数据
数据
数据
掉电模式
外部
0
0
浮空
数据
数据
数据
Flash闪速存储器的编程
AT89C51单片机内部有4K字节的FPEROM,这个Flash存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其进行编程。
编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。
低电压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM编程器兼容。
AT89C51单片机中,有些属于低电压编程方式,而有些则是高电压编程方式。
用户可从芯片上的型号和读取芯片内的签名字节获得该信息,如表2-3所示。
表2-3型号信息
Vpp
12V
5V
芯片顶面标识
AT89C51
AT89C51
xxxx
xxxx—5
AT89C51的程序存储器列阵采用字节写入方式编程的,每次写入一个字节,要对整个芯片内的FPEROM程序存储器写入一个非空字节,必须使用擦除的方式将整个存储器的内容清楚。
读片内签名字节及编程接口
AT89C51单片机内有3个签名字节,地址为030H、031H和032H。
用于声明该器件的厂商、型号和编程电压。
读签名字节的过程和单元030H、031H和032H的正常校验相仿,只需将P3.6、P3.7保持低电平,返回值意义如下:
(030H)=1EH声明产品由ATMEL公式制造。
(031H)=51H声明为AT89C51单片机。
(032H)=FFH声明为12V编程电压。
(032H)=05H声明为5V编程电压。
编程接口:
采用控制信号的正确组合可对Flash闪速存储阵裂中的每一代码字节进行写入和存储器的整片擦除,写操作周期是自身定时的,初始化后它将自动定时到操作完成。
极限参数如表2-4所示。
表2-4AT89C51的极限参数:
极限参数名称
参数值
工作温度
-55℃~+125℃
储藏温度
-65℃~+150℃
任一引脚对地电压
-1.0V~+7.0V
最高工作电压
6.6V
直流输出电压
15.0mA
二、AT89C51单片机最小系统
AT89C51是片内有ROM/FPEROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。
用AT89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图2-4AT89C51单片机最小系统所示。
由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
其应用特点:
1、有可供用户使用的大量I/O口线。
2、内部存储器容量有限。
3、应用系统开发具有特殊性。
图2-4AT89C51单片机最小系统
(一)时钟电路
AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。
单片机的时钟产生方法有两种。
内部时钟方式和外部时钟方式。
本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHz到12MHz之间选择。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,C1、C2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。
所以本设计中,振荡晶体选择12MHz,电容选择65pF。
在设计印刷电路板时,晶体和电容应尽可能
靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。
为了提高温度稳定性,应采用NPO电容。
NPO是一种最常用的具有温度补偿特性的单片陶瓷电容器。
它的填充介质是由铷、钐和一些其它稀有氧化物组成的。
(二)复位电路
AT89C51的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
时钟频率用12MHz时C取22uF,R取1KΩ。
除了上电