马培:单片机照明灯智能控制器
程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.1.2 引脚功能说明
图1 51系列单片机40引脚图
VCC : 电源 GND: 地
P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1口:P1口是一个具有内部上拉电阻的8位双向I/O 口,P1 输出缓冲器能驱动4个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。
表1 P1口的第二功能
引脚号 P1.0 P1.1 P1.5 P1.6 P1.7 第二功能 T2(定时器/计数器T2的外部计数输入),时钟输出 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) MOSI(在系统编程用) MISO(在系统编程用) SCK(在系统编程用) P2口:P2 口是一个具有内部上拉电阻的8位双向I/O 口,P2输出缓冲器能驱动4个TTL逻辑 电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用
第 2 页 共 27 页
时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2输出缓冲器能驱动4个TTL逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表(2)所示。在flash编程和校验时,P3口也接收一些控制信号。
表2 P3口第二功能
引脚号 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD(串行输入) TXD(串行输出) INT0(外部中断0) INT0(外部中断0) T0(定时器0外部输入) T1(定时器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器写选通) RST: 复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端
特殊功能寄存器:特殊功能寄存器(SFR)的地址空间映象所示。并不是所有的地址都被定义了。 片上没有定义的地址是不能用的。读这些地址,一般将得到一个随机数据;写入的数据将会无效。用户不应该给这些未定义的地址写入数据“1”。由于这些寄存器在将来可能被赋予新的功能,复位后,这些位都为“0”。
第 3 页 共 27 页
马培:单片机照明灯智能控制器
定时器2 寄存器:寄存器T2CON和T2MOD包含定时器2的控制位和状态位(如表2和表3所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。
中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。 T2CON:定时器/计数器2控制寄存器 T2CON 地址为0C8H 复位值:0000 0000B 位可寻址:
表3 中断寄存器
TF2 EXF2 RLCLK TCLK EXEN2 7
6
5
4
3
TR2 2
C/T2 CP/RL21 0
2.2 AT89C2051[18]
2.2.1 相关芯片及其引脚分析
先介绍本系统中的核心器件AT89C2051。它是一带有2K字节闪速可编程可擦除只读存储器的低压、高性能8位CMOS微型计算机。它采用ATMEL的高密非易失存储技术制造并和工业标准MCS-51指令集和引脚结构兼容。ATMEL AT89C2051是一强劲的微型计算机,它对许多嵌入式控制应用提供一高度灵活和成本低的解决办法。
AT89C2051提供以下标准功能:2K字节闪速存储器,128字节RAM,15根I/O引线,两个16位定时器/计数器,六个中断源,一个全双工串行口,一精密模拟比较器以及片内振荡器和时钟电路。此外,AT89C2051是用可降到0频率的静态逻辑操作设计的并支持两种可选的软件节电工作方式。空闲方式停止CPU工作但允许RAM,定时器/计数器,串行口和中断系统继续工作。掉电方式保存RAM内容但振荡器停止工作并禁止所有其它部件的工作直到下一个硬件复位。
AT89C2051共有20条引脚,详见下图2:
图2 AT89C2051引脚图
各引脚功能如下:
RST(Pin1):复位输入。RST一旦变成高电平所有的I/O引脚就复位到“1”。当振荡器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。
OSC2(Pin4):作为振荡器反相放大器的输出。 OSC1(Pin5):作为振荡器反相放大器的输入和内部时钟发生器的输入。
第 4 页 共 27 页
GND(Pin10):地。 VCC(Pin20):电源电压。 P1口(Pin12~Pin19):P1口是一8位双向I/O口。口引脚P1.2~P1.7提供内部上拉电阻。P1.0 和P1.1还分别作为片内精密模拟比较器的同相输入(AIN0)和反相输入(AIN1)。
P3口:是带有内部上拉电阻的双向I/O口。它还用于实现AT89C2051的其它特殊功能。 P3.0为串行输入端口 P3.1为串行输出端口 P3.2为外中断0 P3.3为外中断1
P3.4为定时器0外部输入 P3.5为定时器1外部输入
2.3 LCD1602[19]
2.3.1相关芯片及其引脚分析 ◆主要技术参数: 显示容量: 芯片工作电压: 工作电流: 模块最佳工作电压: 字符尺寸: 16×2个字符 4.5~5.5V 20mA(5.0V) 5.0V 2.×4.35(WXH)mm 引脚说明 电压地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读/写选择端(H/L) 使能信号 Data I/O Data I/O 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 ◆接口信号说明: 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 ◆外形尺寸:
◆控制器接口说明(HD44780及兼容芯片):
1 基本操作时序:
读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字 写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:无
读数据:输入:RS=L,RW=H,E=H 输出:D0~D7=数据
第 5 页 共 27 页
马培:单片机照明灯智能控制器
写数据:输入:RS=L,RW=H,D0~D7=数据,E=高脉冲 输出:无 2 状态说明字
STA7 STA6 STA5 STA4 D7
STA0-6 STA7 当前数据地址指针的数值 读写操作使能 1:禁止 0:允许 D6
D5
D4
STA3 D3
STA2 STA1 STA0 D2
D1
D0
注:对控制器每次进行读写操作之前,都必
须进行写控制,确保STA7为0 RAM地址映射图 LCD 控制器内部带有808位(80 16字×2行 字节)的RAM缓冲区,对应 关系如右图所示: 3 指令说明 初始化设置: 显示模式设置 指令码 0 0 1 1 1 0 0 0 显示开/关及光标设置 指令码 0 0 0 0 1 D C B 功能 D=1 开显示 D=0 关显示 C=1 显示光标 C=0 不显示光标 B=1 光标闪烁 B=0 光标不显示 N=1 当读或写一个字符后地址指针加 一,且光标加一 N=0当读或写一个字符后地址指针减 一,且光标减一 S=1 当写一个字符,整屏显示左移(N=1) 或右移(N=0),以得到光标不移动而屏幕移动的效果。 S=0 当写一个字符,整屏显示不移动 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 功能 设置16×2显示,5×7点阵,8位数据接口 0 0 0 0 0 1 N S 数据控制:
控制器内部 设有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM 数据指针设置 指令码 80H+地址码(0-27H,40H-67H)
其他设置 指令码 01H 02H 4 初始化过程 第 6 页 共 27 页
功能 设置数据地址指针 功能 显示清屏:1数据指针清零 2所有显示清零 显示回车:1数据指针清零