HC89F0332 HOLYCHIP | Alldatasheet
Document overview
- Manufacturer or author: Provided By alldatasheet.com(free datasheet download site)
- PDF pages: 161
Technical content
数据手册 20/16/8 引脚 8 位 ADC 型 FLASH 单片机 外设功能引脚全映射
目录
1 产品简介 HC89F0332/0322/0312 是一颗采用高速低功耗 CMOS 工艺设计开发的增强型 8 位单片机,内部有 8K Bytes FLASH 程序存储器,256Bytes IRAM+768Bytes XRAM ,最多18 个双向I/O 口,1 个外设功能 引脚全映射模块 PTM,5 个 16 位定时器/计数器,3 组 12 位带死区控制互补 PWM,1 路 8 位 PWM,1 个UART,1 个SPI,16 个外部中断,16+2 路12 位ADC,1 个低压检测模块,四种系统工作模式和 15 个中断源。 1.1 功能特性 ◆ CPU ⚫ 增强型1T 8051内核 ◆ ROM ⚫ 8K Bytes FLASH ⚫ IAP和ICP操作 ⚫ 灵活的代码保护模式 ◆ RAM ⚫ 256 Bytes IRAM ⚫ 768 Bytes XRAM ◆ 时钟 ⚫ 内部高精度32MHz RC,可软件微调 ⚫ 内部44KHz RC ⚫ 外部高频晶振4MHz-20MHz ⚫ 外部低频晶振32.768KHz ⚫ 多种时钟输出 ◆ 多种复位方式 ⚫ 上电复位(POR) ⚫ 多级低电压复位(BOR) ⚫ 看门狗复位 ⚫ 软件复位 ⚫ 堆栈溢出复位 ⚫ 外部低电平复位 ⚫ 外部管脚电压(1.2V)检测复位 ◆ I/O ⚫ 最多18个双向I/O口 ⚫ 多种模式可配:输入、带上拉输入、带 下拉输入、施密特输入、模拟输入、强 推挽输出、开漏输出、开漏带上拉输出 ⚫ 外设功能引脚全映射模块PTM ⚫ 所有端口可配置1/2bias软件LCD驱动 ◆ 中断 ⚫ 15个中断源 ⚫ 4级中断优先级 ⚫ 16个外部中断 ◆ 定时器/计数器 ⚫ T0/T1兼容标准8051,16位自动重载 ⚫ T3可以工作在掉电模式 ⚫ T4可以使用外部信号触发定时 ⚫ T5带捕获功能 ◆ PWM ⚫ 最多3组12位带死区控制互补PWM - 可配置为6 路独立输出 - 可当定时器使用 - 具有故障检测功能 - 可配置边沿对齐或中心对齐 ⚫ 1路8位单输出PWM ◆ 通讯模块 ⚫ 1 个UART ⚫ 1 个SPI ◆ ADC 检测电路 ⚫ 支持16+2 ch 12位ADC检测 ⚫ ADC参考电压可选内部2/3/4V、外部 VREF、VDD ⚫ 软件触发、外部触发、定时器触发 ◆ 低电压检测模块 ⚫ 比较器功能 ⚫ VDD 多级电压检测,可中断 ◆ 循环冗余校验(CRC) ◆ 省电模式 ⚫ 空闲模式 ⚫ 掉电模式 ◆ 工作条件 ⚫ 宽电压2.9V-5.5V ⚫ 温度范围-40° C-105° C ◆ 封装类型 ⚫ TSSOP20/SOP16/SOP8 ◆ 支持SWD 仿真和下载
✓ 选型表 产品型号 ROM RAM MAX Freq I/O ADC Timer PWM INT WDT HC89F0332-TSSO20-T-M 8KB 1KB 16MHz 18 16+2 5 12Bit*3 组 8Bit*1 16 1 HC89F0322-SOP16-T-M 8KB 1KB 16MHz 14 12+2 5 12Bit*3 组 8Bit*1 12 1 HC89F0312-SOP8-T-M 8KB 1KB 16MHz 6 6 5 12Bit*3 组 8Bit*1 6 1 产品型号 Voltag TEMP Package Simulator Programmer DemoCode DemoBoard HC89F0332-TSSO20-T-M 2.9~5.5V -40~+105°C TSSOP20 HC-LINK HC-PM51 √ √ HC89F0322-SOP16-T-M 2.9~5.5V -40~+105°C SOP16 HC-LINK HC-PM51 √ √ HC89F0312-SOP8-T-M 2.9~5.5V -40~+105°C SOP8 HC-LINK HC-PM51 √ √
1.2 应用注意 1. 为保证系统的稳定性,必须在VDD和GND之间接一电容(容值须大于或等于0.1μF)。 2. P2.7 引脚出厂时默认为复位管脚,端口模式为施密特输入带上拉,可以通过配置代码选项将此口配 置为普通IO 引脚。 3. 如果需要进行FLASH IAP 操作,请仔细阅读 3.1.4.1 的注意事项。 4. 在进行IAP 操作时,不响应任何中断。 5. ADCEN 置 1 或切换转换通道后, 建议延时 20us 后再启动 ADC 转换, 如果外部输入阻抗很大时, 需要延长这个时间。 6. 当 ADC 的参考电压为 VDD 时,ADC 转换时钟可以为 8MHz, 一次转换只需要 15 个 ADC_CLK, 这样可以得到最快的 ADC 转换速度。 7. 通过配置 LCD 的寄存器可以使多个 PORT 同时输出 PWM。 8. 使用PWM3 时,要先配置时钟分频、周期、占空比等寄存器,最后再使能 PWM3 模块。 9. 在LVD中断中,若要关闭比较器或LVD中断,应先禁止 LVD/比较器,再失能LVD中断允许位。
1.3 系统框图 8KB FLASH 256B IRAM 768B XRAM 8051内核 端口模式配置 Timer0/1 PTM PWM 端口2驱动器 端口1驱动器 端口0驱动器 Port2 Port1 Port0 SFR总线 ADC (12位) AMUX 分频器 电源电路 GND VDD RST reset XIN XOUT clock LVD 软件复位 WDT复位 BOR 外部晶振 内部高频 RC 内部低频 RC 双线 仿真 switch 内部低频 RC SPI INT Timer3/4 Timer5 UART POR SPOV Figure 1-1 系统框图
1.4 引脚配置
1.4.1 TSSOP20 引脚配置
CMP2+/XIN/INT0_1/P1.0 CMP3+/XOUT/INT1_1/AN14/P1.1 VDD P0.0/INT0/AN0/FLT0 1110 HC89F0332 1 20 P0.1/INT1/AN1/FLT1 P0.3/INT3/AN3/SCK P0.7/INT7/AN7 P2.0/INT8/AN8 P0.6/INT6/AN6 P0.5/INT5/AN5 P0.4/INT4/AN4/Vref AN10/INT10/P2.2 SDA/AN9/INT9/P2.1 AN12/INT12/P2.4 CMP1+/AN13/INT13/P2.5 CMP-/PLVD/INT14/P2.6 AN11/INT11/P2.3 RST/AN15/INT15/P2.7 P0.2/INT2/AN2/FLT2 Figure 1-2 TSSOP20 引脚配置图
1.4.2 SOP16 引脚配置
CMP2+/XIN/INT0_1/P1.0 CMP3+/XOUT/INT1_1/AN14/P1.1 VDD P0.0/INT0/AN0/FLT0 HC89F03222 1 16 P0.1/INT1/AN1/FLT1 P0.3/INT3/AN3 P0.6/INT6/AN6 P0.5/INT5/AN5 P0.4/INT4/AN4/Vref SDA/AN12/INT12/P2.4 CMP1+/SCK/AN13/INT13/P2.5 CMP-/PLVD/INT14/P2.6 AN11/INT11/P2.3 RST/INT15/AN15/P2.7 P0.2/INT2/AN2/FLT2 Figure 1-3 SOP16 引脚配置图
1.4.3 SOP8 引脚配置
P0.0/INT0/AN0/FLT0 HC89F0312 1 8 P0.1/INT1/AN1/FLT1 P0.2/INT2/AN2/FLT2 Vref/AN4/INT4/P0.4 SCK/AN3/INT3/P0.3 SDA/AN9/INT9/P2.1 Figure 1-4 SOP8 引脚配置图
1.5 引脚描述
1.5.1 TSSOP20 引脚描述
脚位 名称 类型 说明
1 GND P 电源地
P1.0 XIN INT0_1 CMP2+ I/O AN I AN 输入/输出口 外部晶振输入口 可通过软件配置为外部中断 0 输入口 比较器正端 2 输入口 P1.1 AN14 XOUT INT1_1 CMP3+ I/O AN AN I AN 输入/输出口 ADC14 输入口 外部晶振输出口 可通过软件配置为外部中断 1 输入口 比较器正端 3 输入口 P2.7 AN15 INT15 I/O AN I I 输入/输出口 ADC15 输入口 外部复位输入口 外部中断15 输入口 P2.6 INT14 PLVD CMP- I/O I AN AN 输入/输出口 外部中断14 输入口 端口低电压检测端口 比较器负端输入口 P2.5 AN13 INT13 CMP1+ I/O AN I AN 输入/输出口 ADC13 输入口 外部中断13 输入口 比较器正端 1 输入口 P2.4 AN12 INT12 I/O AN I 输入/输出口 ADC12 输入口 外部中断12 输入口 P2.3 AN11 INT11 I/O AN I 输入/输出口 ADC11 输入口 外部中断11 输入口 P2.2 AN10 INT10 I/O AN I 输入/输出口 ADC10 输入口 外部中断10 输入口 P2.1 AN9 INT9 SDA I/O AN I I/O 输入/输出口 ADC9 输入口 外部中断9 输入口 双线模式数据输入/输出 P2.0 AN8 INT8 I/O AN I 输入/输出口 ADC8 输入口 外部中断8 输入口
P0.7 AN7 INT7 I/O AN I 输入/输出口 ADC7 输入口 外部中断7 输入口 P0.6 AN6 INT6 I/O AN I 输入/输出口 ADC6 输入口 外部中断6 输入口 P0.5 AN5 INT5 I/O AN I 输入/输出口 ADC5 输入口 外部中断5 输入口 P0.4 AN4 Vref INT4 I/O AN AN I 输入/输出口 ADC4 输入口 ADC 外部参考电压输入/输出口 外部中断4 输入口 P0.3 AN3 INT3 SCK I/O AN I I 输入/输出口 ADC3 输入口 外部中断3 输入口 双线模式时钟输入 P0.2 AN2 INT2 FLT2 I/O AN I I 输入/输出口 ADC2 输入口 外部中断2 输入口 PWM2 故障检测输入引脚 P0.1 AN1 INT1 FLT1 I/O AN I I 输入/输出口 ADC1 输入口 外部中断1 输入口 PWM1 故障检测输入引脚 P0.0 AN0 INT0 FLT0 I/O AN I I 输入/输出口 ADC0 输入口 外部中断0 输入口 PWM0 故障检测输入引脚
20 VDD P 电源输入口
注:I =输入,O =输出,I/O =输入/输出,P =电源,AN =模拟输入输出。
1.5.2 SOP16 引脚描述
脚位 名称 类型 说明 P1.0 XIN INT0_1 CMP2+ I/O AN I AN 输入/输出口 外部晶振输入口 可通过软件配置为外部中断 0 输入口 比较器正端 2 输入口 P1.1 AN14 XOUT INT1_1 CMP3+ I/O AN AN I AN 输入/输出口 ADC14 输入口 外部晶振输出口 可通过软件配置为外部中断 1 输入口 比较器正端 3 输入口 P2.7 AN15 INT15 I/O AN I I 输入/输出口 ADC15 输入口 外部复位输入口 外部中断15 输入口 P2.6 INT14 PLVD CMP- I/O I AN AN 输入/输出口 外部中断14 输入口 端口低电压检测端口 比较器负端输入口 P2.5 AN13 INT13 SCK CMP1+ I/O AN I I AN 输入/输出口 ADC13 输入口 外部中断13 输入口 双线模式时钟输入 比较器正端 1 输入口 P2.4 AN12 INT12 SDA I/O AN I I/O 输入/输出口 ADC12 输入口 外部中断12 输入口 双线模式数据输入/输出 P2.3 AN11 INT11 I/O AN I 输入/输出口 ADC11 输入口 外部中断11 输入口 P0.6 AN6 INT6 I/O AN I 输入/输出口 ADC6 输入口 外部中断6 输入口 P0.5 AN5 INT5 I/O AN I 输入/输出口 ADC5 输入口 外部中断5 输入口 P0.4 AN4 Vref INT4 I/O AN AN I 输入/输出口 ADC4 输入口 ADC 外部参考电压输入/输出口 外部中断4 输入口 12 P0.3 I/O 输入/输出口
I ADC3 输入口 外部中断3 输入口 P0.2 AN2 INT2 FLT2 I/O AN I I 输入/输出口 ADC2 输入口 外部中断2 输入口 PWM2 故障检测输入引脚 P0.1 AN1 INT1 FLT1 I/O AN I I 输入/输出口 ADC1 输入口 外部中断1 输入口 PWM1 故障检测输入引脚 P0.0 AN0 INT0 FLT0 I/O AN I I 输入/输出口 ADC0 输入口 外部中断0 输入口 PWM0 故障检测输入引脚
16 VDD P 电源输入口
注:I =输入,O =输出,I/O =输入/输出,P =电源,AN =模拟输入输出。
1.5.3 SOP8 引脚描述
脚位 名称 类型 说明
1 VDD P 电源输入口
P2.1 AN9 INT9 SDA I/O AN I I/O 输入/输出口 ADC9 输入口 外部中断9 输入口 双线模式数据输入/输出 P0.4 AN4 Vref INT4 I/O AN AN I 输入/输出口 ADC4 输入口 ADC 外部参考电压输入/输出口 外部中断4 输入口 P0.3 AN3 INT3 SCK I/O AN I I 输入/输出口 ADC3 输入口 外部中断3 输入口 双线模式时钟输入 P0.2 AN2 INT2 FLT2 I/O AN I I 输入/输出口 ADC2 输入口 外部中断2 输入口 PWM2 故障检测输入引脚 P0.1 AN1 INT1 FLT1 I/O AN I I 输入/输出口 ADC1 输入口 外部中断1 输入口 PWM1 故障检测输入引脚 P0.0 AN0 INT0 FLT0 I/O AN I I 输入/输出口 ADC0 输入口 外部中断0 输入口 PWM0 故障检测输入引脚
8 GND P 电源地
注:I =输入,O =输出,I/O =输入/输出,P =电源,AN =模拟输入输出。
1.6 外设功能引脚全映射模块 PTM HC89F0332/0322/0312 内置外设功能引脚全映射模块(PTM) ,可通过用户软件操作将绝大多数的 外设功能引脚配置在任意一个非电源口(VDD、GND)上。
1.6.1 PTM 模块特性
➢ 外设引脚为输入功能(T0/1/3/5 外部输入、RXD 等等)特性时,系统将允许其多对一映射, 即将多种输入特性外设功能引脚分配到同一 IO 口上,此举可使用户系统得到更好优化。 ➢ 外设引脚为输出功能(T0/1/4 时钟输出、TXD 等等)特性时,如果将多个输出特性外设功能 引脚分配到同一IO 口,遵循固定的优先级,只能有一个输出有效。 ➢ 软件操作,使用灵活。用户在应用系统设计时,不用考虑外设功能引脚布局问题,从而降低 开发成本。 ➢ 用户在开发过程中遇到如 PCB 上外设功能引脚布局错误情况时, 可使用该模块对外设功能引 脚进行重新分配,从而缩短开发周期。 ➢ 用户应用系统升级如更换外围器件或 MCU 时, 改动项可减至最少, 从而降低系统维护成本。
1.6.2 PTM 可全映射外设功能引脚
外设 名称 类型 说明 定时器 T0 I/O T0 的外部输入或T0 时钟分频输出 T1 I/O T1 的外部输入或T1 时钟分频输出 T3 I T3 的外部输入 T4 O T4 的输出 T5 I T5 的外部输入 PWM PWM0 O PWM0 输出口 PWM01 O PWM01 输出口 PWM1 O PWM1 输出口 PWM11 O PWM11 输出口 PWM2 O PWM2 输出口 PWM21 O PWM21 输出口 PWM3 O PWM3 输出口 CLK CLKO O 时钟输出口 UART TXD O UART 数据传输口 RXD I/O UART 接收脚 SPI MOSI I/O SPI 的数据口,主机的输出和从机的输入 MISO I/O SPI 的数据口,主机的输入和从机的输出 SCK I/O SPI 的时钟口 SS̅̅̅̅ I SPI 的片选口
1.6.3 PTM 不可全映射外设功能引脚
PTM 不可全映射外设功能引脚包括电源口(VDD、GND)、PWM 故障检测脚(FLT0/1/2)、ADC 口(PLVD) ,这些功能口是固定的,不能任意映射。
2 CPU
2.1 CPU 特性
HC89F0332/0322/0312 的 CPU 是一个增强型 1T 兼容 8051 的内核,在同样的系统时钟下,较之 传统的8051 芯片具有运行更快速,性能更优越的特性。
2.2 CPU 相关寄存器
2.2.1 程序计数器 PC 程序计数器PC 在物理上是独立的,不属于 SFR 之列。PC 字长16 位,是专门用来控制指令执行 顺序的寄存器。单片机上电或复位后,PC 的值为 0000H, 这样单片机从程序的零地址开始执行程序。 2.2.2 累加器 ACC 累加器(ACC)在指令系统中又记做A,用于向ALU提供操作数和存放运算结果,它是CPU中工作 最频繁的寄存器,大多数指令的执行都要通过累加器ACC进行。 2.2.3 寄存器 B 寄存器B 是专门为乘法和除法运算设置的寄存器, 用于存放乘法和除法运算的操作数和运算结果, 在不进行乘除运算时,可以作为通用寄存器使用。 2.2.4 程序状态字寄存器 PSW 此寄存器用来保存 ALU 运算结果的特征和处理状态,这些特征和状态可以作为控制程序转移的 条件,供程序判别和查询,它的各位定义如下所示: 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R 复位值 0 0 0 0 0 0 0 0 位符号 CY AC F0 RS[1:0] OV F1 P 位编号 位符号 说明 7 CY 进位/借位标志位 0:算术运算中,无进位或借位 1:算术运算中,有进位或借位 6 AC 辅助进位/借位标志位 0:算术运算中,无辅助进位或借位 1:算术运算中,有辅助进位或借位
5 F0 用户自定义标志位
4-3 RS[1:0] 工作寄存器组选择位 00:第0 组(00H~07H) 01:第1 组(08H~0FH)
10:第2 组(10H~17H) 11:第3 组(18H~1FH) 2 OV 溢出标志位 0:无溢出 1:有溢出
1 F1 用户自定义标志位
奇偶标志位 0:ACC 寄存器中 1 的个数为 0 或偶数 1:ACC 寄存器中 1 的个数为奇数 2.2.5 堆栈指针 SP 堆栈指针SP是一个8位的专用寄存器,它指示出堆栈顶部在内部RAM中的位置。单片机复位后,SP 值为07H,使得堆栈事实上由08H单元开始,考虑到08H~1FH单元分别属于工作寄存器1~3,若在程序设 计中要使用到这些区域, 最好把SP的值改为较大的值。51单片机的堆栈是向上生成的, 例如:SP=30H, CPU执行一条调用指令或响应中断后,PC进栈,PCL保护到31H,PCH保护到32H,SP=32H。 2.2.6 数据指针 DPTR 数据指针DPTR是一个16位的专用寄存器, 由两个8位的寄存器DPH(高8位) 和DPL(低8位)组成。 此系列单片机有两个16位的数据指针DPTR0和DPTR1,其共用同一地址空间,可通过设置DPS (INSCON.0)位来选择具体使用的数据指针。 2.2.7 数据指针选择寄存器 INSCON 位编号 7 6 5 4 3 2 1 0 R/W R R R R/W R R R R/W 复位值 0 0 0 0 0 0 0 0 位符号 - IAPS - DPS 位编号 位符号 说明 7-5 - 保留位(读为0,写无效)
4 IAPS
MOVC 操作区选择位 0:对程序区读擦写操作 1:对OPTION 区读操作 3-1 - 保留位(读为0,写无效)
0 DPS
数据指针选择位 0:数据指针 DPTR0 1:数据指针DPTR1
3 存储器 3.1 程序存储器(FLASH)
3.1.1 FLASH 特性
➢ 在工作电压范围内都能进行擦除和编程操作 ➢ 在线编程(ICP)操作支持写入、读取和擦除操作 ➢ ICP 操作可设置 32 位密码进行保护 ➢ 在应用编程(IAP)支持用户自定义启动代码和类 EEPROM 区 ➢ 灵活的代码保护模式 ➢ 擦写次数至少10 万次 ➢ 数据保存年限至少 10 年 ➢ 8K Bytes FLASH:512 字节为1 个扇区,2 个扇区为1 页,4 页为一个保护单位
3.1.2 FLASH 数据安全
FLASH 的操作可以分成两种:第一种是通过 FLASH 编程器对 FLASH 进行读、擦、写操作,这 种方式被称为在电路编程模式(ICP),SWD 就是ICP 的一种;第二种是用户程序代码在 FLASH 代码 区中运行,对 FLASH 存储器其他扇区进行读、擦、写操作,但无法擦除代码自身所在的扇区,这种 方式被称为在应用编程模式(IAP)。
3.1.2.1 ICP操作密码保护
用户可以通过上位机软件对 ICP 操作进行密码保护,密码长度为 4 个字节(32 位) ,一旦用户设 置了密码,那么只有输入正确的密码才能进入 SWD,否则就不能对FLASH 进行任何操作,这样可以 有效保护用户的程序代码。
3.1.2.2 ICP读擦写FLASH保护
ICP 的读保护以 4K 字节为保护单位,当一个 4K 字节空间的读保护使能时,ICP 读这个 4K 字节 空间,读出来的数据为全 0,但是仍然可以通过 ICP 操作进行仿真。 ICP 的擦写保护也是以 4K 字节为保护单位,当对应 4K 字节的擦写保护使能时,ICP 将不能擦除 和编程这个4K 字节空间,强写也不允许。 若对应4K 字节空间读保护被使能,但被允许擦除与写入,则可先擦除后获得该4K 字节空间的读 允许,直至复位或掉电。 ICP 的读擦写保护通过上位机软件来配置,详细情况请参见 HC-LINK 用户手册。
3.1.2.3 IAP读擦写FLASH保护
IAP 通过MOVC 指令来读 FLASH,IAP 读保护以 4K 字节为单位,如果一个 4K 字节空间设置了 读保护,其他 4K 字节空间的 MOVC 指令读这个 4K 字节空间,读出来的数据为全零,但这个 4K 字 节空间的MOVC 指令可以读取自身的数据。 IAP 擦写FLASH 的步骤详见 FLASH IAP 操作,IAP 的擦写保护以 4K 字节为单位,IAP 擦写之前 需要先看相应扇区的擦写保护是否使能,没有使能擦写保护才能进行 IAP 的擦写。 若对应4K 字节空间读保护被使能,但被允许擦除与写入,则可先擦除后获得该4K 字节空间的读 允许,直至复位或掉电。 IAP 的读擦写保护通过上位机软件来配置,详细情况请参见 HC-LINK 用户手册。
3.1.3 OPTION
在 8K 的 ROM 之外还有一个只读的 OPTION 区域,存放的内容包括:用户定义的一些数据、用 户设置的密码、芯片的一些配置相关的内容。具体地址分配如下表。 地址 名称 地址偏移量 名称 地址 名称 地址偏移量 名称 0x0000 SN_DATA0 0x0020 FLASH_SC0 0x0031 ERST_ENB 0x0100 CHIP_ID0 0x0001 SN_DATA1 0x0021 FLASH_SC1 0x0038 WAIT_TS 0x0101 CHIP_ID1 0x0002 SN_DATA2 0x0022 FLASH_SC2 0x0039 BORVS 0x0102 CHIP_ID2 0x0003 SN_DATA3 0x0023 FLASH_SC3 0x003E RVCFG 0x0103 CHIP_ID3 0x0004 SN_DATA4 - - 0x003F nRVCFG 0x0104 CHIP_ID4 0x0005 SN_DATA5 - - 0x0105 CHIP_ID5 0x0006 SN_DATA6 - - - - 0x0106 CHIP_ID6 0x0007 SN_DATA7 - - - - 0x0107 CHIP_ID7 0x0008 ID_DATA0 - - - - - - 0x0009 ID_DATA1 - - - - - - 0x000A ID_DATA2 - - - - - - 0x000B ID_DATA3 - - - - - _ 0x000C ID_DATA4 - - - - - _ 0x000D ID_DATA5 - - - - - - 0x000E ID_DATA6 - - - - - - 0x000F ID_DATA7 - - - - - - HC89F0332/0322/0312 在出厂时都会固化一个 CHIP_ID,一共8 个字节,一颗芯片一个ID,不会 重复,也永远不能被擦除,用户可以在程序中通过 MOVC 来读出,也可以通过工具读出。 SN_DATA和ID_DATA是用户自定义数据,FLASH_SC 为客户密码,通过工具软件进行设置,如 同设置代码选项一样,它们是可以被擦除和修改的,用户也可以在程序中通过 MOVC 来读出。 注意:1、用户在进行读 OPTION 操作前,需要将寄存器 INSCON[IAPS]位置1。 2、首字母为“n”位对应数据的反码。 用C语言读CHIP_ID的程序如下: //从FLASH里面读取任意长度的数据 void Flash_ReadArr(unsigned int fui_Address,unsigned char fuc_Length,unsigned char *fucp_SaveArr) while(fuc_Length--) *(fucp_SaveArr++)=*((unsigned char code *)(fui_Address++)); //读取CHIP_ID的值,并保存到read_chip_id 数组里 unsigned char read_chip_id[8]; INSCON |= 0x10; Flash_ReadArr(0x0100,8,read_chip_id); //CHIP_ID开始地址为0x0100 INSCON &=~ 0x10; 如果需要读SN_DATA或ID_DATA,只需要修改读地址即可。
3.1.3.1.1 外部复位使能 ERST_ENB 位编号 7 6 5 4 3 2 1 0 位符号 - ERST0_ENB 位编号 位符号 说明 7-1 - 保留位
0 ERST0_ENB
复位引脚使能位 0:外部 RST 输入 1:P2.7 为GPIO 3.1.3.1.2 复位重读 OPTION 后等待时间 WAIT_TS 位编号 7 6 5 4 3 2 1 0 位符号 - - - - - - WAIT_TS 位编号 位符号 说明 7-2 - 保留位 1-0 WAIT_TS 复位重读option 后等待时间选择位 00:8ms 01:4ms 11:16ms
3.1.3.1.3 BOR 检测电压选择 BORVS
位编号 7 6 5 4 3 2 1 0 位符号 - - - - - BORVS 位编号 位符号 说明 7-3 - 保留位 2-0 BORVS BOR 检测电压点选择位 011:2.6V 100:3.0V 101:3.6V 110:3.9V 111:4.2V 其他:保留位
3.1.4 FLASH IAP 操作
HC89F0332/0322/0312 的FLASH 一共有16 个扇区,512 个字节为一个扇区,2*512 Bytes = 1K Bytes 为一页,1K Bytes*4 = 4KBytes 为一块。 IAP 写之前必须先进行一次擦除操作,IAP 一次擦除一个扇区(512 字节) ,IAP 擦除时的地址寄 存器可以是扇区里的任意地址。IAP 写是单字节写,每次写一个字节。 IAP 擦除一个扇区的时间是 2ms,IAP 写一个字节的时间是 130μs 。
3.1.4.1 IAP操作注意事项
HC89F0332/0322/0312 的用户程序代码可对FLASH 进行读、擦、写操作,作为用户更新代码或存 储数据使用,为保证用户对 FLASH 操作的安全性,使用过程中请注意: 1. 在进行FLASH 的IAP 擦写之前,需要配置扩展 SFR 里FREQ_CLK 寄存器,指明目前 CPU 时钟 的频率,FREQ_CLK 寄存器配置的值等于 CPU 时钟的频率值,最小为 1MHz,假如目前 CPU 的 运行频率为 16MHz,那就配置寄存器 FREQ_CLK=0x10。建议在 IAP 擦写之前,将 CPU 时钟频 率分频为整数。当 CPU 时钟频率低于 1MHz 时,不能进行 FLASH 的IAP 擦写操作。 2. 系统在进行IAP 操作时,不响应任何中断。 3. 在Option 中设置相关的IAP 擦写保护,使能用户程序所在扇区保护位,可以有效保证程序区不会 被改写或误擦除。 4. IAP 擦写操作前,建议关闭中断(EA=0) ,确保在IAP 操作期间不会被中断影响,待 IAP 擦写操 作完成后,再将中断恢复。 5. 在执行IAP 操作时,不可避免的会遇到数据擦除结束后,尚未写数据就掉电的情况,所以建议采 用双区域保存数据的方式,即使一个区域的数据被擦除,也可以保证另一个区域的数据被正常读
3.1.4.2 IAP数据寄存器 IAP_DATA
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IAP_DATA[7:0] 位编号 位符号 说明 7-0 IAP_DATA[7:0] IAP 数据寄存器
3.1.4.3 IAP地址寄存器 IAP_ADDRL、IAP_ADDRH
IAP_ADDRL 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 1 1 1 1 位符号 IAP_ADDR[7:0] 位编号 位符号 说明 7-0 IAP_ADDR[7:0] IAP 操作时的地址寄存器低八位 IAP_ADDRH 位编号 7 6 5 4 3 2 1 0 R/W R R R R/W R/W R/W R/W R/W 复位值 0 0 0 1 1 1 1 1 位符号 - IAP_ADDR[12:8] 位编号 位符号 说明 7-6 - 保留位 5-0 IAP_ADDR[12:8] IAP 操作时的地址寄存器高五位 注:必须在解锁后才能修改 IAP 地址寄存器,而且一次操作完成后,IAP 地址自动指向 0x1FFF。
3.1.4.4 IAP命令寄存器 IAP_CMDH、IAP_CMDL
IAP_CMDH 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IAP_CMDH[7:0] 位编号 位符号 说明 7-0 IAP_CMDH[7:0] 操作命令模式选择位 0xF0:解锁(22 个CPU 时钟后自动锁定,IAP_CMD[7:0] = 0x00) 0xE1:触发一次操作 0xD2:扇区擦除 0xB4:字节编程 0x87:软件复位,复位地址为 0000H,不重读代码选项 0x78:软件复位,复位地址为 0000H,重读代码选项 其它值:锁定 IAP_CMDL 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 1 1 1 1 位符号 IAP_CMDL[7:0] 位编号 位符号 说明 7-0 IAP_CMDL[7:0] IAP_CMDH[7:0]反码 注:写入IAP_CMDL[7:0]数据必须为之前写入 IAP_CMDH[7:0]的反 码,否则将锁定相关操作,即相关操作会失败。 操作示例: 1、程序空间扇区擦除 IAP_CMDH = 0xF0; IAP_CMDL = 0x0F; IAP_ADDRL = 0x80; IAP_ADDRH = 0x00; // 选择第 1 扇区被擦除,一个扇区为 512 字节 IAP_CMDH = 0xD2; // 选择操作方式,扇区擦除 IAP_CMDL = 0x2D; IAP_CMDH = 0xE1; // 触发 IAP_CMDL = 0x1E; // 触发后 IAP_ADDRL 指向 0xFF,IAP_ADDRH 指向0x3F,同时自动锁 定 2、程序空间字节编程 IAP_DATA = 0x02; //待编程数据,写入数据寄存器必须放在解锁之前 IAP_CMDH = 0xF0; IAP_CMDL = 0x0F; IAP_ADDRH = 0x00;
IAP_ADDRL = 0x00; IAP_CMDH = 0xB4; // 选择操作方式,字节编程 IAP_CMDL = 0x4B; IAP_CMDH = 0xE1; // 触发 IAP_CMDL = 0x1E; // 触发后IAP_ADDRL 指向 0xFF,IAP_ADDRH 指向 0x3F,IAP_DATA 指向0x00,同时自动锁定 注:解锁之后,写地址、选择操作方式、触发这三个步骤之间不能插入任何指令,必须连续操 3、软件复位(不重读代码选项) IAP_CMDH = 0xF0; IAP_CMDL = 0x0F; IAP_CMDH = 0x87; IAP_CMDL = 0x78; 4、软件复位(重读代码选项) IAP_CMDH = 0xF0; IAP_CMDL = 0x0F; IAP_CMDH = 0x78; IAP_CMDL = 0x87;
3.1.5 FLASH ICP 操作
3.1.5.1 双线方式 用户可以通过HC-LINK 仿真器的双线方式对MCU 进行仿真和编程,当MCU 已经焊在用户板上 后,如果用户采用上电复位的方式,只需要连接四根线(VDD、GND、SDA、SCK),用户系统必须 断电,由仿真器提供电源。当用户系统不希望掉电时,可以采用 5 根线进入编程模式,多了一个复位 引脚,仿真器更详细的使用说明请参见 HC-LINK 用户手册。 应用电路中分离出来,如下图所示。另外,如果使用外部复位引脚进入,也需要将外部复位引脚进行 跳线分离。 MCU VDD SDA SCK RST GND HC-LINK Jumper To Application Circuit Figure 3-1 HC-LINK 编程硬件连接 当采用ICP 模式进行操作时,建议按照如下步骤进行操作: 1、 在开始编程前断开跳线(Jumper),从应用电路中分离编程引脚。 2、 将芯片编程引脚连接至 Flash 编程器接口,开始编程。 3、 编程结束后断开 Flash 编程器接口,连接跳线恢复应用电路。
3.2 数据存储器(RAM) HC89F0332/0322/0312 为用户提供了256 Bytes 内部RAM 和768 Bytes 内部扩展 XRAM 来作为数 据存储器。下图为数据存储器空间分配。 第0组 工作寄存器 第1组 工作寄存器 第2组 工作寄存器 第3组 工作寄存器 00H 08H 10H 18H 位寻址区 (位地址 00H~7FH)20H 通用RAM 30H FFH 间接寻址通用RAM XRAM 0000H 7FH 07H 0FH 17H 1FH 2FH 80H 02FFH 直接寻址SFR Figure 3-2 数据存储器示意图 内部RAM 的高128 Bytes(0x80 ~ 0xFF)必须采用寄存器间接寻址方式。 内部扩展RAM(XRAM) 的地址范围是0x0000~0x02FF, 访问内部扩展RAM 的方法和传统 8051 单片机访问外部扩展RAM 的方法相同, 但是不影响I/O 口。 在汇编语言中, 内部扩展RAM 通过MOVX 指令访问,即MOVX @DPTP 或者 MOVX @Ri。
3.3 特殊功能寄存器(SFR) 3.3.1 特殊功能寄存器列表 3.3.1.1 直接寻址读写SFR F8 RSTFR IAP_ADDRL IAP_ADDRH IAP_DATA IAP_CMDL IAP_CMDH - - F0 B PWM2EN PWM2PL PWM2PH PWM2DL PWM2DH PWM2DTL PWM2DTH E8 - PWM1EN PWM1PL PWM1PH PWM1DL PWM1DH PWM1DTL PWM1DTH E0 ACC PWM0EN PWM0PL PWM0PH PWM0DL PWM0DH PWM0DTL PWM0DTH D8 - - PWM0C PWM1C PWM2C PWM3C PWM3P PWM3D D0 PSW LCDCON - - - - - - C8 - T3CON TL3 TH3 T4CON TL4 TH4 - C0 - T5CON TL5 TH5 RCAP5L RCAP5H - - B8 IE1 IP2 IP3 LVDC LVDCMP WDTC CRCL CRCH B0 - - - - ADCC0 ADCC1 ADCRL ADCRH A8 IE IP0 IP1 SPDAT SPCTL SPSTAT - - A0 P2 - INSCON - - - - -
98 SCON SBUF SADDR SADEN - - SCON2 -
90 P1 - - - - - PINTF0 PINTF1
88 TCON TMOD TL0 TL1 TH0 TH1 CLKSWR CLKCON
80 P0 SP DPL DPH - - - PCON
3.3.1.2 外部扩展XSFR 扩展XSFR 采用和 XRAM 同样的访问方式,使用 MOVX A, @DPTR 和MOVX @DPTR ,A 来 进行读写。 比如写一个地址为 0xFE88 的XSFR,操作如下: MOV A, #wdata MOV DPTR,#0xFE88 MOVX @DPTR, A 读地址为0xFE89的XSFR,操作如下: MOV DPTR,#0xFE89 MOVX A, @DPTR 使用C语言来编程时,只需要#define ALLOCATE_EXTERN,并且#include "HC89F0332.h",就可以 像操作直接寻址寄存器一样,直接赋值XSFR,比如: ADCC2 = 0x4D;
扩展XSFR(基地址0xFE80) 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 0x0000 TCON1 0x0010 - 0x0020 WDTCCR 0x0030 PITS0 0x0001 - 0x0011 CLKDIV 0x0021 - 0x0031 PITS1 0x0002 - 0x0012 FREQ_CLK 0x0022 CRCC 0x0032 PITS2 0x0003 - 0x0013 CLKOUT 0x0023 - 0x0033 PITS3 0x0004 0x0014 XTALCFG 0x0024 BORC 0x0034 - 0x0005 T5CON1 0x0015 SPOV_RSTEN 0x0025 BORDBC 0x0035 - 0x0006 T5CON2 0x0016 - 0x0026 - 0x0036 - 0x0007 - 0x0017 - 0x0027 LVDDBC 0x0037 - 0x0008 - 0x0018 ADCWC 0x0028 - 0x0038 PINTE0 0x0009 - 0x0019 - 0x0029 - 0x0039 PINTE1 0x000A - 0x001A ADCC3 0x002A RSTDBC 0x003A - 0x000B BRTSEL 0x001B ADCC2 0x002B 0x003B - 0x000C - 0x001C ADCDLYH 0x002C 0x003C INT01_PINS 0x000D - 0x001D ADCDLYL 0x002D 0x003D TRMEN 0x000E - 0x001E 0x002E 0x003E TRMV 0x000F - 0x001F 0x002F 0x003F 扩展XSFR(基地址0xFEC0) 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 0x0000 - 0x0010 - 0x0020 - 0x0030 - 0x0001 - 0x0011 - 0x0021 - 0x0031 - 0x0002 - 0x0012 - 0x0022 - 0x0032 - 0x0003 - 0x0013 - 0x0023 - 0x0033 - 0x0004 - 0x0014 - 0x0024 - 0x0034 - 0x0005 - 0x0015 - 0x0025 - 0x0035 - 0x0006 - 0x0016 - 0x0026 - 0x0036 - 0x0007 - 0x0017 - 0x0027 - 0x0037 - 0x0008 - 0x0018 - 0x0028 - 0x0038 PWMENA 0x0009 - 0x0019 - 0x0029 - 0x0039 PWMCON0 0x000A - 0x001A - 0x002A - 0x003A - 0x000B - 0x001B - 0x002B - 0x003B - 0x000C - 0x001C - 0x002C - 0x003C - 0x000D - 0x001D - 0x002D - 0x003D - 0x000E - 0x001E - 0x002E - 0x003E - 0x000F - 0x001F - 0x002F - 0x003F -
扩展XSFR(基地址0xFF00) 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 0x0000 P0M0 0x0010 P2M0 0x0020 - 0x0030 - 0x0001 P0M1 0x0011 P2M1 0x0021 - 0x0031 - 0x0002 P0M2 0x0012 P2M2 0x0022 - 0x0032 - 0x0003 P0M3 0x0013 P2M3 0x0023 - 0x0033 - 0x0004 - 0x0014 - 0x0024 - 0x0034 - 0x0005 P0LPU 0x0015 - 0x0025 - 0x0035 - 0x0006 - 0x0016 - 0x0026 - 0x0036 - 0x0007 - 0x0017 - 0x0027 - 0x0037 - 0x0008 P1M0 0x0018 0x0028 - 0x0038 - 0x0009 - 0x0019 0x0029 - 0x0039 - 0x000A - 0x001A 0x002A - 0x003A - 0x000B - 0x001B - 0x002B - 0x003B - 0x000C - 0x001C - 0x002C - 0x003C - 0x000D - 0x001D - 0x002D - 0x003D - 0x000E - 0x001E - 0x002E - 0x003E - 0x000F - 0x001F - 0x002F - 0x003F - 扩展XSFR(基地址0xFF40) 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 0x0000 P00DBC 0x0010 P0OUT 0x0020 COMP0EN 0x0030 - 0x0001 P01DBC 0x0011 P1OUT 0x0021 COMP1EN 0x0031 - 0x0002 P02DBC 0x0012 P2OUT 0x0022 COMP2EN 0x0032 - 0x0003 - 0x0013 - 0x0023 - 0x0033 - 0x0004 - 0x0014 - 0x0024 - 0x0034 - 0x0005 - 0x0015 - 0x0025 - 0x0035 - 0x0006 - 0x0016 - 0x0026 - 0x0036 - 0x0007 - 0x0017 - 0x0027 - 0x0037 - 0x0008 - 0x0018 - 0x0028 - 0x0038 -- 0x0009 - 0x0019 - 0x0029 - 0x0039 - 0x000A - 0x001A - 0x002A - 0x003A - 0x000B - 0x001B - 0x002B - 0x003B - 0x000C - 0x001C - 0x002C - 0x003C - 0x000D - 0x001D - 0x002D - 0x003D - 0x000E - 0x001E - 0x002E - 0x003E - 0x000F - 0x001F - 0x002F - 0x003F -
扩展XSFR(基地址0xFF80) 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 偏移地址 XSFR 名称 0x0000 T0_MAP 0x0010 PWM0_MAP 0x0020 TXD_MAP 0x0030 - 0x0001 T1_MAP 0x0011 PWM01_MAP 0x0021 RXD_MAP 0x0031 - 0x0002 - 0x0012 - 0x0022 - 0x0032 - 0x0003 T3_MAP 0x0013 - 0x0023 - 0x0033 - 0x0004 T4_MAP 0x0014 PWM1_MAP 0x0024 𝐒𝐒_MAP 0x0034 - 0x0005 T5_MAP 0x0015 PWM11_MAP 0x0025 SCK_MAP 0x0035 - 0x0006 - 0x0016 - 0x0026 MOSI_MAP 0x0036 - 0x0007 - 0x0017 - 0x0027 MISO_MAP 0x0037 - 0x0008 0x0018 PWM2_MAP 0x0028 - 0x0038 - 0x0009 0x0019 PWM21_MAP 0x0029 - 0x0039 - 0x000A 0x001A - 0x002A - 0x003A - 0x000B 0x001B - 0x002B - 0x003B - 0x000C - 0x001C PWM3_MAP 0x002C - 0x003C - 0x000D 0x001D - 0x002D - 0x003D - 0x000E - 0x001E - 0x002E - 0x003E - 0x000F CLKO_MAP 0x001F - 0x002F - 0x003F -
4 系统时钟 4.1 系统时钟特性 HC89F0332/0322/0312 单片机系统时钟有4 种时钟源可选: ➢ 外部高频晶振时钟(4MHz~20MHz) ➢ 外部低频晶振时钟(32.768KHz) ➢ 内部高频RC 时钟(32MHz) ➢ 内部低频RC 时钟(44KHz) 用户选择后的系统时钟(如果选择的是内部高频 RC,则经RC32M_DIV[1:0]分频后的时钟)记做 osc_clk,其频率为Fosc,周期为Tosc,主要用于外设模块,osc_clk 可以进行1-255 之间任意值的分频, 分频后的时钟记做 CPU 时钟,其频率为 Fcpu,周期为Tcpu。 芯片上电复位后,默认选择内部高频 RC 作为系统时钟,其 Fosc 为 4MHz,Fcpu 为 2MHz,可以通 过配置相关寄存器改变 osc_clk 和cpu_clk 的频率。 CPU 最高可以运行在 16MHz 频率下,如果所选时钟源频率高于 16MHz,需要对其进行分频,使 CPU 时钟频率等于或低于 16MHz。 1-255 分频 MUX xtal_clk rc32m_clk xtal_sel clk_sw wdt_clk clk_sel[1:0] CPU RC32M RC44K high_xtal_clk low_xtal_clk osc_clk cpu_clk WDT 其他 外设 Timer3 Figure 4-1 系统时钟框图
4.2 内部时钟 内部时钟有内部高频 RC(RC32M)和内部低频 RC(RC44K)两种,用户可通过软件进行选择。 内部低频RC(RC44K)输出的时钟记做wdt_clk,用于看门狗定时器的计数,也可以用于系统时 钟;内部高频 RC(RC32M)输出的时钟记做 rc32m_clk,可以进行1/2/4/8 分频。 4.3 外部时钟 外部时钟有外部高频晶振时钟(4MHz~20MHz)和外部低频晶振(32.768KHz)两种,用户可通 过软件进行选择。经过 XTALCFG 寄存器选择的外部晶振时钟记做 xtal_clk。 Crystal XIN XOUT Figure 4-2 外部晶振典型应用 使用注意: 1、 晶振起振电容推荐值为 20pF,该值可通过晶振基本的起振和运行测试,并非最优值。 2、 外部晶振和XIN、XOUT 端口之间的物理距离应在 10mm 以内。 3、 使用外部晶振前,应充分了解所选晶振相关应用参数和要求,以获得最佳性能。
4.4 系统时钟相关寄存器 4.4.1 时钟控制寄存器 CLKCON 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R/W R/W R 复位值 0 0 1 1 0 0 1 0 位符号 HXTAL RDY LXTAL RDY HSRC RDY LSRC RDY - XTALEN HSRCEN - 位编号 位符号 说明
7 HXTALRDY
外部高频晶振状态位 0:外部高频晶振未准备 1:外部高频晶振准备就绪 注:该位硬件自动清 0 或置1。
6 LXTALRDY
外部低频晶振状态位 0:外部低频晶振未准备 1:外部低频晶振准备就绪 注:该位硬件自动清 0 或置1。
5 HSRCRDY
内部高频RC 振荡器状态位 0:内部高频 RC 未准备 1:内部高频 RC 准备就绪 注:该位硬件自动清 0 或置1。
4 LSRCRDY
内部低频RC 振荡器状态位 0:内部低频 RC 未准备 1:内部低频 RC 准备就绪 注:该位硬件自动清 0 或置1。 3 - 保留位
2 XTALEN
外部晶振使能位 0:外部晶振关闭 1:外部晶振打开 注:使能时,需要软件将对应管脚的 IO 模式设置为模拟通道。
1 HSRCEN
内部高频RC 振荡器使能位 0:内部高频 RC 关闭 1:内部高频 RC 打开 0 - 保留位
4.4.2 时钟选择寄存器 CLKSWR 位编号 7 6 5 4 3 2 1 0 R/W R R R/W R/W R R R/W R/W 复位值 0 1 0 1 0 0 1 1 位符号 CLKSTA[1:0] CLKSEL[1:0] - RC32M_DIV[1:0] 位编 号 位符号 说明 7-6 CLKSTA[1:0] 系统时钟状态位 00:当前系统时钟为内部低频 RC 01:当前系统时钟为内部高频 RC 10:当前系统时钟为外部低频晶振 11:当前系统时钟为外部高频晶振 注:系统根据当前系统时钟自动切换各个状态 5-4 CLKSEL[1:0] 系统时钟选择位 00:选择系统时钟为内部低频 RC 01:选择系统时钟为内部高频 RC 1x:选择系统时钟为外部晶振 注:系统时钟选择时,必须对应的时钟源状态位为1,否则将延续之前时 钟,切换后,原时钟不会自动关闭;选择后的系统时钟记做 osc_clk,其 频率为Fosc,周期为 Tosc。 3-2 - 保留位 1-0 RC32M_DIV[1:0] 内部高频RC 分频系数 00:rc32m_clk 01:rc32m_clk /2 10:rc32m_clk /4 11:rc32m_clk /8(默认) 4.4.3 时钟分频寄存器 CLKDIV 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 1 0 位符号 CLKDIV[7:0] 位编号 位符号 说明 7-0 CLKDIV[7:0] CPU 时钟分频系数,默认为 2 分频 配置值为0 或1 时,时钟不分频;其他情况下,配置值等于分频系数; 注:分频后的时钟为 CPU 时钟,其频率为 Fcpu,周期为Tcpu。
4.4.4 时钟输出寄存器 CLKOUT 位编号 7 6 5 4 3 2 1 0 R/W R R R R/W R R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - CLKOEN - CLKOSEL[2:0] 位编号 位符号 说明 7-5 - 保留位
4 CLKOEN
时钟输出使能位 0:禁止时钟输出 1:允许时钟输出 3 - 保留位 2-0 CLKOSEL[2:0] 时钟输出选择位 000:选择cpu_clk 001:选择osc_clk 010:选择wdt_clk 011:选择xtal_clk 100:选择rc32m_clk 101:选择rc32m_clk/2 110:选择rc32m_clk/4 111:选择rc32m_clk/8 4.4.5 外部晶振配置寄存器 XTALCFG 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 HXTALCNT[1:0] LXTALCNT[1:0] HXTALMSEL[1:0] RC_PD_EN XTALSEL 位编号 位符号 说明 7-6 HXTALCNT[1:0] 外部高频晶振warmup 计数值选择 00:2048 01:256 10:16384 11:65536 5-4 LXTALCNT[1:0] 外部低频晶振warmup 计数值选择 00:16384 01:4096 10:1024 11:65536
3-2 HXTALMSEL[1:0] 外部高频晶振的选择信号 00:选择4M/8M 晶振 01:选择4M/8M 晶振大驱动能力模式,在低压工作时,起振时间短, 且功耗适中 11:选择16M/20M 晶振
1 RC_PD_EN
系统产生BOR 复位时,高频内部 RC 关闭信号 0:系统产生BOR 复位时,不关闭高频内部 RC 1:系统产生BOR 复位时,关闭高频内部 RC 注意:此位可用于BOR 使能的情况下,降低VDD 下降过程中的系统 功耗。
0 XTALSEL
外部晶振选择位 0:外部低频晶振32.768KHz 1:外部高频晶振 4.4.6 时钟频率寄存器 FREQ_CLK 在进行 FLASH 的 IAP 擦写或者系统进入掉电模式之前,需要配置扩展 SFR 里 FREQ_CLK 寄存 器, 指明目前CPU 时钟的频率,FREQ_CLK 寄存器配置的值等于 CPU 时钟的频率值, 最小为1MHz, 假如目前CPU 的运行频率为 16MHz,那就配置寄存器 FREQ_CLK=0x10。 FREQ_CLK 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 1 0 位符号 FREQ_CLK[7:0] 位编号 位符号 说明 7-0 FREQ_CLK[7:0] 当前CPU 时钟频率寄存器 举例如下: CPU 频率为 16MHz 时,配置值为0x10 CPU 频率为 8MHz 时,配置值为 0x08 CPU 频率为 4MHz 时,配置值为 0x04 CPU 频率为 2MHz 时,配置值为 0x02 CPU 频率小于等于 1MHz 时,配置值为 0x01
4.4.7 内部高频 RC 调整使能寄存器 TRMEN 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R R/W 复位值 0 0 0 0 0 0 0 0 位符号 - RCTRMEN 位编号 位符号 说明 7-1 - 保留位
0 RCTRMEN
内部高频RC 调整使能位 1:使能内部高频RC 调整 0:禁止内部高频RC 调整 注:使能该寄存器后,必须立即配置TRMV 寄存器,否则这个使能寄存器 再执行完下一条指令后会被清零,内部高频 RC 调整就会失效。 4.4.8 内部高频 RC 调整配置寄存器 TRMV 位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W R/W R/W R/W R/W R/W 复位值 0 x x x x x x x 位符号 - RCTRMV 位编号 位符号 说明 7 - 保留位 6-0 RCTRMV 内部高频RC 调整配置值 1. x 表示不确定的值,此寄存器的上电复位值为出厂的校准值。 2.在配置这个寄存器值时,需要先将内部高频 RC 调整使能位配置为 1。 3.根据校准曲线软件先使能 RCTRMEN,紧接着就要配置RCTRMV,在调 整完成后RCTRMEN 自动清零,防止重复操作
5 电源管理 5.1 电源管理特性 ➢ 提供空闲模式(IDLE)和掉电模式(PD) ,作为省电模式 ➢ 提供多种方式从空闲/掉电模式唤醒 ➢ 提供低频模式(即时钟分频,详见系统时钟章节相关介绍) 5.2 空闲模式 空闲模式能够降低系统功耗,在此模式下,程序中止运行,CPU时钟停止,但外部设备时钟可继续 运行。空闲模式下,CPU在确定的状态下停止,并在进入空闲模式前所有CPU的状态都被保存,如PC、 PSW、SFR、RAM等。 将PCON寄存器中的IDL位置1,使HC89F0332/0322/0312 进入空闲模式。IDL位置1是CPU进入空闲 模式之前执行的最后一条指令。 两种方式可以退出空闲模式: (1) 所有的有效中断。HC89F0332/0322/0312在检测到一个有效中断后,CPU时钟立即恢复,硬件 清除PCON寄存器的IDL位,然后执行中断服务程序,随后跳转到进入空闲模式指令之后的指令。 (2) 复位信号 (外部复位引脚上出现有效电平、WDT 复位、BOR 复位或外部端口低压检测复位) 。 HC89F0332/0322/0312 在检测到有效复位后,PCON 寄存器中的 IDL 位被复位成零,系统程序也会从 复位地址0000H 处开始执行,RAM 保持不变,SFR 的值根据不同功能模块改变。 5.3 掉电模式 掉电模式可以使HC89F0332/0322/0312 进入功耗非常低的状态。掉电模式将停止CPU和外围设备的 所有时钟信号,但如果WDT和TIMER3使能且允许在掉电模式下工作,则WDT和TIMER3模块将继续工 作。在进入掉电模式前所有CPU的状态都被保存,如PC、PSW、SFR、RAM等。 在芯片进入掉电模式之前,需要配置扩展SFR里FREQ_CLK寄存器,指明目前CPU时钟的频率, FREQ_CLK寄存器配置的值等于CPU时钟的频率值, 最小为1MHz, 假如目前CPU的运行频率为16MHz, 那就配置寄存器FREQ_CLK=0x10。 将PCON寄存器中的PD位置1,使HC89F0332/0322/0312 进入掉电模式。PD位置1是CPU进入掉电模 式之前执行的最后一条指令。 注:如果同时设置IDL位和PD位,HC89F0332/0322/0312 进入掉电模式。退出掉电模式后,CPU也 不会进入空闲模式,从掉电模式退出后硬件会清除IDL及PD位。 多种方式可以退出掉电模式: (1) 有效外部中断、LVD中断、WDT中断及TIMER3(计数时钟源选择外部低频晶振、外部时钟或 RC44K)中断。在有效的外部中断和TIMER3中断发生后,内部高频RC振荡器启动,CPU时钟和外设时 钟立即恢复,PCON寄存器中的PD位会被硬件清除,然后程序运行外部中断服务程序。在完成外部中断 服务程序之后,跳转到进入掉电模式之后的指令继续运行。
(2) 复位信号 (外部复位引脚上出现有效电平、WDT 复位、BOR 复位或外部端口低压检测复位) 。 有效的复位信号将 PCON 寄存器中的 PD 位复位成零,振荡器重新启动,CPU 时钟和外设时钟立即恢 复,系统也会从复位地址 0000H 处开始运行,RAM 保持不变,SFR 的值根据不同功能模块改变。 5.4 电源管理相关寄存器 5.4.1 电源控制寄存器 PCON 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - GF1 GF0 PD IDL 位编号 位符号 说明 7-4 - 保留位(读为0,写无效)
3 GF1 用户通用标志位1
2 GF0 用户通用标志位0
掉电模式控制位 0:正常工作模式 1:进入掉电模式(退出该模式后自动清 0)
0 IDL
空闲模式控制位 0:正常工作模式 1:进入空闲模式(退出该模式后自动清 0) 注:若同时置PD&IDL,系统将进入掉电模式,唤醒后标志被同时清除。
6 复位 6.1 复位特性 ➢ 提供多种方式复位 ➢ 所有的复位方式都有特定标志
6.2 POR(Power-On Reset)复位
HC89F0332/0322/0312单片机在上电过程中,会产生一个POR信号,此信号会复位单片机,同时置 位RSTFR寄存器里的PORF位,用户可以判断此标志以来确定是否发生POR复位。 注:POR复位后的RAM值不稳定,建议用户根据需要重新初始化相应RAM;其余复位方式不会对 RAM进行复位。
6.3 BOR(Brown-Out Reset)复位
当VDD 电压下降到 VBOR 以下, 且持续时间超过TBOR 时, 系统产生欠压复位。BOR 复位时,RSTFR 寄存器的BORF 位将被置1,用户可以判断此标志以来确定是否发生 BOR 复位。 HC89F0332/0322/0312可以通过代码选项或者寄存器来选择BOR检测的电压档位。当在代码选项中 配置完成BOR档位后,客户也可以在使用时根据情况通过配置寄存器重新配置合适的BOR检测电压。 BOR电压检测电路有一定的迟滞特性,迟滞电压为0.1V左右。即当VDD电压下降到所选BOR电压 档位时BOR复位有效,而VDD电压需要上升到BOR档位电压+0.1V时BOR复位才会解除。 欠压复位示意图如下所示,其中 TBOR 也可以通过寄存器配置,用来进行电压消抖。 系统复位 延时时间 VDD BOR_RST TBOR VBOR Figure 6-1 BOR 示意图 6.4 外部 RST 复位 用时可以将其配置为I/O口,需要在代码选项中设置。
态, 将RST̅̅̅̅̅̅复位管脚拉回高电平后, 单片机结束复位状态并从用户程序区的0000H处开始正常工作。RST 复位时,RSTFR寄存器的的EXRSTF将被置1,用户可以判断此标志以来确定是否发生外部RST复位。 6.5 外部端口低压检测复位 当外部电压过低时, 无法保证单片机正常工作。 此时, 可以利用单片机的外部端口低压检测 (PLVD) 功能对单片机进行复位,外部端口检测的电压为1.2V,此复位功能可以被禁止。PLVD复位时,RSTFR 寄存器的PLVRSTF将被置1,用户可以判断此标志以来确定是否发生外部端口低压检测复位。另外,用 户也可以通过相关寄存器来对外部端口电压检测进行消抖。 6.6 软件复位 对 IAP_CMDH 和 IAP_CMDL 寄存器按流程写入相关值,系统将产生软件复位,复位后 RSTFR 寄存器的SWRF 将被置1,用户可以判断此标志以来确定是否发生软件复位。具体操作详见FLASH IAP 操作章节相关介绍。 软件复位前建议将系统时钟切换到内部高频 RC。软件复位不会切换切换系统时钟,但会将 CLKSWR 寄存器里的 RC32M_DIV[1:0]复位成01B,CLKDIV 寄存器复位成 08H。 6.7 看门狗(WDT)复位 为了防止系统在异常情况下受到干扰,MCU程序跑飞,导致系统长时间异常工作,通常是引进看 门狗,如果MCU程序中不在规定的时间内按要求操作看门狗,就认为MCU处于异常状态,看门狗就会 强制MCU复位,芯片重新从0000H开始运行。 注:要使WDT复位,必须置WDTRST为1,即允许WDT复位功能,否则即使允许WDT运行,WDT 也只会置溢出标志,并不会复位。 6.8 堆栈溢出复位 堆栈溢出时,系统将复位,并置 SPOVF 溢出标志,必须软件清除。 堆栈溢出包含入堆溢出及出栈溢出,入栈溢出是指当前栈顶地址为 0xFF,同时又有入栈动作;出 栈溢出是指当前栈顶地址等于用户设定的栈底地址,同时又有出栈动作。 堆栈溢出复位配置有使能寄存器,当使能时,堆栈溢出才能复位系统。
6.9 复位相关寄存器 6.9.1 复位标志寄存器 RSTFR 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R R/W R/W POR复位 1 x x x x 0 0 0 EXRST复位 u 1 u u u 0 u u BOR复位 u u 1 u u 0 u u WDT复位 u u u 1 u 0 u u 软复位 u u u u 1 0 u u 堆栈溢出复位 u u u u u 0 1 u PLVD复位 u u u u u 0 u 1 位符号 PORF EXRSTF BORF WDTRF SWRF - SPOVF PLVRSTF 注:x表示不确定的值,u表示该值由当前复位方式前的值决定,建议在POR复位后清零一下该寄存器。 位编号 位符号 说明
7 PORF
上电复位标志位 0:无上电复位 1:发生上电复位,软件清 0
6 EXRSTF
外部RST 复位标志位 0:无外部 RST 复位 1:发生外部 RST 复位,软件清 0
5 BORF
欠压复位标志位 0:无欠压复位 1:发生欠压复位,软件清 0
4 WDTRF
WDT 复位标志位 0:无 WDT 复位 1:发生 WDT 复位,软件清0
3 SWRF
软件复位标志位 0:无软件复位 1:发生软件复位,软件清0 2 - 保留
1 SPOVF
堆栈溢出标志位 0:无堆栈溢出复位 1:堆栈溢出复位,软件清 0
0 PLVRSTF
外部端口电压检测复位标志位 0:外部端口电压检测复位 1:发生外部端口电压检测复位,软件清 0
6.9.2 BOR 电压检测控制寄存器 BORC
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R R R/W R/W R/W 复位值 1 0 0 0 0 0 1 1 位符号 BOREN BOR_DBC_EN BOR_PD_EN - BORVS[2:0] 位编号 位符号 说明
7 BOREN
BOR 使能位 0:禁止 BOR 1:允许 BOR
6 BOR_DBC_EN
BOR 消抖使能位 0:不使能 1:使能
5 BOR_PD_EN
BOR 电源使能位 0:不使能 1:使能 注:此位使能后,当 BOR 复位时,芯片进入 STOP 模式 4-3 - 保留位(读为0,写无效) 2-0 BORVS[2:0] BOR 检测电压点选择位 011:2.6V 100:3.0V 101:3.6V 110:3.9V 111:4.2V 其他:保留位
6.9.3 BOR 电压检测去抖控制寄存器 BORDBC
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 BORDBC[7:0] 位编号 位符号 说明 7-0 BORDBC[7:0] BOR 消抖控制位 消抖时间 = BORDBC[7:0] * 8TCPU +2 TCPU 注:需要使能 BOR_DBC_EN,否则BOR 不消抖。 注:掉电模式下自动关闭 BOR 消抖功能,退出掉电模式自动打开。
6.9.4 外部 RST 去抖控制寄存器 RSTDBC 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 1 1 1 1 位符号 RSTDBC[7:0] 位编号 位符号 说明 7-0 RSTDBC[7:0] 外部RST 消抖控制位 消抖时间 = RSTDBC[7:0] * 8TCPU +2 TCPU 注:掉电模式下自动关闭外部 RST 消抖功能,退出掉电模式又自动打开。 6.9.5 堆栈溢出复位使能寄存器 SPOV_RSTEN 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R R/W 复位值 0 0 0 0 0 0 0 0 位符号 - SPOV_RSTEN 位编号 位符号 说明 7-1 - 保留位(读为0,写无效)
0 SPOV_RSTEN
堆栈溢出复位使能位 0:不使能堆栈溢出复位 1:使能堆栈溢出复位
7 通用及复用I/O 7.1 通用及复用 I/O 特性 ➢ 提供最多18 个双向I/O 端口 ➢ 多种模式可配
7.2 I/O 模式
HC89F0332/0322/0312 所有 I/O 口均可由软件配置成多种工作类型之一,具体为:输入、带上拉 输入、带下拉输入、模拟输入、强推挽输出、开漏输出和开漏带上拉输出,并且输入可以配置为施密 特输入。 如果P2.7 被配置为复位脚,其端口是施密特输入上拉状态。 HC89F0332/0322/0312在输入模式时 (不包含模拟输入) , 任何读操作, 数据来源都来自引脚电平。 而在输出模式时,通过指令来区分读数据来源,采用“读-修改-写”指令时,为读寄存器值,其它指令为 读引脚电平。 HC89F0332/0322/0312增加了一组只读寄存器P0OUT、P1OUT、P2OUT,在输出模式时,可以通过 读这组寄存器直接获得写到端口数据寄存器的值。 HC89F0332/0322/0312首先将需要修改的寄存器的内容读回ALU,对相应位进行修改,然后再整个 写回原来的寄存器地址,完成该功能的指令就叫做“读-修改-写”指令。 “读-修改-写”指令是单片机内部自己执行的,它发生在写IO口的时候,当写IO口的时候它先把IO 的当前状态读回来,根据要写的数据修改读回来的数据,再写到IO口;读引脚是直接读引脚的当前状 态,当前引脚是高电平,读回来的就是高电平,低电平时读回来的就是低电平。 “读-修改-写” 指令包括以下指令:INC direct、DEC direct、ANL direct,A、ANL direct, #data、ORL direct,A、 ORL direct, #data、XRL direct,A、XRL direct, #data、DJNZ direct,rel、MOV bit, C、 CLR bit、SETB bit、 CPL bit、JBC bit,rel。详见第19章节的指令表。
7.3 I/O 功能框图
D_O ODEN 端口上拉选择 PLEN SMTMUXPAD_I INEN PAD_A SMTEN VCC VCC 输入部分 输出部分 VCC 模式译码器 端口模式配置 Figure 7-1 I/O 功能框图
7.4 I/O 端口相关寄存器
7.4.1 P0 端口数据寄存器 P0
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 P0[7:0] 位编号 位符号 说明 7-0 P0[7:0] P0 端口数据寄存器
7.4.2 P1 端口数据寄存器 P1
位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R/W R/W 复位值 0 0 0 0 0 0 0 0 位编号 位符号 说明 1-0 P1[1:0] P1 端口数据寄存器
7.4.3 P2 端口数据寄存器 P2
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 P2[7:0] 位编号 位符号 说明 7-0 P2[7:0] P2 端口数据寄存器
7.4.4 P0 端口功能选择寄存器 P0M0、P0M1、P0M2、P0M3
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P01M[3:0] P00M[3:0] P0M1 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P03M[3:0] P02M[3:0] P0M2 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P05M[3:0] P04M[3:0] P0M3 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P07M[3:0] P06M[3:0] 位编号 位符号 说明 7-4 3-0 P0xM[3:0] (x = 0...7) P0.x 端口模式配置位 0000:输入(无SMT) 0001:带下拉输入(无SMT) 0010:带上拉输入(无SMT) 0011:模拟输入 0100:输入(SMT) 0101:带下拉输入(SMT) 0110:带上拉输入(SMT) 0111:保留(模拟输入) 1x00:推挽输出 1x01:开漏输出 1x10:开漏带上拉输出 1x11:保留(推挽输出) 注:x 为0 或1。
7.4.5 P1 端口功能选择寄存器 P1M0
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P11M[3:0] P10M[3:0] 位编号 位符号 说明 7-4 3-0 P1xM[3:0] (x = 0...1) P1.x 端口模式配置位 0000:输入(无SMT) 0001:带下拉输入(无SMT) 0010:带上拉输入(无SMT) 0011:模拟输入 0100:输入(SMT) 0101:带下拉输入(SMT) 0110:带上拉输入(SMT) 0111:保留(模拟输入) 1x00:推挽输出 1x01:开漏输出 1x10:开漏带上拉输出 1x11:保留(推挽输出) 注:x 为0 或1。
7.4.6 P2 端口功能选择寄存器 P2M0、P2M1、P2M2、P2M3
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P21M[3:0] P20M[3:0] P2M1 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P23M[3:0] P22M[3:0] P2M2 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P25M[3:0] P24M[3:0]
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 1 1 0 0 1 1 位符号 P27M[3:0] P26M[3:0] P2 组端口中P2.7、P2.5、P2.4、P2.3 支持端口上下拉同时使能功能。P2 组其余端口不支持上述功 能。具体配置说明见下: 位编号 位符号 说明 7-4 3-0 P2xM[3:0] (x = 0、1、2、 P2.x 端口模式配置位 0000:输入(无SMT) 0001:带下拉输入(无SMT) 0010:带上拉输入(无SMT) 0011:模拟输入 0100:输入(SMT) 0101:带下拉输入(SMT) 0110:带上拉输入(SMT) 0111:保留(模拟输入) 1x00:推挽输出 1x01:开漏输出 1x10:开漏带上拉输出 1x11:保留(推挽输出) 注:x 为0 或1。 位编号 位符号 说明 7-4 3-0 P2xM[3:0] (x = 3、4、5、 P2.x 端口模式配置位 0011:模拟输入 0100:输入(SMT) 0101:带下拉输入(SMT) 0110:带上拉输入(SMT) 0111:模拟通道,上下拉同时使能 1x00:推挽输出 1101:开漏输出 1110:开漏带上拉输出 其他值:系统保留,请勿操作 注:x 为0 或1。
7.4.7 端口上拉电阻选择寄存器 P0LPU 位编号 7 6 5 4 3 2 1 0 R/W R R R/W R/W R R R R 复位值 0 0 0 0 0 0 0 0 位符号 - P02PU[1:0] - 位编号 位符号 说明 7-6 - 保留位 5-4 P02PU[1:0] 端口上拉电阻选择位 00:50KΩ 01:100KΩ 10:150KΩ 11:300KΩ 注:阻值为VDD @5V 时参考值。 3-0 - 保留位 7.4.8 端口消抖控制寄存器 P00DBC、P01DBC、P02DBC 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 P0xDBCLK[1:0] P0xDBCT[5:0] 位编号 位符号 说明 7-6 P0xDBCLK [1:0] 端口消抖时钟选择 00:Fosc /1 01:Fosc /4 10:Fosc /16 11:Fosc /64 注:x 为0、1 或2。 5-0 P0xDBCT [5:0] 端口消抖计数时钟个数,当配置为 00 时,表示不消抖。 消抖时间是指端口输入时,其对应端口电平所需要维持的时间,需 要注意的是,分配到这三个管脚上的功能脚、外部中断输入、故障 检测引脚也受消抖控制,其中P02DBC[7:0]表示P0.2 消抖控制寄存 注意:P0xDBCT [5:0]配置的消抖时间是一个范围, 分频系数 * Tosc* P0xDBCT [5:0] - Tosc <消抖时间<分频系数 * Tosc* (P0xDBCT [5:0] +1) - Tosc。
7.5 外设功能引脚全映射控制 7.5.1 外设功能引脚映射控制寄存器 扩展 SFR 地址 扩展 SFR 名称 扩展 SFR 地址 扩展 SFR 名称 扩展 SFR 地址 扩展 SFR 名称 扩展 SFR 地址 扩展 SFR 名称 0xFF80 T0_MAP 0x0010 PWM0_MAP 0x0020 TXD_MAP 0x0030 - 0xFF81 T1_MAP 0x0011 PWM01_MAP 0x0021 RXD_MAP 0x0031 - 0xFF82 - 0x0012 - 0x0022 - 0x0032 - 0xFF83 T3_MAP 0x0013 - 0x0023 - 0x0033 - 0xFF84 T4_MAP 0x0014 PWM1_MAP 0x0024 𝐒𝐒_MAP 0x0034 - 0xFF85 T5_MAP 0x0015 PWM11_MAP 0x0025 SCK_MAP 0x0035 - 0xFF86 - 0x0016 - 0x0026 MOSI_MAP 0x0036 - 0xFF87 - 0x0017 - 0x0027 MISO_MAP 0x0037 - 0xFF88 0x0018 PWM2_MAP 0x0028 - 0x0038 - 0xFF89 0x0019 PWM21_MAP 0x0029 - 0x0039 - 0xFF8A 0x001A - 0x002A - 0x003A - 0xFF8B 0x001B - 0x002B - 0x003B - 0xFF8C 0x001C PWM3_MAP 0x002C - 0x003C - 0xFF8D 0x001D - 0x002D - 0x003D - 0xFF8E - 0x001E - 0x002E - 0x003E - 0xFF8F CLKO_MAP 0x001F - 0x002F - 0x003F - 注:以上SFR 为外部扩展 XSFR,采用 MOVX 来进行读写。 位编号 7 6 5 4 3 2 1 0 R/W R R R/W R/W R R/W R/W R/W 复位值 0 0 1 1 0 1 1 1 位符号 - FPORT[1:0] - FPIN[2:0] 位编号 位符号 说明 7-6 - 保留位 5-4 FPORT[1:0] 映射端口选择 00:P0 01:P1 10:P2 11:P3 3 - 保留位 2-0 FPIN[2:0] 映射端口输出脚选择 FPIN[2:0] = x(x = 0…7) , 表示选择对应端口名的 x(x = 0…7)脚 注:输出功能,系统将禁止其多对一映射,但输入功能,系统将允许其多对一映射。 上面寄存器的复位值为 0x37,这样复位后IO 都为 GPIO,用户在使用外设功能脚之前必须先配置 上面的寄存器,否则外设功能将无法使用。
使用举例: 将UART 的TXD 和RXD 分别映射到 P2.1 和P2.2 上,用户在启动 UART 之前应该配置下面命令: TXD_MAP = 0x21; // TXD-->P2.1 RXD_MAP = 0x22; //RXD-->P2.2 如果用户在下一次的设计时,需要重新将 UART 的TXD 和 RXD 分别映射到 P0.4 和P0.5 上,那 用户需要进行如下的配置: TXD_MAP = 0x04; // TXD-->P0.4 RXD_MAP = 0x05; //RXD-->P0.5 多个输出映射到一个端口上时,只能有一个输出有效,下面是默认的优先级 优先级顺序 复用端口功能
1 PWM0
2 PWM01
3 PWM1
4 PWM11
5 PWM2
6 PWM21
7 PWM3
8 CLKO
9 T0_OUT
10 T1_OUT
11 T4_OUT
12 TXD
13 RXD
14 SCK
15 MOSI
16 MISO
比如:CLKO_MAP 配置为 0x01 选择P0.1 口作为 CLKO 的输出口,T4_MAP 也配置为0x01,这 个时候硬件会按上面的优先级,P0.1 将配置为 CLKO 的输出口,而 T4_MAP 的配置无效。 当所有的端口映射控制寄存器都不等于 0x01 时, 即所有的功能口都不选择P0.1 作为输入输出口, 此时这个端口的输出就是 P0 端口数据寄存器的第 1 位。 输入可以配置为多个功能从一个 PAD 引脚进入,比如: T0_MAP 配置为 0x23,则选择 P2.3 作为 T0 的输入口,T5_MAP 也配置为 0x23,这样从 P2.3 端 口进入的信号同时作用于 T3 和T5。 将TXD 和 RXD 都配置到一个端口上时,并且此端口设置为输出,则TXD 和 RXD 将内部连接起 在输入时,无论端口是什么功能,读端口数据寄存器都读芯片引脚上值。
8 中断 8.1 中断特性 ➢ 15 个中断源 ➢ 4 级中断优先级 ➢ 16 个外部中断 8.2 中断汇总 中断源 向量地址 允许位 标志位 查询优先级 中断号(C 语 INT0 0003H EX0 INT0F 1(最高) 0 T0 000BH ET0 TF0 2 1 INT1 0013H EX1 INT1F 3 2 T1 001BH ET1 TF1 4 3 UART 0023H ES1 TI/RI 5 4 WDT 002BH EWDT WDTRF 6 5 LVD 0033H LVDIE LVDF 7 6 SPI 0043H ESPI SPIF/MODF 8 8 T3 004BH ET3 TF3 9 9 T4 0053H ET4 TF4 10 10 PWM 005BH PWMxIE (x = 0...3) PWMxIF (x = 0...3) 11 11 T5 0063H ET5 TF5 12 12 ADC 006BH EADC ADCIF/AMWIF 13 13 INT2-INT7 0073H EINx (x =2...7) INTxF (x = 2...7) 14 14 INT8-INT15 007BH EINx (x=8...15) INTxF (x = 8...15) 15 15 注:除以上允许位及标志位被置位外,要响应中断必须中断总开关 EA 也被使能,否则不响应中断。 8.3 中断向量 当一个中断产生时,程序计数器内容被压栈,相应的中断向量地址被载入程序计数器。中断向量的 地址在中断汇总表中详细列出。
8.4 中断优先级 每个中断源都可被单独设置为4个中断优先级之一,分别通过IP0,IP1,IP2,IP3中相应位来实现。 中断优先级服务程序描述如下: 响应一个中断服务程序时,可响应更高优先级的中断, 但不能响应同优先级或低优先级的另一个中 响应最高级中断服务程序时, 不响应其它任何中断。 如果不同中断优先级的中断源同时申请中断时, 响应较高优先级的中断申请。 如果同优先级的中断源在指令周期开始时同时申请中断, 那么内部查询优先级确定中断请求响应顺 序。查询优先级详细参照中断汇总。 中断优先级 优先级控制位(x 为功能模块) 优先级 Px[1:0] 00 优先级0(最低) 01 优先级1 10 优先级2 11 优先级3(最高)
8.5 中断处理 中断标志在CPU时钟的上升沿被采样,如果一个标志被置起,那么CPU捕获到后中断系统调用一个 长转移指令(LCALL)调用其中断服务程序,但由硬件产生的LCALL会被下列任何条件阻止: 1. 同级或更高级的优先级中断在运行中。 2. 当前的周期不是执行中指令的最后一个周期。换言之,正在执行的指令完成前,任何中断请求 都得不到响应。 3. 正在执行的是一条 RETI 或者访问专用寄存器 IE/IE1 或是IP0/IP1/IP2/IP3 的指令。换言之,在 RETI 或者读写 IE/IE1 或是 IP0/IP1/IP2/IP3 之后,不会马上响应中断请求,而至少在执行一条其它指 令之后才会响应。 中断服务程序ISR完成和该中断相应的一些操作。ISR以RETI(中断返回)指令结束,将PC值从栈 中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。 当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是该中断源相对应的中断服 务程序的起始地址。各中断源服务程序的入口地址(即中断向量)明细可参照中断汇总。 由于中断向量入口地址位于程序存储器的开始部分,所以主程序的第1条指令通常为跳转指令,越 过中断向量区(LJMP MAIN)。 需要注意的是, 不能用RET指令代替RETI指令,RET指令虽然也能控制PC返回到原来中断的地方, 但RET指令没有清零中断优先级状态触发器的功能,中断控制系统会认为中断仍在进行,其后果是与此 同级或低级的中断请求将不被响应。 若用户在中断服务程序中进行了入栈操作,则在RETI指令执行前应进行相应的出栈操作,即在中 断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回。 8.6 中断响应时间 每一个中断的响应时间都不同, 这取决于中断自身特点和发生中断时正在执行的指令。 如果检测出 一个中断,这个中断的请求标志位就会被置起,内部电路会保持这个标志位,CPU会在第二个时钟周期 产生中断。如果响应有效且条件允许,在下一个指令执行的时候硬件LCALL指令将调用请求中断的服 务程序,否则中断被挂起。执行LCALL指令需要3个时钟周期。因此,从中断标志置位到开始执行中断 服务程序至少需要5个时钟周期。 当中断请求因前述的的三个情况受阻时,中断响应时间就会加长。 如果同级或更高优先级的中断正 在执行,额外的等待时间取决于正执行的中断服务程序的长度。 如果正在执行的指令还没有进行到最后一个周期, 假如正在执行RETI指令, 则完成正在执行的RETI 指令,需要4个时钟周期,加上为完成下一条指令所需的最长时间4个时钟周期,若系统中只有一个中断 源,再加上LCALL调用指令3个时钟周期,则最长的响应时间是13个时钟周期。 因此一个简单的中断系统响应时间,总是大于5个时钟周期并且不超过13个时钟周期。 8.7 外部中断 HC89F0332/0322/0312有4个外部中断向量入口,外部中断0~1分别有一个独立的中断向量入口,外 部中断2~7共用一个中断向量入口,外部中断8~15共用一个中断向量入口,因而共有16个外部中断端口 输入,所有的中断都可以设定4种触发方式,分别为上升沿、下降沿、双沿及低电平。 当调用中断服务程序后, 外部中断0~15标志必须软件清除。如果中断服务完成后而外部中断仍旧维
持,则会产生下一次中断。 外部中断0~2功能端口分别在端口P0.0~P0.2上, 在使用外部中断0~2时用户可设置外部中断0~2产生 有效中断请求所需要的消抖时间,设置端口P0.0~P0.2的消抖时间即可,具体设置详见端口消抖控制寄 存器 P00DBC、P01DBC、P02DBC。 8.8 中断相关寄存器 8.8.1 中断允许寄存器 IE、IE1 IE 位编号 7 6 5 4 3 2 1 0 R/W R/W R R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 EA - EWDT ES1 ET1 EX1 ET0 EX0 位编号 位符号 说明 7 EA CPU 总中断允许控制位 0:禁止CPU 中断 1:允许CPU 中断 6 - 保留位
5 EWDT
WDT 中断允许位 0:禁止WDT 中断 1:允许WDT 中断
4 ES1
UART 中断允许位 0:禁止UART 中断 1:允许UART 中断
3 ET1
T1 中断允许位 0:禁止T1 中断 1:允许T1 中断
2 EX1
外部中断1 中断允许位 0:禁止INT1 中断 1:允许INT1 中断
1 ET0
T0 中断允许位 0:禁止T0 中断 1:允许T0 中断
0 EX0
外部中断0 中断允许位 0:禁止INT0 中断 1:允许INT0 中断
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 EX8_15 EX2_7 EADC ET5 - ET4 ET3 ESPI 位编号 位符号 说明
7 EX8_15
外部中断8~15 中断允许位 0:禁止INT8~INT15 中断 1:允许INT8~INT15 中断 注:INT8~INT15 共用同一中断向量。
6 EX2_7
外部中断2~7 中断允许位 0:禁止INT2~INT7 中断 1:允许INT2~INT7 中断 注:INT2~INT7 共用同一中断向量。
5 EADC
ADC 转换完成中断允许位 0:禁止ADC 中断 1:允许ADC 中断
4 ET5
T5 中断允许位 0:禁止T5 中断 1:允许T5 中断 3 - 保留位
2 ET4
T4 中断允许位 0:禁止T4 中断 1:允许T4 中断
1 ET3
T3 中断允许位 0:禁止T3 中断 1:允许T3 中断
0 ESPI
SPI 中断允许位 0:禁止SPI 中断 1:允许SPI 中断
8.8.2 中断优先级选择寄存器 IP0、IP1、IP2、IP3 IP0 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PT1[1:0] PX1[1:0] PT0[1:0] PX0[1:0] 位编号 位符号 说明 7-6 PT1[1:0] T1 中断优先级控制位 5-4 PX1[1:0] INT1 中断优先级控制位 3-2 PT0[1:0] T0 中断优先级控制位 1-0 PX0[1:0] INT0 中断优先级控制位 IP1 位编号 7 6 5 4 3 2 1 0 R/W R R R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - PLVD[1:0] PWDT[1:0] PS1[1:0] IP2 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PPWM[1:0] PT4[1:0] PT3[1:0] PSPI[1:0] 位编号 位符号 说明 7-6 PPWM [1:0] PWM 中断优先级控制位 5-4 PT4[1:0] T4 中断优先级控制位 3-2 PT3[1:0] T3 中断优先级控制位 1-0 PSPI [1:0] SPI 中断优先级控制位 位编号 位符号 说明 7-6 - 保留位 5-4 PLVD[1:0] LVD 中断优先级控制位 3-2 PWDT[1:0] WDT 中断优先级控制位 1-0 PS1[1:0] UART 中断优先级控制位
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PX8_15 [1:0] PX2_7[1:0] PADC[1:0] PT5[1:0] 位编号 位符号 说明 7-6 PX8_15 [1:0] INT8_15 中断优先级控制位 5-4 PX2_7[1:0] INT2_7 中断优先级控制位 3-2 PADC[1:0] ADC 中断优先级控制位 1-0 PT5[1:0] T5 中断优先级控制位 中断优先级 优先级控制位(x 为功能模块) 优先级 Px[1:0] 00 优先级0(最低) 01 优先级1 10 优先级2 11 优先级3(最高) 8.8.3 外部中断电平选择寄存器 PITSx(x=0~3) PITS0 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IT3[1:0] IT2[1:0] IT1[1:0] IT0[1:0] PITS1 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IT7[1:0] IT6[1:0] IT5[1:0] IT4[1:0] PITS2 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IT11[1:0] IT10[1:0] IT9[1:0] IT8[1:0]
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 IT15[1:0] IT14[1:0] IT13[1:0] IT12[1:0] 位编号 位符号 说明 7-6 5-4 3-2 1-0 ITx[1:0] (x = 0…15) 外部中断触发沿选择位 00:低电平中断 01:下降沿中断 10:上升沿中断 11:双沿中断 8.8.4 外部中断 2-15 使能控制寄存器 PINTEx(x=0~1) PINTE0 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R R 复位值 0 0 0 0 0 0 0 0 位符号 EINT7 EINT6 EINT5 EINT4 EINT3 EINT2 - 位编号 位符号 说明 7-2 EINTx (x =2...7) 外部中断控制位(INT2~INT7) 0:禁止该端口中断 1:允许该端口中断 注:只要相应的EINTx(x =2...7)被允许,对应的中断标志就可能被置1,反 之,对应标志不会被置 1。 1-0 - 保留位(读为0,写无效)
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 EINT15 EINT14 EINT13 EINT12 EINT11 EINT10 EINT9 EINT8 位编号 位符号 说明 7-0 EINTx (x =8...15) 外部中断控制位(INT8~INT15) 0:禁止该端口中断 1:允许该端口中断 注:只要相应的 EINTx(x =8...15)被允许,对应的中断标志就可能被置 1, 反之,对应标志不会被置 1。 8.8.5 外部中断标志寄存器 PINTFx(x=0~1) PINTF0 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 INT7F INT6F INT5F INT4F INT3F INT2F INT1F INT0F 位编号 位符号 说明 7-2 INTxF (x =2...7) INT2-INT7 中断请求标志位 0:软件清0 1:符合外部中断时,硬件置 1 1-0 INTxF (x = 0,1) INT0 和INT1 中断请求标志位 0:中断响应时硬件自动清 0,或软件清0 1:符合外部中断时,硬件置 1 PINTF1 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 INT15F INT14F INT13F INT12F INT11F INT10F INT9F INT8F 位编号 位符号 说明 7-0 INTxF (x =8...15) INT8-INT15 中断请求标志位 0:软件清0 1:符合外部中断时,硬件置 1
8.8.6 外部中断 01 管脚选择寄存器 INT01_PINS INT01_PINS 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - INT1_PINS INT0_PINS 位编号 位符号 说明 7-2 - 保留
1 INT1_PINS
INT1 管脚选择位 0: P0.1 1: P1.1
0 INT0_PINS
INT0 管脚选择位 0: P0.0 1: P1.0
9 定时器/计数器 9.1 定时器/计数器特性 ➢ 定时器/计数器T0&T1 是不完全兼容标准 8051,差异主要是在方式0 的功能定义不同 ➢ 定时器/计数器T0&T1 支持16 位自动重载 9.2 定时器/计数器 Tx(x = 0,1) 9.2.1 定时器/计数器 Tx(x = 0,1)的工作方式 每个定时器的两个数据寄存器(THx & TLx (x = 0,1))可作为一个16 位寄存器来访问,它们由寄 存器TCON 和TMOD 控制。IE0 寄存器的ET0 和ET1 位置1 能允许定时器 0 和定时器 1 中断。 (详见 中断章节) 。 通过计数器/定时器方式寄存器(TMOD)的方式选择位 Mx[1:0],选择定时器工作方式。 Mx[1:0] 工作方式 描述 00 方式0 16位自动重载定时器/计数器16 01 方式1 16 位定时器/计数器 10 方式2 8位自动重载定时器/计数器 11 方式3 T0分成两个(TL0/TH0)独立的8位定时器/计数器(T1无此模式) 9.2.1.1 方式0: 16位自动重载定时器/计数器 ÷12 ÷1 TH0 (8 BITS) TL0 (8 BITS) TF0 中断请求T0x12=0 T0x12=1 所选 TIMER0 时钟源 INT0 GATE TR C/T=0 C/T=1 T0OUT T0OUT RH0 (8 BITS) RL0 (8 BITS) *须先将功能端口映射到所设I/O Figure 9-1 TIMER0 方式0 功能框图 方式0 与标准8051 功能不兼容,在此方式下为16 位自动重载定时器/计数器,当THx 和TLx(x = 0,1)被写时,用作定时器重载寄存器,当被读时,被用作计数寄存器。TRx(x = 0,1) 为0 时,按顺序写 THx 和TLx(x = 0,1) 两个寄存器,写的值同时被写进重载寄存器和计数寄存器,TRx(x = 0,1)置1,计 数寄存器开始从写的值递增计数,在计数到 0xFFFF 后,再来一个计数时钟,计数器就会发生溢出, 此时TFx(x = 0,1) 被置为1,同时重载寄存器的 16 位数据被自动重载入计数寄存器中,计数器又开始 从这个重载的数值递增计数。 在TRx(x = 0,1)为1 时,对THx & TLx(x = 0,1)的写操作,不会影响计数器的值,只能改变重载寄
存器的值,这个改变后的值在下一次溢出时重载进计数寄存器中。只有 TRx(x = 0,1) 为0 时,对THx 和TLx(x = 0,1)的写操作,同时会改变计数寄存器和重载寄存器的值。 由于对TLx(x = 0,1)和THx(x = 0,1)的写操作需要2条指令才能完成, 为保证精确计数, 对THx(x = 0,1) 和TLx(x = 0,1)寄存器的写操作都以对TLx(x = 0,1)寄存器的写操作作为基准。当写入重载寄存器时,写 THx(x = 0,1)寄存器不会立即生效,而是暂存在一个缓冲寄存器中,只有对TLx(x = 0,1)寄存器的写操作 才会使THx(x = 0,1)和TLx(x = 0,1)寄存器同时生效。 因此,THx(x = 0,1)和TLx(x = 0,1)读写操作遵循以下顺序: 写操作:先高位后低位 读操作:先高位后低位 需要注意的是写操作时,当TRx(x = 0,1)为0,先写高位再写低位,重载数据将直接重载到计数寄 存器中,当TRx(x = 0,1)为1,先写高位再写低位,重载数据只会在下一次溢出时才会被重载到计数寄 存器中。若先写低位再写高位,高位数据将无效(无效:表示发生重载时对应数据不能被更新) ,直到 下一次操作写入低位数据, 前一次写高位的数据才会有效 (有效表示发生重载时对应数据可以被更新) 。 若只写低位时,低位数据也将有效,例如对 T0 依次做如下操作时: (1) TH0 = 0x05; (2) TL0 = 0x08; //此时若发生重载,重载到计数器中的数据为 0x0508 (3) TH0 = 0x06; //此时若发生重载,重载到计数器中的数据仍为 0x0508 (4) TL0 = 0x08; //此时若发生重载,重载到计数器中的数据为 0x0608 (5) TL0 = 0x09; //此时若发生重载,重载到计数器中的数据为 0x0609 显然只要修改重载数据,低位都必须再写入一次,建议每次修改同时修改。 注:方式1、2、3 时无此要求。 9.2.1.2 方式1: 16 位定时器/计数器 ÷12 ÷1 TH0 (8 BITS) TL0 (8 BITS) TF0 中断请求 T0x12=0 T0x12=1 所选 TIMER0 时钟源 INT0 GATE TR0 C/T=0 C/T=1 *须先将功能端口映射到所设I/O Figure 9-2 TIMER0 方式1 功能框图 在方式1中,定时器Tx(x = 0,1)为16位计数器/定时器。THx(x = 0,1)寄存器存放16位计数器/定时器的 高8位,TLx(x = 0,1)存放低8位。 当16位定时器寄存器递增溢出时, 系统置起定时器溢出标志TFx(x = 0,1)。 如果定时器x中断被允许,将会产生一个中断。 C/TX(x = 0,1)位选择计数器/定时器的功能,如果C/T𝑋(X = 0,1) = 1,将工作在外部计数模式,当出 现定时器Tx(x = 0,1)外部计数时钟的下降沿时,将使定时器Tx数据寄存器加1。如果C/T𝑋(x = 0,1) = 0, 选择系统时钟为定时器Tx(x = 0,1)的时钟源。 当GATEx(x = 0,1) = 0时,TRx置1则打开定时器。 当GATEx(x = 0,1) = 1时,只有在外部输入信号INTx(x = 0,1)为高电平时TRx(x = 0,1)才会被置1,定 时器Tx才会计数,从而可测量INTx(x = 0,1)的正脉冲宽度。TRx(x = 0,1)位置1不强行复位定时器,这意 味着如果TRx置1,定时器寄存器将从上次TRx(x = 0,1)清0时的值开始计数。所以在允许定时器之前,应
该设定定时器寄存器的初始值。 9.2.1.3 方式2: 8 位自动重载定时器/计数器 ÷12 ÷1 TL0 (8 BITS) TF0 中断请求T0x12=0 T0x12=1 所选 TIMER0 时钟源 INT0 GATE TR0 C/T=0 C/T=1 T0 pin T0OUT T0OUT TH0 (8 BITS) *须先将功能端口映射到所设I/O Figure 9-3 TIMER0 方式2 功能框图 方式2中,定时器Tx(x = 0,1)是8位自动重载计数器/定时器。TLx(x = 0,1)存放计数值,THx(x = 0,1) 存放重载值。 当在TLx(x = 0,1)中的计数器溢出至0x00时, 置起定时器溢出标志TFx(x = 0,1), 寄存器THx(x = 0,1)的值被重载入寄存器TLx(x = 0,1)中。 如果定时器中断使能, 当TFx(x = 0,1)置1时将产生一个中断。 而在THx(x = 0,1)中的重载值不会改变。在允许定时器正确计数开始之前,TLx(x = 0,1)必须初始化为所 需的值。 除了自动重载功能外,方式2中的计数器/定时器的使能和配置与方式1和0是一致的。可配置寄存器 TCON2中的TxX12(x = 0,1)位选择系统时钟或系统时钟的1/12作为定时器Tx(x = 0,1)的时钟源。 当作为定时器应用时, 可配置寄存器TCON1 中的TxOUT[1:0](x = 0,1)位使定时器Tx(x = 0,1)溢出 时Tx(x = 0,1)脚自动翻转。 9.2.1.4 方式3: 两8位定时器/计数器(T1无此方式) ÷12 ÷1 TL0 (8 BITS) T0x12=0 T0x12=1 所选 TIMER0 时钟源 INT0 GATE TR0 C/T=0 C/T=1 T0 pin TH0 (8 BITS) TF0 中断请求 ÷12 T0x12=0 T0x12=1 所选 TIMER1 时钟源 TF1 中断请求 TR1 *须先将功能端口映射到所设I/O FigFigure 9-4 TIMER0 方式3 功能框图 在方式3中,定时器T0用作两个独立的8位计数器/定时器,分别由TL0和TH0控制。TL0使用定时器 0的控制(在TCON中)和状态(在TMOD中)位:TR0,C/T̅0,GATE0和TF0。TL0能用系统时钟或外 部输入信号作为时钟源。 TH0只能用作定时器功能,时钟源来自系统时钟。TH0由定时器T1的控制位TR1控制使能,溢出时 定时器T1溢出标志TF1置1,控制定时器T1中断。
定时器0工作在方式3时,定时器1可以工作在方式0、1或2,但是不能置TF1标志和产生中断。TH1 和TL1只能用作定时器功能,时钟源来自系统时钟,GATE1位无效。T1输入脚的上拉电阻也无效。定时 器1由方式控制使能与否,因为TR1被定时器0占用。定时器1在方式0、1或2时使能,在方式3时被关闭。 可配置寄存器TCON1中的TxX12(x = 0,1)位选择系统时钟或系统时钟的1/12作为定时器Tx(x = 0,1) 的时钟源。 9.2.2 定时器/计数器 Tx(x = 0,1)相关寄存器 9.2.2.1 定时器Tx(x = 0,1)控制寄存器 TCON、TCON1 TCON 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R R R R 复位值 0 0 0 0 0 0 0 0 位符号 TF1 TR1 TF0 TR0 - 位编号 位符号 说明 7,5 TFx (x = 0,1) Tx(x = 0,1)的溢出标志位 0:中断响应时硬件自动清 0,或软件清0 1:计数溢出时,硬件置 1 6,4 TRx (x = 0,1) Tx(x = 0,1)运行控制位 0:停止 Tx 工作 1:启动 Tx 工作 3-0 - 保留位 TCON1 位编号 7 6 5 4 3 2 1 0 R/W R R R/W R/W R R R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - T1OUT T1X12 - - T0OUT T0X12 位编号 位符号 说明 7,6,3,2 - 保留位(读为0,写无效) 5,1 TxOUT (x = 0,1) Tx(x = 0,1)比较输出功能允许位 0:禁止定时器 Tx 比较输出功能 1:允许定时器 Tx 比较输出功能 4,0 TxX12 (x = 0,1) Tx(x = 0,1)定时器系统时钟源分频选择位 0:Tx 定时器时钟为Fosc/12 1:Tx 定时器时钟为Fosc
9.2.2.2 定时器Tx(x = 0,1)工作方式寄存器 TMOD 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 GATE1 C/T1 M1[1:0] GATE0 C/T0 M0[1:0] 位编号 位符号 说明 7,3 GATEx (x = 0,1) Tx(x = 0,1)门控位 0:只需软件置 TRx 即可启动 Tx 1:只有在 INTx 端口电平为高电平时 TRx 置1,Tx 才工作 6,2 C/Tx (x = 0,1) Tx(x = 0,1)定时/计数功能选择位 0:Tx 用于内部定时 1:Tx 用于外部计数 5-4 1-0 Mx[1:0] (x = 0,1) Tx(x = 0,1)工作方式选择位 00:方式0 16 位自动重载定时器/计数器 01:方式1 16 位定时器/计数器 10:方式2 8 位自动重载定时器/计数器 11:方式3 T0 分成两个(TL0/TH0)独立的8 位定时器/计数器;T1 停止计数 注:方式3 时TH0 占用 T1 的TR1、TF1 及中断源,由于TR1 被TH0 占用,此时需要关闭 T1 可将T1 设为工作方式 3。 9.2.2.3 定时器Tx(x = 0,1)数据寄存器 TLx(x = 0,1)、THx(x = 0,1) TLx (x = 0,1) 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TLx[7:0] (x = 0,1) 位编号 位符号 说明 7-0 TLx[7:0] (x = 0,1) Tx(x = 0,1)数据寄存器低字节 THx (x = 0,1) 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 THx[7:0] (x = 0,1) 位编号 位符号 说明 7-0 THx[7:0] (x = 0,1) Tx(x = 0,1)数据寄存器高字节
9.3 定时器 3 定时器 3 是 16 位自动重载定时器,通过两个数据寄存器 TH3 和 TL3 访问,由 T3CON 寄存器控 制。IE1 寄存器的ET3 位置1 允许定时器 3 中断。 定时器 3 只有一个工作方式:16 位自动重载计数器/定时器,可以设置预分频比,并可以工作在 掉电模式。 定时器3 有一个16 位计数器/定时器寄存器(TH3,TL3) 。当TH3 和TL3 被写时,用作定时器重 载寄存器, 当被读时, 被用做计数寄存器。TR3 位置1 使定时器 3 开始递增计数,在0xFFFF 到0x0000 时发生溢出,溢出会置 TF3 位为1,同时将重载寄存器的 16 位数据重新载入计数寄存器中。 在 TR3 为 1 时,对 TH3/TL3 的写操作,不会影响计数器的值,只会改变重载寄存器的值,这个 改变后的值在下一次溢出时会被重载进计数寄存器。只有 TR3 为 0 时,对 TH3/TL3 的写操作会同时 会改变计数寄存器和重载寄存器的值。 TH3 和TL3 读写操作遵循以下顺序:先高位后低位。 如果 T3CLKS[1:0]为 00,定时器 3 不能工作在掉电模式下。如果 T3CLKS[1:0]为 01,T3 端口输 入外部时钟,定时器 3 可以工作在普通模式或掉电模式,当 T3CLKS[1:0]为 10 或 11,即定时器 3 的 计数时钟源为 32.768KHz 低频晶振或 RC44K 时,定时器 3 也可以工作在普通模式或掉电模式。当需 要定时器3 工作在掉电模式时软件要配置 T3PD_EN 为1。 当 T3PD_EN 为 1,而且 T3CLKS[1:0]为 10 时,低频晶振在掉电模式下不会关闭,因此定时器 3 可以在掉电模式继续工作。当定时溢出时,会将芯片从掉电模式唤醒,如果中断允许的话,唤醒后的 芯片会进入定时器 3 中断。 注意:在读TH3 和TL3 时,要确保TR3 = 0(当TR=1 时,由于正在计数,读出的TH3 和TL3 不准) 。 Figure 9-5 TIMER3 功能框图
9.3.1 定时器/计数器 T3 相关寄存器 9.3.1.1 定时器T3控制寄存器 T3CON T3CON 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TF3 T3PD_EN T3PS[1:0] - TR3 T3CLKS[1:0] 位编号 位符号 说明
7 TF3
定时器3 溢出标志位 0:无溢出(硬件清0)软件也可以清 0 1:溢出(硬件置1)
6 T3PD_EN
定时器3 在掉电模式下运行控制位 0:掉电模式下禁止定时器 3 工作 1:掉电模式下允许定时器 3 工作,此时 T3CLKS[1:0]为01 或10、11 5-4 T3PS[1:0] 定时器3 预分频比选择位 00:1/1 01:1/8 10:1/64 11:1/256 3 - 保留位
2 TR3
定时器3 允许控制位 0:禁止定时器3 1:允许定时器3 1-0 T3CLKS[1:0] 定时器3 计数时钟来源选择位 00:系统时钟Fosc 01:T3 端口输入外部时钟 10:外部32.768KHz 晶体振荡器 11:RC44K 9.3.1.2 定时器T3数据寄存器 TL3、TH3 TL3 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TL3 位编号 位符号 说明 7-0 TL3 T3 数据寄存器低字节
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TH3 位编号 位符号 说明 7-0 TH3 T3 数据寄存器高字节
9.4 定时器/计数器 4 定时器4 是16 位自动重载定时器。 两个数据寄存器TH4 和TL4 可作为一个16 位寄存器来访问, 由T4CON 寄存器控制。IE1 寄存器的ET4 位置1 允许定时器 4 中断。 当 TH4 和 TL4 被写时,用作定时器重载寄存器,当被读时,被用做计数寄存器。TR4 位置 1 使 定时器4 开始递增计数。定时器在0xFFFF 到0x0000 溢出并置TF4 位为1。溢出同时,定时器重载寄 存器的16 位数据重新载入计数寄存器中。 TH4 和TL4 读写操作遵循以下顺序:先高位后低位。 9.4.1 定时器/计数器 T4 的工作方式 定时器4 有三种工作方式:16 位自动重载定时器,串口波特率发生器和有T4 边沿触发的 16 位自 动重载定时器。这些方式通过 T4CON 寄存器的 T4M[1:0]设置。 9.4.1.1 方式0: 16位自动重载定时器/计数器 定时器 4 在方式 0 为 16 位自动重载定时器。TH4 寄存器存放高 8 位,TL4 寄存器存放低 8 位。 TR4 为 0 时,按顺序写 TH4 和 TL4 两个寄存器,写的值同时被写进重载寄存器和计数寄存器;TR4 置1,计数寄存器开始从写的值递增计数,在计数到0xFFFF 后,再来一个计数时钟,计数器就会发生 溢出,此时TF4 被置为 1。同时重载寄存器的16 位数据被自动重载入计数寄存器中,计数器又开始从 这个重载的数值递增计数,如果允许定时器 4 中断则产生中断。 在 TR4 为 1 时,对 TH4 和 TL4 的写操作,不会影响计数器的值,只能改变重载寄存器的值,这 个改变后的值在下一次溢出时重载进计数寄存器中。只有 TR4 为 0 时,对 TH4 和 TL4 的写操作会同 时会改变计数寄存器和重载寄存器的值。 T4CON.0 寄存器的T4CLKS 位选择时钟源。当 T4CLKS = 1 时,定时器 4 的时钟源为外部时钟, 预分频后,计数器数据寄存器增加。当 T4CLKS = 0,定时器 4 的时钟源为系统时钟。 在比较方式中,需要软件将 T4 端口设为输出。定时器 4 从 TH4 和 TL4 预设值开始向0xFFFF 计 数,当计数器溢出时,T4 端口输出电平翻转,同时定时器 4 中断标志位被置 1。在比较方式中,定时 器4 必须工作在定时方式(T4CLKS = 0)。 *须先将功能端口映射到所设I/O 系统时钟 T4输入信号 T4CLK TR4 分频器 T4PS[1:0] 16位计数器 TL4 TH4 TF4 溢出标志 中断请求 T4CLKS=0 TC4=1 Figure 9-6 TIMER4 方式0 功能框图
9.4.1.2 方式1: 波特率发生器 通过设置T4CON 寄存器中的 T4M[1:0]为01 选择定时器4 作为波特率发生器。 该方式与自动重载 方式相似。定时器 4 的溢出会引起软件将定时器 4 重载寄存器中的 16 位值载入定时器 4 的计数器中, 此时也会产生溢出中断。如果不希望中断发生,可以关闭 ET4。波特率由下列公式计算: BaudRate = 16 × fT4/PRESCALER 65536−[TH4,TL4],用定时器4 作为波特率发生器。 上式中,fT4 为定时器4 计数所选时钟源,PRESCALER 为定时器 4 预分频比,TH4 和TL4 为定时 器4 数据寄存器。 如果TC4=1 时,可以将波特率从T4 口输出,输出波形的频率为波特率的1/2,此时定时器4 必须 工作在定时方式(T4CLKS = 0)。 9.4.1.3 方式2/3:带边沿触发的16位自动重载定时器 定时器4 在方式2/3 为16 位自动重载定时器。T4CON.0 寄存器的 T4CLKS 位一直为 0,定时器4 只能选择系统时钟为时钟源,其余设置与方式 0 一致。 方式2 中, 当TR4 位置1 后, 定时器4 等待 T4 端口的触发信号 (由T4M[1:0]控制上升/下降沿) , 一个有效的触发信号使定时器 4 开始运行。 当定时器4 内部16 位计数器从0xFFFF 到0x0000 溢出时, TF4(T4CON.7)会被置起,如定时器 4 的中断使能,将产生定时器 4 中断。溢出同时,定时器重载 寄存器的 16 位数据被重新载入内部 16 位计数器 TH4 和 TL4 中,定时器 4 将保持状态并等待下一个 触发沿。 如果TC4 = 1,在定时器4 计数时,一个触发信号会使重载寄存器的16 位数据被重新载入内部16 位计数器TH4 和TL4 中,并开始计数,但不会产生中断,内部 16 位计数器溢出后才会产生中断。 TR4 置 1 不清定时器 4 的内部 16 位计数器,在允许定时器之前应该把希望的初始化值写入重载 寄存器。 *须先将功能端口映射到所设I/O 系统时钟 T4输入信号 TR4 分频器 T4PS[1:0] 16位计数器 TL4 TH4 TF4 溢出标志 中断请求 控制 +TC4 Figure 9-7 TIMER4 方式2/3 功能框图 注意: (1) 当定时器4 在波特率发生器方式下作为定时器工作时(TR4 = 1),TH4 或TL4 不能读取或写入。 因为定时器在每个状态时间递增,可能导致读取或写入的结果不精确。因此,在访问TH4/TL4 寄存器 之前,定时器4 必须被关闭(TR4 = 0)。 (2) 当定时器4 用作计数器时,T4 引脚的输入信号频率要小于系统时钟的一半。
9.4.2 定时器/计数器 T4 相关寄存器 9.4.2.1 定时器T4控制寄存器 T4CON T4CON 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TF4 TC4 T4PS[1:0] T4M[1:0] TR4 T4CLKS 位编号 位符号 说明
7 TF4
定时器4 溢出标志位 0:无溢出(硬件清0)软件也可以清 0 1:溢出(硬件置1)
6 TC4
比较功能允许位 当T4M[1:0] = 00 或01 0:禁止定时器4 比较功能 1:允许定时器4 比较功能 当T4M[1:0] = 10 或11 0:定时器4 不能被再触发 1:定时器4 可以被再触发 5-4 T4PS[1:0] 定时器4 预分频比选择位 00:1/1 01:1/8 10:1/64 11:1/256 3-2 T4M[1:0] 定时器4 方式选择位 00:方式0,16 位自动重载定时器 01:方式1,UART 波特率发生器 10:方式2,T4 端口上升沿触发(只用系统时钟,T4CLKS 无效) 11:方式3,T4 端口下降沿触发(只用系统时钟,T4CLKS 无效)
1 TR4
定时器4 允许控制位 0:禁止定时器4 1:允许定时器4
0 T4CLKS
定时器4 计数时钟来源选择位 0:系统时钟Fosc 1:T4 端口输入外部时钟
9.4.2.2 定时器T4数据寄存器 TL4、TH4 TL4 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TL4 位编号 位符号 说明 7-0 TL4 T4 数据寄存器低字节 TH4 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TH4 位编号 位符号 说明 7-0 TH4 T4 数据寄存器高字节
9.5 定时器 5 定时器 5 是 16 位自动重载定时器。通过两个数据寄存器 TH5 和 TL5 访问,由 T5CON 寄存器控 制。IE1 寄存器的ET5 位置1 允许定时器 5 中断。 9.5.1 定时器 T5 的工作方式 9.5.1.1 方式0: 16位自动重载定时器/计数器 定时器5 在方式0 时,TH5 寄存器存放高 8 位,TL5 寄存器存放低 8 位。 当EXEN5=0,16 位定时寄存器从0xFFFF 到0x0000 递增,并溢出时,置起TF5 位,同时定时器 自动将用户软件写好的寄存器 RCAP5H 和 RCAP5L 的 16 位值装入 TH5 和 TL5 寄存器,如果允许定 时器5 中断则产生中断。 如果 EXEN5=1,溢出或在外部输入 T5(由 Reload_Sel 来选择 T5 输入的边沿)都能触发一次 16 位 重载,同时也会置起 EXF5 位。如果 ET5 被使能,TF5 和 EXF5 位都能产生中断。(T5 的沿可以引发 重载中断) T5CON.1 寄存器的 TR5 位置 1 使能定时器 5,且不清定时器 5 的计数器。在允许定时器 5 之前, 将希望的初始值写入定时器重载寄存器中。 *须先将功能端口映射到所设I/O 系统时钟 TR5 分频器 T5PS[1:0] 16位计数器 TL5 TH5 TF5 溢出标志 中断请求 Figure 9-8 TIMER5 方式0 功能框图 9.5.1.2 方式1: 波特率发生器 通过设置T5CON 寄存器中的 T5M 为01, 选择定时器5 作为波特率发生器。该方式与自动重载方 式相似。 定时器5 的溢出会将定时器 5 重载寄存器中的 16 位值载入定时器 5 的计数器中, 但溢出不会 产生中断。此时如果 EXEN5=1,则 T5 引脚上的一个下降沿/上升沿会置位 EXF5,但不会引起重载。 因此当定时器5 作为波特率发生器时,T5 引脚可作为一个额外的外部中断。 波特率由下列公式计算: BaudRate = 16 × fT5/PRESCALER 65536−[RCAP5H,RCAP5L],用定时器5 作为波特率发生器。 上式中,fT5 为Fosc,PRESCALER 为定时器 5 预分频比, RCAP5H 和RCAP5L 为定时器5 的重 载捕获寄存器。
9.5.1.3 方式2: 16位上升沿捕获 在捕获方式中,T5CON 的EXEN5 位有两个选项。 如果EXEN5 = 0,定时器T5 作为16 位定时器,如果ET5 被允许的话,定时器T5 能设置TF5 溢 出产生一个中断。溢出后计数不会被重载,从 0 开始计数。 如果EXEN5 = 1,定时器T5 执行相同操作,但是在外部输入T5(可通过 T5CON1 来选择捕获输 入的类型)的上升沿能引起TH5 和TL5 的当前值分别被捕获到 RCAP5H 和RCAP5L 中,此外,在T5 上的上升沿也能引起在 T5CON 中的 EXF5 被设置。如果 ET5 被允许,EXF5 位也像 TF5 一样也产生 一个中断。 9.5.1.4 方式3: 16位下降沿捕获 在捕获方式中,T5CON 的EXEN5 位有两个选项。 如果EXEN5 = 0,定时器T5 作为16 位定时器,如果ET5 被允许的话,定时器T5 能设置TF5 溢 出产生一个中断。溢出后计数不会被重载,从 0 开始计数。 如果EXEN5 = 1,定时器T5 执行相同操作,但是在外部输入T5(可通过 T5CON1 来选择捕获输 入的类型)的下降沿能引起TH5 和TL5 的当前值分别被捕获到 RCAP5H 和RCAP5L 中,此外,在T5 上的下降沿也能引起在 T5CON 中的 EXF5 被设置。如果 ET5 被允许,EXF5 位也像 TF5 一样也产生 一个中断。 9.5.1.5 方式4: 16位双沿捕获 在捕获方式中,T5CON 的EXEN5 位有两个选项。 如果EXEN5 = 0,定时器T5 作为16 位定时器,如果ET5 被允许的话,定时器T5 能设置TF5 溢 出产生一个中断。溢出后计数不会被重载,从 0 开始计数。 如果EXEN5 = 1,定时器 T5 执行相同操作,但是在外部输入T5(可通过 T5CON1 来选择捕获输 入的类型)的下降沿或上升沿能引起TH5 和TL5 的当前值分别被捕获到 RCAP5H 和RCAP5L 中,此 外,在T5 上的下降沿或上升沿也能引起在 T5CON 中的EXF5 被设置。如果 ET5 被允许,EXF5 位也 像TF5 一样也产生一个中断。
9.5.2 定时器/计数器 T5 相关寄存器 9.5.2.1 定时器T5控制寄存器 T5CON、T5CON1、T5CON2 T5CON 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TF5 EXF5 T5PS[1:0] T5M[1:0] TR5 EXEN5 位编号 位符号 说明
7 TF5
定时器5 溢出标志位 0:无溢出 1:溢出时硬件置1,必须软件清 0
6 EXF5
T5 引脚外部输入事件发生标志位 0:无外部输入事件发生,必须软件清 0 1:检测到外部输入事件且 EXEN5= 1 时,硬件置 1,也做中断请求标志 位 5-4 T5PS[1:0] 定时器5 预分频比(PRESCALER)选择位 00:1/1 01:1/8 10:1/64 11:1/256 3-2 T5M[1:0] 定时器5 方式选择位 00:Mode0,16 位自动重载定时器 01:Mode1,波特率发生器 10:Mode2,16 位上升沿捕获 11:Mode3,16 位下降沿捕获
1 TR5
定时器5 允许控制位 0:禁止定时器5 1:允许定时器5
0 EXEN5
T5 引脚上的外部事件输入用作重载/捕获触发器允许/禁止控制位 0:忽略T5 引脚上的事件 1:根据模式的不同,EXEN5 有不同的作用: 当定时器 5 用作 16 位自动重载定时器时,EXEN5=1 时,T5 引脚上一 个下降沿或上升沿会产生一次重载。EXF5 置位,如果中断使能,会发生 T5 中断; 当定时器5 用作波特率发生器时,EXEN5=1 时,T5 引脚上的一个下降 沿或上升沿会置位 EXF5,如果中断使能,会发生T5 中断,可以做一个额 外的外部中断; 当定时器5 用作上升沿捕获时,EXEN5=1 时,T5 引脚上的一个上升沿 会产生一次捕获,同时会置位 EXF5,如果中断使能,会发生 T5 中断; 当定时器5 用作下降沿捕获时,EXEN5=1 时,T5 引脚上的一个下降沿 会产生一次捕获,同时会置位 EXF5,如果中断使能,会发生 T5 中断; 当定时器5 用作上升沿和下降沿捕获时,EXEN5=1 时,T5 引脚上的一
个上升沿和下降沿都会产生一次捕获,同时会置位 EXF5,如果中断使能, 会发生T5 中断; 注:当捕获内部低频 RC 或 RXD 引脚时,也需要使能 EXEN5,同时还要 配置上升沿捕获、下降沿捕获或双沿捕获。 T5CON1 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - CAPM[1:0] 位编号 位符号 说明 7-2 - 保留位 1-0 CAPM[1:0] 定时器5 捕获类型选择位 00:T5 脚的变化沿 01:内部低频RC,即看门狗的计数时钟 10:UART 的RXD 脚 T5CON2 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R/W R R/W 复位值 0 0 0 0 0 0 0 0 位符号 - T5_MODE - T5CAPCR 位编号 位符号 说明 7-3 - 保留位(读为0,写无效)
2 T5_MODE
T5 的扩展模式选择 0:由T5M[1:0]决定 1:上升沿或下降沿捕获 1 - 保留位(读为0,写无效)
0 T5CAPCR
T5 端口捕获自动清除 该位使能, 当捕获事件发生, 在TH5 和TL5 内的数据移入捕获寄存器后, 硬件将自动清除TH5 及TL5 计数寄存器的值。注意:当该位置1,如果有 一个捕获事件发生,仅清除 TH5、TL5 的值。 0:T5 端口捕获事件发生后定时器 5 计数值按之前计数值继续累加 1:T5 端口捕获事件发生后定时器 5 计数值自动清 0
9.5.2.2 定时器T5数据寄存器 TL5、TH5 TL5 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TL5 位编号 位符号 说明 7-0 TL5 T5 数据寄存器低字节 TH5 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 TH5 位编号 位符号 说明 7-0 TH5 T5 数据寄存器高字节 9.5.2.3 定时器T5重载捕获寄存器 RCAP5L、RCAP5H RCAP5L 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 RCAP5L 位编号 位符号 说明 7-0 RCAP5L T5 重载捕获寄存器低字节 RCAP5H 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 RCAP5H 位编号 位符号 说明 7-0 RCAP5H T5 重载捕获寄存器高字节
10 脉宽调制PWM
10.1 PWM 特性
➢ 3 组带死区互补PWM 或6 路独立PWM 输出 ➢ 12 位PWM ➢ 提供每个PWM 周期溢出中断,但中断共用同一向量入口 ➢ 输出极性可选择 ➢ 提供出错帧测功能可紧急关闭 PWM 输出 ➢ PWM 工作时钟源可设定时钟分频比 ➢ PWM 可做定时器/计数器使用 HC89F0332/0322/0312 集成了三个 12 位 PWM 模块 PWM0、PWM1 和 PWM2,三个模块各有一 个计数器,PWM0 的计数器由 PWM0_EN 来控制,只要使能PWM0_EN,计数器就会启动,计数器的 时钟源通过PWM0C 控制寄存器里的 CK0 来选择。 当需要从芯片管脚输出 PWM 波形时,还需要使能 PWM0_OEN 或PWM01_OEN,同时需要将端 口设置为强推挽模式。如果不希望从芯片管脚上输出 PWM 波形,可以不用使能 PWM0_OEN 或 PWM01_OEN,这时候PWM0 的计数器可以当一个定时器来使用,当计数器溢出时,如果中断允许也 会产生PWM 中断。 如果EFLT0 置1,PWM0 输出和其互补输出可由 FLT0 引脚输入信号变化自动关闭。一旦检测到 FLT0 引脚输入有效电平,PWM 输出会立即关闭, 但PWM 内部计数器仍在继续运行, 这样方便在FLT0 引脚错误去除后继续 PWM 输出。在FLT0 输入信号有效期间,FLT0S 位无法清除。只有当FLT0 输入 信号消失后,才能软件清除 FLT0S 状态位,此时 PWM 恢复正常输出。 PWM0 故障检测端口 FLT0(P0.0 端口)具有消抖功能,用户可根据需要设置合适的消抖时间。 配置 FLT0 的消抖时间即配置端口 P0.0 的消抖时间,设置方法详见端口消抖控制寄存器 P00DBC、 P01DBC、P02DBC 章节。 三个 PWM 模块的功能及操作完全一样,用户可通过控制寄存器产生 3 路带死区互补的 PWM 或 6 路单独的PWM 输出。 3 个PWM 模块共用一个中断向量入口, 但有各自的控制位及标志位, 方便用户定时修改PWM 模 块下一次循环的周期或占空比。
10.2 PWM 输出类型
HC89F0332/0322/0312 的 PWM 输出包含两种类型:边沿对齐和中心对齐。通过设置 TYPx (PWMCON0[7:5]) (x=0,1,2)来决定。 10.2.1 边沿对齐模式 边沿对齐模式下, 模块产生边沿对齐的PWM 信号。PWM 输出信号的周期由[PWM0PH:PWM0PL] 决定,其占空比由相应的占空比寄存器(PWM 独立输出时,PWM01、PWM11、PWM21 的占空比寄 存器是其死区时间寄存器) 。 12 位计数器采用单周期模式,从0000H 开始向上计数,所有使能的PWM 输出在 PWM 周期开始 时被驱动为有效状态。当计数器的值与 PWM 占空比寄存器的值匹配时,PWM 输出被驱动为无效状
态。计数器直到与[PWM0PH:PWM0PL]匹配,然后重新从 0000H 开始向上计数。 PWMx周期 = [ PWM0PH : PWM0PL] * PWM0工作时钟源周期 PWMx占空比 = [ PWMxDH : PWMxDL] * PWM0工作时钟周期 PWMx1 占空比 = [ PWMxDTH : PWMxDTL] * PWM0 工作时钟周期 Figure 10-1 PWM 边沿对齐波形 10.2.2 中心对齐模式 中心对齐模式下, 模块产生中心对齐的PWM 信号。PWM 输出信号的周期由[PWM0PH:PWM0PL] 决定,其占空比由相应的占空比寄存器(PWM 独立输出时,PWM01、PWM11、PWM21 的占空比寄 存器是其死区时间寄存器) 。 12 位计数器采用双周期模式,先从 0000H 开始向上计数至 [PWM0PH:PWM0PL] ,然后由 [PWM0PH:PWM0PL]向下计数至0000H, 此为一个PWM 的完整周期。 所有使能的PWM 输出在PWM 周期开始时被驱动为有效状态。在向上计数的过程中,当计数器的值与 PWM 占空比寄存器的值匹配 时,PWM 输出被驱动为无效状态,直到计数器转换为向下计数且计数器值与 PWM 占空比寄存器的 值匹配时,PWM 输出才被驱动为有效状态。 PWMx周期 = [ PWM0PH:PWM0PL] * PWM0工作时钟源周期*2 PWMx占空比 = [ PWMxDH:PWMxDL] * PWM0工作时钟周期*2 PWMx1 占空比 = [ PWMxDTH:PWMxDTL] * PWM0 工作时钟周期*2
向上计数 向下计数 有效期间 无效 期间 有效期间 Figure 10-2 PWM 中心沿对齐波形
10.3 PWM 输出模式
PWM 模块包含3 个独立的波形发生模块, 对应的3 对PWM 输出为PWM0/PWM01、PWM1/PWM11、 PWM2/PWM21,通过控制相关寄存器可使每对 PWM 输出配置成互补输出模式或独立输出模式。 10.3.1 互补输出模式 当 PWMxM(x=0,1,2) 置 0 :PWM 将工作在互补输出模式,互补输出模式时,通常使能 PWMx&PWMx(x=0,1,2)1 输出,此时可以控制对应的周期寄存器、占空比寄存器及死区时间寄存器, 从而控制互补波形的输出。互补输出时可选择 PWMx&PWMx1(x=0,1,2)输出极性,方便用户各种电平 驱动需求。 PWM0S=00& PWM0M=0:PWM0和PWM01工作于互补模式且均为高有效 PWM0 PWM01 PWM0S=00& PWM0M=0:PWM0 和 PWM01 工作于互补模式(带死区)且均为高有效 PWM0 PWM01 PWM0S=01& PWM0M=0:PWM0和PWM01工作于互补模式且PWM0为高有效、PWM01为低有效
PWM0S=01& PWM0M=0:PWM0 和 PWM01 工作于互补模式(带死区)且PWM0 为高有效、PWM01 为低有效 PWM0S=10& PWM0M=0:PWM0和PWM01工作于互补模式且PWM0为低有效、PWM01为高有效 PWM0 PWM01 PWM0S=10& PWM0M=0:PWM0 和 PWM01 工作于互补模式(带死区)且PWM0 为低有效、PWM01 为高有效 PWM0 PWM01 PWM0S=11& PWM0M=0:PWM0和PWM01工作于互补模式且PWM0和PWM01均为低有效 PWM0 PWM01 PWM0S=11& PWM0M=0:PWM0 和PWM01 工作于互补模式(带死区)且PWM0 和PWM01 均为低 有效
10.3.2 独立输出模式 当 PWMxM 置 1:PWM 将工作在独立输出模式,独立输出模式时,可以控制相关寄存器使能对 应PWM 端口单一输出或同时输出, 同时让PWMx&PWMx1 输出时, 其周期相同但占空比可单独设置。 当为独立输出模式时占空比寄存器将控制 PWMx 的占空比, 死区时间控制寄存器将控制PWMx1 的占 空比,独立输出时也可控制 PWMx&PWMx1 输出极性,方便用户各种电平驱动需求。(x = 0,1,2) PWM0S=00& PWM0M=1:PWM0和PWM01工作于独立模式且均为高有效 PWM0 PWM01 PWM0S=01& PWM0M=1:PWM0和PWM01工作于独立模式且PWM0为高有效、PWM01为低有效 PWM0 PWM01 PWM0S=10& PWM0M=1:PWM0和PWM01工作于独立模式且PWM0为低有效、PWM01为高有效 PWM0 PWM01 PWM0S=11& PWM0M=1:PWM0和PWM01工作于独立模式且PWM0和PWM01均为低有效 PWM0 PWM01
10.4 PWM 相关寄存器
10.4.1.1 PWM控制寄存器PWMCON0
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R R/W 复位值 0 0 0 1 1 1 0 0 位符号 TYP2 TYP1 TYP0 RLOAD2 RLOAD1 RLOAD0 - PENCTRL 位编号 位符号 说明
7 TYP2
PWM2 输出类型选择位 0:PWM2 边沿对齐 1:PWM2 中心对齐
6 TYP1
PWM1 输出类型选择位 0:PWM1 边沿对齐 1:PWM1 中心对齐
5 TYP0
PWM0 输出类型选择位 0:PWM0 边沿对齐 1:PWM0 中心对齐
4 RLOAD2
PWM2 自动重载使能位 0:禁止自动重载 1:使能自动重载 注:默认值为 1,默认状态下修改参数后,参数自动载入,并在下 一周期修改PWM2 周期、占空比、死区。 在修改参数前禁止自动重载, 修改参数之后使能, 可实现多组PWM 间的同步,在禁止期间输出之前状态。 适合在三组 PWM 周期相同,后面想修改 PWM 周期或占空比的情 况,如果三组PWM 的周期不同,那么 pwm_ov 信号就不同
3 RLOAD1
PWM1 自动重载使能位 0:禁止自动重载 1:使能自动重载
2 RLOAD0
PWM0 自动重载使能位 0:禁止自动重载 1:使能自动重载 1 - 保留位(读为0,写无效)
0 PENCTRL
PWM0/1/2 模块使能控制位 1:由 PWMENA 寄存器控制 PWM0/1/2 的模块使能和输出,且 PWM0_EN、PWM1_EN、PWM2_EN 位不会受此影响改变状态。 注:关闭时,PWM0 计数停止,输出立即关闭。打开时,PWM0 计 数器 都重 新从 1 开始 计 数, 输出受 PWM0_OEN 和 PWM01_OEN 控制。
10.4.1.2 PWM使能寄存器PWMENA
位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W R/W R R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - PWM21EN PWM11EN PWM01EN - PWM2EN PWM1EN PWM0EN 位编号 位符号 说明 7 - 保留位
6 PWM21EN
PWM21 输出控制位 0:禁止PWM21 输出 1:允许PWM21输出
5 PWM11EN
PWM11 输出控制位 0:禁止PWM11 输出 1:允许PWM11输出
4 PWM01EN
PWM01 输出控制位 0:禁止PWM01 输出 1:允许PWM01输出 3 - 保留位
2 PWM2EN
PWM2 输出控制位 0:禁止PWM2 输出 1:允许PWM2输出
1 PWM1EN
PWM1 输出控制位 0:禁止PWM1 输出 1:允许PWM1 输出
0 PWM0EN
PWM0 输出控制位 0:禁止PWM0 输出 1:允许PWM0输出 注:PWM允许输出(输出时对应端口必须设为输出模式),必须 在PWM管脚映射管脚,否则为PWM输出关闭状态(输出电平状态 与输出模式选择位有关);即使都禁止输出,只要相关位被使能, PWM都可以溢出中断,即此时PWM可以作为定时器使用,此控制 位修改立即生效。
10.4.2 PWM0 模块
10.4.2.1 PWM0使能寄存器PWM0EN
位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - FLT0_MODE EFLT0 PWM0M PWM01_OEN PWM0_OEN PWM0_EN 位编号 位符号 说明 7 - 保留位 6-5 FLT0_MODE PWM0 故障输出预定状态选择位 00:PWM0&PWM01故障期间均为低电平 01:PWM0故障期间低电平,PWM01故障期间高电平 10:PWM0故障期间高电平,PWM01故障期间低电平 11:PWM0&PWM01故障期间均为高电平
4 EFLT0
PWM0 FLT0 控制引脚使能位 0:禁止故障检测,GPIO 功能或其它功能 1:允许故障检测,PWM0 故障检测输入引脚 注:互补输出模式及独立输出模式都可受故障检测脚控制。
3 PWM0M
PWM0 工作模式选择位 0:PWM0&PWM01 工作于互补输出模式 1:PWM0&PWM01 工作于独立输出模式 注:修改PWM0 工作模式时建议先关闭 PWM0 模块。 注:工作在独立模式时,PWM0 的占空比寄存器要大于 PWM01 的 占空比寄存器。
2 PWM01_OEN
PWM01 输出控制位 0:禁止PWM01 输出 1:允许PWM01 输出
1 PWM0_OEN
PWM0 输出控制位 0:禁止PWM0 输出 1:允许PWM0 输出 注:PWM0 允许输出,必须在 PWM0_EN 置 1 下才有效,否则为 PWM0 输出关闭状态(输出时对应端口必须设为输出模式);即使 都禁止输出,只要 PWM0_EN 位被使能,PWM0 都可以溢出中断, 即此时PWM0 可以作为定时器使用,此控制位修改立即生效。
0 PWM0_EN
PWM0 模块使能控制位 0:关闭PWM0 模块 1:打开PWM0 模块(重新计数) 注:关闭时,PWM0 计数停止,输出立即关闭。打开时,PWM0 计 数器都重新从1 开始计数, 输出受PWM0_OEN 和PWM01_OEN 控
10.4.2.2 PWM0控制寄存器PWM0C
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM0IE PWM0IF FLT0S FLT0C PWM0S CK0 位编号 位符号 说明
7 PWM0IE
PWM0 中断允许位 0:禁止PWM0 中断 1:允许PWM0 中断
6 PWM0IF
PWM0 中断标志位 0:软件清0 1:PWM0 周期计数器溢出,由硬件置 1
5 FLT0S
PWM0 FLT 状态位 0:PWM 正常状态,软件清 0 1:PWM 输出关闭,硬件置 1
4 FLT0C
PWM0 FLT 引脚配置位 0:FLT0 为低电平时,PWM 输出关闭 1:FLT0 为高电平时,PWM 输出关闭 3-2 PWM0S PWM0 和PWM01 输出模式选择位 00:PWM0和PWM01均为高有效 01:PWM0为高有效,PWM01为低有效 10:PWM0为低有效,PWM01为高有效 11:PWM0 和PWM01 均为低有效 注:对于独立模式,输出模式选择位同样有效,但与互补模式不同的是: 有效期间为占空比期间;而互补模式中对于 PWM0 的有效期间为占空比 期间,PWM01 的有效期间为占空比的互补期间。 1-0 CK0 PWM0 时钟源选择位 00:Fosc/1 01:Fosc/8 10:Fosc/32 11:Fosc/128
10.4.2.3 PWM0周期寄存器PWM0PL、PWM0PH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM0PL[7:0] 位编号 位符号 说明 7-0 PWM0PL[7:0] PWM0 周期寄存器低 8 位 PWM0PH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM0PH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM0PH[3:0] PWM0 周期寄存器高 4 位 注:修改PWM0周期时先修改高位,后修改低位,读时不受限制,例如 (1) PWM0PH = 0x05; (2) PWM0PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (3) PWM0PH = 0x06; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (4) PWM0PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0608 (5) PWM0PL = 0x09; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0609 显然只要修改 PWM 周期,无论低位寄存器是否需要修改,低位都必须写入一次,且周期修改都 只会在下一个PWM 周期才会生效。 PWM0周期 = [ PWM0PH : PWM0PL] * PWM0工作时钟源周期
10.4.2.4 PWM0占空比寄存器PWM0DL、PWM0DH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM0DL[7:0] 位编号 位符号 说明 7-0 PWM0DL[7:0] PWM0 占空比寄存器低 8 位 PWM0DH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM0DH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM0DH[3:0] PWM0 占空比寄存器高 4 位 注:修改 PWM0 占空比寄存器,操作类似修改 PWM0 周期寄存器,都是必须先修改高位后修改 低位,且修改都在下一个周期才有效。 PWM0 占空比 = [ PWM0DH : PWM0DL] * PWM0 工作时钟周期
10.4.2.5 PWM0死区时间寄存器PWM0DTL、PWM0DTH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM0DTL[7:0] 位编号 位符号 说明 7-0 PWM0DTL[7:0] PWM0 死区时间寄存器低 8 位 PWM0DTH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM0DTH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM0DTH[3:0] PWM0 死区时间寄存器高 4 位
当PWM0M=1 时,PWM0 工作在2 路独立模式,此时的死区时间寄存器被用来当做PWM01 的占 空比寄存器,即独立模式的 PWM0 可以产生 2 路周期相同,但占空比可以不同的 PWM 波形。 互补模式下:PWM0 死区时间 = [ PWM0DTH : PWM0DTL] * PWM0 工作时钟周期。 互补模式下:死区时间必须小于占空比时间,死区时间与占空比时间的和必须小于 PWM0 周期。 独立模式下:PWM01 占空比时间 = [ PWM0DTH : PWM0DTL] * PWM0 工作时钟周期。
10.4.3 PWM1 模块
10.4.3.1 PWM1使能寄存器PWM1EN
位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - FLT1_MODE EFLT1 PWM1M PWM11_OEN PWM1_OEN PWM1_EN 位编号 位符号 说明 7 - 保留位 6-5 FLT1_MODE PWM1 故障输出预定状态选择位 00:PWM1&PWM11故障期间均为低电平 01:PWM1故障期间低电平,PWM11故障期间高电平 10:PWM1故障期间高电平,PWM11故障期间低电平 11:PWM1&PWM11故障期间均为高电平
4 EFLT1
PWM1 FLT1 控制引脚使能位 0:禁止故障检测,GPIO 功能或其它功能 1:允许故障检测,PWM1 故障检测输入引脚 注:互补输出模式及独立输出模式都可受故障检测脚控制。
3 PWM1M
PWM1 工作模式选择位 0:PWM1&PWM11 工作于互补输出模式 1:PWM1&PWM11 工作于独立输出模式 注:修改PWM1 工作模式时建议先关闭 PWM1 模块。
2 PWM11_OEN
PWM11 输出控制位 0:禁止PWM11 输出 1:允许PWM11 输出
1 PWM1_OEN
PWM1 输出控制位 0:禁止PWM1 输出 1:允许PWM1 输出 注:PWM1 允许输出, 必须在PWM1_EN 置1 下才有效, 否则为PWM1 输出关闭状态(输出时对应端口必须设为输出模式) ;即使都禁止输 出, 只要PWM1_EN 位被使能,PWM1 都可以溢出中断, 即此时PWM1 可以作为定时器使用,此控制位修改立即生效。
0 PWM1_EN
PWM1 模块使能控制位 0:关闭PWM1 模块 1:打开PWM1 模块(重新计数) 注:关闭时,PWM1 计数停止,输出立即关闭。打开时,PWM1 计数 器都重新从1 开始计数,输出受 PWM1_OEN 和PWM11_OEN 控制。
10.4.3.2 PWM1控制寄存器PWM1C
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM1IE PWM1IF FLT1S FLT1C PWM1S CK1 位编号 位符号 说明
7 PWM1IE
PWM1 中断允许位 0:禁止PWM1 中断 1:允许PWM1 中断
6 PWM1IF
PWM1 中断标志位 0:软件清0 1:PWM1 周期计数器溢出,由硬件置 1
5 FLT1S
PWM1 FLT 状态位 0:PWM 正常状态,软件清 0 1:PWM 输出关闭,硬件置 1
4 FLT1C
PWM1 FLT 引脚配置位 0:FLT1 为低电平时,PWM 输出关闭 1:FLT1 为高电平时,PWM 输出关闭 3-2 PWM1S PWM1 和PWM11 输出模式选择位 00:PWM1和PWM11均为高有效 01:PWM1为高有效,PWM11为低有效 10:PWM1为低有效,PWM11为高有效 11:PWM1 和PWM11 均为低有效 注:对于独立模式,输出模式选择位同样有效,但与互补模式不同的是: 有效期间为占空比期间;而互补模式中对于 PWM1 的有效期间为占空比 期间,PWM11 的有效期间为占空比的互补期间。 1-0 CK1 PWM1 时钟源选择位 00:Fosc/1 01:Fosc/8 10:Fosc/32 11:Fosc/128
10.4.3.3 PWM1周期寄存器PWM1PL、PWM1PH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM1PL[7:0] 位编号 位符号 说明 7-0 PWM1PL[7:0] PWM1 周期寄存器低 8 位 PWM1PH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM1PH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM1PH[3:0] PWM1 周期寄存器高 4 位 注:修改PWM1周期时先修改高位,后修改低位,读时不受限制,例如 (6) PWM1PH = 0x05; (7) PWM1PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (8) PWM1PH = 0x06; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (9) PWM1PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0608 (10) PWM1PL = 0x09; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0609 显然只要修改 PWM 周期,无论低位寄存器是否需要修改,低位都必须写入一次,且周期修改都 只会在下一个PWM 周期才会生效。 PWM1周期 = [ PWM1PH : PWM1PL] * PWM1工作时钟源周期
10.4.3.4 PWM1占空比寄存器PWM1DL、PWM1DH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM1DL[7:0] 位编号 位符号 说明 7-0 PWM1DL[7:0] PWM1 占空比寄存器低 8 位
位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM1DH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM1DH[3:0] PWM1 占空比寄存器高 4 位 注:修改 PWM1 占空比寄存器,操作类似修改 PWM1 周期寄存器,都是必须先修改高位后修改 低位,且修改都在下一个周期才有效。 PWM1 占空比 = [ PWM1DH : PWM1DL] * PWM1 工作时钟周期
10.4.3.5 PWM1死区时间寄存器PWM1DTL、PWM1DTH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM1DTL[7:0] 位编号 位符号 说明 7-0 PWM1DTL[7:0] PWM1 死区时间寄存器低 8 位 PWM1DTH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - PWM1DTH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM1DTH[3:0] PWM1 死区时间寄存器高 4 位 当PWM1M=1 时,PWM1 工作在 2 路独立模式,此时的死区时间寄存器被用来当做PWM11 的占 空比寄存器,即独立模式的 PWM1 可以产生 2 路周期相同,但占空比可以不同的 PWM 波形。 互补模式下:PWM1 死区时间 = [ PWM1DTH : PWM1DTL] * PWM1 工作时钟周期; 互补模式下:死区时间必须小于占空比时间,死区时间与占空比时间的和必须小于 PWM1 周期; 独立模式下:PWM11 占空比时间 = [ PWM1DTH : PWM1DTL] * PWM1 工作时钟周期;
10.4.4 PWM2 模块
10.4.4.1 PWM2使能寄存器PWM2EN
位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - FLT2_MODE EFLT2 PWM2M PWM21_OEN PWM2_OEN PWM2_EN 位编号 位符号 说明 7 - 保留位 6-5 FLT2_MODE PWM2 故障输出预定状态选择位 00:PWM2&PWM21故障期间均为低电平 01:PWM2故障期间低电平,PWM21故障期间高电平 10:PWM2故障期间高电平,PWM21故障期间低电平 11:PWM2&PWM21故障期间均为高电平
4 EFLT2
PWM2 FLT2 控制引脚使能位 0:禁止故障检测,GPIO 功能或其它功能 1:允许故障检测,PWM2 故障检测输入引脚 注:互补输出模式及独立输出模式都可受故障检测脚控制。
3 PWM2M
PWM2 工作模式选择位 0:PWM2&PWM21 工作于互补输出模式 1:PWM2&PWM21 工作于独立输出模式 注:修改PWM2 工作模式时建议先关闭 PWM2 模块。
2 PWM21_OEN
PWM21 输出控制位 0:禁止PWM21 输出 1:允许PWM21 输出
1 PWM2_OEN
PWM2 输出控制位 0:禁止PWM2 输出 1:允许PWM2 输出 注:PWM2 允许输出, 必须在PWM2_EN 置1 下才有效, 否则为PWM2 输出关闭状态(输出时对应端口必须设为输出模式);即使都禁止输 出,只要相 PWM2_EN 位被使能,PWM2 都可以溢出中断,即此时 PWM2 可以作为定时器使用,此控制位修改立即生效。
0 PWM2_EN
PWM2 模块使能控制位 0:关闭PWM2 模块 1:打开PWM2 模块(重新计数) 注:关闭时,PWM2 计数停止,输出立即关闭。打开时,PWM2 计 数器都重新从 1 开始计数,输出受 PWM2_OEN 和 PWM21_OEN 控
10.4.4.2 PWM2控制寄存器PWM2C
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM2IE PWM2IF FLT2S FLT2C PWM2S CK2 位编号 位符号 说明
7 PWM2IE
PWM2 中断允许位 0:禁止PWM2 中断 1:允许PWM2 中断
6 PWM2IF
PWM2 中断标志位 0:软件清0 1:PWM2 周期计数器溢出,由硬件置 1
5 FLT2S
PWM2 FLT 状态位 0:PWM 正常状态,软件清 0 1:PWM 输出关闭,硬件置 1
4 FLT2C
PWM2 FLT 引脚配置位 0:FLT2 为低电平时,PWM 输出关闭 1:FLT2 为高电平时,PWM 输出关闭 3-2 PWM2S PWM2 和PWM21 输出模式选择位 00:PWM2和PWM21均为高有效 01:PWM2为高有效,PWM21为低有效 10:PWM2为低有效,PWM21为高有效 11:PWM2 和PWM21 均为低有效 注:对于独立模式,输出模式选择位同样有效,但与互补模式不同的是: 有效期间为占空比期间;而互补模式中对于 PWM2 的有效期间为占空比 期间,PWM21 的有效期间为占空比的互补期间。 1-0 CK2 PWM2 时钟源选择位 00:Fosc/1 01:Fosc/8 10:Fosc/32 11:Fosc/128
10.4.4.3 PWM2周期寄存器PWM2PL、PWM2PH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM2PL[7:0] 位编号 位符号 说明 7-0 PWM2PL[7:0] PWM2 周期寄存器低 8 位
位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - - - - PWM2PH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM2PH[3:0] PWM2 周期寄存器高 4 位 注:修改PWM2周期时先修改高位,后修改低位,读时不受限制,例如 (11) PWM2PH = 0x05; (12) PWM2PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (13) PWM2PH = 0x06; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0508 (14) PWM2PL = 0x08; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0608 (15) PWM2PL = 0x09; //此时PWM 计数器溢出,则下一个周期开始周期计算数据为 0x0609 显然只要修改 PWM 周期,无论低位寄存器是否需要修改,低位都必须写入一次,且周期修改都 只会在下一个PWM 周期才会生效。 PWM2周期 = [ PWM2PH : PWM2PL] * PWM2工作时钟源周期
10.4.4.4 PWM2占空比寄存器PWM2DL、PWM2DH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM2DL[7:0] 位编号 位符号 说明 7-0 PWM2DL[7:0] PWM2 占空比寄存器低 8 位 PWM2DH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - PWM2DH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM2DH[3:0] PWM2 占空比寄存器高 4 位 注:修改 PWM2 占空比寄存器,操作类似修改 PWM2 周期寄存器,都是必须先修改高位后修改 低位,且修改都在下一个周期才有效。 PWM2 占空比 = [ PWM2DH : PWM2DL] * PWM2 工作时钟周期
10.4.4.5 PWM2死区时间寄存器PWM2DTL、PWM2DTH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM2DTL[7:0] 位编号 位符号 说明 7-0 PWM2DTL[7:0] PWM2 死区时间寄存器低 8 位 PWM2DTH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - PWM2DTH[3:0] 位编号 位符号 说明 7-4 - 保留位(读为0,写无效) 3-0 PWM2DTH[3:0] PWM2 死区时间寄存器高 4 位 当PWM2M=1 时,PWM2 工作在2 路独立模式,此时的死区时间寄存器被用来当做PWM21 的占 空比寄存器,即独立模式的 PWM2 可以产生 2 路周期相同,但占空比可以不同的 PWM 波形。 互补模式下:PWM2 死区时间 = [ PWM2DTH : PWM2DTL] * PWM2 工作时钟周期; 互补模式下:死区时间必须小于占空比时间,死区时间与占空比时间的和必须小于 PWM2 周期; 独立模式下:PWM21 占空比时间 = [ PWM2DTH : PWM2DTL] * PWM2 工作时钟周期;
11 单路8位PWM模块
11.1 PWM 特性
➢ 8 位PWM 输出 ➢ 提供PWM 周期溢出中断,但中断与互补 12 位PWM 共用同一向量 ➢ 输出极性可选择 ➢ PWM 可做定时器/计数器使用,即周期寄存器写入时做定时器使用,读时做计数器使用
11.2 PWM 模块相关寄存器
11.2.1 PWM3 模块
11.2.1.1 PWM3控制寄存器PWM3C
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM3EN PWM3IE PWM3IF PWM3OEN PWM3S PTCK3[2:0] 位编号 位符号 说明
7 PWM3EN
PWM3 模块使能控制位 0:关闭 PWM3 模块 1:打开 PWM3 模块(重新计数) 注:关闭时,PWM 计数停止,输出立即关闭。 打开时,PWM 计数器都重新从 1 开始计数,输出受 PWM3OEN 控制。
6 PWM3IE
PWM3 中断允许位 0:禁止 PWM3 中断 1:允许 PWM3 中断
5 PWM3IF
PWM3 中断标志位 0:软件清 0 1:硬件置 1,仅在PWM3 计数器溢出(大于 PWM3P 时)才置 1
4 PWM3OEN
PWM3 输出使能位 0:PWM3 禁止输出 1:PWM3 允许输出 注:PWM 允许输出,必须在 PWM3EN 置 1 下才有效,否则为 PWM 输 出关闭状态(输出时对应端口必须设为输出模式) ;即使都禁止输出, 只要相关位被使能,PWM 都可以溢出中断,即此时PWM 可以作为定时 器/计数器使用,此控制位修改立即生效。
3 PWM3S
PWM3 输出极性选择位 0:PWM3 有效期间为高电平 1:PWM3 有效期间为低电平 注:修改此控制位,立即生效,有效期间是指占空比期间 2-0 PTCK3[2:0] PWM3 工作时钟源选择位 000:Fosc/1 001:Fosc/2 010:Fosc/4 011:Fosc/8 100:Fosc/16 101:Fosc/32 110:Fosc/64 111:Fosc/128 注:修改此控制位,立即生效,不建议在输出过程中修改。
11.2.1.2 PWM3周期寄存器PWM3P
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM3P[7:0] 位编号 位符号 说明 7-0 PWM3P[7:0] PWM3 周期寄存器
11.2.1.3 PWM3占空比寄存器PWM3D
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 PWM3D[7:0] 位编号 位符号 说明 7-0 PWM3D[7:0] PWM3 占空比寄存器 PWM3P ≤ PWM3D 时,占空比 100% PWM3D = 0X00 时,占空比 0%
12 看门狗定时器WDT
12.1 WDT 特性
➢ 可配置是否溢出复位 ➢ 可配置在空闲/掉电模式下是否允许 ➢ 可灵活配置溢出时间 HC89F0332/0322/0312看门狗定时器是一个递增计数器,其时钟源内部低频RC,可以通过寄存器选 择在空闲/掉电模式下是否运行。WDT溢出时,芯片是否复位可通过RSTFR寄存器里的WDTRF位来判 断。如果WDTRST为1,则WDT溢出时会复位系统,如果WDTRST为0,而且WDT的中断使能,则会产 生WDT中断。 由于内部低频RC振荡器频率随工艺角有偏差,可通过定时器5进行捕获测量内部低速RC振荡器的 真实频率,然后根据实际的频率值进行溢出时间的计算。 HC89F0332/0322/0312看门狗定时器溢出后有溢出标志,复位有专用的复位标志,可设分频,可设 计数溢出值,清WDT操作只需置相应控制位即可,操作灵活。
12.2 WDT 相关寄存器
12.2.1 WDT 控制寄存器 WDTC
位编号 7 6 5 4 3 2 1 0 R/W R R/W R/W W R/W R/W R/W R/W 复位值 0 1 0 0 1 1 1 1 位符号 - WDTRST WDTF WDTCLR WDTPD WDTPS[2:0] 位编号 位符号 说明 7 - 保留位
6 WDTRST
WDT 复位允许位 0:禁止 WDT 复位 1:允许 WDT 复位 注:禁止WDT 复位时,WDT 计数溢出依旧可以置中断请求标志。
5 WDTF
WDT 中断请求标志位 0:无 WDT 计数溢出,中断响应时软件清0 1:WDT 计数溢出,WDTF 硬件置 1,可用于中断请求
4 WDTCLR 看门狗清零位
置1 会清零 WDT 计数器,硬件自动清 0 该位
3 WDTPD
WDT 空闲/掉电模式下运行控制位 0:空闲/掉电模式下允许 WDT 运行,如果复位使能打开则会复位唤醒 系统,如果复位使能关闭,而且 EA=1,EWDT=1,会中断唤醒系统。 1:空闲/掉电模式下禁止WDT运行
2-0 WDTPS[2:0] 看门狗定时器时钟源分频选择位 000:1/8 001:1/16 010:1/32 011:1/64 100:1/128 101:1/256 110:1/512 111:1/1024
12.2.2 WDT 计数比较寄存器 WDTCCR
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 1 1 1 1 位符号 WDTCCR[7:0] 位编号 位符号 说明 7-0 WDTCCR[7:0] WDT 计数比较寄存器 注:WDT 计数器与 WDTCCR[7:0]匹配时, 溢出并且计数器清0 重新计数, 写入 00 时,将关闭 WDT 功能(但不关闭内部低频 RC) ,即相当于 禁止 WDT。写入非 0 数据时,将启动 WDT。 下面以44KHz 为例进行计算,真实的内部低频 RC 频率可通过定时器 5 进行捕获测量得到。 溢出时间 = WDT分频系数 * (WDTCCR[7:0]+1))/实际内部低频RC频率。 WDTCCR[7:0] = 0xFF 看门狗溢出时间如下表。 PS2 PS1 PS0 WDT分频系数 调整步进值 WDT最大溢出时间@44K 0 0 0 8 0.182ms 46.55ms 0 0 1 16 0.364ms 93.09ms 0 1 0 32 0.728ms 186.18ms 0 1 1 64 1.456ms 372.36ms 1 0 0 128 2.912ms 744.73ms 1 0 1 256 5.824ms 1489.45ms 1 1 0 512 11.648 ms 2978.91ms 1 1 1 1024 23.296ms 5957.82ms
13 通用异步收发器UART
13.1 UART 特性
➢ 多种工作方式 ➢ 多种错误检测 13.2 工作方式 UART有4种工作方式,在四种方式中,任何将SBUF作为目标寄存器的写操作都会启动发送。在方 式0中由条件RI = 0和REN = 1初始化接收。这会在TXD引脚上产生一个时钟信号,然后在RXD引脚上移 出8位数据。在其它方式中由输入的起始位初始化接收(如果RI = 0和REN = 1)。外部发送器通信以发 送起始位开始。在发送之前TXD引脚必须被设置为输出高电平。 SM0 SM1 工作方式 类型 波特率 0 0 方式0 同步 波特率是Fosc/12×6UX6 0 1 方式1 异步 定时器4的溢出率/16 1 0 方式2 异步 (2SMOD /64)×Fosc 1 1 方式3 异步 定时器4的溢出率/16 13.2.1 方式 0:同步半双工通讯 方式0支持与外部设备的同步通信,在RXD引脚上收发串行数据,TXD引脚发送移位时钟。 HC89F0332/0322/0312提供TXD引脚上的移位时钟,因此这种方式是串行通信的半双工方式。在这个方 式中,每帧收发8位,低位先接收或发送。无论发送或接收数据,串行时钟将一直由MCU产生,因此任 何连接,方式0都以MCU为主机模式。 通过置UX6位为0或1,波特率固定为Fosc的1/12或1/2。当UX6位等于0时,串行端口以Fosc的1/12运 行,当UX6位等于1时,串行端口以Fosc的1/2运行。与标准8051唯一不同的是,HC89F0332/0322/0312在 方式0中有可变波特率。 功能块框图如下图所示,数据通过 RXD 引脚移入和移出串行端口,移位时钟由 TXD 引脚输出。
位到移位寄存器。9个数据位和1个停止位移入之后,移位寄存器的内容被分别装入SBUF和RB8中,RI 置1,但必须满足下列条件: (1) RI = 0 (2) SM2 = 0或者接收的第9位= 1,且接收的字节符合约定从机地址 如果这些条件被满足,那么第9位移入RB8,8位数据移入SBUF,RI被置位。否则接收的数据帧会 丢失。 在停止位的当中,接收器回到寻找 RXD 引脚上的另一个下降沿。用户必须用软件清除 RI,然后 才能再次接收。 Figure 13-9 模式2 数据接收时序框图
13.2.4 方式 3:9 位 UART,可变波特率,异步全双工 方式3 使用方式2 的传输协议以及方式 1 的波特率产生方式。 TX START TX CLOCK RX START RX CLOCK TX SHIFT RX SHIFT LOAD SBUF R1SERIAL CONTROLLER WIRE TO SBUF STOP PARIN START LOAD CLOCK SOUT TRANSMIT SHIFT REGISTER INTEMAL DATA BUS TXD SERIAL PORT INTERRUPT CLOCK SIN PAROUT SBUF READ SBUF SBUF BIT DETECTOR ÷16 ÷16 1-TO-0 DETECTOR SAMPLE BAUD RATE GENERATOR RXD RECEIVE SHIFT REGISTER INTERNAL DATA BUS OVERFLOW FROM 7FFF TO 0000 D8 RB8 *须先将功能端口映射到所设I/O Figure 13-10 UART 模式3 功能框图 13.3 波特率发生器 定时器4 可以作为 UART 的波特率发生器。选择定时器 4 的工作方式 1 作为波特率发生器。该方 式与自动重载方式相似。 定时器4 的溢出会引起软件将定时器 4 重载寄存器中的 16 位值载入定时器4 的计数器中, 此时也会产生溢出中断。 如果不希望中断发生, 可以关闭ET4。 波特率由下列公式计算: BaudRate = 16 × fT4/PRESCALER 65536−[TH4,TL4],用定时器4 作为波特率发生器。 上式中,TH4 和TL4 为定时器4 数据寄存器。 下表为常用Fosc频率与常用波特率所对应的定时器4的计数值:
常用波特率 Fosc 4MHz 8MHz 16MHz 32MHz
1200 FF30 FE5F FCBF F97D
2400 FF98 FF30 FE5F FCBF
4800 FFCC FF98 FF30 FE5F
9600 FFE6 FFCC FF98 FF30
19200 FFF3 FFE6 FFCC FF98
13.4 多机通信 13.4.1 软件地址识别 方式2和方式3具有适用于多机通讯功能。在这两个方式下,接收的是9位数据,第9位移入RB8中, 之后是停止位。可以这样设定UART:当接收到停止位,且RB8 = 1时,串行口中断有效(请求标志RI 置位)。此时置位SM2位,UART工作在多机通讯模式。 在多机通讯系统中,按如下所述来使用这一功能。当主机要发送一数据块给几个从机中的一个时, 先发送一地址字节,以寻址目标从机。地址字节与数据字节可用第9数据位来区别,地址字节的第9位为 1,数据字节的第9位为0。 如果从机SM2为1,则不会响应数据字节中断。地址字节可以使所有从机产生中断,每一个从机都 检查所接收到的地址字节,以判别本机是不是目标从机。被寻到的从机对SM2位执行清零操作,并准备 接收即将到来的数据字节。当接收完毕时,从机再一次将SM2置位。没有被寻址的从机,则保持SM2 位为1,不响应数据字节。 注意:在方式1中,SM2用来检测停止位是否有效,如果SM2 = 1,接收中断不会响应直到接收到一 个有效的停止位。 13.4.2 自动(硬件)地址识别 在方式2和方式3中,SM2置位,UART运行状态如下: 接收到停止位,RB8的第9位为1(地址字节) , 且接收到的数据字节符合UART的从机地址,UART产生一个中断。从机将SM2清零,接收后续数据字 第9位为1表明该字节是地址而非数据。 当主机要发送一组数据给几个从机中的一个时, 必须先发送 目标从机地址。 所有从机等待接收地址字节, 为了确保仅在接收地址字节时产生中断,SM2位必须置位。 自动地址识别的特点是只有地址匹配的从机才能产生中断,硬件完成地址比较。 中断产生后,地址匹配的从机清零SM2,继续接收数据字节。地址不匹配的从机不受影响,将继续 等待接收和它匹配的地址字节。全部信息接收完毕后,地址匹配的从机应该再次把SM2置位,忽略所有 传送的非地址字节,直到接收到下一个地址字节。 使用自动地址识别功能时,主机可以通过调用给定的从机地址选择与一个或多个从机通信。主机 使用广播地址可以寻址所有从机。 有两个特殊功能寄存器, 从机地址 (SADDR) 和地址屏蔽 (SADEN)。 从机地址是一个8 位的字节,存于SADDR 寄存器中。SADEN 用于定义 SADDR 各位的有效与否,如 果SADEN 中某一位为 0,则SADDR 中相应位被忽略,如果SADEN 中某一位置位,则SADDR 中相
应位将用于产生约定地址。这可以使用户在不改变 SADDR 寄存器中的从机地址的情况下灵活地寻址 多个从机。 从机1 从机2 SADDR 10100100 10100111 SADEN 11111010 11111001 约定地址 10100x0x 10100xx1 广播地址 1111111x 11111111 从机1和从机2的约定地址最低位是不同的。从机1忽略了最低位,而从机2的最低位是1。因此只与 从机1通讯时,主机必须发送最低位为0的地址(10100000)。类似地,从机1的第1位为0,从机2的第1 位被忽略。因此,只与从机2通讯时,主机必须发送第1位为1的地址(10100011)。如果主机需要同时 与两从机通讯, 则第0位为1,第1位为0,第2位被两从机都忽略, 两个不同的地址用于选定两个从机 (1010 0001和1010 0101)。 主机可以通过广播地址与所有从机同时通讯。这个地址等于SADDR和SADEN的位或,结果中的0 表示该位被忽略。多数情况下,广播地址为0xFF,该地址可被所有从机应答。 系统复位后,SADDR和SADEN两个寄存器初始化为0,这两个结果设定了约定地址和广播地址为 xxxxxxxx(所有位都被忽略) 。 这有效地去除了多从机通讯的特性, 禁止了自动寻址方式。 这样的UART 将对任何地址都产生应答,兼容了不支持自动地址识别的8051控制器。 用户可以按照上面提到的方法实 现软件地址识别的多机通讯。 13.5 帧出错检测 3个错误标志位被置位后,只能通过软件清零,尽管后续接收的帧没有任何错误也不会自动清零。 13.5.1 发送冲突 如果在一个数据发送正在进行时,用户软件写数据到SBUF寄存器时,发送冲突位(TXCOL位)置 1。如果发生了冲突,新数据会被忽略,不能被写入发送缓冲器(即不影响传送)。 13.5.2 接收溢出 RI置1,接收缓冲器中的数据未被读取,RI被清0,又开始新的数据接收,若在新的数据接收完成前 (RI置1)还未读取之前接收缓冲区中的数据,在那么接收溢出位(RXROV位)置位。如果发生了接收 溢出,接收缓冲器中原来的数据不影响,后面的数据则丢失。 13.5.3 帧出错 如果检测到一个无效(低)停止位,那么帧出错位(FE位)置1。
13.6 UART 相关寄存器
13.6.1 UART 控制寄存器 SCON、SCON2
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 FE RXROV TXCOL REN TB8 RB8 TI RI 位编号 位符号 说明 7 FE 帧错误检测位 0:无帧错误或软件清 0 1:有帧错误,硬件置 1
6 RXROV
接收溢出标志位 0:无接收溢出或软件清 0 1:接收溢出,硬件置 1
5 TXCOL
发送冲突标志位 0:无发送冲突或软件清 0 1:有发送冲突,硬件置 1
4 REN
串行接收使能控制位 0:禁止串行接收 1:允许串行接收
3 TB8 方式2/方式3 时,为要发送的第 9 位数据,由软件置 1 或清0
2 RB8 方式 2/方式 3 时,为接收到的第 9 位数据,作为奇偶校验位或地址帧/数据帧的
标志位 1 TI 发送中断请求中断标志位 0:软件清0 1:方式0 时,当串行发送数据第 8 位结束时,由硬件自动置 1,其它方 式时,在停止位开始发送时由硬件置 1 0 RI 接收中断请求中断标志位 0:软件清0 1:方式0 时,当串行接收数据第 8 位结束时,由硬件自动置 1,其它方 式时,串行接收到停止位开始时刻由硬件置1 SCON2 位编号 7 6 5 4 3 2 1 0 R/W R/W R R/W R R R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SMOD - UX6 - SM0 SM1 SM2
位编号 位符号 说明
7 SMOD
波特率加倍控制位 0:在方式2 中,波特率为系统时钟 Fosc 的1/64 1:在方式2 中,波特率为系统时钟 Fosc 的1/32 6 - 保留位(读为0,写无效)
5 UX6
串口模式0 的通信速度设置位 0:串口模式0 时钟为 Fosc/12 1:串口模式0 时钟为 Fosc/2 4-3 - 保留位(读为0,写无效) 2-1 SM0:SM1 串口工作方式选择位,详细见下表
0 SM2
多机通信使能控制位(第九位“1”校验器) 0:在方式1 时,不检测停止位,停止位无论是 0 还是1 都会置位 RI 在方式2和3时,不检测第9位,任何字节都会置位RI 1:在方式1 时,允许停止位确认检验,只有有效的停止位“1”才能置位RI 在方式2和3时,只有地址字节(第9位=“1”)才能置位RI SM0 SM1 工作方式 功能说明 波特率 0 0 方式0 同步移位串行方式:移位寄存器 当UX6 = 0时,波特率是Fosc/12 当UX6 = 1时,波特率是Fosc/2 0 1 方式1 8位UART,波特率可变 定时器4/5的溢出率/16 1 0 方式2 9位UART (2SMOD /64)×Fosc 1 1 方式3 9位UART,波特率可变 定时器4/5的溢出率/16
13.6.2 UART 数据缓冲寄存器 SBUF
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SBUF[7:0] 位编号 位符号 说明 7-0 SBUF[7:0] 串口缓冲寄存器:写为需要发送的数据,读为接收到的数据 实际上该地址上有 2 个独立寄存器, 一个用于接收数据,一个用于发送 数据。当数据写入SBUF,这是个发送寄存器并且移位进行串口发送。当 数据从SBUF 读出,这是个接收寄存器。
13.6.3 UART 自动地址识别 SADDR、SADEN
从机地址寄存器SADDR 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SADDR[7:0] 位编号 位符号 说明 7-0 SADDR[7:0] 从机地址寄存器 从机地址掩码寄存器 SADEN 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SADEN [7:0] 位编号 位符号 说明 7-0 SADEN [7:0] 从机地址掩码寄存器 13.6.4 波特率选择寄存器 BRTSEL 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R R/W 复位值 0 0 0 0 0 0 0 0 位符号 UART_BRT_SEL 位编号 位符号 说明 7-1 - 保留位
0 UART_BRT_SEL
UART 波特率选择位 0:定时器4 的溢出率 1:定时器5 的溢出率
14 串行外部设备接口SPI
14.1 SPI 特性
➢ 全双工,三/四线同步传输 ➢ 主从机操作 ➢ 4级可编程主时钟频率 ➢ 极性相位可编程的串行时钟 ➢ 可选择数据传输方向 ➢ 写冲突及接收溢出标志 ➢ 带MCU中断的主模式模式冲突检测 ➢ 带MCU中断的传输结束标志 ➢ 主模式支持高达8Mbps的通信速率(Fosc=32MHz) ,从模式下通信速率须在Fosc /16及Fosc /16以 下
14.2 SPI 信号描述
主输出从输入(MOSI) :该信号连接主设备和一个从设备,数据通过MOSI 从主设备串行送到从 设备,主设备输出,从设备输入。 主输入从输出(MISO) :该信号连接主设备和一个从设备。数据通过MISO 从从设备串行传入主 设备, 从设备输出, 主设备输入。 若该设备为从设备且未被选时, 从设备的MISO 引脚处于高阻状态。 串行时钟(SCK) :该信号用作控制MOSI 和MISO 线上输入输出数据的同步移动,每8 个时钟周 期MOSI 和MISO 线上传送一个字节,如果从设备未被选中,SCK 信号将被此设备忽略。注意:只有 主设备才能产生 SCK 信号。 从设备选择引脚(SS): 每个从属外围设备由一个从选择引脚SS选择,当引脚信号为低电平时, 表明该从设备被选中。主设备可以通过软件控制连接于从设备SS引脚的端口电平选择每个从设备,很 明显,只有一个主设备可以驱动通讯网络。为了防止 MISO 总线冲突,同一时间只允许一个从设备与 主设备通讯。在主设备模式中,SS引脚状态关联 SPI 状态寄存器 SPSTAT中MODF 标志位以防止多个 主设备驱动MOSI 和SCK。 下列情况,SS引脚可以作为普通端口或其它功能使用: (1) 设备作为主设备,SPI 控制寄存器 SPCTL 寄存器的 SSIG 位置 1。这种配置仅仅存在于通 讯网络中只有一个主设备的情况,因此,SPI 状态寄存器 SPSTA 中MODF 标志位不会被置 1。 (2) 设备配置为从设备,SPI 控制寄存器 SPCTL 的 CPHA 位和 SSIG 位置 1。这种配置情况存 在于只有一个主设备一个从设备的通讯网络中,因此,设备总是被选中的,主设备也不需要控制从设 备的SS引脚选择其作为通讯目标。 从设备的SS引脚被使能时,其它主设备可通过使该引脚维持低电平,从而选中该从设备。为防止 MISO 总线冲突,原则上不允许两个及以上的从设备被选中。 主设备的SS引脚被使能时,若SS被拉低将置模式错误标志 MODF(可中断) ,且MSTR 位也将被 清0,从而使该设备强制切换成从设备。 当MSTR = 0(从模式)及CPHA = 0 时,SSIG 必须为 0,因为此时数据传送需要SS引脚配合,才 能完成多数据传送。
14.3 SPI 时钟速率
在主模式下,SPI 的速率有 4 级选择,分别是内部时钟的 4、16、64 或128 分频,可通过SPCTL 寄存器的SPR[1:0]位进行选择。
14.4 SPI 功能框图
时钟逻辑 SPI控制寄存器 分频器 选择 SPI控制 SPI状态寄存器 8位移位寄存器 读数据缓冲区 Clock SPIF WCOL RXOV MODF 系统时钟 SPI中断请求 S M M S S M 管 脚 控 制 逻 辑 MISO MOSI SCLK SS SSIG SPEN DORD MSTR CPHA CPOL SPR1 SPR0 MSTR SPENMSTR SPEN SPI时钟 SPR0 SPR1 内部数据总线 *须先将功能端口映射到所设I/O Figure 14-1 SPI 功能方框图
14.5 SPI 工作模式
SPI 可配置为主模式或从模式中的一种。SPI 模块的配置和初始化通过设置相关寄存器来完成。进 一步设置相关寄存器即可完成数据传送。 在 SPI 通讯期间,数据同步地被串行的移进移出,串行时钟线( SCK)使两条串行数据线 (MOSI&MISO)上数据的移动和采样保持同步。从设备选择线( SS)可以独立地选择从属设备;如 果从设备没有被选中,则不能参与 SPI 总线上的活动。 当 SPI 主设备通过 MOSI 线传送数据到从设备时,从设备通过 MISO 线发送数据到主设备作为相 应,从而实现在同一时钟下数据发送与接收的同步全双工传输。发送移位寄存器和接收寄存器使用相 同的SFR 地址,对SPI 数据寄存器 SPDAT 进行写操作将写入发送移位寄存器,对SPDAT 寄存器进行 读操作将获得接收移位寄存器的数据。 注意:写入的数据不会影响到需要读出的数据。
Figure 14-2 全双工主从互联图 主模式 (1) 模式启动 SPI 主设备控制控制 SPI 总线上的所有数据传送的启动。一个 SPI 总线中只允许一个主设备可以 启动传送。 (2) 发送 在SPI 主模式下,写一个字节数据到 SPI 数据寄存器 SPDAT,数据将会写入发送移位缓冲器。如 果发送移位寄存器中已经存在一个数据或正在传送一个数据, 那么主SPI 将产生一个 WCOL 信号以表 明写入太快。但是发送移位寄存器中的数据不会受到影响,发送也不会中断。 (3) 接收 当主设备通过MOSI 线传送数据到从设备时,同时对应的从设备也可以通过 MISO 线将其发送移 位寄存器的数据传送给主设备的接收移位寄存器, 实现全双工操作。故SPIF 标志置 1 即表示数据发送 完成也表示数据接收完成。本SPI 模块接收为双缓冲器,即数据可以在SPIF 置 1 后读出,但必须在下 一字节数据接收完成前读出,否则将置接收溢出标志 RXOV,如果发生接收溢出,则后面的数据将不 会被移入接收寄存器,接收溢出时,SPIF 可正常置 1。 从模式 (1) 模式启动 将 MSTR 置 0(若SS被使能则必须拉低)时,设备处于从模式下运行,数据传送过程中设备模式 不能改变(SS引脚必须维持低电平) ,否则数据传送将失败(SPIF 不会被置 1)。 (2) 发送 SPI 从设备下不能启动数据传送,所以 SPI 从设备必须在主设备开始一次新的数据传送之前将要 传送给主设备的数据写入发送移位寄存器。若发送前未写入数据到发送移位寄存器,从设备将传送数 据“0x00”给主设备。若写入数据时发送移位寄存器已经存在数据(或发生在传送过程中) ,那么 SPI 从设备的 WCOL 标志位将置 1,表示发生写 SPDAT 冲突。但是移位寄存器的数据不受影响,传送也 不会被中断,传送完成 SPIF 将被置1。 (3) 接收 从模式下,按照主设备控制的 SCK 信号,数据通过 MOSI 引进移入,当计数器计数 SCK 边缘数 到 8 时,表示一个字节数据接收完毕,SPIF 将置 1,数据可以通过此时读取 SPDAT 寄存器获得,但 必须在下一数据接收完成前被读出,否则将置接收溢出标志 RXOV,如果发生接收溢出,则后面的数 据将不会被移入接收寄存器,接收溢出时,SPIF 可正常置 1。
14.6 SPI 传送形式
通过软件设置寄存器的CPOL 位和CPHA 位, 用户可以选择SPI 时钟极性和相位的四种组合方式。 CPOL 位定义时钟的极性,即空闲时的电平状态。CPHA 位定义时钟相位,即定义允许数据移位采样 的时钟边沿。在通信的两个主从设备中,时钟极性相位设置应当保持一致。 Figure 14-3 数据传送形式(CPHA=0) 如果CPHA = 0;数据在SCK 的第一沿就被捕获,所以从设备必须在SCK 的第一个沿之前就准备 好数据,因此,SS引脚的下降沿从设备就开始数据。SS引脚在每次传送完一个字节后必须拉高,在发 送下一字节之前重新又被拉低,故 CPHA = 0 时,SSIG 位无效,即SS脚被强制使能。 Figure 14-4 数据发送形式(CPHA=1) 如果CPHA = 1,主设备在SCK 的第一个沿将数据输出到 MOSI 线上,从设备把SCK 的第一个沿 作为开始发送信号。用户必须在第一个 SCK 的前 2 个沿内完成对 SPDAT 完成写操作。传送过程中彼 此模式不能改变,否则数据发送接收将失败,模式被改变的寄存器数据(发送数据)及状态(接收为 空)不变。这种数据传送形式为单一主从设备间通信的首先形式。
Figure 14-5 CPHA/SS时序
14.7 SPI 出错检测
SPSTA 寄存器中的一些标志位表示SPI 通信中的通信错误情况: (1) 模式故障(MODF) SPI 主模式下的模式故障出错表明SS引脚上的电平状态与实际设备模式不一致,MODF 标志位将 被置1(可产生中断) , 以来表明SPI 控制系统中存在多主设备的冲突情况, 此时硬件将自动清除SPEN 位,即先关闭SPI 模块;同时硬件也将自动清除MSTR 位。需要重启SPI 模块时,MODF 必须先软件 写1 清0,再置SPEN 位。 (2) 写冲突(WCOL) 在数据未发送或发送期间继续对 SPDAT 做写入操作会引起写冲突,WCOL 位会被置 1, 但发送不 会终止。需软件写 1 清0 (3) 接收溢出(RXOV) 在接收第二数据完成前仍未清除之前接收数据产生的 SPIF 标志, 将置接收溢出标志RXOV,SPIF 被置1 时,后面的数据将不会被传入接收寄存器,故接收的数据存入SPDAT 前必须清除 SPIF,RXOV 位需软件写1 清0。
14.8 SPI 中断
两种SPI 状态标志 SPIF&MODF 都能产生一个 CPU 中断请求。 串行数据传输完成标志 SPIF:完成一个字节数据发送/接收后由硬件置 1。 故障模式标志MODF: 该位被置1 是指设备模式 (主机) 与SS引脚电平不一致,SSIG 位为1(SS未 被使能)时,无MODF 中断请求。 Figure 14-6 SPI 中断请求的产生
14.9 SPI 配置对照
SPEN SSIG 𝐒𝐒 MSTR 主或从模式 MISO MOSI SCK 备注 0 x I/O x SPI功能禁止 I/O I/O I/O SPI禁止 1 0 0 0 从机模式 输出 输入 输入 选择从机 1 0 1 0 从机模式未 被选中 高阻 输入 输入 未被选中。MISO为高阻, 以避免总线冲突 1→0 0 0 1→0 关闭SPI 输出 输入 输入 SS配置为输入,SSIG为0。 如果SS被驱动为低电平。 则被选择作为从机。此时 MSTR将清零,并置模式 错误标志MODF,可用于 请求中断。 1 0 1 1 主(空闲) 输入 高阻 高阻 当主机空闲时MOSI和 SCK为高阻态以避免总线 冲突。用户必须将SCK上 拉或下拉 (根据CPOL的取 值)以避免SCK出现悬浮 状态。 主(激活) 输出 输出 作为主机激活时,MOSI 和SCK为推挽输出。 1 1 I/O 0 从 输出 输入 输入 CPHA不能为0 1 1 I/O 1 主 输入 输出 输出 -
14.10 SPI 相关寄存器
14.10.1 SPI 控制寄存器 SPCTL
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SSIG SPEN DORD MSTR CPOL CPHA SPR[1:0] 位编号 位符号 说明
7 SSIG
SS引脚使能位 0:SS脚被使能用于确定器件为主机还是从机 1:MSTR 确定器件为主机还是从机,SS脚作为普通I/O 使用
6 SPEN
SPI 使能位 0:禁止SPI 模块,相关管脚为普通 I/O(建议I/O 时设为高阻) 1:使能SPI 模块,相关管脚为 SPI 通信管脚
5 DORD
传送方向选择位 0:MSB先发送 1:LSB先发送
4 MSTR
主/从机模式选择位 0:从机模式 1:主机模式
3 CPOL
SPI 时钟极性选择位 0:SCK 空闲时为低电平 1:SCK 空闲时为高电平
2 CPHA
SPI 时钟相位选择位 0:数据在SPI 时钟的第一个边沿采样 1:数据在SPI 时钟的第二个边沿采样 注:SSIG = 0&CPHA = 0 时,数据在SS为低被驱动;CPHA = 1 时,数 据在SCK 的前时钟沿驱动。 1-0 SPR[1:0] SPI 时钟速率选择控制位 00:Fosc /4 01:Fosc /16 10:Fosc /64 11:Fosc /128
14.10.2 SPI 状态寄存器 SPSTAT
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R R R R 复位值 0 0 0 0 0 0 0 0 位符号 SPIF WCOL RXOV MODF - 位编号 位符号 说明
7 SPIF
SPI 传输完成标志位 0:软件写1 清0 1:一次传送完成时,硬件置 1,也做中断请求标志位
6 WCOL
SPI 写冲突标志位 0:软件写1 清0 1:传送过程中对 SPDAT 执行写操作硬件置 1(正在传送的数据不受影响)
5 RXOV
SPI 接收溢出标志位 0:软件写1 清0 1:发生接收溢出,硬件置 1 注意:接收为双BUFF,接收溢出发生在第二个数据传送完成前仍未清除之前 接收数据产生的 SPIF 标志,故每次准备接收下一个数据前必须先清除 SPIF, 否则RXOV 将置1,RXOV 置1 不会影响 SPI 接收。
4 MODF
模式故障标志位 0:软件写1 清0 1:SS 引脚电平与 SPI 模式不一致时,硬件置1(且立即切成从机模式) ,也 做中断请求标志位 3-0 - 保留位(读为0,写无效)
14.10.3 SPI 数据寄存器 SPDAT
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 SPDAT[7:0] 位编号 位符号 说明 7-0 SPDAT[7:0] SPI 数据寄存器
15 模数转换ADC
15.1 ADC 特性
➢ 多达16 个外部通道及2 个内部通道(包括 GND)的 12/10 位ADC 检测 ➢ 参考电压可选内部 2V、3V、4V、VDD 及外部VREF ➢ 支持外部触发ADC ➢ 可选择转换数据对齐方向 ➢ 可选择转换数据位数 ➢ ADC 转换完成可中断 ➢ 单通道(P0.2 端口)ADC 唤醒中断 分频器 ADCEN ADCST ADCL、ALIGNADCIF Fosc 清零 置位 A/D转换结果 ADCRH寄存器 ADCRL寄存器 模拟AD转换 通道控制 Figure 15-1 ADC 功能框图
15.2 ADC 省电唤醒
在芯片进入省电模式 (IDLE 或PD) 后, 可通过使能ADC 省电唤醒功能将芯片从省电模式唤醒, 这个功能可以实现用一个 IO 口检测多个按键。 具体操作如下: 1. 通过配置ADC 唤醒控制寄存器 ADCWC 允许唤醒; 2. 将P0.2 配置为模拟通道; 3. 通过P0.2 端口上拉电阻选择寄存器配置唤醒电阻(比如配置 P0.2 上拉电阻为50 KΩ); 4. 使能IE 和IE1 寄存器里的EA 和EADC; 5. 进入省电模式(IDLE 或PD);
15.3 ADC 相关寄存器
15.3.1 ADC 控制寄存器 ADCC0、ADCC1
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 1 1 位符号 ADCEN ADCST ADCIF - VREFO VREFS INREF_S[1:0] 位编号 位符号 说明
7 ADCEN
ADC 模块电源控制位 0:关闭ADC 转换电源 1:打开ADC 转换电源 注意:1. 在掉电模式下,ADCEN 强制为 0。 2. ADCEN 置1 或切换转换通道后,建议延时 20us 后再启动ADC 转换。 3. 启动ADC 转换时,需要关闭 ADC 省电唤醒功能。
6 ADCST
ADC 启动控制位 0:转换结束后,硬件自动清 0,在转换过程中,软件清 0 将终止转换。 1:启动转换 注:启动转换时,ADCIF 需要先清 0,ADCIF 位为 1 时,置ADCST 不能启动 新的转换。
5 ADCIF
ADC 中断标志位 0:无ADC 转换中断 1:转换结束后,硬件置1,可用于中断请求(必须软件清 0) 4 - 保留位(读为0,写无效)
3 VREFO
VREF 输出使能位 0:VREF 不输出 1: 从引脚P0.4 输出内部VREF, 此时需要设置P0.4 为模拟输入, 而且VREFS 必须为0 注:VREF 输出驱动能力较弱,仅供测试使用。
2 VREFS
VREF 选择 0:选内部VREF 1:选外部VREF(此时 P0.4 只做ADC 参考电压输入,且设为模拟输入) 1-0 INREF_S ADC 内部参考电压选择位 00:VDD 01:内部4V 10:内部3V 11:内部2V 其他:保留位 注意:内部参考电压选择为 2.0 V 时,VDD 电压须高于 2.9 V ;内部参考电压 系统进入掉电模式前,建议将ADC 参考电压选择非 VDD,可以进一步降低系 统功耗。
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 ICHS[1:0] - XCHS[3:0] 位编号 位符号 说明 7-6 ICHS[1:0] ADC 内部输入通道选择 00:禁止内部通道接入 01:1/4VDD 作为ADC 输入通道 10:保留位 11:GND 接入 5-4 - 保留位(读为0,写无效) 3-0 XCHS[3:0] ADC 外部输入通道选择 XCHS[3:0] = x(x = 0…15),表示当前检测通道为ANx,如XCHS[3:0] = 2, 表示当前检测通道为外部通道 AN2。 注:外部通道除设置 XCHS[3:0],还需设置对应管脚的功能为模拟输入。
15.3.2 ADC 控制寄存器 ADCC2、ADCC3
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 ADCL ALIGN ADCTS[2:0] ADCS[2:0] 位编号 位符号 说明
7 ADCL
ADC 转换数据长度控制位 0:ADC 转换结果为 12 位数据 1:ADC 转换结果为 10 位数据(取12 位数据的高 10 位)
6 ALIGN ADC 数据对齐方向控制位,见下面的ADC 转换数据格式说明表
5-3 ADCTS [2:0] ADC 时钟为4MHZ 时, 配置此3bits 为000; 一次转换需要22 个ADC_CLK ADC 时钟为 2MHZ&1MHZ 时,配置此3bits 为001 或者010;一次转换需 要19 个ADC_CLK ADC 时钟为<1MHZ 时,配置此 3bits 为 011 或 100 或 101 或 110 或 111; 一次转换需要15 个ADC_CLK 注:此配置位只针对选择内部参考电压 2/3/4V,如果选择 VDD 作参考电 压,无论ADC 时钟为多少,都可以选择 15 个ADC_CLK 2-0 ADCS[2:0] ADC 时钟选择位 000:Fosc/2 001:Fosc/4 010:Fosc/6
011:Fosc/8 100:Fosc/12 101:Fosc/16 110:Fosc/24 111:Fosc/32 ADC转换数据格式说明表: ADCL ALIGN ADCRH ADCRL 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 / / / / D3 D2 D1 D0 0 1 / / / / D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 1 0 D11 D10 D9 D8 D7 D6 D5 D4 / / / / / / D3 D2 1 1 / / / / / / D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 ADCC3 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - FCLKEN - TRIGSEL[4:0] 位编号 位符号 说明 7 - 保留位
6 FCLKEN
选择内部参考电压时,ADC 转换的加速使能 0:使用内参的ADC 可以最快工作在 2MHz 的频率 1:使用内参的ADC 可以最快工作在 4MHz 的频率 5 - 保留位 4-0 TRIGSEL[4:0] ADC 触发信号选择位 00000:ADC 转换启动仅由ADCST(ADCC0.6)控制 00001:PWM0 上升沿 00010:PWM0 下降沿 00011:PWM0 中点 00100:PWM0 终点 00101:PWM1 上升沿 00110:PWM1 下降沿 00111:PWM1 中点 01000:PWM1 终点 01001:PWM2 上升沿 01010:PWM2 下降沿 01011:PWM2 中点 01100:PWM2 终点 10001:定时器5 的T5 通道发生一次输入捕获事件 其他值:保留 注意:1、PWM 中点触发仅适用于中心对齐模式的 PWM 输出
2、当 ADCST 为 1 时(正在转换),外部触发信号不会影响 ADC 直到 本次ADC 转换结束即 ADCST 被硬件清0
15.3.3 ADC 触发延时计时器 ADCDLYH、ADCDLYL
位编号 7 6 5 4 3 2 1 0 R/W R R R R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 - ADCDLY[11:8] 位编号 位符号 说明 7-4 - 保留位 3-0 ADCDLY[11:8] ADC 外部触发延时启动计时器的高4 位 ADCDLYL 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 ADCDLY[7:0] 位编号 位符号 说明 7-0 ADCDLY[7:0] ADC 外部触发延时启动计时器的低 8 位,用于在外部触发启动 ADC 之 前插入一段延时,在延时计时结束时开始 ADC 转换 延时时间=ADCDLY[11:0]* ADC 时钟
15.3.4 ADC 唤醒控制寄存器 ADCWC
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R R R R R R 复位值 0 0 0 0 0 0 0 0 位符号 AMWEN AMWIF - 位编号 位符号 说明
7 AMWEN
ADC 唤醒模块允许位 0:禁止ADC 唤醒模块 1:允许ADC 唤醒模块 注:允许ADC 唤醒模块时,需要关闭 ADC。
6 AMWIF
ADC 唤醒模块中断标志位(与 ADC 转换共用中断向量) 0:无ADC 唤醒模块中断,软件清 0 1:发生ADC 唤醒模块中断,硬件置 1 注:相应唤醒模块被禁止时,即使条件满足,对应标志也不会被置 1。 需要使能 EADC。 5-0 - 保留位 注:唤醒电阻通过端口上拉电阻来配置。
15.3.5 ADC 转换结果寄存器 ADCRL、ADCRH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 ADCRL[7:0] ADCRH 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 ADCRH[7:0] 位编号 位符号 说明 7-0 ADCRH[7:0] ALIGN=0 时 ADCRH[7:0]为ADC 转换的高 8 位,ADCRL[3:0]为ADC 转换的低 4/2 位 ALIGN=1 时 ADCRH[3:0]为ADC 转换的高 4/2 位,ADCRL[7:0]为ADC 转换的低 8 位 7-0 ADCRL[7:0] 启动ADC 转换步骤: (1) 使能ADC 模块; (2) 选择模拟输入通道、参考电压、转换时钟、转换结果对齐方式等; (3) ADCST 置1 开始ADC 转换; (4) 等待ADCST = 0 或者ADCIF= 1 ,如果ADC 中断使能,则 ADC 中断将会产生,用户需要软件清 零ADCIF; (5) 从ADCRH/ADCRL 获得转换数据; (6) 重复步骤3-5 开始另一次转换
16 低电压检测/比较器 16.1 低电压检测/比较器特性 ➢ 支持内部VDD 多档位电压检测,并且可以产生中断 ➢ 支持端口电压检测,并可以产生中断或复位 ➢ 支持比较器功能 内部电压检测和 BOR 一样,也是检测VDD 电压,但独立于 BOR,因此可以检测比 BOR 设定电 压更高的各档检测电压点,可通过寄存器设定其检测电压点、其是否工作、其是否允许中断,方便客 户需求。 LVD 电压检测电路有一定的迟滞特性,迟滞电压为 0.1V 左右。即当待检测电压下降到所选 LVD 电压档位时LVD 会产生中断请求或复位,而待检测电压需要上升到LVD 档位电压+0.1V 时LVD 中断 请求或复位才会解除。 LVD 检测端口 P2.6 引脚上的电压,当低于电压检测电压点 1.2V 时,置相应标志,若中断允许, 则可产生中断请求;若中断不允许,端口电压检测将产生复位。端口电压检测产生的有效中断和复位 可以将芯片从PD 模式和 IDLE 模式唤醒。 LVD检测VDD电压时,不能产生复位,可通过有效中断将芯片从PD模式和IDLE模式唤醒。 CMPSTA LVDCMPEN LVDS P2.6/PLVD/CMP - CMPPS[1:0] 1.2V P2.5/CMP1 + P1.0/CMP2 + P1.1/CMP3 + VDD分压 Figure 16-1 LVD/比较器框图
16.2 低电压检测/比较器相关寄存器 16.2.1 控制寄存器 LVDC 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R R/W R/W R/W R/W 复位值 0 0 0 0 0 0 1 1 位符号 LVDCMPEN LVDS LVDIE - LVDF LVDV 位编号 位符号 说明
7 LVDCMPEN
LVD/比较器使能位 0:禁止LVD/比较器 1:允许LVD/比较器
6 LVDS
LVD 检测选择位 0:检测VDD 电压 1:检测P2.6 端口电压
5 LVDIE
LVD 中断允许位 0:禁止LVD 中断 1:允许LVD 中断 注意:禁止时,只要允许检测,LVDF 也可被置 1,但即使此时EA 被置1, 也不会产生中断请求。 当LVDS 为1,检测 P2.6 端口电压时: LVDIE=0:端口电压检测复位 LVDIE=1:端口电压检测中断 4 - 保留位
3 LVDF
低电压检测标志位 0:必须软件清0 1:VDD 电压低于检测选择电压时,硬件置 1,也做中断请求 注意:VDD 电压低于检测电压时间大于 LVDDBC 寄存器设置的消抖时间后 才会置LVDF,高于检测电压时,不会自动清除该位,必须软件清除,只有 在 VDD 电压持续高于检测电压时,软件清除才能起作用,如果 VDD 电压 持续持续低于检测电压,软件是无法清除 LVDF 的。 2-0 LVDV[2:0] VDD 电压检测电压点选择位 011:2.6V 100:3.0V 101:3.7V 110:3.9V 111:4.2V 注意:LVD 检测电压设置在 BOR 电压之上才有意义。 16.2.2 比较功能控制寄存器 LVDCMP 位编号 7 6 5 4 3 2 1 0
R/W R R R/W R R/W R/W R/W R/W 复位值 0 0 1 0 0 0 0 0 位符号 - - DBEN CMPSTA CMPIM[1:0] CMPPS[1:0] 位编号 位符号 说明 7-6 - 保留位
5 DBEN
消抖使能 0:不消抖 1:消抖 注意: 1. LVD 和CMP 都适用; 2. 掉电模式和空闲模式下自动不消抖,退出掉电模式和空闲模式有 DBEN 来控制是否消抖
4 CMPSTA
比较器输出状态 0:比较器正端电压小于负端电压 1:比较器正端电压大于负端电压 3-2 CMPIM[1:0] 当CMPPS[1:0]不选择00 时,需要配置这个寄存器: 00:不置位LVDF 01:CMP+从小于 CMP-到大于 CMP-后会置位 LVDF; 10:CMP+从大于 CMP-到小于 CMP-后会置位 LVDF; 11:CMP+从小于 CMP-到大于 CMP-或 CMP+从大于 CMP-到小于 CMP-都 置位LVDF 1-0 CMPPS[1:0] 比较器正端选择位 00:1.2V 01:CMP1 管脚为比较器的正端输入 10:CMP2 管脚为比较器的正端输入 11:CMP3 管脚为比较器的正端输入
16.2.3 去抖控制寄存器 LVDDBC 位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 LVDDBC[7:0] 位编号 位符号 说明 7-0 LVDDBC[7:0] LVD 消抖控制位 消抖时间 : LVDDBC[7:0] * 8Tcpu+2Tcpu 注:掉电模式和空闲模式下自动关闭,退出掉电模式和空闲模式又自动打开。
17 软件LCD
17.1 LCD 特性
➢ 支持1/2Bias 的LCD 点阵 ➢ 驱动能力可配置 ➢ COM 口数量和 SEG 口数量可任意配置 ➢ LCD 控制信号(COM 和SEG)由软件程序实现 ➢ 可以通过关闭LCDENU 或LCDEND 来得到一个精准的下拉电阻或上拉电阻 ➢ 可以通过同时关闭 LCDENU 和LCDEND 来实现多个端口的内部连接 LCDEND RLCD[1:0] LCD COM选择 COM COMxEN LCDENU VDD ½ VDD Figure 17-1 LCD 系统框图
17.2 LCD 帧
一个完整的LCD波形周期包含两个Frame,即Frame0和Frame1。 Frame 0 在Frame0中,COM信号输出可以是VDD,或是1/2VDD; 在Frame0中,SEG信号输出可以是GND,或是VDD。 COM口和SEG口的电压差为VDD时,LCD被点亮。 Frame 1 在Frame1中,COM信号输出可以是GND,或是1/2VDD; 在Frame1中,SEG信号输出可以是VDD,或是GND。 COM口和SEG口的电压差为VDD时,LCD被点亮。 COM口可以输出VDD,GND或1/2VDD。其中,1/2VDD是通过LCD模块的分压输出到IO上,此时 IO的模式配置为模拟输入,相应的COMPxEN使能,而VDD、GND是通过IO口的强推挽输出1和0来实 通过软件来决定SEG口输出VDD或GND。VDD、GND是通过IO口的强推挽输出1和0来实现。
下面的波形图显示了一个利用应用程序产生的典型1/2Bias LCD波形。COMn和SEGm引脚上所产生 的COM和SEG信号极性(0或1)通过软件来产生。 1/2Bias, 1/4Duty COM0 COM1 COM2 COM3 SEG0 VDD 1/2VDD GND VDD 1/2VDD GND VDD 1/2VDD GND VDD 1/2VDD GND VDD 1/2VDD GND Frame=1Frame = 0 SEG1 VDD 1/2VDD GND 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 Figure 17-2 1/2bias LCD 波形图
17.3 LCD 相关寄存器
17.3.1 LCD 控制寄存器 LCDCON
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R R R R 复位值 0 0 0 0 0 0 0 0 位符号 LCDENU LCDEND RLCD1 RLCD0 - 位编号 位符号 说明
7 LCDENU
LCD 上使能控制位 0:禁止 1:使能
6 LCDEND
LCD 下使能控制位 0:禁止 1:使能 5-4 RLCD[1:0] 软件LCD 电阻选择位 00:10kΩ 01:25kΩ 10:75kΩ 11:175kΩ 3-0 - 保留
17.3.2 COM 口使能控制寄存器 COMP0EN-COMP2EN
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 COMPxEN[7:0] 位编号 位符号 说明 7-0 COMPxENy 软件LCD COM 功能使能位 0:禁止,普通IO 1:使能 注:x = 0~2 y = 0-7
18 循环冗余校验CRC
18.1 CRC 特性
➢ 16 位CRC ➢ CRC 生成校验遵从 CRC-CCITT 多项式,即 0x1021 ➢ 初值可设为0x0000 或0xFFFF ➢ 计算与结果共用同一寄存器 每一次写入数据寄存器CRCL,其计算结果是前一次CRC计算结果和新计算结果的组合。 每一次读出数据寄存器[CRCH : CRCL],其值都为最后的CRC计算结果。 可通过设置寄存器 CRCC 的 CRCRSV 位来选择计算初值,但不会影响之前的 CRC 计算数据,只 有置寄存器 CRCC 的 CRCRST 位后,才会复位 CRC 计算器,后写入的数据将以新的初值计算 CRC 结果。 CRC-CCITT 生成器 CRCH CRCL CRCBIT CRCRSV CRCRST Figure 18-1 CRC 功能框图
18.2 CRC 相关寄存器
18.2.1 CRC 控制寄存器 CRCC
位编号 7 6 5 4 3 2 1 0 R/W R R R R R R/W R/W W 复位值 0 0 0 0 0 0 0 0 位符号 - CRCBIT CRCRSV CRCRST
位编号 位符号 说明 7-3 - 保留位(读为0,写无效)
2 CRCBIT
CRC BIT 翻转控制位 0:MSB first 1:LSB first
1 CRCRSV
CRC 复位初值选择位 0:复位初值为0x0000 1:复位初值为0xFFFF
0 CRCRST CRC 计算器复位控制位
置1 复位CRC 计算器,硬件自动清 0
18.2.2 CRC 数据寄存器 CRCL、CRCH
位编号 7 6 5 4 3 2 1 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 位符号 CRCL[7:0] 位编号 位符号 说明 7-0 CRCL[7:0] 写入数据时为 CRC 计算器的输入数据 读出数据时为 CRC 计算结果的低字节 注:写入数据时,自动启动 CRC 计算,完后自动关闭 CRCH 位编号 7 6 5 4 3 2 1 0 R/W R R R R R R R R 复位值 0 0 0 0 0 0 0 0 位符号 CRCH[7:0] 位编号 位符号 说明 7-0 CRCH[7:0] 对该寄存器写入数据无效 读出数据时为 CRC 计算结果的高字节 注:每一次写入待计算数据,其计算结果是由与前一次计算结果共同生成。
19 代码选项 1. 外部复位使能 ➢ P2.7 为外部复位引脚(默认) 。该口作为外部复位引脚时,无法作为普通I/O 使用 ➢ P2.7 为普通IO 引脚 2. BOR 检测电压 ➢ 2.6V(默认) ➢ 3.0V ➢ 3.6V ➢ 3.9V ➢ 4.2V 3. 复位后等待时间 ➢ 4ms ➢ 8ms(默认) ➢ 16ms
20 指令表 助记符 指令说明 字节 周期 代码 数据传递类指令 MOV A,Rn 寄存器送到累加器 1 1 0xE8-0xEF MOV A,direct 直接地址数据送到累加器 2 2 0xE5 MOV A,@Ri 间接 RAM 数据送到累加器 1 2 0xE6-0xE7 MOV A,#data 立即数送到累加器 2 2 0x74 MOV Rn,A 累加器送到寄存器 1 1 0xF8-0xFF MOV Rn,direct 直接地址数据送到寄存器 2 2 0xA8-0xAF MOV Rn,#data 立即数送到寄存器 2 2 0x78-0x7F MOV direct,Rn 寄存器送到直接地址 2 2 0x88-0x8F MOV direct,direct 直接地址数据送到直接地址 3 3 0x85 MOV direct,A 累加器送到直接地址 2 2 0xF5 MOV direct,@Ri 间接 RAM 数据送到直接地址 2 2 0x86-0x87 MOV direct,#data 立即数送到直接地址 3 3 0x75 MOV @Ri,A 累加器送到间接RAM 1 1 0xF6-0xF7 MOV @Ri,direct 直接地址数据送到间接RAM 2 2 0xA6-0xA7 MOV @Ri,#data 立即数送到间接RAM 2 2 0x76-0x77 MOV DPTR,#data16 16 位立即数加载到数据指针 3 3 0x90 MOVC A,@A+DPTR 代码字节送到累加器 1 3 0x93 MOVC A,@A+PC 代码字节送到累加器 1 3 0x83 MOVX A,@Ri 外部 RAM(8 位地址)送到累加器 1 3 0xE2-0xE3 MOVX A,@DPTR 外部 RAM(16 位地址)送到累加器 1 3 0xE0 MOVX @Ri,A 累加器送到外部RAM(8 位地址) 1 3 0xF2-0xF3 MOVX @DPTR,A 累加器送到外部RAM(16 位地址) 1 3 0xF0 PUSH direct 直接地址数据压入堆栈 2 2 0xC0 POP direct 直接地址数据弹出堆栈 2 2 0xD0 XCH A,Rn 寄存器和累加器交换 1 1 0xC8-0xCF
XCH A, direct 直接地址数据和累加器交换 2 2 0xC5 XCH A, @Ri 间接 RAM 和累加器交换 1 2 0xC6-0xC7 XCHD A, @Ri 间接 RAM 和累加器交换低4 位字节 1 2 0xD6-0xD7 算术运算类指令 INC A 累加器加 1 1 1 0x04 INC Rn 寄存器加 1 1 1 0x08-0x0F INC direct 直接地址数据加1 2 2 0x05 INC @Ri 间接 RAM 加 1 1 2 0x06-0x07 INC DPTR 数据指针加 1 1 1 0xA3 DEC A 累加器减 1 1 1 0x14 DEC Rn 寄存器减 1 1 1 0x18-0x1F DEC direct 直接地址数据减1 2 2 0x15 DEC @Ri 间接 RAM 减 1 1 2 0x16-0x17 MUL AB 累加器和 B 寄存器相乘 1 4 0xA4 DIV AB 累加器除以B 寄存器 1 4 0x84 DA A 累加器十进制调整 1 1 0xD4 ADD A,Rn 寄存器与累加器求和 1 1 0x28-0x2F ADD A,direct 直接地址数据与累加器求和 2 2 0x25 ADD A,@Ri 间接 RAM 与累加器求和 1 2 0x26-0x27 ADD A,#data 立即数与累加器求和 2 2 0x24 ADDC A,Rn 寄存器与累加器求和(带进位) 1 1 0x38-0x3F ADDC A,direct 直接地址数据与累加器求和(带进位) 2 2 0x35 ADDC A,@Ri 间接 RAM 与累加器求和(带进位) 1 2 0x36-0x37 ADDC A,#data 立即数与累加器求和(带进位) 2 2 0x34 SUBB A,Rn 累加器减去寄存器(带借位) 1 1 0x98-0x9F SUBB A,direct 累加器减去直接地址数据(带借位) 2 2 0x95 SUBB A,@Ri 累加器减去间接RAM(带借位) 1 2 0x96-0x97 SUBB A,#data 累加器减去立即数(带借位) 2 2 0x94 逻辑运算类指令
ANL A,Rn 寄存器“与”到累加器 1 1 0x58-0x5F ANL A,direct 直接地址数据“与”到累加器 2 2 0x55 ANL A,@Ri 间接 RAM“与”到累加器 1 2 0x56-0x57 ANL A,#data 立即数“与”到累加器 2 2 0x54 ANL direct,A 累加器“与”到直接地址 2 2 0x52 ANL direct, #data 立即数“与”到直接地址 3 3 0x53 ORL A,Rn 寄存器“或”到累加器 1 1 0x48-0x4F ORL A,direct 直接地址数据“或”到累加器 2 2 0x45 ORL A,@Ri 间接 RAM“或”到累加器 1 2 0x46-0x47 ORL A,#data 立即数“或”到累加器 2 2 0x44 ORL direct,A 累加器“或”到直接地址 2 2 0x42 ORL direct, #data 立即数“或”到直接地址 3 3 0x43 XRL A,Rn 寄存器“异或”到累加器 1 1 0x68-0x6F XRL A,direct 直接地址数据“异或”到累加器 2 2 0x65 XRL A,@Ri 间接 RAM“异或”到累加器 1 2 0x66-0x67 XRL A,#data 立即数“异或”到累加器 2 2 0x64 XRL direct,A 累加器“异或”到直接地址 2 2 0x62 XRL direct, #data 立即数“异或”到直接地址 3 3 0x63 CLR A 累加器清零 1 1 0xE4 CPL A 累加器求反 1 1 0xF4 RL A 累加器循环左移 1 1 0x23 RLC A 带进位累加器循环左移 1 1 0x33 RR A 累加器循环右移 1 1 0x03 RRC A 带进位累加器循环右移 1 1 0x13 SWAP A 累加器高、低4 位交换 1 1 0xC4 控制转移类指令 JMP @A+DPTR 相对 DPTR 的无条件间接转移 1 2 0x73 JZ rel 累加器为 0 则转移 2 3 0x60 JNZ rel 累加器为 1 则转移 2 3 0x70
CJNE A,direct,rel 比较直接地址和累加器,不相等转移 3 4 0xB5 CJNE A,#data,rel 比较立即数和累加器,不相等转移 3 4 0xB4 CJNE Rn,#data,rel 比较寄存器和立即数,不相等转移 2 4 0xB8-0xBF CJNE @Ri,#data,rel 比较立即数和间接RAM,不相等转移 3 5 0xB6-0xB7 DJNZ Rn,rel 寄存器减 1,不为 0 则转移 2 3 0xD8-0xDF DJNZ direct,rel 直接地址数据减1,不为0 则转移 3 4 0xD5 NOP 空操作,用于短暂延时 1 1 0x00 ACALL add11 绝对调用子程序 2 2 xxx10001b LCALL add16 长调用子程序 3 3 0x12 RET 从子程序返回 1 4 0x22 RETI 从中断服务子程序返回 1 4 0x32 AJMP add11 无条件绝对转移 2 2 xxx00001b LJMP add16 无条件长转移 3 3 0x02 SJMP rel 无条件相对转移 2 3 0x80 布尔指令 CLR C 清零进位位 1 1 0xC3 CLR bit 清零直接寻址位 2 2 0xC2 SETB C 置位进位位 1 1 0xD3 SETB bit 置位直接寻址位 2 2 0xD2 CPL C 取反进位位 1 1 0xB3 CPL bit 取反直接寻址位 2 2 0xB2 ANL C,bit 直接寻址位“与”到进位位 2 2 0x82 ANL C,/bit 直接寻址位的反码“与”到进位位 2 2 0xB0 ORL C,bit 直接寻址位“或”到进位位 2 2 0x72 ORL C,/bit 直接寻址位的反码“或”到进位位 2 2 0xA0 MOV C,bit 直接寻址位送到进位位 2 2 0xA2 MOV bit, C 进位位位送到直接寻址 2 2 0x92 JC rel 如果进位位为1 则转移 2 3 0x40 JNC rel 如果进位位为0 则转移 2 3 0x50
JB bit,rel 如果直接寻址位为1 则转移 3 4 0x20 JNB bit,rel 如果直接寻址位为0 则转移 3 4 0x30 JBC bit,rel 直接寻址位为1 则转移并清除该位 3 4 0x10
21 电气特性 除非另外说明,以下数据测试条件均为:VDD=5.0V,GND=0V,25°C。 21.1 极限参数 参数 符号 最小值 典型值 最大值 单位 直流供电电压 VDD -0.3 - +6.0 V 输入/输出电压 VI/VO GND-0.3 - VDD+0.3 V 工作环境温度 TOTG -40 - +105 °C 存储温度 TSTG -55 - +125 °C 注: (1)流过VDD 的最大电流值在 5.0V, 25°C 下须小于 100mA。 (2)流过GND 的最大电流值在 5.0V, 25°C 下须小于150mA。
21.2 DC 特性
参数 符号 条件(VDD:5V) 最小值 典型值 最大值 单位 工作电压 VDD FCPU =16MHz 或44KHz,ADC 模块关闭 2.9 5.0 5.5 V 工作电流 IOP1 Fosc=32MHz,FCPU =16MHz,无负载, 无浮动输入管脚,执行NOP 指令,其它 模块关闭 - 3.1 - mA Fosc=32MHz,FCPU =8MHz,无负载,无 浮动输入管脚,执行NOP 指令,其它模 块关闭 - 2.2 - Fosc=32MHz,FCPU =4MHz,无负载,无 浮动输入管脚,执行NOP 指令,其它模 块关闭 - 1.7 - Fosc=32MHz,FCPU =2MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 - 1.5 - Fosc=32MHz,FCPU =1MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 - 1.3 - Fosc=32MHz,FCPU =500KHz,无负载, 无浮动输入,执行NOP,其它模块关闭 - 1.1 - Fosc=16MHz,FCPU =16MHz,无负载, 无浮动输入,执行NOP,其它模块关闭 - 2.6 - Fosc=16MHz,FCPU =8MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.9 Fosc=16MHz,FCPU =4MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.3
Fosc=16MHz,FCPU =2MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.1 Fosc=16MHz,FCPU =1MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.8 Fosc=16MHz,FCPU =500KHz,无负载, 无浮动输入,执行NOP,其它模块关闭 0.7 Fosc=8MHz,FCPU =8MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.7 Fosc=8MHz,FCPU =4MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.1 Fosc=8MHz,FCPU =2MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.8 Fosc=8MHz,FCPU =1MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.7 Fosc=8MHz,FCPU =500KHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.6 Fosc=4MHz,FCPU =4MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 1.0 Fosc=4MHz,FCPU =2MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.8 Fosc=4MHz,FCPU =1MHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.6 Fosc=4MHz,FCPU =500KHz,无负载,无 浮动输入,执行NOP,其它模块关闭 0.5 IOP2 FOSC =44KHz,Fcpu=44KHz,无负载,无 浮动,执行NOP 指令,其它模块关闭 - 70 - uA IPD1 进入掉电模式, 无负载, 无浮动输入管脚, BOR 打开,其它模块关闭 - 14 - μA IPD2 进入掉电模式, 无负载, 无浮动输入管脚, BOR 关闭,其它模块关闭 6 μA IIDLE1 FOSC =32MHz,FCPU =16MHz,进入空闲 模式,无负载,无浮动输入,所有模块关 闭 - 1 - mA IIDLE2 FOSC =16MHz,FCPU =16MHz,进入空闲 模式,无负载,无浮动输入,所有模块关 闭 0.6 mA IIDLE3 FOSC =8MHz,FCPU =8MHz,进入空闲模 式,无负载,无浮动输入,所有模块关闭 - 0.5 - mA IIDLE4 FOSC =4MHz,FCPU =4MHz,进入空闲模 式,无负载,无浮动输入,所有模块关闭 - 0.4 - mA IIDLE4 FOSC =44KHz,进入空闲模式,无负载, 无浮动输入管脚,所有模块关闭, 内部高频RC 时钟关闭 - 70 - μA
掉电定时中断唤 醒电流 IPW FCPU =16MHz,关闭BOR,TIMER3 计数 时钟源选择RC44K,系统进入掉电, TIMER3 定时1S 中断唤醒的平均电流 - 7 - μA 输入低电压1 VIL1 I/O 端口非施密特输入 GND - 0.3*VD D V 输入高电压1 VIH1 I/O 端口非施密特输入 0.7*VDD - VDD V 输入低电压2 VIL2 I/O 端口施密特输入 GND - 0.2*VD D V 输入高电压2 VIH2 I/O 端口施密特输入 0.8*VDD - VDD V 输入漏电流 IILC I/O端口输入模式,VIN:VDD或GND -1 0 1 μA 输出漏电流 IOLC I/O端口输出模式,VOUT:VDD或GND -1 0 1 μA 灌电流 IOL1 Vout=GND+0.6 - 24 - mA 拉电流 IOH1 Vout=VDD-0.6 - 20 - 上拉电阻 RPU1 P0.2 端口,VIN=GND - 50 - kΩ RPU2 P0.2 端口,VIN=GND - 100 - RPU3 P0.2 端口,VIN=GND - 150 - RPU4 P0.2 端口,VIN=GND - 300 - RPU5 普通端口,VIN=GND - 50 - 下拉电阻 RPD 普通端口,VIN=VDD - 50 - kΩ ADC 唤醒电压 VAW1 常温,VDD = 5V 3.9 4.0 4.1 V VAW2 常温,VDD = 3.3V 2.3 2.4 2.5 RAM 保持电压 VRAM - - 0.6 - 注意:除非另外说明,以上数据测试条件均为:VDD:5.0V,GND:0V,25°C。
21.3 AC 特性
参数 符号 条件 最小值 典型值 最大值 单位 内部RC32M 启动时间 Tset1 常温,VDD=5V - - 5 μs 内部RC44K 启动时间 Tset2 常温,VDD=5V - - 150 μs 外部高频振荡器 启动时间 Tset3 16MHz,常温,VDD=5V - 200 - μs 外部高频振荡器 工作电压 Vset3 16MHz 2.9 - 5.5 V 外部低频振荡器 启动时间 Tset4 常温,VDD=5V - 2 - s 频率精度 FIRC1 VDD=2.9 V~5.5V, 25° C 32(1-1%) 32 32(1+1%) MHz FWRC - 31 44 58 KHz
21.4 FLASH 内存特性
参数 符号 条件 最小值 典型值 最大值 单位 读写测试 NENDUR - 100000 - - Cycle 数据保存时间 TRET T=25°C - 10 - year FLASH 扇区擦除时间 TERASE1 1 个扇区(512 字节) - 2 - ms 字节写入时间 TPROG 1 个字节 - 130 - μs 读取耗电流 IDD1 Fcpu=16MHz - 4 - mA 写入耗电流 IDD2 - - 4 - mA 擦除耗电流 IDD3 - - 2 - mA
21.5 ADC 特性
参数 符号 条件 最小值 典型值 最大值 单位 供电电压 VAD - 2.9 5.0 5.5 V 精度 NR GND≤VAIN≤Vref - 10 12 bit ADC 输入电压 VAIN - GND - Vref V ADC 输入电阻 RAIN VAIN:5V 2 - - MΩ 模拟电压源推荐阻抗 ZAIN - - - 10 kΩ ADC 转换电流 IAD ADC 模块打开,VDD:5.0V - 0.6 1 mA ADC 输入电流 IADIN VDD:5.0V - - 10 μA 微分非线性误差 DLE VDD:5.0V - - ±2 LSB 积分非线性误差(1MHz 转换频率) ILE VDD=5.0V,Vref =2.0V - - -5~2 LSB VDD=5.0V,Vref =3.0V - - -4~2 VDD=5.0V,Vref =4.0V - - -3~2 VDD=5.0V,Vref =VDD - - ±2 VDD=5.0V,Vref =外参 - - ±2 满刻度误差 EF VDD=5.0V - - ±5 LSB 偏移量误差 EZ VDD=5.0V - - ±3 LSB 总绝对误差 EAD VDD=5.0V - - ±5 LSB 总转换时间1 TCON1 VDD=5.0V Vref =2.0V 10 - - μs 总转换时间2 TCON2 VDD=5.0V Vref =VDD 2 - - μs
21.6 BOR 检测电压特性
参数 符号 条件 最小值 典型值 最大值 单位 BOR 设定电压1 VBOR1 BOR 使能,VDD:2.9V~5.5V 2.5 2.6 2.7 V BOR 设定电压2 VBOR2 2.9 3.0 3.1 V BOR 设定电压3 VBOR3 3.5 3.6 3.7 V BOR 设定电压4 VBOR4 3.8 3.9 4.0 V BOR 设定电压5 VBOR5 4.1 4.2 4.3 V
21.7 LVD/PLVD检测电压特性
参数 符号 条件 最小值 典型值 最大值 单位 LVD 设定电压1 VLVD1 LVD 使能,VDD=2.9V~5.5V 2.5 2.6 2.7 V LVD 设定电压2 VLVD2 2.9 3.0 3.1 V LVD 设定电压3 VLVD3 3.5 3.6 3.7 V LVD 设定电压4 VLVD4 3.8 3.9 4.0 V LVD 设定电压5 VLVD5 4.1 4.2 4.3 V 21.8 比较器电气特性 符号 参数 测试条件 最小值 典型值 最大值 单位 VDD 温度 条件 VOS 输入失调电压 5V - - - ±2 ±4 mV VICM 输入共模电压范围 5V - - 0 - VDD-1.2V V ICOMP 比较器工作功耗 - - - - 200 400 nA TRS1 小信号响应时间 5V - CMPP=1.25V CMPN=1.2V - 1 2 us TRS2 大信号响应时间 5V - CMPP=3V CMPN=1V - 0.3 0.5 us Rin 信号源输出阻抗 5V - - - - 1 MΩ
21.10 频率-温度特性曲线 Figure 21-3 内部高频RC32M/64-温度特性曲线图
21.11 ADC 内参 2V-温度特性曲线特性
Figure 21-4 内部参考电压2V –温度特性曲线图 450 460 470 480 490 500 510 520 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 105 #1 #2 #3温度℃ IRC(KHz) 1.8 1.85 1.9 1.95 2.05 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 105 #1 #2 #3温度℃ VREF(V)
21.12 其他电气特性 2、 Latch_up:800mA 3、 EFT:±4800V
22 开发工具
22.1 HC-LINK 仿真工具
HC89F0332/0322/0312 使用HC-LINK 仿真器进行程序的下载和仿真,HC-LINK 通过SWD 接口可 以对芯圣所有的增强型 8051 内核单片机(非固化 ISP)实现下载和仿真。关于 HC-LINK 的使用,请 参见HC-LINK 用户手册。 HC-LINK 特性: ➢ 支持Keil C51 集成编译环境(uVision4.0 及以上版本) ➢ 支持所有的芯圣8051(非固化ISP)芯片 ➢ 可以对FLASH 进行擦除、编程和校验 ➢ 可以对加密位以及代码选项进行编程 ➢ 直接从USB 供电,不需要外接电源
22.2 HC-PM51 烧录工具
HC-PM51 烧录器是芯圣新一代量产烧录工具,适用于芯圣 8051 内核系列的 Flash MCU 的烧录。 关于HC-PM51 的使用,请参见 HC-PM51 工具用户手册。 HC-PM51 特性: ➢ 采用USB 方式连接 ➢ 支持单路脱机烧录 22.3 软件下载 直接在浏览器地址栏中输入地址:www.holychip.cn 进行软件下载。
23 封装尺寸
23.1 TSSOP20
Figure 23-1 TSSOP20 封装尺寸
23.2 SOP16
Figure 23-2 SOP16 封装尺寸
23.3 SOP8
Figure 23-3 SOP8 封装尺寸
24 版本记录 版本 日期 描述 V er1.00 2022-04-13 第一版 V er1.01 2022-06-30 修改错误描述 V er1.02 2022-08-12 增加SOP8 封装 V er1.03 2022-09-01 增加PWM3,LVD 的应用注意; HOLYCHIP 公司保留对以下所有产品在可靠性、功能和设计方面的改进作进一步说明的权利。 HOLYCHIP 不承担由本手册所涉及的产品或电路的运用和使用所引起的任何责任,HOLYCHIP 的产品 不是专门设计来应用于外科植入、 生命维持和任何HOLYCHIP 产品产生的故障会对个体造成伤害甚至 死亡的领域。如果将 HOLYCHIP 的产品用于上述领域,即使这些是由 HOLYCHIP 在产品设计和制造 上的疏忽引起的,用户应赔偿所有费用、损失、合理的人身伤害或死亡所直接或间接所产生的律师费 用,并且用户保证 HOLYCHIP 及其雇员、子公司、分支机构和销售商与上述事宜无关。 芯圣电子 2022 年9 月