79F161 V0.2

Size: px
Start display at page:

Download "79F161 V0.2"

Transcription

1 SH79F 集成 ADC 和 PWM 的增强型 8051 微控制器 1. 特性 基于 8051 指令流水线结构的 8 位单片机 集成单周期执行时间 16 X 16bit 硬件乘法器 集成 8 周期执行时间 32 / 16bit 硬件除法器 集成 1 周期 32bit 硬件移位单元 Flash ROM:16K 字节 RAM:1.5K 字节 工作电压 : f OSC = 400k - 27MHz,V DD = 2.4V - 5.5V 高频振荡器 ( 代码选项三选一 ): - 陶瓷谐振器 :400k - 16MHz - 晶体谐振器 :400k - 16MHz - 内部 RC 高频振荡器 :27MHz 低频振荡器 : 内部 RC 低频振荡器 :128KHz 44 个 CMOS 双向 I/O 管脚 I/O 内建上拉电阻 P2 口可增强灌电流能力 ( 代码选项可选增强或标准 ) P0/P3 口可增强拉电流能力 ( 代码选项可选增强或标准 ) 4 个 16 位定时器 / 计数器 T0/T1/T2/T3 三个 16 位带死区控制 PWM 通道,6 路输出, 并且具有故障检测功能 中断源 : - 定时器 0/1/2/3 - 外部中断 外部中断 4:8 输入 - ADC - EUART,SPI - PWM 周期和占空比中断 - 模拟比较器 1/ 通道 12 位 1M sps 高速模数转换器 (ADC), 自动触发 ADC 功能,16 通道转换结果缓冲功能 内建单输入模拟比较器 CMP1 内建多输入模拟施密特比较器 CMP2 内建 2 个模拟放大器 OP1,OP2 增强型 UART 一路 8bit 无死区 PWM3 输出 蜂鸣音发生器 SPI 接口 ( 主 / 从模式 ) 内建的低电压复位功能 ( 代码选项 ) - LVR 电压 1:4.1V - LVR 电压 2:2.8V CPU 机器周期 : - 1 振荡周期 看门狗定时器 (WDT) 内建振荡器预热计数器 低功耗工作模式 : - 空闲模式 - 掉电模式 Flash 型 40 位可读 MCU 识别码 工作环境温度 -40 ~ +105 封装 : - TQFP48 2. 概述 是一种高速高效率 8051 兼容单片机 在同样振荡频率下, 较之传统的 8051 芯片具有运行更快速, 性能更优越的特性 保留了标准 8051 芯片的大部分特性, 包括内置 256 字节 RAM 和 2 个 16 位定时器 / 计数器 此外, 还集成了 1280 字节外部扩展 RAM, 以及存储程序的 16K 字节 flash, 此外还集成 2K 类 EEPROM, 用于在系统掉电后保存数据 还集成了两个多输入模拟比较器, 两路放大器,12 位集成数字比较功能的高速 ADC, 以及 6 输出带死区时间控制的电机控制 PWM 模块, 非常适合于直流无刷电机 / 永磁同步电机控制 此外, 集成了看门狗定时器, 上电复位和低电压复位等功能, 提供了 2 种低功耗省电模式 1 V1.0

2 3. 方框图 VDD Power Pipelined 8051 architecture Reset circuit RST Watch Dog 16K Bytes Flash ROM Internal 256 Bytes External 1280 Bytes Data RAM Port 0 Configuration/IO Port 1 Configuration/IO P0.0 - P0.7 P1.0 - P1.7 Timer 0 (16bit) Timer 1 (16bit) Timer 2 (16bit) Timer 3 (16bit) External Interrupt Port 2 Configuration/IO Port 3 Configuration/IO Port 4 Configuration/IO P2.0 - P2.7 P3.0 - P3.7 P4.0 - P bit PWM module 3 channel 6 output Port 5 Configuration/IO P5.0 - P5.3 SPI EUART 8bit PWM 2 Analog COMPARATOR Internal Oscillator 2 Op Amplifier XTAL1 12-bit ADC Oscillator XTAL2 BUZZER Jtag ports (for debug) 2

3 4. 引脚配置 48 脚 TQFP 封装 U P3.0/PWM3 P3.1/INT40/RXD OP2OUT/P1.7 OP2N/P3.7 OP2P/P3.6 NC VDD NC GND XTAL1/INT44/P3.5 XTAL2/INT43/P3.4 P4.5/T2EX P4.6/T3 P4.7/T2 P5.0/MOSI P5.1/MISO P5.2/SCK P5.3/SS AN5/P0.7 C2N/AN4/P0.6 VREF/AN3/P0.5 C2P2/AN2/INT47/P0.4 P2.7/T1 P3.2/INT41/TXD P3.3/INT42 TDI/BUZ/P1.4 TCK/RST/P1.5 AN10/P1.6 P4.0/AN6 P4.1/AN7 P4.2/AN11 P4.3 P4.4 C2P1/AN1/INT46/P0.3 C2P0/AN0/INT45/P0.2 C1N/P0.1 OP1OUT/P0.0 OP1N/P1.0 C1P/OP1P/P1.1 TDO/AN8/INT0/P1.2 TMS/AN9/INT1/P1.3 P2.6/T0/FLT P2.5/PWM21 P2.4/PWM11 P2.3/PWM01 P2.2/PWM2 P2.1/PWM1 P2.0/PWM0 注意 : 引脚命名中, 写在最外侧的引脚功能具有最高优先级, 最内侧的引脚功能具有最低优先级 ( 参见引脚配置图 ) 当一个引脚被高优先级的功能占用时, 即使低优先级功能被允许, 也不能作为低优先级功能的引脚 只有当软件禁止引脚的高优先级功能, 相应引脚才能被释放作为低优先级端口使用 但也有同优先级情况, 比如 P0.2 - P0.4, 它们可以同时用作 AD 输入通道和比较器同相输入端, 具体端口共用请参考 端口共用 章节 3

4 引脚功能 引脚编号引脚命名默认功能引脚编号引脚命名默认功能 1 TDI/BUZ/P1.4 P SS /P5.3 P5.3 2 TCK/RST/P1.5 RST 26 SCK/P5.2 P5.2 3 AN10/P1.6 P MISO/P5.1 P5.1 4 OP2OUT/P1.7 P MOSI/P5.0 P5.0 5 OP2N/P3.7 P T2/P4.7 P4.7 6 OP2P/P3.6 P T3/P4.6 P4.6 7 NC T2EX/P4.5 P4.5 8 V DD P4.4 P4.4 9 NC P4.3 P GND AN11/P4.2 P XTAL1/INT44/P3.5 P AN7/P4.1 P XTAL2/INT43/P3.4 P AN6/P4.0 P INT42/P3.3 P AN5/P0.7 P TXD/INT41/P3.2 P C2N/AN4/P0.6 P RXD/INT40/P3.1 P V REF /AN3/P0.5 P PWM3/P3.0 P C2P2/AN2/INT47/P0.4 P PWM0/P2.0 P C2P1/AN1/INT46/P0.3 P PWM1/P2.1 P C2P0/AN0/INT45/P0.2 P PWM2/P2.2 P C1N/P0.1 P PWM01/P2.3 P OP1OUT/P0.0 P PWM11/P2.4 P OP1N/P1.0 P PWM21/P2.5 P C1P/OP1P/P1.1 P P2.6/T0/FLT P TDO/AN8/INT0/P1.2 P T1/P2.7 P TMS/AN9/INT1/P1.3 P1.3 4

5 5. 引脚描述 I/O 端口 定时器 PWM 引脚编号类型说明 P0.0 - P0.7 I/O 8 位双向 I/O 端口 P1.0 - P1.7 I/O 8 位双向 I/O 端口 P2.0 - P2.7 I/O 8 位双向 I/O 端口 P3.0 - P3.7 I/O 8 位双向 I/O 端口 P4.0 - P4.7 I/O 8 位双向 I/O 端口 P5.0 - P5.3 I/O 4 位双向 I/O 端口 T0 I/O 定时器 0 外部输入 / 比较功能输出 T1 I/O 定时器 1 外部输入 / 比较功能输出 T2 I/O 定时器 2 外部输入 / 比较功能输出 T2EX I 定时器 2 重载 / 捕捉 / 方向控制 T3 I/O 定时器 3 外部输入 / 比较功能输出 PWM01,11,21 O 16BIT PWM 互补输出 PWM0,1,2 O 16BIT PWM 输出 模数转换器 PWM3 O 8BIT PWM 独立输出 FLT I 16BIT PWM 模块故障输入信号 AN0 - AN11 I ADC 输入通道 V REF I ADC 参考电压输入 中断, 复位, 时钟, 电源 INT0,1 I 外部中断输入 INT40 - INT47 I/O 外部中断 4 输入源 RST XTAL1 I 谐振器输入 XTAL2 O 谐振器输出 GND P 接地 I V DD P 电源 ( V) 该引脚上保持 10µs 以上的低电平,CPU 将复位 由于有内建 30kΩ 上拉电阻连接到 V DD, 所以仅接一个外部电容即可实现上电复位 注意 : 在使用 JTAG 功能 ( 仿真或工具烧写 ) 时, 外接电容不能大于 0.01µF, 否则就应将外接电容断开 5

6 续上表 EUART 蜂鸣器 SPI RXD I/O 串口数据输入 TXD O 串口数据输出 BUZ O 蜂鸣器输出 MOSI I/O SPI 主输入从输出引脚 MISO I/O SPI 主输入从输出引脚 SCK I/O SPI 串行时钟引脚 SS 内部模拟比較器 I SPI 从设备选择引脚 C1N I 比较器 1 反相输入端 ( 比较器 1 同相输入端和放大器 1 同相输入端 OPP 共用 ) C2N I 比较器 2 反相输入端 C2P0-2 I 比较器 2 同相多路输入端 内部模拟放大器 编程器接口 OP1P I 放大器 1 同相输入端 O1PN I 放大器 1 反相输入端 OP1OUT O 放大器 1 输出端 OP2P I 放大器 2 同相输入端 OP2N I 放大器 2 反相输入端 OP2OUT O 放大器 2 输出端 TDO O 调试接口 : 测试数据输出 TMS I 调试接口 : 测试模式选择 TDI I 调试接口 : 测试数据输入 TCK I 调试接口 : 测试时钟输入 注意 : 当 P 作为调试接口时,P 的原有功能被禁止 6

7 6. SFR 映像 内置 256 字节的直接寻址寄存器, 包括通用数据存储器和特殊功能寄存器 (SFR), 的 SFR 有以下几种 : CPU 内核寄存器 : CPU 内核增强寄存器 : ACC,B,PSW,SP,DPL,DPH AUXC,DPL1,DPH1,INSCON,XPAGE 电源时钟控制寄存器 : Flash 寄存器 : 数据页面控制寄存器 : 看门狗定时器寄存器 : 系统时钟控制寄存器 : 中断寄存器 : I/O 端口寄存器 : PCON,SUSLO IB_OFFSET,IB_DATA,IB_CON1,IB_CON2,IB_CON3,IB_CON4,IB_CON5 XPAGE RSTSTAT CLKCON IEN0,IEN1,IENC,IPH0,IPL0,IPH1,IPL1,EXF1 P0,P1,P2,P3,P4,P5,P0CR,P1CR,P2CR,P3CR,P4CR,P5CR,P0PCR, P1PCR,P2PCR,P3PCR,P4PCR,P5PCR 定时器寄存器 : TCON, TMOD, TH0, TH1, TL0, TL1, T2CON, T2MOD, TH2, TL2, RCAP2L, RCAP2H,TCON1,T3CON,TL3,TH3 EUART 寄存器 : SCON,SBUF,SADEN,SADDR,PCON,SBRTL,SBRTH,BFINE ADC 寄存器 : ADCON1, ADCON2, ADT, SEQCON, ADCH1, ADCH2, SEQCHX, ADDXL, ADDXH,ADDGTL,ADDGTH,ADDLTL,ADDLTH,ADCMPCON SPI 寄存器 : PWM3 寄存器 : OP&CMP 寄存器 : MDSU 寄存器 : DISPCON,DISPCON1,DISPCLK0,DISPCLK1,P0SS,P1SS,P2SS,P3SS PWM3CON,PWM3P,PWM3D CMP1CON,CMP2CON0,CMP2CON1,CMP2CON2 MDSCON,OPRDA0,OPRDA1,OPRDA2,OPRDA3,OPRDB0,OPRDB1 MCM 寄存器 : PWMCON1, PWMCON2, PTCON, PWMOE, PMANUALCON1, PMANUALCON2, FLTCON, PWMINTEN, PWMINTF, PWMRLDEN, PWMPL, PWMPH, PWM0DL, PWM0DH, PWM1DL, PWM1DH, PWM2DL, PWM2DH, PWM01DL/PWMDTOL, PWM01DH/PWMDTOH, PWM11DL/PWMDT1L, PWM11DH/PWMDT1H, PWM21DL, PWM21DH BUZZER 寄存器 : BUZCON 7

8 Table 6.1 C51 核 SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ACC E0H 累加器 ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 B F0H B 寄存器 B.7 B.6 B.5 B.4 B.3 B.2 B.1 B.0 AUXC F1H C 寄存器 C.7 C.6 C.5 C.4 C.3 C.2 C.1 C.0 PSW D0H 程序状态字 CY AC F0 RS1 RS0 OV F1 P SP 81H 堆栈指针 SP.7 SP.6 SP.5 SP.4 SP.3 SP.2 SP.1 SP.0 DPL 82H 数据指针低位字节 DPL0.7 DPL0.6 DPL0.5 DPL0.4 DPL0.3 DPL0.2 DPL0.1 DPL0.0 DPH 83H 数据指针高位字节 DPH0.7 DPH0.6 DPH0.5 DPH0.4 DPH0.3 DPH0.2 DPH0.1 DPH0.0 DPL1 84H 数据指针 1 低位字节 DPL1.7 DPL1.6 DPL1.5 DPL1.4 DPL1.3 DPL1.2 DPL1.1 DPL1.0 DPH1 85H 数据指针 1 高位字节 DPH1.7 DPH1.6 DPH1.5 DPH1.4 DPH1.3 DPH1.2 DPH1.1 DPH1.0 INSCON 86H 数据指针选择 DIV MUL - DPS Table 6.2 电源时钟控制 SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PCON 87H 电源控制 SMOD SSTAT IT41 IT40 GF1 GF0 PD IDL SUSLO 8EH 电源控制保护字 SUSLO.7 SUSLO.6 SUSLO.5 SUSLO.4 SUSLO.3 SUSLO.2 SUSLO.1 SUSLO.0 8

9 Table 6.3 Flash 控制 SFRs 符号地址名称 IB_OFF SET Table 6.4 WDT SFR 注意 :* 表示不同情况的复位决定 RSTSTAT 寄存器中的, 详见 WDT 章节 Table 6.5 时钟控制 SFR POR/WDT/LVR /PIN FBH 可编程 flash 低位字节偏移 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_OFF SET.7 IB_OFF SET.6 IB_DATA FCH 可编程 flash 数据寄存器 IB_DATA.7 IB_DATA.6 IB_DATA.5 IB_DATA.4 IB_DATA.3 IB_DATA.2 IB_DATA.1 IB_DATA.0 IB_CON1 F2H flash 控制寄存器 IB_CON1.7 IB_CON1.6 IB_CON1.5 IB_CON1.4 IB_CON1.3 IB_CON1.2 IB_CON1.1 IB_CON1.0 IB_CON2 F3H flash 控制寄存器 IB_CON2.3 IB_CON2.2 IB_CON2.1 IB_CON2.0 IB_CON3 F4H flash 控制寄存器 IB_CON3.3 IB_CON3.2 IB_CON3.1 IB_CON3.0 IB_CON4 F5H flash 控制寄存器 IB_CON4.3 IB_CON4.2 IB_CON4.1 IB_CON4.0 IB_CON5 F6H flash 控制寄存器 IB_CON5.3 IB_CON5.2 IB_CON5.1 IB_CON5.0 XPAGE F7H flash 页寄存器 XPAGE.7 XPAGE.6 XPAGE.5 XPAGE.4 XPAGE.3 XPAGE.2 XPAGE.1 XPAGE.0 FLASHCON A7H 访问控制寄存器 FAC 符号地址名称 POR/WDT/LVR /PIN IB_OFF SET.5 IB_OFF SET.4 IB_OFF SET.3 IB_OFF SET.2 IB_OFF SET.1 IB_OFF SET.0 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 RSTSTAT B1H 看门狗定时器控制寄存器 *-***000 WDOF - PORF LVRF CLRF WDT.2 WDT.1 WDT.0 符号地址名称 POR/WDT/LVR /PIN 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CLKCON B2H 系统时钟选择 CLKS1 CLKS0 SCMIF OSCXON FS - - 9

10 Table 6.6 中断 SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 IEN0 A8H 中断允许控制 EA EADC ET2 ES ET1 EX1 ET0 EX0 IEN1 A9H 中断允许控制 ESCM EPWM3 EMCM ET3 EX4 ECMP2 ECMP1 ESPI IENC BAH 外部中断 4 通道允许控制 EXS47 EXS46 EXS45 EXS44 EXS43 EXS42 EXS41 EXS40 IPH0 B4H 中断优先权控制高位 PADCH PT2H PSH PT1H PX1H PT0H PX0H IPL0 B8H 中断优先权控制低位 PADCL PT2L PSL PT1L PX1L PT0L PX0L IPH1 B5H 中断优先权控制高位 PSCMH PPWMH PMCMH PT3H PX4H PCMP2H PCMP1H PSPIH IPL1 B9H 中断优先权控制低位 PSCML PPWML PMCML PT3L PX4L PCMP2L PCMP1L PSIPL EXF1 D8H 外部中断寄存器 IF47 IF46 IF45 IF44 IF43 IF42 IF41 IF40 Table 6.7 端口 SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 P0 80H 8 位端口 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P1 90H 8 位端口 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2 A0H 8 位端口 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P3 B0H 8 位端口 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 P4 C0H 8 位端口 P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0 P5 F8H 8 位端口 P5.3 P5.2 P5.1 P5.0 P0CR E1H 端口 0 输入 / 输出方向控制 P0CR.7 P0CR.6 P0CR.5 P0CR.4 P0CR.3 P0CR.2 P0CR.1 P0CR.0 P1CR E2H 端口 1 输入 / 输出方向控制 P1CR.7 P1CR.6 P1CR.5 P1CR.4 P1CR.3 P1CR.2 P1CR.1 P1CR.0 P2CR E3H 端口 2 输入 / 输出方向控制 P2CR.7 P2CR.6 P2CR.5 P2CR.4 P2CR.3 P2CR.2 P2CR.1 P2CR.0 P3CR E4H 端口 3 输入 / 输出方向控制 P3CR.7 P3CR.6 P3CR.5 P3CR.4 P3CR.3 P3CR.2 P3CR.1 P3CR.0 P4CR E5H 端口 2 输入 / 输出方向控制 P4CR.7 P4CR.6 P4CR.5 P4CR.4 P4CR.3 P4CR.2 P4CR.1 P4CR.0 P5CR E6H 端口 2 输入 / 输出方向控制 P5CR.3 P5CR.2 P5CR.1 P5CR.0 P0PCR E9H 端口 0 内部上拉允许 P0PCR.7 P0PCR.6 P0PCR.5 P0PCR.4 P0PCR.3 P0PCR.2 P0PCR.1 P0PCR.0 P1PCR EAH 端口 1 内部上拉允许 P1PCR.7 P1PCR.6 P1PCR.5 P1PCR.4 P1PCR.3 P1PCR.2 P1PCR.1 P1PCR.0 P2PCR EBH 端口 2 内部上拉允许 P2PCR.7 P2PCR.6 P2PCR.5 P2PCR.4 P2PCR.3 P2PCR.2 P2PCR.1 P2PCR.0 P3PCR ECH 端口 3 内部上拉允许 P3PCR.7 P3PCR.6 P3PCR.5 P3PCR.4 P3PCR.3 P3PCR.2 P3PCR.1 P3PCR.0 P4PCR EDH 端口 2 内部上拉允许 P4PCR.7 P4PCR.6 P4PCR.5 P4PCR.4 P4PCR.3 P4PCR.2 P4PCR.1 P4PCR.0 P5PCR EEH 端口 2 内部上拉允许 P5PCR.3 P2PCR.2 P2PCR.1 P2PCR.0 10

11 Table 6.8 定时器 SFRs 符号地址名称 Table 6.9 EUART SFRs POR/WDT/LVR /PIN 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TCON 88H 定时器 / 计数器 0 和 1 控制寄存器 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TMOD 89H 定时器 / 计数器 0 和 1 模式寄存器 GATE1 C/T1 M11 M10 GATE0 C/T0 TL0 8AH 定时器 / 计数器 0 低位字节 TL0.7 TL0.6 TL0.5 TL0.4 TL0.3 TL0.2 TL0.1 TL0.0 TH0 8CH 定时器 / 计数器 0 高位字节 TH0.7 TH0.6 TH0.5 TH0.4 TH0.3 TH0.2 TH0.1 TH0.0 TL1 8BH 定时器 / 计数器 1 低位字节 TL1.7 TL1.6 TL1.5 TL1.4 TL1.3 TL1.2 TL1.1 TL1.0 TH1 8DH 定时器 / 计数器 1 高位字节 TH1.7 TH1.6 TH1.5 TH1.4 TH1.3 TH1.2 TH1.1 TH1.0 T2CON C8H 定时器 / 计数器 2 控制寄存器 TF2 EXF2 TRG - EXEN2 TR2 C/T2 CP/RL2 T2MOD C9H 定时器 / 计数器 2 模式寄存器 TCLKP T2OE DCEN RCAP2L CAH 定时器 / 计数器 2 重载 / 截获低位字节 RCAP2L.7 RCAP2L.6 RCAP2L.5 RCAP2L.4 RCAP2L.3 RCAP2L.2 RCAP2L.1 RCAP2L.0 RCAP2H CBH 定时器 / 计数器 2 重载 / 截获高位字节 RCAP2H.7 RCAP2H.6 RCAP2H.5 RCAP2H.4 RCAP2H.3 RCAP2H.2 RCAP2H.1 RCAP2H.0 TL2 CCH 定时器 / 计数器 2 低位字节 TL2.7 TL2.6 TL2.5 TL2.4 TL2.3 TL2.2 TL2.1 TL2.0 TH2 CDH 定时器 / 计数器 2 高位字节 TH2.7 TH2.6 TH2.5 TH2.4 TH2.3 TH2.2 TH2.1 TH2.0 TCON1 CEH 定时器 0/1 比较功能允许 TCLK_S1 TCLK_S0 - TCLK_P1 TCLK_P0 TC1 TC0 T3CON ACH 定时器 / 计数器 3 控制寄存器 TF3 - T3PS.1 T3PS.0 - TR3 T3CLKS.1 T3CLKS.0 TL3 AAH 定时器 / 计数器 3 低位字节 TL3.7 TL3.6 TL3.5 TL3.4 TL3.3 TL3.2 TL3.1 TL3.0 TH3 ABH 定时器 / 计数器 3 高位字节 TH3.7 TH3.6 TH3.5 TH3.4 TH3.3 TH3.2 TH3.1 TH3.0 符号地址名称 POR/WDT/LVR /PIN 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SCON 98H 串行控制 SM0/FE SM1/RXOV SM2/TXCOL REN TB8 RB8 TI RI SBUF 99H 串行数据缓冲器 SBUF.7 SBUF.6 SBUF.5 SBUF.4 SBUF.3 SBUF.2 SBUF.1 SBUF.0 SADEN 9BH 从属地址掩码 SADEN.7 SADEN.6 SADEN.5 SADEN.4 SADEN.3 SADEN.2 SADEN.1 SADEN.0 SADDR 9AH 从属地址 SADDR.7 SADDR.6 SADDR.5 SADDR.4 SADDR.3 SADDR.2 SADDR.1 SADDR.0 PCON 87H 电源和串行控制 SMOD SSTAT IT41 IT40 GF1 GF0 PD IDL SBRTL FDH 波特率发生器寄存器 SBRT.7 SBRT.6 SBRT.5 SBRT.4 SBRT.3 SBRT.2 SBRT.1 SBRT.0 SBRTH FEH 波特率发生器寄存器 SBRTEN SBRT.14 SBRT.13 SBRT.12 SBRT.11 SBRT.10 SBRT.9 SBRT.8 M01 M00 11

12 Table 6.10 SPI SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 SPCON A2H SPI 控制寄存器 DIR MSTR CPHA CPOL SSDIS SPR2 SPR1 SPR0 SPSTA A1H SPI 状态寄存器 SPEN SPIF MODF WCOL RXOV SPDAT A3H SPI 数据寄存器 SPDAT7 SPDAT6 SPDAT5 SPDAT4 SPDAT3 SPDAT2 SPDAT1 SPDAT0 Table 6.11 ADC SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADCON1 93H ADC 控制寄存器 ADON ADCIF SC REFC ADCIE PWMTRGEN TIMTRGEN GO/D ONE ADCON2 92H ADC 控制寄存器 GRP3 GRP2 GRP1 GRP0 MODE TGAP2 TGAP1 TGAP0 ADT 94H ADC 时钟控制寄存器 TADC3 TADC2 TADC1 TADC0 TS3 TS2 TS1 TS0 SEQCON A6H 映射控制寄存器 ALR - - REGSEL REG3 REG2 REG1 REG0 ADCH1 95H ADC 通道配置寄存器 CH7 CH6 CH5 CH4 CH3 CH2 CH1 CH0 ADCH2 A5H ADC 通道配置寄存器 CH11 CH10 CH9 CH BGCHOP SEQCHx 96H 通道寄存器 SEQx3 SEQx2 SEQx1 SEQx0 ADDxL 96H ADC 结果寄存器低位 A7 A6 A5 A4 A3 A2 A1 A0 ADDxH 97H ADC 结果寄存器高位 A15 A14 A13 A12 A11 A10 A9 A8 ADDGTL 9EH ADC 上限比较寄存器低位 GT7 GT6 GT5 GT4 GT3 GT2 GT1 GT0 ADDGTH 9FH ADC 上限比较寄存器高位 GT15 GT14 GT13 GT12 GT11 GT10 GT9 GT8 ADDLTL 9CH ADC 下限比较寄存器低位 LT7 LT6 LT5 LT4 LT3 LT2 LT1 LT0 ADDLTH 9DH ADC 下限比较寄存器高位 LT15 LT14 LT13 LT12 LT11 LT10 LT9 LT8 ADCMPCON 91H 比较寄存器 ADLIE ADGIE ADLIF ADGIF CSEL3 CSEL2 CSEL1 CSEL

13 Table 6.12 MUSD SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 MDSCON C1H 操作控制寄存器 MD1 MD0 SLR - - SIGNEN DVERR RUN OPRDA0 C2H 操作数结果寄存器 DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0 OPRDA1 C3H 操作数结果寄存器 DA15 DA14 DA13 DA12 DA11 DA10 DA9 DA8 OPRDA2 C4H 操作数结果寄存器 DA23 DA22 DA21 DA20 DA19 DA18 DA17 DA16 OPRDA3 C5H 操作数结果寄存器 DA31 DA30 DA29 DA28 DA27 DA26 DA25 DA24 Table 6.13 PWM3 SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM3CON ADH PWM3 控制寄存器 PWM3EN PWM3S PWM3CK1 PWM3CK0 FLT3EN PWM3IE PWM3IF PWM3OE PWM3P AEH PWM3 周期寄存器 PWM3P.7 PWM3P.6 PWM3P.5 PWM3P.4 PWM3P.3 PWM3P.2 PWM3P.1 PWM3P.0 PWM3D AFH PWM3 占空比寄存器 PWM3D.7 PWM3D.6 PWM3D.5 PWM3D.4 PWM3D.3 PWM3D.2 PWM3D.1 PWM3D.0 Table 6.14 OP & CMP SFRs 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 CMP1CON B3H 放大器比较器 1 控制寄存器 CMP1EN C1NCHS C1OUT C1IF - C1PCHS C1DEB1 C1DEB0 CMP2CON0 BBH 放大器比较器 2 控制寄存器 CMP2EN C2NCHS C2PCHS1 C2PCHS0 C2SMT1 C2SMT0 C2OUT C2IF CMP2CON1 BCH 放大器比较器 2 控制寄存器 PWMTRGS1 PWMTRGS0 TRGPOL BGEN AMP1EN AMP2EN C2IFS1 C2IFS0 CMP2CON2 8FH 放大器比较器 2 控制寄存器 C2FT1EN C2FT1S2 C2FT1S1 C2FT1S0 C2FT2EN C2FT2S2 C2FT2S1 C2FT2S0 Table 6.15 BUZZER SFR 符号 地址 名称 POR/WDT/LVR /PIN 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 BUZCON BDH 蜂鸣器输出控制 BCA3 BCA2 BCA1 BCA0 BZEN 13

14 Table 6.16 MCM SFRs 符号地址名称 注意 :- : 保留位 POR/WDT/LVR /PIN 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMCON1 D9H PWM 模块控制寄存器 POUTMOD - PWM21S PWM11S PWM01S PWM2S PWM1S PWM0S PWMCON2 BFH PWM 模块控制寄存器 ZETIM PEAD ZEAD PDLDEN - DT1 DT0 PTCON CFH PWM 时基控制寄存器 PTMOD1 PTMOD0 PTCLK1 PTCLK0 POSTPS1 POSTPS0 PWMOE EFH PWM 输出使能寄存器 PWMEN - PWM21OE PWM11OE PWM01OE PWM2OE PWM1OE PWM0OE PMANUAL CON1 PMANUAL CON2 B6H PWM 手动输出寄存器 PMANUAL21 PMANUAL11 PMANUAL01 PMANUAL2 PMANUAL1 PMANUAL0 B7H PWM 手动输出寄存器 POUT21 POUT11 POUT01 POUT2 POUT1 POUT0 FLTCON D1H PWM 故障检测保护寄存器 FLT1EN FLT1SEL FLT2EN FLT2S FLT2DEB1 FLT2DEB0 FLTM FLTSTAT PWMINTEN BEH PWM 中断使能寄存器 PWMPIE PWMZIE PTDD2IE PTUD2IE PTDD1IE PTUD1IE PTDD0IE PTUD0IE PWMINTF E8H PWM 中断标志寄存器 PWMPIF PWMZIF PTDD2IF PTUD2IF PTDD1IF PTUD1IF PTDD0IF PTUD0IF PWMRLDEN E7H PWM 定时器锁定寄存器 RLDEN.7 RLDEN.6 RLDEN.5 RLDEN.4 RLDEN.3 RLDEN.2 RLDEN.1 RLDEN.0 PWMPL DAH PWM 周期寄存器低位 PP.7 PP.6 PP.5 PP.4 PP.3 PP.2 PP.1 PP.0 PWMPH DBH PWM 周期寄存器高位 PP.15 PP.14 PP.13 PP.12 PP.11 PP.10 PP.9 PP.8 PWM0DL DCH PWM0 占空比控制寄存器低位 PD0.7 PD0.6 PD0.5 PD0.4 PD0.3 PD0.2 PD0.1 PD0.0 PWM0DH DDH PWM0 占空比控制寄存器高位 PD0.15 PD0.14 PD0.13 PD0.12 PD0.11 PD0.10 PD0.9 PD0.8 PWM1DL DEH PWM1 占空比控制寄存器低位 PD1.7 PD1.6 PD1.5 PD1.4 PD1.3 PD1.2 PD1.1 PD1.0 PWM1DH DFH PWM1 占空比控制寄存器高位 PD1.15 PD1.14 PD1.13 PD1.12 PD1.11 PD1.10 PD1.9 PD1.8 PWM2DL D2H PWM2 占空比控制寄存器低位 PD2.7 PD2.6 PD2.5 PD2.4 PD2.3 PD2.2 PD2.1 PD2.0 PWM2DH D3H PWM2 占空比控制寄存器高位 PD2.15 PD2.14 PD2.13 PD2.12 PD2.11 PD2.10 PD2.9 PD2.8 PWM01DL /PWMDTOL D4H PWM PD01.7 PD01.6 PD01.5 PD01.4 死区控制寄存器 0 低位 /DT0.7 /DT0.6 /DT0.5 /DT0.4 PWM01DH /PWMDTOH D5H PWM 死区控制寄存器 0 高位 PD01.15/- PD01.14/- PD01.13/- PD01.12/- PWM11DL /PWMDT1L D6H PWM PD11.7 PD11.6 PD11.5 PD11.4 死区控制寄存器 1 低位 /DT1.7 /DT1.6 /DT1.5 /DT1.4 PWM11DH /PWMDT1H D7H PWM 死区控制寄存器 1 高位 PD11.15/- PD11.14/- PD11.13/- PD11.12/- PD01.3 /DT0.3 PD01.11 /DT0.11 PD11.3 /DT1.3 PD11.11 /DT1.11 PD01.2 /DT0.2 PD01.10 /DT0.10 PD11.2 /DT1.2 PD11.10 /DT1.10 PD01.1 /DT0.1 PD01.9 /DT0.9 PD11.1 /DT1.1 PD11.9 /DT1.9 PWM21DL F9H PWM21 占空比控制寄存器低位 PD21.7 PD21.6 PD21.5 PD21.4 PD21.3 PD21.2 PD21.1 PD21.0 PWM21DH FAH PWM21 占空比控制寄存器高位 PD21.15 PD21.14 PD21.13 PD21.12 PD21.11 PD21.10 PD21.9 PD21.8 PD01.0 /DT0.0 PD01.8 /DT0.8 PD11.0 /DT1.0 PD11.8 /DT1.8 14

15 SFR 映像图 可按位寻址 注意 : 未使用的 SFR 地址禁止读写 不可按位寻址 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F F8H P5 PWM21DL PWM21DH IB_OFFSET IB_DATA SBRTL SBRTH FFH F0H B AUXC IB_CON1 IB_CON2 IB_CON3 IB_CON4 IB_CON5 XPAGE F7H E8H PWMINTF P0PCR P1PCR P2PCR P3PCR P4PCR P5PCR PWMOE EFH E0H ACC P0CR P1CR P2CR P3CR P4CR P5CR PWMRLDEN E7H D8H EXF1 PWMCON1 PWMPL PWMPH PWM0DL PWM0DH PWM1DL PWM1DH DFH D0H PSW FLTCON PWM2DL PWM2DH PWMDT0L/ PWM01DL PWMDT0H/ PWM01DH PWMDT1L/ PWM11DL PWMDT1H/ PWM11DH C8H T2CON T2MOD RCAP2L RCAP2H TL2 TH2 TCON1 PTCON CFH C0H P4 MDSCON OPRDA0 OPRDA1 OPRDA2 OPRDA3 OPRDB0 OPRDB1 C7H B8H IPL0 IPL1 IENC CMP2CON0 CMP2CON1 BUZCON PWMINTEN PWMCON2 BFH B0H P3 RSTSTAT CLKCON CMP1CON IPH0 IPH1 PMANUAL CON1 PMANUAL CON2 A8H IEN0 IEN1 TL3 TH3 T3CON PWM3CON PWM3P PWM3D AFH A0H P2 SPSTA SPCON SPDAT BFINE ADCH2 SEQCON FLASHCON A7H 98H SCON SBUF SADDR SADEN ADDLTL ADDLTH ADDGTL ADDGTH 9FH 90H P1 ADCMPCON ADCON2 ADCON1 ADT ADCH1 ADDxL/ SEQCHx ADDxH 88H TCON TMOD TL0 TL1 TH0 TH1 SUSLO CMP2CON2 8FH 80H P0 SP DPL DPH DPL1 DPH1 INSCON PCON 87H 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F D7H B7H 97H 15

16 7. 标准功能 7.1 CPU 内核特殊功能寄存器 特性 CPU 内核寄存器 :ACC,B,PSW,SP,DPL,DPH 累加器 B 寄存器 累加器 ACC 是一个常用的专用寄存器, 指令系统中采用 A 作为累加器的助记符 在乘除法指令中, 会用到 B 寄存器 在其它指令中,B 寄存器可作为暂存器来使用 栈指针 (SP SP) 栈指针 SP 是一个 8 位专用寄存器, 在执行 PUSH 各种子程序调用 中断响应等指令时,SP 先加 1, 再将数据压栈 ; 执行 POP RET RETI 等指令时, 数据退出堆栈后 SP 再减 1 堆栈栈顶可以是片上内部 RAM(00H-FFH) 的任意地址, 系统复位后,SP 初始化为 07H, 使得堆栈事实上由 08H 地址开始 程序状态字 (PSW PSW) 寄存器 程序状态字 (PSW) 寄存器包含了程序状态信息 Table 7.1 PSW 寄存器 D0H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PSW C AC F0 RS1 RS0 OV F1 P 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 数据指针 (DPTR DPTR) 位编号位符号说明 7 C 6 AC 5 F0 4-3 RS[1:0] 2 OV 1 F1 0 P 进位标志位 0: 算术或逻辑运算中, 没有进位或借位发生 1: 算术或逻辑运算中, 有进位或借位发生 辅助进位标志位 0: 算数逻辑运算中, 没有辅助进位或借位发生 1: 算数逻辑运算中, 有辅助进位或借位发生 F0 标志位用户自定义标志位 R0-R7 寄存器页选择位 00: 页 0( 映射到 00H-07H) 01: 页 1( 映射到 08H-0FH) 10: 页 2( 映射到 10H-17H) 11: 页 3( 映射到 18H-1FH) 溢出标志位 0: 没有溢出发生 1: 有溢出发生 F1 标志位用户自定义标志位 奇偶校验位 0: 累加器 A 中值为 1 的位数为偶数 1: 累加器 A 中值为 1 的位数为奇数 数据指针 DPTR 是一个 16 位专用寄存器, 其高位字节寄存器用 DPH 表示, 低位字节寄存器用 DPL 表示 它们既可以作为一个 16 位寄存器 DPTR 来处理, 也可以作为 2 个独立的 8 位寄存器 DPH 和 DPL 来处理 16

17 7.1.2 CPU 增强内核特殊功能寄存器 扩展的 'MUL' 和 'DIV' 指令 :16 位 *8 位,16 位 /8 位 双数据指针 CPU 增强内核寄存器 :AUXC,DPL1,DPH1,INSCON cpu 核扩展了 'MUL' 和 'DIV' 的指令, 使用一个新寄存器 -AUXC 寄存器保存运算数据的高 8 位, 以实现 16 位运算 在 16 位乘除法指令中, 会用到 AUXC 寄存器 在其它指令中,AUXC 寄存器可作为暂存器来使用 CPU 在复位后进入标准模式,'MUL' 和 'DIV' 的指令操作和标准 8051 指令操作一致 当 INSCON 寄存器的相应位置 1 后,'MUL' 和 'DIV' 指令的 16 位操作功能被打开 MUL DIV 注意 : 此功能为 CPU 核提供, 执行时间较长 ; 另外集成了一个硬件乘除法单元, 执行时间短, 参见 8-2( 乘除法 / 移位单元 ) 双数据指针 结果操作 A B AUXC INSCON.2 = 0;8 位模式 (A)*(B) 低位字节高位字节 --- INSCON.2 = 1;16 位模式 (AUXC A)*(B) 低位字节中位字节高位字节 INSCON.3 = 0;8 位模式 (A)/(B) 商低位字节余数 --- INSCON.3 = 1;16 位模式 (AUXC A)/(B) 商低位字节余数商高位字节 使用双数据指针能加速数据存储移动 标准数据指针被命名为 DPTR 而新型数据指针命名为 DPTR1 数据指针 DPTR1 与 DPTR 类似, 是一个 16 位专用寄存器, 其高位字节寄存器用 DPH1 表示, 低位字节寄存器用 DPL1 表示 它们既可以作为一个 16 位寄存器 DPTR1 来处理, 也可以作为 2 个独立的 8 位寄存器 DPH1 和 DPL1 来处理 通过对 INSCON 寄存器中的 DPS 位置 1 或清 0 选择两个数据指针中的一个 所有读取或操作 DPTR 的相关指令将会选择最近一次选择的数据指针 寄存器 Table 7.2 数据指针选择寄存器 86H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 INSCON DIV MUL - DPS 读 / 写 读 / 写读 / 写 - 读 / 写 位编号位符号说明 3 DIV 2 MUL 0 DPS 16 位 /8 位除法选择位 0:8 位除法 1:16 位除法 16 位 /8 位乘法选择位 0:8 位乘法 1:16 位乘法 数据指针选择位 0: 数据指针 1: 数据指针 1 17

18 7.2 RAM 为了提高系统数据变量的处理能力, 支持高级语言, 提供了额外的 RAM 空间 除内部 RAM 256 字节外, 还扩展了外部 1280 字节的 RAM, 分为以下四个独立的空间 : 低位 128 字节的 RAM( 地址从 00H 到 7FH) 可直接或间接寻址 高位 128 字节的 RAM( 地址从 80H 到 FFH) 只能间接寻址 特殊功能寄存器 (SFR, 地址从 80H 到 FFH) 只能直接寻址 外部 RAM 可通过 MOVX 指令间接访问 高位 128 字节的 RAM 占用的地址空间和 SFR 相同, 但在物理上与 SFR 的空间是分离的 当一个指令访问高于地址 7FH 的内部位置时,CPU 可以根据访问的指令类型来区分是访问高位 128 字节数据 RAM 还是访问 SFR 注意 : 未使用的 SFR 地址禁止读写 4FFh Extenal RAM 0FFh 80h Upper 128 bytes Internal Ram indirect accesses 0FFh 80h Special Function Register direct accesses 00 7Fh 00 Lower 128 bytes Internal Ram direct or indirect accesses RAM 地址 支持传统的访问外部 RAM 方法 可以使用 MOVXA,@Ri 或 MOVX@Ri,A; 来访问外部低 256 字节 RAM; 使用 MOVX A,@DPTR 或 MOVX@DPTR,A 来访问外部 1280 字节 RAM 用户也能用 XPAGE 寄存器来访问外部 RAM, 仅用 MOVX A,@Ri 或 MOVX@Ri,A 指令即可 用户能用 XPAGE 来表示高于 256 字节的 RAM 地址 在 Flash SSP 模式下,XPAGE 也能用作分段选择器 ( 详见 SSP 章节 ) Table 7.3 数据存储页寄存器 (XPAGE) F7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 XPAGE XPAGE.7 XPAGE.6 XPAGE.5 XPAGE.4 XPAGE.3 XPAGE.2 XPAGE.1 XPAGE.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 XPAGE[7:0] RAM 页选择控制位 18

19 7.3 Flash 程序存储器 特性 Flash 存储器包括 16 X 1KByte, 总共 16KB 集成类 EEPROM 存储器 8 X 256B, 总共 2KB 在工作电压范围内都能进行编程和擦除操作 支持 4 种代码保护模式 在线编程 (ICP) 操作支持写入 读取和擦除操作 支持整体 / 扇区擦除和编程 编程 / 擦除次数 : 程序区 : 至少 10,000 次类 EEPROM 区 : 至少 100,000 次 数据保存年限 : 至少 10 年 低功耗 0FFFFH Reserved 3FFFH Program Rom (16K) 1FFFH 07FFH 0000H EEPROM Like Data 2048 bytes 0000H 0000H Information Block 为存储程序代码内置 16K 可编程 Flash 程序存储区 (Program Memory Block), 支持在线编程 (ICP) 模式和扇区自编程 (SSP) 模式对 Flash 存储器操作 每个扇区 1024 字节 还内置 2048 字节的类 EEPROM 存储区用于存放用户数据 每个扇区 256 字节, 总共 8 个扇区 Flash 操作定义 : 在线编程 (ICP) 模式 : 通过 Flash 编程器对 Flash 存储器进行擦 读 写操作 扇区自编程 (SSP) 模式 : 用户程序代码在 Flash 代码区中运行, 对 Flash 存储器 ( 包括 Flash 代码区和类 EEPROM 区 ) 进行擦 读 写操作, 但无法擦除代码自身所在的扇区 Flash 存储器支持以下操作 : (1) 代码保护控制模式编程 的代码保护功能为用户代码提供了高性能的安全措施 共提供 4 种保护模式 代码保护模式 0: 对烧写器加密, 允许 / 禁止任何编程器的写入 / 读取操作 ( 不包括整体擦除 ), 以 4K(4 个扇区 ) 为单位, 可以分开保护 代码保护模式 1: 对 MOVC 指令加密, 允许 / 禁止在其他扇区中通过 MOVC 指令进行读取操作, 或通过 SSP 模式进行擦除 / 写入操作, 以 4K(4 个扇区 ) 为单位, 可以分开保护 代码保护模式 2:SSP 功能允许 / 禁止控制, 选中后, 芯片对 code 区域的 SSP 操作 ( 擦除或者写入, 不包括读取 ) 是禁止的, 但是不会禁止芯片对类 EEPROM 的操作 代码保护模式 3: 客户密码保护, 可由客户自设密码, 密码由 6 字节组成 如果将此功能开启, 表示在烧写器或仿真器工具对芯片做任何操作 ( 读出, 写入, 擦除或者仿真 ) 之前先输入这个密码, 如果这个密码正确, 则芯片允许烧写器或仿真器工具进行相应的操作, 反之则报错, 无法执行相应操作 用户必须使用下列方式才能完成代码保护控制模式的设定 : Flash 编程器在 ICP 模式设置相应的保护位, 以进入所需的保护模式,SSP 模式不支持代码保护控制模式编程 19

20 (2) 整体擦除 无论代码保护控制模式的状态如何, 整体擦除操作都将会擦除所有程序, 代码选项, 代码保护位, 但是不会擦除类 EEPROM 存储区 用户必须使用下列方式才能完成整体擦除 : Flash 编程器在 ICP 模式发出整体擦除指令, 进行整体擦除 SSP 模式不支持整体擦除 (3) 扇区擦除 扇区擦除操作将会擦除所选扇区中内容 用户程式 (SSP) 和 Flash 编程器都能执行该操作 若需用户程式执行该操作, 必须禁止所选扇区的代码保护控制模式 1 和保护模式 2 若需编程器执行该操作, 必须禁止所选扇区的代码保护控制模式 0, 如果保护模式 3 使能, 必须输入正确密码 用户必须使用下列 2 种方式之一才能完成扇区擦除 : 1. Flash 编程器在 ICP 模式发出扇区擦除指令, 进行扇区擦除 2. 通过 SSP 功能发出扇区擦除指令, 进行扇区擦除 ( 详见在扇区自编程章节 ) (4) 类 EEPROM 存储区擦除 类 EEPROM 存储区擦除操作将会擦除类 EEPROM 存储区中的内容 用户程式 (SSP) 和 Flash 编程器都能执行该操作 用户必须使用下列 2 种方式之一才能完成类 EEPROM 存储区擦除 : 1. Flash 编程器在 ICP 模式发出类 EEPROM 存储区擦除指令, 进行类 EEPROM 存储区擦除 2. 通过 SSP 功能发出类 EEPROM 存储区擦除指令, 进行类 EEPROM 存储区擦除 ( 详见在扇区自编程章节 ) (5) 写 / 读代码 读 / 写代码操作可以将代码从 Flash 存储器中读出或写入 用户程式 (SSP) 和编程器都能执行该操作 若需用户程式执行读代码操作, 必须禁止所选扇区的代码保护控制模式 1 但不管保护位如何设置, 用户程序都能读程式自身所在扇区 (1K 为单位 ) 若需用户程式执行写代码操作, 必须禁止所选扇区的代码保护控制模式 1 和代码保护模式 2 注 : 若只使能扇区的代码保护控制模式 1, 用户程序不能写其它扇区, 但能写程式自身所在扇区 (1K 为单位 ), 若需编程器执行该操作, 必须禁止所选扇区的代码保护控制模式 0 用户必须使用下列 2 种方式之一才能完成写 / 读代码 : 1. Flash 编程器在 ICP 模式发出写 / 读代码指令, 进行写 / 读代码 2. 通过 SSP 功能发出写代码指令, 进行写代码操作 ; 通过 MOVC 指令执行读代码操作 (6) 写 / 读类 EEPROM 存储区 读 / 写类 EEPROM 存储区操作可以将数据从类 EEPROM 存储区中读出或写入 用户程式 (SSP) 和 Flash 编程器都能执行该操作 用户必须使用下列 2 方式之一才能完成写 / 读类 EEPROM 存储区 : 1. Flash 编程器在 ICP 模式发出写 / 读类 EEPROM 存储区指令, 进行写 / 读类 EEPROM 存储区 2. 过 SSP 功能发出写类 EEPROM 存储区指令, 进行写类 EEPROM 操作 ; 通过 MOVC 指令执行读类 EEPROM 操作 Flash 存储器操作汇总 操作 ICP SSP 代码保护 支持 支持 扇区擦除 支持 ( 无安全位 ) 支持 ( 无安全位 ) 整体擦除 支持 不支持 类 EEPROM 擦除 支持 支持 写 / 读代码 支持 ( 无安全位 ) 支持 ( 无安全位 ) 读 / 写类 EEPROM 支持 支持 代码保护 支持 不支持 20

21 7.3.2 ICP 模式下的 Flash 操作 ICP 模式为通过 Flash 编程器对 MCU 进行编程, 可以在 MCU 焊在用户板上以后编程 ICP 模式下, 用户系统必须关机后 Flash 编程器才能通过 ICP 编程接口刷新 Flash 存储器 ICP 编程接口包括 6 个引脚 (V DD,GND,TCK,TDI,TMS,TDO) 编程器使用 4 个 JTAG 引脚 (TDO,TDI,TCK,TMS) 进入编程模式 只有将特定波形输入 4 个引脚后,CPU 才能进入编程模式 如需详细说明请参考 Flash 编程器用户指南 在 ICP 模式中, 通过 6 线接口编程器能完成所有 Flash 操作 因为编程信号非常敏感, 用户需要用 5 个跳线将编程引脚 (V DD, TDO,TDI,TCK,TMS) 从应用电路中分离出来, 如下图所示 MCU Flash Programmer VDD TMS TCK TDI TDO GND To Application Circuit Jumper 当采用 ICP 模式进行操作时, 建议按照如下步骤进行操作 : 1. 在开始编程前断开跳线 (jumper), 从应用电路中分离编程引脚 ; 2. 将芯片编程引脚连接至 Flash 编程器编程接口, 开始编程 ; 3. 编程结束后断开 Flash 编程器接口, 连接跳线恢复应用电路 如果不加跳线, 需保证电源线上的电容负载不超过 100uF,4 根信号线上的电容负载不超过 0.01uf, 电阻负载不小于 1K 阻值 21

22 7.4 SSP 寄存器 擦除 / 编程用扇区选择和编程用地址偏移量寄存器 此寄存器用来选择待擦除或者待编程扇区的区号, 配合 IB_OFFSET 寄存器来表示待编程字节在扇区内的地址偏移量 对于程序存储区, 一个扇区为 1024 字节, 寄存器定义如下 : Table 7.4 编程用地址选择寄存器 F7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 XPAGE XPAGE.7 XPAGE.6 XPAGE.5 XPAGE.4 XPAGE.3 XPAGE.2 XPAGE.1 XPAGE.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 Table 7.5 编程用地址偏移寄存器 XPAGE[1:0] 和 IB_OFFSET[7:0] 共 10 位, 可以表示 1 个程序存储扇区内全部 1024 个字节的偏移量 类 EEPROM 扇区, 一个扇区为 256 字节, 共 8 个扇区, 寄存器定义如下 : Table 7.6 擦除 / 编程用扇区选择寄存器 类 EEPROM 块区的访问可通过指令 MOVC A,@A+DPTR 或 MOVC A,@A+PC 实现 注意 : 需要将 FLASHCON 寄存器中的 FAC 位置 位编号位符号说明 7-2 XPAGE[7:2] 被编程的存储单元扇区号, 代表扇区 0, 以此类推 1-0 XPAGE[1:0] 被编程的存储单元高 2 位地址 FBH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_OFFSET IB_OFF SET.7 IB_OFF SET.6 IB_OFF SET.5 IB_OFF SET.4 IB_OFF SET.3 IB_OFF SET.2 IB_OFF SET.1 IB_OFF SET.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 IB_OFFSET[7:0] 被编程的存储单元低 8 位地址 F7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 XPAGE XPAGE.7 XPAGE.6 XPAGE.5 XPAGE.4 XPAGE.3 XPAGE.2 XPAGE.1 XPAGE.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-3 XPAGE[7:3] 2-0 XPAGE[2: 2:0] 在擦除 / 编程扇区时无意义 被擦除 / 编程的扇区选择位 000: 扇区 0 001: 扇区 1 111: 扇区 7 22

23 Table 7.7 编程用地址偏移寄存器 IB_OFFSET[7:0] 共 8 位, 可以表示 1 个块区内全部 256 个字节的偏移量 Table 7.8 编程用数据寄存器 Table 7.9 SSP 型选择寄存器 Table 7.10 SSP 流程控制寄存器 1 FBH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_OFFSET IB_OFF SET.7 IB_OFF SET.6 IB_OFF SET.5 IB_OFF SET.4 IB_OFF SET.3 IB_OFF SET.2 IB_OFF SET.1 IB_OFF SET.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 IB_OFFSET[7:0] 被编程的存储单元低 8 位地址 FCH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_DATA IB_DATA.7 IB_DATA.6 IB_DATA.5 IB_DATA.4 IB_DATA.3 IB_DATA.2 IB_DATA.1 IB_DATA.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 IB_DATA[7:0] 待编程数据 F2H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_CON1 IB_CON1.7 IB_CON1.6 IB_CON1.5 IB_CON1.4 IB_CON1.3 IB_CON1.2 IB_CON1.1 IB_CON1.0 读 / 写 读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 IB_CON1[7:0] SSP 操作选择 0xE6: 扇区擦除 0x6E: 存储单元编程 F3H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IB_CON IB_CON2.3 IB_CON2.2 IB_CON2.1 IB_CON2.0 读 / 写 读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 3-0 IB_CON2[3:0] 必须为 05H, 否则 Flash 编程将会终止 23

24 Table 7.11 SSP 流程控制寄存器 2 F4H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 IB_CON IB_CON3.3 IB_CON3.2 IB_CON3.1 IB_CON3.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 /PIN POR/WDT/LVR 位编号 位符号 说明 3-0 IB_CON3[3:0] 必须为 0AH, 否则 Flash 编程将会终止 Table 7.12 SSP 流程控制寄存器 3 F5H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 IB_CON IB_CON4.3 IB_CON4.2 IB_CON4.1 IB_CON4.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 /PIN POR/WDT/LVR 位编号 位符号 说明 3-0 IB_CON4[3:0] 必须为 09H, 否则 Flash 编程将会终止 Table 7.13 SSP 流程控制寄存器 4 F6H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 IB_CON IB_CON5.3 IB_CON5.2 IB_CON5.1 IB_CON5.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 /PIN POR/WDT/LVR 位编号 位符号 说明 3-0 IB_CON5[3:0] 必须为 06H, 否则 Flash 编程将会终止 24

25 7.4.2 Flash 控制流程图 Set IB_OFFSET Set XPAGE Set IB_DATA Set IB_CON1 S0 IB_CON2[3:0] 5H Set IB_CON2[3:0]=5H IB_CON2 5H S1 IB_CON3 AH IB_CON2 5H ELSE S2 Set IB_CON3=AH IB_CON3 AH Set IB_CON4=9H Reset IB_CON1-5 IB_CON4 9H S3 S4 Set IB_CON5=6H Sector Erase IB_CON1=E6H &IB_CON2[3:0]=5H &IB_CON3=AH &IB_CON4=9H &IB_CON5=6H IB_CON1=6EH &IB_CON2[3:0]=5H &IB_CON3=AH &IB_CON4=9H &IB_CON5=6H Programming 25

26 7.4.3 SSP 编程注意事项 为确保顺利完成 SSP 编程, 用户软件必须按以下步骤设置 : (1) 用于代码 / 数据编程 : 1. 关闭中断 ; 2. 根据地址设置 XPAGE,IB_OFFSET; 3. 按编程需要, 设置 IB_DATA; 4. 按照顺序设置 IB_CON1-5; 5. 添加 4 个 NOP 指令 ; 6. 开始编程,CPU 将进入 IDLE 模式 ; 编程完成后自动退出 IDLE 模式 ; 7. 如需继续写入数据, 跳转至第 2 步 ; 8. XPAGE 寄存器清 0; 恢复中断设置 (2) 用于扇区擦除 : 1. 关闭中断 ; 2. 按相应的扇区设置 XPAGE; 3. 按照顺序设置 IB_CON1-5; 4. 添加 4 个 NOP 指令 ; 5. 开始擦除,CPU 将进入 IDLE 模式 ; 擦除完成后自动退出 IDLE 模式 ; 6. 如需继续擦除数据, 跳转至第 2 步 ; 7. XPAGE 寄存器清 0; 恢复中断设置 (3) 读取 : 使用 MOVC A,@A+DPTR 或者 MOVC A,@A+PC 可读识别码 每颗芯片出厂后都固化有一个 40 位的可读识别码, 它的值为 0-0xffffffffff 的随机值, 它是无法擦除的 ( 存放在地址信息存储区 0x127b - 127f), 可以由程序或编程工具读出 程序读出示例 : Unsigned char Temp1,Temp2,Temp3,Temp4,Temp5; FLASHCON = 0x01; Temp1 = CBYTE[0x127b]; Temp2 = CBYTE[0x127c]; Temp3 = CBYTE[0x127d]; Temp4 = CBYTE[0x127e]; Temp5 = CBYTE[0x127f]; FLASHCON = 0x00; FLASHCON 寄存器的描述如下 : Table 7.14 Flash 访问控制寄存器 A7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 FLASHCON FAC 读 / 写 读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 0 FAC 访问控制 0:MOVC 指令或者 SSP 功能访问主程序区域 1:MOVC 指令或者 SSP 功能访问类 EEPROM 区域 26

27 7.5 系统时钟和振荡器 特性 高低频双振荡器系统 支持 3 种高频振荡器类型 : 晶体谐振器 陶瓷谐振器和内部 27M RC 振荡器 内建 128k 低频 RC 振荡器 内建系统时钟分频器 时钟定义 几个内部时钟定义如下 : OSCCLK: 低频时钟源, 低频时钟源为内部的 128K 低频振荡器时钟 f OSC 定义为 OSCCLK 的频率 t OSC 定义为 OSCCLK 的周期 OSCXCLK: 高频时钟源, 可从 3 个可选高频振荡器类型中 ( 晶体谐振器, 陶瓷谐振器以及内部 27MHz 高频 RC 振荡器 ) 选中的那个振荡器的时钟 f OSCX 定义为 OSCXCLK 的频率 t OSCX 定义为 OSCXCLK 的周期 OSCSCLK: 系统时钟频率分频器的输入时钟 这个时钟可能为 OSCCLK 或者 OSCXCLK f OSCS 定义为 OSCSCLK 的频率 t OSCS 定义为 OSCSCLK 的周期 SYSCLK: 系统时钟, 系统频率分频器的输出时钟 这个时钟为 CPU 指令周期的时钟 f SYS 定义为 SYSCLK 的频率 t SYS 定义为 SYSCLK 的周期 概述 采用双振荡器系统架构, 高频振荡器支持 3 种振荡器类型 : 晶体谐振器 (400kHz-16MHz), 陶瓷谐振器 (400kHz- 16MHz) 和内部 RC 振荡器 (27MHz), 振荡器类型的选择由代码选项 OP_OSC 决定 ( 详见代码选项章节 ) 低频振荡器采用内置的 128KRC 振荡器 由振荡器产生的基本时钟脉冲提供系统时钟支持 CPU 及片上外围设备 Table 7.15 系统时钟控制寄存器 B2H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CLKCON - CLKS1 CLKS0 SCMIF OSCXON FS - - 读 / 写 - 读 / 写读 / 写只读读 / 写读 / 写 位编号位符号说明 6-5 CLKS[1:0] 4 SCMIF 3 OSCXON 系统时钟预分频器 00:f SYS = f OSC 01:f SYS = f OSC /2 10:f SYS = f OSC /4 11:f SYS = f OSC /12 注意 : 系统复位后此寄存器默认为 11, 即初始化默认系统时钟 12 分频 系统时钟监控标志位 0: 表示系统时钟正常运行 1: 表示系统时钟故障, 硬件自动切换到内部 2M RC 振荡器 高频时钟源开关控制位 0: 关闭高频系统时钟源 1: 开启高频系统时钟源只有代码选项选择为双振荡器模式时, 此控制位才有效 2 FS 系统时钟切换控制位 0: 系统时钟选择从低频时钟源分频, 即 OSCSCLK = OSCCLK 1: 系统时钟选择从高频时钟源分频, 即 OSCSCLK = OSCXCLK 只有代码选项选择为双振荡器模式时, 此控制位才有效 27

28 注意 : 1. 当 OSCXCLK 作为 OSCSCLK 时 ( 也就是说 FS = 1), OSCXON 不能软件清 0 2. 当 OSCSCLK 从 128K 切换到 OSCXCLK 时, 假如当时 OSCXCLK 为关闭状态, 则必须按以下步骤依次设置 : a. 设置 OSCXON = 1, 打开 OSCXCLK b. 至少等待振荡器预热时间 ( 详见振荡器预热章节 ) c. 设置 FS = 1, 选择 OSCXCLK 作为 OSCSCLK 3. 当 OSCSCLK 从 OSCXCLK 切回到 128K 时, 则必须按以下步骤依次设置 : a. FS 位清 0, 选择 128K 作为 OSCSCLK b. 添加 1 个 NOP 指令 c. OSCXON 位清 0( 降低功耗 ) 系统时钟监控 (SCM SCM) 为了增强系统的可靠性,SH79f1611 含有一个系统时钟监控 (SCM) 模块 在系统选择高频时钟时 ( 不管是单时钟模式还是双时钟模式 ), 如果系统时钟出现故障 ( 例如 : 高频振荡器停振等 ), 内建 SCM 模块会将 OSCCLK 自动切换到内部 2M 振荡器, 同时系统时钟监控标志位 (SCMIF) 被置 1 如果 EA 和 ESCM 位均为 1,SCM 模块将会产生中断 如果高频振荡器恢复工作,SCM 会将 OSCCLK 自动切换回高频振荡器, 然后 SCMIF 位自动清 0 注意 : SCMIF 为只读位, 只能由硬件清 0 或者置 1 如果 SCMIF 清 0,SCM 将系统时钟自动切换到系统时钟出故障前的状态 双时钟模式下, 如果 FS = 0, 系统工作在 128K 低频振荡器, 则系统时钟监控功能不可用 振荡器类型 (1) 陶瓷谐振器 :400kHz - 16MHz XTAL1 C1 Ceramic XTAL2 C2 (2) 晶体谐振器 :400k - 16MHz XTAL1 C1 Crystal XTAL2 C2 (3) 内部 RC 振荡器 :27MHz( 不需要外部电路 ) XTAL1 XTAL2 28

29 7.5.5 谐振器负载电容选择 频率 陶瓷谐振器 C1 C2 455kHz pF pF MHz 8-15pF 8-15pF * 表示已经内建负载电容 注意 : 1. 表中负载电容仅供参考! 2. 以上电容值可通过谐振器基本的起振和运行测试, 并非最优值 3. 请注意印制板上的杂散电容, 用户应在超过应用电压和温度的条件下测试谐振器的性能 在应用陶瓷谐振器 / 晶体谐振器之前, 用户需向谐振器生产厂要求相关应用参数以获得最佳性能 请登陆 以取得更多的推荐谐振器生产厂 29

30 7.6 I/O 端口 特性 44 个双向 I/O 端口 I/O 端口可与其他功能共用 提供 44 个可编程双向 I/O 端口 端口数据在寄存器 Px 中 端口控制寄存器 (PxCRy) 控制端口是作为输入或者输出 当端口作为输入时, 每个 I/O 端口带有由 PxPCRy 控制的内部上拉电阻 (x = 0-5,y = 0-7) 的有些 I/O 引脚能与选择功能共享 当所有功能都允许时, 在 CPU 中存在优先权以避免功能冲突 ( 详见端口共享章节 ) 寄存器 Table 7.16 端口控制寄存器 E1H - E6H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 P0CR (E1H) P0CR.7 P0CR.6 P0CR.5 P0CR.4 P0CR.3 P0CR.2 P0CR.1 P0CR.0 P1CR (E2H) P1CR.7 P1CR.6 P1CR.5 P1CR.4 P1CR.3 P1CR.2 P1CR.1 P1CR.0 P2CR (E3H) P2CR.7 P2CR.6 P2CR.5 P2CR.4 P2CR.3 P2CR.2 P2CR.1 P2CR.0 P3CR (E4H) P3CR.7 P3CR.6 P3CR.5 P3CR.4 P3CR.3 P3CR.2 P3CR.1 P3CR.0 P4CR (E5H) P4CR.7 P4CR.6 P4CR.5 P4CR.4 P4CR.3 P4CR.2 P4CR.1 P4CR.0 P5CR (E6H) P5CR.3 P5CR.2 P5CR.1 P5CR.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 Table 7.17 端口上拉电阻控制寄存器 位编号位符号说明 7-0 PxCR.y x = 0-5, y = 0-7 端口输入 / 输出控制 0: 输入模式 1: 输出模式 E9H- EEH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 P0PCR (E9H) P0PCR.7 P0PCR.6 P0PCR.5 P0PCR.4 P0PCR.3 P0PCR.2 P0PCR.1 P0PCR.0 P1PCR (EAH) P1PCR.7 P1PCR.6 P1PCR.5 P1PCR.4 P1PCR.3 P1PCR.2 P1PCR.1 P1PCR.0 P2PCR (EBH) P2PCR.7 P2PCR.6 P2PCR.5 P2PCR.4 P2PCR.3 P2PCR.2 P2PCR.1 P2PCR.0 P3PCR (ECH) P3PCR.7 P3PCR.6 P3PCR.5 P3PCR.4 P3PCR.3 P3PCR.2 P3PCR.1 P3PCR.0 P4PCR (EDH) P4PCR.7 P4PCR.6 P4PCR.5 P4PCR.4 P4PCR.3 P4PCR.2 P4PCR.1 P4PCR.0 P5PCR (EEH) P5PCR.3 P5PCR.2 P5PCR.1 P5PCR.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 PxPCR.y x = 0-5, y = 0-7 输入端口内部上拉电阻控制 0: 内部上拉电阻关闭 1: 内部上拉电阻开启 30

31 Table 7.18 端口数据寄存器 80H - F8H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P1 (90H) P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2 (A0H) P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P3 (B0H) P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 P4 (C0H) P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0 P5 (F8H) P5.3 P5.2 P5.1 P5.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 Px.y x = 0-5, y = 0-7 端口数据寄存器 端口模块图 SFEN PxPCRy Output Mode Input Mode PxCRy VDD VDD (Pull-up) 0 = ON 1 = OFF Write I/O Pad Data Bus Data Register Read Port Data Register Read Read Data Register/Pad Selection 0: From Pad 1: From data register 0 = OFF 1 = ON Second Function Read Port Pad 注意 : 1. 输入端口读操作直接读引脚电平 2. 输出端口读操作的输入源有两种, 一种是从端口数据寄存器读取, 另一种是直接读引脚电平 用读取指令来区分 : 读 - 改 - 写指令是读寄存器, 而其它指令读引脚电平 3. 不管端口是否共用为其他功能, 对端口写操作都是针对端口数据寄存器 31

32 7.6.4 端口共用 44 个双向 I/O 端口也能共享作为第二或第三种特殊功能 共享优先级按照外部最高内部最低的规则 : 在引脚配置图中引脚最外边标注功能享有最高优先级, 最里边标注功能享有最低优先级 这意味着一个引脚已经使用较高优先级功能 ( 如果被允许的话 ), 就不能用作较低优先级功能, 即使较低优先级功能被允许 只有较高优先级功能由硬件或软件关闭后, 相应的引脚才能用作较低优先级功能 上拉电阻也由相同规则控制 当允许端口复用为其它功能时, 用户可以修改 PxCR PxPCR(x = 0-5), 但在复用的其它功能被禁止前, 这些操作不会影响端口状态 当允许端口复用为其它功能时, 任何写入端口操作只会影响到数据寄存器 ; 而对于读操作, 如果 I/O 复用为中断功能, 则返回引脚电平, 而复用为其它功能时, 返回端口寄存器的值 PORT0: - OP1OUT(P0.0):OP1 输出 - C1N-C2N(P0.1,P0.6): 比较器 1,2 输入负端 - AN0-AN5(P0.2 - P0.7):ADC 输入通道 - C2P0-C2P2(P0.2 - P0.4): 比较器 2 的三个同相输入端 - INT45-INT47(P0.2 - P0.4): 外部中断 4 的三个输入端 - V REF (P0.5):ADC 基准电压输入 Table 7.19 PORT0 共用列表 引脚编号优先级功能允许位 OP1OUT CMP2CON1 寄存器的 AMP1EN 位置 1 2 P0.0 CMP2CON1 寄存器的 AMP1EN 清 0 1 C1N CMP1CON 寄存器的 CMP1EN 位置 1, 且 C1NCHS = 0 时 2 P0.1 不满足上述情况 1 C2P0-C2P2/ AN0-AN2 2 INT45-INT47 ADCH1 寄存器的 CH0,CH1,CH2 位置 1 作 C2P0-C2P2 或 AN0-AN2 的模拟端口注 : 比较器功能与 ADC 功能可以同时实现 不满足优先级 1 的情况下,IEN1 寄存器的 EX4 置 1,IENC 寄存器 EXS45 - EXS47 置 1, 且 IO 为输入 此时 I/O 口的输入功能仍然有效 3 P0.2-P0.4 不满足优先级 1 的情况下都作 I/O 口 V REF ADCON1 寄存器的 REFC 位置 1 2 AN3 ADCON1 寄存器的 REFC 清位 0 且 ADCH1 寄存器的 CH3 位置 1 3 P0.5 ADCON1 寄存器的相应位 REFC 清 0,ADCH1 寄存器的 CH3 位清 0 1 C2N/ AN4 ADCH1 寄存器的 CH4 = 1 作 C2N 或 AN4 的模拟端口注 : 比较器功能与 ADC 功能可以同时实现 2 P0.6 ADCH1 寄存器的 CH4 位清 0 1 AN5 ADCH1 寄存器的 CH5 位置 1 2 P0.7 ADCH1 寄存器的 CH5 位清 0 32

33 PORT ORT1: - OP1N(P1.0):OP1 输入负端 - OP1P(P1.1):OP1 输入正端 - OP2OUT(P1.7):OP2 输出端口 -C1P(P1.1): 比较器 1 输入正端 - TDO,TMS,TDI,TCK(P1.2 - P1.5):JTAG 接口 - AN8-AN10(P1.2,P1.3,P1.6):ADC 模拟输入口 - INT0,INT1(P1.2,P1.3): 外部中断 0,1 - BUZ(P1.4):BUZZER 输出 - RST(P1.5):PIN 复位输入 Table 7.20 PORT1 共用列表 引脚编号优先级功能允许位 OP1N CMP2CON1 寄存器的 AMP1EN 位置 1 2 P1.0 CMP2CON1 寄存器的 AMP1EN 位清 0 1 C1P/OP1P CMP1CON 寄存器的 CMP1EN 位置 1 且 C1PCHS 清 0 或 CMP2CON1 寄存器的 AMP1EN 位置 1 注 : 比较器功能与放大器功能可同时实现 (CMP1EN=1&C1PCHS=0 且 AMP1EN=1) 2 P1.1 CMP1CON 寄存器的 CMP1EN 位清 0,CMP1CON 寄存器的 AMP1EN 位清 0 1 TDO 进入仿真模式 2 AN8 非仿真模式下,ADCH2 寄存器的 CH8 位置 1 3 INT0 非仿真模式下,ADCH2 寄存器的 CH8 位清 0,IEN0 寄存器的 EA 位和 EX0 位置 1, 且 IO 为输入作中断口功能 INT0 或 T0 的 GATE=1 时, 作 T0 定时计数器控制输入端 INT0 此时外中断功能仍然有效 4 P1.2 不满足优先级 1 2 的情况下始终作为 I/O 1 TMS 进入仿真模式 2 AN9 非仿真模式下,ADCH2 寄存器的 CH9 位置 1 3 INT1 非仿真模式下,ADCH2 寄存器的 CH9 位清 0,IEN0 寄存器的 EA 位和 EX1 位置 1, 且 IO 为输入, 作中断口功能 INT1 或 T1 的 GATE=1 时, 作 T1 定时计数器控制输入端 INT1 此时外中断功能仍然有效 4 P1.3 不满足优先级 1 2 的情况下始终作为 I/O 1 TDI 进入仿真模式 2 BUZ 非仿真模式下,BUZCON 寄存器的 BZEN 位置 1 3 P1.4 非仿真模式下,BUZCON 寄存器的 BZEN 位清 0 1 TCK 进入仿真模式 2 RST 非仿真模式下, 代码选项选择 OP_RST 作为 reset pin 3 P1.5 非仿真模式下, 代码选项选择 OP_RST 作为 IO 1 AN10 ADCH2 寄存器的 CH10 位置 1 2 P1.6 ADCH2 寄存器的 CH10 位清 0 1 OP2OUT CMP2CON1 寄存器的 AMP2EN 位置 1 2 P1.7 CMP2CON1 寄存器的 AMP2EN 位清 0 33

34 PORT ORT2: - PWMn(n = 0.1.2),PWMn1(n = 0.1.2)(P2.0-P2.5):PWM 输出 - T0,T1(P2.6,P2.7): 定时器 0,1 输入或比较功能输出 - FLT(P2.6): 故障检测输入 Table 7.21 PORT2 共用列表 引脚编号优先级功能允许位 PWMn PWMn1 (n = 0.1.2) PWMOE 寄存器的 PWMnOE(n = 0.1.2),PWMn1OE(n = 0.1.2) 位置 1 2 P2.0-P2.5 PWMOE 寄存器的 PWMnOE(n = 0.1.2),PWMn1OE(n = 0.1.2) 位清 0 1 FLT PWM0/1/2 模块的 FLTCON 寄存器的 FLT2EN 位置 1 2 T0 3 P2.6 FLTCON 寄存器的 FLT2EN 位清 0, TCON 寄存器的 TR0 位置 1, 且 TMOD 寄存器的 C/T 位或 TCON1 寄存器的 TC0 位其中一个置 1 FLTCON 寄存器的 FLT2EN 位清 0, TCON 寄存器的 TR0 位清 0, 或 TMOD 寄存器的 C/T0位和 TCON1 寄存器的 TC0 位都为 T1 2 P2.7 TCON 寄存器的 TR1 位置 1, 且 TMOD 寄存器的 C/T1位或 TCON1 寄存器的 TC1 位其中一个置 1 TCON 寄存器的 TR1 位清 0, 或 TMOD 寄存器的 C/T1 位和 TCON1 寄存器的 TC1 位都为 0 34

35 PORT ORT3: - PWM3(P3.0):PWM3 的输出 - RXD(P3.1):EUART 的输入 - TXD(P3.2):EUART 的输出 - INT40,41,42,43,44(P3.1- P3.5): 外部中断 4 的 5 个输入 - XTAL1,XTAL2(P3.4,P3.5): 振荡器输入输出 - OP2P(P3.6):OP2 同相输入端 - OP2N(P3.7):OP2 反相输入端 Table 7.22 PORT3 共用列表 引脚编号优先级功能允许位 , PWM3 PWM3 寄存器 PWM3CON 的 PWM3OE 位置 1 2 P3.0 PWM3 寄存器 PWM3CON 的 PWM3OE 位清 0 1 RXD SCON 寄存器的 REN 位置 1( 自动上拉 ) 2 INT40 SCON 寄存器的 REN 位清 0,IEN0 的 EA 置 1,IEN1 寄存器的 EX4 置 1, IENC 寄存器 EXS40 置 1, 且 IO 为输入 3 P3.1 SCON 寄存器的 REN 位清 0, 始终作为 I/O 1 TXD 对 SBUF 寄存器写操作 2 INT41 UART 非传输过程中,IEN0 的 EA 置 1,IEN1 寄存器的 EX4 置 1, IENC 寄存器 EXS41 置 1, 且 IO 为输入 3 P3.2 对 SBUF 寄存器无操作, 始终作为 I/O 1 INT42 IEN0 的 EA 置 1,IEN1 寄存器的 EX4 置 1,IENC 寄存器 EXS42 置 1, 且 IO 为输入 2 P3.3 不满足上述情况 1 XTAL1, XTAL2 代码选项 OP_OSC 选为晶振或陶振 2 INT43, INT44 代码选项 OP_OSC 选为内部 RC 且 IEN0 的 EA 置 1,IEN1 寄存器的 EX4 置 1 IENC 寄存器 EXS43,EXS44 置 1, 且 IO 为输入 3 P3.4, P3.5 代码选项 OP_OSC 选为内部 RC 1 OP2P CMP2CON1 寄存器的 AMP2EN 位置 1 2 P3.6 CMP2CON1 寄存器的 AMP2EN 位清 0 1 OP2N CMP2CON1 寄存器的 AMP2EN 位置 1 2 P3.7 CMP2CON1 寄存器的 AMP2EN 位清 0 35

36 PORT ORT4: - AN6,AN7,AN11(P4.0-P4.2):ADC 的 3 路模拟通道 -T2EX(P4.5):T2 的外部事件输入口 - T2,T3(P4.6,P4.7): 定时器 2,3 输入或比较功能输出 Table 7.23 PORT4 共用列表 引脚编号优先级功能允许位 AN6, AN7, AN11 ADCH2 寄存器的 CH11 位置 1,ADCH1 寄存器的 CH6,CH7 位置 1 2 P4.0 - P4.2 不满足上述情况 1 T2EX 在 0,2,3 模式下 T2CON 寄存器的 EXEN2 位置 1 或在 1 模式下 T2CON 寄存器的 DCEN 位置 1 2 P4.5 T2CON 寄存器的 TR2 位清 T2 T2CON 寄存器的 TR2 位置 1,C/T 位置 1 2 P4.7 不满足上述情况 1 T3 T3CLK[1:0]=01 的情況下, 作 TIMER3 的时钟源输入口 T3 2 P4.6 不满足上述情况 PORT ORT5: - MOSI,MISO,SCK,SS(P5.0-P5.3):SPI 的输入输出口以及时钟口和主从设备选择口 Table 7.24 PORT5 共用列表引脚编号优先级功能允许位 MOSI, MISO, SCK SPI 的 SPSTA 寄存器的 SPEN 置 1 2 P5.0 - P5.2 SPI 的 SPSTA 寄存器的 SPEN 清 0 1 SS SPI 的 SPSTA 寄存器的 SPEN 置 1, 当主模式 SSDIS=1 时或从模式 CPHA=1 且 SSDIS=1 时也能作 I/O 口用 2 P5.3 不满足上述情况 36

37 7.7 定时器 特性 有 4 个定时器 ( 定时器 0,1,2,3) 定时器 0 兼容标准的 8051 定时器 1 兼容标准的 8051 定时器 2 有递增递减计数和可编程输出功能, 兼有硬件自动单次触发功能 定时器 3 是 16 位自动重载定时器, 且可以工作在掉电模式 定时器 0 和定时器 1 每个定时器的两个数据寄存器 (THx & TLx(x = 0,1)) 可作为一个 16 位寄存器来访问 它们由寄存器 TCON 和 TMOD 控制 IEN0 寄存器的 ET0 和 ET1 位置 1 能允许定时器 0 和定时器 1 中断 ( 详见中断章节 ) 定时器 x 的方式 (x = 0,1) 通过计数器 / 定时器方式寄存器 (TMOD) 的方式选择位 Mx1-Mx0, 选择定时器工作方式 方式 0:13 位计数器 / 定时器 在方式 0 中, 定时器 x 为 13 位计数器 / 定时器 THx 寄存器存放 13 位计数器 / 定时器的高 8 位,TLx 存放低 5 位 (TLx.4-TLx.0) TLx 的高三位 (TLx.7-TLx.5) 是不确定的, 在读取时应该被忽略 当 13 位定时器寄存器递增, 溢出时, 系统置起定时器溢出标 志 TFx 如果定时器 x 中断被允许, 将会产生一个中断 C/Tx 位选择计数器 / 定时器的时钟源 如果 C/Tx = 1, 定时器 x 输入引脚 (Tx) 的电平从高到低跳变, 使定时器 x 数据寄存器加 1 如果 C/Tx 定时器 x 的时钟源 当 GATEx = 0 或 GATEx = 1 且输入信号 INTx = 0, 选择系统时钟为 有效时,TRx 置 1 打开定时器 GATEx 置 1 允许定时器由外部输入信号 INTx 便于测量 INTx的正脉冲宽度 TRx 位置 1 不强行复位定时器, 这意味着如果 TRx 置 1, 定时器寄存器将从上次 TRx 清 0 时的值开始计数 所以在允许定时器之前, 应该设定定时器寄存器的初始值 当作为定时器应用时, 可配置寄存器 TCON1 中的 TCLKSx(x = 0,1) 位选择系统时钟或低频 128kHz 的 8 分频作为定时器 x (x = 0,1) 的时钟源 可配置寄存器 TCON1 中的 TCLKPx(x = 0,1) 位选择系统时钟或系统时钟的 1/12 作为定时器 x(x = 0,1) 的时钟源 当作为定时器应用时, 可配置寄存器 TCON1 中的 TC0/1 位使定时器 0/1 溢出时 T0/T1 脚自动翻转 如果 TC0/1 被置 1,T0/T1 引脚自动设置为输出 控制, System Clock 1/12 128kHz RC Clock Tx INTx TCLKPx /8 GATEx TRx TCLKSx =0 C/Tx =1 + & TLx (5bits) 0:Switch Off 1:Switch On THx (8bits) Overflow C/Tx=0 and TCx=1 TFx Overflow Flag The Block Diagram of mode0 of Timerx ( x=0,1 ) Interrupt Request Tx 37

38 方式 1:16 16 位计数器 / 定时器除了使用 16 位定时器 / 计数器之外, 方式 1 的运行与方式 0 一致 打开和配置计数器 / 定时器也如同方式 0 System Clock 1/12 128kHz RC Clock Tx INTx TCLKPx /8 GATEx TRx TCLKSx =0 C/Tx =1 + & TLx (8bits) 0:Switch Off 1:Switch On THx (8bits) Overflow C/Tx=0 and TCx=1 TFx Overflow Flag The Block Diagram of mode0 of Timerx ( x=0,1 ) Interrupt Request Tx 方式 2:8 位自动重载计数器 / 定时器 方式 2 中, 定时器 x 是 8 位自动重载计数器 / 定时器 TLx 存放计数值,THx 存放重载值 当在 TLx 中的计数器溢出至 0x00 时, 置起定时器溢出标志 TFx, 寄存器 THx 的值被重载入寄存器 TLx 中 如果定时器中断使能, 当 TFx 置 1 时将产生一个中断 而在 THx 中的重载值不会改变 在允许定时器正确计数开始之前,TLx 必须初始化为所需的值 除了自动重载功能外, 方式 2 中的计数器 / 定时器的使能和配置与方式 1 和 0 是一致的 当作为定时器应用时, 可配置寄存器 TCON1 中的 TCLKSx(x = 0,1) 位选择系统时钟或 128kHz 的 8 分频作为定时器 x(x = 0, 1) 的时钟源 可配置寄存器 TCON1 中的 TCLKPx(x = 0,1) 位选择系统时钟或系统时钟的 1/12 作为定时器 x(x = 0,1) 的时钟源 当作为定时器应用时, 可配置寄存器 TCON1 中的 TC0/1 位使定时器 0/1 溢出时 T0/T1 脚自动翻转 如果 TC0/1 被置 1,T0/T1 引脚自动设置为输出 System Clock 1/12 TH0 (8bits) Reload 128kHz RC Clock Tx INTx TCLKPx /8 TCLKSx GATEx TRx =0 C/Tx + =1 & TL0 (8bits) 0:Switch Off 1:Switch On overflow TFx Overflow Flag C/Tx=0 and TCx=1 The Block Diagram of mode2 of Timerx (x=0,1) Interrupt Request Tx 38

39 方式 3: 两个 8 位计数器 / 定时器 ( 只限于定时器 0) 在方式 3 中, 定时器 0 用作两个独立的 8 位计数器 / 定时器, 分别由 TL0 和 TH0 控制 TL0 使用定时器 0 的控制 ( 在 TCON 中 ) 和 状态 ( 在 TMOD 中 ) 位 :TR0,C/T0,GATE0 和 TF0 TL0 能用系统时钟或 128kHz 的 8 分频或外部输入信号作为时钟源 TH0 只能用作定时器功能, 时钟源来自系统时钟 TH0 由定时器 1 的控制位 TR1 控制使能, 溢出时定时器 1 溢出标志 TF1 置 1, 控制定时器 1 中断 定时器 0 工作在方式 3 时, 定时器 1 可以工作在方式 0 1 或 2, 但是不能置 1 TF1 标志和产生中断 TH1 和 TL1 只能用作定时器功能, 时钟源来自系统时钟,GATE1 位无效 T1 输入脚的上拉电阻也无效 定时器 1 由方式控制使能与否, 因为 TR1 被定时器 0 占用 定时器 1 在方式 0 1 或 2 时使能, 在方式 3 时被关闭 当作为定时器应用时, 可配置寄存器 TCON1 中的 TCLKSx(x = 0,1) 位选择系统时钟或 128kHz 的 8 分频作为定时器 x(x = 0, 1) 的时钟源 可配置寄存器 TCON1 中的 TCLKPx(x = 0,1) 位选择系统时钟或系统时钟的 1/12 作为定时器 x(x = 0,1) 的时钟源 当作为定时器应用时, 可配置寄存器 TCON1 中的 TC0/1 位使定时器 0/1 溢出时 T0/T1 脚自动翻转 如果 TC0/1 被置 1,T0/T1 引脚自动设置为输出 System Clock 1/12 128kHz RC Clock T0 INT0 /8 TCLKP0 GATE0 TCLKS0 =0 C/T0 =1 + TL0 (8bits) 0:Switch Off 1:Switch On Overflow TF0 Overflow Flag Interrupt Request T0 TR0 & C/T0=0 and TC0=1 System Clock 128kHz RC Clock /8 TCLKP0 1/12 TCLKS0 TH0 (8bits) 0:Switch Off 1:Switch On Overflow TF1 Overflow Flag Interrupt Request TR1 The Block Diagram of mode3 of Timer0 注意 : 此时定时器 1 溢出率不作为波特率发生器, 此功能仅作屏蔽, 芯片的可变波特率仅由寄存器 SBRTL/H 设置 39

40 寄存器 Table 7.25 定时器 / 计数器 x 控制寄存器 (x = 0,1) Table 7.26 定时器 / 计数器 x 方式寄存器 (x = 0,1) 88H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7,5 6,4 3,1 2,0 TFx x = 0,1 TRx x = 0,1 IEx x = 0,1 Itx x = 0,1 定时器 x 溢出标志位 0: 定时器 x 无溢出, 可由软件清 0 1: 定时器 x 溢出, 由硬件置 1; 若由软件置 1 将会引起定时器中断 定时器 x 启动, 停止控制位 0: 停止定时器 x 1: 启动定时器 x 外部中断 x 请求标志位 外部中断 x 触发方式选择位 89H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TMOD GATE1 C/T1 M11 M10 GATE0 C/T0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7,3 6, GATEx x = 0,1 C/Tx x = 0,1 Mx[1:0] x = 0,1 定时器 x 门控位 0:TRx 置 1, 定时器 x 即被允许 1: 只有 INTx在高电平期间 TRx 置 1, 定时器 x 才被允许 定时器 / 计数器方式选择位 0: 定时器方式 1: 计数器方式 定时器 x 定时器方式选择位 00: 方式 0,13 位向上计数计数器 / 定时器, 忽略 TLx 的第 7-5 位 01: 方式 1,16 位向上计数计数器 / 定时器 10: 方式 2,8 位自动重载向上计数计数器 / 定时器 11: 方式 3( 只用于定时器 0), 两个 8 位向上计数定时器 M01 M00 40

41 Table 7.27 定时器 / 计数器 x 数据寄存器 1(x = 0,1) Table 7.28 定时器 / 计数器 x 控制寄存器 1(x = 0,1) 8AH-8DH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TL0 (8AH) TL0.7 TL0.6 TL0.5 TL0.4 TL0.3 TL0.2 TL0.1 TL0.0 TH0 (8CH) TH0.7 TH0.6 TH0.5 TH0.4 TH0.3 TH0.2 TH0.1 TH0.0 TL1 (8BH) TL1.7 TL1.6 TL1.5 TL1.4 TL1.3 TL1.2 TL1.1 TL1.0 TH1 (8DH) TH1.7 TH1.6 TH1.5 TH1.4 TH1.3 TH1.2 TH1.1 TH1.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 TLx.y,THx.y THx.y x = 0-1,y = 0-7 定时器 x 低及高字节计数器 CEH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TCON1 - TCLK_S1 TCLK_S0 - TCLKP1 TCLKP0 TC1 TC0 读 / 写 - 读 / 写读 / 写 - 读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 TCLK_Sx x=0,1 TCLKPx x=0,1 TCx x=0,1 定时器 x 时钟源控制位 0: 系统时钟作为定时器 x 的时钟源 1: 选择 128kHz RC 时钟的 8 分频作为定时器 x 的时钟源 定时器 x 时钟源预分频控制位 0: 选择系统时钟的 1/12 作为定时器 x 的时钟源 1: 选择系统时钟作为定时器 x 的时钟源 比较输出功能允许位 0: 禁止定时器 x 比较输出功能 1: 允许定时器 x 比较输出功能 41

42 7.7.3 定时器 2 两个数据寄存器 (TH2 和 TL2) 串联后可作为一个 16 位寄存器来访问, 由寄存器 T2CON 和 T2MOD 控制 设置 IEN0 寄存器中的 ET2 位能允许定时器 2 中断 ( 详见中断章节 ) C/T2选择系统时钟 ( 定时器 ) 或外部引脚 T2( 计数器 ) 作为定时器时钟输入 通过所选的引脚设置 TR2 允许定时器 2/ 计数器 2 数据寄存器计数 定时器 2 方式 定时器 2 有 4 种工作方式 : 捕获 / 重载 带递增或递减计数器的自动重载方式 单次触发和可编程时钟输出 通过设置寄存器 T2CON 和 T2MOD 选择这些方式 定时器 2 方式选择 C/T2 T2OE 方式 0:16 位捕获 DCEN TR2 CP/RL2 在捕获方式中,T2CON 的 EXEN2 位有两个选项 TRG X 0 X 位捕获 X 0 0 或 位自动重载定时器 X 单次触发模式 0 1 X 1 X X 3 可编程时钟输出 X X X 0 X 0 X 定时器 2 停止,T2EX 通路仍旧允许 如果 EXEN2 = 0, 定时器 2 作为 16 位定时器或计数器, 如果 ET2 被允许的话, 定时器 2 能设置 TF2 溢出产生一个中断 如果 EXEN2 = 1, 定时器 2 执行相同操作, 但是在外部输入 T2EX 上的下降沿也能引起在 TH2 和 TL2 中的当前值分别被捕获到 RCAP2H 和 RCAP2L 中, 此外, 在 T2EX 上的下降沿也能引起在 T2CON 中的 EXF2 被设置 如果 ET2 被允许,EXF2 位也像 TF2 一样也产生一个中断 方式 System Clock 1/12 T2 TR2 TCLKP2 =0 C/T2 =1 0:Switch Off 1:Switch On Increment Mode TL2 TH2 TF2 Overflow flag CP / RL2 & + Interrupt Request T2EX EXEN2 0:Switch Off 1:Switch On RCAP2L RCAP2H EXF2 Block Diagram of 16 bit Capcture mode (Mode 0) of Timer2 External falling edge flag 42

43 方式 1:16 16 位自动重载定时器 在 16 位自动重载方式下, 定時器 2 可以被选为递增计数或递减计数 这个功能通过 T2MOD 中的 DCEN 位 ( 递减计数允许 ) 选择 系统复位后,DCEN 位为 0, 定时器 2 默认递增计数 当 DCEN 置 1 时, 定时器 2 递增计数或递减计数取决于 T2EX 引脚上的电平 当 DCEN = 0, 通过在 T2CON 中的 EXEN2 位选择两个选项 如果 EXEN2 = 0, 定时器 2 递增到 0FFFFH, 在溢出后置起 TF2 位, 同时定时器自动将用户软件写好的寄存器 RCAP2H 和 RCAP2L 的 16 位值装入 TH2 和 TL2 寄存器 如果 EXEN2 = 1, 溢出或在外部输入 T2EX 上的下降沿都能触发一个 16 位重载, 置起 EXF2 位 如果 ET2 被使能,TF2 和 EXF2 位都能产生一个中断 T2 System Clock TCLKP2 TR2 1/12 =0 C/T2 =1 0:Switch Off 1:Switch On Increment Mode TL2 TH2 RCAP2L RCAP2H TF2 Overflow Flag + Interrupt Request T2EX EXEN2 0:Switch Off 1:Switch On + External Falling Edge flag EXF2 The Block Diagram of Auto Relode Mode ( Mode 1)of Timer2 (DCEN=0) 设置 DCEN 位允许定时器 2 递增计数或递减计数 当 DCEN = 1 时,T2EX 引脚控制计数的方向, 而 EXEN2 控制无效 T2EX 置 1 可使定时器 2 递增计数 定时器向 0FFFFH 溢出, 然后设置 TF2 位 溢出也能分别引起 RCAP2H 和 RCAP2L 上的 16 位值重载入定时器寄存器 T2EX 清 0 可使定时器 2 递减计数 当 TH2 和 TL2 的值等于 RCAP2H 和 RCAP2L 的值时, 定时器溢出 置起 TF2 位, 同时 0FFFFH 重载入定时器寄存器 无论定时器 2 溢出与否,EXF2 位都被用作结果的第 17 位 在此工作方式下,EXF2 不作为中断标志 FFH FFH T2 System Clock TCLKP2 TR2 1/12 =0 C/T2 =1 0:Switch Off 1:Switch On TL2 TH2 TF2 Overflow Flag Interrupt Request T2EX 1.T2EX=1, Timer2 is up counter 2.T2EX=0, Timer2 is down co unter RCAP2L RCAP2H Toggle EXF2 The Block Diagram of Auto-Reload Mode ( Mode 1) of Timer2 ( DCEN=1) 43

44 方式 2: 单次触发模式 TRG = 1, 进入此模式 在此模式下,TR2 = 1 会引起 Timer2 自动重载并启动 Timer2, 将寄存器 RCAP2H 和 RCAP2L 的 16 位值装入 TH2 和 TL2 寄存器, 然后开始计数, 当计数溢出时, 置位 TF2, 同时触发 ADC 模块并自动清 0 TR2 停止 Timer2 计数 在此模式下,TR2 可以由软件置 1 也可以硬件置 1 硬件置 1 通过 MCPWM 模块实现, 将 PWMCON2 寄存器的 ZETIM 置 1, 则 MCPWM 模块会送出硬件触发信号给 Timer2( 详见 MCPWM 模块 ), 硬件置起 TR2 T2 MCPWM Period match TR2 System clock + TCLKP 2 S R D 1/12 =0 C/T2 =1 0:Switch Off 1:Switch On TL2 RCAP2L TH2 RCAP2H TF2 Interrupt Request Overflow Flag ADC Block Trig signal T2EX Clear TR2 EXEN2 0:Switch Off 1:Switch On EXF2 Timer2 Interrupt Request The Block Diagram of outo Trig Mode ( Mode 2 ) of Timer2 注意 : 当在软件启动 Timer2 时, 又有 MCPWM 硬件触发信号进来, 定时器会停止先前的计数并重载数据, 进行新的计数 ; 相反, 由 MCPWM 硬件信号触发启动 Timer2 时, 软件再置位 TR2 会当成是无效操作, 不会再重载定时器 Timer2 工作在方式 2 时,EXEN2 = 1 时,T2EX 的一个下降沿会置起 EXF2, 如果 ET2 被允许,EXF2 和 TF2 的置起都将引发一个 Timer2 的中断 44

45 方式 3: 可编程时钟输出 在这种方式中,T2 输出占空比为 50% 的时钟 : Clock Out 1 f SYS Frequency = [RCAP2H,RCAP2L] ; TCLKP2 = 0 Clock Out Frequency = 1 f SYS ; TCLKP2 = [RCAP2H,RCAP2L] 定时器 2 溢出不产生中断,T2 端口作时钟输出 System Clock 1/12 TCLKP2 =0 C/T2 =1 TL2 TH2 TR2 0:Switch Off 1:Switch On C/ T2 RCAP2L RCAP2H T2 /2 T2OE 0:Switch Off 1:Switch On EXEN2 T2EX 0:Switch Off 1:Switch On EXF2 Timer2 Interrupt Request The Block Diagram of Programmable Clock output (Mode 3) of Timer2 注意 : 1. TF2 和 EXF2 都能引起定时器 2 的中断请求, 两者有相同的向量地址 2. 当事件发生时或其它任何时间都能由软件设置 TF2 和 EXF2 为 1, 只有软件以及硬件复位才能使之清 0 3. 当 EA = 1 且 ET2 = 1 时, 设置 TF2 或 EXF2 为 1 能引起定时器 2 中断 45

46 寄存器 Table 7.29 定时器 2 重载 / 捕获和数据寄存器 Table 7.30 定时器 2 控制寄存器 CAH-CDH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 RCAP2L RCAP2L.7 RCAP2L.6 RCAP2L.5 RCAP2L.4 RCAP2L.3 RCAP2L.2 RCAP2L.1 RCAP2L.0 RCAP2H RCAP2H.7 RCAP2H.6 RCAP2H.5 RCAP2H.4 RCAP2H.3 RCAP2H.2 RCAP2H.1 RCAP2H.0 TL2 TL2.7 TL2.6 TL2.5 TL2.4 TL2.3 TL2.2 TL2.1 TL2.0 TH2 TH2.7 TH2.6 TH2.5 TH2.4 TH2.3 TH2.2 TH2.1 TH2.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 RCAP2L.x RCAP2H.x TL2.x TH2.x 定时器 2 重载 / 捕获数据低位高位,x = 0-7 定时器 2 低位 / 高位计数器,x = 0-7 C8H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 T2CON TF2 EXF2 TRG - EXEN2 TR2 C/T2 CP/RL2 读 / 写读 / 写读 / 写读 / 写 - 读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 TF2 6 EXF2 5 TRG 3 EXEN2 2 TR2 1 C/T2 0 CP/RL2 定时器 2 溢出标志位 0: 无溢出 ( 必须由软件清 0) 1: 溢出, 由硬件设 1 T2EX 引脚外部事件输入 ( 下降沿 ) 被检测到的标志位 0: 无外部事件输入 ( 必须由软件清 0) 1: 检测到外部输入 ( 如果 EXEN2 = 1, 由硬件设 1) 单次触发控制位 0: 关闭单次触发功能 1: 开启单次触发功能 T2EX 引脚上的外部事件输入 ( 下降沿 ) 用作重载 / 捕获触发器允许 / 禁止控制位 0: 忽略 T2EX 引脚上的事件 1: 检测到 T2EX 引脚上一个下降沿, 产生一个捕获或重载 定时器 2 开始 / 停止控制位 0: 停止定时器 2 1: 开始定时器 2 定时器 2 定时器 / 计数器方式选定位 0: 定时器方式,T2 引脚用作 I/O 端口 1: 计数器方式, 内部上拉电阻被打开 捕获 / 重载方式选定位 0:16 位带重载功能的定时器 / 计数器 1:16 位带捕获功能的定时器 / 计数器 46

47 Table 7.31 定时器 2 方式控制寄存器 C9H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 T2MOD TCLKP T2OE DCEN 读 / 写读 / 写 读 / 写读 / 写 位编号位符号说明 7 TCLKP2 1 T2OE 0 DCEN 分频选择控制位 0: 选择系统时钟的 1/12 作为定时器 2 的时钟源 1: 系统时钟作为定时器 2 的时钟源 定时器 2 输出允许位 0: 设置 P4.7/T2 作为时钟输入或 I/O 端口 1: 设置 P4.7/T2 作为时钟输出 递减计数允许位 0: 禁止定时器 2 作为递增 / 递减计数器, 定时器 2 仅作为递增计数器 1: 允许定时器 2 作为递增 / 递减计数器 47

48 7.7.4 定时器 3 定时器 3 是 16 位自动重载定时器, 通过两个数据寄存器 TH3 和 TL3 访问, 由 T3CON 寄存器控制 IEN1 寄存器的 ET3 位置 1 允许定时器 3 中断 ( 详见中断章节 ) 定时器 3 只有一个工作方式 :16 位自动重载计数器 / 定时器, 可以设置预分频比, 并可以工作在 CPU 掉电模式 定时器 3 有一个 16 位计数器 / 定时器寄存器 (TH3,TL3) 当 TH3 和 TL3 被写时, 用作定时器重载寄存器, 当被读时, 被用做计数寄存器 TR3 位置 1 使定时器 3 开始递增计数 定时器在 0xFFFF 到 0x0000 溢出并置 TF3 位为 1 溢出同时, 定时器重载寄存器的 16 位数据被重新载入计数寄存器中,TH3 写操作也导致重载寄存器的数据重新载入计数寄存器 由于对 TL3 和 TH3 的读写操作需要 2 条指令才能完成 为保证精确计数, 对 TL3 和 TH3 寄存器组的读写操作都以对 TH3 寄存器的读写操作作为基准 也就是说, 写 TL3 寄存器不会立即生效, 而是暂存在一个缓冲寄存器中, 只有对 TH3 寄存器的写操作才会使 TL3 和 TH3 寄存器同时生效 因此,TH3 和 TL3 读写操作遵循以下顺序 : 写操作 : 先低位后高位 读操作 : 先高位后低位 注意 : 虽然 TH3 和 TL3 寄存器地址相连, 而且 TL3 地址在前, 但由于上述限制, 因此在 C 语言编程时, 不能将此 2 个寄存器定义为 SFR16 T3 System Clock 128kHzRC T3PS[1:0] Prescaler 1,8,64,256 Increment Mode 16-bit Counter TF3 Interrupt Request T3CLKS[1:0] Overflow Flag TR3 0:Switch Off 1:Switch On TL3 TH3 The Block Diagram of Timer3 定时器 3 可以工作在掉电模式 但如果 T3CLKS[1:0] 为 00, 定时器 3 不能工作在掉电模式下 如果 T3CLKS[1:0] 为 01,T3 端口输入外部时钟, 定时器 3 可以工作在普通模式或掉电模式 当 T3CLKS[1:0] 为 10 时 ( 必须工作在双时钟源的高频模式,customer option 中选择 ) 定时器 3 可以工作在普通模式或掉电模式 注意 : 1. 在读或写 TH3 和 TL3 时, 如果时钟源不是系统时钟, 要确保 TR3 = 0 2. 当定时器 3 用 T3 端口作为时钟源, 而且 TR3 由 0 变为 1 时, 定时器 3 忽略 T3 的第 1 个下降沿 48

49 寄存器 Table 7.32 定时器 3 控制寄存器 ACH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 T3CON TF3 - T3PS.1 T3PS.0 - TR3 T3CLKS.1 T3CLKS.0 读 / 写读 / 写 - 读 / 写读 / 写 - 读 / 写读 / 写读 / 写 Table 7.33 定时器 3 重载 / 计数数据寄存器 位编号位符号说明 7 TF3 5-4 T3PS[1:0] 2 TR3 1-0 T3CLKS[1:0] 定时器 3 溢出标志位 0: 无溢出 ( 硬件清 0) 1: 溢出 ( 硬件置 1) 定时器 3 预分频比选择位 00:1/1 01:1/8 10:1/64 11:1/256 定时器 3 允许控制位 0: 关闭定时器 3 1: 打开定时器 3 定时器 3 时钟源选择位 00: 系统时钟,T3 端口作为 I/O 口 01:T3 端口输入外部时钟, 自动上拉 10: 内部 128KHz RC 振荡器 11: 保留 AAH - ABH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TL3 (AAH) TL3.7 TL3.6 TL3.5 TL3.4 TL3.3 TL3.2 TL3.1 TL3.0 TH3 (ABH) TH3.7 TH3.6 TH3.5 TH3.4 TH3.3 TH3.2 TH3.1 TH3.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 TL3.x TH3.x 定时器 3 低位高位计数器,x =

50 7.8 8bit 脉冲宽度调制模块 (PWM3 PWM3) 特性 8 位分辨率 PWM 模块, 提供预分频功能 提供每个 PWM 周期溢出中断 输出极性可选择, 带输出独立允许位, 允许位为 0 时可做通用定时器使用 内建 1 个 8 位 PWM 模块 PWM 模块可以产生周期和占空比分别可以调整的脉宽调制波形 寄存器 PWM3CON 用于控制 PWM 模块的时钟源, 寄存器 PWMP 用于设置 PWM 模块的周期, 寄存器 PWMD 用于设置 PWM 模块的占空比 寄存器 Table 7.34 PWM3 控制寄存器 ADH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWM3CON PWM3EN PWM3S PWM3CK1 PWM3CK0 FLT3EN PWM3IE PWM3IF PWM3OE 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7 PWM3EN 6 PWM3S 5-4 PWM3CK[1:0] 3 FLT3EN 2 PWM3IE 1 PWM3IF 0 PWM3OE PWM3 模块控制位 0: 关闭 PWM3 模块 1: 打开 PWM3 模块 PWM3 输出模式 0: 高电平有效,PWM3 占空比有效期间输出高电平, 其余时间输出低电平 1: 低电平有效,PWM3 占空比有效期间输出低电平, 其余时间输出高电平 PWM3 时钟选择位 00: 系统时钟 /1 01: 系统时钟 /8 10: 系统时钟 /64 11: 系统时钟 /256 PWM3 故障检测使能位 0: 故障检测功能禁止 1: 故障检测功能允许, 比较器 1 的输出信号作为 PWM3 的故障检测输入信号, 如果检测到比较器 1 的输出变高, 将立即关闭 PWM 输出, 当比较器输出变低后, 不会立即恢复输出, 需要与 PWM3 周期溢出信号同步, 然后 PWM3 才会恢复输出 PWM3 中断允许位 ( 只有当 IEN1 中的 EPWM3 位也为 1 时, 功能才有效 ) 0: 禁止 PWM3 周期溢出中断 1: 允许 PWM3 周期溢出中断 PWM3 中断标志位 0:PWM3 周期计数器没有溢出 1:PWM3 周期计数器溢出, 由硬件置 1 PWM3 输出控制位 0:PWM3 输出禁止, 用作 I/O 功能注 : 如果此位为 0 而 PWM3EN = 1, 则整个 PWM3 模块仍然正常运行, 只是波形输出被禁止,PWM3 模块可以做一个定时器来使用 1:PWM3 输出允许注 : 如果此位设为 1 而 PWM3EN 位为 0, 则 PWM3 输出非选电平 ( 选为高电平有效则出低电平, 低电平有效则出高电平 ) 50

51 Table 7.35 PWM3 周期控制寄存器 Table 7.36 PWM3 占空比控制寄存器 AEH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWM3P PWM3P.7 PWM3P.6 PWM3P.5 PWM3P.4 PWM3P.3 PWM3P.2 PWM3P.1 PWM3P.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 PWM3P.7-0 P.7-0 PWM3 输出周期 = PWM3P * PWM 时钟当 PWM3P = 00H 时, 如果 PWM3S = 0,PWM3 引脚输出低当 PWM3P = 00H 时, 如果 PWM3S = 1,PWM3 引脚输出高 AFH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWM3D PWM3D.7 PWM3D.6 PWM3D.5 PWM3D.4 PWM3D.3 PWM3D.2 PWM3D.1 PWM3D.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7-0 PWM3D.7-0 PWM3 占空比控制, 控制 PWM 波形占空比的输出时间特殊情况 : 1. 当 PWM3P PWM3D 时如果 PWM3S = 0, 则 PWM3 引脚输出高电平如果 PWM3S = 1, 则 PWM3 引脚输出低电平 2. 当 PWM3D = 00H 时如果 PWM3S = 0, 则 PWM3 引脚输出低电平如果 PWM3S = 1, 则 PWM3 引脚输出高电平 注意事项 : 1. PWM3EN 位控制 PWM3 模块打开 2. PWM3OE 位能选择 P3.0 端口是作为 I/O 端口还是 PWM3 输出端口 3. 在 IEN1 寄存器中的 EPWM3 位能允许 / 禁止 PWM3 中断 4. 如果 PWM3EN 置 1,PWM3 模块打开, 但 PWM3OE = 0,PWM3 输出关闭, 此时 PWM3 模块可以用作一个 8bit timer, 此时如果中断控制寄存器 IEN1 的 EPWM3 位置 1,PWM3 中断照样发生 51

52 D 7E 7F 80 EF F PWM3 clock t PWM PWM3 output (PWM3S=0) PWM3 output (PWM3S=1) PWM3P = F0H PWM3D = 7FH PWM3 output duty cycle = 7FH x t PWM PWM3 output period cycle = F0H x t PWM PWM3 输出范例 A 0B 0C0D 0E 0F A 0B 0C0D PWM3 clock t PWM PWM3 output (PWM3S=0) Duty cycle = 06H X t PWM Write PWM3P = 0DH Write PWM3D = 07H Duty cycle Duty cycle = 06H X t PWM = 07H X t PWM Period cycle = 0FH X t PWM Period cycle = 0DH X t PWM PWM3 输出周期或者占空比改变范例 52

53 7.9 中断 特性 15 个中断源 4 层中断优先级 有 15 个中断源 :3 个外部中断 (INT0,INT1 和 INT4,INT4 共 8 个中断源 INT40-47 共享一个向量地址 ),4 个定时器中断 ( 定时器 0-3),1 个 EUART 中断, 系统时钟监控中断,1 个 SPI 中断,ADC 中断和 PWM3 中断, 电机控制 PWM 模块中断和 2 个模拟比较器中断 中断采用 4 级优先级结构, 为处理 15 个中断源提供了极大的灵活性 另外, 为 INT4 提供了 4 种外部中断触发方式, 可以通过寄存器选择 中断允许控制 任何一个中断源均可通过对寄存器 IEN0 和 IEN1 中相应的位置位或清零, 实现单独允许或禁止此中断功能 IEN0 寄存器中还包含了一个全局使能位 EA, 它可以禁止所有的中断 如果要打开某个中断源, 必须将 EA 控制位和 IEN0/1 中相应的控制位都设置为 1 在复位后, 所有中断允许位被清 0, 所有中断被禁止 Table 7.37 初级中断允许寄存器 A8H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IEN0 EA EADC ET2 ES ET1 EX1 ET0 EX0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 /PIN POR/WDT/LVR 位编号位符号说明 7 EA 6 EADC 5 ET2 4 ES 3 ET1 2 EX1 1 ET0 0 EX0 所有中断允许位 0: 禁止所有中断 1: 允许所有中断 ADC 中断允许位 0: 禁止 ADC 中断 1: 允许 ADC 中断 定时器 2 溢出中断允许位 0: 禁止定时器 2 溢出中断 1: 允许定时器 2 溢出中断 EUART 中断允许位 0: 禁止 EUART 中断 1: 允许 EUART 中断 定时器 1 溢出中断允许位 0: 禁止定时器 1 溢出中断 1: 允许定时器 1 溢出中断 外部中断 1 允许位 0: 禁止外部中断 1 1: 允许外部中断 1 定时器 0 溢出中断允许位 0: 禁止定时器 0 溢出中断 1: 允许定时器 0 溢出中断 外部中断 0 允许位 0: 禁止外部中断 0 1: 允许外部中断 0 53

54 Table 7.38 中断允许寄存器 1 A9H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IEN1 ESCM EPWM3 EMCM ET3 EX4 ECMP2 ECMP1 ESPI 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 注意 : 1. 打开外部中断 0/1/4 时, 相应的端口必须设置为输入状态 2. 若要打开 PWM 定时器中断,EPWM 位和 PWM 中断控制寄存器中的 PWMxIE(x = 0,1,2) 和 PWMPIE 相应中断允许位必须同时置 1 3. 若要打开外部中断 4,EX4 和 IENC 中的 EXS4x(x = 0-7) 相应位必须同时置 1 Table 7.39 中断通道允许寄存器 位编号位符号说明 7 ESCM 6 EPWM3 5 EMCM 4 ET3 3 EX4 2 ECMP2 1 ECMP1 0 ESPI SCM 中断允许位 0: 禁止 SCM 中断 1: 允许 SCM 中断 PWM3 中断允许位 0: 禁止 PWM3 中断 1: 允许 PWM3 中断 电机控制模块 MCM(Motor Motor Control Module)2 中断允许位 0: 禁止电机控制模块所有中断 1: 允许电机控制模块中断 ( 和 PWM0/1/2 中断独立允许控制位配合 ) 定时器 3 溢出中断允许位 0: 禁止定时器 3 溢出中断 1: 允许定时器 3 溢出中断 外部中断 4 允许位 0: 禁止外部中断 4 1: 允许外部中断 4 模拟比较器 1 中断允许位 0: 禁止模拟比较器 2 中断 1: 允许模拟比较器 2 中断 模拟比较器 0 中断允许位 0: 禁止模拟比较器 1 中断 1: 允许模拟比较器 1 中断 SPI 中断允许位 0: 禁止 SPI 中断 1: 允许 SPI 中断 BAH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IENC EXS47 EXS46 EXS45 EXS44 EXS43 EXS42 EXS41 EXS40 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 7-0 EXS4x x = 0-7 外部中断 4 通道选择位 (x = 0-7) 0: 禁止外部中断 4x 1: 允许外部中断 4x 54

55 中断标志 每个中断源都有自己的中断标志, 当产生中断时, 硬件会置起相应的标志位, 在中断汇总表中会列出中断标志位 外部中断 INT0/1 产生外部中断 INTx(x = 0,1) 时, 如果中断为边沿触发,CPU 在响应中断后, 标志 IEx(x = 0,1) 被硬件清零 ; 如果中断是电平触发, 外部中断源直接控制中断标志, 如果是高电平, 此标志位保持为 1, 否则清 0 外部中断 INT4 产生中断时,EXF1 寄存器中的 IF4x(x = 0-7) 标志位置位,INT4 共 8 个中断源共享一个中断向量地址, 标志位需要用户软件清除 但是如果 INT4 为电平触发时, 标志位不能被用户软件清除, 只受 INT4 中断源引脚所接信号电平直接控制 注意尽管外部中断被禁止, 但是中断标志位仍然受外部中断源输入状态变化而改变, 除非该输入引脚配置为其它功能 定时器 0/1 中断, 当定时器中断产生, 中断标志位产生, 当进入中断服务程序后中断标志位由硬件清除 定时器 2 中断,T2CON 寄存器的 TF2 或 EXF2 标志位置 1 时, 产生定时器 2 中断,CPU 在响应中断后, 标志不能被硬件自动清 0 事实上, 中断服务程序必须决定是由 TF2 或是 EXF2 产生中断, 因此标志必须由软件清 0 定时器 3 中断, 定时器 3 的计数器溢出时,T3CON 寄存器的 TF3 中断标志位置 1, 产生定时器 3 中断请求,CPU 在响应中断后, TF3 标志被硬件自动清 0 串行通讯中断,SCON 寄存器的标志 RI 或 TI 置 1 时, 产生 EUART 中断,CPU 在响应中断后, 标志不会被硬件自动清 0 事实上, 中断服务程序必须判断是收中断还是发中断, 标志必须由软件清零 系统时钟监控中断,SCM 寄存器的 SCMIF 标志位置 1 时, 产生 SCM 中断, 标志由硬件清 0 SPI 通讯中断,SPSTA 寄存器的 SPIF 标志位或 MODF 标志位置 1 时, 产生 SPI 中断, 标志必须由软件清 0 ADC 中断,ADCON 寄存器的 ADCIF 标志位置 1 时, 产生 ADC 中断 在每次转换中, 如果转换结果小于比较值时,ADCIF 标志位为 0; 如果转换结果大于等于比较值时, 上限比较标志位 ADGIF 标志位置 1, 同理, 还有下限比较标志位 因此 ADC 模块有 3 个中断标志位, 分别有各自独立的中断允许位, 中断标志必须由软件清 0 电机控制模块 MCM 中断, 当 PWMxIF0-2 置起, 中断产生, 中断标志位由软件清零 (PWM 中断标志请参考 PWM 电机模块部分 ) PWM3 中断,PWM3 是一个独立的 8bit PWM 模块, 独占一个中断矢量入口地址, 此标志位在中断响应时由硬件清 0 Table 7.40 外部中断标志寄存器 88H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 3,1 2,0 IEx (x = 0,1) ITx (x = 0,1) 外部中断 x 请求标志 0: 无中断挂起 1: 中断挂起 外部中断 x 触发方式 0: 低电平触发 1: 下降沿触发 55

56 Table 7.41 外部中断 4 设置寄存器 Table 7.42 外部中断 4 标志寄存器 87H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PCON SMOD SSTAT IT41 IT40 GF1 GF0 PD IDL 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 7 SMOD 6 SSTAT 5-4 IT4 [1:0] 3-2 GF[1:0] 1 PD 0 IDL UART 波特率加倍器 UART SCON[7:5] 功能选择 外部中断 4 触发模式位 00: 低电平触发 01: 下降沿触发 10: 上升沿触发 11: 双沿触发 IT4[1:0] 控制外部中断 4 各中断源采用同一触发方式 用于软件的通用标志位 掉电模式控制位 空闲模式控制位 D8H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 EXF1 IF47 IF46 IF45 IF44 IF43 IF42 IF41 IF40 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 7-0 IF4x (x = 0-7) 外部中断 4 请求标志,IF4x 须被软件清 0 0: 无中断请求 1: 有中断请求 56

57 中断向量 当一个中断产生时, 程序计数器内容被压栈, 相应的中断向量地址被载入程序计数器 中断向量的地址在中断摘要表中详细列出 中断优先级 每个中断源都可被单独设置为 4 个中断优先级之一, 分别通过清 0 或置 1 IPL0,IPH0,IPL1,IPH1 中相应位来实现 但 OVL 不可屏蔽中断无需 IPH/IPL 控制, 在所有中断源中享有最高优先级 ( 除复位外 ) 中断优先级服务程序描述如下 : 响应一个中断服务程序时, 可响应更高优先级的中断, 但不能响应同优先级或低优先级的另一个中断 响应最高级中断服务程序时, 不响应其它任何中断 如果不同中断优先级的中断源同时申请中断时, 响应较高优先级的中断申请 如果同优先级的中断源在指令周期开始时同时申请中断, 那么内部查询序列确定中断请求响应顺序 IPHx 优先位 IPLx Table 7.43 中断优先级控制寄存器 中断优先级 中断优先级 0 0 等级 0( 最低优先级 ) 0 1 等级 等级 等级 3( 最高优先级 ) B8H,B4H B4H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IPL0 - PADCL PT2L PSL PT1L PX1L PT0L PX0L IPH0 - PADCH PT2H PSH PT1H PX1H PT0H PX0H 读 / 写 - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 B9H,B5H B5H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 IPL1 PSCML PPWML PMCML PT3L PX4L PCMP2L PCMP1L PSPIL IPH1 PSCMH PPWMH PMCMH PT3H PX4H PCMP2H PCMP1H PSPIH 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 - PxxxL/H 相应中断源 xxx 优先级选择 57

58 中断处理 中断标志在每个机器周期都会被采样获取 所有中断都在时钟的上升沿被采样 如果一个标志被置起, 那么 CPU 捕获到后中断系统调用一个长转移指令 (LCALL) 调用其中断服务程序, 但由硬件产生的 LCALL 会被下列任何条件阻止 : 同级或更高级的优先级中断在运行中 当前的周期不是执行中指令的最后一个周期 换言之, 正在执行的指令完成前, 任何中断请求都得不到响应 正在执行的是一条 RETI 或者访问专用寄存器 IEN0\1 或是 IPL\H 的指令 换言之, 在 RETI 或者读写 IEN0\1 或是 IPL\H 之后, 不会马上响应中断请求, 而至少在执行一条其它指令之后才会响应 注意 : 因为更改优先级通常需要 2 条指令, 在此期间, 建议关闭相应的中断以避免在修改优先级过程中产生中断 如果当模块状态改变而中断标志不再有效时, 将不会响应此中断 每一个轮询周期只查询有效的中断请求 轮询周期 /LCALL 次序如下图所示 : C1 C2 C3 C3~Cn Cn~Cn+7 Cn+8 Interrupt Polled Interrupt Signal Generated Interrupt Pending Long Call to Interrupt Vector Service Interrupt service Interrupt Latched 中断响应时间 由硬件产生的 LCALL 把程序计数器中的内容压入堆栈 ( 但不保存 PSW), 然后将相应中断源的向量地址 ( 参照中断向量表 ) 存入程序计数器 中断服务程序从指定地址开始, 到 RETI 指令结束 RETI 指令通知处理器中断服务程序结束, 然后把堆栈顶部两字节弹出, 重载入程序计数器中, 执行完中断服务程序后程序回到原来停止的地方 RET 指令也可以返回到原来地址继续执行, 但是中断优先级控制系统仍然认为一个同一优先级的中断被响应, 这种情况下, 当同一优先级或低优先级中断将不会被响应 中断响应时间 如果检测出一个中断, 这个中断的请求标志位就会在被检测后的每个机器周期被置起 内部电路会保持这个值直到下一个机器周期,CPU 会在第三个机器周期产生中断 如果响应有效, 条件允许, 在下一个指令执行的时候硬件 LCALL 指令将调用请求中断的服务程序, 否则中断被挂起 LCALL 指令调用程序需要 7 个机器周期 因而, 从外部中断请求到开始执行中断程序中的第一条指令至少需要 3+7 个完整的机器周期 当请求因前述的的三个情况受阻时, 中断响应时间会加长 如果同级或更高优先级的中断正在执行, 额外的等待时间取决于正执行的中断服务程序的长度 如果正在执行的指令还没有进行到最后一个周期, 假如正在执行 RETI 指令, 则完成正在执行的 RETI 指令, 需要 8 个周期, 加上为完成下一条指令所需的最长时间 20 个机器周期 ( 如果该指令是 16 位操作数的 DIV,MUL 指令 ), 若系统中只有一个中断源, 再加上 LCALL 调用指令 7 个机器周期, 则最长的响应时间是 个机器周期 所以, 中断响应时间一般大于 10 个机器周期小于 37 个机器周期 58

59 外部中断输入 有 3 个外部中断输入 外部中断 0-1 分别有一个独立的中断源, 外部中断 4 有 8 个中断源共用一个中断矢量地址 外部中断 0/1 可以通过设置 TCON 寄存器的 IT1,IT0 位来选择是电平触发或是边沿触发 当 ITx = 0(x = 0,1) 时, 外部中断 INTx (x = 0,1) 引脚为低电平触发 ; 当 ITx(x = 0,1)= 1, 外部中断 INTx(x = 0,1) 为沿触发, 在这个模式中, 如果采样到一个系统时钟周期内 INTx(x = 0,1) 引脚上采样为高电平而下个系统时钟周期采样为低电平,TCON 寄存器的中断请求标志位置 1, 发出一个中断请求 由于外部中断引脚每个机器周期采样一次, 输入高或低电平应当保持至少 1 个机器周期以确保能够被正确采样到 如果外部中断为下降沿触发, 外部中断源应当将中断脚至少保持 1 个机器周期高电平, 然后至少保持 1 个机器周期低电平 这样就确保了边沿能够被检测到以使 IEx 置 1 当调用中断服务程序后,CPU 自动将 IEx 清 0 如果外部中断为低电平触发, 外部中断源必须一直保持请求有效, 直到产生所请求的中断为止, 此过程需要 2 个系统时钟周期 如果中断服务完成后而外部中断仍旧维持, 则会产生下一次中断 当中断为电平触发时不必清除中断标志 IEx(x = 0,1), 因为中断只与输入口电平有关 外部中断 4 除了具有更多的中断触发方式外, 与外部中断 0,1 操作类似 当 进入空闲或是掉电模式, 中断会唤醒处理器继续工作, 详见电源管理章节 注意 : 外部中断 0-1 的中断标志位在执行中断服务程序时被自动硬件清 0, 但外部中断 4 标志位 IF40-47 必须要软件清 0 >1 machine Cycle High-Level Threshold Low-Level Threshold >1 machine Cycle Low-Level Threshold >1 machine Cycle 外部中断探测 中断汇总中断源 向量地址 允许位 标志位 轮询优先级 中断号 (c 语言 ) Reset 0000H - - 0( 最高级 ) INT0 0003H EX0 IE0 1 0 Timer0 000BH ET0 TF0 2 1 INT1 0013H EX1 IE1 3 2 Timer1 001BH ET1 TF1 4 3 EUART 0023H ES RI+TI 5 4 Timer2 002BH ET2 TF2+EXF2 6 5 ADC 0033H EADC ADCIF/ADGIF/ADLIF 7 6 SPI 003BH ESPI SPIF 8 7 CMP1 0043H ECMP1 C1IF 9 8 CMP2 004BH ECMP2 C2IF 10 9 INT4 0053H EX4+IENC IF4X Timer3 005BH ET3 TF MCM 0063H EMCM+PWMP/0/1/2IE PWMP/0/1/2IF PWM3 006BH EPWM3+PWM3IE PWM3IF SCM 0073H ESCM SCMIF

60 8. 增强功能 8.1 电机控制模块 MCM(Motor Motor Control Module)PWM0/1/ 特性 重要寄存器受保护寄存器 PWMRLDEN 控制 16 位时基计数器 三种时基计数模式 : 边沿对齐计数 中心对齐计数和单次计数模式 两种波形输出模式 : 互补模式与独立模式 提供 PWM 周期匹配 归零匹配和占空比比较匹配中断 3 路互补 PWM 输出或 6 路独立 PWM 输出, 输出极性可选择 提供故障检测功能可紧急关闭 PWM 输出 提供寄存器重载使能位以保证寄存器重载同步 4 档预分频 / 后分频功能 可切换手动控制 PWM 输出 可选择自动触发 Timer 或 ADC 转换 内建一个 16 位电机控制 PWM 模块 PWM 模块由时基模块 (PWM Time Base Block) 波形发生模块(Wave Generator) 死区 & 极性控制模块 (Dead&Polarity Logic) 故障检测(Fault Detect Logic) 以及输出控制模块 (Output Control Logic) 组成, 如图 所示 时基模块中通过一个 16 位计数器 (PWM Counter) 对 PWM 时钟 (PWM Clock) 计数, 用该计数器的值与周期寄存器和 0 比较以产生周期匹配信号与归零信号 与占空比寄存器比较以产生占空比匹配信号, 结合波形发生模块产生原始的六路 PWM 信号 Px_O/Px1_O, 该原始 PWM 信号经过死区 & 极性控制模块后产生带死区和极性的 PWM 信号 Px_D/Px1_D, 最后的输出控制模块和故障检测模块决定是否将 Px_D/Px1_D 信号输出至 PWM 引脚 PWMx/PWMx1 上 System Clock Pre-Counter Logic PTCON[PTMOD] PWM Counter Period Compare Gated&Scaled Reload Signal Period Match Zero Match PWM Time Base Block BUFFER PWMP Post Counter PTCON[PTCLK] BUFFER Scaled Period Match Scaled Zero Match PTCON[POSTPS] 16 PWM0/01 Wave Generator Duty Compare Duty Compare PWM1/11 Wave Generator PWM2/21 Wave Generator Interrupt Control BUFFER PWMP PWM0D/PWM01D BUFFER 6 Duty Match P0_O P01_O P1_O P11_O P2_O P21_O PWMINT1/2/3 ADC Triger Logic 图 PWM 模块简图 x=0,1,2 PWMCON2[PMODx] PWMCON1[PWMx/x1S] PWM0/01 Dead &Polarity Logic PWM1/11 Dead &Polarity Logic PWM2/21 Dead &Polarity Logic ADC Trigger Signal TIM Triger Logic BUFFER PWMDT0&1 P0_D P01_D P1_D P11_D P2_D P21_D FLTCON Timer Trigger Signal Fault Detect Logic Output Control Logic Output of Comparator PWMOE Fault_Signal PMANUALCON1/2 PWMCON2[OSYNC] FLT PWM0 PWM01 PWM1 PWM11 PWM2 PWM21 60

61 8.1.2 寄存器 MCM 模块所使用寄存器如下 : PWM 计数器时钟 ( 时基 ) 设置 PWM 控制寄存器 PWM 输出控制 PWM 死区控制 功能名称寄存器描述 PTCON 设置 PWM 时基的预分频 PWM 模块中控制信号的后分频以及 PWM 计数器的运行模式 PWMCON1 设置 PWM 波形的输出极性及输出模式 ( 互补 / 独立 ) PWMCON2 PWMOE PMANUALCON1 PMANUALCON2 PWMDT0L PWMDT0H PWMDT1L PWMDT1H PWM 触发事件的使能以及死区方式选择 设置 PWM 引脚输出 PWM 模块产生的信号或者作为普通 IO 口 设置 PWM 模块输出 PWM 波形或直接输出 PMANUALCON2 中定义的电平 定义 PWM 模块直接输出的电平 故障检测保护 FLTCON 设置故障保护功能 PWM 中断 PWMINTEN PWMINTF ( 注 1) 设置 PWM 原始波形上升沿触发死区时间 ( 注 1) 设置 PWM 原始波形下降沿触发死区时间 PWM 中断使能位控制 PWM 中断标志位 寄存器重载使能控制 PWMRLDEN 禁止 / 使能占空比寄存器 / 周期寄存器 /PWM 时基预分频的重载 PWM 周期寄存器 PWM 占空比寄存器 PWMPL PWMPH PWM0DL PWM0DH 16 位周期寄存器 16 位占空比寄存器, 用于产生通道 0 的原始 PWM 波形 PWM01DL 16 位占空比寄存器, 只在独立模式下用到, 用于产生独立模式下通道 01 PWM01DH ( 注 1) 的原始 PWM 波形 PWM1DL PWM1DH 16 位占空比寄存器用于产生通道 1 的原始 PWM 波形 PWM11DL 16 位占空比寄存器, 只在独立模式下用到, 用于产生独立模式下通道 11 PWM11DH ( 注 1) 的原始 PWM 波形 PWM2DL PWM2DH 16 位占空比寄存器用于产生通道 2 的原始 PWM 波形 PWM21DL 16 位占空比寄存器, 只在独立模式下用到, 用于产生独立模式下通道 21 PWM21DH 的原始 PWM 波形 注 1 : 由于独立模式下不需要死区, 因此 PWM01DL/PWM01DH 和 PWMDT0L/PWMDT0H 共用寄存器地址, PWM11DL/PWM11DH 和 PWMDT1L/PWMDT1H 共用寄存器地址 61

62 Table 8.1 PWM 时基控制寄存器 CFH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PTCON - - PTMOD1 PTMOD0 PTCLK1 PTCLK0 POSTPS1 POSTPS0 读 / 写 - - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 5-4 PTMOD[1:0] 3-2 PTCLK[1:0] PWM0/1/2 时基模块中 PWM 计数器工作模式选择位段 00: 边沿对齐计数模式, 在此模式下, 时基计数器只会发生归零匹配 01: 中心对齐计数模式, 在此模式下, 时基计数器会发生归零匹配和周期匹配 1x: 单次计数模式, 在此模式下, 时基计数器只会发生归零匹配 PWM 时基预分频系数选择位段 00:PWM 计数器时钟 = 系统时钟 /1 01:PWM 计数器时钟 = 系统时钟 /2 10:PWM 计数器时钟 = 系统时钟 /4 11:PWM 计数器时钟 = 系统时钟 /8 1-0 POSTPS[1:0] 后分频系数选择位段 00: 无后分频功能 01: 中断 重载信号与事件触发信号将 2 分频 10: 中断 重载信号与事件触发信号将 4 分频 11: 中断 重载信号与事件触发信号将 8 分频 Table 8.2 PWM 周期寄存器低位 DAH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWMPL PP.7 PP.6 PP.5 PP.4 PP.3 PP.2 PP.1 PP.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PP.7 - PP.0 PWM 周期控制寄存器低 8 位 Table 8.3 PWM 周期寄存器高位 DBH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWMPH PP.15 PP.14 PP.13 PP.12 PP.11 PP.10 PP.9 PP.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PP.15 - PP.8 PWM 周期控制寄存器高 8 位 62

63 Table 8.4 PWM 模块控制寄存器 1 D9H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWMCON1 POUTMOD - PWM21S PWM11S PWM01S PWM2S PWM1S PWM0S 读 / 写 读 / 写 - 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 POR/WDT/LVR 位编号 位符号 说明 7 POUTMOD 5 PWM21S 4 PWM11S 3 PWM01S 2 PWM2S 1 PWM1S 0 PWM0S PWM0/1/2 输出模式 ( 独立 / 互补 ) 控制位 0: 整个模块配置为 3 通道互补输出 1: 整个模块配置为 6 路独立输出 PWM21 输出有效电平 (Active Polar) 选择位 0:PWM21 占空比期间输出低电平, 其余时间输出高电平 1:PWM21 占空比期间输出高电平, 其余时间输出低电平 PWM11 输出有效电平 (Active Polar) 选择位 0:PWM11 占空比期间输出低电平, 其余时间输出高电平 1:PWM11 占空比期间输出高电平, 其余时间输出低电平 PWM01 输出有效电平 (Active Polar) 选择位 0:PWM01 占空比期间输出低电平, 其余时间输出高电平 1:PWM01 占空比期间输出高电平, 其余时间输出低电平 PWM2 输出有效电平 (Active Polar) 选择位 0:PWM2 占空比期间输出高电平, 其余时间输出低电平 1:PWM2 占空比期间输出低电平, 其余时间输出高电平 PWM1 输出有效电平 (Active Polar) 选择位 0:PWM1 占空比期间输出高电平, 其余时间输出低电平 1:PWM1 占空比期间输出低电平, 其余时间输出高电平 PWM0 输出有效电平 (Active Polar) 选择位 0:PWM0 占空比期间输出高电平, 其余时间输出低电平 1:PWM0 占空比期间输出低电平, 其余时间输出高电平 63

64 Table 8.5 PWM 模块控制寄存器 2 BFH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMCON2 - ZETIM PEAD ZEAD PDLDEN - DT1 DT0 读 / 写 - 读 / 写读 / 写读 / 写读 / 写 - 读 / 写读 / 写 POR/WDT/LVR 位编号位符号说明 6 ZETIM PWM 时基计数器启动 Timer2 使能位 0:PWM 模块不会触发启动 Timer2 1: 中心对齐模式下,PWM 时基计数器周期匹配时启动 Timer2 边沿对齐或单次模式下,PWM 时基计数器归零时刻启动 Timer2 (Timer2 工作在单次触发模式下, 上述设置才有效 ) 5 PEAD 4 ZEAD 3 PDLDEN 1-0 DT[1:0] PWM 时基计数器与周期寄存器匹配时刻启动 AD 转换使能位 ( 只在中心对齐模式下有效 ) 0:PWM 模块周期匹配时刻不会触发启动 AD 1:PWM 时基计数器与周期寄存器匹配时刻启动 AD (ADC 的 ADON 和 PWMTRGEN 位置 1 的情况下 ) PWM 时基计数器归 0 时刻启动 AD 转换使能位 0:PWM 模块归 0 时刻不会触发启动 AD 1:PWM 时基计数器归 0 时刻启动 AD (ADC 的 ADON 和 PWMTRGEN 位置 1 的情况下 ) PWM 计数器周期匹配时重载占空比死区寄存器使能位 ( 只在中心对齐模式下有效 ) 0: 周期匹配时刻不允许重载占空比寄存器和死区寄存器以及死区方式选择位段 DT[1:0] 1: 周期匹配时刻允许重载占空比寄存器和死区寄存器以及死区方式选择位段 DT[1:0] 注 :1. 无论寄存器如何设置, 周期匹配时不会重载 PWM 周期寄存器 2. 归 0 匹配时会自动重载周期寄存器 占空比寄存器 死区寄存器以及死区方式选择位段 DT[1:0], 此重载动作不受任何寄存器控制 死区寄存器方式选择位段 1 00:PWM0/1/2 的前死区由 PWMDT0 设置 ; PWM0/1/2 的后死区由 PWMDT1 设置 01:PWM1/2 的前死区和后死区都由寄存器 PWMDT0 设置 ; PWM0 的前死区和后死区都由寄存器 PWMDT1 设置 10:PWM0/2 的前死区和后死区都由寄存器 PWMDT0 设置 ; PWM1 的前死区和后死区都由寄存器 PWMDT1 设置 11:PWM0/1 的前死区和后死区都由寄存器 PWMDT0 设置 ; PWM2 的前死区和后死区都由寄存器 PWMDT1 设置 注 1:DT[1:0] 只在互补模式下有效, 因为在独立模式下无死区 PWM0/1/2 的前死区只会影响 PWM0 PWM1 PWM2 的输出波形 ;PWM0/1/2 的后死区只会影响 PWM01 PWM11 PWM21 的输出波形, 具体参见死区章节 64

65 Table 8.6 PWM0 占空比控制寄存器低位 DCH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM0DL PD0.7 PD0.6 PD0.5 PD0.4 PD0.3 PD0.2 PD0.1 PD0.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD0.7.7-PD PD0.0 PWM0 占空比寄存器低 8 位 Table 8.7 PWM0 占空比控制寄存器高位 DDH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM0DH PD0.15 PD0.14 PD0.13 PD0.12 PD0.11 PD0.10 PD0.9 PD0.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD0 D PD0 D0.8 PWM0 占空比寄存器高 8 位 Table 8.8 PWM1 占空比控制寄存器低位 DEH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM1DL PD1.7 PD1.6 PD1.5 PD1.4 PD1.3 PD1.2 PD1.1 PD1.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD1.7- D1.7-PD1.0 D1.0 PWM1 占空比寄存器低 8 位 Table 8.9 PWM1 占空比控制寄存器高位 DFH 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM1DH PD1.15 PD1.14 PD1.13 PD1.12 PD1.11 PD1.10 PD1.9 PD1.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD1.15- D1.15-PD1.8 D1.8 PWM1 占空比寄存器高 8 位 Table 8.10 PWM2 占空比控制寄存器低位 D2H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM2DL PD2.7 PD2.6 PD2.5 PD2.4 PD2.3 PD2.2 PD2.1 PD2.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD2.7- D2.7-PD2 D2.0 PWM2 占空比寄存器低 8 位 65

66 Table 8.11 PWM2 占空比控制寄存器高位 D3H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM2DH PD2.15 PD2.14 PD2.13 PD2.12 PD2.11 PD2.10 PD2.9 PD2.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD2 D PD2 D2.8 PWM2 占空比寄存器高 8 位 Table 8.12 PWM01 占空比控制寄存器低位 D4H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM01DL PD01.7 PD01.6 PD01.5 PD01.4 PD01.3 PD01.2 PD01.1 PD01.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD01 D PD01.0 PWM01 占空比寄存器低 8 位 Table 8.13 PWM01 占空比控制寄存器高位 D5H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM01DH PD01.15 PD01.14 PD01.13 PD01.12 PD01.11 PD01.10 PD01.9 PD01.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD01.15-PD01.8 PWM01 占空比寄存器高 8 位 Table 8.14 PWM11 占空比控制寄存器低位 D6H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM11DL PD11.7 PD11.6 PD11.5 PD11.4 PD11.3 PD11.2 PD11.1 PD11.0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD11.7-PD11.0 PD11.0 PWM11 占空比寄存器低 8 位 Table 8.15 PWM11 占空比控制寄存器高位 D7H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 PWM11DH PD11.15 PD11.14 PD11.13 PD11.12 PD11.11 PD11.10 PD11.9 PD11.8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-0 PD11.15-PD11.8 PD11.8 PWM11 占空比寄存器高 8 位 66

67 Table 8.16 PWM21 占空比控制寄存器低位 Table 8.17 PWM21 占空比控制寄存器高位 Table 8.18 PWM 输出使能寄存器 F9H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWM21DL PD21.7 PD21.6 PD21.5 PD21.4 PD21.3 PD21.2 PD21.1 PD21.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 PD21.7- PD21.0 PWM21 占空比寄存器低 8 位 FAH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWM21DH PD21.15 PD21.14 PD21.13 PD21.12 PD21.11 PD21.10 PD21.9 PD21.8 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 PD21.15-PD21.8 PD21.8 PWM21 占空比寄存器高 8 位 EFH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMOE PWMEN - PWM21OE PWM11OE PWM01OE PWM2OE PWM1OE PWM0OE 读 / 写读 / 写 - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 PWMEN 5 PWM21OE 4 PWM11OE 3 PWM01OE 2 PWM2OE 1 PWM1OE 0 PWM0OE MCM 时基使能控制位 ( 注 :PWM0/1/2 共用一个时基 ) 0: 关闭 MCM(PWM0/1/2) 时基 1: 打开 MCM(PWM0/1/2) 时基 PWM21 输出使能位 0:PWM21 引脚作为普通 I/O 口 1:PWM21 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT21 定义的电平 PWM11 输出使能位 0:PWM11 引脚作为普通 I/O 口 1:PWM11 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT11 定义的电平 PWM01 输出使能位 0:PWM01 引脚作为普通 I/O 口 1:PWM01 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT01 定义的电平 PWM2 输出使能位 0:PWM2 引脚作为普通 I/O 口 1:PWM2 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT2 定义的电平 PWM1 输出使能位 0:PWM1 引脚作为普通 I/O 口 1:PWM1 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT1 定义的电平 PWM0 输出使能位 0:PWM0 引脚作为普通 I/O 口 1:PWM0 引脚作为 PWM 输出口, 输出 PWM 波形或 POUT0 定义的电平 67

68 Table 8.19 PWM0/1/2 手动输出设置寄存器 1 Table 8.20 PWM0/1/2 手动输出设置寄存器 2 注意 : 必须先写 PMANUALCON2 寄存器, 后写 PMANUALCON1 寄存器 B6H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PMANUALCON1 - - PMANUAL 21 PMANUAL 11 PMANUAL 01 PMANUAL 2 PMANUAL 1 PMANUAL 0 读 / 写 - - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 PMANUALx x = 0-2 PMANUALx1 x = 0-2 PWMx 口输出控制位 ( 只有当 PWMxOE = 1 时有效, 修改立即生效 ) 0:PWMx 口输出 PWM 波形 1:PWMx 口输出由 PMANUALCON2 寄存器中的 POUTx 位控制 PWMx1 口输出控制位 ( 只有当 PWMx1OE = 1 时有效, 修改立即生效 ) 0:PWMx1 口输出 PWM 波形 1:PWMx1 口输出由 PMANUALCON2 寄存器中的 POUTx1 位控制 B7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PMANUALCON2 - - POUT21 POUT11 POUT01 POUT2 POUT1 POUT0 读 / 写 - - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 POUTx1 x = 0-2 POUTx x = 0-2 PMANUALx1 = 1 时, 决定 PWMx1 口的输出电平 ( 修改立即生效 ) 0: 输出 0 1: 输出 1 PMANUALx = 1 时, 决定 PWMx 口的输出电平 ( 修改立即生效 ) 0: 输出 0 1: 输出 1 68

69 Table 8.21 PWM0/1/2 故障检测保护寄存器 D1H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 FLTCON FLT1EN FLT1SEL FLT2EN FLT2S FLT2DEB1 FLT2DEB0 FLTM FLTSTAT 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 FLT1EN 6 FLT1SEL 5 FLT2EN 4 FLT2S 3-2 FLT2DEB[1:0] 故障检测 1 功能控制位 ( 注 1) 0: 故障检测 1 功能禁止 1: 故障检测 1 功能打开, 输入源可以选择比较器 1 或比较器 2 故障检测 1 输入源选择控制位 0: 比较器 1 滤波后的输出作为 PWM 故障检测 1 输入源, 高电平有效 1: 比较器 2 滤波后的输出作为 PWM 故障检测 1 输入源, 高电平有效 故障检测 2 功能控制位 ( 注 1) 0: 故障检测 2 功能禁止 1: 故障检测 2 功能打开, 输入源为 FLT 引脚 故障检测 2 有效电平选择位 0: 故障检测 2 FLT 输入高电平有效 1: 故障检测 2 FLT 输入低电平有效 故障检测 2 输入滤波参数选择 00: 无滤波 01: 滤波时间常数为 1us 10: 滤波时间常数为 4us 11: 滤波时间常数为 16us 注 : 上述滤波常数时间不是精确值, 仅供参考 1 FLTM 0 FLTSTAT 检测功能模式选择 0: 锁存模式, 当检测到故障输入有效,FLTSTAT 被硬件置 1,PWM 将立即停止输出, 当故障输入变为无效时状态保持不变, 只有当 FLTSTAT 被软件清零后, PWM 波形才会在 PWM 时基计数器归 0 时刻恢复输出 ( 当故障输入一直有效时 FLTSTAT 无法被软件清除 ) 1: 逐次模式,PWM 输出直接由故障检测输入端来控制, 如果故障输入有效, FLTSTAT 被硬件置 1, 立即关闭 PWM 输出 如果故障输入变为无效,FLTSTAT 自动清 0,PWM0/1/2 波形将在 PWM 时基计数器归 0 时刻自动恢复输出 故障检测标志位 0:PWM0/1/2 模块处于正常输出状态 1: 出现过流,PWM0/1/2 模块处于停止输出状态, 如果在锁存模式, 可软件清 0, 恢复 PWM 输出 注 1: 故障检测输入 1 和 2 可同时打开, 任一信号有效都会关闭 PWM0/1/2 模块输出 69

70 Table 8.22 PWM 中断使能控制寄存器 BEH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMINTEN PWMPIE PWMZIE PTDD2IE PTUD2IE PTDD1IE PTUD1IE PTDD0IE PTUD0IE 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 PWMPIE 6 PWMZIE 5 PTDD2IE 4 PTUD2IE 3 PTDD1IE 2 PTUD1IE 1 PTDD0IE 0 PTUD0IE PWM 时基周期匹配中断允许位 ( 只在中心对齐模式下有效 ) 0: 禁止 PWM 时基周期匹配中断 1: 允许 PWM 时基周期匹配中断 PWM 时基归零中断允许位 0: 禁止 PWM 时基归零中断 1: 允许 PWM 时基归零中断 PWM 时基计数器减计数时与占空比寄存器 PWM2DL/H 匹配时中断使能位 ( 只在中心对齐模式下有效 ) 0: 禁止 PWM 计数器减计数时与 PWM2DL/H 匹配时触发中断 1: 允许 PWM 计数器减计数时与 PWM2DL/H 匹配时触发中断 PWM 时基计数器增计数时与占空比寄存器 PWM2DL/H 匹配时中断使能位 0: 禁止 PWM 计数器增计数时与 PWM2DL/H 匹配时触发中断 1: 允许 PWM 计数器增计数时与 PWM2DL/H 匹配时触发中断 PWM 时基计数器减计数时与占空比寄存器 PWM1DL/H 匹配时中断使能位 ( 只在中心对齐模式下有效 ) 0: 禁止 PWM 计数器减计数时与 PWM1DL/H 匹配时触发中断 1: 允许 PWM 计数器减计数时与 PWM1DL/H 匹配时触发中断 PWM 时基计数器增计数时与占空比寄存器 PWM1DL/H 匹配时中断使能位 0: 禁止 PWM 计数器增计数时与 PWM1DL/H 匹配时触发中断 1: 允许 PWM 计数器增计数时与 PWM1DL/H 匹配时触发中断 PWM 时基计数器减计数时与占空比寄存器 PWM0DL/H 匹配时中断使能位 ( 只在中心对齐模式下有效 ) 0: 禁止 PWM 计数器减计数时与 PWM0DL/H 匹配时触发中断 1: 允许 PWM 计数器减计数时与 PWM0DL/H 匹配时触发中断 PWM 时基计数器增计数时与占空比寄存器 PWM0DL/H 匹配时中断使能位 0: 禁止 PWM 计数器增计数时与 PWM0DL/H 匹配时触发中断 1: 允许 PWM 计数器增计数时与 PWM0DL/H 匹配时触发中断 70

71 Table 8.23 PWM 中断标志寄存器 注意 : 1. 即使 PWM 中断允许位为 0, 中断标志位也会置 1, 但中断不会响应 E8H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMINTF PWMPIF PWMZIF PTDD2IF PTUD2IF PTDD1IF PTUD1IF PTDD0IF PTUD0IF 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 2. PTDDxIF 置 1 时, 硬件会自动将 PTUDxIF 清零 ; 同样,PTUDxIF 置 1 时, 硬件会自动将 PTDDxIF 清零 ; 因此通过判断这两个标志位可以判断目前 PWM 波形处在有效状态还是无效状态 Table 8.24 PWM 死区控制寄存器 0 的低位 位编号位符号说明 7 PWMPIF 6 PWMZIF 5 PTDD2IF 4 PTUD2IF 3 PTDD1IF 2 PTUD1IF 1 PTDD0IF 0 PTUD0IF PWM 时基周期匹配中断标志位 ( 只在中心对齐模式下有效 ) 0: 无 PWM 周期匹配中断 1: 发生 PWM 周期匹配中断 PWM 时基归零中断标志位 0: 无 PWM 时基归零中断 1: 发生 PWM 时基归零中断 PWM 时基计数器减计数时与占空比寄存器 PWM2DL/H 匹配时中断标志位 ( 只在中心对齐模式下有效 ) 0: 未发生中断或发生过但被 PTUD2IF 信号清 0. 1: 发生中断 PWM 时基计数器增计数时与占空比寄存器 PWM2DL/H 匹配时中断标志位 0: 未发生中断或发生过但被 PTDD2IF 信号清 0. 1: 发生中断 PWM 时基计数器减计数时与占空比寄存器 PWM1DL/H 匹配时中断标志位 ( 只在中心对齐模式下有效 ) 0: 未发生中断或发生过但被 PTUD1IF 信号清 0. 1: 发生中断 PWM 时基计数器增计数时与占空比寄存器 PWM1DL/H 匹配时中断标志位 0: 未发生中断或发生过但被 PTDD1IF 信号清 0. 1: 发生中断 PWM 时基计数器减计数时与占空比寄存器 PWM0DL/H 匹配时中断标志位 ( 只在中心对齐模式下有效 ) 0: 未发生中断或发生过但被 PTUD0IF 信号清 0. 1: 发生中断 PWM 时基计数器增计数时与占空比寄存器 PWM0DL/H 匹配时中断标志位 0: 未发生中断或发生过但被 PTDD0IF 信号清 0. 1: 发生中断 D4H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMDT0L DT0.7 DT0.6 DT0.5 DT0.4 DT0.3 DT0.2 DT0.1 DT0.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 DT0.7-DT0.0 DT0.0 PWM 死区 0 控制寄存器低位 71

72 Table 8.25 PWM 死区控制寄存器 0 的高位 Table 8.26 PWM 死区控制寄存器 1 的低位 Table 8.27 PWM 死区控制寄存器 1 的高位 Table 8.28 PWM 定时器锁定寄存器 D5H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMDT0H DT0.11 DT0.10 DT0.9 DT0.8 读 / 写 读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 3-0 DT0.11-DT0.8 DT0.8 PWM 死区 0 控制寄存器高位 D6H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMDT1L DT1.7 DT1.6 DT1.5 DT1.4 DT1.3 DT1.2 DT1.1 DT1.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 DT1.7-DT1.0 DT1.0 PWM 死区 1 控制寄存器低位 D7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMDT1H DT1.11 DT1.10 DT1.9 DT1.8 读 / 写 读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 3-0 DT1.11-DT1.8 DT1.8 PWM 死区 1 控制寄存器高位 E7H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PWMRLDEN RLDEN.7 RLDEN.6 RLDEN.5 RLDEN.4 RLDEN.3 RLDEN.2 RLDEN.1 RLDEN.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 RLDEN.7-0 寄存器修改和重载控制寄存器 0x55: 允许软件对模块寄存器的修改 0xAA: 允许模块带缓冲的寄存器的重载注 : 1. PWM 模块的寄存器, 除了中断标志寄存器 PWMINTF 和手动控制寄存器 PMANUALCON2 外, 其它寄存器的修改有限制条件, 只有当 PWMRLDEN = 0x55 时才允许软件修改, 否则修改无效 2. PWM 模块中有一些寄存器带有缓冲寄存器, 包括占空比寄存器 周期寄存器和 PWM 时钟预分频寄存器位段 PTCLK[1:0] 死区寄存器 以及死区模式选择位段 DT[1:0] 这些寄存器在软件修改后不会立即生效, 只有在归零或周期溢出时硬件重载, 才会真正生效 是否允许这些寄存器重载同样受控制, 只有当 PWMRLDEN = 0xAA 时才允许重载 72

73 8.1.3 PWM0/1/2 时基模块 (PWM Time Base Block) PWM 模块中的时基模块 (Time Base Block) 主要由一个 16 位的计数器结合一个预分频器和一个后分频器组成 如图 所示, 波形发生器 (Wave Generator) 用时基模块中 16 位计数器的值与占空比寄存器比较并结合死区 / 极性逻辑 (Dead&Polarity Logic) 和输出控制逻辑 (Output Control) 最终产生 PWM 波形 图 给出了时基模块的逻辑简图 PWM Time Base Block PTMOD1/0 PWMEN Clock Control PWM Clock Zero Detection Zero Match System Clock Pre-Counter 1:1,1:2,1:4,1:8 16-Bit PWM Counter Reset Signal Dir Signal PWM Counter Control BUFFER PTCON[PTCLK] Scaled Zero Match Scaled Period Match Comparator BUFFER PWMP Gated Reload Period Match POSTPS Scaled Zero Match Post-Counter 1:1,1:2,1:4,1:8 Scaled Period Match PWMRLDEN==0xAA Duty Resgiters Reload Signal PWMCON2[PDLDEN] PWM 工作时钟 图 PWM 时基逻辑简图 PWM 时钟 (PWM Clock) 由系统时钟 (System Clock) 分频而来, 通过预分频器 (Pre-Counter) 由寄存器 PTCON 中的位段 [PTCLK1:PTCLK0] 决定 PWM 模块时钟是系统时钟的 1/1 1/2 1/4 或 1/8 分频 通过软件置位 / 清零 PWMOE 寄存器中的 PWMEN 位可以使能 / 禁止 PWM 时基模块 PWMEN 位从 0 置 1 时,PWM 计数器 (PWM Counter) 开始对 PWM 时钟从 0 开始向上计数 PWMEN 位清 0 时, 预分频计数器和 PWM 计数器都将清 0 注意 : 任何器件复位都将导致 PWM 时钟预分频计数器和 PWM 计数器清零 73

74 PWM 时基工作方式 PWM 时基中 16 位的 PWM 计数器有 3 种工作方式, 由 PTCON 寄存器中的 [PMOD1:PMOD0] 位段确定 边沿对齐计数模式 设置 PTCON 中 PMOD 位段为 00, 时基模块中的 PWM 计数器将工作在边沿对齐计数模式下 此模式下, 软件令 PWMEN 位置 1,PWM 计数器将从 0 开始向上计数, 直到与 PWM 周期寄存器 PWMPL/H 匹配, 然后 PWM 计数器复位为 0 并继续向上计数, 如此往复 PWM 计数器复位为 0 的时刻即归零时刻 (Zero Match) 软件令 PWMEN 位清 0,PWM Counter 将停止计数并在下一个系统时钟边沿复位为 0 并停止计数 如设置 PWMPL/H = 5, 则 PWM 计数器在此模式下的工作如图 所示 PWMP = Tsys PWM Counter PWM Clock PWMEN PWMP represents PWMPH:PWMPL Zero Match Zero Match 中心对齐计数模式 图 边沿对齐计数模式 设置 PTCON 中 PMOD 位段为 01, 时基模块中的 PWM 计数器将工作在中心对齐计数模式下 此模式下, 软件令 PWMEN 位置 1,PWM 计数器将从 0 开始向上计数, 直到与 PWM 周期寄存器 PWMPL/H 匹配, 然后 PWM 计数器开始向下计数直至归 0, 如此往复 PWM 计数器向下计数至零的时刻即归零时刻 (Zero Match),PWM 计数器与周期寄存器匹配时刻为周期匹配时刻 (Period Match) 软件令 PWMEN 位清 0,PWM Counter 将停止计数并在下一个系统时钟边沿复位为 0 并停止计数 如设置 PWMPL/H = 5, 则 PWM 计数器在此模式下的工作如图 所示 5 5 Tsys PWMP= PWM Counter PWM Clock PWMEN PWMP represents PWMPH:PWMPL Peirod Match Zero Match Period Match 图 中心对齐计数模式 74

75 单次计数模式 设置 PTCON 中 PMOD 位段为 10 或 11, 时基模块中的 PWM 计数器将工作在单次计数模式下 此模式下, 软件令 PWMEN 位置 1,PWM 计数器将从 0 开始向上计数, 直到与 PWM 周期寄存器 PWMPL/H 匹配时,PWM 计数器复位为 0, 同时 PWMEN 位将由硬件清 0,PWM 输出高阻状态 PWM 计数器复位为 0 的时刻即归零时刻 (Zero Match) PWM 计数器向上计数过程中若软件令 PWMEN 位清 0, 则 PWM Counter 将在下一个系统时钟边沿复位为 0 并停止计数 如设置 PWMPL/H = 5, 则 PWM 计数器在此模式下的工作如图 所示 PWMP = Tsys PWM Counter PWM Clock PWMEN PWMP represents PWMPH:PWMPL Zero Match 图 单次计数模式 75

76 后分频 当不需要每个周期更新 PWM 的占空比时, 后分频将非常有用 如图 所示,PWM 计数器运行时产生的周期匹配信号 (Period Match) 和归零信号 (Zero Match) 经过后分频计数器 (Post-Counter), 可以实现 1/1 1/2 1/4 和 1/8 分频 通过寄存器 PTCON 中的 POSTPS 位段可以选择以上四档后分频 令 POSTPS = 0 则禁止后分频, 周期匹配信号和归零信号不会被分频 首先, 分频后的周期匹配信号 (Scaled Period Match) 和归零信号 (Scaled Zero Match) 结合 PWMRLDEN 寄存器值用于控制周期寄存器 PWMPL/H 预分频系数 PTCON[PTCLK1:PTCLK0] 以及占空比寄存器的重载 其次, 分频后的周期匹配信号 (Scaled Period Match) 和归零信号 (Scaled Zero Match) 可用于产生归零中断和周期匹配中断, 如图 所示 详见 时基中断 章节 最后, 分频后的周期匹配信号 (Scaled Period Match) 和归零信号 (Scaled Zero Match) 可用于触发 ADC,Timer2 但在中心对齐模式下触发 timer2, 只能用分频后的周期匹配信号触发 ; 中心对其模式触发 ADC, 可以选择在分频后的周期匹配信号触发, 或分频后的归零信号触发, 也可以同时选择两者 而在边沿对齐模式下, 只能用分频后的归零信号触发 但是, 后分频只对周期匹配信号和归零信号有效, 对占空比匹配时刻无效, 比如, 允许占空比中断和归零信号中断的情况下, 设置后分频为 8 分频时, 归零信号进中断会在 8 个 PWM 周期后才进一次中断, 而占空比匹配信号则任然会在每个 PWM 周期触发中断 时基中断 时基中断包括分频后的周期匹配信号所触发的周期中断和分频后的归零信号所触发的归零中断 分频后的周期匹配信号发生时将令寄存器 PWMINTF 中的 PWMPIF 位置 1, 此时若 PWMINTEN 中的 PWMPIE 位为 1 则将触发周期中断 ; 分频后的归零信号发生时将令寄存器 PWMINTF 中的 PWMZIF 位置 1, 此时若 PWMINTEN 中的 PWMZIE 位为 1 则将触发归零中断 PWMPIF 位和 PWMZIF 位需由软件写 0 清除 PTCON 中 POSTPS 段等于 0 时,PWM 计数器的周期匹配信号和归零信号不会被分频, 故周期匹配信号每次发生时都将令 PWMPIF 位置 1, 归零信号每次发生时都将令 PWMZIF 位置 1 PWM 周期寄存器与预分频系数的自动重载 周期寄存器 PWMPL 和 PWMPH 都有一个缓存寄存器 (BUFFER), 用户能够读写 PWMPL/H 但不能操作其缓存寄存器, 如图 所示 PWM 时基计数器运行时实际上是与周期寄存器的 BUFFER 进行比较以产生周期匹配信号 PTCON 寄存器中的 PTCLK 位段也有一个缓存寄存器 (BUFFER), 用户能够读写 PTCLK 位段但不能操作其缓存寄存器, 如图 所示 系统时钟实际上是利用预分频系数位段 PTCLK 的 BUFFER 进行分频以产生 PWM 时钟 (PWM Clock) 由于存在缓冲寄存器, 因此对周期寄存器和分频比寄存器位的读写有特殊规定 : 当 PWMRLDEN 寄存器的值设为 0x55 时, 才允许对这些寄存器进行修改, 然后只有当 PWMRLDEN 寄存器中的值设为 0xAA 时, 分频后的归零信号发生时才会将 PWMPL 和 PWMPH 寄存器和 PTCLK 位段锁存至对应的缓存寄存器 (BUFFER) 中, 这样可以避免寄存器修改过程中发生重载, 也避免寄存器修改立即生效可能会出现毛刺 因此对上述寄存器的修改, 必须要有对 PWMRLDEN 寄存器的配合操作才能完成 76

77 8.1.4 PWM0/1/2 波形发生模块 PWM 波形发生模块指图 中的 Wave Generator 模块 波形发生模块使用 PWM 时基模块中 PWM 计数器的值与 6 个 16 位占空比值进行比较, 从而产生原始的 6 路 PWM 波形 :P0_O P01_O P1_O P11_O P2_O 和 P21_O 该原始 6 路 PWM 波形信号经过死区 & 极性逻辑和输出控制逻辑最终反映在 6 个 PWM 输出引脚上, 如图 所示 波形发生器的逻辑简图如图 所示 PWMxD BUFFER PWMx/PWMx1 Wave Generator x = 0~2 PWMINTF[PTUDxIF] PWMINTF[PTDDxIF] 16 Bits data from PWM Counter 16 Duty Compare Px_O 0 1 Duty Compare Px1_O Duty Registers Reload Signal BUFFER PWMx1D PWMCON2[PMODx] 图 波形发生器逻辑简图 PWM0/1/2 输出模式 PWM 模块中包含有 3 个波形发生模块, 对应于 3 对 PWM 输出 :PWM0/PWM01 PWM1/PWM11 和 PWM2/PWM21, 如图 所示 对于每对 PWM 输出可以分别配置为互补模式或独立模式 互补输出模式 令 PWMCON1 寄存器中 POUTMOD 位为 0,PWMx/PWMx1 工作在互补状态,16 位 PWM 计数器与占空比寄存器 PWMxDL/H 比较以产生 Px_O 和 Px1_O 波形, 因此 PWMx 和 PWMx1 引脚上最终输出的 PWM 波形使用的是同一占空比寄存器 PWMxDL/H 在互补输出模式下, 可由寄存器 PWMCON1 设置 PWMx/PWMx1 引脚上输出波形的极性 并可由寄存器 PWMDT0L/H 和 PWMDT1L/H 设置死区 ( 详见 节 PWM 死区与极性控制模块 ) (x = 0-2) 独立输出模式 令 PWMCON1 寄存器中 POUTMOD 位为 1,PWMx/PWMx1 工作在独立状态,16 位 PWM 计数器与占空比寄存器 PWMxDL/H 比较以产生 Px_O 波形,16 位 PWM 计数器与占空比寄存器 PWMx1DL/H 的值比较以产生 Px1_O 波形, 因此 PWMx 和 PWMx1 引脚上最终输出的 PWM 波形使用的是不同的占空比寄存器 PWMxDL/H 与 PWMx1DL/H 在独立输出模式下, 可由寄存器 PWMCON1 设置 PWMx/PWMx1 引脚上输出波形的极性 但是寄存器 PWMDT0L/H 和 PWMDT1L/H 将无效, 即独立输出模式下 PWM 的输出无死区 ( 详见 节 PWM 死区与极性控制模块 ) (x = 0-2) 77

78 边沿对齐计数模式下的 PWM0/1/2 原始波形 令 PTCON 中 PTMOD = 00, 将 PWM 时基设置为边沿对齐计数模式 在互补输出模式下,PWM 原始输出波形 Px_O 和 Px1_O 如图 所示 PWMEN 置 1 后,Px_O 和 Px1_O 波形变高,PWM 计数器与占空比寄存器 PWMxDL/H 匹配后 Px_O 和 Px1_O 波形将变低直至 PWM 计数器归零, 如此往复 PWMP = 5 PWMxD = 4 PWMx1D = 2 PWM Counter PWM Clock Tsys 2 0 PWMEN None-Duty Zone Px_O/Px1_O Duty Zone PTUDxIF = 1 PTDDxIF= 0 PWMP represents PWMPH:PWMPL PWMxD represents PWMxDH:PWMxDL PWMx1D represents PWMx1DH:PWMx1DL PTUDxIF = 1 PTDDxIF= 0 图 边沿对齐计数 互补输出模式下的 PWM 原始波形 在独立输出模式下,PWM 原始输出波形 Px_O 和 Px1_O 如图 所示 PWMEN 置 1 后,Px_O 和 Px1_O 波形变高,PWM 计数器与占空比寄存器 PWMxDL/H 匹配后 Px_O 波形将变低直至 PWM 计数器归零 ;PWM 计数器与占空比寄存器 PWMx1DL/H 匹配后 Px1_O 波形将变低直至 PWM 计数器归零, 如此往复 PWMP = 5 PWMxD = 4 PWMx1D = 2 PWM Counter PWM Clock Tsys 2 0 PWMEN Px_O Px1_O Duty Zone None-Duty Zone PTUDxIF = 1 PTDDxIF= 0 PWMP represents PWMPH:PWMPL PWMxD represents PWMxDH:PWMxDL PWMx1D represents PWMx1DH:PWMx1DL PTUDxIF = 1 PTDDxIF= 0 图 边沿对齐计数 独立输出模式下的 PWM 原始波形 78

79 中心对齐计数模式下的 PWM0/1/2 原始波形 5 5 Tsys PWMP=5 PWMxD = PWM Counter PWM Clock PWMEN Px_O/Px1_O None-Duty Zone Duty Zone None-Duty Zone PTUDxIF = 1 PTDDxIF = 0 PWMP represents PWMPH:PWMPL PWMxD represents PWMxDH:PWMxDL PTUDxIF = 0 PTDDxIF = 1 PTUDxIF = 1 PTDDxIF = 0 PTUDxIF = 0 PTDDxIF = 1 图 中心对齐计数 互补输出模式下的 PWM 原始波形令 PTCON 中 PTMOD = 01, 将 PWM 时基设置为中心对齐计数模式 在互补输出模式下,PWM 原始输出波形 Px_O 和 Px1_O 如图 所示 PWMEN 置 1 后,Px_O 和 Px1_O 波形保持为高,PWM 计数器增计数时与 PWMxDL/H 匹配后 Px_O 和 Px1_O 波形将变低直至 PWM 计数器减计数时再次与 PWMxDL/H 匹配, 如此往复 5 5 Tsys PWMP=5 PWMxD = 4 PWMx1D = PWM Counter PWM Clock PWMEN Px_O Px1_O None-Duty Zone Duty Zone PTUDxIF = 1 PTDDxIF = 0 PTUDxIF = 0 PTDDxIF = 1 PTUDxIF = 1 PTDDxIF = 0 PTUDxIF = 0 PTDDxIF = 1 PWMP represents PWMPH:PWMPL PWMxD represents PWMxDH:PWMxDL PWMx1D represents PWMx1DH:PWMx1DL 图 中心对齐计数 独立输出模式下的 PWM 原始波形 独立输出模式下,PWM 原始输出波形 Px_O 和 Px1_O 如图 所示 PWMEN 置 1 后,Px_O 和 Px1_O 波形变高,PWM 计数器增计数时与 PWMxDL/H 匹配后 Px_O 波形将变低直至 PWM 计数器减计数时再次与 PWMxDL/H 匹配 ;PWM 计数器增计数时与 PWMx1DL/H 匹配后 Px1_O 波形将变低直至 PWM 计数器减计数时再次与 PWMx1DL/H 匹配, 如此往复 79

80 单次计数模式下的 PWM0/1/2 原始波形 令 PTCON 中 PTMOD = 10 或 11, 将 PWM 时基设置为单次计数模式 在互补输出模式下,PWM 原始输出波形 Px_O 和 Px1_O 如图 所示 PWMEN 置 1 后,Px_O 和 Px1_O 波形变高,PWM 计数器增计数时与 PWMxDL/H 匹配后 Px_O 和 Px1_O 波形将变低 PWMP = 5 PWMxD = 4 PWMx1D = 2 PWM Counter PWM Clock Tsys 2 0 PWMEN Px_O/Px1_O Duty Zone None-Duty Zone PTUDxIF = 1 PTDDxIF= 0 PWMP represents PWMPH:PWMPL PWMxD represents PWMxDH:PWMxDL PWMx1D represents PWMx1DH:PWMx1DL 图 单次计数 互补输出模式下的 PWM 原始波形 在独立输出模式下,PWMEN 置 1 后,Px_O 和 Px1_O 波形变高,PWM 计数器增计数时与 PWMxDL/H 匹配后 Px_O 波形将变低 ;PWM 计数器增计数时与 PWMx1DL/H 匹配后 Px1_O 波形将变低 占空比寄存器的自动重载 如图 所示,6 个占空比寄存器都带有对应的缓存寄存器 (BUFFER),16 位的 PWM 计数器实际上是与 BUFFER 比较从而控制 PWM 原始波形的变化 用户能够读写 6 个占空比寄存器, 却不能操作其对应的缓存寄存器 结合图 和图 可以看出 由于存在缓冲寄存器, 和周期寄存器一样, 对占空比寄存器的读写有特殊规定 : 当 PWMRLDEN 寄存器的值设为 0x55 时, 才允许对占空比寄存器进行修改, 然后只有当 PWMRLDEN 寄存器中中的值设为 0xAA 时, 分频后的归零信号发生时才会将占空比寄存器锁存至对应的缓存寄存器 (BUFFER) 中, 这样可以避免寄存器修改过程中发生重载, 也避免寄存器修改立即生效可能会出现毛刺 因此对上述寄存器的修改, 必须要有对 PWMRLDEN 寄存器的配合操作才能完成 另外, 在中心对齐模式下, 和周期寄存器不同, 占空比寄存器除了可以用归零信号重载外, 还可以用周期匹配信号重载, 如果将 PWMCON2 中 PDLDEN 位为 1, 则分频后的周期匹配信号也会将硬件自动将 6 个占空比寄存器锁存至对应的缓存寄存器中 ( 称之为重载 ) 因此在边沿计数模式和单次计数模式下, 由于时基模块只有归零匹配信号, 故 PWM 计数器每次复位为 0 时都将发生一次占空比寄存器的重载 ; 中心对齐计数模式下, 时基模块能产生归零匹配以及周期匹配信号, 故 PWM 计数器每次复位为 0 以及与周期寄存器匹配时都可以重载占空比寄存器 占空比中断 PWM0/1/2 时基计数器向上计数时, 不论在何种模式, 当计数值与占空比寄存器 PWMxDL/H 匹配时能够令 PWMINTF 寄存器中 PTUDxIF 位置 1, 同时令 PTDDxIF 位清 0, 此时若 PWMINTEN 寄存器中的 PTUDxIE 位为 1, 则能够触发占空比中断, 如图 8-1-7/ 图 所示 在中心对齐计数模式中,PWM 时基计数器向下计数时, 当计数值与 PWMxDL/H 匹配时能够令 PWMINTF 寄存器中 PTDDxIF 位置 1, 同时令 PTUDxIF 位清 0, 此时若 PWMINTEN 寄存器中的 PTDDxIE 位为 1, 则能够触发占空比中断, 如图 所示 注意 : 不论互补输出模式还是独立输出模式, 占空比中断只是在 PWM 计数器与 PWMxDL/H 相关的比较时产生, 与 PWMx1DL/H 相关比较匹配时不会改变占空比中断标志 80

81 8.1.5 PWM 死区与极性控制模块 如图 所示, 波形发生器 (Wave Generator) 产生的 PWM 原始波形 Px_O/Px1_O 经过死区与极性控制模块 (Dead&Polarity Logic) 产生最终的 PWM 波形 Px_D/Px1_D 带有死区与极性的 PWM 信号 Px_D/Px1_D 由输出控制模块 (Output Control Logic) 和故障检测模块 (Fault Detect Logic) 决定是否由引脚 PWMx/PWMx1 送出,(x = 0-2) 当寄存器 PWNCON2 中的 DT[1:0] = 00 时死区与极性控制模块的逻辑简图如图 所示 PWMDT0 PWMx/x1Dead & Polarity Logic Px_O Rising Edge Delay BUFFER 1 0 PWMCON1[PWMxS PWMxS] 1 0 Px_D PWMCON1[POUTMOD POUTMOD] Px1_O Falling Edge Delay BUFFER PWMCON1[PWMxS PWMxS] Px1_D PWMDT1 PWM 死区的实现 图 死区与极性控制逻辑简图 如图 所示, 死区逻辑通过将 PWM 原始信号 Px_O 的上升和 Px1_O 的下降沿延迟一段时间而实现 PWMCON1 寄存器中 POUTMOD 位为 1 时,PWM 原始信号 Px_O/Px1_O 不会经过死区逻辑, 即 PWMx/PWMx1 引脚输出为独立模式时, 无死区 ; PWMCON1 寄存器中 POUTMOD 位为 0 时,PWM 原始信号 Px_O/Px1_O 将经过死区逻辑, 即 PWMx/PWMx1 引脚为互补模式时, 将引入死区 死区时间由寄存器 PWMDT0/1 决定 : 上升沿延迟时间 (Rising Edge Delay)= PWMDT0 * T PWM CLOCK 下降沿延迟时间 (Falling Edge Delay)= PWMDT1 * T PWM CLOCK 注意 : 只在 PWMCON2 中的 DT[1:0] = 00 的情况如此, 其他情况请参照 PWMCON2 寄存器部分的描述 在不同的极性设置下, 插入死区后的 PWM 波形也将不同, 详见 不同极性设置下带死区的 PWM 波 章节 注意 :PWMDT0 = 0 时, 原始 PWM 波形 Px_O 的上升沿不会触发延时 ;PWMDT1 = 0 时, 原始 PWM 波形 Px1_O 的下降沿也不会触发延时 PWM 极性设置 为了有效说明 PWM 引脚上波形的极性, 将一个 PWM 周期划分为 占空比时区 (Duty Zone) 与 非占空比时区 (None-Duty Zone), 各种时基计数模式下, 占空比时区和非占空比时区的划分如图 图 所示 由寄存器 PWMCON1 中的位 PWMxS/PWMx1S 来决定占空比时区期间 Px_D 和 Px1_D 的电平 PWMxS 控制 Px_D 的极性 PWMxS = 0 时,Px_D 的占空比时区期间为高电平, 非占空比时区期间为低电平 ;PWMxS = 1 时,Px_D 的占空比时区期间为低电平, 非占空比时区期间为高电平 PWMx1S 控制 Px1_D 的极性 PWMx1S = 0 时,Px1_D 的占空比时区期间为低电平, 非占空比时区期间为高电平 ;PWMx1S = 1 时,Px1_D 的占空比时区期间为高电平, 非占空比时区期间为低电平 结合图 图 所示的 PWM 原始波形 Px_O/Px1_O 和图 可以清晰的反映死区与极性的实现 81

82 PWM 死区和死区方式选择位段的自动重载 PWM 死区也和占空比 周期一样, 有自己的缓冲寄存器 (BUFFER), 自动重载功能类似于占空比的自动重载, 可以在周期匹配和归零信号发生时重载 对死区寄存器的修改也必须 PWMRLDEN 寄存器的值设为 0x55 时, 然后只有当 PWMRLDEN 寄存器中的值设为 0xAA 时, 重载生效 死区的方式选择位段 DT[1:0] 同样也有缓冲寄存器 (BUFFER), 自动重载功能类似于占空比的自动重载, 可以在周期匹配和归零信号发生时重载 对死区寄存器的修改也必须 PWMRLDEN 寄存器的值设为 0x55 时, 然后只有当 PWMRLDEN 寄存器中的值设为 0xAA 时, 重载生效 不同极性设置下带死区的 PWM 波形 图 给出了一对在 DT[1:0] = 00 时的 PWM 输出 Px_D/Px1_D 设置为互补输出模式, 所有的极性组合下带有死区的波形 None-Duty Zone One PWM Period Duty Zone None-Duty Zone Px_O Px1_O Px_O with Rising Edge Delayed DR Px1_O with Falling Edge Delayed DF CASE1:Default Px_D,PWMxS=0 Px1_D,PWMx1S=0 CASE2 Px_D,PWMxS=0 Px1_D,PWMx1S=1 CASE3 Px_D,PWMxS=1 Px1_D,PWMx1S=0 CASE4 Px_D,PWMxS=1 Px1_D,PWMx1S=1 图 不同极性设置下的死区波形 注 : 图中的 DR 表示前死区,DF 表示后死区 上图是 DT[1:0] = 00 时的情况,DT[1:0] 为其他值时的情况, 可参考 PWMCON2 寄存器部分的说明, 这里就不再多阐述 82

83 PWM0/1/2 输出控制与故障检测 PWM 输出控制与故障检测模块 (Output Control Logic & Fault Detect Logic) 用于决定最终的 PWM 波形 Px_D 是否在 PWMx 引脚上输出 Px1_D 是否在 PWMx1 引脚上输出 输出控制与故障检测模块的逻辑简图如图 所示 Fault Detect logic Output of Comparator1 Output of Comparator2 FLTCON[FLT1SEL] 0 1 FLTCON[FLT1EN] FLTCON[FLTM] FLTCON[FLT2EN] Fault Dealing logic FLTCON[FLTSTAT] FLT PIN Fault_Signal PTCON[PWMEN] PWMOE[PWMyOE] Py_D PMANUALCON2[POUTy] Output Control logic 1 0 High Impedance I/O PWMy x stands for 0,1,2 y stands for 0 or 01 when x=0 y stands for 1 or 11 when x=1 y stands for 2 or 21 when x=2 PMANUALCON1[PMANUALy] 图 输出控制与故障检测逻辑简图 83

84 8.1.6 故障检测模块 PWM 模块中有一个故障检测模块 (Fault Detection logic), 当 FLTCON 寄存器中 FLT1EN 位或 FLT2EN 位为 1 时, 使能该模块功能, 若 FLT1EN 和 FLT2EN 都为 0, 则禁止该模块功能 PWM 故障检测主要目的是 : 当故障发生时 ( 比如过流 ) 可以切断 PWM 的输出, 进入无效驱动状态 ( 输出高阻态 ), 进而达到保护外部功率器件的目的, 由于它是由硬件控制, 因此响应速度非常快 故障检测模块的逻辑简图如图 所示, 结合输出控制模块 (Output Control Logic) 能够实现前述的保护功能 故障信号输入源的选择 可以选择比较器 (1/2) 的输出或 FLT 引脚输入作为故障检测输入信号, 如图 所示 无论故障信号来自比较器 1/2 输出或 FLT, 高电平为有效故障信号, 即比较器输出由低变高时将自动切断 PWM 的输出 如图 所示, 若 FLT1EN = 1, 则比较器 1 或 2 的输出会作为故障检测输入信号 一旦比较器的输出变高, 并保持滤波时间 ( 下节介绍 ), 则六路 PWM 引脚 PWMx/PWMx1 立即输出高阻态 (x = 0-2) 同理, 若 FLT2EN = 1, 则 FLT 引脚输入作为故障检测输入信号, 一旦 FLT 引脚输入变高 (FLT2S = 0 时 ), 并保持滤波时间, 则六路 PWM 引脚 PWMx/PWMx1 立即输出高阻态 (x = 0-2) 如果 FLT2EN = 0, 则禁止 FLT 引脚的故障检测功能,FLT 引脚作为普通 IO 使用 ( 但比较器的故障检测功能不受影响 ) 当使用 PWM 模块来控制图 所示的逆变桥, 六个管子为高电平驱动的功率管 : 设置 PWMxS/PWMx1S = 0(x = 0-2), 则 PWM0/1/2 的输出在占空比时区期间为高电平,PWM01/11/21 的输出在占空比时区期间为低电平 ( 见 PWM 极性的设置 章节 ), 设置 PWMCON1 寄存器中 POUTMOD 位为 0,, 即 PWM0 与 PWM01 互补输出 PWM1 与 PWM11 互补输出 PWM2 与 PWM21 互补输出 使能故障检测后, 若发生故障, 则六路 PWM 立即输出高阻态 PWM0 PWM1 PWM2 + V DC PWM01 PWM11 PWM21 图 PWM 控制逆变桥示例图 84

85 FLT 引脚上的信号与比较器输出信号的滤波 当 FLT2EN = 1 时, FLT 引脚的输入信号会作为故障检测输入信号使用, 此时可以通过设置寄存器 FLTCON 中的 FLT2DEB[1:0] 位段来调整对此信号的滤波时间 FLT2DEB[1:0] = 0 时, 无滤波作用 当 FLT2S = 1 时, 故障检测输入信号的电平由低变高时立即触发保护 ;FLT2DEB[1:0] = 1-3 时, 可以将滤波时间设置为 1us 4us 16us 共 3 档, 故障检测输入信号由低变高时, 高电平需要至少保持 FLT2DEB[1:0] 定义的时间长度, 故障检测模块才认为故障检测输入信号的电平变高了, 从而触发保护 ; 故障检测输入信号的电平由高变低时, 低电平需要至少保持 FLT2DEB[1:0] 定义的时间长度, 故障检测模块才认为 FLT 引脚上的有效故障电平消失了, 六路 PWM 的输出根据保护模式 ( 下节介绍 ) 动作 当 FLT2S = 0 时,FLT 故障检测信号变为低电平有效, 情况与 FLT2S = 1 时相反 根据功率管的特性, 恰当的设置滤波时间可以滤除故障检测输入信号上的噪声 FLT1EN = 1 时, 可选比较器 1 2 的输出信号作为故障检测输入信号使用, 当比较器输出由 0 变 1 时触发保护, 此时比较器 1 2 的输出滤波时间和算法分别在寄存器 CMP1CON 和 CMP2CON2 中设置 ( 详见运算放大器和比较器模块章节 ) 保护模式 有两种故障检测模式 : 锁存模式与逐次模式 (1) 锁存模式 设置 FLTCON 寄存器中 FLTM 位为 0 将使能锁存模式 当故障检测模块探测到有效故障信号, 六路 PWM 引脚 PWMx/PWMx1 立即切换为高阻态 若有效故障信号没有消失, 六路 PWM 引脚 PWMx/PWMx1 将保持输出高阻态 (x = 0-2), 软件无法清除 FLTSTAT 标志位, 六路 PWM 引脚无法恢复正常输出 当有效故障信号消失后, 六路 PWM 引脚 PWMx/PWMx1(x = 0-2) 亦不会恢复正常输出, 只有软件将 FLTSTAT 位清 0 后, PWMx/PWMx1 才会在 FLTSTAT 被清零之后的最近一次 PWM 计数器归 0 或与周期寄存器 PWMPL/H 的值匹配时恢复正常输出 ( 边沿对齐模式中, 在 PWM 计数器归 0 时恢复输出 ; 中心对齐模式中, 在 PWM 计数器与周期寄存器 PWMPL/H 匹配或归 0 时恢复输出 ) (2) 逐次模式 设置 FLTCON 寄存器中 FLTM 位为 1 将使能逐次模式 在逐次模式下,PWMx/PWMx1 引脚是否输出 PWM 波形直接由比较器滤波后的输出信号控制 FLTSTAT 位也都由滤波之后的故障信号直接控制, 若滤波之后的故障信号为高, 则 FLTSTAT 位为 1; 若滤波之后的故障信号为低, 则 FLTSTAT 位为 0 当故障检测模块探测到有效故障信号, 六路 PWM 引脚 PWMx/PWMx1 立即输出高阻态 (x = 0-2),FLTSTAT 位亦会被硬件置 1 若有效故障信号没有消失, 六路 PWM 引脚 PWMx/PWMx1 将保持输出高阻态 (x = 0-2), 软件无法使得六路 PWM 引脚恢复正常输出 当有效故障信号消失后, 六路 PWM 引脚 PWMx/PWMx1(x = 0-2) 会在有效故障信号消失后的最近一次 PWM 计数器归 0 或与周期寄存器 PWMPL/H 的值匹配时自动恢复正常输出,FLTSTAT 位也将归 0 85

86 8.1.7 PWM 输出控制模块 PWM 输出引脚与 IO 功能复用 PWM 引脚 PWMx/PWMx1 与 IO 功能复用 (x = 0-2), 由寄存器 PWMOE 控制 令 PWMOE 中的 PWMxOE 位为 1, 可以将 PWMx 引脚设置为 PWM 输出功能, 反之为 IO 功能 ; 令 PWMOE 中的 PWMx1OE 位为 1, 可以将 PWMx1 引脚设置为 PWM 输出功能, 反之为 IO 功能 具体如图 所示 手动控制 PWM 输出 当 PWMxOE/PWMx1OE 位为 1, 且 PWMEN 位为 1 时, 若 PMANUALCON1 寄存器中的 PMANUALx/PMANUALx1 位为 1, 则 PWMx/PWMx1 引脚将输出 PMANUALCON2 寄存器中 POUTx/POUTx1 位的值 ; 若 PMANUALCON1 寄存器中的 PMANUALx/PMANUALx1 位为 0, 则 PWMx/PWMx1 引脚将输出 PWM 波形 Px_D/Px1_D 此功能和 PORT 口的输出功能类似, 唯一的区别是, 在手动控制 PWM 输出模式下, 其输出会受到 PWM 故障检测输入信号控制, 而在 I/O 输出模式下, 不受该信号控制 具体如图 所示 更改 PMANUALCON1 和 PMANUALCON2 寄存器时,PWMx/PWMx1 引脚输出的改变与系统时钟同步, 输出状态改变立即生效 注意 : 无论 PMANUALx/PMANUALx1 是否为 1, 当寄存器 PWMOE 中的 PWMxOE/PWMx1OE 为 0 时,PWMx/PWMx1 引脚都将成为普通 IO 口 时基停止时 PWM 引脚的输出 PTCON 中 PWMEN 位为 0 时, 时基模块将停止工作, 同时若 PWMOE 中 PWMxOE/PWMx1OE 位为 1, 则 PWMx/PWMx1 引脚将输出高阻态 具体如图 所示 事件触发功能 PWM 时基模块产生的分频后的归零信号 (Scaled Zero Match) 和分频后的周期匹配信号 (Scaled Period Match) 可以用来触发启动 ADC 或者 Timer2 PWM 计数器触发 Timer2 若寄存器 PWMCON2 中的 ZETIM 位为 1 且 Timer2 工作在自动触发模式 (TRG = 1), 如果是中心对齐模式, 则分频后的周期匹配信号可以自动启动 Timer2, 如果是边沿对齐模式或单次模式, 则是分频后的归零信号启动 Timer2; 若 ZETIM = 0, 则 PWM 模块不会自动启动 Timer2 见图 PWM0/1/2 计数器触发 ADC 若寄存器 PWMCON2 中的 ZEAD = 1, 则分频后的归零信号可以自动触发一次 ADC 序列的转换 ( 如果 ADC 模块中的 ADCON1 寄存器的 ADON 位和 PWMTRGEN 位被允许, 将会启动一次序列转换 ); 若 ZEAD = 0, 则归零信号不会自动触发 ADC 序列 若寄存器 PWMCON2 中的 PEAD = 1, 则分频后的周期匹配信号可以自动触发一次 ADC 序列的转换 ( 如果 ADC 模块中的 ADCON1 寄存器的 ADON 位和 PWMTRGEN 位被允许, 将会启动一次序列转换 ); 若 PEAD = 0, 则周期匹配信号不会自动触发 ADC 序列 PWM 模块的中断总汇 PWM 模块的中断包括时基模块产生的 PWM 计数器归零中断 PWM 计数器值与周期寄存器匹配产生的周期中断 ( 详见 时基中断 章节 ) 以及 PWM 计数器值与占空比寄存器 PWMxDL/H(x = 0-2) 匹配时产生的占空比中断 ( 详见 占空比中断 章节 ) 这些中断共享一个位于 0063H 地址的中断向量 86

87 8.1.9 注意事项 边沿对齐计数模式中占空比寄存器值为 0 或周期值 边沿对齐计数模式中, 若占空比寄存器为 0 或周期值, 则根据不同的极性设置,PWMx/PWMx1 应输出占空比为 0% 或 100% 的波形 令 PWMOE = 0xBF PWMDT0L/H = 0 PWMDT1L/H = 0 在边沿对齐时基计数 互补输出模式下, 不同占空比值的 PWM 引脚输出的波形 中断标志触发位置 事件触发位置 寄存器重载位置如图 图 所示 注意 :PWM 时基 Enable 时刻, 虽然时基计数器为 0, 但不会产生归零 (zero match) 信号, 因此不会置 PWMZIF 标志, 也不会产生事件触发信号, 而寄存器重载信号在 PWMEN = 0 时是立即发生的 PWMP = 5 PWMOE = 0x3F PWM Counter PWM Clock PWMEN PWMx(PWMxS=0 PWMxS=0) High Impedance Duty Zone None-Duty Zone PWMxD = 3 PWMxD PWMxD PWMxD PWMx1(PWMx1S=0) High Impedance PWMx(PWMxS=1) PWMxD = 3 PWMx1(PWMx1S=1) High Impedance High Impedance PWMxD PWMxD PWMxD PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PTUDxIF = 1 PTDDxIF = 0 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PTUDxIF = 1 PTDDxIF = 0 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PTUDxIF = 1 PTDDxIF = 0 图 边沿对齐计数 互补输出模式 87

88 PWMP = 5 PWMOE = 0x3F PWM Counter PWM Clock PWMEN PWMx(PWMxS=0) PWMxD = 0 PWMx1(PWMx1S=0) High Impedance High Impedance None-Duty Zone None-Duty Zone PWMx outputs 0 PWMx1 outputs 1 PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC 图 边沿对齐计数 互补输出模式, 占空比 = 0 PWMP = 5 PWMOE = 0x3F PWM Counter PWM Clock PWMEN PWMx(PWMxS=0) PWMxD = PWMP PWMx1(PWMx1S=0) High Impedance High Impedance Duty Zone Duty Zone PWMx outputs 1 PWMx1 outputs 0 PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC 图 边沿对齐计数 互补输出模式, 占空比 = 周期寄存器 88

89 中心对齐计数模式中占空比寄存器值为 0 或周期值中心对齐计数模式中, 若占空比寄存器为 0 或周期值, 则根据不同的极性设置,PWMx/PWMx1 应输出占空比为 0% 或 100% 的波形 令 PWMOE = 0xBF PWMDT0L/H = 0 PWMDT1L/H = 0 在边沿对齐时基计数 互补输出模式下, 不同占空比值的 PWM 引脚输出的波形 中断标志触发位置 事件触发位置 寄存器重载位置如图 图 所示 特别注意 : 在中心对齐计数模式中, 当占空比寄存器为 0 或周期值时, 占空比比较匹配中断标志不会置起 5 5 PWMP=5 PWMOE = 0x3F PWM Counter 0 0 PWM Clock PWMEN PWMx(PWMxS=0) High Impedance None-Duty Zone Duty Zone None-Duty Zone PWMxD = 2 PWMx1(PWMx1S=0) High Impedance PWMxD PWMxD PWMxD PWMxD PWMx(PWMxS=1) High Impedance PWMxD = 2 PWMx1(PWMx1S=1) High Impedance PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PTUDxIF = 1 PTDDxIF = 0 PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PTUDxIF = 0 PTDDxIF = 1 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT 0/1&PTCLK1/0 Triger Timer&ADC PTUDxIF = 1 PTDDxIF = 0 图 中心对齐计数 互补输出模式 PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PTUDxIF = 0 PTDDxIF = 1 PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMD T0/1&PTCLK1/0 Triger Timer&ADC 89

90 5 5 PWMP=5 PWMOE = 0x3F PWM Counter 0 0 PWM Clock PWMEN PWMx(PWMxS=0) High Impedance Duty Zone, PWMx outputs 0 PWMxD = 0 PWMx1(PWMx1S=0) High Impedance Duty Zone, PWMx1 outputs 1 PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC 图 中心对齐计数 互补输出模式 占空比 = PWMP=5 PWMOE = 0x3F PWM Counter 0 0 PWM Clock PWMEN PWMx(PWMxS=0) PWMxD = PWMP PWMx1(PWMx1S=0) High Impedance High Impedance Duty Zone, PWMx outputs 1 Duty Zone, PWMx1 outputs 0 PWMxD represents PWMxDH:PWMxDL PWMP represents PWMPH:PWMPL x = 0~2 PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC PWMPIF=1 if(pdlden==1) {Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/1} &PTCLK1/0 Triger Timer&ADC PWMZIF = 1 Reload PWMP& PWMx/x1D &DT[1:0]&PWMDT0/ 1&PTCLK1/0 Triger Timer&ADC 图 中心对齐计数 互补输出模式 占空比 = 周期 90

91 周期寄存器值为 0 不管时基计数器在何种模式, 若周期寄存器为 0, 则根据不同的极性设置,PWMx/PWMx1 应输出占空比为 0% 的波形 此时, 所有中断标志都不会产生, 也不会产生事件触发信号, 但重载信号会产生 仿真状态的 PWM 输出 支持在线仿真, 在仿真状态运行和正常状态运行没有区别, 如果在仿真状态停止运行或单步运行,PWM 输出会切换为高阻态, 保证不会误触发外部功率管 进人 IDLE 模式,PWM0/1/2 的波形输出状态 进入 IDLE 模式后,PWM 输出口不受影响, 比如 PWM0 口原先输出 1K 的方波, 进入 IDLE 模式后会继续输出 1K 的方波, 但是如果设置了 PWM0/1/2 中断, 会唤醒 IDLE 模式, 继续执行 IDLE 后面的程序 进人 STOP 模式,PWM0/1/2 的波形输出状态 进入 STOP 模式后,PWM 输出口会输出高阻状态, 即使设置了 PWM0/1/2 中断, 也不能唤醒掉电模式, 掉电模式必须通过其他方式唤醒, 具体参考电源管理章节 91

92 代码示例 以下是输出 PWM 波形的一个简单示例程序 : #include "SH79f1611.h"/* 代码选项选取单时钟源内部 27MHZRC*/ void Pwm_Isr(void) interrupt 12 using 1 { PWMINTF = 0; PWMRLDEN = 0x55; // 每次中断将 PWM0 占空比加 1. PWM0D16++; PWMRLDEN = 0xAA; } void System_Initial() { CLKCON=0x00; EA=1; IEN1=0x20; } void Pwm_Initial() { PWMRLDEN=0x55; // 允许修改 PWM 受保护寄存器 PWMOE=0x3f; // 将 6 个 I/O 口设置为 PWM 输出口 PTCON=0x00; //PWM 输出为边沿对齐模式, 且无分频 PWMCON1=0x00; //PWM 输出互补模式 (PWM0 与 PWM01 波形互补 ) PWMP16=6000; //PWM 的周期设为 6000sysclock PWM0D16=0; //PWM0 占空比设置为 0sysclock PWM1D16=1000; //PWM1 占空比设置为 1000sysclock PWM2D16=3000; //PWM2 占空比设置为 3000sysclock PWMINTEN=0x40; //PWM 归零中断允许 PWMOE =0x80; // 打开 PWM 总时基 PWMRLDEN=0xaa; // 将 PWM 带缓存的寄存器值载入 ( 周期, 占空比, 死区等 ) } void main() { System_Initial(); Pwm_Initial(); while(1); } 92

93 8.2 乘 / 除法 / 移位单元 (MDSU MDSU) 特性 硬件实现在 1 周期内完成有符号 / 无符号 16-bit X 16-bit 乘法 硬件实现在 8 周期内完成有符号 / 无符号 32-bit 16-bit 除法 ( 注 : 除数为负数时需要特别注意, 详见 描述 ) 硬件实现在 1 周期内完成有符号 / 无符号 32-bit 数据最多 31 次移位 乘 / 除法 移位单元是由寄存器 MDSCON OPRDA0 - OPRDA3 OPRDB0 - OPRDB1 完成 16-bit X 16-bit 数乘法 32-bit 16-bit 数除法或者 32-bit 无符号数据左 / 右移位的运算 由于运算过程由硬件完成, 转化速率快, 高效, 为程序运行节省了大量的时间 乘 / 除法 / 移位单元 (MDSU MDSU) 单元寄存器 MDSU 模块所使用寄存器如下 : 操作控制寄存器 操作 / 数结果寄存器 功能名称寄存器描述 Table 8.29 操作控制寄存器 MDSCON OPRDA3 和 OPRDA2 OPRDA1 和 OPRDA0 OPRDB1 和 OPRDB0 用于选择进行乘 / 除法操作 / 移位操作 启动运算 标志异常 清 0 操作数结果寄存器 乘 / 除算法符号使能 用于存放除法操作的被除数的高 16 位 ; 或者 32-bit 移位操作数的高 16 位 ; 运算完成时作结果寄存器的高 16 位 用于存放 16-bit 乘法操作数之一或者除法操作中被除数的低 16 位 ; 或者 32-bit 移位操作数的低 16 位 ; 运算完成时作结果寄存器的低 16 位 用于存放 16-bit 乘法操作数之一或者除法操作中的除数或移位次数 ; 运算完成时作除法的余数寄存器 C1H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 MDSCON MD1 MD0 SLR - - SIGNEN DVERR RUN 读 / 写读 / 写读 / 写读 / 写 - - 读 / 写读 / 写读 / 写 位编号位符号说明 7-6 MD[1:0] 5 SLR 2 SIGNEN 1 DVERR 0 RUN 位移 乘除法选择位 00: 执行乘法操作 ( 默认 ) 01: 执行除法操作 10: 执行移位操作 11: 执行所有操作数 / 结果寄存器清 0 操作 位移方向选择位, 软件设置 ( 只有进行移位操作时有效 ) 0:32bit 数据左移 ( 默认 ) 1:32bit 数据右移 乘除法算法符号使能位 0: 进行无符号数操作 ( 默认 ) 1: 进行有符号数操作 除法运算异常标志位, 硬件置位, 并在下一次运算启动时硬件自动清 0 0: 无除数为 0 的情况发生 1: 有除数为 0 的情况发生 ( 不可软件写 1, 写 1 无效 ) 运算启动标志位, 只能硬件清 0, 软件置 1 0: 运算已结束或未启动 1: 启动乘 / 除法 移位运算或操作数结果寄存器清 0 操作, 运算过程中标志为 1, 运算完成后标志由硬件清 0 93

94 Table 8.30 操作数 / 结果寄存器 C2H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDA0 DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 C3H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDA1 DA15 DA14 DA13 DA12 DA11 DA10 DA9 DA8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 DA[15:0] 作 16bit X 16bit 乘法操作时 (MD[1:0] = 00) OPRDA0/1 存放 16bit 乘数,DA15 为 MSB,DA0 为 LSB 作 32bit 16bit 除法操作时 (MD[1:0] = 01) OPRDA0/1 存放 32bit 被除数的低 16 位,DA15 为 MSB,DA0 为 LSB 作 32bit 位移操作时 (MD[1:0] = 10) OPRDA0/1 存放 32bit 位移操作数的低 16 位,DA15 为 MSB,DA0 为 LSB 运算完成时 (RUN = 0) OPRDA0/1 存放 32bit 结果的低 16 位,DA15 为 MSB,DA0 为 LSB Table 8.31 操作数 / 结果寄存器 C4H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDA2 DA23 DA22 DA21 DA20 DA19 DA18 DA17 DA16 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 C5H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDA3 DA31 DA30 DA29 DA28 DA27 DA26 DA25 DA24 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 DA[31 31:16 16] 作 32bit 16bit 除法操作时 (MD[1:0] = 01) OPRDA2/3 存放 32bit 被除数的高 16 位,DA31 为 MSB,DA16 为 LSB 作 32bit 位移操作时 (MD[1:0] = 10) OPRDA2/3 存放 32bit 位移操作数的高 16 位,DA31 为 MSB,DA16 为 LSB 运算完成时 (RUN = 0) OPRDA2/3 存放 32bit 结果的高 16 位,DA31 为 MSB,DA16 为 LSB 94

95 Table 8.32 除数 / 位移操作数 / 结果寄存器 C6H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 C7H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 OPRDB1 DB15 DB14 DB13 DB12 DB11 DB10 DB9 DB8 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 DB[15:0] 作 16bit X 16bit 乘法操作时 (MD[1:0] = 00) 存放另一个 16bit 乘数,DB15 为 MSB,DB0 为 LSB 作 32bit 16bit 除法操作时 (MD[1:0] = 01) 存放 16bit 除数,DB15 为 MSB,DB0 为 LSB 作 32bit 位移操作时 (MD[1:0] = 10) 存放位移的次数 ( 此时只有 DB[4:0] 位有效 ) 例 :DB[4:0] = 1; 移位 1 次运算完成时 (RUN = 0) 存放 16bit 余数,DB15 为 MSB,DB0 为 LSB bit X 16-bit 数乘法 进行 16-bit X 16-bit 乘法操作时, 乘数和被乘数分别存放于寄存器 OPRDA1 OPRDA0 和 OPRDB1 OPRDB0 中 由于乘法符合交换律, 显然乘数和被乘数存放的寄存器也可以互相交换 写被乘数和乘数到寄存器 OPRDB1 OPRDB0 和 OPRDA1 OPRDA0 设置寄存器 MDSCON,MD[1:0] = 00,SIGNEN = 0 选择无符号乘法操作, 操作数用原码表示 ;SIGNEN = 1 选择有符号乘法操作, 操作数用补码表示, 最高位表示符号位 ; 置位 RUN 则启动运算 对乘法操作启动之前的寄存器设置没有顺序要求 当硬件完成操作后, 会自动将 MDSCON 中的 RUN 清 0 此时, 可以从相应寄存器中读取乘积 由于乘法操作只需要一个系统周期执行时间, 因此可以不用判断 DONE 标志位, 直接读取乘法结果 16-bit X 16-bit 乘积是一个 32-bit 数据, 存放于 OPRDA3 - OPRDA0, 其中 OPRDA3 是 MSB,OPRDA0 是 LSB 当读取乘积时, 对读取顺序没有要求, 但是按照从 MSB 到 LSB 读取 ( 或者倒过来 ) 是最方便的一种 读取操作不会改变寄存器中的乘积值 乘积将一直保留在 OPRDA3 - OPRDA0, 除非被硬件 / 软件改写 对于无符号的乘法操作, 操作数都是以原码的方式写入和结果以原码形式储存 ; 对于有符号的乘法操作, 操作数都是以补码的形式写入和结果以补码方式储存 95

96 bit 16-bit 数除法 进行 32-bit 16-bit 除法时,OPRDA3 - OPRDA0, 用于存放除法操作的被除数 ;OPRDB1 和 OPRDB0, 用于存放除法操作的除数 32-bit 16-bit 除法结果有一个 32-bit 商和一个 16-bit 余数 其中, 商存放于 OPRDA3 - OPRDA0,OPRDA3 是 MSB, OPRDA0 是 LSB 余数存放于 OPRDB1- OPRDB0, 其中 OPRDB1 是高位,OPRDB0 是低位 写除数到寄存器 OPRDB1 和 OPRDB0, 写被除数到寄存器 OPRDA3-OPRDA0 设置寄存器 MDSCON,MD[1:0] = 01,SIGNEN = 0 选择无符号除法操作, 操作数用原码表示 ;SIGNEN = 1 选择有符号除法操作, 操作数用补码表示, 最高位表示符号位 ; 置位 RUN 启动运算 对除法操作启动之前的寄存器设置没有顺序要求 由于除法操作需要八个系统周期执行时间, 如果读出 RUN 的值为 1 则表示运算未完成 当硬件完成操作后, 会自动将 MDSCON 中的 RUN 清 0 此时, 可以从相应寄存器中读取商和余数 当读取商或者余数时, 对读取顺序没有要求 读取操作不会改变寄存器中的商和余数 商和余数将一直保留在相应的寄存器中, 除非被硬件 / 软件改写 对于有符号除法运算, 对取余数规则描述如下 :-10 3, 商为 -3, 余数为 -1 而不是商为 -4, 余数为 +2 有符号除法中, 仅当除数为负数时需特别注意, 商没问题, 余数的符号是和 KEIL C 中得到的结果相反的 (application note 中有详细说明 ) 对于无符号的除法操作, 操作数都是以原码的方式写入和结果以原码形式储存 ; 对于有符号的除法操作, 操作数都是以补码的形式写入和商和余数以补码方式储存 bit 移位 32-bit 数据移位结果仍然是 32-bit 数据,32-bit 操作数存放于 OPRDA3 - OPRDA0, 位移次数存放在 OPDB0 中, 结果仍然存放于 OPRDA3 - OPRDA0,OPRDA3 是 MSB,OPRDA0 是 LSB 无符号数不论是左移操作还是右移操作, 移出数据的空位均是补 0 有符号数左移, 空位补 0, 最高位可能会溢出, 这点和 KEIL C 编译器一致 ; 右移, 空位补符号位 ( 正数右移, 最高位补 0; 负数右移最高位补 1) 操作也与 KEIL C 移位结果一致 写待移位数据到寄存器 OPRDA3-OPRDA0, 写待位移的次数到 OPRDB0(DB[4:0] 的值即为移位次数 ) 设置寄存器 MDSCON,MD[1:0] = 10, 选择移位操作, 设置 SLR 选择移位方向, 置位 RUN 位开始移位运算 对移位操作启动之前的寄存器设置没有顺序要求 当硬件完成操作后, 会自动将 MDSCON 中 RUN 清 0 此时, 可以从相应的寄存器中读取移位结果 由于移位操作只需要一个系统周期执行时间, 因此可以不用判断 RUN 标志位, 直接读取移位操作后的结果 读取操作不会改变寄存器中的移位结果 移位结果将一直保留在相应的寄存器中, 除非被硬件 / 软件改写 快速清空操作数 / 结果寄存器 MDSU 模块另带有快速清除所有操作数 / 结果寄存器功能 将 MDSCON 寄存器中的 MD[1:0] = 11, 置位 RUN 开始清 0 操作 将在一个系统周期时间内由硬件清 0 所有操作数结果寄存器 (OPRDA3-OPRDA0,OPRDB1-OPRDB0) 的值 注意事项 (1) 在硬件执行除法操作没有结束时试图读取运算结果 ( 即读取寄存器 OPRDA3-OPRDA0 和 OPRDB1 OPRDB0 中任意一个或者几个 ), 会得到不可预知的结果 但是, 读取动作不会影响硬件继续运算并得到正确结果 当硬件完成运算后, 仍然可以读取到正确的结果 (2) 移位操作中, 如果移位次数值为 0(DB[4:0] = 0), 则不会移位, 操作数寄存器 OPRDAx 和 OPRDBx 保持原有值不变 硬件自动将操作控制寄存器 MDSCON 的位 RUN 清 0, 其余位保持不变, 不会影响用户程序继续运行 (3) 在运算未完成时 (RUN = 1), 任何对 OPRDAx 和 OPRDBx 的写入操作都是无效的 (4) 有符号除法中, 除数为负数时用法要特别注意 异常状态 如果除法操作中除数为 0, 则不会执行除法操作, 操作数寄存器 OPRDAx 和 OPRDBx 保持原有值不变 硬件自动将操作控制寄存器 MDSCON 的位 RUN 清 0 并置位 DVERR 标志异常情况, 其余位保持不变, 不会影响用户程序继续运行 DVERR 异常标志位会在下一次启动运算时硬件自动清 0 96

97 8.3 运算放大器和比较器模块 特性 集成 2 个通用运算放大器, 放大器的输入输出端都开放, 放大器输出可直接作为 ADC 转换模块的输入或者做比较器的同相输入端 比较器 2 为多输入比较器, 并集成 PWM0/1/2 同步比较功能 比较器输出结果滤波后可以用作 PWM 故障检测输入信号 比较器 1/2 反相输入端参考信号可以从外部输入, 也可以采用内部 1.20V 电源基准 比较器 2 内置施密特窗口和数字滤波电路, 输出可触发不同类型中断 寄存器 Table 8.33 比较器 1 控制寄存器 B3H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CMP1CON CMP1EN C1NCHS C1OUT C1IF - C1PCHS C1DEB1 C1DEB0 读 / 写读 / 写读 / 写读读 / 写 - 读 / 写读 / 写读 / 写 位编号位符号说明 7 CMP MP1EN 6 C1NCHS 5 C1OUT 4 C1IF 2 C1PCHS 1-0 C1DEB[1:0] 比较器 1 使能控制位 0: 比较器 1 关闭 1: 比较器 1 开启 比较器 1 反相输入端选择位 0: 选择 C1N 作为比较器 1 反相输入端 1: 选择 V BG 内部 1.20V 基准源作为比较器 1 反相输入端注 : 需提前 100us 将 1.20V 基准源打开, 即将寄存器 [CMP2CON1:BGEN] 位置 1, 详情参见 CMP2CON1 寄存器描述 比较器 1 输出状态标志位 ( 表示经过滤波器以后的状态, 只读 ) 0: 比较器 1 输出低 1: 比较器 1 输出高 比较器 1 输出上升沿中断标志位 ( 经过滤波器以后 ) 0: 比较器 1 输出无上升沿, 没有产生中断 1: 比较器 1 输出产生上升沿, 发生中断请求 比较器 1 同相输入端选择位 0: 选择 C1P 作为比较器 1 同相输入端 1: 选择 OP1OUT 作为比较器 1 的同相输入端 比较器 1 输出信号滤波时间 00: 无滤波 01: 滤波时间常数为 1us 10: 滤波时间常数为 4us 11: 滤波时间常数为 16us 注 : 上述滤波常数时间不是精确值, 仅供参考 97

98 Table 8.34 比较器 2 控制寄存器 0 BBH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CMP2CON0 CMP2EN C2NCHS C2PCHS1 C2PCHS0 C2SMT1 C2SMT0 C2OUT C2IF 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读读 / 写 位编号位符号说明 7 CMP2EN 6 C2NCHS 比较器 2 使能控制位 0: 比较器 2 关闭 1: 比较器 2 开启 比较器 2 反相输入端选择位 0: 选择 C2N 作为比较器 2 反相输入端 1: 选择 V BG 内部 1.20V 基准源作为比较器 2 反相输入端注 : 需提前 100us 将 1.20V 基准源打开, 即将寄存器 [CMP2CON1:BGEN] 位置 1, 详情参见 CMP2CON1 寄存器描述 5-4 C2PCHS[1:0] 3-2 C2SMT[1:0 1:0] 1 C2OUT 0 C2IF 比较器 2 同相输入端选择位 00: 选择 C2P0 作为比较器 2 同相输入端 01: 选择 C2P1 作为比较器 2 同相输入端 10: 选择 C2P2 作为比较器 2 同相输入端 11: 选择 OP2OUT 作为比较器 2 同相输入端 比较器 2 施密特电压选择位 00: 没有施密特窗口特性 01: 施密特窗口为 5mv 10: 施密特窗口为 10mv 11: 施密特窗口为 20mv 比较器 2 输出状态标志位 ( 表示经过滤波器以后的状态, 只读 ) 0: 比较器 2 输出低 1: 比较器 2 输出高 比较器 2 中断标志位 0: 比较器 2 没有产生中断请求标志 1: 比较器 2 产生中断请求标志 注意 : 因为模拟比较器 2 有 3 个同相输入端外部端口 ( 不包括 OP2OUT), 实际应用时, 任意时刻只有一个输入端被选中, 但另外 2 个输入端外接的是模拟电平 此时需要将 3 个模拟输入端都配置为模拟输入口状态, 否则会漏电 ; 因为比较器 2 的同相输入端 C2P0-2 负向输入端 C2N 是和 ADC 的输入通道 AN0-AN2 AN4 是共享的, 因此这四个端口配置为模拟通道或 I/O 必須并且只能在 ADC 模块中的寄存器 ADCH1 配置, 分别受 CH0-CH2 CH4 控制 98

99 Table 8.35 ADC 通道配置寄存器 1 Table 8.36 放大器 & 比较器 2 控制寄存器 1 95H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADCH CH4 - CH2 CH1 CH0 读 / 写 读 / 写 - 读 / 写读 / 写读 / 写 位编号位符号说明 4,2-0 CH4,CH[2:0] CH[2:0] 通道配置 1:Pxy 配置为模拟输入口 (ADC 输入或比较器 2 同相输入 ) 0:Pxy 作为 I/O 口注 : 此控制位只是用来配置相应 PORT 口是否做模擬口用, 具体选中那一个输入做比较, 由寄存器 C2PCHS[1:0] 控制 BCH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CMP2CON1 PWMTRGS1 PWMTRGS0 TRGPOL BGEN AMP1EN AMP2EN C2IFS1 C2IFS0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-6 PWMTRGS[1:0] 5 TRGPOL 4 BGEN 3 AMP1EN 2 AMP2EN 1-0 C2IFS[1:0] 比较器 2 同步比较控制位 00: 连续比较模式, 无同步比较功能 01: 和 PWM0 输出同步 10: 和 PWM1 输出同步 11: 和 PWM2 输出同步 同步比较功能控制位 0: 仅在 PWM 输出有效期间比较 1: 仅在 PWM 输出无效期间比较 基准源 (1.20V 1.20V) 功能控制位 0: 关闭 1.20V 基准源 V BG 1: 开启 1.20V 基准源 V BG 注 : 基准源开启需要建立时间, 最长不超过 100us, 因此当需要用到 1.20V 基准源时, 需要提前 100us 将此标志位置 1 运算放大器 1 使能控制位 0: 运算放大器 1 关闭 1: 运算放大器 1 开启运算放大器开启时, 相应的输入输出引脚 I/O 功能关闭, 而做为模拟引脚使用运算放大器 2 使能控制位 0: 运算放大器 2 关闭 1: 运算放大器 2 开启运算放大器开启时, 相应的输入输出引脚 I/O 功能关闭, 而做为模拟引脚使用 比较器 2 中断模式选择位 00: 不触发中断标志 01: 下降沿触发, 比较器 2 输出由高变低时触发中断标志 10: 上升沿触发, 比较器 2 输出由低变高时触发中断标志 11: 双沿触发, 比较器 2 输出由高变低时和由低变高时都触发中断标志 99

100 Table 8.37 比较器 2 控制寄存器 2 8FH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CMP2CON2 C2FT1EN C2FT1S2 C2FT1S1 C2FT1S0 C2FT2EN C2FT2S2 C2FT2S1 C2FT2S0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 C2FT1EN 6-4 C2FT1S[2:0] 比较器 2 滤波器 1 使能位 0: 比较器 2 滤波器 1 关闭 1: 比较器 2 滤波器 1 开启滤波器 1 算法说明 : 用系统时钟采样滤波器输入采用数字积分, 如果采样结果为高电平, 计数器加 1, 否则计数器减 1; 计数器结果超出 C2FT1S[2:0] 设定的常数, 则滤波器输出 1, 否则输出 0 注 :1. 计数器上限设置为常数的 2 倍, 下限为 0, 超出上下限, 不执行加减动作 2. 滤波计数器初值设定 : 若比较器 2 中断设为上升沿触发, 计数器初始值为 0; 若设为下降沿触发, 则滤波计数器初值设为滤波常数 x2 若设为双沿触发或不触发, 则滤波计数器初值设为滤波常数 3. 滤波器输出稳定需要一个建立时间, 大致为滤波常数设置的时间, 如滤波常数设置为 256, 则在 256 个系统时钟后, 滤波器输出稳定, 在这之前, 滤波器输出不确定, 中断标志 C2IF 可能会被误置 1, 因此, 刚打开滤波器时, 需要在滤波器输出稳定后软件清除此中断标志位 比较器 2 滤波器 1 参数设置 000: 滤波器常数为 8 001: 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 C2FT2EN 2-0 C2FT2S[2:0] 比较器 2 滤波器 2 使能位 0: 比较器 2 滤波器 2 关闭 1: 比较器 2 滤波器 2 开启滤波器 2 算法说明 : 用系统时钟采样滤波器输入当滤波器 2 当前输出为 0 时, 若输入采样为 1, 计数器加 1; 若输入采样为 0, 则将计数器清 0; 当计数器超过 C2FT2S[2:0] 设定的滤波常数时, 滤波器输出翻转为 1, 同时计数器清 0 同理, 当滤波器 2 当前输出为 1 时, 若输入采样为 0, 计数器加 1, 若输入采样为 1, 则将计数器清 0, 当计数器超过 C2FT2S[2:0] 设定的滤波常数时, 滤波器输出翻转为 0, 同时计数器清 0 注 :1. 计数器初始值为 0 2. 滤波器输出稳定需要一个建立时间, 大致为滤波常数设置的时间, 如滤波常数设置为 256, 则在 256 个系统时钟后, 滤波器输出稳定, 在这之前, 滤波器输出不确定, 中断标志 C2IF 可能会被误置 1, 因此, 刚打开滤波器时, 需要在滤波器输出稳定后软件清除此中断标志位 比较器 2 滤波器 2 参数设置 000: 滤波器常数为 2 001: 滤波器常数为 4 010: 滤波器常数为 8 011: 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 : 滤波器常数为 256 注 :1. 滤波器 1 和滤波器 2 可单独有效, 也可同时有效, 同时有效时比较器 2 输出先经过滤波器 1 滤波, 再经过滤波器 2 滤波 2. 滤波器 1/2 打开前, 需先设置好比较器 2 中断模式控制位 C2IFS[1:0] 100

101 8.3.3 比较器用法 内置 2 个比较器, 比较器 1 和比较器 2, 比较器 1 的输出可以作为 PWM3 模块的故障输入检测信号, 自动迅速关闭 PWM3 输出, 从而实现快速保护, 也可以用在某些电压 / 电流闭环中 比较器 2 内置有可编程的施密特窗口, 同时集成滤波常数可编程的数字滤波电路, 同时提供中断功能, 比较适合用作需要精确比较的应用场合, 比如直流无刷电机的反电动势过零点检测 比较器 2 集成同步比较功能, 可以和 PWM0/PWM1/PWM2 输出同步, 如果 TRGPOL 设为 0, 那么只有当 MCPWM 输出为有效电平期间, 比较器 2 的输出结果才被采样, 给到后级滤波电路, 在 MCPWM 输出无效期间, 不采样比较器输出, 此时比较器 2 的输出会保持, 同时滤波器也停止计数, 当 MCPWM 输出再次有效时, 恢复对比较器 2 的采样和滤波计数 参见下图 (PWMTRGS[1:0] = 01,TRGPOL = 0) 比较器 2 的滤波是先经过滤波器 1 再经过滤波器 2, 如果只想用其中的一种滤波, 可以将另一种屏蔽, 也可以将两种都屏蔽 PWM0 C2N C2P0 orginal output output after synchrous output after synchrous & filter t1 t2 t3 t4 t1+t2 = Filter Constant t3+t4 = Filter Constant 比较器 2 同步比较示意图,(C2PCHS C2PCHS[1:0] = 0,PWMTRGS[1:0] = 01,TRGPOL = 0) 上图中的 orginal out 信号线为比较器 2 不滤波也不和 PWM0 信号同步时的 C2OUT; 上图中的 output after synchrous 信号线为比较器 2 不滤波但是和 PWM0 信号同步时的 C2OUT; 上图中的 output after synchrous & filter 信号线为先和 PWM0 同步再经滤波后的 C2OUT 101

102 比较器 1 和 2 的输出波形的产生流程具体可参考下图 : C1PCHS VDD C1P OP1OUT MUX CMP1EN C1DEB[1:0] C1OUT C1N BANDGAP Reference=1.20V MUX + - Debounce C1IF PWM 0/1/2Fault PWM 3 Fault C1NCHS CMP1 多通道输入模拟比较器 1 C2PCHS[1:0] VDD PWM0/1/2 C2P0 C2P1 C2P2 MUX MUX CMP2EN MUX MUX PWMTRGS[1:0] OP2OUT C2FT1S[2:0] C2FT2S[2:0] C2IFS[1:0] C2N BANDGAP Reference=1.20V MUX Filter1 Filter2 EDGE Detect C2IF C2OUT C2NCHS C2SMT[1:0] C2FT1EN C2FT2EN CMP2 多通道输入模拟比较器 2 102

103 比较器 2 可以通过设置寄存器 C2SMT[1:0] 设置施密特比较器窗口 ( 迟滞比较器 ), 如下图所示 : Schmit-Triger window INTPUT C2N Schmit-Triger window C2P VOH OUTPUT VOL C2SMT[1:0] = 0 C2SMT[1:0]!= 0 C2SMT[1:0] = 0 C2SMT[1:0]!= 0 103

104 8.4 增强型通用异步收发器 (EUART EUART) 特性 自带波特率发生器的 EUART 波特率发生器就是一个 15 位向上计数器 增强功能包括帧出错检测及自动地址识别 EUART 有四种工作方式 工作方式 EUART 有 4 种工作方式 在通信之前用户必须先初始化 SCON, 选择方式和波特率 在所有四种方式中, 任何将 SBUF 作为目标寄存器的写操作都会启动发送 在方式 0 中由条件 RI = 0 和 REN = 1 初始化接收 这会在 TXD 引脚上产生一个时钟信号, 然后在 RXD 引脚上移 8 位数据 在其它方式中由输入的起始位初始化接收 ( 如果 RI = 0 和 REN = 1) 外部发送器通信以发送起始位开始 EUART 工作方式列表 SM0 SM1 方式类型波特率帧长度起始位停止位第 9 位 同步 f SYS /(4 或 12) 8 位无无无 异步自带波特率发生器的溢出率 /16 10 位 1 1 无 异步 f SYS /(32 或 64) 11 位 1 1 0, 异步自带波特率发生器的溢出率 /16 11 位 1 1 0,1 方式 0: 同步, 半双工通讯 方式 0 支持与外部设备的同步通信 在 RXD 引脚上收发串行数据,TXD 引脚发送移位时钟 提供 TXD 引脚上的移位时钟, 因此这种方式是串行通信的半双工方式 在这个方式中, 每帧收发 8 位, 低位先接收或发送 通过置 SM2 位 (SCON.5) 为 0 或 1, 波特率固定为系统时钟的 1/12 或 1/4 当 SM2 位等于 0 时, 串行端口以系统时钟的 1/12 运行 当 SM2 位等于 1 时, 串行端口以系统时钟的 1/4 运行 与标准 8051 唯一不同的是, 在方式 0 中有 2 种波特率可选 功能块框图如下图所示 数据通过 RXD 引脚移入和移出串行端口, 移位时钟由 TXD 引脚输出 Transmit Shift Register System Clock 12 4 Write to SBUF TX START Internal Data Bus TX SHIFT PARIN LOAD CLOCK SOUT RXD SM2 0 1 TX CLOCK SERIAL CONTROLLER TI RI Serial Port Interrupt RX CLOCK SHIFT CLOCK TXD RI REN RX START LOAD SBUF RX SHIFT Read SBUF CLOCK RXD SIN PAROUT SBUF SBUF Receive Shift Register 104

105 任何将 SBUF 作为目标寄存器的写操作都会启动发送 下一个系统时钟 TX 控制块开始发送 数据转换发生在移位时钟的下降沿, 移位寄存器的内容逐次从左往右移位, 空位置 0 当移位寄存器中的所有 8 位都发送后,TX 控制模块停止发送操作, 然后在下一个系统时钟的上升沿将 TI 置位 (SCON.1) Write to SBUF RxD TxD D0 D1 D2 D3 D4 D5 D6 D7 TI Send Timing of Mode 0 REN(SCON.4) 置 1 和 RI(SCON.0) 清 0 初始化接收 下一个系统时钟启动接收, 在移位时钟的上升沿锁存数据, 接收转换寄存器的内容逐次向左移位 当所有 8 位数据都移到移位寄存器中后,RX 控制块停止接收, 在下一个系统时钟的上升沿 RI 置位, 直到被软件清零才允许下一次接收 RxD TxD D0 D1 D2 D3 D4 D5 D6 D7 RI 方式 1:8 位 EUART, 可变波特率, 异步全双工 Receive Timing of Mode 0 方式 1 提供 10 位全双工异步通信,10 位由一个起始位 ( 逻辑 0),8 个数据位 ( 低位为第一位 ) 和一个停止位 ( 逻辑 1) 组成 在接收时, 这 8 个数据位存储在 SBUF 中而停止位储存在 RB8(SCON.2) 中 方式 1 中的波特率固定为自带波特率发生器溢出率的 1/16 功能块框图如下图所示 : Transmit Shift Register STOP Baud rate Generator Write to SBUF Internal Data Bus PARIN START LOAD SOUT TXD overflow From 7FFF to 0000 TX START TX SHIFT CLOCK TX CLOCK SERIAL CONTROLLER TI RI Serial Port Interrupt SAMPLE RX CLOCK LOAD SBUF 1-TO-0 DETECTOR RX START RX SHIFT Read SBUF RXD BIT DETECTOR CLOCK SIN PAROUT D8 SBUF RB8 Internal Data Bus Receive Shift Register 105

106 任何将 SBUF 作为目标寄存器的写操作都会启动发送, 实际上发送是从 16 分频计数器中的下一次跳变之后的系统时钟开始的, 因此位时间与 16 分频计数器是同步的, 与对 SBUF 的写操作不同步 起始位首先在 TXD 引脚上移出, 然后是 8 位数据位 在发送移位寄存器中的所有 8 位数据都发送完后, 停止位在 TXD 引脚上移出, 在停止位发出的同时 TI 标志置位 Write to SBUF TxD Start D0 D1 D2 D3 D4 D5 D6 D7 Stop Shift CLK TI Send Timing of Mode 1 只有 REN 置位时才允许接收 当 RXD 引脚检测到下降沿时串行口开始接收串行数据 为此,CPU 对 RXD 不断采样, 采样速率为波特率的 16 倍 当检测下降沿时,16 分频计数器立即复位, 这有助于 16 分频计数器与 RXD 引脚上的串行数据位同步 16 分频计数器把每一位的时间分为 16 个状态, 在第 状态时, 位检测器对 RXD 端的电平进行采样 为抑制噪声, 在这 3 个状态采样中至少有 2 次采样值一致数据才被接收 如果所接收的第一位不是 0, 说明这位不是一帧数据的起始位, 该位被忽略, 接收电路被复位, 等待 RXD 引脚上另一个下降沿的到来 若起始位有效, 则移入移位寄存器, 并接着移入其它位到移位寄存器 8 个数据位和 1 个停止位移入之后, 移位寄存器的内容被分别装入 SBUF 和 RB8 中,RI 置位, 但必须满足下列条件 : 1. RI = 0 2. SM2 = 0 或者接收的停止位 = 1 如果这些条件被满足, 那么停止位装入 RB8,8 个数据位装入 SBUF,RI 被置位 否则接收的帧会丢失 这时, 接收器将重新去探测 RXD 端是否另一个下降沿 用户必须用软件清零 RI, 然后才能再次接收 RxD Start D0 D1 D2 D3 D4 D5 D6 D7 Stop Bit Sample Shift CLK RI Receive Timing of Mode 1 106

107 方式 2:9 位 EUART, 固定波特率, 异步全双工 这个方式使用异步全双工通信中的 11 位 一帧由一个起始位 ( 逻辑 0),8 个数据位 ( 低位为第一位 ), 一个可编程的第 9 数据位和一个停止位 ( 逻辑 1) 组成 方式 2 支持多机通信和硬件地址识别 ( 详见多机通讯章节 ) 在数据传送时, 第 9 数据位 (SCON 中的 TB8) 可以写 0 或 1, 例如, 可写入 PSW 中的奇偶位 P, 或用作多机通信中的数据 / 地址标志位 当接收到数据时, 第 9 数据位移入 RB8 而停止位不保存 PCON 中的 SMOD 位选择波特率为系统工作频率的 1/32 或 1/64 功能块框图如下所示 : SMOD System Clock Write to SBUF TX START Internal Data Bus TX SHIFT TB8 Transmit Shift Register D8 STOP PARIN START LOAD CLOCK SOUT TXD TX CLOCK SERIAL CONTROLLER TI RI Serial Port Interrupt SAMPLE RX CLOCK LOAD SBUF 1-TO-0 DETECTOR RX START RX SHIFT Read SBUF RXD BIT DETECTOR CLOCK SIN PAROUT D8 SBUF RB8 Internal Data Bus Receive Shift Register 任何将 SBUF 作为目标寄存器的写操作都会启动发送, 同时也将 TB8 载入到发送移位寄存器的第 9 位中 实际上发送是从 16 分频计数器中的下一次跳变之后的系统时钟开始的, 因此位时间与 16 分频计数器是同步的, 与对 SBUF 的写操作不同步 起始位首先在 TXD 引脚上移出, 然后是 9 位数据 在发送转换寄存器中的所有 9 位数据都发送完后, 停止位在 TXD 引脚上移出, 在停止位开始发送时 TI 标志置位 Write to SBUF TxD Start D0 D1 D2 D3 D4 D5 D6 D7 D8 Stop Shift CLK TI Send Timing of Mode 2 107

108 只有 REN 置位时才允许接收 当 RXD 引脚检测到下降沿时串行口开始接收串行数据 为此,CPU 对 RXD 不断采样, 采样速率为波特率的 16 倍 当检测下降沿时,16 分频计数器立即复位 这有助于 16 分频计数器与 RXD 引脚上的串行数据位同步 16 分频计数器把每一位的时间分为 16 个状态, 在第 状态时, 位检测器对 RXD 端的电平进行采样 为抑制噪声, 在这 3 个状态采样中至少有 2 次采样值一致数据才被接收 如果所接收的第一位不是 0, 说明这位不是一帧数据的起始位, 该位被忽略, 接收电路被复位, 等待 RXD 引脚上另一个下降沿的到来 若起始位有效, 则移入移位寄存器, 并接着移入其它位到移位寄存器 9 个数据位和 1 个停止位移入之后, 移位寄存器的内容被分别装入 SBUF 和 RB8 中,RI 置位, 但必须满足下列条件 : 1. RI = 0 2. SM2 = 0 或者接收的第 9 位 = 1, 且接收的字节符合约定从机地址 如果这些条件被满足, 那么第 9 位移入 RB8,8 位数据移入 SBUF,RI 被置位 否则接收的数据帧会丢失 在停止位的当中, 接收器回到寻找 RXD 引脚上的另一个下降沿 用户必须用软件清除 RI, 然后才能再次接收 RxD Start D0 D1 D2 D3 D4 D5 D6 D7 D8 Stop Bit Sample Shift CLK RI Receive Timing of Mode 2 方式 3:9 位 EUART, 可变波特率, 异步全双工方式 3 使用方式 2 的传输协议以及方式 1 的波特率产生方式 Transmit Shift Register STOP Baud rate Generator Write to SBUF TB8 Internal Data Bus D8 PARIN START SOUT TXD overflow From 7FFF to 0000 TX START TX SHIFT LOAD CLOCK 16 TX CLOCK TI SERIAL CONTROLLER Serial Port Interrupt 16 RI RX CLOCK SAMPLE LOAD SBUF 1-TO-0 DETECTOR RX START RX SHIFT Read SBUF RXD BIT DETECTOR CLOCK PAROUT SIN D8 SBUF RB8 Internal Data Bus Receive Shift Register 108

109 可微调波特率 EUART 自带一个波特率发生器, 它实质上就是一个 15 位递增计数器 Fsys Overflow 15-bit timer ` To EUART From 7FFFH to 0000H SBRTEN=1 SBRTH[14:8],SBRTL7:0] Baudrate Generator for EUART 由图得到, 波特率发生器的溢出率为 Fsys SBRToverflowrate =, SBRT = [ SBRTH, SBRTL] SBRT 因此,EUART 在各模式下的波特率计算公式如下 在方式 0 中, 波特率可编程为系统时钟的 1/12 或 1/4, 由 SM2 位决定 当 SM2 为 0 时, 串行端口在系统时钟的 1/12 下运行 当 SM2 为 1 时, 串行端口在系统时钟的 1/4 下运行 在方式 1 和方式 3 中, 波特率可微调, 精度为一个系统时钟, 公式如下 : BaudRate = 16 Fsys ( SBRT ) + BFINE 例如 :Fsys = 8MHz, 需要得到 Hz 的波特率,SBRT 和 SFINE 值计算方法如下 : /16/ = 4.34 SBRT = = 由 BaudRate 计算公式 : = /(16 X 4 + BFINE) 得到 :BFINE = 此微调方式计算出的实际波特率为 , 误差为 0.64%; 以往方式计算出的波特率误差为 8.5% 在方式 2 中, 波特率固定为系统时钟的 1/32 或 1/64, 由 SMOD 位 (PCON.7) 中决定 当 SMOD 位为 0 时,EUART 以系统时钟的 1/64 运行 当 SMOD 位为 1 时,EUART 以系统时钟的 1/32 运行 SMOD f SYS BaudRate = 2 ( )

110 8.4.4 多机通讯 软件地址识别 方式 2 和方式 3 具有适用于多机通讯功能 在这两个方式下, 接收的是 9 位数据, 第 9 位移入 RB8 中, 之后是停止位 可以这样设定 EUART: 当接收到停止位, 且 RB8 = 1 时, 串行口中断有效 ( 请求标志 RI 置位 ) 此时置位 SCON 寄存器的 SM2,EUART 工作在多机通讯模式 在多机通讯系统中, 按如下所述来使用这一功能 当主机要发送一数据块给几个从机中的一个时, 先发送一地址字节, 以寻址目标从机 地址字节与数据字节可用第 9 数据位来区别, 地址字节的第 9 位为 1, 数据字节的第 9 位为 0 如果从机 SM2 为 1, 则不会响应数据字节中断 地址字节可以使所有从机产生中断, 每一个从机都检查所接收到的地址字节, 以判别本机是不是目标从机 被寻到的从机对 SM2 位执行清零操作, 并准备接收即将到来的数据字节 当接收完毕时, 从机再一次将 SM2 置位 没有被寻址的从机, 则保持 SM2 位为 1, 不响应数据字节 注意 : 在方式 0 中,SM2 用来 2 倍频波特率 在方式 1 中,SM2 用来检测停止位是否有效, 如果 SM2 = 1, 接收中断不会响应直到接收到一个有效的停止位 自动 ( 硬件 ) 地址识别在方式 2 和方式 3 中,SM2 置位,EUART 运行状态如下 : 接收到停止位,RB8 的第 9 位为 1( 地址字节 ), 且接收到的数据字节符合 EUART 的从机地址,EUART 产生一个中断 从机将 SM2 清零, 接收后续数据字节 第 9 位为 1 表明该字节是地址而非数据 当主机要发送一组数据给几个从机中的一个时, 必须先发送目标从机地址 所有从机等待接收地址字节, 为了确保仅在接收地址字节时产生中断,SM2 位必须置位 自动地址识别的特点是只有地址匹配的从机才能产生中断, 硬件完成地址比较 中断产生后, 地址匹配的从机清零 SM2, 继续接收数据字节 地址不匹配的从机不受影响, 将继续等待接收和它匹配的地址字节 全部信息接收完毕后, 地址匹配的从机应该再次把 SM2 置位, 忽略所有传送的非地址字节, 直到接收到下一个地址字节 使用自动地址识别功能时, 主机可以通过调用给定的从机地址选择与一个或多个从机通信 主机使用广播地址可以寻址所有从机 有两个特殊功能寄存器, 从机地址 (SADDR) 和地址屏蔽 (SADEN) 从机地址是一个 8 位的字节, 存于 SADDR 寄存器中 SADEN 用于定义 SADDR 各位的有效与否, 如果 SADEN 中某一位为 0, 则 SADDR 中相应位被忽略, 如果 SADEN 中某一位置位, 则 SADDR 中相应位将用于产生约定地址 这可以使用户在不改变 SADDR 寄存器中的从机地址的情况下灵活地寻址多个从机 从机 1 从机 2 SADDR SADEN( 为 0 的位被忽略 ) 约定地址 10100x0x 10100xx1 广播地址 (SADDR 或 SADEN) x 从机 1 和从机 2 的约定地址最低位是不同的 从机 1 忽略了最低位, 而从机 2 的最低位是 1 因此只与从机 1 通讯时, 主机必须发送最低位为 0 的地址 ( ) 类似地, 从机 1 的第 1 位为 0, 从机 2 的第 1 位被忽略 因此, 只与从机 2 通讯时, 主机必须发送第 1 位为 1 的地址 ( ) 如果主机需要同时与两从机通讯, 则第 0 位为 1, 第 1 位为 0, 第 2 位被两从机都忽略, 两个不同的地址用于选定两个从机 ( 和 ) 主机可以通过广播地址与所有从机同时通讯 这个地址等于 SADDR 和 SADEN 的位或, 结果中的 0 表示该位被忽略 多数情况下, 广播地址为 0xFFh, 该地址可被所有从机应答 系统复位后,SADDR 和 SADEN 两个寄存器初始化为 0, 这两个结果设定了约定地址和广播地址为 XXXXXXXX( 所有位都被忽略 ) 这有效地去除了多从机通讯的特性, 禁止了自动寻址方式 这样的 EUART 将对任何地址都产生应答, 兼容了不支持自动地址识别的 8051 控制器 用户可以按照上面提到的方法实现软件地址识别的多机通讯 110

111 帧出错检测 当寄存器 PCON 中的 SSTAT 位为逻辑 1 时, 帧出错检测功能才有效 3 个错误标志位被置位后, 只能通过软件清零, 尽管后续接收的帧没有任何错误也不会自动清零 注意 :SSTAT 位必须为逻辑 1 是访问状态位 (FE,RXOVR 和 TXCOL),SSTAT 位为逻辑 0 时是访问方式选择位 (SM0,SM1 和 SM2) 发送冲突 如果在一个发送正在进行时, 用户软件写数据到 SBUF 寄存器时, 发送冲突位 (SCON 寄存器中的 TXCOL 位 ) 置位 如果发生了冲突, 新数据会被忽略, 不能被写入发送缓冲器 接收溢出 如果在接收缓冲器中的数据未被读取之前,RI 清零, 又有新的数据存入接收缓冲器, 那么接收溢出位 (SCON 寄存器中的 RXOV 位 ) 置位 如果发生了接收溢出, 接收缓冲器中原来的数据将丢失 帧出错 如果检测到一个无效 ( 低 ) 停止位, 那么帧出错位 ( 寄存器 SCON 中的 FE) 置位 注意 : 在发送之前 TXD, 引脚必须被设置为输出高电平 寄存器 Table 8.38 电源控制寄存器 87H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PCON SMOD SSTAT IT41 IT40 GF1 GF0 PD IDL 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 Table 8.39 EUART 数据缓冲器寄存器 位编号位符号说明 7 SMOD 6 SSTAT 5-4 IT4[1:0] 3-2 GF[1:0] 1 PD 0 IDL 波特率加倍器 0: 在方式 2 中, 波特率为系统时钟的 1/64 1: 在方式 2 中, 波特率为系统时钟的 1/32 SCON[7:5] 功能选择 0:SCON[7:5] 工作方式作为 SM0,SM1,SM2 1:SCON[7:5] 工作方式作为 FE,RXOV,TXCOL 外部中断 4 模式设置位 用于软件的通用标志位 掉电模式控制位 空闲模式控制位 99H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SBUF SBUF.7 SBUF.6 SBUF.5 SBUF.4 SBUF.3 SBUF.2 SBUF.1 SBUF.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 SBUF[7:0] 这个寄存器寻址两个寄存器 : 一个移位寄存器和一个接收锁存寄存器 SBUF 的写入将发送字节到移位寄存器中, 然后开始传输 SBUF 的读取返回接收锁存器中的内容 111

112 Table 8.40 EUART 控制及状态寄存器 98H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SCON SM0/FE SM1/RXOV SM2/TXCOL REN TB8 RB8 TI RI 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-6 SM[0:1] 7 FE 6 RXOV 5 SM2 5 TXCOL 4 REN 3 TB8 2 RB8 1 TI 0 RI EUART 串行方式控制位,SST SSTAT = 0 00: 方式 0, 同步方式, 固定波特率 01: 方式 1,8 位异步方式, 可变波特率 10: 方式 2,9 位异步方式, 固定波特率 11: 方式 3,9 位异步方式, 可变波特率 EUART 帧出错标志位, 当 FE 位被读时,SSTAT 位必须被置位 0: 无帧出错, 由软件清零 1: 帧出错, 由硬件置位 EUART 接收溢出标志位, 当 RXOV 位被读时,SSTAT 位必须被置位 0: 无接收溢出, 由软件清零 1: 接收溢出, 由硬件置位 EUART 多处理机通讯允许位 ( 第 9 位 1 校验器 ),SSTAT = 0 0: 在方式 0 下, 波特率是系统时钟的 1/12 在方式 1 下, 禁止停止位确认检验, 任何停止位都会置位 RI 在方式 2 和 3 下, 任何字节都会置位 RI 1: 在方式 0 下, 波特率是系统时钟的 1/4 在方式 1 下, 允许停止位确认检验, 只有有效的停止位 (1) 才能置位 RI 在方式 2 和 3 下, 只有地址字节 ( 第 9 位 = 1) 才能置位 RI EUART 发送冲突标志位, 当 TXCOL 位被读时,SSTAT 位必须被置位 0: 无发送冲突, 由软件清零 1: 发送冲突, 由硬件置位 EUART 接收器允许位 0: 接收禁止 1: 接收允许 在 EUART 的方式 2 和 3 下发送的第 9 位, 由软件置位或清零 在 EUART 的方式 1,2 和 3 下接收的第 9 位在方式 0 下, 不使用 RB8 在方式 1 下, 如果接收中断发生, 停止位移入 RB8 在方式 2 和 3 下, 接收第 9 位 EUART 的传送中断标志位 0: 由软件清零 1: 由硬件置位 EUART 的接收中断标志位 0: 由软件清零 1: 由硬件置位 112

113 Table 8.41 EUART 从机地址及地址屏蔽寄存器 Table 8.42 EUART 波特率发生器寄存器 Table 8.43 EUART 波特率发生器微调寄存器 9AH-9BH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SADDR (9AH) SADDR.7 SADDR.6 SADDR.5 SADDR.4 SADDR.3 SADDR.2 SADDR.1 SADDR.0 SADEN (9BH) SADEN.7 SADEN.6 SADEN.5 SADEN.4 SADEN.3 SADEN.2 SADEN.1 SADEN.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 SADDR[7:0] 7-0 SADEN[7:0] 寄存器 SADDR 定义了 EUART 的从机地址 寄存器 SADEN 是一个位屏蔽寄存器, 决定 SADDR 的哪些位被检验 0:SADDR 中的相应位被忽略 1:SADDR 中的相应位对照接收到的地址被检验 FDH- H-FE FEH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SBRTH (FEH FEH) SBRTEN SBRT.14 SBRT.13 SBRT.12 SBRT.11 SBRT.10 SBRT.9 SBRT.8 SBRTL (FDH FDH) SBRT.7 SBRT.6 SBRT.5 SBRT.4 SBRT.3 SBRT.2 SBRT.1 SBRT.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 SBRTEN EUART 波特率发生器使能控制位 0: 关闭 ( 默认 ) 1: 打开 SBRT[14 14:0] EUART 波特率发生器计数器高 7 位和低 8 位寄存器 A4H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 BFINE BFINE.3 BFINE.2 BFINE.1 BFINE.0 读 / 写 读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 3-0 BFINE[3:0] EUART 波特率发生器微调数据寄存器 113

114 8.5 模 / 数转换模块 (ADC ADC) 特性 12 位分辨率 /10 位分辨率可选 参考电压可选外接 V REF 或 V DD 最多 15 路模拟输入 启动一次 ADC 可以自动完成多通道转换 ( 序列 ), 而且每个通道都可以配置为多路模拟输入中的任意一路 序列可配置为单通道或多通道, 一个序列最多可包含 16 个通道, 转换结果保存在 16 个结果寄存器中 存在两种工作模式 : 序列转换模式和连续转换模式 序列转换时相邻通道转换之间的时间间隔可由软件设定 可由 PWM 或 Timer2 的溢出信号自动触发 AD 转换 单通道转换速率最高可达 1MSPS 序列转换模式和连续转换模式都带比较功能 包含一个单端型 12 位逐次逼近型模数转换器 (ADC,Analog-to-Digit Converter), 模块图如图 所示 ADC 基准电压在芯片复位后默认使用 V DD, 用户也可以选择外部 V REF 端口的输入作为基准电压 该模块中有 15 路模拟输入通道 (CH0 - CH11,OP1OUT,OP2OUT,V BG ), 都可以编入序列中自动进行转换 结果储存在对应的结果寄存器 ADDxH,ADDxL(x = 0-15) 中, 每转换一次序列, 结果寄存器的值更新一次, 并作一次比较 结果寄存器和模拟输入通道之间的映射关系可以随意编程, 从而组成一个转换序列, 而且可以将某一模拟输入通道在序列中重复编程, 从而在结果寄存器中获得此模拟输入通道连续多次转换的结果 当启动连续转换功能时, 序列自动循环启动转换, 结果寄存器也不断更新, 并将每次的更新值与极限值作比较 对于单个通道, 转换速率最高可达 1MSPS, 可由寄存器设置 ADC 时钟速率以及采样时间 序列中相邻通道之间的时间间隔亦可通过寄存器设置 (TGAP[2:0]) 114

115 8.5.2 ADC 模块图 Software Trigger Event Trigger sequence mode SEQCH0 State + pointer GRP[3:0] SEQCHn + + SEQCH15 ADDLTL/H ADDGTL/H Compare Logic ADGIF ADLIF 4 12 CH0 CH1 MUX 4 SOC Mode Arbiter SOC EOC EOC 4 MUX... ADD0L/H... ADD15L/H CH11 OP1OUT OP2OUT MUX 12-Bits ADC 12 MUX VBG CH3/VREF 0 1 ADC_Clk 12 4 AVDD ADCON1[REFC] 1 0 Refc Time Gap Logic Pre-Counter for ADC clock,4-bit REG MUX ADD0L/H ADDnL/H ADD15L/H SOC Stands for Start of Convertion EOC Stands for End of Convertion n = ADCH2[GRP] ADT[TADC] System Clock 图 ADC 模块图 115

116 ADC 寄存器 ADC 模块所使用寄存器如下 : 功能名称寄存器描述 ADC 时钟设置 ADT 设置 ADC 时钟与采样时间 ADC 精度模式选择 ADC 控制 映像控制及部分 AD 通道配置 ADCON1 ADCON2 SEQCON AD 模块使能 启动 参考电压的选择 及序列转换完成中断标志 事件触发设置 转换完成中断允许 连续转换功能使能位 序列通道总数设置 相邻通道之间时间间隔设置 通道映像控制 AD 通道配置 1 ADCH1 设置 AD 通道引脚为 AD 通道功能或 I/O 功能 AD 通道配置 2 ADCH2 设置 AD 通道引脚为 AD 通道功能或 I/O 功能 通道和转换顺序设置 SEQCHx 指定序列中的通道以及转换顺序,x = 0-15 ADC 结果寄存器 上限比较寄存器 下限比较寄存器 ADDxL SEQCHx 中指定通道转换值的低位,x = 0-15 ADDxH SEQCHx 中指定通道转换值的高位,x = 0-15 ADDGTL ADDGTH ADDLTL ADDLTH 上限比较寄存器的低位 上限比较寄存器的高位 下限比较寄存器的低位 下限比较寄存器的高位 比较控制寄存器 ADCMPCON 设置比较中断以及用于比较的结果寄存器 116

117 Table 8.44 ADC 时钟控制寄存器 注意 : 1. 即使 TS[3:0] = 0000, 最小采样时间为 2t AD ; 即使 TS[3:0] = 1111, 最大采样时间为 15t AD ; 2. 在设置 TS[3:0] 前, 请估算连接到 ADC 输入引脚的串联电阻 ; 3. 选择 2 * t AD 为采样时间时, 请确保连接到 ADC 输入引脚的串联电阻小于 10kΩ; 94H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADT TADC3 TADC2 TADC1 TADC0 TS3 TS2 TS1 TS0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-4 TADC [3:0] 3-0 TS [3:0] ADC 时钟周期选择 0000:ADC 时钟周期 t AD = 1 t SYS 0001:ADC 时钟周期 t AD = 2 t SYS 0010:ADC 时钟周期 t AD = 3 t SYS 0011:ADC 时钟周期 t AD = 4 t SYS 0100:ADC 时钟周期 t AD = 6 t SYS 0101:ADC 时钟周期 t AD = 8 t SYS 0110:ADC 时钟周期 t AD = 12 t SYS 0111:ADC 时钟周期 t AD = 16 t SYS 1000:ADC 时钟周期 t AD = 24 t SYS 1001:ADC 时钟周期 t AD = 32 t SYS 1010:ADC 时钟周期 t AD = 48 t SYS 1011:ADC 时钟周期 t AD = 64 t SYS 1100:ADC 时钟周期 t AD = 96 t SYS 1101:ADC 时钟周期 t AD = 128 t SYS 1110:ADC 时钟周期 t AD = 192 t SYS 1111:ADC 时钟周期 t AD = 1.5 t SYS 采样时间选择 2 t AD 采样时间 = (TS [3:0]+1) * t AD 15 t AD 4. 12bit 模式下一个通道的总共转换时间 = 14t AD + 采样时间 ;10bit 模式下一个通道的总共转换时间 = 12t AD + 采样时间 ; 5. ADC 工作在 10BIT 模式下, 可以提高 ADC 的转换效率, 在 10BIT 模式下一个通道的转换时间比 12BIT 模式下能节省 2 个 t AD 117

118 Table 8.45 ADC 控制寄存器 1 93H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADCON1 ADON ADCIF SC REFC ADCIE PWM TRGEN TIM TRGEN GO/DONE 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 ADON 6 ADCIF ADC 允许位 0: 禁止 ADC 模块 1: 允许 ADC 模块 序列转换完成中断标志位 0: 无序列转换完成标志, 软件清 0 1: 由硬件置 1 表示已完成序列转换 ( 在连续转换时, 每次序列转换完成都会置 1) 5 SC 4 REFC 3 ADCIE 2 PWMTRGEN 1 TIMTRGEN GO/DONE 连续转换控制位 : 连续转换功能禁止, 将 GO/DONE 置 1 启动一次序列转换并自动将制定结果进行比较 : 连续转换功能打开, 将 GO/DONE 置 1 后, 完成一次序列转换后自动启动下一次序列转换 两次序列转换的间隔时间也受 TGAP[2:0] 控制, 并且自动将转换结果进行比较, 参见 ADC 比较章节 基准电压选位 0: 选择 V DD 为基准电压 1: 选择外部 V REF 端口输入为基准电压 序列转换完成中断允许位 0: 禁止 ADC 转换中断, 但是 ADCIF 标志不受影响 1: 允许 ADC 转换中断 PWM0/1/2 模块溢出信号启动序列转换控制位 0: 不允许此功能 1: 允许 PWM0/1/2 模块的触发信号启动一次 AD 转换序列 TIMER2 溢出信号启动序列转换控制位 0: 不允许此功能 1: 允许 Timer2 溢出信号会启动一次 AD 转换序列 序列转换启动控制 / 状态标志位 0: 未进行序列转换 / 连续转换或已完成 1:SC = 0 时, 置 1 开始序列转换, 在转换过程中保持为 1, 转换完成后硬件自动清 0( 若转换期间清 0 此位会立即终止序列转换 ) SC = 1 时, 置 1 开始连续转换, 则该位不会由硬件清 0, 可以由软件清 0 立即终止转换 注意 : 当选择外部 VREF 端口作为基准电压时 (REFC = 1),P0.5 作为 V REF 输入引脚而非 AN3 输入口 118

119 Table 8.46 ADC 控制寄存器 2 92H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADCON2 GRP3 GRP2 GRP1 GRP0 MODE TGAP2 TGAP1 TGAP0 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 读 / 写 位编号 位符号 说明 7-4 GRP[3:0] 3 MODE 2-0 TGAP[2:0] ADC 序列的通道数量设置位 0: 待转换序列的通道总数为 1, 所选的通道寄存器为 SEQCH0 1: 待转换序列的通道总数为 2, 所选的通道寄存器为 SEQCH0 - SEQCH1 2: 待转换序列的通道总数为 3, 所选的通道寄存器为 SEQCH0 - SEQCH2 3: 待转换序列的通道总数为 4, 所选的通道寄存器为 SEQCH0 - SEQCH3 4: 待转换序列的通道总数为 5, 所选的通道寄存器为 SEQCH0 - SEQCH4 5: 待转换序列的通道总数为 6, 所选的通道寄存器为 SEQCH0 - EQCH5 6: 待转换序列的通道总数为 7, 所选的通道寄存器为 SEQCH0 - SEQCH6 7: 待转换序列的通道总数为 8, 所选的通道寄存器为 SEQCH0 - SEQCH7 8: 待转换序列的通道总数为 9, 所选的通道寄存器为 SEQCH0 - SEQCH8 9: 待转换序列的通道总数为 10, 所选的通道寄存器为 SEQCH0 - SEQCH9 10: 待转换序列的通道总数为 11, 所选的通道寄存器为 SEQCH0 - SEQCH10 11: 待转换序列的通道总数为 12, 所选的通道寄存器为 SEQCH0 - SEQCH11 12: 待转换序列的通道总数为 13, 所选的通道寄存器为 SEQCH0 - SEQCH12 13: 待转换序列的通道总数为 14, 所选的通道寄存器为 SEQCH0 - SEQCH13 14: 待转换序列的通道总数为 15, 所选的通道寄存器为 SEQCH0 - SEQCH14 15: 待转换序列的通道总数为 16, 所选的通道寄存器为 SEQCH0 - SEQCH15 ADC 转换模式选择 0:12BIT 模式 1:10BIT 模式 序列中时相邻通道之间时间间隔设置位段 TGAP[2:0] 位段定义了在一次序列转换中, 一个通道转换完毕到下一个通道开始采样之间的时间间隔, 同时在连续转换模式中, 一次序列转换完成到启动下一次序列的等待时间也受此寄存器控制 000: 无等待时间 001:2ADC 时钟周期 010:4ADC 时钟周期 011:8ADC 时钟周期 100:16ADC 时钟周期 101:32ADC 时钟周期 110:64ADC 时钟周期 111:128ADC 时钟周期 119

120 Table 8.47 映射控制寄存器 A6H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SEQCON ALR - - REGSEL REG3 REG2 REG1 REG0 读 / 写读 / 写 - - 读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 ALR 4 REGSEL ADC 结果左右对齐选择位 0: 结果寄存器 ADDxL/H(x = 0-15) 中存储的 12-bit 结果按照左对齐存放, 高 8 位存放在 ADDxH 中, 低 4 位存放在 ADDxL 中的高 4 位 1: 结果寄存器 ADDxL/H(x = 0-15) 中存储的 12-bit 结果按照右对齐存放, 高 4 位存放在 ADDxH 的低 4 位中, 低 8 位存放在 ADDxL 中 注意 : 此标志位只能在 GO/DONE 为 0 时修改,GO/ GO/DONE 为 1( 也即 ADC 在转换中或连续转换功能开启 ) 时, 此标志位无法修改 ADC 结果寄存器与通道寄存器映射切换控制位 0: 直接寻址区中 96H 地址和 97H 地址作为 ADC 结果寄存器使用, 软件读写该地址即操作寄存器 ADDxL/H(x = 0-15) 1 : 直接寻址区中 96H 地址作为通道寄存器使用, 软件读写该地址即操作寄存器 SEQCHx(x = 0-15) 3-0 REG[3:0] 结果寄存器 / 通道寄存器选择位当 REGSEL = 0 时 : 0: 直接寻址区中 96H 和 97H 地址映射为 ADD0L 和 ADD0H 1: 直接寻址区中 96H 和 97H 地址映射为 ADD1L 和 ADD1H 2: 直接寻址区中 96H 和 97H 地址映射为 ADD2L 和 ADD2H 3: 直接寻址区中 96H 和 97H 地址映射为 ADD3L 和 ADD3H 4: 直接寻址区中 96H 和 97H 地址映射为 ADD4L 和 ADD4H 5: 直接寻址区中 96H 和 97H 地址映射为 ADD5L 和 ADD5H 6: 直接寻址区中 96H 和 97H 地址映射为 ADD6L 和 ADD6H 7: 直接寻址区中 96H 和 97H 地址映射为 ADD7L 和 ADD7H 8: 直接寻址区中 96H 和 97H 地址映射为 ADD8L 和 ADD8H 9: 直接寻址区中 96H 和 97H 地址映射为 ADD9L 和 ADD9H 10: 直接寻址区中 96H 和 97H 地址映射为 ADD10L 和 ADD10H 11: 直接寻址区中 96H 和 97H 地址映射为 ADD11L 和 ADD11H 12: 直接寻址区中 96H 和 97H 地址映射为 ADD12L 和 ADD12H 13: 直接寻址区中 96H 和 97H 地址映射为 ADD13L 和 ADD13H 14: 直接寻址区中 96H 和 97H 地址映射为 ADD14L 和 ADD14H 15: 直接寻址区中 96H 和 97H 地址映射为 ADD15L 和 ADD15H 当 REGSEL = 1 时 : 0: 直接寻址区中 96H 地址映射为 SEQCH0 1: 直接寻址区中 96H 地址映射为 SEQCH1 2: 直接寻址区中 96H 地址映射为 SEQCH2 3: 直接寻址区中 96H 地址映射为 SEQCH3 4: 直接寻址区中 96H 地址映射为 SEQCH4 5: 直接寻址区中 96H 地址映射为 SEQCH5 6: 直接寻址区中 96H 地址映射为 SEQCH6 7: 直接寻址区中 96H 地址映射为 SEQCH7 8: 直接寻址区中 96H 地址映射为 SEQCH8 9: 直接寻址区中 96H 地址映射为 SEQCH9 10: 直接寻址区中 96H 地址映射为 SEQCH10 11: 直接寻址区中 96H 地址映射为 SEQCH11 12: 直接寻址区中 96H 地址映射为 SEQCH12 13: 直接寻址区中 96H 地址映射为 SEQCH13 14: 直接寻址区中 96H 地址映射为 SEQCH14 15: 直接寻址区中 96H 地址映射为 SEQCH15 120

121 Table 8.48 ADC 通道配置寄存器 1 Table 8.49 ADC 通道配置寄存器 2 注意 : V BG 为内部基准源, 电平为 1.20V, 误差 +/-20mV V BG 的开关控制位 BGEN 在运放和比较器模块的 CMP2CON1 寄存器中设置, 如下表所示 95H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADCH1 CH7 CH6 CH5 CH4 CH3 CH2 CH1 CH0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 CH[7:0] 通道配置 1:P0x(x = 2-7) 和 P4x(x = 0-1) 配置为模拟输入口 (ADC 输入或比较器 2 同相输入 ) 0:P0x(x = 2-7) 和 P4x(x = 0-1) 作为 I/O 口 A5H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADCH2 CH11 CH10 CH9 CH BGCHOP 读 / 写读 / 写读 / 写读 / 写读 / 写 读 / 写 位编号位符号说明 7-4 CH[11:8] 0 BGCHOP 通道配置 1:P1x(x = 2-3,6) 和 P4.2 配置为模拟输入口 0:P1x(x = 2-3,6) 和 P4.2 作为 I/O 口 基准源 CHOP 功能开关 0: 基准源 V BG CHOP 功能关闭 1: 基准源 V BG CHOP 功能开启 当 AD 通路选取 V BG 为待转换值时, 由于 V BG 驱动能力有限, 需要加一级 CHOP 开关才能精确转换, 即 AD 转换 V BG 时, 需要同时打开 V BG 和 BGCHOP V BG 主要是查看外部 V DD 稳定否,V BG 为内部基准电源, 即使芯片供电 V DD 有抖动,V BG 电压也很稳定, 所以当 ADC 选取 V DD 作为参考源 V REF 转换 V BG 时, 用抖动的 V DD 参考源去采样稳定的 V BG, 得到的转换值也是抖动, 由此可以判断此时的 V DD 供电不稳定 下面是利用 V BG 电压倒推出目前 V REF 电压的公式 :(V BG = 1.20V;DV BG 为 V BG 的 AD 出码值 ) V REF = 1.20V*4096/DV BG ; 如果选择 V REF 为 V DD, 则可推算出当前的 V DD 电压 由于 V BG 精度 ±1.67% 1.67%, 所以得出的 V DD 精度也是 ±1.67% 121

122 Table 8.50 放大器 & 比较器 2 控制寄存器 1 Table 8.51 通道寄存器 x(x = 0-15) BCH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 CMP2CON BGEN 读 / 写 读 / 写 位编号位符号说明 4 BGEN 基准源 (1.20V 1.20V) 功能控制位 0: 关闭 1.20V 基准源 V BG 1: 开启 1.20V 基准源 V BG 注意 : 基准源开启需要建立时间, 最长不超过 100us, 因此当需要用到 1.20V 基准源时, 需要提前 100us 将此标志位置 1 96H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SEQCHx SEQx3 SEQx2 SEQx1 SEQx0 读 / 写 读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 3-0 SEQx[3:0] 通道选择位段 0000: 通道 0(CH0) 0001: 通道 1(CH1) 0010: 通道 2(CH2) 0011: 通道 3(CH3) 0100: 通道 4(CH4) 0101: 通道 5(CH5) 0110: 通道 6(CH6) 0111: 通道 7(CH7) 1000: 通道 8(CH8) 1001: 通道 9(CH9) 1010: 通道 10(CH10) 1011: 通道 11(CH11) 1100: 通道选择 OP1OUT 1101: 通道选择 OP2OUT 1110:V BG ( 其它值则无效 ) 注意 : 若转换通道选中 V BG, 需提前 100us 将 1.20V 基准源打开, 即将寄存器 [CMP2CON1:BGEN] 位置 1, 详情参见 CMP2CON1 寄存器描述若转换 OPOUT, 也需要提前打开 OP 功能,OP 需要一定的建立时间 ( 约 100us) 才能输出稳定的结果 注意 :SEQCH0 - SEQCH15 都映像在同一个地址 96H 上 令 SEQCON 寄存器中 REGSEL 位等于 1, 同时改变 SEQCON 寄存器中的位段 REG[3:0] 的值, 可以由软件读写 SEQCH0 - SEQCH15 如令 REGSEL = 1,REG[3:0] = 3, 则读写直接寻址区中 96H 地址即读写寄存器 SEQCH3 122

123 Table 8.52 ADC 结果寄存器 x(x = 0-15) 左对齐模式 : 96H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADDxL A3 A2 A1 A 读 / 写 只读 只读 只读 只读 H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADDxH A11 A10 A9 A8 A7 A6 A5 A4 读 / 写 只读 只读 只读 只读 只读 只读 只读 只读 右对齐模式 : 96H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADDxL A7 A6 A5 A4 A3 A2 A1 A0 读 / 写 只读 只读 只读 只读 只读 只读 只读 只读 H 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 ADDxH A11 A10 A9 A8 读 / 写 只读 只读 只读 只读 位编号 位符号 说明 7-0,7-4/ 7-4/ 3-0,7-0 A11-A0 左对齐方式 (ALR = 0) 一个通道转换完毕后, 数据立即更新并存放在 ADDxL/H(x = 0-15) 中高 8 位存放在 ADDxH 中, 低 4 位存放在 ADDxL 的高 4 位, 序列转换一次所有结果寄存器也都更新了一次右对齐方式 (ALR = 1) 一个通道转换完毕后, 数据立即更新并存放在 ADDxL/H(x = 0-15) 中高 4 位存放在 ADDxH 的低 4 位, 低 8 位存放在 ADDxL 中, 序列转换一次所有结果寄存器也都更新了一次 注意 : ADD0L - ADD15L 都映像在同一个地址 96H 上 ;ADD0H - ADD15H 也都映像在同一个地址 97H 上, 并且都为只读寄存器 令 SEQCON 寄存器中 REGSEL 位等于 0, 同时改变 SEQCON 寄存器中的位段 REG[3:0] 的值, 可以由软件读 ADD0L/H - ADD15L/H 如令 REGSEL = 0,REG[3:0] = 5, 则读直接寻址区中 96H 地址即对读寄存器 ADD5L, 读直接寻址区中 97H 地址即读寄存器 ADD5H 在 10BIT 模式下, 结果的存储也是按上表的方式存储, 但有效位为 A11 - A2, 而 A1 - A0 自动填充为 0, 这样做主要是考虑 ADC 的转换速率的提高,10bit 模式下一个通道转换时间比 12BIT 模式下节省 2 个 ADC 时间周期 123

124 Table 8.53 比较控制寄存器 91H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADCMPCON ADLIE ADGIE ADLIF ADGIF CSEL3 CSEL2 CSEL1 CSEL0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 ADLIE 6 ADGIE 5 ADLIF 下限比较中断使能位 0: 禁止下限比较中断 1: 使能下限比较中断 上限比较中断使能位 0: 禁止上限比较中断 1: 使能上限比较中断 下限比较中断标志位 0: 无下限中断发生,CSEL 位段所指定结果寄存器中的最近一次更新值大于 ADDLTH/L 中的值 1: 发生下限中断,CSEL 位段所指定结果寄存器中的最近一次更新值小于等于 ADDLTH/L 中的值该标志置起后需由软件清 0 4 ADGIF 3-0 CSEL[3:0] 上限比较中断标志位 0: 无上限中断发生,CSEL 位段所指定结果寄存器中的最近一次更新值小于 ADDGTH/L 中的值 1: 发生上限中断,CSEL 位段所指定结果寄存器中的最近一次更新值大于等于 ADDGTH/L 中的值该标志置起后需由软件清 0 用于比较的结果寄存器选择位段 0: 选择 ADD0L/H 中的值与 ADDGTL/H ADDLTL/H 比较 1: 选择 ADD1L/H 中的值与 ADDGTL/H ADDLTL/H 比较 2: 选择 ADD2L/H 中的值与 ADDGTL/H ADDLTL/H 比较 3: 选择 ADD3L/H 中的值与 ADDGTL/H ADDLTL/H 比较 4: 选择 ADD4L/H 中的值与 ADDGTL/H ADDLTL/H 比较 5: 选择 ADD5L/H 中的值与 ADDGTL/H ADDLTL/H 比较 6: 选择 ADD6L/H 中的值与 ADDGTL/H ADDLTL/H 比较 7: 选择 ADD7L/H 中的值与 ADDGTL/H ADDLTL/H 比较 8: 选择 ADD8L/H 中的值与 ADDGTL/H ADDLTL/H 比较 9: 选择 ADD9L/H 中的值与 ADDGTL/H ADDLTL/H 比较 10: 选择 ADD10L/H 中的值与 ADDGTL/H ADDLTL/H 比较 11: 选择 ADD11L/H 中的值与 ADDGTL/H ADDLTL/H 比较 12: 选择 ADD12L/H 中的值与 ADDGTL/H ADDLTL/H 比较 13: 选择 ADD13L/H 中的值与 ADDGTL/H ADDLTL/H 比较 14: 选择 ADD14L/H 中的值与 ADDGTL/H ADDLTL/H 比较 15: 选择 ADD15L/H 中的值与 ADDGTL/H ADDLTL/H 比较 124

125 Table 8.54 ADC 上限比较寄存器 Table 8.55 ADC 下限比较寄存器 9EH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADDGTL GT7 GT6 GT5 GT4 GT3 GT2 GT1 GT0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 FH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADDGTH GT15 GT14 GT13 GT12 GT11 GT10 GT9 GT8 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 GT15 - GT0 当一次序列转换完成时,ADCMPCON 寄存器中 CSEL 位段指定结果寄存器的值立刻与 ADDGTL/H 中的值比较, 若大于等于 ADDGTL/H 中的值则令 ADCMPCON 中的 ADGIF 位置 1,ADGIF 位将保持为 1 直到软件将其清除 9CH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADDLTL LT7 LT6 LT5 LT4 LT3 LT2 LT1 LT0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 DH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 ADDLTH LT15 LT14 LT13 LT12 LT11 LT10 LT9 LT8 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 LT15- LT0 当一次序列转换完成时,ADCMPCON 寄存器中 CSEL 位段指定结果寄存器的值立刻与 ADDLTL/H 中的值比较, 若小于等于 ADDLTL/H 中的值则令 ADCMPCON 中的 ADLIF 位置 1,ADLIF 位将保持为 1 直到软件将其清除 125

126 8.5.3 序列转换工作模式 SC = 0,ADC 配置为序列转换模式, 一次转换一个序列 序列由单个通道或多个通道组成, 对序列进行转换即对序列中的通道进行逐个转换 在硬件上, 使得多个信号在同一时间点上转换得以实现 (2 通道间最短采样间隔 1us, 可近似看作同时 ) 转换的结果储存在对应的结果寄存器中, 序列转换完成的同时, 把指定的某个结果寄存器的值与 ADDGTL/H 和 ADDLTL/H 的值比较, 并以标志指示比较的结果 序列转换中通道的选择设置 一个序列可包含单个或多个通道, 将待转换的通道号分别存放在通道寄存器 SEQCHx 中 (x = 0-15), 寄存器 SEQCHx 有 16 组, 所以序列转换时, 一次最多可转换 16 路通道 而每次转换的通道数量由寄存器 ADCH2 中的 GRP[3:0] 的值决定 例 :GRP[3:0] = 0, 即单通道转换, 将 SEQCH0 中存放的通道进行转换 ;GRP[3:0] = 3, 则序列中有 4 路通道, 将 SEQCH0 到 SEQCH3 中存放的通道依次转换 通道寄存器 SEQCHx(x = 0-15) 中存放的即是待转换的通道号 例 : 有 3 路通道需要转换, 按优先级排序为 OP1OUT,CH2, CH9, 则设置为 GRP[3:0] = 2,SEQCH0 = 12,SEQCH1 = 2,SEQCH2 = 9, 将依次转换 ( 注意 : 需要转换的通道必须配置为 AD 通道功能 SEQCHx 中也可设置相同的通道号, 比如将 SEQCHx 中的值全设置为 CH3, 结果寄存器中储存的将是不同时间段的 CH3 的转换值 ) 寄存器 SEQCHx(x = 0-15) 与 ADDxL 共享一个地址 96H, 访问时需要由 SEQCON 寄存器中的 REGSEL 位和 REG[3:0] 位区分,REGSEL = 1 时, 读写直接寻址寄存器 96H 即访问通道转换寄存器 SEQCHx, 而 REG[3:0] 的值确定 x 的值 这里 REG[3:0] = 0 即访问 SEQCH0 寄存器, 依次类推, 可设置 SEQCH0 - SEQCH15 中的通道号 序列转换模式 ADC 结果寄存器 序列转换的结果依次储存在结果寄存器 ADDxL/H(x = 0-15) 中, 结果寄存器为只读寄存器 由寄存器 SEQCON 中的 ALR 位决定转换结果的存储方式,ALR = 0( 默认 ) 时结果按左对齐存储在 ADDxL/H 中,ALR = 1 时结果按右对齐存储在 ADDxL/H 中, 如图 一个序列转换完毕, 结果寄存器 ADDxL/H 中的值也更新了一次 由于 ADDxL 和 SEQCHX( 通道寄存器 ) 共享一个地址 96H, 需要由 SEQCON 寄存器中的 REGSEL 位和 REG[3:0] 位区分 REGSEL = 0 时, 读直接寻址区的 97H,96H 即访问结果寄存器 ADDxL/H, 而 REG[3:0] 的值确定 x 的值 比如 REG[3:0] = 0, 访问直接寻址区 97H,96H 即访问 ADD0L/H 以上节中的 3 路通道转换为例, 按优先级排序为 OP1OUT,CH2,CH9, 结果依次储存在 ADDxL/H(x = 0-2), 如图 ( 注意 : 如果想转换上述的 3 个通道, 而 GRP[3:0] = 1, 则最后一个 SEQCH2 中的通道 9 则不转换, 读取 ADD2L/H 的值是无效值 ; 相反如果设置了 GRP[3:0] = 3, 则多转换了一路通道, 第 4 路通道是 SEQCH3 中的值对应的通道 ) ADDHx(97H) ADDLx(96H) MSB LSB A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 MSB ALR=0 LSB ADDHx(97H) ADDLx(96H) A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 ALR=1 图

127 GRP[3:0]=2 Result SEQCH0 =12 OP1OUT ADD0L/H SEQCH1= 2 CH2 ADD1L/H SEQCH2 = 9 CH9 ADD2L/H sequencer SEQCH3 = x CHx ADD3L/H SEQCH14 = x CHx ADD14L/H SEQCH15 = x CHx ADD15L/H 图 序列转换时通道之间时间间隔 (Gap Time) 的设置 序列转换时, 从上一个通道转换完毕时刻到下一个通道开始采样时刻之间的时间可以通过寄存器 ADCON2 中的 TGAP 位段来设置 当 TGAP[2:0] = 0 时, 一个通道转换完毕后立即开始下一个通道的采样, 之间没有等待时间 序列转换模式的启动和停止 序列转换模式的启动可以分为软件启动和硬件启动 软件启动, 通过将 ADCON1 中的 ADON 位置 1, 这样可以使能 ADC 模块的时钟 ADC_CLK, 同时令 ADON 位置 1 可以令 ADC 模块中的模拟电路上电 当 ADCON1 寄存器中的 GO/DONE GO/DONE 清 0, 同时进行比较 ( 在 节中详细阐述 ) 当读取 GO/DONE 清 0 GO/DONE位, 则终止转换 位置 1, 则启动序列转换 当一次序列转换完成, 由硬件将 为 1 时, 则标志转换进行未完成 如果在转换过程中 硬件启动有 2 种方式,TIMER2 的溢出触发启动一次序列转换和 PWM0/1/2 模块触发信号启动一次序列转换 具体通过设置 ADCON1 寄存器中的 PWMTRGEN 位和 TIMETRGEN 位以及 PWM0/1/2 模块的相关寄存器 硬件触发信号优先于软件触发信号 当软件已经处于序列转换中时, 硬件触发会终止先前的序列转换而重新启动一次序列转换, 转换值将会覆盖先前的结果 另外如果在连续转换期间, 有硬件触发信号过来, 会清 0SC 位终止连续转换, 并重新触发一次序列转换 建议在使用硬件触发功能时, 将 SC 清 0 PWM0/1/2 模块的触发序列转换过程中, 又进来一次 TIMER2 的触发信号, 则序列将会终止先前的转换重新启动一次, 转换值将覆盖先前的结果 ; 反之 TIMER2 触发序列的转换过程中, 又进来一次 PWM0/1/2 的触发信号, 则也会终止先前的转换, 重新启动一次序列, 转换值覆盖先前的结果 注意 : 在序列转换过程中, 即 GO/DONE为 1 时, 对除了 ADCON1 ADCMPCON SEQCON ADDGTL/H ADDLTL/H 以外的所有 ADC 寄存器的写入都将视为无效操作 序列转换完成中断 序列转换完毕后,ADCON1 中的 ADCIF 位将由硬件置起, 此时若 ADCON1 中 ADCIE 位为 1, 同时 IEN0 寄存器中的 EADC 和 EA 位为 1, 则将触发序列转换完成中断,ADCIF 位只能由软件清除 比较中断 序列转换完的同时, 会将指定结果寄存器的值去比较, 若超限, 也可以产生一个比较中断, 因为比较和序列转换完成是同时发生的, 所以中断的产生也是同时, 并且共用一个中断入口 ( 在 节中详细阐述 ) 127

128 8.5.4 连续转换工作模式 SC = 1 选择连续转换工作模式, 序列循环转换, 转换完一个序列便进行此序列的下一次转换 连续转换的一些寄存器设置可参考 序列转换工作模式, 和序列转换不同的是该模式将循环转换序列, 一个序列转换完成到下个序列开始转换的时间也是由 TGAP[2:0] 控制的 每次序列转换完成的同时, 把指定的某个结果寄存器的值与 ADDGTL/H 和 ADDLTL/H 的值比较, 并以标志指示比较的结果 连续转换模式的转换结果, 也会时时更新, 会在每个通道转换完成后第一时间更新入对应的结果寄存器 连续转换功能的启动和停止 连续转换功能只有通过软件启动, 在 SC = 1 时, 通过置位 GO/DONE 转换将在当前序列转换结束时停止, 并且 GO/DONE 来启动, 通过软件清 0 SC 位来终止 当清 0SC 位时,AD 自动清 0, 同时进行比较 ; 而手动清 GO/DONE 会立刻终止转换 启动连续转换功能后,ADCIF 会在每次序列转换完成时置起, 比较功能也会在每次序列转换完成时进行 如果发生指定的结果寄存器值超限, 会置位相应的标志位 ADGIF ADLIF, 如果相应的中断允许位开启, 则会产生中断 注意 : 在连续转换过程中, 即 GO/DONE为 1 时, 对除了 ADCON1 SEQCON ADCMPCON ADDGTL/H ADDLTL/H 以外的所有 ADC 寄存器的写入都将视为无效操作 序列转换完成中断 每次序列转换完毕后,ADCON1 中的 ADCIF 位都会置起, 此时若 ADCON1 中 ADCIE 位为 1, 同时 IEN0 寄存器中的 EADC 和 EA 位为 1, 则将触发序列转换完成中断, 此时 ADCIF 位必须在中断程序中由软件清除 比较中断 每次序列转换完成时, 都会将指定结果寄存器的值去作比较, 如果超限, 也可以产生一个比较中断 因为比较和序列转换完成是同时发生的, 所以中断的产生也是同时, 并且共用一个中断入口 ( 在 节中详细阐述 ) 比较功能 比较用结果寄存器的指定 由寄存器 ADCMPCON 中的 CSEL 位段来指定被比较的结果寄存器, 若 CSEL = n, 则结果寄存器 ADDnL/H 将与 ADDGTL/H 和 ADDLTL/H 的值比较 以图 的配置为例, 若设置 CSEL = 2, 每次序列转换完成的同时将 ADD2L/H 的值与 ADDGTL/H 和 ADDLTL/H 的值比较 需要注意的是, 若指定一个序列转换不使用的结果寄存器, 则不会发生任何比较动作 如上例中令 CSEL = 3, 转换后未使用结果寄存器 ADD3L/H, 故没有任何比较动作发生, 标志位 ADGIF 和 ADLIF 的值不会发生变化 注意 : 在写入比较值 ADDGTL/H 和 ADDTL/H 时, 应注意结果寄存器的存储方式是左对齐还是右对齐, 数据写入格式应和结果寄存器的存储格式一致, 如果是在 10BIT 模式下比较, 则写入的值只比较 A11 - A2 前 10 位, 剩下 2 位不作比较 ADDGTL/H 和 ADDTL/H 写入值有即时生效性, 比较时会采用 ADDGTL/H 和 ADDTL/H 最近一次的更新值 比较过程 设 CSEL = n,addgtl/h = Max,ADDLTL/H = Min, 当序列转换完成时, 立即将指定结果寄存器 ADDnL/H 的值与 Max 和 Min 比较 若 ADDnL/H >= Max, 则 ADCMPCON 寄存器中 ADGIF 位将置 1, 若 ADGIE 位为 1, 则可以触发一个比较中断 ( 与序列转换完成共享一个中断向量 ),ADGIF 位将保持为 1 直到软件将其清除 ; 若 ADDnL/H <= Min, 则 ADCMPCON 寄存器中 ADLIF 位将置 1, 若 ADLIE 位为 1, 也可以触发一个比较中断 ( 与序列转换完成共享一个中断向量 ),ADLIF 位将保持为 1 直到软件将其清除 设 ADDGTL/H = 0x3DF,ADDLTL/H = 0x8FE,CSEL = n, 则 ADDnL/H 的值与 ADGIF ADLIF 位中值的关系如图 所示 ; 设 ADDGTL/H = 0x8FE,ADDLTL/H = 0x3DF,CSEL = n, 则 ADDnL/H 的值与 ADGIF ADLIF 位中值的关系如图 所示 128

129 ADDnL/H ADDnL/H 0xFFF 0xFFF ADGIF = 1 ADLIF not affected ADGIF = 1 ADLIF not affected ADDLTL/H 0x8FE ADDGTL/H 0x8FE ADGIF = 1 ADLIF = 1 ADGIF not affected ADLIF not affected ADDGTL/H 0x3DF ADDLTL/H 0x3DF 0x000 ADLIF = 1 ADGIF not affected 0x000 ADLIF = 1 ADGIF not affected ADC 转换时间设置 图 图 通过寄存器 ADT 可以设置 ADC 的时钟以及采样时间 通过设置 ADT 中的 TADC[3:0] 位段可以设置 ADC 的时钟 寄存器 ADT 中的 TS[3:0] 位段可以设置每个通道的采样时间 t SAMP,t SAMP = (TS[3:0]+1) * t AD, 具体见 ADC 寄存器章节 需要注意的是, 无论 TS[3:0] 取何值, 采样时间的最小值不会小于 2 * t AD, 最大值不会大于 15 * t AD 即若 TS[3:0] = 0, 采样时间亦为 2 * t AD ; 若 TS[3:0] = 15, 采样时间亦为 15 * t AD 对于 12BIT 模式 AD 转换每个通道的 AD 转换时间固定为 14 * t AD 因此每个通道的总共转换时间 = t SAMP + 14 * t AD 对于一个序列, 若寄存器 ADCON1 中的位段 TGAP[2:0] 不为零, 则序列中相邻的两个通道转换之间将加入一段时间 T G, 这样若一个序列总共转换的通道数为 n, 则完成整个序列的转换所需时间为 :n * (t SAMP + 14 * t AD ) + (n - 1) * T G 如图 中序列的转换时间为 3 * (t SAMP + 14 * t AD ) + 2 * T G ( 注意 :10BIT 模式下 AD 转换每个通道的固定时间为 12 t AD, 其他时间计算以此为基础 ) ADC 模块参考电压的设置 可以选择芯片 V DD 或者 V REF 引脚上的电压作为 ADC 模块的参考电压 芯片复位后,ADC 模块的参考电压为芯片的 V DD 令寄存器 ADCON1 中的 REFC 位置 1 将使 ADC 模块使用 V REF 引脚上的电压作为参考电压 ( 此时 CH3 通道无效, 若转换 CH3 的电平, 转换出来的值没有意义 ) ADC 通道与 IO 口功能设置 15 个 AD 通道中 12 路都与 IO 功能复用 (CH0 - CH11), 芯片复位后,12 路 AD 通道都是作为 IO 功能使用 使用 ADC 模块之前应该通过寄存器 ADCH1 ADCH2 将需要使用的通道设置为 AD 通道功能 具体设置参见 ADC 通道配置寄存器 另外, 此 12 路中有 4 路 (AN0 - AN2,AN4) 与比较器 2 的端口共用, 它们可以在作 AD 输入模拟通道的同时, 作比较器 2 的输入口 ( 详见端口共用章节 ) ADC 结果寄存器 / 通道寄存器之间的映射关系 ADDxL 寄存器和 SEQCHx 寄存器都映像在直接寻址区的 96H 地址上,x = 0-15 通过寄存器 SEQCON 中的位 REGSEL 和位段 REG[3:0] 可以具体制定操作 ADDxL/H SEQCHx 中的任一个 若 REGSEL = 0 REG[3:0] = y, 则直接寻址区中的 96H 映像至 ADDyL 寄存器,97H 映像至 ADDyH 寄存器, 对直接寻址区 96H 和 97H 的读操作即对 ADDyL/H 寄存器的读操作 若 REGSEL = 1 REG[3:0] = y, 则直接寻址区中的 96H 映像至 SEQCHy 寄存器, 对直接寻址区 96H 的读写操作即对 SEQCHy 寄存器的读写操作 129

130 AD 转换时对传感器输出阻抗的要求 如图 所示, 为了保证 AD 转换在一定的转换速率的条件下能转换出精确的 AD 结果, 需要在一定时间内 ( 采样时间 TS) 对 内部采样电容 C 完成充电 如果在规定的采样时间内, 采样电容 C 未能充满电, 即 V0 < V1,AD 转换结果则会产生精度误差 因为 R0( 内部电阻 ) 和 C( 内部采样电容 ) 是常量, 已经由芯片内定, 能否在转换出允许精度范围内的 AD 结果就取决于传感器内部等效电阻 Rx 设 AD 转换结果的分辨率为 M(12bit 结果的分辨率为 4096,10bit 结果的分辨率为 1024), 如果 AD 转换的精度要求为 N, 则对传感器电阻的选择有如下要求 : sensor circuit Rx AN0 R0 (1.2k ohm) V1 C(15pF) V0 上式也可表示为 : 图 T Rx R0 V 1 V 0 C * Ln V 1 Rx T C * Ln N M R 0 对于 10bit 模式下即 1024 分辨率, 标准采样时间为 0.5us, 结果精度误差控制在 0.1LSB 内时, 按上述公式带入值有 即传感器选型时的内部等效电阻必须小于 2.4KΩ Rx KΩ Ln 1024 对于 12bit 模式下即 4096 分辨率, 标准采样时间为 2us, 结果精度误差控制在 0.1LSB 内时, 按上述公式帶入有 Rx KΩ Ln 4096 即传感器选型时的内部等效电阻必须小于 11.3KΩ 注意事项 ADC 转换, 最好将 ADON 打开 10us 后再将 GO/DONE位置 1, 进行转换 因为 ADC 模块打开后有个稳定时间 如需要转换增益放大通路, 需要先打开 OP 功能,OP 需要建立时间 ( 约为 100us) 才能稳定输出稳定, 再进行 AD 转换, 转换时选取 OPUT1 或 OPOUT2 通路 转换模拟通路时要先将端口设置为 AD 通道功能才能顺利转换 转换单个通道时, 只要将 GRP[3:0] = 0, 并设置 SEQCH0 为需要转换的通道号, 即可进行转换 当 ADCIE,ADLIE,ADGIE 的都开启时,ADCIF,ADLIF,ADGIF 任意一个置位都能引起中断, 且共享一个中断向量, 通过判位 ADCIF,ADLIF,ADGIF 哪个为 1, 来确定具体的中断源并定制特定的操作 130

131 程序示例 ADC 示例 : /* 连续转换 AN3,AN1,AN11 三个通道的模拟电压值, 并将 AN11 作比较, 如果 AN11 超出 (0x123~0x678) 范围则报警, 并将此时 AN3,AN1,AN11 此时的值取出保存并停止连续转换 */ #include"sh79f1611.h" unsigned int ad_an1,ad_an3,ad_an11; bit alarm_flag; void ADC_inter() interrupt 6 { if(adcmpcon&0x30) { ADCON1&=0xfe; // 停止转换 ADCMPCON&=0xcf;// 清比较 FLAG alarm_flag=1; SEQCON=0x80; // 映射寄存器切换至结果寄存器第 0 通道右对齐方式取出 ad_an3=addx_16; SEQCON=0x81; // 映射寄存器切换至结果寄存器第 1 通道右对齐方式取出 ad_an1=addx_16; SEQCON=0x82; // 映射寄存器切换至结果寄存器第 2 通道右对齐方式取出 ad_an11=addx_16; } } ADC_initial() { ADCON1=0xa0;// 连续转换模式 ADCH1=0x0a; ADCH2=0x80; ADT=0x27; IEN0=0xc0; ADCON2=0x27;// 选取 12bit 转换模式, 总的转换通道数为 3, SEQCON=0x10;// 映射寄存器切换至通道寄存器第 0 通道 SEQCHx=0x03;// 选取 AN3 SEQCON=0x11;// 映射寄存器切换至通道寄存器第 1 通道 SEQCHx=0x01;// 选取 AN1 SEQCON=0x12;// 映射寄存器切换至通道寄存器第 2 通道 SEQCHx=0x0B;// 选取 AN11 SEQCON =0x80;// 右对齐方式 ADCMPCON=0xc2;// 选取通道 2 中的 AN11 作比较, 允许比较中断 ADDG_16=0x0678;// 设置上限值 ADDL_16=0x0123;// 设置下限值 ADCON1 =0x01; // 开启转换 } void main() { System_initial(); ADC_initail(); while(1) { if(alarm_flag) { ; } } } 131

132 8.6 串行外部设备接口 (SPI SPI) 特性 全双工, 三线同步传输 主从机操作 6 个可编程主时钟频率 极性相位可编程的串行时钟 带 MCU 中断的主模式故障出错标志 写入冲突标志保护 可选择 LSB 或 MSB 传输 串行外部设备接口 (SPI) 是一种高速串行通信接口, 允许 MCU 与外围设备 ( 包括其它 MCU) 进行全双工, 同步串行通讯 下图所示即为典型的由一个主设备和若干从属外部设备组成的 SPI 总线网络, 主设备通过 3 条线连接所有从设备, 主设备控 制连接从属设备 SS 引脚的 4 个并行端口来选中其中一个从属设备进行通讯 V DD Master MISO MOSI SCK SS Port0.0 Port0.1 Port0.2 Port0.3 MISO MOSI SCK SS MISO MOSI SCK SS MISO MOSI SCK SS MISO MOSI SCK SS Slave Slave Slave Slave 信号描述 主输出从输入 (MOSI MOSI) 该路信号连接主设备和从设备 数据通过 MOSI 从主设备串行传送到从设备, 主设备输出, 从设备输入 主输入从输出 (MISO MISO) 该路信号连接从设备和主设备 数据通过 MISO 从从设备串行传送到主设备, 从设备输出, 主设备输入 当 SPI 配置为从设 备并未被选中 (SS 引脚为高电平 ), 从设备的 MISO 引脚处于高阻状态 (SS SPI 串行时钟 (SCK SCK) SCK 信号用作控制 MOSI 和 MISO 线上输入输出数据的同步移动 每 8 时钟周期线上传送一个字节 如果从设备未被选中 引脚为高电平 ),SCK 信号被此从设备忽略 ) 从设备选择引脚 (SS 每个从属外围设备由一个从选择引脚 (SS 引脚 ) 选择, 当引脚信号为低电平时, 表明该从设备被选中 主设备可以通过软 件控制连接于从设备 SS 引脚的端口电平选择每个从设备, 很明显, 只有一个主设备可以驱动通讯网络 为了防止 MISO 总线冲突, 同一时间只允许一个从设备与主设备通讯 在主设备模式中,SS 引脚状态关联 SPI 状态寄存器 SPSTA 中 MODF 标志位以防止多个主设备驱动 MOSI 和 SCK 下列情况,SS 引脚可以作为普通端口或其它功能使用 : (1) 设备作为主设备,SPI 控制寄存器 SPCON 寄存器的 SSDIS 位置 1 这种配置仅仅存在于通讯网络中只有一个主设备的情况, 因此,SPI 状态寄存器 SPSTA 中 MODF 标志位不会被置 1 (2) 设备配置为从设备,SPI 控制寄存器 SPCON 的 CPHA 位和 SSDIS 位置 1 这种配置情况存在于只有一个主设备一个从设 备的通讯网络中, 因此, 设备总是被选中的, 主设备也不需要控制从设备的 SS 引脚选择其作为通讯目标 注意 : 当 CPHA = 0 时,SS引脚产生下降沿表示启动发送 132

133 波特率 在主模式下,SPI 的波特率有八种可选择的频率, 分别是内部时钟的 4,8,16,32,64,128,256,512 分频, 可以通过设定 SPCON 寄存器的 SPR[2:0] 位进行选择 功能描述 下图所示是 SPI 模块的详细结构 Internal Bus FCLK PERIPH SPDAT Clock Divider /4 /8 /16 /32 /64 /128 Transmit Register Recieve Register Pin Control Logic MOSI MISO Clock Select Clock Logic M S SCK SS DIR MSTR CPHA CPOL SSDIS SPR2 SPR1 SPR0 Recieve Data Register SPI Interrupt Request SPI Control 8-bit Bus 1-bit Signal SPSTA SPEN SPIF MODF WCOL RXOV SPI 模块框图 133

134 工作模式 SPI 可配置为主模式或从属模式中的一种 SPI 模块的配置和初始化通过设置 SPCON 寄存器 ( 串行外围设备控制寄存器 ) 和 SPSTA( 串行外围设备状态寄存器 ) 来完成 配置完成后, 通过设置 SPCON,SPSTA,SPDAT( 串行外围设备数据寄存器 ) 来完成数据传送 在 SPI 通讯期间, 数据同步地被串行的移进移出 串行时钟线 (SCK) 使两条串行数据线 (MOSI 和 MISO) 上数据的移动和 采样保持同步 从设备选择线 (SS ) 可以独立地选择 SPI 从属设备 ; 如果从设备没有被选中, 则不能参与 SPI 总线上的活动 当 SPI 主设备通过 MOSI 线传送数据到从设备时, 从设备通过 MISO 线发送数据到主设备作为响应, 这就实现了在同一时钟下数据发送和接收的同步全双工传输 发送移位寄存器和接收移位寄存器使用相同的特殊功能器地址, 对 SPI 数据寄存器 SPDAT 进行写操作将写入发送移位寄存器, 对 SPDAT 寄存器进行读操作将获得接收移位寄存器的数据 8-bit Shift Register MISO MISO 8-bit Shift Register MOSI MOSI SPI Clock Generator SCK SS V DD SCK SS Master MCU V SS Slave MCU 主模式 全双工主从互联图 (1) 模式启动 SPI 主设备控制 SPI 总线上所有数据传送的启动 当 SPCON 寄存器中的 MSTR 位置 1 时,SPI 在主模式下运行, 只有一个主设备可以启动传送 (2) 发送在 SPI 主模式下, 写一个字节数据到 SPI 数据寄存器 SPDAT, 数据将会写入发送移位缓冲器 如果发送移位寄存器已经存在一个数据, 那么主 SPI 产生一个 WCOL 信号以表明写入太快 但是在发送移位寄存器中的数据不会受到影响, 发送也不会中断 另外如果发送移位寄存器为空, 那么主设备立即按照 SCK 上的 SPI 时钟频率串行地移出发送移位寄存器中的数据到 MOSI 线上 当传送完毕,SPSTA 寄存器中的 SPIF 位被置 1 如果 SPI 中断被允许, 当 SPI F 位置 1 时, 也会产生一个中断 (3) 接收当主设备通过 MOSI 线传送数据给从设备时, 相对应的从设备同时也通过 MISO 线将其发送移位寄存器的内容传送给主设备的接收移位寄存器, 实现全双工操作 因此,SPIF 标志位置 1 即表示传送完成也表示接收数据完毕 从设备接收的数据按照 MSB 或 LSB 优先的传送方向存入主设备的接收移位寄存器 当一个字节的数据完全被移入接收寄存器时, 处理器可以通过读 SPDAT 寄存器获得该数据 如果发生超限 (SPIF 标志未被清 0, 就试图开始下一次传送 ),RXOV 位置 1, 表示发生数据超限, 此时接收移位寄存器保持原有数据并且 SPIF 位置 1, 这样直到 SPIF 位被清 0,SPI 主设备将不会接收任何数据 从模式 (1) 模式启动 当 SPCON 寄存器中的 MSTR 位清 0,SPI 在从模式下运行 在数据传送之前, 从设备的 SS 引脚必须被置低, 而且必须保持低电平直到一个字节数据传送完毕 (2) 发送与接收从属模式下, 按照主设备控制的 SCK 信号, 数据通过 MOSI 引脚移入,MISO 引脚移出 一个位计数器记录 SCK 的边沿数, 当接收移位寄存器移入 8 位数据 ( 一个字节 ) 同时发送移位寄存器移出 8 位数据 ( 一个字节 ),SPIF 标志位被置 1 数据可以通过读取 SPDAT 寄存器获得 如果 SPI 中断被允许, 当 SPIF 置 1 时, 也会产生一个中断 为防止超限,SPI 从设备在向接收移位寄存器移入数据之前也必须软件清零 SPIF 标志位, 否则 RXOV 位置 1, 表示发生数据超限 此时接收移位寄存器保持原有数据并且 SPIF 位置 1, 这样 SPI 从设备将不会接收任何数据直到 SPIF 清 0 SPI 从设备不能启动数据传送, 所以 SPI 从设备必须在主设备开始一次新的数据传送之前将要传送的数据写入发送移位寄存器 如果从设备在第一次开始发送之前未写入数据, 从设备将传送 0x00 字节给主设备 如果写 SPDAT 操作发生在传送过程中, 那么 SPI 从设备的 WCOL 标志位置 1, 即如果传送移位寄存器已经含有数据,SPI 从设备的 WCOL 位置 1, 表示写 SPDAT 冲突 但是移位寄存器的数据不受影响, 传送也不会被中断 134

135 传送形式 通过软件设置 SPCON 寄存器的 CPOL 位和 CPHA 位, 用户可以选择 SPI 时钟极性和相位的四种组合方式 CPOL 位定义时钟的极性, 即空闲时的电平状态, 它对 SPI 传输格式影响不大 CPHA 位定义时钟的相位, 即定义允许数据采样移位的时钟边沿 在主从通讯的两个设备中, 时钟极性相位的设置应一致 SCK Cycle Number SPEN (Internal) SCK (CPOL=0) SCK (CPOL=1) MOSI (from Master) MSB bit6 bit5 bit4 bit3 bit2 bit1 LSB MISO (from Slave) MSB bit6 bit5 bit4 bit3 bit2 bit1 LSB SS (to Slave) Capture Point 数据传送形式 (CPHA = 0) 如果 CPHA = 0,SCK 的第一个沿捕获数据, 从设备必须在 SCK 的第一个沿之前将数据准备好, 因此,SS 引脚的下降沿从 设备开始发送数据 SS 引脚在每次传送完一个字节之后必须被拉高, 在发送下一个字节之前重新设置为低电平, 因此当 CPHA = 0,SSDIS 不起作用 SCK Cycle Number SPEN (Internal) SCK (CPOL=0) SCK (CPOL=1) MOSI (from Master) MSB bit6 bit5 bit4 bit3 bit2 bit1 LSB MISO (from Slave) MSB bit6 bit5 bit4 bit3 bit2 bit1 LSB SS (to Slave) Capture Point 数据发送形式 (CPHA = 1) 如果 CPHA = 1, 主设备在 SCK 的第一个沿将数据输出到 MOSI 线上, 从设备把 SCK 的第一个沿作为开始发送信号 用户必 须在第一个 SCK 的第二个沿之前完成写 SPDAT 的操作 SS 引脚在每个字节数据的传送过程始终保持低电平 这种数据传输形式是一个主设备一个从设备之间通信的首选形式 MISO/MOSI Byte1 Byte2 Byte3 Master SS Slave SS (CPHA = 0) Slave SS (CPHA = 1) CPHA/SS 时序 注意 : 当 SPI 用作从设备模式, 且 SPCON 寄存器的 CPOL 位清 0,P5.2/SCK 端口必须设置为输入模式, 并在 SPEN 位置 1 前打开上拉电阻 135

136 SPSTA 异常情况 SPSTA 寄存器中的标志位表示在 SPI 通讯中的出错情况 : (1) 模式故障 (MODF MODF) SPI 主模式下的模式故障出错表明 SS 引脚上的电平状态与实际的设备模式不一致 SPSTA 寄存器中 MODF 位置 1 后, 表明系统控制存在多主设备冲突的问题 这种情况下,SPI 系统受到如下影响 : 产生 SPI 接收 / 错误 CPU 中断请求 ; SPSTA 寄存器的 SPEN 位清 0,SPI 被禁止 ; SPCON 寄存器的 MSTR 位清 0 当 SPCON 寄存器的 SS 引脚禁止位 (SSDIS) 清 0,SS引脚信号为低时,MODF 标志位置 1 然而, 对于只有一个主设备的 系统来说, 主设备的 SS 引脚被拉低, 那决不是另外一个主设备试图驱动网络 这种情况下, 为防止 MODF 置 1, 可使 SPCON 寄 存器中的 SSDIS 位置 1,SS 引脚作为普通 I/O 口或是其它功能引脚 重新启动串行通信时, 用户必须将 MODF 位软件清 0, 将 SPCON 寄存器中的 MSTR 位和 SPSTA 寄存器的 SPEN 位置 1, 重新启动主模式 (2) 写冲突 (WCOL WCOL) 在发送数据序列期间写入 SPDAT 寄存器会引起的写冲突,SPSTA 寄存器中的 WCOL 位置 1 WCOL 位置 1 不会引起中断, 发送也不会中止 WCOL 位需由软件清 0 (3) 超限情况 (RXOV RXOV) 主设备或从设备尚未清除 SPIF 位, 主或从设备又试图发送几个数据字节时, 超限情况发生 在这种情况下, 接收移位寄存器保持原有数据,SPIF 置 1, 同样 SPI 设备直到 SPIF 被清除后才会再接收数据 在 SPIF 位被清除之前继续调用中断, 发送也不会中止 RXOV 位置 1 不会引起中断,RXOV 位需由软件清 中断 两种 SPI 状态标志 SPIF & MODF 能产生一个 CPU 中断请求 串行外围设备数据发送标志,SPIF: 完成一个字节发送后由硬件置 1 模式故障标志,MODF: 该位被置 1 表示 SS 引脚上的电平与 SPI 模式不一致的 SSDIS 位为 0 并且 MODF 置 1 将产生 SPI 接收器 / 出错 CPU 中断请求 当 SSDIS 置 1 时, 无 MODF 中断请求产生 SPIF SPI Transmitter CPU Interrupt Request SPI CPU Interrupt Request MODF SSDIS SPI Receiver/Error CPU Interrupt Request SPI 中断请求的产生 136

137 8.6.9 寄存器 Table 8.56 SPI 控制寄存器 A2H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SPCON DIR MSTR CPHA CPOL SSDIS SPR2 SPR1 SPR0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 DIR 6 MSTR 5 CPHA 4 CPOL 传送方向选择位 0:MSB 优先发送 1:LSB 优先发送 SP 设备选择位 0: 配置 SPI 作为从属设备 1: 配置 SPI 作为主设备 时钟相位控制位 0:SCK 周期的第一沿采集数据 1:SCK 周期的第二沿采集数据 时钟极性控制位 0: 在 Idle 状态下 SCK 处于低电平 1: 在 Idle 状态下 SCK 处于高电平 3 SSDIS 2-0 SPR[2:0] SS引脚控制位 0: 在主和从属模式下, 打开 SS 引脚 1: 在主和从属模式下, 关闭 SS 引脚如果 SSDIS 置 1, 不产生 MODF 中断请求在从属模式下, 如果 CPHA = 0, 该位不起作用 串行外部设备时钟速率选择位 000:f SYS /4 001:f SYS /8 010:f SYS /16 011:f SYS /32 100:f SYS /64 101:f SYS / :f SYS / :f SYS /

138 Table 8.57 SPI 状态寄存器 Table 8.58 SPI 数据寄存器 注意 : 当关闭 SPI 功能后, 读取 SPI 数据寄存器 SPDAT 的数据无效 A1H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SPSTA SPEN SPIF MODF WCOL RXOV 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 SPEN 6 SPIF 5 MODF 4 WCOL 3 RXOV SPI 控制位 0: 关闭 SPI 1: 打开 SPI 接口 串行外部设备数据传送标志位 0: 由软件清 0 1: 表明已完成数据传输, 由硬件置 1 模式故障位 0: 由软件清 0 1: 表明 SS 引脚电平与 SPI 模式不一致, 由硬件置 1 写入冲突标志位 0: 由软件清 0, 表明已处理写入冲突 1: 由硬件置 1, 表明检测到一个冲突 接收超限位 0: 表明已处理接收超限, 由软件清 0 1: 表明已检测到接收超限, 由硬件置 1 A3H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SPDAT SPDAT7 SPDAT6 SPDAT5 SPDAT4 SPDAT3 SPDAT2 SPDAT1 SPDAT0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 SPDAT AT[7:0] 写入 SPDAT 的数据被放置到发送移位寄存器中读取 SPDAT 时将获得接收移位寄存器的数据 138

139 8.7 蜂鸣音发生器 特性 为音频发生器输出方波信号 有 10 种频率可供选择输出或者禁止输出 寄存器 Table 8.59 蜂鸣器输出控制寄存器 BDH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 BUZCON BCA3 BCA2 BCA1 BCA0 BZEN 读 / 写 读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 4 BCA3 3 BCA2 2 BCA1 1 BCA0 0 BZEN 蜂鸣器输出载波频率 0000: 系统时钟 / : 系统时钟 / : 系统时钟 / : 系统时钟 / : 系统时钟 / : 系统时钟 / : 系统时钟 / : 系统时钟 /8 1000: 系统时钟 / : 系统时钟 /32768 其它 : 系统时钟 /8192 蜂鸣器输出使能控制位 0:P1.4 作为 I/O 端口 1:P1.4 作为蜂鸣器输出端口 139

140 8.8 电压复位 (LVR) 特性 通过代码选项选择,LVR 设定电压 V LVR 可为 4.1V 或 2.8V LVR 去抖动时间 T LVR 为 30µs 当供电电压低于设定电压 V LVR 时, 将产生内部复位 低电压复位 (LVR) 功能是为了监测供电电压, 当供电电压低于设定电压 V LVR 时,MCU 将产生内部复位 LVR 去抖动时间 T LVR 大约为 30µs LVR 功能打开后, 具有以下特性 (t 表示电压低于设定电压 V LVR 的时间 ): 当 V DD V LVR 且 t T LVR 时产生系统复位 当 V DD > V LVR 或 V DD < V LVR, 但持续时间 < T LVR 时不会产生系统复位 通过代码选项, 可以选择 LVR 功能的打开与关闭 在交流电或大容量电池应用中, 接通大负载后容易导致 MCU 供电暂时低于定义的工作电压 低电压复位可以应用于此, 保护系统在低于设定电压下产生有效复位 140

141 8.9 看门狗定时器 (WDT WDT), 程式超范围溢出 (OVL OVL) 复位及其它复位状态 特性 程式超范围溢出后硬件自动检测, 并产生 OVL 复位 看门狗可以工作在掉电模式下 看门狗溢出频率可选 程序超范围溢出复位 为进一步增强 CPU 运行可靠性, 内建程式超范围溢出检测电路, 一旦检测到程式计数器的值超出 ROM 最大值, 或者发现指令操作码 ( 不检测操作数 ) 为 8051 指令集中不存在的 A5H, 便认为程式跑飞, 产生 CPU 复位信号, 同时将 WDOF 标志位置 1 为应用这个特性, 用户应该将未使用的 Flash ROM 用 0xA5 填满 看门狗 看门狗定时器是一个递减计数器, 独立内建 RC 振荡器作为其时钟源, 因此可以通过代码选项选择在掉电模式下仍持续运行 当定时器溢出时, 将芯片复位 通过代码选项可以打开或关闭该功能 WDT 控制位 ( 第 2-0 位 ) 用来选择不同的溢出时间 定时器溢出后,WDT 溢出标志 (WDOF) 将由硬件自动置 1 通过读写 RSTSTAT 寄存器, 看门狗定时器在溢出前重新开始计数 其它一些复位标志列举如下 : 141

142 寄存器 Table 8.60 复位状态寄存器 B1H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 RSTSTAT WDOF - PORF LVRF CLRF WDT.2 WDT.1 WDT.0 读 / 写读 / 写 - 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 (POR POR) (WDT WDT) 1 - u u u (LVR LVR) u - u 1 u (PIN PIN) u - u u 位编号位符号说明 7 WDOF 5 PORF 4 LVRF 3 CLRF 2-0 WDT[2:0] 看门狗溢出或程式超范围溢出标志位看门狗溢出时由硬件置 1, 可由软件或上电复位清 0 0: 未发生 WDT 溢出或程式超范围溢出 1: 发生 WDT 溢出或程式超范围溢出 上电复位标志位上电复位后硬件置 1, 只能由软件清 0 0: 没有发生上电复位 1: 发生过上电复位 低压复位标志位低压复位后置 1, 可由软件或上电复位清 0 0: 没有发生低压复位 1: 发生过低压复位 Reset 引脚复位标志位引脚复位后置 1, 由软件或上电复位清 0 0: 没有发生引脚复位 1: 发生过引脚复位 WDT 溢出周期控制位 000: 溢出周期最小值 = 4096ms( 此档特殊, 溢出产生的是上电复位标志 PORF) 001: 溢出周期最小值 = 1024ms 010: 溢出周期最小值 = 256ms 011: 溢出周期最小值 = 128ms 100: 溢出周期最小值 = 64ms 101: 溢出周期最小值 = 16ms 110: 溢出周期最小值 = 4ms 111: 溢出周期最小值 = 1ms 注意 : 应用中如果看门狗打开, 程式清看门狗的最大间隔时间不能大于以上所列最小值 142

143 8.10 电源管理 特性 空闲模式和掉电模式两种省电模式 发生中断和复位可退出空闲 (Idle) 掉电 (Power-Down) 模式 为减少功耗, 提供两种低功耗省电模式 : 空闲模式和掉电模式, 这两种模式都由 PCON 和 SUSLO 寄存器控制 空闲模式 空闲模式能够降低系统功耗, 在此模式下, 程序中止运行,CPU 时钟停止, 但外部设备时钟继续运行 空闲模式下,CPU 在确定的状态下停止, 并在进入空闲模式前所有 CPU 的状态都被保存, 如 PC,PSW,SFR,RAM 等 两条连续指令 : 先设置 SUSLO 寄存器为 55H, 随即将 PCON 寄存器中的 IDL 位置 1, 使 进入空闲模式 如果按顺序要求的连续指令不被满足,CPU 在下一个机器周期清除 SUSLO 寄存器或 IDL 位,CPU 也不会进入空闲模式 IDL 位置 1 是 CPU 进入空闲模式之前执行的最后一条指令 两种方式可以退出空闲模式 : (1) 产生一个中断 立即恢复 CPU 时钟, 硬件清除 SUSLO 寄存器和 PCON 寄存器的 IDL 位 然后执行中断服务程序, 随后跳转到进入空闲模式指令之后的指令 (2) 复位信号产生后 ( 复位引脚上出现低电平,WDT 复位,LVR 复位 ) 在预热定时结束之后,CPU 恢复时钟,SUSLO 寄存器和在 PCON 寄存器中的 IDL 位被硬件清除, 最后 复位 然后程序从地址位 0000H 开始执行 RAM 保持不变而 SFR 的值根据不同功能模块改变 掉电模式 掉电模式可以使 进入功耗非常低的状态 掉电模式将停止 CPU 和外围设备的所有时钟信号 ( 掉电模式会自动关闭内部 ADC 模块供电, 但不会关闭 OP 和 CMP 模块供电, 如需切断相应模块供电, 须软件手动关闭该模块 ) 如果 WDT 使能,WDT 模块将继续工作 在进入掉电模式前所有 CPU 的状态都被保存, 如 PC,PSW,SFR,RAM 等 两条连续指令 : 先设置 SUSLO 寄存器为 55H, 随即将 PCON 寄存器中的 PD 位置 1, 使 进入掉电模式 如果按顺序要求的连续指令不被满足,CPU 在下一个机器周期清除 SUSLO 寄存器或的 IDL 位,CPU 也不会进入掉电模式 PD 位置 1 是 CPU 进入掉电模式之前执行的最后一条指令 注意 : 如果同时设置 IDL 位和 PD 位, 进入掉电模式 退出掉电模式后,CPU 也不会进入空闲模式, 从掉电模式退出后硬件会清除 IDL 及 PD 位 有两种方式可以退出掉电模式 : (1) 有效外部中断 ( 如 INT0,INT1,INT4) 和一定情况下的 Timer3 中断 ( 详见定时器 3 章节 ) 能使 退出掉电模式 在中断发生后振荡器启动,CPU 时钟和外部设备时钟立即恢复,SUSLO 寄存器和 PCON 寄存器中的 PD 位会被硬件清除, 然后程序运行中断服务程序 在完成中断服务程序之后, 跳转到进入掉电模式之后的指令继续运行 (2) 复位信号 ( 复位引脚上出现低电平,WDT 复位如果被允许,LVR 复位如果被允许 ) 在预热计时之后会恢复 CPU 时钟, SUSLO 寄存器和 PCON 寄存器中的 PD 位会被硬件清除, 最后 会被复位 然后程序会从 0000H 地址位开始运行 RAM 将保持不变, 而根据不同功能模块 SFR 的值可能改变 注意 : 如要进入这两种低功耗模式, 必须在置位 PCON 中的 IDL/PD 位后增加 3 个空操作指令 143

144 寄存器 Table 8.61 电源控制寄存器 Table 8.62 省电模式控制寄存器 程序举例 : 87H 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 PCON SMOD SSTAT IT41 IT40 GF1 GF0 PD IDL 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7 SMOD 6 SSTAT 5-4 IT4[1:0] 3-2 GF[1:0] 1 PD 0 IDL UART 波特率加倍器 SCON[7:5] 功能选择位 外部中断 4 模式选择控制位 用于软件的通用标志 掉电模式控制位 0: 当一个中断或复位产生时由硬件清 0 1: 由软件置 1 激活掉电模式 空闲模式控制位 0: 当一个中断或复位产生时由硬件清 0 1: 由软件置 1 激活空闲模式 8EH 第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 SUSLO SUSLO.7 SUSLO.6 SUSLO.5 SUSLO.4 SUSLO.3 SUSLO.2 SUSLO.1 SUSLO.0 读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写读 / 写 位编号位符号说明 7-0 SUSLO[7:0] 此寄存器用来控制 CPU 进入省电模式 ( 空闲或掉电 ) 只有像下面的连续指令才能使 CPU 进入省电模式, 否则在下个周期中 SUSLO,IDL 或 PD 位将被硬件清 0 IDLE_MODE: MOV ORL NOP NOP NOP SUSLO,#55H PCON,#01H POWERDOWN_MODE: MOV SUSLO,#55H ORL PCON,#02H NOP NOP NOP 144

145 8.11 预热计数器 特性 内建电源预热计数器消除电源的上电的不稳定状态 内建振荡器预热计数器消除振荡器起振时的不稳定状态 内建有电源上电预热计数器, 主要是用来消除上电电压建立时的不稳定态, 同时完成内部一些初始化序列, 如读取内部客户代码选项等 还内建振荡器预热计数器, 它能消除振荡器在下列情况下起振时的不稳定状态 : 上电复位, 引脚复位, 从低功耗模式中唤醒, 看门狗复位和 LVR 复位 上电后, 会先经过电源上电预热计数过程, 等待溢出后再进行振荡器的预热计数过程过程, 溢出后开始运行程式 电源上电预热计数时间 上电复位 / 按键复位 / 低压复位 WDT 复位 ( 不在掉电情况下 ) WDT 复位 ( 从掉电情况唤醒 ) 从掉电情况下唤醒 ( 只是中断唤醒 ) 电源上电预热计数时间 振荡器上电预热计数 电源上电预热计数时间 振荡器上电预热计数 电源上电预热计数时间 振荡器上电预热计数 电源上电预热计数时间 振荡器上电预热计数 11ms 有 1ms 无 1ms 有 800us 有 振荡器上电预热计数时间 Option: OP_WMT 振荡器类型 陶振 / 晶振 2 17 X Tosc 2 14 X Tosc 2 11 X Tosc 2 8 X Tosc 内部 RC 2 7 X Tosc 145

146 8.12 代码选项 OP_LVREN: 0: 禁止低电压复位功能 ( 默认 ) 1: 允许低电压复位功能 OP_LVRLE: 0: 低电压复位设定电压为 4.1V( 默认 ) 1: 低电压复位设定电压为 2.8V OP_RST: 0: 引脚 P1.5 用作复位引脚 ( 默认 ) 1: 引脚 P1.5 用作 I/O 口 OP_WDT: 0: 允许 WDT 功能 1: 禁止 WDT 功能 ( 默认 ) OP_WDTPD: 0: 禁止掉电模式下 WDT 功能 ( 默认 ) 1: 允许掉电模式下 WDT 功能 OP_WMT:( 除了 RC) 00: 振荡器采用最长预热计数时间 ( 默认 ) 01: 振荡器采用比较长预热计数时间 10: 振荡器采用比较短预热计数时间 11: 振荡器采用最短预热计数时间 OP_SCM: 0: 在预热期间禁止时钟单元检测功能 ( 默认 ) 1: 在预热期间允许时钟单元检测功能 OP_OSC: 0000: 单振荡器模式, 选中内部 27MHz RC 振荡器 ( 默认 ) 0011: 双振荡器模式, 内部 128KHz RC 振荡器作为振荡器 1,27MHz 内部 RC 作为振荡器 : 双振荡器模式, 内部 128KHz RC 振荡器作为振荡器 1,400k-16MHz 晶体 / 陶瓷谐振器作为振荡器 : 单振荡器模式, 选中 400k-16MHz 晶体 / 陶瓷谐振器 P2 N buffer enlarge Sink current: 0:P2 口灌电流能力增强功能关闭 ( 默认 ) 1:P2 口灌电流能力增强功能开启 P3/P0 P buffer enlarge Driving current: 0:P3/P0 口拉电流能力增强功能关闭 ( 默认 ) 1:P3/P0 口拉电流能力增强功能开启 OP_CRMC: 0: 振荡源为晶振时选取 ( 默认 ) 1: 振荡源为陶振时选取 OP_OSCDRV: 11:400k-16MHz 晶体 / 陶瓷谐振器的驱动能力选择最高档 ( 默认 ) 10:400k-16MHz 晶体 / 陶瓷谐振器的驱动能力选择较高档 01:400k-16MHz 晶体 / 陶瓷谐振器的驱动能力选择较低档 00:400k-16MHz 晶体 / 陶瓷谐振器的驱动能力选择最低档 146

147 9. 指令集 算术操作指令 指令功能描述代码字节周期 ADD A,Rn 累加器加寄存器 0x28-0x2F 1 1 ADD A,direct 累加器加直接寻址字节 0x ADD A,@Ri 累加器加内部 RAM 0x26-0x ADD A,#data 累加器加立即数 0x ADDC A,Rn 累加器加寄存器和进位位 0x38-0x3F 1 1 ADDC A,direct 累加器加直接寻址字节和进位位 0x ADDC A,@Ri 累加器加内部 RAM 和进位位 0x36-0x ADDC A,#data 累加器加立即数和进位位 0x SUBB A,Rn 累加器减寄存器和借位位 0x98-0x9F 1 1 SUBB A,direct 累加器减直接寻址字节和借位位 0x SUBB A,@Ri 累加器减内部 RAM 和借位位 0x96-0x SUBB A,#data 累加器减立即数和借位位 0x INC A 累加器加 1 0x INC Rn 寄存器加 1 0x08-0x0F 1 2 INC direct 直接寻址字节加 1 0x 内部 RAM 加 1 0x06-0x DEC A 累加器减 1 0x DEC Rn 寄存器减 1 0x18-0x1F 1 2 DEC direct 直接寻址字节减 1 0x 内部 RAM 减 1 0x16-0x INC DPTR 数据指针加 1 0xA3 1 4 MUL AB 8 X 8 16 X 8 DIV AB 8 / 8 16 / 8 累加器乘寄存器 B 0xA4 1 累加器除以寄存器 B 0x84 1 DA A 十进制调整 0xD

148 逻辑操作指令 指令 功能描述 代码 字节 周期 ANL A,Rn 累加器与寄存器 0x58-0x5F 1 1 ANL A,direct 累加器与直接寻址字节 0x ANL A,@Ri 累加器与内部 RAM 0x56-0x ANL A,#data 累加器与立即数 0x ANL direct,a 直接寻址字节与累加器 0x ANL direct,#data 直接寻址字节与立即数 0x ORL A,Rn 累加器或寄存器 0x48-0x4F 1 1 ORL A,direct 累加器或直接寻址字节 0x ORL A,@Ri 累加器或内部 RAM 0x46-0x ORL A,#data 累加器或立即数 0x ORL direct,a 直接寻址字节或累加器 0x ORL direct,#data 直接寻址字节或立即数 0x XRL A,Rn 累加器异或寄存器 0x68-0x6F 1 1 XRL A,direct 累加器异或直接寻址字节 0x XRL A,@Ri 累加器异或内部 RAM 0x66-0x XRL A,#data 累加器异或立即数 0x XRL direct,a 直接寻址字节异或累加器 0x XRL direct,#data 直接寻址字节异或立即数 0x CLR A 累加器清零 0xE4 1 1 CPL A 累加器取反 0xF4 1 1 RL A 累加器左环移位 0x RLC A 累加器连进位标志左环移位 0x RR A 累加器右环移位 0x RRC A 累加器连进位标志右环移位 0x SWAP A 累加器高 4 位与低 4 位交换 0xC

149 数据传送指令 指令 功能描述 代码 字节 周期 MOV A,Rn 寄存器送累加器 0xE8-0xEf 1 1 MOV A,direct 直接寻址字节送累加器 0xE5 2 2 MOV A,@Ri 内部 RAM 送累加器 0xE6-0xE7 1 2 MOV A,#data 立即数送累加器 0x MOV Rn,A 累加器送寄存器 0xF8-0xFF 1 2 MOV Rn,direct 直接寻址字节送寄存器 0xA8-0xAF 2 3 MOV Rn,#data 立即数送寄存器 0x78-0x7F 2 2 MOV direct,a 累加器送直接寻址字节 0xF5 2 2 MOV direct,rn 寄存器送直接寻址字节 0x88-0x8F 2 2 MOV direct1,direct2 直接寻址字节送直接寻址字节 0x MOV direct,@ri 内部 RAM 送直接寻址字节 0x86-0x MOV direct,#data 立即数送直接寻址字节 0x 累加器送内部 RAM 0xF6-0xF7 1 2 直接寻址字节送内部 RAM 0xA6-0xA7 2 3 立即数送内部 RAM 0x76-0x MOV DPTR,#data16 16 位立即数送数据指针 0x MOVC A,@A+DPTR 程序代码送累加器 ( 相对数据指针 ) 0x MOVC A,@A+PC 程序代码送累加器 ( 相对程序计数器 ) 0x MOVX A,@Ri 外部 RAM 送累加器 (8 位地址 ) 0xE2-0xE3 1 5 MOVX A,@DPTR 外部 RAM 送累加器 (16 位地址 ) 0xE0 1 6 累加器送外部 RAM(8 位地址 ) 0xF2-F3 1 4 累加器送外部 RAM(16 位地址 ) 0xF0 1 5 PUSH direct 直接寻址字节压入栈顶 0xC0 2 5 POP direct 栈顶弹至直接寻址字节 0xD0 2 4 XCH A,Rn 累加器与寄存器交换 0xC8-0xCF 1 3 XCH A,direct 累加器与直接寻址字节交换 0xC5 2 4 XCH A,@Ri 累加器与内部 RAM 交换 0xC6-0xC7 1 4 XCHD A,@Ri 累加器低 4 位与内部 RAM 低 4 位交换 0xD6-0xD

150 控制程序转移指令 指令功能描述代码字节周期 ACALL addr11 2KB 内绝对调用 0x11-0xF1 2 7 LCALL addr16 64KB 内长调用 0x RET 子程序返回 0x RETI 中断返回 0x AJMP addr11 2KB 内绝对转移 0x01-0xE1 2 4 LJMP addr16 64KB 内长转移 0x SJMP rel 相对短转移 0x 相对长转移 0x JZ rel ( 不发生转移 ) ( 发生转移 ) JNZ rel ( 不发生转移 ) ( 发生转移 ) JC rel ( 不发生转移 ) ( 发生转移 ) JNC rel ( 不发生转移 ) ( 发生转移 ) JB bit,rel ( 不发生转移 ) ( 发生转移 ) JNB bit,rel ( 不发生转移 ) ( 发生转移 ) JBC bit,rel ( 不发生转移 ) ( 发生转移 ) CJNE A,direct,rel ( 不发生转移 ) ( 发生转移 ) CJNE A,#data,rel ( 不发生转移 ) ( 发生转移 ) CJNE Rn,#data,rel ( 不发生转移 ) ( 发生转移 ) ( 不发生转移 ) ( 发生转移 ) DJNZ Rn,rel ( 不发生转移 ) ( 发生转移 ) DJNZ direct,rel ( 不发生转移 ) ( 发生转移 ) 累加器为零转移 0x60 2 累加器为非零转移 0x70 2 C 置位转移 0x40 2 C 清零转移 0x50 2 直接寻址位置位转移 0x20 3 直接寻址位清零转移 0x30 3 直接寻址位置位转移并清该位 0x10 3 累加器与直接寻址字节不等转移 0xB5 3 累加器与立即数不等转移 0xB4 3 寄存器与立即数不等转移 0xB8-0xBf 3 内部 RAM 与立即数不等转移 0xB6-0xB7 3 寄存器减 1 不为零转移 0xD8-0xDf 2 直接寻址字节减 1 不为零转移 0xD5 3 NOP 空操作

151 位操作指令 指令 功能描述 代码 字节 周期 CLR C C 清零 0xC3 1 1 CLR bit 直接寻址位清零 0xC2 2 3 SETB C C 置位 0xD3 1 1 SETB bit 直接寻址位置位 0xD2 2 3 CPL C C 取反 0xB3 1 1 CPL bit 直接寻址位取反 0xB2 2 3 ANL C,bit C 逻辑与直接寻址位 0x ANL C,/bit C 逻辑与直接寻址位的反 0xB0 2 2 ORL C,bit C 逻辑或直接寻址位 0x ORL C,/bit C 逻辑或直接寻址位的反 0xA0 2 2 MOV C,bit 直接寻址位送 C 0xA2 2 2 MOV bit,c C 送直接寻址位 0x

152 10. 电气特性 极限参数 * 直流供电电压 V to +6.0V 输入 / 输出电压 GND-0.3V to V DD +0.3V 工作环境温度 C to +105 C 存储温度 C to +125 C FLASH 存储器写 / 擦除操作 C to +85 C 直流电气特性 (V DD = V,GND = 0V * 注释 0V,T A = +25 C, 除非另有说明 ) 如果器件的工作条件超过左列 极限参数 的范围, 将造成器件永久性破坏 只有当器件工作在说明书所规定的范围内时功能才能得到保障 器件在极限参数列举的条件下工作将会影响到器件工作的可靠性 参数符号最小值典型值 最大值单位条件 工作电压 V DD V 400k f OSC 27MHz 工作电流 待机电流 ( 空闲模式 ) I OP ma I OP µa I SB ma I SB µa 待机电流 ( 掉电模式 ) I SB µa f OSC = 27MHz,V DD = 5.0V 所有输出引脚无负载 ( 所有数字输入引脚不浮动 ); CPU 打开 ( 执行 NOP 指令 );WDT 打开 ; 所有功能模块关闭 f OSC = 128kHz,V DD = 5.0V 所有输出引脚无负载 ( 所有数字输入引脚不浮动 ); CPU 打开 ( 执行 NOP 指令 );WDT 打开 ; 所有功能模块关闭 f OSC = 27MHz,V DD = 5.0V 所有输出引脚无负载 ( 所有数字输入引脚不浮动 ) ; CPU 停止工作 (IDLE);WDT 关 ; LVR 打开, 关闭其它所有功能 f OSC = 128KHz,V DD = 5.0V 所有输出引脚无负载 ( 所有数字输入引脚不浮动 ) ; CPU 停止工作 (IDLE);WDT 关 ; LVR 打开, 关闭其它所有功能 Osc off,v DD = 5.0V 所有输出引脚无负载 ;CPU 停止 ( 掉电模式 ); WDT 关闭 ;LVR 关闭 ; 关闭其它所有功能 LVR 电流 I LVR1-1 - µa LVR 打开,LVR 电平 = 4.1V/2.8V WDT 电流 I WDT µa 所有输出引脚无负载 ; 看门狗打开 V DD = 5.0V 输入低电压 1 V IL1 GND X V DD V I/O 端口 输入高电压 1 V IH1 0.7 X V DD - V DD V I/O 端口 输入低电压 2 V IL2 GND X V DD V RST,T0,T1,T2,T3,INT0/1/4,RXD 输入高电压 2 V IH2 0.8 X V DD - V DD V RST,T0,T1,T2,T3,INT0/1/4,RXD 输入漏电流 I IL -1-1 µa 输入口,V IN = V DD 或者 GND 上拉电阻 R PH kω V DD = 5.0V,V IN = GND 152

153 续上表 输出高电压 V OH1 V DD V 输出高电压 V OH2 V DD V 输出低电压 1 V OL1 - - GND V 输出低电压 2 V OL2 - - GND V I/O 端口,I OH = -10mA, V DD = 5.0V 除 P3,P0 端口以外 I/O 端口,I OH = -20mA, V DD = 5.0V,P3,P0 端口 (Note 4) I/O 端口,I OL = 15mA, V DD = 5.0V, 除 P2 端口以外 I/O 端口,I OL = 120mA, V DD = 5.0V,P2 端口 (Note 4) 电压基准源精度 V BG V T A = -40 ~ +85 C(Note3) 注意 : 1. 表示典型值下的数据是在 5.0V,25 C 下测得的, 除非另有说明 2. 流过 V DD 的最大电流值须小于 150mA 流过 GND 的最大电流值须小于 200mA 3. 设计保证, 实际测试时未包含温度. 4. 驱动口能力加大受代码选项控制 高速转换模式下 10BIT 模 / 数转换器电气特性 1(1LSB 1LSB = V DD /1024) 转换速率为 1M sps (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数符号最小值典型值最大值单位条件 工作电压范围 V AD V 精度 N R bit V REF = 5.0V A/D 输入电压 V AIN GND - V REF V A/D 输入电阻 R AIN MΩ V IN = 5.0V 外部模拟参考电压 V REF V DD V 模拟输入电压源推荐阻抗 Z AIN kω A/D 转换电流 I AD ma ADC 模块工作,V DD = 5.0V 微分非线性误差 D LE - - ±1 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 27MHz 积分非线性误差 I LE - - ±2 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 27MHz 满刻度误差 E F - - ±3 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 27MHz 偏移量误差 E Z - - ±3 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 27MHz 总绝对误差 E AD - - ±3 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 27MHz ADC 时钟周期 t AD µs ADC 采样时间 t SAMP µs 总转换时间 T CON t AD 153

154 低速转换模式下 12BIT 模 / 数转换器电气特性 2(1LSB = V DD / ) 转换速率为 100K sps (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数 符号 最小值 典型值 最大值 单位 条件 工作电压范围 V AD V 精度 N R bit V REF = 5.0V A/D 输入电压 V AIN GND - V REF V A/D 输入电阻 R AIN MΩ V IN = 5.0V 外部模拟参考电压 V REF V DD V 模拟电压源推荐阻抗 Z AIN kω A/D 转换电流 I AD ma ADC 模块工作,V DD = 5.0V 微分非线性误差 D LE - - ±1 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 2.7MHz 积分非线性误差 I LE - - ±2 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 2.7MHz 满刻度误差 E F - - ±8 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 2.7MHz 偏移量误差 E Z - - ±8 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 2.7MHz 总绝对误差 E AD - - ±8 LSB V DD = 5.0V,V REF = 5.0V,ADC CLK 2.7MHz ADC 时钟周期 t AD µs ADC 采样时间 t SAMP µs 总转换时间 T CON t AD 比较器 1 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数 符号 最小值 典型值 最大值 单位 条件 输入失调电压 V IO mv 输入共模电压范围 V ICM 0 - V DD V 小信号响应时间 T RS1-1 2 µs V DD = 5V,C1P = 1.25V,C1N = 1.20V 大信号响应时间 T RS µs V DD = 5V,C1P = 3V,C1N = 1V 比较器 2 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数 符号 最小值 典型值 最大值 单位 条件 输入失调电压 V IO mv 输入共模电压范围 V ICM 0 - V DD V 小信号响应时间 T RS1-1 2 µs V DD = 5V,C2P = 1.25V,C2N = 1.20V 大信号响应时间 T RS µs V DD = 5V,C2P = 3V,C2N = 1V 比较器施密特窗口 1 V SMT1-0 - mv V DD = 5V,C2SMT[1:0] = 00 比较器施密特窗口 2 V SMT2-5 8 mv V DD = 5V,C2SMT[1:0] = 01 比较器施密特窗口 3 V SMT mv V DD = 5V,C2SMT[1:0] = 10 比较器施密特窗口 4 V SMT mv V DD = 5V,C2SMT[1:0] =

155 放大器 1 和放大器 2 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数符号最小值典型值最大值单位条件 输入失调电压 V IO mv T A = 25 C 输入共模电压 V ICM 0 - V DD V 温度系数 % - V OUT = 2.5V, 温度变每化 1 C, 输出电压的变化率 转换速率 SR V/us 电压跟随器模式 输出电压范围 V OUR V DD V 电压抑制比 SVR db 直流特性 共模抑制比 CMRR db 直流特性 输出能力 ( 灌电流和拉电流能力 ) I O ma V DD = 5V,V OUT = 1.0V ( 灌电流 ) or 4V ( 拉电流 ) 增益带宽 BW MHz 电压跟随器模式 交流电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 参数符号最小值典型值最大值单位条件 复位脉冲宽度 t RESET µs 低电平有效 复位引脚上拉电阻 R RPH kω V DD = 5.0V,V IN = GND 频率稳定性 (RC) F / F ±1 % F / F - - ±3 % 低电压复位电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 内部 RC 振荡器频率精度 :(1024 个周期求平均值 ) F RC - 27MHz /27MHz X 100% (V DD = V,T A = 25 C) 内部 RC 振荡器频率精度 :(1024 个周期求平均值 ) F RC - 27MHz /27MHz X 100% (V DD = V,T A = -40 C 至 +105 C) 参数符号最小值典型值最大值单位条件 LVR 电压 1 V LVR V LVR1 使能 LVR 电压 2 V LVR V LVR2 使能 辅助 LVR V LVR V 内部辅助 LVR( 始终有效 ) LVR 电压检测迟滞窗口 V SMTLV mv LVR 低电压复位宽度 T LVR µs 155

156 11. 订购信息 产品编号 U/048UR 封装 TQFP48 156

157 12. 封装信息 TQFP48 外形尺寸 单位 : 英寸 / 毫米 Symbol Dimensions in inches Dimensions in mm Min. Max. Min. Max. A A A A Typ. 0.5 Typ. A Typ Typ. B B B Typ Typ. C C C C Typ Typ. C Typ Typ. D D R Typ Typ. R Typ Typ. θ1 12 Typ. 12 Typ. θ2 12 Typ. 12 Typ. θ θ4 7 Typ. 7 Typ. 157

158 13. 规格更改记录版本 记录 日期 1.0 初始版本 2013 年 8 月 158

159 目录 1. 特性 概述 方框图 引脚配置 引脚描述 SFR 映像 标准功能 CPU 内核特殊功能寄存器 CPU 增强内核特殊功能寄存器 RAM FLASH 程序存储器 特性 ICP 模式下的 Flash 操作 SSP 寄存器 Flash 控制流程图 SSP 编程注意事项 可读识别码 系统时钟和振荡器 特性 时钟定义 系统时钟监控 (SCM) 振荡器类型 谐振器负载电容选择 I/O 端口 特性 寄存器 端口模块图 端口共用 定时器 特性 定时器 0 和定时器 定时器 定时器 BIT 脉冲宽度调制模块 (PWM3) 特性 寄存器 中断 特性 中断允许控制 中断标志 中断向量 中断优先级 中断处理 中断响应时间 外部中断输入 中断汇总 增强功能 电机控制模块 MCM(MOTOR CONTROL MODULE)PWM0/1/ 特性 寄存器 PWM0/1/2 时基模块 (PWM Time Base Block) PWM0/1/2 波形发生模块

160 8.1.5 PWM 死区与极性控制模块 故障检测模块 PWM 输出控制模块 事件触发功能 注意事项 代码示例 乘 / 除法 / 移位单元 (MDSU) 特性 乘 / 除法 / 移位单元 (MDSU) 单元寄存器 bit X 16-bit 数乘法 bit 16-bit 数除法 bit 移位 快速清空操作数 / 结果寄存器 注意事项 异常状态 运算放大器和比较器模块 特性 寄存器 比较器用法 增强型通用异步收发器 (EUART) 特性 工作方式 可微调波特率 多机通讯 帧出错检测 寄存器 模 / 数转换模块 (ADC) 特性 ADC 模块图 ADC 寄存器 序列转换工作模式 连续转换工作模式 比较功能 ADC 转换时间设置 ADC 模块参考电压的设置 ADC 通道与 IO 口功能设置 ADC 结果寄存器 / 通道寄存器之间的映射关系 AD 转换时对传感器输出阻抗的要求 注意事项 程序示例 串行外部设备接口 (SPI) 特性 信号描述 波特率 功能描述 工作模式 传送形式 SPSTA 异常情况 中断 寄存器 蜂鸣音发生器 特性 寄存器 电压复位 (LVR) 特性

161 8.9 看门狗定时器 (WDT), 程式超范围溢出 (OVL) 复位及其它复位状态 特性 寄存器 电源管理 特性 空闲模式 掉电模式 寄存器 预热计数器 特性 代码选项 指令集 电气特性 极限参数 * 直流电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 高速转换模式下 10BIT 模 / 数转换器电气特性 1(1LSB = V DD /1024) 低速转换模式下 12BIT 模 / 数转换器电气特性 2(1LSB = V DD /4096) 比较器 1 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 比较器 2 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 放大器 1 和放大器 2 电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 交流电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 低电压复位电气特性 (V DD = V,GND = 0V,T A = +25 C, 除非另有说明 ) 订购信息 封装信息 规格更改记录

SH79F161B I/O 1. SH79F161B SH79F161B IO 30 I/O I/O 4 I/O SH79F161B 30 I/O Px I/O PxCRy I/O PxPCRy x = 0-3 y = IO PxCRy IO x=0-3 y=0-7

SH79F161B I/O 1. SH79F161B SH79F161B IO 30 I/O I/O 4 I/O SH79F161B 30 I/O Px I/O PxCRy I/O PxPCRy x = 0-3 y = IO PxCRy IO x=0-3 y=0-7 SH79F161B - 10 ADC 8051 V 1.0 SH79F161B I/O 1. SH79F161B 8051 8051 SH79F161B IO 30 I/O I/O 4 I/O SH79F161B 30 I/O Px I/O PxCRy I/O PxPCRy x = 0-3 y = 0-7 2. IO PxCRy IO x=0-3 y=0-7 PxPCRy IO x=0-3 y=0-7

More information

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0 SH79F6431 1. SH79F6431 1T 8051 FLASH SH79F JET51 Keil µ vision JTAG 1.1. SH79F6431 LQFP64 1.2. (Target Board) SH79F6431 1 V 1.0 1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F6431 1 2 1 B. 1(VCC/GND)

More information

W77E58中文手册

W77E58中文手册 W77E58 77E58 8051 8051 8051 77E58 8051 1.5 3 COMS 32K EEPROM 1K SRAM 1 8 2 40M 4 3 8051 4 8051 5 4 8 I/O 6 4 I/O 44 PLCC QFP 7 16 / 8 12 9 10 11 1K 12 13 16 DPTR 14 15 DIP40 W77E58 25/40 PLCC44 W77E58P

More information

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe   Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L 1 SH88F516 8051 64K FLASH 1024 EEPROM SH88F516 JET51 S-Lab Keil µ vision ISP51 Keil µ vision ISP51 ISP51 PC RS232 MCU SH88F516 SH88F516 1.1 SH88F516 1.1 SH88F516 SH88Fxx: QFP44, DIP40 RAM Flash E2 ADC

More information

G80F915

G80F915 VER1.2 2014.5 选型指南 订购型号 FLASH ROM RAM I/O MAX TIMER INT LCD LED PWM EUART 其他温度范围封装 G80F915U 32K 1.5K 46 4*16 5 8*24/6*26 1*12 3~8*8 5*27/4*28 1*8 G80F915F 32K 1.5K 42 4*16 5 8*20/6*22 1*12 3~8*8 5*23/4*24

More information

7688使用手冊V10.doc

7688使用手冊V10.doc TP-7688 . 2 2. 3 3. 5 4. 5 5. 6 6. 7 7. 8 8. 9 9.. 4. 7 2 2., 7x9 / 6x9 7x9.3() x 3.()mm 6x9 2.84() x 3.()mm 3 ASCII 7x9 95 ASCII 6x9 95 6x9 7 BIG5 6x9 3973 6x9 28 7x9 24 24 55 6x9 2 2 27 4.23mm (/6 inch)

More information

DPJJX1.DOC

DPJJX1.DOC 8051 111 2K 1 2 3 ' ' 1 CPU RAM ROM / A/D D/A PC CPU 40 68 10 20 8 51 PIII 8051 2 MCS51 8051 8031 89C51 8051 8031 89C51? MCS51 INTEL INTEL 8031 8051 8751 8032 8052 8752 8051 8051 8051 MCS51 8031 8031

More information

79F161 V0.2

79F161 V0.2 带 10 位 ADC 的增强型 8051 微控制器 1. 特性 基于 8051 指令流水线结构的 8 位单片机 Flash ROM:16K 字节 RAM: 内部 256 字节, 外部 512 字节 工作电压 : - f OSC = 400kHz - 16MHz,V DD = 3.6V - 5.5V 振荡器 ( 代码选项 ): - 晶体谐振器 :400kHz - 16MHz - 陶瓷谐振器 :400kHz

More information

79F161 V0.2

79F161 V0.2 集成 8 路触摸按键,12 位 PWM 的增强型 8051 微控制器 1. 特性 基于 8051 指令流水线结构的 8 位单片机 Flash ROM:32K 字节 ( 烧写次数 1 万次 ) RAM: 内部 256 字节, 外部 1280 字节,LED RAM 28 字节, 触摸按键 RAM 16 字节 类 EEPROM:1024 字节 ( 烧写次数 10 万次 ) 工作电压 : - f OSC =

More information

79F161 V0.2

79F161 V0.2 SH88F2051 / 带 10 位 ADC 的 2051/4051 微控制器 1. 特性 基于 8051 兼容流水指令的 8 位单片机 Flash ROM:4K/8K 字节 RAM: 内部 256 字节, 外部 256 字节 片上 512 字节类 EEPROM 存储空间 工作电压 : fosc = 30kHz - 16.6MHz,VDD = 2.8V - 5.5V 振荡器 ( 代码选项 ): -

More information

Microsoft Word - 專題封面.doc

Microsoft Word - 專題封面.doc 逢 甲 大 學 資 訊 工 程 學 系 專 題 研 究 報 告 8051 小 遊 戲 -21 點 指 導 教 授 : 陳 德 生 學 生 : 許 博 益 中 華 民 國 九 十 六 年 六 月 I 目 錄 第 一 章 緒 論 1 1-1 研 究 背 景 1 1-2 研 究 動 機 2 1-3 研 究 目 的 3 1-3-1 21 點 源 起 3 1-3-2 21 點 規 則 3 第 二 章 微 電

More information

79F161 V0.2

79F161 V0.2 集成 24 路触摸按键输入和 PWM 的增强型 8051 微控制器 1. 特性 基于 8051 指令流水线结构的 8 位单片机 Flash ROM:32K 字节 RAM: 内部 256 字节, 外部 1280 字节,LCD RAM28 字节 touchkey RAM 48 字节 类 EEPROM: 最大 4096 字节 ( 代码选项可选 ) 工作电压 : - f OSC = 32.768kHz -

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

1

1 W7E65 1. W7E65 ISP Flash EPROM ISP Flash EPROM 52 W7E65 64K Flash EPROM 4K Flash EPROM 4K Flash EPROM loader 64K ROM 1K RAM 4 I/O 4 I/O P4 3 16 / 2 W7E65 Flash EPROM W7E65 2 2 2. CMOS 12 64K ISP Flash

More information

5. P0.0 P0.7 P0 4 2 P0.3~P0.6 ADC P1.0 P P1.2(SCL) P1.3(SDA) P1.5 RST P1.5 2 XTAL1(P2.1) 1 XTAL0(P2.0) 2 XTAL1 I/O VDD VSS 6. H5815 4T 16K Flas

5. P0.0 P0.7 P0 4 2 P0.3~P0.6 ADC P1.0 P P1.2(SCL) P1.3(SDA) P1.5 RST P1.5 2 XTAL1(P2.1) 1 XTAL0(P2.0) 2 XTAL1 I/O VDD VSS 6. H5815 4T 16K Flas H5815 1. H5815 H5815 3 H5815 8052 16K Flash EPROM 256 NVM Flash EPROM 256 RAM 2 8 1 2 I/O 16-2 / 4 10 AD 4 10 PWM 1 I2C 1 UART 13 4 H5815 2. 4T 51 20MHZVDD=2.7V~ 16K Flash EPROM 256 RAM 256 NVM FLASH EPROM

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 [email protected] C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

128K Flash EPROM 的程序?\(Bank=64K\) 切?

128K Flash EPROM 的程序?\(Bank=64K\) 切? 应用说明 华邦 8 位单片机 (8051 内核 ) 应用说明 华邦 8 位单片机 (8051 内核 ) ANSC-UC08-0007 目录 - 1. 应用说明 :...4 1.1...4 1.2 相关寄存器介绍...4 1.2.1 串行口控制寄存器 (SCON)... 4 1.2.2 串行数据缓冲寄存器 (SBUF)... 5 1.2.3 串行口控制 1 (SCON1)... 5 1.2.4 串行数据接收缓冲

More information

四位微控制器ML64168_ _.doc

四位微控制器ML64168_ _.doc SSSC /4168P 2005 8 4 4, (ADC), LCD Driver, (Buzzer), 1 3 CPU17 CPU 26 33 42 45 48 73 79 85 89 A/D 92 111 125 128 131 SSU4168P 133 143 A: / 153 B: 156 C: 158 D: 160 E: 161 F: 163 G: PAD 167 2 ,, 11 4 CMOS

More information

at89S52.doc

at89S52.doc 主要性能 与 MCS-51 单片机产品兼容 8K 字节在系统可编程 Flash 存储器 1000 次擦写周期 全静态操作 :0Hz~33Hz 三级加密程序存储器 32 个可编程 I/O 口线 三个 16 位定时器 / 计数器 八个中断源 全双工 UART 串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符 8 位微控制器 8K 字节在系统可编程 Flash R 功能特性描述

More information

1 TPIS TPIS 2 2

1 TPIS TPIS 2 2 1 1 TPIS TPIS 2 2 1. 2. 3. 4. 3 3 4 5 4 TPIS TPIS 6 5 350 Mark Coil F3/F6 350 M 150 M 25 M 7.12M 8 M F3 F6 F4 F7 F8 8M AA 7 350 28V 5V IC HCPL2731 0.5mA 6 8 (TPIS) TPIS 9 7 IC AT89C2051 AT89C2051 CMOS8

More information

µPSD3000 系列

µPSD3000 系列 8032 FLASH MCU µpsd3251f-40t6 µpsd3251 8032 FlashPSD Flash SRAM I/O I 2 C, ADC and PWM 8032, 16 / FlashPSD µpsd32 JTAG ISP 2K SRAM Flash - 64K Flash - 16K Flash - Flash 8032 12 I2C ADC 6 I/O 37 I/O 16

More information

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63> 臺 北 市 立 松 山 高 級 工 農 職 業 學 校 資 訊 科 專 題 製 作 報 告 題 目 : 反 彈 空 間 指 導 老 師 : 余 耀 銘 學 生 : 廖 國 銓 趙 信 瑋 中 華 民 國 102 年 5 月 摘 要 在 這 高 速 科 技 的 起 飛 下, 科 技 都 建 立 起 於 基 礎, 有 些 人 把 這 基 礎 轉 為 理 論, 教 給 大 眾 學 習 ; 有 些 人 利

More information

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg 1 1 a. 0.5V 5V 1Hz 1MHz b. 0.1% 2 : a. 0.5V 5V 1Hz 1MHz b. 0.1% (3) a. 0.5V 5V 100 s b. 1% 4 1 10 5 1MHz 6 1 2 1 0.1Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15

More information

DATASHEET SEARCH SITE ==

DATASHEET SEARCH SITE == 1K 一次性编程, 10 位 ADC 型 4 位单片机 特性 基于 SH6610C, 10 位 ADC 型 4 位单片机 OTP ROM: 1K X 16 位 RAM: 124 X 4 位 - 28 系统控制寄存器 - 96 数据存储器 工作电压 : - fosc = 16MHz, VDD = 3.3V - 5.5V 6 个双向 I/O 端口 4 层堆栈 ( 包括中断 ) 一个 8 位自动重载定时

More information

USB解决方案.ppt

USB解决方案.ppt USB USB? RS232 USB USB HID U modem ADSL cable modem IrDA Silabs USB CP210x USB UART USB RS-232 USB MCU 15 USB 12 FLASH MCU 3 USB MCU USB MCU C8051F32x 10 ADC 1.5%, Vref CPU 25MIPS 8051 16KB Flash -AMUX

More information

untitled

untitled XZL024 http://item.taobao.com/item.htm?id=6321822194 1 1 1.1 1.2 1.3 1.4 2 2.1 2.2 2.3 3 USBee Suite 3.1 3.2 3.3 3.4 4 RS232 RS485 RS422 CAN http://item.taobao.com/item.htm?id=6321822194 2 1 XZL024 PC

More information

2 PIC PIC 1 / CPU PIC MCU PIC RC

2 PIC PIC 1 / CPU PIC MCU PIC RC 2 PIC PIC 1 /... 2-2 2... 2-3 3... 2-4 4... 2-4 5... 2-4 6 CPU... 2-5 7 PIC MCU... 2-6 8 PIC16... 2-6 9... 2-7 10... 2-7 11 RC... 2-7 12... 2-8 13... 2-8 14 NOP... 2-9 15 PMD... 2-9 16... 2-10 17 WDTWDT...

More information

W79E825_824_823A_822A_SC6.PDF

W79E825_824_823A_822A_SC6.PDF 8- W79E825/824/823A/822A - 1.... 5 2.... 5 3.... 6 3.1 (RoHS)... 6 4.... 7 5.... 8 6.... 9 6.1 Flash EPROM... 9 6.2 I/O... 9 6.3 (UART)... 9 6.4... 9 6.5... 9 6.6... 10 6.7... 10 6.8 CPU... 10 6.8.1 ALU...10

More information

单片机原理及应用实验指导书.doc

单片机原理及应用实验指导书.doc 1 2 3 4...2...4...9...9 AEDK598 MCS51...9 MCS51...10...10...10...10...10...10...11 P1...12...12...12....12...12...13 P3...14...14...14...14...14...14 I/O...15...15...15...15...15...16...17...17...17...17...17...18...19...19

More information

Ps22Pdf

Ps22Pdf ( ) ( 150 ) 25 15 20 40 ( 25, 1, 25 ), 1. A. B. C. D. 2. A. B. C. D. 3., J = 1 H = 1 ( A B, J', J, H ) A. A = B = 1, J' =0 B. A = B = J' =1 C. A = J' =1, B =0 D. B = J' = 1, A = 0 4. AB + AB A. AB B. AB

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

FM1935X智能非接触读写器芯片

FM1935X智能非接触读写器芯片 FM33A0xx MCU 2017. 05 2.0 1 (http://www.fmsh.com/) 2.0 2 ... 3 1... 4 1.1... 4 1.2... 4 1.3... 5 1.3.1... 5 1.3.2... 5 1.4... 8 1.4.1 LQFP100... 8 1.4.2 LQFP80... 9 1.4.3... 9 2... 15 2.1 LQFP100... 15

More information

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC LCD PIC 单片机解决方案 集成 LCD 驱动器模块的 PIC 单片机 www.microchip.com/lcd ,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC,

More information

Microsoft Word - ~ doc

Microsoft Word - ~ doc EEPROM 功能使用方法 1 适用产品 : 1.1 SM39R16A2/ SM39R12A2/ SM39R08A2 1.2 SM39R4051/ SM39R2051 1.3 SM39R04G1/ SM39R02G1 2 EEPROM 功能概述 : 2.1 使用 code flash 仿真为 Internal EEPROM, 在程序执行时, 可将 code flash 作为 data flash 储存数据使用

More information

MPC89LE51_52_53_54_58_515

MPC89LE51_52_53_54_58_515 5 8 bit micro controller 1 特性...2 2 引脚...3 2.1 引脚图...3 2.1 引脚定义...4 3 方框图...6 4 特殊功能寄存器...7 辅助寄存器 AUXR 和 AUXR1...8 5 存储器...9 5.1 RAM...9 MPC89x54/58/515 RAM 空间 (00 7F 可直接或间接寻址 )...9 MPC89x51/5 2/53 RAM

More information

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc EEPROM 应用说明 1 适用产品 :SM59D03G2 SM59D04G2 series 2 应用范围 : 针对需使用 EEPORM 功能替换 STC 89C5X 的应用及汇编语言之范例程序 ( 使用内部扩充内存为暂存区 ) 3 功能说明 : 3.1 本公司上述产品 EEPORM 功能皆可替换 STC89C5X, 仅需对特殊功能缓存器定义 ( 详见表 1) 及 ISP 命令定义 ( 详见表 2)

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

SH79F326应用指南

SH79F326应用指南 SH79F6442 用户指南 SH79F6442 用户指南 - 集成 4 路 UART 和 3 路 PWM 的增强型 8051 微控制器 1 V1.0 一 SH79F6442 I/O 应用指南 1. 概述 SH79F6442 是一种高速高效率 8051 可兼容单片机 在同样振荡频率下, 较之传统的 8051 芯 片它有着运行更快速的优越特性 SH79F6442 其 IO 特性为 : 61 个双向 I/O

More information

SinOne SC92F7447B/7446B/7445B 超高速 1T 8051 内核 Flash MCU,1 Kbytes SRAM,16 Kbytes Flash,128 bytes 独立 EEPROM,12 位 ADC,1 个模拟比较器,LCD/LED Driver,12 位 PWM,3 个

SinOne SC92F7447B/7446B/7445B 超高速 1T 8051 内核 Flash MCU,1 Kbytes SRAM,16 Kbytes Flash,128 bytes 独立 EEPROM,12 位 ADC,1 个模拟比较器,LCD/LED Driver,12 位 PWM,3 个 ,1 Kbytes SRAM,16 Kbytes Flash,128 bytes 独立 EEPROM,12 位 ADC,1 个模拟比较器,LCD/LED Driver,12 位 PWM,3 个定时器, 乘除法器,UART,SSI,Check Sum 校验模块 1 总体描述 ( 以下简称 SC92F744XB) 系列是一颗增强型的超高速 1T 8051 内核工业级 Flash 微控制器, 指令系统完全兼容传统

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

General Description: Preliminary TTP916 Consumer IC VCD/DVD LCD Green mode Stand-by mode( 1W ) Features: 2.2V-5.5V LCD RAM read condition 2.6V-5.5V RC

General Description: Preliminary TTP916 Consumer IC VCD/DVD LCD Green mode Stand-by mode( 1W ) Features: 2.2V-5.5V LCD RAM read condition 2.6V-5.5V RC General Description: IC VCD/DVD LCD Green mode Stand-by mode( 1W ) Features: 2.2V-5.5V LCD RAM read condition 2.6V-5.5V RC 15K 300pF 256KHZ default on 32 function key Built-in TT6221/TT6222 decoder Provide

More information

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc 可程序计数数组 (PCA) 功能使用方法 1 适用产品 :SM59D04G2,SM59D03G2 2 应用说明 : PCA 共有五组, 每组皆可工作于以下七种模式 : 捕获模式 - 正缘捕获模式 (Positive edge capture mode) 捕获模式 - 负缘捕获模式 (Negative edge capture mode) 捕获模式 - 正缘及负缘捕获模式 (Both positive

More information

SPMC75F2413A_EVM_使用说明_V1.2.doc

SPMC75F2413A_EVM_使用说明_V1.2.doc SPMCFA EVM V. - Jan 0, 00 http://www.sunplusmcu.com ................ SPMCFA........... EEPROM.... I/O............ LED.... LED.... RS-........0............ EVM................ 0.....0..... SPMCFA EVM SPMCFA

More information

XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 GHz 世界通用 ISM 频段, 它集

XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 GHz 世界通用 ISM 频段, 它集 XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 2.400--2.483GHz 世界通用 ISM 频段, 它集成射频收发通路 频率发生器 晶体振荡器 调制解调器等功能模块, 并且支持一对多组网和带 ACK 的通信模式

More information

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se 8051 8051 System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and setup. This type of robot uses two kinds of

More information

12232A LED LED LED EL EL CCFL EL CCF

12232A LED LED LED EL EL CCFL EL CCF 12232A 0 50-20 +70-30 +85 LED LED LED EL EL CCFL EL CCF 122 x 32 1/32Duty 1/5Bias 6:00 STN( ), EL LED EL/100VAC 400HZ LED/4.2VDC 1 / VDD-VSS 0 6.5 V Ta=25 LCD VDD-V0 0 12.0 V V1 0 VDD V VDD-VSS - 4.75

More information

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - MSP430 Launchpad 指导书.docx Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project

More information

() () () () () () () () DDRAM () II

() () () () () () () () DDRAM () II 液晶模块说明书 SPEC NO YM2232A REV NO. 液晶显示模块产品说明书 产品类型 : 产品型号 : 产品描述 : 标准产品 YM2232A 22x32 图形点阵模块, 控制器 :SED52,LED 背光 客户名称 : 客户确认 : 编写 : Dexun Zou 审核 : HCC 批准 : Jingxi Yang 发行日期 : 22.8 大连佳显电子有限公司 地址 : 大连市沙河口区工华街

More information

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi SPHE8202R Design Guide V2.0 JUN, 2007 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com SPHE8202R Design Guide Important Notice

More information

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x 115 AVR W.V. Awdrey ATMEL AVR PIC AVR PIC AVR RISC AVR PIC AVR AVR AVR AVR AVR ATtiny15 AVR AVR AVR RAM ROM 121 116 122 ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r31 3 16 X Y Z 6-1 118 7 0

More information

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7 上海东软载波微电子有限公司 SMART www.essemi.com SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input 06 6 6 HR7PPSC HR7PPSD SOP SOP6 +input 06 6 +input 06 6 6 6 HR7PERB SSOP0 7+input 06 6 6 HR7PESC

More information

Section1_16bit Arc.ppt

Section1_16bit Arc.ppt 16-bit Elite Program 2009 Summer Section-1 Microchip 16-bit 2005 Microchip Technology Incorporated. All Rights Reserved. Slide 1 MCU CPU (NOP),, (Data Memory), I/O CPU w. ALU/Working Reg. Data Mem. Data

More information

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1 TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT 588 4 1 0571-85121224 85121742 85121304(f) 639 2A095 0571-88256346 89902095 f B1618 010-62051209 62000662 62568913 82036512 f http://www.tsingtek.com

More information

untitled

untitled XILINX Platform Cbale USB www.hseda.com ...... Platform Cable USB Compatible.................. impact.........1 platform Cable USB Compatible.........1...1...1...1...1...1 Platform Cable USB Compatible

More information

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica CP Chip Power ARM Cortex-M3 (STM32F) ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplication and hardware

More information

PCM-3386用户手册.doc

PCM-3386用户手册.doc PCM-3386 BBPC-4x86 10/100M PC/104 (Lanry technology Co. Ltd. Zhuhai) 38 1012836 (Address: Room 1012,Linhai Building,No. 38,west of Shihua Road,Zhuhai City,Guangdong Province,China) (post code)519015 (phone)0756-3366659

More information

2005.book

2005.book ...4... 4... 7...10... 10... 10... 10... 10... 11... 11 PCC... 11 TB170... 12 /... 12...13... 13 BP150 / BP151 / BP152 / BP155... 14...15... 15... 15... 15... 15... 15... 15... 16 PS465 / PS477... 17 PS692

More information

CH559指令周期.doc

CH559指令周期.doc CH55X 汇编指令周期表 CH55X 汇编指令概述 : 型号包含 : a. 指令单周期型号 :CH557 CH558 CH559; b. 指令 4 周期型号 :CH551 CH552 CH553 CH554; c. 非跳转指令的指令周期数与指令字节数相同 ; d. 跳转指令含 MOVC/RET/CALL 通常比字节数多若干个周期 ; e.movc 指令多 4 或 5 个周期 ( 下条指令地址为奇数时多

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 [email protected] C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

SC92F7490

SC92F7490 多通信接口 8PIN Flash MCU,512 bytes SRAM,16 Kbytes Flash,128 bytes 独立 EEPROM,12 位 ADC,3 个定时器,2 个 SSI 接口,Check Sum 校验模块,STOP 电流

More information

ISO h.PDF

ISO h.PDF 1 2 ID-1 IC IC 2 GB/T 14916 1994 - GB/T 16649.1 1996 - - 1 : GB/T 16649.2 1996 - - 2 : GB/T 16649.3 1996 - - 3 : ISO/IEC 7816 4 1995 - - 4 : ISO/IEC 7816 5 199 5 - - 5 :. 3 i 3 4 5 data cold reset 6 4

More information

Microsoft Word - ~ doc

Microsoft Word - ~ doc 1 适用产品 : 1.1 SM59R16A5/ SM59R09A5/ SM59R05A5/ SM59R16A3/ SM59R09A3/ SM59R05A3 1.2 SM59R16G6/ SM59R09G6/ SM59R05G6 1.3 SM59R04A2/ SM59R04A1/ SM59R03A1/ SM59R02A1 1.4 SM59R16A2/ SM59R08A2 2 UART 差异如下说明 :

More information

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32--

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32-- HD61202 C-7 1 HD61202 HD61202 8 HD61203 HD61202, HY-12864 HY-19264 HD61202 HD61202 HD61203 HD61202 1 6464=4096 RAMRAM LCD 2HD61202 64 3HD61202 68 68 4HD61202 1/32--1/64 HD61202 HD61202 2 CS1,CS2,CS3 CS1

More information

行业

行业 PCL-818HD/HG/L PCL-818HD/HG/L 1.1...2 1.1.1 /...2 1.1.2 ID...2 1.2...3 1.3...3 2.1...3 2.2...3 2.2.1...4 2.2.2...4 2.2.3 DMA...5 2.2.4...5 2.2.5 D/A...5 2.2.6...6 2.2.7 EXE.trigger GATE0...6 2.2.8 FIFO

More information

目录

目录 ALTERA_CPLD... 3 11SY_03091... 3 12SY_03091...4....5 21 5 22...8 23..10 24..12 25..13..17 3 1EPM7128SLC.......17 3 2EPM7032SLC.......18 33HT46R47......19..20 41..20 42. 43..26..27 5151DEMO I/O...27 52A/D89C51...28

More information

从MCS51向AVR的快速转换.PDF

从MCS51向AVR的快速转换.PDF MCS51 AVR MCS51 AVR ATMEL AVR RISC MCS51 AVR 1 MHZ 1MIPS 8MHZ AVR 224MHZ MCS51 FLASH EEPROM ISP WatchDog AVR MCS51 AT90S1200/2313 AT89C1051/2051 AT90S4414/8515 AT89C51/52 PCB / AVR C ICCAVR60 AVR C IAR

More information

92 系列产品命名规则 名称 SC 92 F X P 48 R 序号 序号 Sinone Chip 缩写 产品系列名称 产品类型 (F:Flash MCU) 系列号 :7:GP 系列,8:TK 系列 含义 ROM

92 系列产品命名规则 名称 SC 92 F X P 48 R 序号 序号 Sinone Chip 缩写 产品系列名称 产品类型 (F:Flash MCU) 系列号 :7:GP 系列,8:TK 系列 含义 ROM 超高速 1T 8051 内核 Flash MCU,2 Kbytes SRAM,32 Kbytes Flash,128 bytes 独立 EEPROM,31 路高灵敏度触控电路,12 位 ADC,1 个模拟比较器,LCD/LED Driver,12 位 PWM,3 个定时器, 乘除法器,UART,SSI,Check Sum 校验模块 1 总体描述 ( 以下简称 SC92F854X) 系列是一颗增强型的超高速

More information

S3F94C8/S3F94C4

S3F94C8/S3F94C4 Rev. 0.0, Jan.2009 S3F94C8/S3F94C4 8-BIT CMOS MICROCONTROLLERS Revision 1.00 May 2010 用 户 手 册 YYYY Samsung Electronics Co., Ltd. All rights reserved. Rev. 0.0, Jan.2009 Important Notice The information

More information

MSP430单片机简介

MSP430单片机简介 . September 14, 2012 . 1 简介 MSP430 单片机特点超低功耗 2 MSP430 时钟系统 3 MSP430 的端口 4 定时器看门狗定时器定时器 A 5 示例 MSP430 单片机特点. 简介 MSP430 单片机是美国德州仪器 (TI) 公司 1996 年开始推向市场的一种 16 位超低功耗 具有精简指令集的混合信号处理器 它将多个不同功能的模拟电路 数字电路模块和微处理器集成在了一个芯片上

More information

AT89C2051中文资料.doc

AT89C2051中文资料.doc 图形点阵液晶显示模块使用手册 TG12864C(L) 广州捷胜吉电子科技 地址 : 广州市天河区天河路 561# 新赛格电子城 B2226 电话 :(020)33550997 13829772038 网址 :WWW.GZJSJDZ.COM E-mail:[email protected] 目 录 ( 一 ) 概述 (1) ( 二 ) 外形尺寸图 (1) ( 三 ) 模块主要硬件构成说明 (2) ( 四 )

More information