AT89S51 中文资料 AT89S51 是美国 ATMEL 公司生产的低功耗, 高性能 CMOS8 位单片机, 片内含 4kbytes 的可系统编程的 Flash 只读程序存储器, 器件采用 ATMEL 公司的高密度 非易失性存储技术生产, 兼容标准 8051 指令系统及引脚 它集 Flash 程序存储器既可在线编程 ( ISP) 也可用传统方法进行编程及通用 8 位微处理器于单片芯片中,ATMEL 公司的功能强大, 低价位 AT89S51 单片机可为您提供许多高性价比的应用场合, 可灵活应用于各种控制领域 主要性能参数 : 与 MCS-51 产品指令系统完全兼容 4k 字节在系统编程 (ISP)Flash 闪速存储器 1000 次擦写周期 4.0-5.5V 的工作电压范围 全静态工作模式 :0Hz-33MHz 三级程序加密锁 128 8 字节内部 RAM 32 个可编程 I/O 口线 2 个 16 位定时 / 计数器 6 个中断源 全双工串行 UART 通道 低功耗空闲和掉电模式 中断可从空闲模唤醒系统 看门狗 (WDT) 及双数据指针 掉电标识和快速编程特性 灵活的在系统编程 (ISP 字节或页写模式 ) 1
AT89S51 中文资料 功能特性概述 : AT89S51 提供以下标准功能 :4k 字节 Flash 闪速存储器,128 字节内部 RAM,32 个 I/O 口线, 看门狗 (WDT), 两个数据指针, 两个 16 位定时 / 计数器, 一个 5 向量两级中断结构, 一个全双工串行通信口, 片内振荡器及时钟电路 同时,AT89S51 可降至 0Hz 的静态逻辑操作, 并支持两种软件可选的节电工作模式 空闲方式停止 CPU 的工作, 但允许 RAM, 定时 / 计数器, 串行通信口及中断系统继续工作 掉电方式保存 RAM 中的内容, 但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位 AT89S51 方框图 2
AT89S51 中文资料 端口引脚 第二功能 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 ( 外部数据存储器写选通 ) P3.7 RD( 外部数据存储器读选通 ) RST: 复位输入 当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位 WDT 溢出将使该引脚输出高电平, 设置 SFR AUXR 的 DISRT0 位 ( 地址 8EH) 可打开或关闭该功能 DISRT0 位缺省为 RESET 输出高电平打开状态 ALE/PROG : 当访问外部程序存储器或数据存储器时,ALE( 地址锁存允许 ) 输出脉冲用于锁存地址的低 8 位字 节 即使不访问外部存储器,ALE 仍以时钟振荡频率的 1/6 输出固定的正脉冲信号, 因此它可对外输出时钟或用于定时 目的 要注意的是 : 每当访问外部数据存储器时将跳过一个 ALE 脉冲 对 F1ash 存储器编程期间, 该引脚还用于输入编程脉冲 (PROG) 如有必要, 可通过对特殊功能寄存器 (SFR) 区中的 8EH 单元的 D0 位置位, 可禁止 ALE 操作 该位置位后, 只有 一条 M0VX 和 M0VC 指令 ALE 才会被激活 此外, 该引脚会被微弱拉高, 单片机执行外部程序时, 应设置 ALE 无效 PSEN : 程序储存允许 (PSEN ) 输出是外部程序存储器的读选通信号, 当 AT89S51 由外部程序存储器取指令 ( 或 数据 ) 时, 每个机器周期两次 PSEN有效, 即输出两个脉冲 当访问外部数据存储器, 没有两次有效的 PSEN信号 EA/VPP: 外部访问允许 欲使 CPU 仅访问外部程序存储器 ( 地址为 0000H-FFFFH),EA 端必须保持低电平 ( 接地 ) 需注意的是 : 如果加密位 LB1 被编程, 复位时内部会锁存 EA 端状态 如 EA 端为高电平 ( 接 Vcc 端 ), CPU 则执行内部程序存储器中的指令 F1ash 存储器编程时, 该引脚加上 +12V 的编程电压 Vpp XTALl: 振荡器反相放大器及内部时钟发生器的输入端 XTAL2: 振荡器反相放大器的输出端 4
AT89S51 中文资料 特殊功能寄存器 : 特殊功能寄存器的于片内的空间分布如表 1 所示 这些地址并没有全部占用, 没有占用的地址亦不可使用, 读这些地址将得到一个随意的数值 而写这些地址单元将不能得到预期的结果 表 1 AT89S51 特殊功能寄存器分布图及复位值 不要软件访问这些未定义的单元, 这些单元是留作以后产品扩展用途的, 复位后这些新的位将为 0 中断寄存器 : 各中断允许控制位于 IE 寄存器,5 个中断源的中断优先级控制位于 IP 寄存器 5
表 2 AUXR 辅助寄存器 双时钟指针寄存器 : 为更方便地访问内部和外部数据存储器, 提供了两个 16 位数据指针寄存器 :DP0 位于 SFR( 特殊功能寄存器 ) 区块中的地址 82H 83H 和 DP1 位于地址 84H 85H, 当 SFR 中的位 DPS=0 选择 DP0, 而 DPS=1 则选择 DP1 用户应在访问相应的数据指针寄存器前初始化 DPS 位 6
AT89S51 中文资料 电源空闲标志 : 电源空闲标志 (POF) 在特殊功能寄存器 SFR 中 PCON 的第 4 位 (PCON.4), 电源打开时 POF 置 1", 它可由软件设置睡眠状态并不为复位所影响 存储器结构 : MCS-51 单片机内核采用程序存储器和数据存储器空间分开的结构, 均具有 64KB 外部程序和数据的寻址空间 程序存储器 : 如果 EA 引脚接地 (GND), 全部程序均执行外部存储器 在 AT89S51, 假如 EA 接至 Vcc( 电源 +), 程序首先执行地址从 0000H-0FFFH(4KB) 内部程序存储器, 再执行地址为 1000H-FFFFH(60KB) 的外部程序存储器 数据存储器 : AT89S51 的具有 128 字节的内部 RAM, 这 128 字节可利用直接或间接寻址方式访问, 堆栈操作可利用间接寻址方式 进行,128 字节均可设置为堆栈区空间 看门狗定时器 (WDT): WDT 是为了解决 CPU 程序运行时可能进入混乱或死循环而设置, 它由一个 14bit 计数器和看门狗复位 SFR(WDTRST) 构成 外部复位时,WDT 默认为关闭状态, 要打开 WDT, 用户必须按顺序将 01EH 和 0E1H 写到 WDTRST 寄存器 (SFR 地址为 0A6H), 当启动了 WDT, 它会随晶体振荡器在每个机器周期计数, 除硬件复位或 WDT 溢出复位外没有其它方法关闭 WDT, 当 WDT 溢出, 将使 RST 引脚输出高电平的复位脉冲 使用看门狗 (WDT): 打开 WDT 需按次序写 01EH 和 0E1H 到 WDTRST 寄存器 (SFR 的地址为 0A6H), 当 WDT 打开后, 需在一定的时候 01EH 和 0E1H 到 WDTRST 寄存器以避免 WDT 计数溢出 14 位 WDT 计数器计数达到 16383(3FFFH), WDT 将溢出并使器件复位 WDT 打开时, 它会随晶体振荡器在每个机器周期计数, 这意味着用户必须在小于每个 16383 机器周期内复位 WDT, 也即写 01EH 和 0E1H 到 WDTRST 寄存器,WDTRST 为只写寄存器 WDT 计数器既不可读也不可写, 当 WDT 溢出时, 通常将使 RST 引脚输出高电平的复位脉冲 复位脉冲持续时间为 98 Tosc, 而 Tosc=1/Fosc( 晶体振荡频率 ) 为使 WDT 工作最优化, 必须在合适的程序代码时间段周期地复位 WDT 防止 WDT 溢出 掉电和空闲状态时的 WDT: 掉电时期, 晶体振荡停止,WDT 也停止 掉电模式下, 用户不能再复位 WDT 有两种方法可退出掉电模式: 硬件复位或通过激活外部中断 当硬件复位退出掉电模式时, 处理 WDT 可象通常的上电复位一样 当由中断退出掉电模式则有所不同, 中断低电平状态持续到晶体振荡稳定, 当中断电平变为高即响应中断服务 为防止中断误复位, 当器件复位, 中断引脚持续为低时,WDT 并未开始计数, 直到中断引脚被拉高为止 这为在掉电模式下的中断执行中断服务程序而设置 为保证 WDT 在退出掉电模式时极端情况下不溢出, 最好在进入掉电模式前复位 WDT 在进入空闲模式前,WDT 打开时,WDT 是否继续计数由 SFR 中的 AUXR 的 WDIDLE 位决定, 在 IDLE 期间 ( 位 WDIDLE=0) 默认状态是继续计数 为防止 AT89S51 从空闲模式中复位, 用户应周期性地设置定时器, 重新进入空闲模式 当位 WDIDLE 被置位, 在空闲模式中 WDT 将停止计数, 直到从空闲 (IDLE) 模式中退出重新开始计数 7
AT89S51 中文资料 UART- 通用异步通信口 : AT89S51 的 UART 操作与 AT89C51 一样, 有关更详细的资料请参考 ATMEL 公司的网站 (www.atmel.com), 从主页选择 Products - 8051-Architecture Flash Microcontroller - Product Overview" 定时器 0 和定时器 1: AT89S51 的定时器 0 和定时器 1 操作与 AT89C51 一样, 有关更详细的资料请参考 ATMEL 公司的网站 (www.atmel.com), 从主页选择 Products - 8051-Architecture Flash Microcontroller - Product Overview 中断 : AT89S51 共有 5 个中断向量 :2 个外中断 (INT0 和 INT1), 2 个定时中断 (Timer0 和 Timer1) 和一个串行中断 这些中断如图 1: 这些中断源各自的禁止和使能位参见特殊功能寄存器的 IE IE 也包含总中断控制位 EA,EA 清 0, 将关闭所有中断 值得注意的是表 4 中的 IE.6 和 IE.5 没有定义, 用户不要访问这些位, 它是保留为以后的 AT89 产品作扩展用途 期 定时器 0 和定时器 1 的中断标志 TF0 和 TF1, 它是定时器溢出时的 S5P2 时序周期被置位, 该标志保留至下个时序周 表 4: 中断控制寄存器 8
图 1 中断源方框图 AT89S51 中文资料 晶体振荡器特性 : AT89S51 中有一个用于构成内部振荡器的高增益反相放大器, 引脚 XTAL1 和 XTAL2 分别是该放大器的输入端和输出端 这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器, 振荡电路参见图 5 外接石英晶体 ( 或陶瓷谐振器 ) 及电容 Cl C2 接在放大器的反馈回路中构成并联振荡电路 对外接电容 Cl C2 虽然没有十分严格的要求, 但电容容量的大小会轻微影响振荡频率的高低 振荡器工作的稳定性 起振的难易程序及温度稳定性 如果使用石英晶体, 我们推荐电容使用 30pF±10pF, 而如使用陶瓷谐振器建议选择 40pF±10F 用户也可以采用外部时钟 采用外部时钟的电路如图 5 右图所示 这种情况下, 外部时钟脉冲接到 XTAL1 端, 即内部时钟发生器的输入端,XTAL2 则悬空 由于外部时钟信号是通过一个 2 分频触发器后作为内部时钟信号的, 所以对外部时钟信号的占空比没有特殊要求, 但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求 图 2 晶体接线图和外接时钟线路图 石英晶体时 :C1,C2=30pF±10pF 陶瓷滤波器 :C1,C2=40pF±10pF 内部振荡电路图 2 外部时钟驱动电路 9
AT89S51 中文资料 空闲节电模式 : 在空闲工作模式状态,CPU 保持睡眠状态而所有片内的外设仍保持激活状态, 这种方式由软件产生 此时, 片内 RAM 和所有特殊功能寄存器的内容保持不变 空闲模式可由任何允许的中断请求或硬件复位终止 需要注意的是, 当由硬件复位来终止空闲工作模式时,CPU 通常是从激活空闲模式那条指令的下一条指令开始继续执行程序的, 要完成内部复位操作, 硬件复位脉冲要保持两个机器周期 (24 个时钟周期 ) 有效, 在这种情况下, 内部禁止 CPU 访问片内 RAM, 而允许访问其它端口 为了避免在复位结束时可能对端口产生意外写入, 激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令 掉电模式 : 在掉电模式下, 振荡器停止工作, 进入掉电模式的指令是最后一条被执行的指令, 片内 RAM 和特殊功能寄存器的内容在终止掉电模式前被冻结 退出掉电模式的方法是硬件复位或由处于使能状态的外中断 INT0 和 INT1 激活 复位后将重新定义全部特殊功能寄存器但不改变 RAM 中的内容, 在 Vcc 恢复到正常工作电平前, 复位应无效, 且必须保持一定时间以使振荡器重启动并稳定工作 表 5 空闲和掉电期间外部引脚状态 模式程序存储区 ALE PSEN PORT0 PORT1 PORT2 PORT3 空闲模式内部 1 1 数据数据数据数据 空闲模式外部 1 1 浮空数据地址数据 掉电模式内部 0 0 数据数据数据数据 掉电模式外部 0 0 浮空数据数据数据 程序存储器的加密 : AT89S51 可使用对芯片上的 3 个加密位 LB1 LB2 LB3 进行编程 (P) 或不编程 (U) 来得到如下表所示的功能 加密位保护功能表 程序加密位 LB1 LB2 LB3 保护类型 1 U U U 没有程序保护功能 2 P U U 禁止从外部程序存储器中执行 MOVC 指令读取内部程序存储器的内容, 此外复位时 EA 被锁止, 禁止再编程 3 P P U 除上表功能, 还禁止程序校验 4 P P P 除以上功能外, 同时禁止外部执行 注 : 表中的 U 表示未编程,P 表示编程 10
AT89S51 中文资料 当加密位 LB1 被编程时, 在复位期间,EA 端的逻辑电平被采样并锁存, 如果单片机上电后一直没有复位, 则锁存起的初始值是一个随机数, 且这个随机数会一直保存到真正复位为止 为使单片机能正常工作, 被锁存的 EA 电平值必须与该引脚当前的逻辑电平一致 此外加密位只能通过整片擦除的方法清除 Flash 闪速存储器的并行编程 : AT89s51 单片机内部有 4k 字节的可快速编程的 Flash 存储阵列 编程方法可通过传统的 EPROM 编程器使用高电压 (+12V) 和协调的控制信号进行编程 AT89S51 的代码是逐一字节进行编程的 编程方法 : 编程前, 须按编程模式表和图 13 图 14 所示设置好地址 数据及控制信号,AT89S51 编程方法如下 : 1. 在地址线上加上要编程单元的地址信号 2. 在数据线上加上要写入的数据字节 3. 激活相应的控制信号 4. 将 EA/Vpp 端加上 +12V 编程电压 5. 每对 Flash 存储阵列写入一个字节或每写入一个程序加密位, 加上一个 ALE/PROG编程脉冲 每个字节写入周期 是自身定时的, 大多数约为 50us 改变编程单元的地址和写入的数据, 重复 1-5 步骤, 直到全部文件编程结束 数据查询 : AT89S5l 单片机用数据查询方式来检测一个写周期是否结束, 在一个写周期中, 如需读取最后写入的那个字节, 则读出的数据的最高位 (P0.7) 是原来写入字节最高位的反码 写周期完成后, 有效的数据就会出现在所有输出端上, 此时, 可进入下一个字节的写周期, 写周期开始后, 可在任意时刻进行数据查询 Ready/Busy : 字节编程的进度可通过 RDY/BSY 输出信号监测, 编程期间,ALE 变为高电平 H 后 P3.0 端 电平被拉低, 表示正在编程状态 ( 忙状态 ) 编程完成后,P3.0 变为高电平表示准备就绪状态 程序校验 : 如果加密位 LB1 LB2 没有进行编程, 则代码数据可通过地址和数据线读回原编写的数据, 各加密位也 可通过直接回读进行校验 读片内签名字节 :AT89S51 单片机内有 3 个签名字节, 地址为 000H 100H 和 200H 用于声明该器件的厂商和型号等信息, 读签名字节的过程和正常校验相仿, 只需将 P3.6 和 P3.7 保持低电平, 返回值意义如下 : (000H)=1EH 声明产品由 ATMEL 公司制造 (100H)=51H 声明为 AT89S51 单片机 (200H)=06H 芯片擦除 : 在并行编程模式, 利用控制信号的正确组合并保持 ALE/PROG 引脚 200ns-500ns 的低电平脉冲宽度即可完成擦除操作 在串行编程模式, 芯片擦除操作是利用擦除指令进行 在这种方式, 擦除周期是自身定时的, 大约为 500ms 擦除期间, 用串行方式读任何地址数据, 返回值均为 00H 11
AT89S51 中文资料 Flash 闪速存储器的串行编程 : 将 RST 接至 Vcc, 程序代码存储阵列可通过串行 ISP 接口进行编程, 串行接口包含 SCK 线 MOSI( 输入 ) 和 MISO ( 输出 ) 线 将 RST 拉高后, 在其它操作前必须发出编程使能指令, 编程前需将芯片擦除 芯片擦除则将存储代码阵列全写为 FFH 外部系统时钟信号需接至 XTAL1 端或在 XTALl 和 XTAL2 接上晶体振荡器 最高的串行时钟 (SCK) 不超过 l/16 晶体时钟, 当晶体为 33MHz 时, 最大 SCK 频率为 2MHz Flash 闪速存储器的串行编程方法 : 对 AT89S5l 的串行编程次序推荐使用以下方法 : 1. 上电次序 : 将电源加在 Vcc 和 GND 引脚,RST 置为 H, 如果 XTAL 和 XTAL2 接上晶体或者在 XTAL1 接上 3-33MHz 的时钟频率, 等候 10ms 2. 将编程使能指令发送到 MOSI(Pinl.5), 编程时钟接至 SCK(Pinl.7), 此频率需小于晶体时钟频率的 l/16 3. 代码阵列的编程可选字节模式或页模式 写周期是自身定时的, 一般不大于 0.5ms(5V 电压时 ) 4. 任意代码单元均可 MISO(Pinl.6) 和读指令选择相应的地址回读数据进行校验 5. 编程结束应将 RST 置为 L 以结束操作 6. 断电次序 : 如果需要的话按这个方法断电, 假如没有使用晶体, 将 XATL 置为低,RST 置低, 关断 Vcc 数据校验 : 数据校验也可在串行模式下进行, 在这个模式, 在一个写周期中, 通过输出引脚 MISO 串行回读一个字节数据的最高 位将为最后写入字节的反码 串行编程指令设置 : 串行编程指令设置为一个 4 字节协议, 参见表 8 并行编程接口采用控制信号的正确组合可对 Flash 闪速存储阵列中的每一代码字节进行写入和存储器的整片擦除, 写操作周期是自身定时的, 初始化后它将自动定时到操作完成 更多的有关 ATMEL 系列单片机的编程技术请联系相应的编程器供应商以获取最新的软件版本 12
表 7 Flash 编程模式 AT89S51 中文资料 注 : 1. 芯片擦除每一 PROG 脉冲为 200ns-500ns 2. 写代码数据每一 PROG 脉冲为 200ns-500ns 3. 写加密位每一 PROG 脉冲为 200ns-500ns 4. 编程期间 P3.0 引脚输出 RDY/BSY 信号 5. 不需理会 图 4 Flash 存储器编程 ( 并口模式 ) 图 5 Flash 存储器校验 ( 并口模式 ) 13
Flash 编程和校验特性 ( 并行模式 ) AT89S51 中文资料 图 6 Flash 编程和校验波形 ( 并行模式 ) 14
Flash 存储器串行下载 AT89S51 中文资料 Flash 编程和校验波形 ( 串行模式 ): 15
表 8 串行编程指令 : AT89S51 中文资料 注 : 1. 当 LB3 和 LB4 加密位已编程时则不可读签名字节 2. B1=0 B2=0, 方式 1, 无加密保护 B1=0 B2=l, 方式 2, 加密位 LBl B1=1 B2=0, 方式 3, 加密位 LB2 各加密位在方式 4 执行前需按顺序逐一操作 B1=1 B2=1, 方式 4, 加密位 LB3 复位信号为 H 后, 建立数据前使 SCK 为低电平至少为 64 个系统时钟周期, 复位脉冲是必须的 SCK 时钟频率不得大于 XTAL1 时钟的 1/16 在页读 / 写模式, 数据总是从地址 00 开始直到 255 命令字节后紧跟着高 4 位地址, 全部数据单元 256 字节会逐一进行读 / 写, 此时下个指令将准备译码 16
串行编程特性 : 图 9 串行编程时序 AT89S51 中文资料 极限参数 : 极限参数工作温度 -55 to +125 储藏温度 -65 to +150 任一脚对地电压 -1.0V to +7.0V 最高工作电压 6.6V 直流输出电流 15.0 ma 注 : 这些参数是器件的极限参数, 使用条件必须在上述列表范围以内, 如果超过上述条件, 不能保证器件安全甚至会 造成器件永久性损坏! 17
DC 参数 : AT89S51 中文资料 注 : 1. 在稳定状态 ( 无输出 ) 条件下,I OL 有以下限制 : 每一引脚最大 I OL :10mA 每一 8 位端口 :P0 口 :26mA,P1 P2 和 P3:15mA 全部输出引脚最大 I OL :71mA 2. 掉电模式的最小 Vcc 为 2V 18
AC 特性 : 在以下工作条件测得 :P0 ALE/PROG 和 PSEN 负载容抗 =100pF AT89S51 中文资料 外部程序和数据存储器特性 19
外部程序存储器读周期 : AT89S51 中文资料 外部数据存储器读周期 : 外部数据存储器写周期 : 20
外部时钟驱动波形 : AT89S51 中文资料 外部时钟驱动时序 : 串行口时序 : 在 Vcc=4.0V-5.5V, 负载电容 =80pF 条件下 : 上位寄存器时序波形 : 21
AC 测试输入 / 输出波形 : AT89S51 中文资料 注 :AC 输入测试在 Vcc-0.5V 为逻辑 1 及 0.45V 为逻辑 0, 时序测试在 V IH 为最小值和 V IL 为最大值时测量 浮空波形 : 注 : 在浮空状态下, 端口引脚在负载出现 100mV 电压变化即为浮空, 也即当一个端口电压从 V OH 到 V OL 变化时出现 100mV 电压时为浮空状态 产品信息 : 封装形式 : 22
封装形式 : AT89S51 中文资料 23
AT89S51 中文资料 24
AT89S51 中文资料 25
AT89S51 中文资料 26