HT56R67/HT56R668/HT56C668 HT56R678/HT56C678/HT56R688 低功耗 A/D+LCD 型八位 OTP 单片机 技术相关信息 · 应用范例 -HA0075S MCU 复位电路和振荡电路的应用范例 特性 工作电压: fSYS=100kHz:2.2V~5.5V fSYS=4MHz:2.2V~5.5V fSYS=8MHz:3.0V~5.5V fSYS=12MHz:4.5V~5.5V 工作电流: fSYS=1MHz(3.0V 时):170μA(典型值) OTP 程序存储:16K×16 ~ 32K×16 RAM 数据存储:2034×8 24~32 个双向 I/O 口 低功耗技术应用于低电压工作 三个外部中断口与外部 I/O 共用 多个具有 7 级预分频器及中断功能的 定时/计数器 外部晶体、RC、32768 XTAL 振荡器 集成有 32kHz 晶体振荡器 提供外部系统时钟选项 看门狗定时器功能 Rev. 1.70 1 PFD/蜂鸣器音频输出 两种串行通信:SPI 和 I2C LCD 和 LED 驱动 4 种操作模式:正常、低速、空闲和休眠 8 通道 12 位 A/D 转换器 4 通道 12 位 PWM 输出 低电压复位功能:2.1V,3.15V,4.2V 低电压检测功能:2.2V,3.3V,4.4V 位操作指令 查表指令 63 条指令 VDD=5V,系统时钟为 12MHz 时,指令周期 为 0.33μs 多层堆栈 所有指令都可在 1 或 2 个指令周期内完成 提供暂停和唤醒功能,以降低功耗 多种封装选择 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 概述 该系列单片机是带 A/D 和 LCD 功能的 8 位低功耗高性能精简指令集型单片机,专门为需要 A/D 转换和 LCD 或 LED 显示的产品而设计。它带有多通道 A/D 转换,PWM 输出和 LCD/LED 驱动。 这款单片机带有完整的 SPI 和 I2C 功能,为设计者提供了一个易与外部硬件通信的接口。同时 集成 A/D、LCD、PWM 功能,外加性能良好、功耗低、I/O 使用灵活、成本低,使这款单片机可以 广泛应用于家电产品和工业产品中,例如电子测量仪器、环境监控、手持式测量工具、电子控制工 具、马达控制等工业等方面。 盛群半导体独特低功耗技术也使这款单片机具有极低电流功耗的特性(该特性对于要求低功耗 的电池电源应用方面极为重要)。秉承 HOLTEK MCU 一般特性,该单片机带有暂停和唤醒功能, 振荡器选项,可编程分频器等等,这些都保证使用者的应用只需极少的外部元器件便可实现。 HT56C668 和 HT56C678 为掩膜版本,也可用于批量产品中。 Rev. 1.70 2 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 选型表 对此系列的芯片而言,大多数的特性参数都是一样的。主要差异在于程序存储器的容量,I/O 数 量,堆栈层数和封装类型。下表列出了各单片机的主要特性。 型号 HT56R67 HT56R668 HT56C668 HT56R678 HT56C678 HT56R688 VDD 2.2V~5.5V 程序存储器 32K×16 定时器 输入/ 输出口 LCD 2304×8 32 2304×8 24 数据存储器 A/D PWM 堆栈 封装形式 1 12 位×8 12 位×4 12 64LQFP 100LQFP 1 12 位×8 12 位×4 12 100LQFP 128QFP 8位 16 位 48×4 或者 49×3 3 64×16 或者 72×8 3 16K×16 2.2V~5.5V 32K×16 48K×16 注:1.以上单片机型号中,“C”表示掩膜版本,“R”表示 OTP 版本。 2.对于有不止一种封装形式的芯片,选型表针对较大的封装的情况。 方框图 Rev. 1.70 3 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 引脚图 Rev. 1.70 4 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SEG18 SEG17 SEG16 SEG10 SEG9 SEG8 SEG7 SEG6 PINT/SEG5 PCLK/SEG4 SCS/SEG3 SCK/SCL/SEG2 SDI/SDA/SEG1 SDO/SEG0 OSC4 OSC3 VDD OSC2 OSC1 RES PA0/BZ PA1/BZ PA2 PA3/PFD PA4/TMR2 PA5/TMR3 PA6 PA7 PB0/AN0 PB1/AN1 PB2/AN2 PB3/AN3 PB4/AN4 PB5/AN5 PB6/AN6 PB7/AN7 VSS PD0/PWM0 PD1/PWM1 PD2/PWM2 PD3/PWM3 PD4/INT0 PD5/INT1 PD6/TMR0 VLCD COM0 COM1 COM2 COM3 COM4 100 99 98 97 96 9594 93 92 91 90 89 88 87 86 8584 83 82 81 8079787776 1 75 2 74 73 3 4 72 5 71 6 70 7 69 8 68 9 67 HT56R668 10 66 HT56C668 11 65 HT56R678 12 64 HT56C678 13 63 HT56R688 14 62 100 LQFP-A 15 61 16 60 17 59 18 58 19 57 20 56 21 55 22 54 23 53 24 52 51 25 262728 293031 3233343536373839404142434445 4647484950 SEG19 SEG20 SEG21 SEG22 SEG23 SEG24 SEG25 SEG26 SEG27 SEG28 SEG29 SEG30 SEG31 SEG32 SEG33 SEG34 SEG35 SEG36 SEG37 SEG38 SEG39 SEG40 SEG41 SEG42 SEG47 SEG48 SEG49 SEG50 SEG51 SEG52 SEG53 SEG54 SEG55 SEG56 SEG57 SEG58 SEG59 SEG60 SEG61 SEG62 SEG63 COM15/SEG64 COM14/SEG65 COM13/SEG66 COM12/SEG67 COM11/SEG68 COM10/SEG69 COM7 COM6 COM5 Rev. 1.70 5 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 引脚说明 以下引腳的描述通用于各单片机 引脚名称 PA0/BZ PA1/ BZ PA2 PA3/PFD PA4/TMR2 PA5/TMR3 PA6~PA7 PB0/AN0~ PB7/AN7 Rev. 1.70 I/O 配置 选项 BZ/BZ PFD 8 位双向输入/输出口。每一位可通过 PAWU 寄存器设置 为唤醒功能。可由软件设置为 CMOS 输出或者斯密特触 发输入,可通过 PAPU 寄存器设置是否带有上拉电阻。 BZ、BZ 、PFD、TMR2 和 TMR3 分别与 PA0、PA1、PA3、 PA4 和 PA5 共用引脚,功能可由配置选项设置。PA0~PA3 也可通过 MISC 寄存器设置为开漏极引脚。 — 8 位双向输入/输出口。可由软件设置为 CMOS 输出或者 斯密特触发输入,可通过 PBPU 寄存器设置是否带有上 拉电阻。PB 与 A/D 输入口共用,一旦 PB 口做为 A/D 输 入(由软件设置),则其输入/输出功能和上拉电阻会自动 ——— 输入/输出 输入/输出 说明 6 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 引脚名称 I/O 配置 选项 说明 失效。 PD0/PWM0~ PD3/PWM3 PD4/INT0 PD5/INT1 PD6/TMR0 PD7/TMR1 输入/输出 — OSC1 OSC2 输入 输出 Crystal 或 RC 或 EC OSC3 OSC4 输入 输出 32768Hz VREF 输入 输入 — — — — — — — — — — RES VDD VSS AVDD AVSS Rev. 1.70 8 位双向输入/输出口。可由软件设置为 CMOS 输出或者 斯密特触发输入,可通过 PDPU 寄存器设置是否带有上 拉电阻。PWM0~PWM3 与 PD0~PD3 共用引脚,可通过 PWM 寄存器设置这些引脚做何用途。PD4~PD7 分别与 INT0、INT1、TMR0 和 TMR1 共用引脚。 OSC1、OSC2 连接 RC 或外部晶振(由配置选项设定)以产 生内部系统时钟。如果选择为 RC 振荡模式,OSC2 是系 统时钟四分频的输出口。 EC 是外部时钟模式,我们可以直接将 OSC1 引脚和外部 时钟源相接。 OSC3、OSC4 连接 32768Hz 的晶体振荡器可以提供实时 时钟给 fSUB。可以通过配置选项来控制 32768Hz 晶振的 使能与除能。 A/D 转换参考电压输入脚。 斯密特触发复位输入,低电平有效。 正电源。 负电源,接地。 模拟正电源。 模拟负电源,接地。 7 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 下表给出了芯片的独立引脚说明 引脚名称 I/O 配置 选项 说明 HT56R67 输入/输出 — VMAX VLCD1/VLCD2/ V1,C1,C2 输入 — — — SEG0~SEG9 SEG10/SDO SEG11/SDI/SDA SEG12/SCK/SCL SEG13/ SCS SEG14/PCLK SEG15/ PINT SEG16~SEG47 输出 输出 输入/输出 输入/输出 输入/输出 输出 输入/输出 输出 SIM PINT PC0~PC7 8 位双向输入/输出口。可由软件设置为 CMOS 输出或者 带或不带上拉电阻(由寄存器 PCPU 的控制位决定)的 斯密特触发输入。 IC 的最大电压,接至 VDD,VLCD1 或 V1。 C 型偏置:LCD 电压泵引脚。 R 型偏置:只使用 VLCD1。 SEG0~SEG47 是 LCD 的驱动输出,用于 LCD 面板。 SEG10 与 SPI 数据输出线 SDO 共用。 SEG11 与 SPI 数据输入线 SDI 和 I2C 的数据线 SDA 共用。 SEG12 与 SPI 的时钟线 SCK 和 I2C 的时钟线 SCL 共用。 ———— SEG13 与 SPI 选择线SCS共用。 SEG14 与外围时钟线 PCLK 共用。 SEG15 与外围中断线 PINT 共用。 通过设置 LCD 的控制寄存器可以将 SEG0~SEG23 配置 为驱动口或 CMOS 输出。 COM0~COM2 是 LCD 的公共输出口。LCD 控制寄存器 COM0~COM2 输出 — 中的一个位用于配置 COM3/SEG48 为驱动口还是普通输 COM3/SEG48 出口。 HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 VLCD 输入 — LCD 的偏置引脚,其电压应小于或等于 VDD。 SEG0~SEG63 是 LCD 的驱动输出,用于 LCD 面板。 SEG0/SDO 输出 SEG0 与 SPI 数据输出线 SDO 共用。 SEG1/SDI/SDA 输入/输出 SEG1 与 SPI 数据输入线 SDI 和 I2C 的数据线 SDA 共用。 SEG2/SCK/SCL 输入/输出 SEG2 与 SPI 的时钟线 SCK 和 I2C 的时钟线 SCL 共用。 SEG3/ SCS 输入/输出 SIM SEG4/PCLK SEG3 与 SPI 的选择线 SCS 共用。 PINT 输出 SEG4 与外围时钟线 PCLK 共用。 SEG5/ PINT 输入/输出 SEG6~SEG63 SEG5 与外围中端口 PINT 共用。 输出 COM15/SEG64~ 通过设置 LCD 的控制寄存器可以将 SEG0~SEG23 配置 输出 COM8/SEG71 为驱动口或 CMOS 输出。 COM0~COM7 输出 — COM0~COM7 是 LCD 的公共输出口。 注:此引脚功能表是针对大封装芯片而言的,对于小封装的芯片可能不具有上述引脚和功能。 极限参数 电源供应电压………….VSS-0.3V~VSS+6.0V 端口输入电压………….VSS-0.3V~VDD+0.3V IOL 总电流………………………….......80mA 总功耗………………………………..500mW 储存温度……................……..-50℃~125℃ 工作温度…………...............….-40℃~85℃ IOH 总电流……….................……….-80mA 注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作 状态,而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性。 Rev. 1.70 8 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 直流电气特性 HT56R67 符号 Ta=25℃ 测试条件 参数 VDD VDD AVDD IDD1 IDD2 工作电压 模拟工作电压 工作电流 (Crystal OSC,RC OSC) 工作电流 (Crystal OSC,RC OSC) IDD3 工作电流 (Crystal OSC,RC OSC) IDD4 工作电流 (EC Mode,Filter On) IDD5 工作电流 (EC Mode,Filter Off) IDD6 IDD7 IDD8 IDD9 IDD10 IDD11 IDD12 IDD13 ISTB1 Rev. 1.70 工作电流 (Crystal OSC,RC OSC) 工作电流 (Crystal OSC,RC OSC) 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) — — 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 最小 典型 最大 单位 fSYS=4MHz 2.2 — 5.5 V fSYS=8MHz 3.0 — 5.5 V fSYS=12MHz 4.5 — 5.5 V VREF=AVDD 3.0 — — — — — 170 380 240 490 5.0 250 570 360 730 V μA μA μA μA — 440 660 μA — — — — — 900 380 720 370 680 1350 570 1080 550 1020 μA μA μA μA μA 条件 无负载,fSYS=fM=1MHz 无负载,fSYS= fM =2MHz 无负载,fSYS= fM =4MHz 无负载,fSYS= fM =4MHz 无负载,fSYS= fM =4MHz 5V 无负载,fSYS= fM =8MHz — 1.8 2.7 mA 5V 无 负 载 , fSYS= fM =12MHz — 2.6 4.0 mA — 150 220 μA — 340 510 μA — 180 270 μA — 400 600 μA — 270 400 μA — 560 840 μA — 240 360 μA — 540 810 μA — 320 480 μA — 680 1020 μA — 500 750 μA — 1000 1500 μA — 0.2 1.0 μA — 0.3 2.0 μA 3V 5V 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =8 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =8 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =8 MHz) (Crystal OSC,RC OSC) 3V 静态电流(休眠模式) (fSYS,fSUB,fs,fLCD, fWDT = off) 3V 5V 5V 5V 5V 5V 5V 无负载,fSYS=fSLOW= 500kHz 无负载,fSYS= fSLOW = 1 MHz 无负载, fSYS= fSLOW =2MHz 无负载, fSYS= fSLOW =1MHz 无负载, fSYS= fSLOW =2MHz 无负载, fSYS= fSLOW =4MHz 无负载,系统 HALT, WDT 关闭 9 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 静态电流(休眠模式) (fSYS,fLCD,fWDT= fSUB =32768HZ ( 注 1 ) 或 32K_INT RC OSC) ISTB2 ISTB3 ISTB4 ISTB5 ISTB6 — 1 2 μA — 3 5 μA — 1 2 μA — 3 5 μA — 1 2 μA — 3 5 μA — 10 15 μA — 18 27 μA — 10 15 μA — 16 24 μA — 150 250 μA 5V 无负载,系统 HALT, LCD 关闭,WDT 关闭, SPI 或 I2C 打开,PCLK 打开,PCLK= fSYS /8 — 350 550 μA — — 0 — 0.3 VDD V — — 0.7VDD — VDD V 3V 5V 无负载,系统 HALT。 WDT 开启 静态电流(空闲模式) 3V (fSYS,fWDT=off; fS(注 3)=fSUB=32768HZ(注 1) 5V 或 32K_INT RC OSC) 无负载,系统 HALT, WDT 关闭, LCD 开启(注 2),C 型 1/2 偏压, VLCD1= VDD 静态电流(空闲模式) 3V (fSYS,fWDT=off,fS(注 3)=fSUB=32768HZ(注 1) 5V 或 32K_INT RC OSC) 无负载,系统 HALT, LCD 开启(注 2),WDT 关闭,C 型 1/3 偏压, VLCD1= 3V 静态电流(空闲模式) 3V (fSYS,fWDT=off;fS(注 3)=fSUB=32768HZ(注 1) 5V 或 32K_INT RC OSC) 无负载,系统 HALT, WDT 关闭, LCD 开启 (注 2) ,R 型 1/2 偏压, VLCD1=VDD (RBIAS=400 k) 3V 静态电流(空闲模式) (fSYS,fWDT=off ;fS(注 3)=fSUB=32768HZ(注 1) 5V 或 32K_INT RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2) ,R 型,VLCD1= VDD,1/3 偏压 (RBIAS=600 k) VIH1 静态电流(空闲模式) (fSYS =on,fSYS=fM=4MHz fWDT,fLCD =off, fS(注 3)=fSUB=32768HZ(注 1) 或 32K_INT RC OSC) 输入/输出口、TMR 和 INT 的低电平输入电压 输入/输出口、TMR、INT 的高电平输入电压 VIL2 低电平输入电压( RES ) — — 0 — 0.4 VDD V VIH2 高电平输入电压( RES ) — — 0.9VDD — VDD V ISTB7 VIL1 VLVR VLVD 低电压复位电压 低电压检测电压 IOL1 输入/输出口的灌电流 IOH1 输入/输出口的源电流 IOL2 LCD 公共端和段灌电流 Rev. 1.70 3V — 配置选项:2.1V 1.98 2.1 2.22 V — 配置选项:3.15V 2.98 3.15 3.32 V — 配置选项:4.2V 3.98 4.2 4.42 V — 配置选项:2.2V 2.08 2.2 2.32 V — 配置选项:3.3V 3.12 3.3 3.50 V — 配置选项:4.4V 4.12 4.4 4.70 V 6 12 — mA 10 25 — mA -2 -4 — mA -5 -8 — mA 210 420 — μA 350 700 — μA 3V 5V 3V 5V 3V 5V VOL=0.1VDD VOH=0.9VDD VOL=0.1VDD 10 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 IOH2 LCD 公共端和段源电流 RPH 输入/输出口上拉电阻 3V 5V 3V 5V VOH=0.9VDD — -80 -160 — μA -180 -360 — μA 20 60 100 k 10 30 50 k 注: 1.在直流环境下 32768HZ 处于低速起振模式(RTCC.4=1)。 2.LCD 的波形为 A 型。 3. fs 是蜂鸣器,RTC,时基和看门狗定时器的内部时钟。 4.定时/计数器关闭。对于所有的测试模式,定时器内部滤波器除能。 5.IDD,ISTB 测试中,若无特别说明,则所有的外围设备都处于关闭状态。 HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 符号 VDD 参数 工作电压 VDD — 测试条件 条件 Ta=25℃ 最小 典型 最大 单位 fSYS=4MHz 2.2 — 5.5 V fSYS=8 MHz 3.0 — 5.5 V fSYS=12MHz 4.5 — 5.5 V AVDD 模拟工作电压 — VREF=AVDD 3.0 — 5.0 V IDD1 工作电流 (Crystal OSC,RC OSC) 3V 无负载, fSYS=fM=1 MHz — 170 250 μA — 380 570 μA IDD2 工作电流 (Crystal OSC,RC OSC) 3V 无负载, fSYS=fM=2 MHz — 240 360 μA — 490 730 μA IDD3 工作电流 (Crystal OSC,RC OSC) 3V — 440 660 μA — 900 1350 μA IDD4 工作电流 (EC Mode,Filter On) 3V 无负载, fSYS=fM=4 MHz (注 5) 无负载, — 380 570 μA 5V fSYS=fM=4 MHz — 720 1080 μA IDD5 工作电流 (EC Mode,Filter Off) 3V 无负载, fSYS=fM=4 MHz — 370 550 μA — 680 1020 μA IDD6 工作电流 (Crystal OSC,RC OSC) 5V 无负载, fSYS=fM=8 MHz — 1.8 2.7 mA IDD7 工作电流 (Crystal OSC,RC OSC) 5V 无负载, fSYS=fM=12 MHz — 2.6 4.0 mA 无负载, fSYS=fSLOW=500kHz — 150 220 μA — 340 510 μA 无负载, fSYS=fSLOW=1 MHz — 180 270 μA — 400 600 μA — 270 400 μA — 560 840 μA — 240 360 μA — 540 810 μA IDD8 IDD9 IDD10 IDD11 Rev. 1.70 5V 5V 5V 5V 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =4 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM =8 MHz) (Crystal OSC,RC OSC) 3V 5V 3V 5V 5V 5V 无负载, fSYS=fSLOW=2 MHz 无负载, fSYS=fSLOW=1 MHz 11 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 符号 IDD12 IDD13 ISTB1 ISTB2 ISTB3 ISTB4 ISTB5 ISTB6 ISTB7 ISTB8 Rev. 1.70 参数 VDD 工作电流 (低速模式,fM =8 MHz) (Crystal OSC,RC OSC) 3V 工作电流 (低速模式,fM=8 MHz) (Crystal OSC,RC OSC) 3V 5V 5V 测试条件 条件 无负载, fSYS=fSLOW=2 MHz 无负载, fSYS=fSLOW=4MHz 静态电流(休眠模式) 3V (fSYS,fSUB,fs,fLCD, 5V fWDT = off) 无负载,系统 HALT, WDT 关闭,LCD 关闭 静态电流(休眠模式) (fSYS,fLCD,fWDT= fSUB =32768HZ(注 1)或 32K RC OSC) 无负载,系统 HALT, LCD 关闭,WDT 关闭 3V 5V 静态电流(空闲模式) 3V (fSYS,fWDT=off: fS(注 3)=fSUB=32768H( Z 注 1) 5V 或 32K RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2),1/5 偏压 (RBIAS=1M), VLCD =VDD 3V 静态电流(空闲模式) (fSYS,fWDT=off,fS(注 3)=fSUB=32768H( Z 注 1) 5V 或 32K RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2),1/4 偏压 (RBIAS=800k), VLCD = VDD 3V 静态电流(空闲模式) (fSYS,fWDT=off;fS(注 3)=fSUB=32768H( Z 注 1) 5V 或 32K RC OSC) 无负载,系统 HALT,WDT 关闭,LCD 开启(注 2) ,1/3 偏压 (RBIAS=600k), VLCD = VDD 静态电流(空闲模式) 3V (fSYS,fWDT=off;fS(注 3)=fSUB=32768H( Z 注 1) 5V 或 32K RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2),1/5 偏压 (RBIAS=100k), VLCD= VDD 静态电流(空闲模式) 3V (fSYS,fWDT=off;fS(注 3)=fSUB=32768H( Z 注 1) 5V 或 32K RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2),1/4 偏压 (RBIAS=80k), VLCD= VDD 静态电流(空闲模式) 3V (fSYS,fWDT=off;fS(注 3)=fSUB=32768HZ (注 5V 1)或 32K RC OSC) 无负载,系统 HALT, WDT 关闭,LCD 开启 (注 2),1/3 偏压 (RBIAS=60k), VLCD = VDD 12 最小 典型 最大 单位 — 320 480 μA — 680 1020 μA — 500 750 μA — 1000 1500 μA — 0.2 1.0 μA — 0.3 2.0 μA — 1 2 μA — 3 5 μA — 6 10 μA — 10 15 μA — 6 10 μA — 10 15 μA — 8 12 μA — 12 16 μA — 26 39 μA — 44 66 μA — 32 48 μA — 54 81 μA — 44 66 μA — 70 105 μA 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 符号 参数 静态电流(空闲模式) (fSYS On ,fSYS =fM=4MHz,fWDT,fLCD off, fS(注 3) =fSUB=32768HZ(注 1) 或 32K RC OSC) 输入/输出口、TMR 和 INT 的低电平输入电压 输入/输出口、TMR、 INT 的高电平输入电压 ISTB9 VIL1 VIH1 VDD 3V 5V 测试条件 条件 无负载,系统 HALT, LCD off ,WDT 关闭, SPI 或 I2C On,PCLK On,PCLK= fSYS /8 V 0 — 0.4 VDD V 0.9VDD — VDD V — 配置选项:4.2V 3.98 4.2 4.42 V — 配置选项:3.15V 2.98 3.15 3.32 V — 配置选项:2.1V 1.98 2.1 2.22 V — 配置选项:2.2V 2.08 2.2 2.32 V — 配置选项:3.3V 3.12 3.3 3.50 V — 配置选项:4.4V 4.12 4.4 4.70 V 6 12 — mA 10 25 — mA -2 -4 — mA -5 -8 — mA 210 420 — μA 350 700 — μA -80 -160 — μA -180 -360 — μA 3V 输入/输出口上拉电阻 μA VDD 输入/输出口的源电流 (PA,PB,PD;SEG,COM 电位或 LED 输出) RPH 550 — 3V LCD 公共端和段电流 350 0.7VDD 输入/输出口的灌电流 (PA,PB,PD;SEG,COM 电位或 LED 输出) IOH2 — — — LCD 公共端和段电流 μA — — IOL2 250 V 高电平输入电压( RES ) IOH1 150 0.3 VDD VIH2 IOL1 — — — 低电压检测电压 单位 0 — VLVD 最大 — 低电平输入电压( RES ) 低电压复位电压 典型 — VIL2 VLVR 最小 VOL=0.1VDD 5V VOH=0.9VDD 5V 3V 5V 3V 5V VOL=0.1VDD VOH=0.9VDD 3V — 20 60 100 k 5V — 10 30 50 k 注: 1.在直流环境下 32768Hz 处于低速起振模式(RTCC.4=1)。 2.LCD 的波形为 A 型。 3.fs 是蜂鸣器,RTC,时基和看门狗定时器的内部时钟。 4.定时器 0/1 关闭。对于所有的测试模式,定时器内部滤波器除能。 5.IDD,ISTB 测试中,若无特别说明,则所有的外围设备都处于关闭状态。 Rev. 1.70 13 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 交流电气特性 符号 fSYS Ta=25℃ 参数 系统时钟 (Crystal OSC,RC OSC) fRTCOSC RTC 频率 fTIMER 定时器输入频率 (TMR0/TMR1) 测试条件 最小 典型 最大 单位 2.2V~5.5V 100 — 4000 kHz 3.0V~5.5V 100 — 8000 kHz 4.5V~5.5V 100 — 12000 kHz — 32768 — Hz 2.2V~5.5V 0 — 4000 kHz 3.0V~5.5V 0 — 8000 kHz 4.5.V~5.5V 0 — 12000 kHz 条件 VDD — — — — fRC32k 32K RC 振荡频率 — 2.2.V~5.5V,校正后 28.8 32 35.2 kHz tRES 外部复位低电平脉宽 — — 1 — — μs tLVR 低压复位时间 — — 0.1 0.4 0.6 ms tSST1 系统启动时间 — 上电 — 1024 — tSYS* tSST2 XTAL/RTC 系统启动时 间 — 从暂停模式中唤醒 — 1024 — tSYS* tSST3 外部 RC/外部时钟系统 启动时间 — 从暂停模式中唤醒 — 1 2 tSYS* tINT 中断脉冲宽度 — 1 — — μs — 注:*tSYS =1/ fSYS Rev. 1.70 14 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 ADC 特性 HT56R67 符号 Ta=25℃ 测试条件 参数 VDD 条件 最小 典型 最大 单位 AVDD VREF V V AVDD+0.1 V VAD A/D 输入电压 — 64LQFP 100LQFP 0 0 — — VREF A/D 输入参考电压范围 — AVDD=5V 1.6 — DNL A/D 非线性微分误差 — AVDD=5V,VREF=AVDD tAD=0.5μs -2 — 2 LSB INL A/D 非线性积分误差 — AVDD=5V,VREF=AVDD tAD =0.5μs -4 — 4 LSB IADC 打开 A/D 增加的功耗 tAD A/D 时钟周期 3V 5V — — — — 0.5 0.50 1.00 — 0.75 1.50 — mA mA μs tADC A/D 转换时间 — — — 16 — tAD — HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 符号 测试条件 参数 VDD 条件 Ta=25℃ 最小 典型 最大 单位 AVDD VREF V V AVDD+0.1 V VAD A/D 输入电压 — 100LQFP 128QFP 0 0 — — VREF A/D 输入参考电压 — AVDD=5V 1.6 — DNL A/D 非线性微分误差 — AVDD=5V,VREF=AVDD tAD=0.5μs -2 — 2 LSB INL A/D 非线性积分误差 — AVDD=5V,VREF =AVDD tAD=0.5μs -4 — 4 LSB IADC 打开 A/D 所增加的功耗 tAD A/D 时钟周期 3V 5V — — — — 0.5 0.50 1.00 — 0.75 1.50 — mA mA μs tADC A/D 转换时间 — — — 16 — tAD Rev. 1.70 — 15 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 上电复位特性 符号 VPOR 上电复位电压 RRVDD 上电复位电压速率 VDD 保持为 VPOR 的最小 tPOR 时间 Rev. 1.70 测试条件 参数 最小 典型 最大 单位 — — — 100 mV — — 0.035 — — V/ms — — 1 — — ms VDD 条件 — 16 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 系统结构 内部系统结构是盛群单片机具有良好性能的主要因素。由于采用 RISC 结构,此系列单片机具 有高运算速度和高性能的特点。通过流水线的方式,指令的取得和执行同时进行,此举使得除了跳 转和调用指令外,其它指令都能在一个指令周期内完成。8 位 ALU 参与指令集中所有的运算,它可 完成算术运算、逻辑运算、移位、递增、递减和分支等功能,而内部的数据路径则是以通过累加器 或 ALU 的方式加以简化。有些寄存器在数据存储器中被实现,且可以直接或间接寻址。简单的寄 存器寻址方式和结构特性,确保了在提供具有最大可靠度和灵活性的 I/O 和 A/D 控制系统时,仅需 要少数的外部器件。使得这些单片机适合用在低成本和批量生产的控制应用上。 时序和流水线结构 主系统时钟由晶体/陶瓷振荡器,或者 RC 振荡器提供,它被细分为 T1~T4 四个内部产生的非重 叠时序。在 T1 时间,程序计数器自动加一并抓取一条新的指令。剩下的时间 T2~T4 完成译码和执 行功能,因此,一个 T1~T4 时间周期构成一个指令周期。虽然指令的抓取和执行发生在连续的指令 周期,但单片机流水线结构会保证指令在一个指令周期内被有效执行。除非程序计数器的内容被改 变,如子程序的调用或者跳转,在这种情况下指令将需要多一个指令周期的时间去执行。 当使用 RC 振荡器时,OSC2 作为 T1 相时钟同步引脚,该 T1 相时钟有 fSYS/4 的频率,拥有 1:3 高/低的占空比。 系统时序和流水线 如果指令牵涉到分支,例如跳转或调用等指令,则需要两个指令周期才能完成指令执行。需要 一个额外周期的原因是程序先用一个周期取出实际要跳转或调用的地址,再用另一个周期去实际执 行分支动作,因此用户需要特别考虑额外周期的问题,尤其是在执行时间要求较严格的时候。 指令捕捉 Rev. 1.70 17 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 程序计数器 在程序执行期间,程序计数器用来指向下一个要执行的指令地址。除了 “JMP”和“CALL”指令 需要跳转到一个非连续的程序存储器地址之外,它会在每条指令执行完成以后自动加一。选择不同 型号的单片机,程序寄存器的宽度会因程序存储器的容量的不同而不同。然而只有较低的 8 位,即 所谓的程序低字节寄存器 PCL,可以被用户直接读写。 当执行的指令要求跳转到不连续的地址时,如跳转指令、子程序调用、中断或者复位等,单片 机通过加载所需要的位址到程序寄存器来控制程序,对于条件跳转指令,一旦条件符合,在当前指 令执行时取得的下一条指令将会被舍弃,而由一个空指令周期来取代。 程序计数器的低字节,即程序计数器的低字节寄存器 PCL,可以通过程序控制,且它是可以读 取和写入的寄存器。通过直接写入数据到这个寄存器,一个程序短跳转可直接执行,然而只有低字 节的操作是有效的,跳转被限制在存储器的当前页中,即 256 个存储器地址范围内,当这样一个程 序跳转要执行时,会插入一个空指令周期。 程序计数器的低字节可由程序直接进行读取,PCL 的使用可能引起程序跳转,因此需要额外的 指令周期。有关 PCL 寄存器的更多信息请参考特殊功能寄存器章节的说明。 程序计数器 模式 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 初始化复位 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 外部中断 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 外部中断 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 定时/计数器 0 溢出 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 定时/计数器 1 溢出 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 SPI/I2C 中断 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 多功能中断 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0 程序计数器+2 条件跳转 写入 PCL 寄存器 PC15 PC14 PC13 PC12 PC11 PC10 跳转,调用子程序 BP.7 BP.6 BP.5 由子程序返回 S15 S14 S13 #12 #11 #10 #9 #8 #7 #6 #5 #4 #3 #2 #1 #0 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 程序计数器 注: PC15~ PC8:目前程序计数器位 @7 ~ @0 :PCL 位 S15~S0 :堆栈寄存器位 #12 ~ #0:指令代码地址位 HT56R688:程序计数器有 16 位,从 b15~b0。 HT56R67/HT56R678/HT56C678:程序计数器有 15 位,从 b14~b0。 HT56R668/HT56C668: 程序计数器有 14 位,从 b13~b0,因此 b15 与 b14 栏无效。 BP.7,BP.6 和 BP.5:存储区指针位 Rev. 1.70 18 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 堆栈 堆栈是一个特殊的存储空间,用来存储程序计数器中的内容。各单片机有不同的堆栈层数,堆 栈既不是数据部分也不是程序空间部分,而且它既不是可读取也不是可写入的。当前层由堆栈指针 (SP)加以指示,同样也是不可读写的。在子程序调用或中断响应服务时,程序计数器的内容被压入 到堆栈中。当子程序或中断响应结束时,返回指令(RET 或 RETI)使程序计数器从堆栈中重新得到它 以前的值。当一个芯片复位后,堆栈指针将指向堆栈顶部。 如果堆栈已满,且有非屏蔽的中断发生,中断请求标志会被置位,但中断响应将被禁止。当堆 栈指针减少(执行 RET 或 RETI),中断将被响应。这个特性提供程序设计者简单的方法来预防堆栈溢 出。然而即使堆栈已满,CALL 指令仍然可以被执行,而造成堆栈溢出。使用时应避免堆栈溢出的 情况发生,因为这可能导致不可预期的程序分支指令执行错误。 算术逻辑单元 — ALU 算术逻辑单元是单片机中很重要的部分,执行指令集中的算术和逻辑运算。ALU 连接到单片机 的数据总线,在接收相关的指令码后执行需要的算术与逻辑操作,并将结果存储在指定的寄存器, 当 ALU 计算或操作时,可能导致进位、借位或其它状态的改变,而相关的状态寄存器会因此更新内 容以显示这些改变,ALU 所提供的功能如下: · 算术运算:ADD,ADDM,ADC,ADCM,SUB,SUBM,SBC,SBCM,DAA · 逻辑运算:AND,OR,XOR,ANDM,ORM,XORM,CPL,CPLA · 移位运算:RRA,RR,RRCA,RRC,RLA,RL,RLCA,RLC · 递增和递减:INCA,INC,DECA,DEC · 分支判断:JMP,SZ,SZA,SNZ,SIZ,SDZ,SIZA,SDZA,CALL,RET,RETI Rev. 1.70 19 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 程序存储器 此系列的单片机提供一次可编程的存储器(OTP),使用者可以编写他们的应用代码到芯片中。 OTP 型单片机提供使用者以灵活的方式自由开发他们的应用,这对于需要除错或者需要经常升级和 改变程序的产品是很有帮助的。 结构 程序存储器的容量为 16K×16 位到 32K×16 位,程序存储器用程序计数器来寻址,其中也包含 数据、表格和中断入口。数据表格可以设定在程序存储器的任何地址,由表格指针来寻址。 特殊向量 程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途。 · 地址 000H 这个向量是芯片复位后的程序起始地址。在芯片复位之后,程序将跳到这个地址并开始执行。 · 地址 004H 这个向量用做外部中断 0 入口。若单片机外部中断脚接收到有效边沿触发信号,而外部中断使 能且堆栈未满的情况下,程序将跳到这个地址并开始执行。 · 地址 008H 这个向量用做外部中断 1 入口。若单片机外部中断脚接收到有效边沿触发信号,而外部中断使 能且堆栈未满的情况下,程序将跳到这个地址并开始执行。 · 地址 00CH 此内部向量被定时/计数器 0 所使用。若在定时/计数器 0 发生溢出,而定时/计数器中断使能且 堆栈未满的情况下,程序将跳到这个地址并开始执行。 · 地址 010H 此内部向量被定时/计数器 1 所使用。若在定时/计数器 1 发生溢出,而定时/计数器中断使能且 堆栈未满的情况下,程序将跳到这个地址并开始执行。 · 地址 014H 此内部向量被 SPI/I2C 中断所使用。若 SPI/I2C 总线中的一条被选中,请求数据传输,而 SPI/I2C 中断使能且堆栈未满的情况下,程序将跳到这个地址并开始执行。 · 地址 018H 此内部向量被多功能中断所使用。若时基溢出、实时时钟溢出、A/D 转换完成或外围中断脚有 触发信号输入、定时/计数器 2 或定时/计数器 3 溢出,相关中断使能且堆栈未满的情况下,程序将跳 到这个地址并开始执行。 Rev. 1.70 20 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 程序存储器结构 Rev. 1.70 21 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 查表 程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据。使用表格时,表格指 针必须先行设定,其方式是将表格的低字节地址放在表格指针寄存器 TBLP 中。这个寄存器定义表 格低字节的 8 位地址。 在设定完表格指针后,表格数据可以使用“TABRDC [m]”或“TABRDL [m]”指令从当前的程 序所在的存储器页或存储器最后一页中来查表读取。当这些指令执行时,程序存储器中表格数据低 字节,将被传送到使用者所指定的数据存储器[m],程序存储器中表格数据的高字节,则被传送到 TBLH 特殊寄存器,而高字节中未使用的位将被读取为“0”。 下图是查表中寻址/数据流程: 表格地址位 指令 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 TABRDC[m] PC15 PC14 PC13 PC12 PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0 TABRDL[m] 1 1 1 1 1 1 1 1 @7 @6 @5 @4 @3 @2 @1 @0 表格存储单元 注: PC15~PC8:通用的程序计数位 @7~@0:表格指针 TBLP 位 HT56R688:表格地址有 16 位,从 b15~b0。 HT56R67/HT56R678/HT56C678:表格地址有 15 位,从 b14~b0。 HT56R668/HT56C668:表格地址有 14 位,从 b13~b0。 Rev. 1.70 22 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 查表范例 以下范例说明在 HT56R678 中,表格指针和表格数据如何被定义和执行。这个例子使用的表格 数据用 ORG 伪指令储存在存储器的最后一页。HT56R678 中,ORG 指令“7F00H”指向的地址是 32K 程序存储器中最后一页的起始地址。表格指针的初始值设为 06H,这可保证从数据表格读取的 第一笔数据位于程序存储器地址 7F06H,即最后一页起始地址后的第六个地址。值得注意的是,假 如“TABRDC [m]”指令被使用,则表格指针指向当前页。在这个例子中,表格数据的高字节等于零, 而当“TABRDL [m]”指令被执行时,此值将会自动的被传送到 TBLH 寄存器。 tempreg1 tempreg2 : : mov mov db ? db ? ; temporary register #1 ; temporary register #2 a,06h ; initialize table pointer – note that this address ; is referenced tblp,a ; to the last page or present page : : tabrdl tempreg1 ; transfers value in table referenced by table pointer ; to tempreg1 data at prog。 memory address 7F06H transferred to ; tempreg1 and TBLH dec ; reduce value of table pointer by one tblp tabrdl tempreg2 ; transfers value in table referenced by table pointer ; to tempreg2 ; data at prog. memory address 7F05H transferred to ; tempreg2 and TBLH ;in this example the data 1A is transferred to ;to tempreg1 and data 0F to register tempreg2 ; the value _00H_ will be transferred to the high byte ; register TBLH org dc 7F00h ; sets initial address of last page 00Ah, 00Bh, 00Ch, 00Dh, 00Eh, 00Fh, 01Ah, 01Bh : : TBLH 寄存器为只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指令, 应该注意它的保护。使用表格读取指令,中断服务程序可能会改变 TBLH 的值,若随后在主程序中 再次使用这个值,则会发生错误,因此建议避免同时使用表格读取指令。然而在某些情况下,如果 同时使用表格读取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除能, 另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作。 Rev. 1.70 23 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 数据存储器 数据存储器是内容可更改的 8 位 RAM 内部存储器,用来储存临时数据。分为三部分,第一部 分是特殊功能寄存器,这些寄存器有固定的地址且与单片机的正确操作密切相关。大多特殊功能寄 存器都可在程序控制下直接读取和写入,但有些被加以保护而不对用户开放。第二部分是通用数据 存储器,所有地址都可在程序的控制下进行读取和写入。第三部分是为 LCD 存储器保留的。这个特 殊数据存储器的地址直接映射到 LCD 显示器,写入这部分存储器的数据将直接影响显示的数据。 LCD 存储器区和通用数据存储器区的地址重叠,可以通过设定正确的存储区指针值,对这个区域进 行切换。 结构 数据存储器分为几个区,全部都为 8 位的 RAM。存储区 0 的数据存储器分为两部分,特殊功能 数据存储器和通用数据存储器。 所有单片机的数据存储器的起始地址都是“00H”,常用的寄存器如 ACC,PCL 等等都有相同的 寄存器地址。LCD 存储器映射于 Bank1。带有较大的数据内存容量的单片机中,Bank2~Bank12 只包 括通用数据存储器。由于特殊数据寄存器都会映射在所有的 bank 中,所以用户在任何一个 bank 都 可以使用它们。 数据存储器结构 存储区 HT56R67 -2304 字节 HT56R668 HT56C668 HT56R678 HT56C678 HT56R688 -2304 字节 SPDM GPDM SPDM GPDM 0 SA EA SA EA SA EA SA EA 1 2 3 4 5 6 40H FFH 40H 70H 40H FFH 40H FFH 40H FFH 40H FFH 40H 40H 40H 40H 40H 40H 00H 3FH 40H FFH 00H 3FH 40H FFH BFH FFH FFH FFH FFH FFH 7 8 9 10 11 12 40H FFH 40H FFH 40H FFH 40H FFH 40H FFH 40H FFH 40H 40H 40H 40H 40H 40H FFH FFH FFH FFH FFH FFH 数据存储器内容 注: SPDM:特殊数据寄存器 GPDM:通用数据寄存器 SA:起始地址 EA:结束地址 ×:未定义 Rev. 1.70 24 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 通用数据存储器 所有的单片机程序需要一个读/写的存储区,让临时数据可以被储存和再使用,该 RAM 区域就 是通用数据存储器。这个数据存储区可让使用者进行读取和写入的操作。使用“SET [m].i”和“CLR [m].i”指令可对个别的位做置位或复位的操作,极大地方便了用户在数据存储器内进行位操作。对 于那些带有较大的数据存储容量的单片机,通用数据寄存器除了在存储区 0 之外,在 Bank2~Bank12 也有。具体的有几个 bank 要看用户所选择的芯片。 特殊数据存储器 这个区域的数据存储器是存放特殊寄存器的,这些寄存器与单片机的正确操作密切相关,大多 数的寄存器可进行读取和写入,只有一些是被写保护而只能读取的,相关细节的介绍请参看有关特 殊功能寄存器的部分。要注意的是,任何读取指令对存储器中未定义的地址进行读取将得到未知的 值。特殊功能寄存器在所有的 bank 中都有映射,用户可以在任何位置对特殊功能寄存器进行操作。 显示存储器 LCD 和 LED 上显示的数据也是存储在一块可充分存取的数据存储器中。 通过写入此 RAM 区域, LCD 的输出显示可以直接由应用程序控制。LCD 存储器位于存储区 1,与通用数据存储器的地址形 成映射,因此在存取 LCD 存储器之前,必须先确定存储器指针是否被设为 01H。LCD 存储器只能 通过 MP1 和 IAR1 间接存取,当存储区指针为 01H 时,对 LCD 存储器进行存取,任何对 40H 之前 地址的读取动作将对特殊功能寄存器进行操作。当存储区指针为 01H 时,读取大于存储区 1 地址的 内容,将返回 00H。 Rev. 1.70 25 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 特殊数据存储器 Rev. 1.70 26 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 特殊功能寄存器 为了确保单片机正常运行,数据存储器中设置了一些内部寄存器。这些寄存器确保内部功能(如 定时器和中断等)和外部功能(如 I/O 数据控制和 A/D 转换操作)的正确工作。在数据存储器中, 这些寄存器以 00H 作为起始地址。在特殊功能寄存器和通用数据存储器的起始地址之间,有一些未 定义的数据存储器,被保留用来做未来扩充,若从这些地址读取数据将返回未知的值。 间接寻址寄存器 — IAR0,IAR1 间接寻址寄存器 IAR0 和 IAR1 的地址虽位于数据存储区,但其并没有实际的物理地址。间接寻 址的方法准许使用间接寻址指针做数据操作,以取代定义实际存储器地址的直接存储器寻址方法。 在间接寻址寄存器上的任何动作,将对间接寻址指针(MP0 和 MP1)所指定的存储器地址产生对应的 读/写操作。它们总是成对出现,IAR0 和 MP0 可以访问存储区 0,而 IAR1 和 MP1 可以访问存储区 0 和存储区 1。因为这些间接寻址寄存器不是实际存在的,直接读取将返回“00H”的结果,而直接 写入此寄存器则不做任何操作。 间接寻址指针 — MP0,MP1 该单片机提供两个间接寻址指针,即 MP0 和 MP1。由于这些指针在数据存储器中能像普通的寄 存器一般被操作,因此提供了一个寻址和数据追踪的有效方法。当对间接寻址寄存器进行任何操作 时,单片机指向的实际地址是由间接寻址指针所指定的地址。MP0,IAR0 用于访问存储区 0,而 MP1 和 IAR1 可访问所有的 Bank。 以下例子说明如何清除一个具有 4 RAM 地址的区块,它们已事先定义成地址 adres1 到 adres4。 data .section ´data´ adres1 db ? adres2 db ? adres3 db ? adres4 db ? block db ? code .section at 0 ´code´ org 00h start: mov a,04h mov block,a mov a,offset adres1 mov mp0,a loop: clr IAR0 inc mp0 sdz block jmp loop ; setup size of block ; Accumulator loaded with first RAM address ; setup memory pointer with first RAM address ; clear the data at address defined by mp0 ; increment memory pointer ; check if last memory location has been cleared continue: 在上面的例子中有一点值得注意,即并没有确定 RAM 地址。 Rev. 1.70 27 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 存储区指针-BP 数据存储器被分为几个部分,具体数目由所选择的单片机型号决定。可以通过设置存储区指针 (Bank Pointer)值来访问不同的数据存储区。若被访问的数据在存储区 0,BP 寄存器必须设定为 “00H”,若被访问的数据在存储区 1,BP 寄存器必须设定为“01H”,等等。 复位后,数据存储器会初始化到存储区 0,但是在 HALT 模式下的 WDT 溢出复位,不会改变通 用数据存储器的存储区号。应该注意的是特殊功能数据存储器不受存储区的影响,也就是说,不论 是在哪一个存储区,都能对特殊功能寄存器进行读写操作。数据存储器的直接寻址总是访问存储区 0,不影响存储区指针的值。要访问存储区 0 之外的存储区,则必须要使用间接寻址方式。 存储区指针 累加器—ACC 对任何单片机来说,累加器是相当重要的,且与 ALU 所完成的运算有密切关系,所有 ALU 得 到的运算结果都会暂时存在 ACC 累加器里。若没有累加器,ALU 必须在每次进行如加法、减法和 移位的运算时,将结果写入到数据存储器,这样会造成程序编写和时间的负担。另外数据传送也常 常牵涉到累加器的临时储存功能,例如在一使用者定义的寄存器和另一个寄存器之间传送数据时, 由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据。 程序计数器低字节寄存器 —PCL 为了提供额外的程序控制功能,程序计数器低字节设置在数据存储器的特殊功能区域内,程序 员可对此寄存器进行操作,很容易的直接跳转到其它程序地址。直接给 PCL 寄存器赋值将导致程序 直接跳转到程序存储器的某一地址,然而由于寄存器只有 8 位长度,因此只允许在本页的程序存储 器范围内进行跳转,而当使用这种运算时,要注意会插入一个空指令周期。 表格寄存器 —TBLP,TBLH 这两个特殊功能寄存器对存储在程序存储器中的表格进行操作。TBLP 为表格指针,指向表格 数据存储的地址。它的值必须在任何表格读取指令执行前加以设定,由于它的值可以被如 INC 或 DEC 的指令所改变,这就提供了一种简单的方法对表格数据进行读取。表格读取数据指令执行之后, 表格数据高字节存储在 TBLH 中。其中要注意的是,表格数据低字节会被传送到使用者指定的地址。 状态寄存器 — STATUS 这 8 位的状态寄存器由零标志位(Z)、进位标志位(C)、辅助进位标志位(AC)、溢出标志位(OV)、 暂停标志位(PDF)和看门狗定时器溢出标志位(TO)组成。这些算术/逻辑操作和系统运行标志是用来 记录单片机的运行状态。 除了 PDF 和 TO 标志外,状态寄存器中的位像其他大部分寄存器一样可以被改变。任何数据写 入到状态寄存器将不会改变 TO 或 PDF 标志位。另外,执行不同的指令后,与状态寄存器有关的运 Rev. 1.70 28 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 算可能会得到不同的结果。TO 标志位只会受系统上电、看门狗溢出、或执行“CLR WDT”或“HALT” 指令影响。PDF 标志位只会受执行“HALT”或“CLR WDT”指令或系统上电影响。 Z、OV、AC 和 C 标志位通常反映最近运算的状态。 当加法运算的结果产生进位,或减法运算的结果没有产生借位时,则 C 被置位,否则 C 被 清零,同时 C 也会被带进位/借位的移位指令所影响。 当低半字节加法运算的结果产生进位,或高半字节减法运算的结果没有产生借位时,AC 被置位,否则 AC 被清零。 当算术或逻辑运算结果是零时,Z 被置位,否则 Z 被清零。 当运算结果高两位的进位状态异或结果为 1 时,OV 被置位,否则 OV 被清零。 系统上电或执行“CLR WDT”指令会清零 PDF,而执行“HALT”指令则会置位 PDF。 系统上电或执行“CLR WDT”或“HALT”指令会清零 TO,而当 WDT 溢出则会置位 TO。 状态寄存器 另外当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆栈保存。假如状 态寄存器的内容是重要的且子程序可能改变状态寄存器的话,则需谨慎的去做正确的储存。 中断控制寄存器 这些 8 位的寄存器,INTC0,INTC1,MFIC,MFIC0,MFIC1 和 INTEDGE,用来控制单片机 中断功能的动作。通过使用标准的位操作指令来设定这些寄存器的位的值,每个中断的使能/除能功 能可分别被控制。INTC0 寄存器中的主中断位 EMI 控制所有中断的使能/除能,用来设定所有中断 使能位的开或关。当一个中断程序被响应时,EMI 位将被清零, 单片机就屏蔽其它中断, 而执行“RETI” 指令则会置位 EMI 位。INTEDGE 寄存器是用来为两个外部中断脚 INT0 和 INT1 选择有效边沿触发。 定时/计数寄存器 该系列单片机内部集成了几个 8 位和 16 位的定时/计数器,具体数目由所选单片机决定。寄存 器 TMR0,TMR1,TMR2,TMR3,和 TMR1L/TMR1H 是计数值存放的位置。这些寄存器可以预先 写入固定的数据,以允许设定不同的时间中断。他们相对应的控制寄存器 TMR0C,TMR1C,TMRC2 和 TMR3C 含有对应定时/计数器的设定信息,包括定时/计数器的工作模式及相对应的开/关控制功 能。 输入/输出端口和控制寄存器 在特殊功能寄存器中,输入/输出寄存器和它们相对应的控制寄存器很重要。所有的输入/输出端 口都有相对应的寄存器,且被标示为 PA、PB、PC 和 PD 等。如数据存储器结构图中所示,这些输 入/输出寄存器映射到数据存储器的特定地址,用以传送端口上的输入/输出数据。每个输入/输出端 口有一个相对应的控制寄存器,分别为 PAC、PBC、PCC 和 PDC 等,也同样映射到数据存储器的特 定地址。这些控制寄存器设定引脚的状态,以决定哪些是输入口,哪些是输出口。要设定一个引脚 为输入,控制寄存器对应的位必须设定成逻辑高,若引脚设定为输出,则控制寄存器对应的位必须 Rev. 1.70 29 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 设为逻辑低。程序初始化期间,从输入/输出端口中读取或写入数据之前,必须先设定控制寄存器的 位以确定引脚为输入或输出。使用“SET [m].i”和“CLR [m].i”指令可以直接设定这些寄存器的某 一位。这种在程序中可以通过改变输入/输出端口控制寄存器中某一位而直接改变该端口输入/输出状 态的能力是此系列单片机非常有用的特性。 脉冲宽度调制寄存器 该系列单片机包括多个脉冲宽度调制器。每个 PWM 都具有自己独立的控制寄存器,为 PWM0L/PWM0H,PWM1L/PWM1H,PWM2L/PWM2H 和 PWM3L/PWM3H。这些成对的 12 位寄存 器定义相应的脉冲宽度调制器的脉宽调制周期占空比。这些寄存器对中都带有一个使能位。 A/D 转换寄存器 – ADRL, ADRH, ADCR, ACSR 该系列单片机包含一个多通道 12 位的 A/D 转换器。A/D 转换器的正确操作需要使用 2 个数据 寄存器和 2 个控制寄存器。当一个模数转换周期结束后,转换出的数字量将保存到高字节数据寄存 器 ADRH 和低字节数据寄存器 ADRL。A/D 的使能与除能,A/D 通道选择和 A/D 时钟频率由 ADCR 和 ACSR 决定。 串行接口寄存器 该系列单片机包括两个串行接口,SPI 和 I2C 接口。SIMCTL0,SIMCTL1,SIMCTL2 和 SIMAR 是串行接口功能控制寄存器,SIMDR 是串行数据的数据寄存器。 PA 口唤醒功能寄存器 – PAWU PA 口所有引脚均具有唤醒功能。当单片机处于暂停模式时,PA 口引脚在下降沿信号到来时, 具有唤醒功能。PA 口的唤醒功能通过这个寄存器来设置。 上拉电阻寄存器 – PAPU,PBPU,PCPU,PDPU PA、PB、PC、PD 的所有引脚若做输入状态时,其内部可连接一个上拉电阻。可通过这些寄存 器来设置相应引脚连接内部上拉电阻。 寄存器 – CLKMOD 该单片机可工作于双时钟系统,由寄存器 CLKMOD 加以控制。该寄存器可设置的选项有:时 钟源,空闲模式使能和低频时钟的分频率。 LCD/LED 寄存器 – LCDCTRL,LEDCTRL,LCDOUT1,LCDOUT2 该单片机集成了完整的 LCD/LED 驱动功能,可以通过不同的驱动功能配置来控制多种外部 LCD 和 LED 面板。大部分的选项都是通过设置寄存器 LCDCTRL 和 LEDCTRL 来控制的。LCD 的一些 段驱动也可设置为 CMOS 输出。另外两个相关寄存器 LCDOUT1 和 LCDOUT2 也可用来选择所需功 能。 其他寄存器 – MISC 此寄存器用来控制两种功能。低 4 位用于看门狗时间的控制,高 4 位用于选择 PA0~PA3 的开漏 输出。 Rev. 1.70 30 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 输入/输出端口 盛群单片机的输入/输出端口控制具有很大的灵活性。这体现在每一个引脚在使用者的程序控制 下可以被指定为输入或输出、所有引脚的上拉选项,以及指定引脚的唤醒选择,这些特性也使得此 类单片机在广泛应用上都能符合开发的要求。 依据所选单片机及封装类别的不同,该单片机提供 32 个双向输入/输出口,标示为 PA、PB、PC、 PD。这些输入/输出端口在数据存储器的对应指定地址如表所示。所有输入/输出口都可做为输入及 输出之用。作为输入操作时,输入/输出引脚不是锁存的,也就是输入数据必须在指令“MOV A,[m]” T2 上升沿准备好,m 表示端口地址。对于输出操作,所有数据是锁存的,而且持续到输出锁存被重 写。 上拉电阻 很多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功能。为了免去这个 外加的电阻,当引脚规划为输入时,可由内部连接到一上拉电阻。这些上拉电阻可通过寄存器 PAPU、 PBPU、PCPU、PDPU 来加以选择,它们通过使用 PMOS 晶体管来实现。 上拉电阻寄存器 – PAPU,PBPU,PCPU,PDPU PA 口的唤醒 HALT 指令使得单片机进入暂停模式以节省功耗,此功能对于电池及其它低功率应用来说是很 重要的功能特性。唤醒单片机有很多种方法,其中之一就是使 PA 口其中的一只引脚从高电平转为低 电平。当使用暂停指令“HALT”迫使单片机进入暂停状态以后,单片机将保持闲置即低功率状态, 直到 PA 口上被选为唤醒输入的引脚电平发生下降沿跳变。这个功能特别适合于通过外部开关来唤醒 的应用。通过使用 PAWU 寄存器,PA 的每个引脚都可以设置成带有唤醒功能。 PA 口的开漏极功能 此单片机中所有的输入/输出引脚都有 CMOS 结构,但 PA0~PA3 还具有开漏极结构。可通过 MISC 寄存器 ODE0~ODE3 位设置此功能。 Rev. 1.70 31 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 PA0~PA3 开漏控制 – MISC 输入/输出端口控制寄存器 每一个输入/输出端口都具有自己的控制寄存器(PAC、PBC、PDC 等)去控制输入/输出状态。 利用此控制寄存器,每一个 CMOS 输出或者输入带有或不带有上拉电阻设置,均可利用软件控制方 式加以动态的重新设置。所有输入/输出端口的引脚都各自对应于输入/输出端口控制寄存器的某一 位。若输入/输出引脚要实现输入功能,则对应的控制寄存器位必须设定为“1”。这时程序指令可以 直接读出输入引脚的逻辑状态。如果引脚的控制寄存器位被设定为“0”,则此引脚被设置为 CMOS 输出。当引脚被设置为输出状态,程序指令读取的是输出端口寄存器的内容。请注意当输入/输出端 口被设置为输出状态时,此时如果对输出口做读取的动作,则会读取到内部数据寄存器中的锁存值, 而不是输出引脚实际的逻辑状态。 引脚共用功能 如果引脚能有超过一个以上的功能,则单片机灵活程度将大大的提升。有限的引脚个数 会严重的限制设计者,但是通过引入引脚的多功能特性,可以克服很多此类问题。多功能输入/输出 引脚的功能选择,有些是由配置选项进行设定,有些则是在应用程序中进行控制。 外部中断输入 外部中断引脚 INT0 和 INT1 与输入/输出引脚 PD4 和 PD5 共用。如果不需要外部中断输入,此 引脚可当作一般的输入/输出引脚使用,此时外部中断控制寄存器 INTC0 中的外部中断使能位必须除 能。 外部定时器时钟输入 外部定时器时钟输入引脚 TMR0,TMR1,TMR2 和 TMR3 和输入输出口共用。若要将它们配置 为定时器输入,则应正确地设置相应的控制位并将该引脚设置为输入。需要注意的是尽管引脚被设 置为外部时钟输入,其原本的输入/输出功能仍然存在。 PFD 输出 该单片机均提供有 PFD 功能,其信号输出与引脚 PA3 共用。PFD 输出功能通过配置选项加以设 置并在烧录后保持不变。需要注意的是必须把端口控制寄存器中的 PAC.3 设置为输出,以能使能 PFD 输出。如果端口控制寄存器 PAC 被设置为输入状态,那么,即使选择了 PFD 配置选项,该引脚仍将 作为带上拉电阻的一般输入引脚使用。 PWM 输出 该单片机包含几个与 PD0~PD3 引脚共用的 PWM 输出。用户可以通过设置相应寄存器来选择 PWM 输出功能。请注意,控制寄存器 PDC 对应的位必须设置为输出,以使能 PWM 输出。如果 PDC 控制寄存器设置为输入状态,那么,即使 PWM 寄存器使能了 PWM 功能,该引脚仍将作为带上拉 电阻的一般输入引脚使用。 Rev. 1.70 32 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 A/D 输入 该单片机具有一个多通道的 A/D 转换器输入。所有的模拟输入与 PB 口的 I/O 引脚共用。 如果想要将这些引脚设置为 A/D 输入引脚而非普通的输入/输出引脚,用户则应要正确地对 A/D 转换寄存器中相应的位进行正确的设置。 配置中没有与 A/D 功能有关的选项。如果这些引脚作为 I/O 引脚使用,仍可以通过寄存器选择是否要接上拉电阻。然而如果作为 A/D 输入使用,则这些引 脚上的上拉电阻会自动断开。 I/O 引脚结构 所附图表显示了 I/O 引脚的内部结构。I/O 引脚的精确逻辑结构可能不同于这些图所示,它们提 供的仅作为参考,以协助功能性的理解 I/O 引脚。附图中引脚共用结构并不适用于所有类型。 普通输入/输出口结构 Rev. 1.70 33 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 A/D 的输入/输出口结构 编程注意事项 在使用者的程序中,最先要考虑的是端口的初始化。复位之后,所有的输入/输出数据及端口控 制寄存器都将被设为逻辑高。这意味着所有输入/输出引脚默认为输入状态,而其电平则取决于其它 相连接电路以及是否选择了上拉选项。假如 PAC、PBC、PCC、PDC 等端口控制寄存器将某些引脚 设定为输出状态,这些输出引脚会有初始高输出值,除非预先设定数据寄存器端口 PA、PB、PC、 PD。要选择哪些引脚是输入及哪些引脚是输出,可通过设置正确的值到相应的端口控制寄存器,或 者使用指令“SET [m].i”及“CLR [m].i”来设定端口控制寄存器中个别的位。要注意的是当使用这 些位控制指令时,会产生一个读-改-写的操作。单片机必须先读入整个端口上的数据,修改个别的位, 然后重新把这些数据写入到输出端口。 读写时序 PA 端口还有唤醒功能。当芯片处于暂停模式时,用户有很多方法去唤醒此单片机,方法之一就 是 PA 口任一引脚上产生由高电平到低电平的变换。可以设定 PA 口上单个或多个引脚具有这项功能。 Rev. 1.70 34 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LCD 和 LED 驱动器 对于设计中带有 LCD 功能的大批量应用,选择定制而非较昂贵的基于字符的显示方式可以有效 地降低成本。然而,驱动此类定制的显示器需要增益及时间可变的 COM 和 SEG 信号,且需要很多 特殊的考虑以正确地操作 LCD。该系列单片机有内部 LCD 信号产生电路及多种配置选项,可以自 动地产生时间与增益可变的信号直接驱动 LCD,与用户 LCD 的接口连接也相当容易。 另外,该系列的某些单片机内部还集成了一个 LED 的驱动电路,可以用来驱动 LED 面板上的 COM 和 SEGMENT 端口。所有单片机都含有驱动使能 LCD 和 LED 各种类型显示的选项。下表显 示不同单片机带有的功能选项。 单片机类型 HT56R67 HT56R668 HT56C668 HT56R678 HT56C678 HT56R688 占空比 1/2 1/3 1/4 1/8 驱动的数目 49×2 49×3 48×4 72×8 1/16 64×16 偏压 偏压类型 波的类型 1/2 或 1/3 C或R A 型或 B 型 1/3 或 1/4 或 1/5 R A 型或 B 型 LCD 选项 注:HT56R67 单片机无 LED 驱动功能。 单片机类型 HT56R668 HT56C668 HT56R678 HT56C678 HT56R688 LED 占空比 静态 1/4 1/8 1/12 1/16 LED 驱动数目 72×1 72×4 72×8 64×12 64×16 LED 选项 注:HT56R67 单片机无 LED 驱动功能。 C 型偏置电压 Rev. 1.70 35 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 R 型偏置电压-HT56R67 R 型偏置电压-HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 Rev. 1.70 36 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 显示存储器 数据存储器中有一部分区域是专门为 LCD/LED 的显示数据而保留,即显示存储区。单片机内 部显示驱动电路会自动读取任何写入此处的数据并据此产生 LCD 或 LED 驱动信号。因此任何写入 LCD 存储器的数据,会立即映射到连接单片机的 LCD 显示器上。 由于 LCD 存储器地址与通用数据存储器地址重叠,因此 LCD 数据存储在独立的数据存储区存 储区 1 中。存储区的选择是通过使用一个特殊功能寄存器 BP 指针来完成的。当要存取 LCD 存储器 时,首先要将 BP 的值设为“01H”来选择对存储区 1 操作。此后,用户可以通过 MP1 使用间接寻 址方式来对存储区进行操作。选择了存储区存储区 1 之后,使用 MP1 可以对以 40H 作为起始地址的 存储区操作,就可以直接对显示存储区进行读或者写的操作了。不可直接寻址显示存储区,因为这 样会改变通用数据存储区存储区 0 中的数据。 所附显示存储器映射图显示了此系列单片机中存储器容量最大的一个 -HT56R678/HT56C678/HT56R688,其内部显示存储器与 COM、SEG 端的显示映射。此系列其他容 量较小的单片机可以依此类推。 下面的波形图给出了不同占空比和偏置的波形图。可得到的有效的 LCD 和 LED 波形排列太多, 因此无法全部画出来。 HT56R678/HT56C678/HT56R688 存储器映射图-72×8 Rev. 1.70 37 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 HT56R678/HT56C678/HT56R688 存储器映射图-64×16 LCD/LED 寄存器 LCD/LED 控制寄存器位于数据存储区,用于设置 LCD/LED 驱动器的各种特性。单片机中有一 个控制 LCD 功能的寄存器 LCDCTRL 和一个控制 LED 功能的寄存器 LEDCTRL。LCD 寄存器的各 个位可用来设置如占空比和偏压值,偏压电阻的选择和 LCD 的使能和除能。用户应首先设置寄存器 LEDCTRL 中的 LEDSEL 位,来选择显示模式是 LCD 或 LED。寄存器 LCDCTRL 中的 LCDEN 位和 寄存器 LEDCTRL 中的 LEDEN 位只有当单片机工作于正常模式、低速模式或空闲模式时才可以控 制 LCD/LED 的使能与除能。如果驱动处于休眠模式,则显示将一直处于除能状态。寄存器 LCDCTRL 中的 RSEL0 和 RSEL1 位用于选择内部电阻来提供 LCD 适当的偏压。在应用中,选择匹配的 LCD 面板也可以降低偏压电流。此外,TYPE 位是用于选择 A 型或 B 型的 LCD 控制信号。 寄存器 LCDOUT1 和 LCDOUT2 是用于决定显示输出功能引脚 SEG0~SEG23 是作为段驱动还是 作为 CMOS 输出。如作为 CMOS 输出,则该显示数据存储器用于决定 CMOS 输出的逻辑电平。注 意,仅有两个位用于决定 SEG0~SEG7 和 SEG8~SEG15 的输出功能,这两组中引脚不能单独选择作为 段输出或者 CMOS 输出功能。SEG16~SEG23 的输出功能可单独设置为 LCD 段驱动或者 CMOS 输 入。 LCD 复位功能 寄存器 LCDCTRL 中 LCDEN 取反后与休眠功能两者相或为 1 时,LCD 产生内部复位。LCD 复 位信号为高电平有效。 LCDEN 信号为寄存器 LCDCTRL 中的 LCDEN 位取反。 复位 LCD=(Sleep 模式 OR LCDEN )。 必须设置 LEDEN=0 和 LCDEN=1 以激活 LCDCTRL 寄存器功能。 Rev. 1.70 38 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LCDEN 休眠模式 复位 LCD 0 关闭 √ 0 开启 √ 1 关闭 × 1 开启 √ LCD 复位功能 时钟源 LCD 时钟是由内部时钟源 fSUB 通过内部分频电路进行 8 分频获得,其中,fSUB 的时钟源可由配置 选项决定是来自于内部 32K_INT 振荡器或者 32768Hz 振荡器。该方法用于产生理想的频率为 4kHz 的 LCD 时钟,以获得更好的 LCD 显示效果。 时钟源 fSUB LCD 时钟频率 内部 32K_INT 振荡器 4kHz 外部 32768Hz 振荡器 4kHz LCD 时钟源 LCD 驱动输出 当 LEDCTRL 寄存器中的 LEDSEL 清零时,则 COM 和 SEG 引脚就会被设置为 LCD 的驱动以 驱动 LCD 显示。只有 HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 有寄存器 LEDCTRL LCD 驱动器提供的 COM 和 SEG 输出数目,以及偏压和占空比选项,取决于 LCD 控制位的设 置。用户可以通过配置选项来选择 C 型偏置或者是 R 型偏置。只有 HT56R67 有 R 型和 C 型的选择 配置选项。 如果选择的是 C 型偏置,则将使能内部电荷泵。 由于 LCD 基本性质的缘故,它们的像素点只能加上 AC 电压,如果加上 DC 电压,将会引起永 久性的损害。 因此 LCD 显示器的对比度由提供到每个像素的实际 RMS 电压控制,这个值相当于 COM 引脚上的 RMS 电压值减去 SEG 引脚上的电压值。RMS 电压必须大于 LCD 的饱和电压,以便能打 开像素点,但同时也要小于阈值电压,以便能关闭像素点。因为要将 DC 电压限制为 0 且以最少的 连接数来控制尽可能多的像素点,因此需要产生时间增益可变的信号供给 LCD 使用。这些时间与增 益都可变的信号由单片机内的 LCD 驱动电路自动产生。占空比决定使用 common 口的个数,也称为 底板或 COMs。占空比由 2 个控制位选择,有 1/2、1/3 或 1/4 可选,表示 COM 的数目为 2、3 或 4 ,因此该值定义了每个 LCD 信号帧内的时间片数。单片机提供两种类型的信号即 A 型和 B 型, 通过寄存器 LCDCTRL 中的 TYPE 位加以选择。B 型提供较低频率的信号,然而,较低的频率可能 引起闪烁,从而影响显示的清晰度。 Rev. 1.70 39 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LCD 控制寄存器-LCDCTRL(HT56R67) LCD 控制寄存器-LCDCTRL(HT56R668/HT56C668/HT56R678/HT56C678/HT56R688) Rev. 1.70 40 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LED 控制寄存器-LEDCTRL(HT56R668/HT56C668/HT56R678/HT56C678/HT56R688) LCD 输出控制寄存器-LCDOUT1 LCD 输出控制寄存器-LCDOUT2 LED 驱动输出 LED 驱动器使用 COM 和 SEG 脚驱动 LED 显示,通过 LED 控制位可配置 COM 和 SEG 输出引 脚个数,偏置以及占空比。 当寄存器 LEDCTRL 中的 LEDSEL 设为高电平时,COM 和 SEG 引脚将被设置为 CMOS 输出以 驱动 LED 显示。通过设置寄存器 LEDCTRL 中的控制位可以将 COM 和 SEG 引脚设置为高有效或者 是低有效。这样,用户就有了四种时间控制模式--COM 低有效,SEG 低有效;COM 低有效,SEG 高有效;COM 高有效,SEG 低有效;COM 高有效,SEG 高有效。该功能关闭时,COM 和 SEG 引 脚的极性相反。LED 驱动器总共有 5 种占空比选项,即:Static,1/4,1/8,1/12,1/16。每个占空比 周期的时帧频率在 55Hz 和 75Hz 之间。 Rev. 1.70 41 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LCD 电压源与偏压 LCD 驱动器需要几种电压值以产生时间增益可变的信号。信号使用的电压值数目取决于寄存器 LCDCTRL 中的 BIAS 位的值。单片机有 R 型和 C 型偏压,可通过配置选项选择。选择 C 型的偏压 将使能内部电荷泵,该充电泵的乘率可通过另外的配置选项选择。 对于 R 型偏压,必须要在 VLCD1 引脚上提供外部 LCD 电压源,以产生内部偏压电压。这个外 部电压源可以是单片机的电压源也可以是其它电压源。对于 R 型 1/2 偏压的配置选项,要用到 VSS、 VA 和 VB 三种电压值。VA 等于 VLCD1 引脚上的外部电压源。VB 由单片机内部产生,其值等于 VLCD1/2。对于 R 型 1/3 偏压的配置选项,要用到 VSS、VA、VB 和 VC 四种电压值。VA 等于 VLCD1, VB 等于 VLCD12/3,VC 等于 VLCD11/3。除了选择 1/2 或 1/3 偏压,还可以通过 LCDCTRL 寄存 器中 RESEL0 和 RESEL1 位来选择几种电阻值。在 VLCD1 引脚上的电压值决定偏流值。VMAX 引 脚的连接方式取决于加在 VLCD1 上的电压,如果 VDD 大于 VLCD1 引脚上的电压,则 VMAX 引脚 连接到 VDD,否则 VMAX 引脚连接到 VLCD1 引脚。请注意,如果使用 R 型偏压,则不需要连接 有外部电容或电阻。 条件 VDD>VLCD1 其它 VMAX 的连接 VMAX 连接到 VDD VMAX 连接到 VLCD1 R 型偏压电流 VMAX 连接表 对于 C 型偏压,必须在 VLCD1 引脚上提供外部 LCD 电压源以产生内部偏压电压。C 型偏压使 用内部充电泵电路,在 1/3 偏压时可以产生高于 VLCD1 的电压。这项特性在单片机提供电压小于 LCD 所需电压时非常有用。对于 C 型偏压,为了产生所需的电压值,必须要在引脚 C1 与 C2 之间 连接充电泵电容。 对于 C 型 1/2 偏压配置选项,要用到 VSS、VA、VB 三种电压值。VA 由内部产生,其值等于 VLCD1。VB 等于 VA 的 1/2。对于 C 型 1/2 偏压配置而言,没有用到 VC。 对于 C 型 1/3 偏压配置选项,要用到 VSS、VA、VB 和 VC 四种电压值。VA 由内部产生,其值 等于 VLCD11.5。VB 等于 VA2/3,VC 等于 VA1/3。VMAX 引脚的连接方式取决于偏压方式以及 VLCD1 上的电压,具体内容如下表所示。 充电泵产生的内部电压最大值不能超过 5.5V,需要特别注意。 1/3 偏压 1/2 偏压 偏压类型 VDD>VLCD11.5 其他 VDD>VLCD1 其他 VMAX 引脚连接 VMAX 连接至 VDD VMAX 连接至 V1 VMAX 连接至 VDD VMAX 连接至 VLCD1 C 型偏压 VMAX 连接 Rev. 1.70 42 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LED 1/4 占空比,COM 高电平有效,SEG 低电平有效,显示关闭 LED 静态模式下的正常工作 编程注意事项 LCD/LED 编程时要注意几点,其中之一就是在单片机上电后,要保证 LCD 存储器正确地初始 化。与通用数据存储器一样,在上电后,LCD 存储器的内容是未知的。由于 LCD 存储器的内容会 映射到实际的 LCD,所以在上电后,为获得正确的显示图形,初始化此存储器内容是非常重要的。 在实际应用中,必须要考虑 LCD 的实际容性负载。对于单片机来说,LCD 的像素点一般可以 看作电容性的负载,要确保所连接的像素点不能过多。这点对可以连接多个 LCD 像素点的 COM 口 来说尤为重要。接下来的流程图描述 LCD 的等效电路。 Rev. 1.70 43 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 LCD 面板等效电容 另外还有一个要注意的就是当单片机进入省电模式后所发生的变化。LCDCTRL 控制寄存器的 中的 LCD 使能控制位 LCDEN 和 LEDCTRL 控制寄存器中 LED 使能位 LEDEN 会清零以降低功耗。 当此位被清零,就会停止产生显示的驱动信号,并处于一种低功耗的空白显示的状态。 要注意当上电复位后,LCDEN 和 LEDEN 位会被清零,显示功能关闭。 单片机产生的不同占空比和偏压 LCD 信号,如下图所示。限于篇幅,本文只列出有限的几种。 LED1/4 占空比,COM 高有效,SEG 低有效,正常工作模式 Rev. 1.70 44 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 注:对于 1/2 型的偏压,R 型和 C 型有 VA=VLCD1,VB=VLCD1×1/2 LCD 驱动输出-A 型 - 1/2 占空比,1/2 偏压 注:对于 1/2 型偏压,R 与 C 型偏压的 VA=VLCD1,VB=VLCD1×1/2 LCD 驱动输出-A 型-1/3 占空比,1/2 偏压 Rev. 1.70 45 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 注: 对于 1/3 R 型偏压,VA=VLCD1,VB=VLCD12/3,VC=VLCD11/3。 对于 1/3 C 型偏压,VA=VLCD11.5,VB=VLCD1,VC=VLCD11/2。 LCD 驱动输出-A 型 - 1/4 占空比,1/3 偏压 Rev. 1.70 46 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 注:对于 1/3 R 型偏压,VA=VLCD1,VB=VLCD12/3,VC=VLCD11/3。 对于 1/3 C 型偏压,VA=VLCD11.5,VB=VLCD1,VC=VLCD11/2。 LCD 驱动输出-A 型 - 1/3 占空比,1/3 偏压 Rev. 1.70 47 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 注:对于 1/2 偏压,R 型和 C 型的 VA=VLCD1,VB=VLCD11/2。 LCD 驱动输出-B 型 - 1/2 占空比,1/2 偏压 Rev. 1.70 48 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 定时/计数器 定时/计数器在任何单片机中都是一个很重要的部分,提供程序设计者一种实现和时间有关功能 的方法。该系列单片机包含若干个 8 位和 16 位的向上计数器。每个定时/计数器有三种不同的工作 模式,可以当作一个普通定时器、外部事件计数器、或者脉冲宽度测量器使用。定时器里提供的 8 级预分频器(Prescaler)扩大了定时的范围。 有两种寄存器和定时/计数器相关。其中一个寄存器是存储实际的计数值,赋值给此寄存器可以 设定初始值,读取此寄存器可获得定时/计数器的内容。另一个寄存器是定时/计数器的控制寄存器, 此寄存器设置定时/计数器的选项,控制定时/计数器的使用。定时/计数器的时钟源可来自内部时钟 源。此外,时钟源也可来自外部定时器引脚。 配置定时/计数器输入时钟源 内部定时/计数器的时钟源可以有多种的时钟来源。当定时/计数器在定时器模式或者在脉冲宽度 测量模式时,使用系统时钟作为计时来源。8-bit 定时/计数器的时钟源是 fSYS 除以预分频器(Prescaler) 的值,预分频值由定时控制寄存器 TMRnC 的 TnPSC0 到 TnPSC2 位决定。对于 16 位定时/计数器而 言,其内部时钟源可以选择来自内部时钟配置选项和 TMRnC 寄存器的 TnS 位决定。 定时/计数器在事件计数器模式时使用外部时钟源,根据使用的定时/计数器,时钟源可来自外部 定时/计数器引脚 TMR0,TMR1,TMR2 或 TMR3。每次外部引脚由高电平到低电平或者由低电平 到高电平(由 TnE 位决定)进行转换时,计数器增加一。 单片机 全部单片机 8 位定时器数目 3 定时/计数器 0 定时/计数器 2 定时/计数器 3 TMR0 TMR2 TMR3 TMR0C TMR2C TMR3C 定时器的名称 寄存器的名称 控制寄存器名称 16 位定时器数目 1 定时器的名称 定时/计数器 1 寄存器的名称 TMR1L/TMR1H 控制寄存器名称 TMR1C Rev. 1.70 49 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 定时/计数寄存器 – TMR0,TMR1L/TMR1H,TMR2,TMR3 定时/计数寄存器是位于专用数据存储器内的特殊功能寄存器,储存的是实际定时器值。对 8 位 定时/计数器来说,这些寄存器为 TMR0,TMR2,或 TMR3。对 16 位定时/计数器而言,是一组寄存 器,TMR1L 和 TMR1H。 在用作内部定时且收到一内部计时脉冲时,或用作外部计数且外部定时/ 计数器引脚发生状态跳变时,此寄存器的值将会加一。定时器将从预置寄存器所载入的值开始计数, 直到 8 位定时/计数器 FFH 或 16 位定时/计数器 FFFFH 储满,此时定时器溢出且会产生一个内部中 断信号。定时器的值随后被预置寄存器的值重设并继续计数。 为了得到 8 位定时/计数器 FFH 或 16 位定时/计数器 FFFFH 的最大计算范围,则应将预置寄存 器的值清零。此时要注意的是,上电后预置寄存器处于未知状态。定时/计数器在关闭条件下,如果 把数据写入预置寄存器,这数据将被立即写入实际的定时器。而如果定时/计数器已经被打开且正在 计数,在这个周期内写入到预置寄存器的任何新数据将保留在预置寄存器,只有在下一个溢出发生 时才被写入实际定时器。 对于 16 位定时/计数器,它有低字节与高字节两个定时/计数寄存器,访问这些寄存器需要以指 定方式进行。必须要注意的是当使用指令载入数据到低字节寄存器,即 TMR1L 时,数据只被载入 到低字节缓冲器而不是直接送到低字节寄存器。当数据写入相应高字节寄存器,即 TMR1H 时,低 字节缓冲器中的数据才真正被写入低字节寄存器。换句话说,写入数据到高字节定时/计数寄存器时, 数据会被直接写入到高字节寄存器。同时在低字节缓冲器里的数据将被写入相应低字节寄存器。所 以当写数据到 16 位定时/计数寄存器时,低字节数据应该先写入。另外要注意的是读取低字节寄存 器的内容时,必须先读取高字节寄存器的内容,相应低字节寄存器中的内容就会载入低字节缓冲器 中并被锁存。在此动作执行之后,低字节寄存器中的内容可使用一般的方式读取。请注意,读取定 时/计数器低字节寄存器实际是读取先前锁存在低字节缓冲器中的内容,而非定时/计数器低字节寄存 器的实际内容。 定时/计数控制寄存器 –TMR0C,TMR1C,TMR2C,TMR3C HOLTEK 的单片机有灵活的定时/计数器,定时/计数器能工作在三种不同的模式,至于选择工 作在哪一种模式则是由各自的控制寄存器的内容决定。 定时器的控制寄存器和与之对应的定时寄存器共同来控制定时/计数器的运行情况。在使用定时 器之前,必须先正确地设定定时/计数控制寄存器,以便保证定时器能正确操作,而这个过程通常在 程序初始化期间完成。 为了确定定时器工作在哪一种模式,相关的定时控制寄存器的第 7 和第 6 位即 TnM1/TnM0 位 必须设定到要求的逻辑电平。定时控制寄存器的第 4 位 TnON,是定时器控制开关,设定为逻辑高 时,计数器开始计数,而清零时则停止计数。对于具有预分频器(Prescaler)的定时器而言,定时/计数 控制寄存器的第 0 位~第 2 位决定输入定时预分频器(Prescaler)中的分频比例。如果使用外部时钟源, 预分频器(Prescaler)的位将不作用。如果定时器工作在事件计数或脉冲宽度测量模式,定时控制寄存 器的第 3 位即 TnE,它的逻辑电平将可用来选择上升沿或下降沿触发。16 位定时/计数控制寄存器中 的 TnS 用于选择定时/计数器的时钟源。 Rev. 1.70 50 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 8 位定时/计数器结构 16 位定时/计数器结构 定时/计数控制寄存器-TMRnC Rev. 1.70 51 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 定时/计数控制寄存器-TMRnC 配置定时器模式 在这个模式,定时/计数器可以用来测量固定时间间距,当定时器发生溢出时,就会提供一个内 部中断信号。要工作在这个模式,定时器工作模式选择位 TnM1/TnM0 必须设置正确的值。如下所 示: 第7位 1 第6位 0 定时器模式时序图 在这个模式,内部时钟源 fSYS 被用来当定时器的时钟源提供给 8 位定时/计数器 0,fSUB 或 fsys/4 是作为内部时钟源提供给 16 位定时/计数器 1。但是,对于 8 位定时器,它的输入计时频率是 fSYS 除以定时器预分频器(Prescaler)的值,这个值是由定时控制寄存器第 2~0 位,即 TnPSC2~TnPSC0 位来决定。在设置完定时控制寄存器其他位,定时器控制寄存器第 4 位,即 TnON 位必须设置为逻 辑高,才能使定时器/计数器工作。每次内部时钟由高到低的电平转换都会使定时器值增加一。当定 时器计数溢出时,会产生中断信号且定时器会重新载入已经载入到预置寄存器的值,然后继续向上 计数。若要将中断除能,则只要将定时/计数器的中断使能位清零即可。 配置外部事件计数器模式 在这个模式,发生在外部定时器引脚的外部逻辑事件改变的次数,可以通过内部定时/计数器来 记录。要工作在这个模式,定时器工作模式选择位 TnM1/TnM0 必须设置正确的值。如下所示: Rev. 1.70 52 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 第7位 0 第6位 1 在这个模式中,外部定时器引脚用来作为定时/计数器时钟源,且不被预分频器分频。在定时器 控制寄存器其它设置完成后,计数器打开位 TnON 必须设为逻辑高,令计数器开始计数。当定时控 制寄存器中的第 4 位,即有效边沿选择位 TnE 为逻辑低时,每次外部定时器引脚接收到由低到高电 平的转换将使计数器加一。而当 TnE 为逻辑高时,每次外部定时器引脚接收到由高到低电平的转换 将使计数器加一。当计数器计满时,计数器将溢出且产生一个内部中断信号,同时定时/计数器将重 新载入已经载入到预置寄存器的值。若要将中断除能,则只要将定时/计数器的中断使能位清零即可。 由于外部定时器引脚和其输入/输出引脚共用,为了确保它是工作在外部事件计数模式,要注意 两点。首先是要将定时控制寄存器中的工作模式选择位设定在事件计数模式,其次是确定端口控制 寄存器将这个引脚设定为输入状态。应注意的是,即使单片机处于省电状态下,它也一直在记录外 部输入引脚上的逻辑电平转换。当定时器计数溢出时,会产生定时器中断和相应的唤醒源。 外部事件计数模式时序图 配置脉冲宽度测量模式 这个模式,可以测量外部定时/计数器引脚上的外部脉冲宽度。在脉冲宽度测量模式中, 定时 控制寄存器中的模式选择位 TnM1/TnM0 位则必须设置正确的值。要工作在这个模式,定时器工作 模式选择位 TnM1/TnM0 必须设置正确的值。如下所示: 第7位 1 第6位 1 脉冲宽度测量模式时序图 在这个模式,fSYS 被用来作为 8 位定时/计数器的内部时钟源。fSUB 或 fSYS/4 被用来作为 16 位的 定时器/计数器的内部时钟源。但是,对于 8 位的定时器的输入计时频率是 fSYS 除以定时器预分频器 (Prescaler)的值,这个值是由定时器控制寄存器位 2~0 即 TnPSC2~TnPSC0 位来决定。在设置完定 时控制寄存器的其它位之后,定时控制寄存器的第 4 位即使能位 TnON 设置为高时,定时/计数器使 能,当外部时钟引脚收到一个有效边沿时才开始计数。 定时控制寄存器的第三位,即有效边沿选择位 TnE 处于逻辑低时,一旦在定时器外部引脚有高 到低的电平转换,定时/计数器开始计数直到外部定时器引脚变为回到原来的电平状态。此时使能位 Rev. 1.70 53 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 将自动复位为 0,以停止定时/计数器计数。如果上升沿选择位为高,一旦在外部定时器引脚接收到 由一个从低到高的脉冲,定时/计数器将开始计数。当外部定时器引脚变为原始的低电平时定时/计数 器将停止计数。同上,这个使能位将自动复位为 0,以停止定时/计数器计数。值得注意的是在脉宽 测量模式下,当外部定时器引脚的外部控制信号在转变为原来电平时,使能位自动复位为 0。然而, 在其它两种模式下使能位只能通过程序控制复位为 0。 这时,定时/计数器中的剩余值可被程序读取,并由此得到外部定时/计数器引脚接收到的脉冲的 长度。当使能位复位后,任何在外部定时/计数器引脚的进一步的电平转化将被忽略。直到使能位再 次被程序置为高,定时/计数器才又开始脉冲宽度的测量。通过这种方法,用户可以很容易地测量窄 脉冲。 应该注意的是在这种模式下,定时/计数器是由外部定时器引脚上的逻辑变换控制而不是逻辑电 平控制。当定时/计数器计数溢出,单片机会产生一个中断信号发生,且定时计数器将重装预置值并 继续计数。通过清零定时/计数器的中断使能位,即可除能中断。 由于定时器外部引脚和普通的输入/输出引脚共用,为了确保定时器外部引脚配置作为脉冲宽度 测量引脚,则应确定两个条件。第一要将定时控制寄存器的工作模式选择位设置为脉冲宽度测量模 式;其次就是端口控制寄存器将引脚设置为输入状态。 可编程分频器 PFD 可编程分频器可以产生可变的频率输出,适用于需要精确频率的应用场合。PFD 输出引脚与 I/O 引脚 PA3 共用。这个功能通过配置选项来选择,如果不选择该功能,则这个引脚就是作为普通的 I/O 引脚使用。 PFD 的时钟源可以是定时/计数器 0 或者是定时/计数器 1 中任意一个溢出信号,由配置选项决定。 载入合适的值到定时寄存器和定时预分频器(Prescaler)中,可以产生需要的时钟输出频率。定时器会 从预置寄存器中的预设值开始向上计数,直至溢出,此时单片机会产生一个溢出信号,导致 PFD 输 出状态的改变。然后定时器会自动地重新载入预设值并继续向上计数。 为了让 PFD 正常运作,应记得要将端口控制寄存器 PAC 的第 3 位设置为输出模式。如果把它 设置为输入,则 PFD 输出不工作,该引脚仍是作为普通的输入引脚使用。只有在 PA3 设置为“1” 时,PFD 输出才开始有效。所以这个数据输出位就可作为 PFD 输出的开关控制位。应注意的是,若 将 PA3 输出数据位设置为“0”,则 PFD 输出则为低。 假如系统时钟使用晶体振荡器,使用这种方法可以产生非常精确的频率值。 PFD 输出控制 预分频器 控制寄存器中的 TnPSC0~TnPSC2 位可以用来定义定时/计数器内部时钟源的预分频级数。定时/ 计数器溢出信号可用于产生 PFD 信号和产生定时器中断。 Rev. 1.70 54 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 输入/输出接口 当运行在事件计数器或脉冲宽度测量模式时,定时/计数器需要使用外部定时器引脚以确保正确 的动作。此引脚如果为共用引脚,则需要正确设置为定时/计数器输入引脚而非普通 I/O 引脚,即通 过模式选择寄存器使定时/计数器处于计数器或脉冲宽度测量模式。此外端口控制寄存器需置高使此 引脚为输入引脚。当此引脚为定时/计数器引脚时,该引脚上的上拉电阻依然有效。 定时/计数器引脚内部滤波器 外部定时/计数器引脚连接一个滤波器可降低由外部定时/计数器引脚上噪声或尖峰信号引起的 计数出错和脉宽测量出错的可能性。内部滤波电路会产生一定的功耗,通过配置选项可关闭该滤波 器,这在功耗要求严格的应用中十分有用,但其输入信号则为原始信号。值得注意的是滤波开/关的 配置选项可套用到外部定时/计数器引脚和外部中断输入引脚,单独的定时/计数器引脚和外部中断输 入引脚不具备滤波开/关功能。 编程注意事项 当定时/计数器运行在定时器模式时,定时器的时钟源是使用内部系统时钟,与单片机整体运行 情况同步。在这个模式下,当定时寄存器溢出时,单片机将产生一个内部中断信号,使程序进入相 应的内部中断。对于脉冲宽度测量模式,定时器的时钟源也是使用内部系统时钟,但定时器只有在 正确的逻辑条件出现在定时器输入引脚时才执行动作。由于这个外部事件没有和内部定时器时钟同 步,只有当下一个定时器时钟脉冲到达时,单片机才会检测到这个外部事件,因此在测量值上可能 有小的差异,需要程序设计者在程序应用时加以注意。同样的情况发生在定时器配置为外部事件计 数器模式时,它的时钟来源是外部事件,和内部系统时钟或者定时器时钟不同步。 当读取定时/计数器或写数据到预置寄存器时,计数时钟会被阻隔以避免错误发生,但这样做可 能会导致计数错误,所以程序设计者应该考虑到这点。在第一次使用定时/计数器之前,要仔细确认 有没有正确地设定初始值。中断控制寄存器中的定时器使能位必须正确的设置,否则相应定时/计数 器内部中断仍然无效。定时/计数控制寄存器中的触发边沿选择位、定时/计数器工作模式和时钟源控 制位也必须正确的设定,以确保定时/计数器按照应用需求而正确的配置。在定时/计数器打开之前, 必须确保先载入定时/计数寄存器的初始值;这是因为在上电后,定时/计数寄存器中的初始值是未知 的。定时/计数器初始化后,可以使用定时/计数控制寄存器中的使能位来打开或关闭定时器。注意, 必须先正确地设定定时器模式,然后再去设置使能位为高打开定时器。写定时/计数控制寄存器,如 果同时改变模式并设置使能位为高,可能会导致错误结果。 当发生定时/计数器溢出,相应的中断请求标志将置位。若中断允许,将会产生一个中断信号。 不管中断是否允许,在 HALT 状态下,定时/计数器的溢出也会产生唤醒,这种情况可能发生在外部 信号变化的计数模式中,定时/计数器向上计数直至溢出并唤醒系统。若在 HALT 模式下,不需要定 时器中断唤醒系统,可以在进入 HALT 前将相应中断请求标志位置位。 Rev. 1.70 55 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 定时/计数器应用范例 这个例子说明了如何设置定时/计数寄存器,如何使能和处理中断。定时/计数器控制寄存器的第 4 位设置为高时,将打开定时/计数器。同样,此位清零时,关闭定时/计数器。此应用范例设置定时 /计数为定时模式,时钟来源于内部的系统时钟。 org 04h ; external interrupt vector reti org 08h ; Timer/Event Counter 0 interrupt vector jmp tmrint ; jump here when the Timer/Event Counter 0 overflows : org 20h ; main program tmrint: ;internal Timer/Event Counter 0 interrupt routine : ; Timer/Event Counter 0 main program placed here : reti : : begin: ;setup Timer 0 registers mov a,09bh ; setup Timer 0 preload value mov tmr0,a; mov a,081h ; setup Timer 0 control register mov tmr0c,a ; timer mode and prescaler set to /2 ; setup interrupt register mov a,009h ; enable master interrupt and timer interrupt mov int0c,a set tmr0c.4 ; start Timer/Event Counter 0 - note mode bits must be previously setup Rev. 1.70 56 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 脉冲宽度调制器 该系列单片机有多个脉冲宽度调制(PWM)输出。通过给相应的 PWM 寄存器设置特殊的值,PWM 功能可提供占空比可调而频率固定的波形,这在马达速度控制等应用中十分有用。 PWM 概述 在数据存储器中,单片机为每一个 PWM 都指定了对应的寄存器,即 PWM 寄存器。每对寄存 器有 12 位用于表示输出波形中每个调制周期的占空比。PWM 寄存器中也包含了控制 PWM 输出使 能与除能的控制位。为了提高 PWM 调制频率,将每个调制周期调制成 16 个单独的子周期,即为 8+4 模式。请注意只要将目的值写入相应的 PWM 寄存器即可,要注意的是,使用 PWM 时,只要将所 需的值写入相应的 PWM 寄存器内,单片机的内部硬件会自动地将波形细分为子调制周期。PWM 的 时钟源为系统时钟 fSYS。 单片机型号 通道数 PWM 模式 输出引脚 全部单片机 4 8+4 PD0~PD3 寄存器名称 PWM0L~PWM3L PWM0H~PWM3H 将原始调制周期分成 16 个子周期的方法,使产生更高的 PWM 频率成为可能,这样可以提供更 广泛的应用。只要产生的 PWM 脉冲周期小于负载的时间常数,PWM 输出就比较合适,这是因为长 时间的常数负载将会平均 PWM 输出的脉冲。读者必须理解 PWM 频率与 PWM 调制频率的不同之处。 当 PWM 时钟为系统时钟 fSYS,而 PWM 值为 12 位时,整个 PWM 周期的频率为 fSYS/4096。然而, 工作在 8+4 模式时,PWM 调制频率将会是 fSYS/256。 PWM 调制频率 PWM 周期频率 PWM 占空比 fSYS/256 fSYS/4096 PWM 寄存器值/4096 8+4 脉宽调制模式 因为 PWM 寄存器有 12 位,所以一个完整的 PWM 周期由 4096 个时钟周期组成。在 8+4 PWM 模式中,每个 PWM 周期又被分成 16 个独立的子周期,称为调制周期 0~调制周期 15,在表格中以 “i”表示。16 个子周期各包含 256 个时钟周期。在这个模式下,得到以 16 为因数增加的调制频率。 12 位的表示整个 PWM 波形的占空比的 PWM 寄存器值分成两个部分。第一部分包括第 4 位~第 11 位,表示 DC 值,第二部分为第 0 位~第 3 位,表示 AC 值。在 8+4 PWM 模式中,2 个调制子周期 的占空比,分别如下表 Rev. 1.70 57 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 参数 调制周期 i (i=0~15) AC (0~15) DC (占空比) DC 1 i<AC 256 iAC DC 256 8+4 模式调制周期值 下图表示 8+4 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何分成 16 个独立的 调制周期以及 AC 值与 PWM 值的关系。 PWM 输出控制方式 PWM0~PWM3 输出分别与 PD0~ PD3 引脚共用。要使某个引脚作为 PWM 输出而非普通的 I/O 引脚,PWM 寄存器的第 0 位须设置为高电平。I/O 端口控制寄存器 PDC 中相应的位也必须写“0” , 以确保所需要的 PWM 输出引脚设置为输出状态。在完成这两个初始化步骤,以及将所要求的 PWM 值写入 PWM 寄存器之后,将“1”写入到 PD 输出数据寄存器的相应位,则 PWM 数据就会出现在 引脚上。将“0”写入到 PD 输出数据寄存器的相应位,则会除能 PWM 输出功能并强制输出低电平。 通过这种方式,PD 数据输出寄存器可作为 PWM 功能的开/关控制来使用。假如配置选项已经选择 PWM 功能,但是在 PDC 控制寄存器中相应的位又写入“1” ,使其成为输入引脚,则此引脚仍是作 为带上拉电阻的正常输入端使用。 8+4 模式 Rev. 1.70 58 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 PWM寄存器 PWM 程序范例 此应用范例说明如何设定和控制 PWM 输出。 mov a,64h ; setup PWM0 value to 1600 decimal which is 640H mov pwm0h,a ; setup PWM0H register value clr pwm0l ; setup PWM0L register value clr pdc.0 ; setup pin PD0 as an output set pwm0en ; set the PWM0 enable bit set pd.0 ; Enable the PWM0 output : : : : clr pd.0 ; PWM0 output disabled-PD0 will remain low Rev. 1.70 59 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 模数转换器 对于大多的电子系统而言,处理真实世界的模拟信号是共同的需求。为了让单片机来处理这些 信号,首先应使用 A/D 转换器将外部模拟信号转换成数字信号。将 A/D 转换器电路集成在单片机上, 可有效的减少外部器件,这样,单片机具有成本低和器件所占空间小的优势。 A/D 概述 该系列单片机包含了八个通道的 A/D 转换器,它们可以直接接入外部模拟信号,如来自传感器 或其它控制信号,并直接将这些信号转换成 12 位的数字量。 序号 全部单片机 输入通道 8 转换位数 12 输入引脚 PB0~PB7 下面表格显示 A/D 的内部结构,及相关寄存器。 A/D 转换器数据寄存器-ADRL, ADRH 具有 12 位 A/D 转换器的单片机则需要两个寄存器,一个高字节寄存器 ADRH,一个低字节寄 存器 ADRL。在转换过程发生后,单片机可以直接读取这两个寄存器,以获得数字化的转换值。对 于使用两个 A/D 转换器数据寄存器的单片机来说,要注意的是,只有高位寄存器 ADRH 完全利用了 8 位。而低位寄存器 ADRL 只利用了 8 位中的 4 位,它包含的 12 位转换值中低位。 在下表中,D0~D11 是 A/D 换转数据结果位。 寄存器 ADRL ADRH Bit7 D3 D11 Bit6 D2 D10 Bit5 D1 D9 Bit4 D0 D8 Bit3 - D7 Bit2 - D6 Bit1 - D5 Bit0 - D4 A/D 数据寄存器 A/D 转换器控制寄存器 — ADCR,ACSR 寄存器 ADCR,ACSR 用来控制 A/D 转换器的功能和操作。这个 8 位的寄存器所定义的功能包 括选择哪一个模拟通道连接至内部 A/D 转换器,哪个引脚是模拟输入,哪个引脚是正常 I/O,并控 制和监视 A/D 转换器的开始和 A/D 转换结束的状态。 ADCR 寄存器中的 ACS2~ACS0 位,用来定义通道的编号。由于每个单片机只包含一个实际的 模数转换电路,因此这 8 个模拟输入中的每一个都必须分别被发送到转换器。ADCR 寄存器中 ACS2~ACS0 位的功能正是决定哪个模拟通道真正连接到内部 A/D 转换器。 ADCR 控制寄存器中的 PCR2~PCR0 位,用来定义 PB 端口上哪些引脚为 A/D 转换器的模拟输 入,哪些引脚为正常的 I/O。如果 PCR2~PCR0 的值等于 “111”,则所有引脚 AN0~AN7 都将被设 为模拟输入。要注意的是,如果 PCR2~PCR0 全都设为“0”,则所有 PB 端口的引脚都被设为正常的 I/O,这时内部 A/D 转换器电路的电源将被关闭以减少功耗。 Rev. 1.70 60 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 A/D 转换器结构 A/D 转换控制寄存器 - ADCR ADCR 寄存器中的 START 位,用于打开和复位 A/D 转换器。当单片机设定此位从逻辑低到逻 辑高,然后再到逻辑低,就会产生一个模数转换周期。当 START 位从逻辑低到逻辑高,但不再回到 逻辑低时,则会将 ADCR 寄存器中的 EOCB 位置为“1” ,复位模数转换器。 START 位用于控制内 部模数换转器的开/关动作。 ADCR 寄存器中的 EOCB 位用于表明模数转换过程的完成。在转换周期结束后,EOCB 位会被 单片机自动地置为“0”。系统会置位中断控制寄存器内相应的 A/D 中断请求标志位。使用单片机时, 如果中断使能,就会产生适当的内部中断信号。A/D 内部中断信号将引导程序到相应的 A/D 内部中 断入口。如果 A/D 内部中断被除能,单片机可以轮询 ADCR 寄存器中的 EOCB 位,检查此位是否被 Rev. 1.70 61 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 清除,以做为另一种侦测 A/D 转换周期结束的方法。 A/D 转换器的时钟源为系统时钟 fSYS 的分频,而分频率由 ACSR 寄存器中的 ADCS2,ADCS1 和 ADCS0 位决定。控制 A/D 转换器的开/关功能是 ACSR 寄存器中的 ADONB 位和 ADCR 寄存器中 的 PCR 位。ADONB 位必须清 0,且 PCR 位必须置非零值以使能 A/D 转换器。 PCR 0 >0 >0 ADONB X 0 1 A/D Off On Off 虽然 A/D 时钟源是由系统时钟 fSYS、ADCS2,ADCS1 和 ADCS0 决定,但可选择的最大 A/D 时 钟源速度则有一些限制。由于允许的 A/D 时钟周期 tAD 的最小值是 0.5s,因此,当系统时钟速度超 过 4MHz 时,ADCS2,ADCS1 和 ADCS0 位不能设为“000” 。否则的话,将导致 A/D 时钟周期小于 0.5s,产生不准确的 A/D 转换值。参考下面表格中的一些例子,被标上星号*的数值应注意,因为 它们的 A/D 时钟周期小于规定的最小值。 fSYS 1MHz 2MHz 4MHz 8MHz 12MHz ADCS2,ADCS1, ADCS0=000 (fSYS/2) 2s 1s 500ns 250ns* 167ns* A/D 时钟周期(tAD) ADCS2,ADCS1, ADCS2,ADCS1, ADCS0=001 ADCS0=010 (fSYS/8) (fSYS/32) 8s 32s 4s 16s 2s 8s 1s 4s 667ns 2.67s ADCS2,ADCS1, ADCS0=011 未定义 未定义 未定义 未定义 未定义 A/D 时钟周期例子 A/D 转换控制寄存器-ACSR Rev. 1.70 62 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 A/D 输入引脚 所有的 A/D 模拟输入引脚都与 PB 端口的 I/O 引脚共用。ADCR 寄存器中的 PCR2~PCR0 位,用 来决定是将输入引脚设置为正常的 PB 端口输入/输出引脚,还是将它们设置为模拟输入引脚。通过 这种方式,引脚的功能可由程序来控制,从正常的 I/O 操作功能到模拟输入,反过来也一样。当输 入引脚作为正常的 I/O 引脚使用时,可通过配置选项设置上拉电阻,若设置为 A/D 输入,则上拉电 阻会自动断开。请注意,PBC 端口控制寄存器并不需要为使能 A/D 输入,而先设定 A/D 引脚为输入 引脚,当 PCR2~PCR0 位使能 A/D 输入时,不考虑端口控制寄存器的状态。A/D 转换器有自己的电 源供应引脚:AVDD,AVSS 和 VREF,其中模拟输入电压值不能超过 VREF。 A/D 转换初始化 内部的 A/D 必须经过一个特殊的方法初始化。当转换通道选择位被改变,A/D 转换器必须重新 初始化。如果通道选择位改变后没有重新初始化,那么 EOCB 标志位可能会处于不确定的状态,这 样可能会导致一个错误的转换结束信号。当通道选择位改变后,寄存器 ADCR 中的 START 位必须 在一到十个指令周期内先置位再立即清零。这样才可以保证 EOCB 被正确的置位。 A/D 转换步骤 下面总结实现 A/D 转换过程的各个步骤。 步骤 1 通过 ACSR 中的 ADCS2,ADCS1 和 ADCS0 位,选择所需的 A/D 转换时钟。 步骤 2 将 ACSR 中的 ADONB 位清零,使能 A/D 转换器。 步骤 3 通过 ADCR 中的 ACS2~ACS0 位,选择连接至内部 A/D 转换器的通道。 步骤 4 选择 PB 端口的 A/D 输入引脚,并通过 ADCR 中的 PCR2~PCR0 位,将它们设置为 A/D 输入引脚。 此步骤也可在第二步写 ADCR 寄存器时完成。 步骤 5 如果要使用中断,则中断控制寄存器必须正确地设置,以确保 A/D 功能的动作。根据使用的单片 机,INTC0 中的主中断控制位 EMI,INTC1 中的 EMFI,和 A/D 转换器的中断使能位 EADI 应置 位为“1”。 步骤 6 通过设定 ADCR 寄存器中的 START 位从“0”到“1”再回到“0”,开始进行 A/D 转换过程。该 位需初始化为“0”。 步骤 7 可以轮询 ADCR 寄存器中的 EOCB 位,检查模数转换过程是否完成。当此位为逻辑低时,表示转 换过程已经完成。转换完成后,可读取 A/D 数据寄存器 ADRL 和 ADRH 获得转换后的值。另一 种方法是,若中断使能且堆栈未满,则转换完成后,程序会进入 A/D 中断服务子程序。 注:若使用轮询 ADCR 寄存器中 EOCB 位的状态的方法来检查转换过程是否结束时,中断使能这一步可省去。 下图显示了与模数转换过程和相关时序的各个阶段。 A/D 转换器没有对应的配置选项,它的功能设定与操作完全由应用过程控制。由应用过程控制 初始化并开始 A/D 转换过程后,单片机的内部硬件就会开始进行转换,在这个过程中,程序可以继 续其它功能。A/D 转换的时间为 16tAD,其中 tAD 为一个 A/D 时钟周期。 Rev. 1.70 63 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 AD 转换时序图 编程注意事项 在编程序时,必须特别注意寄存器 ADCR 中的 A/D 转换通道选择位。如果这些全部为零,那么 没有外部引脚连接到 A/D 转换器上,此时的外部引脚可作为普通的 I/O 口使用。这样可以减少 A/D 转换部分的功耗,也降低了整个芯片的工作电流。关闭 A/D 转换器以降低功耗,这一点对电池供电 的系统非常重要。寄存器 ACSR 中的 ADONB 位用于暂停 A/D 转换功能。 另一个注意事项是,当 A/D 转换通道选择位改变后,A/D 转换器必须重新初始化。当通道选择 位改变后,给寄存器 ADCR 的 START 位一个脉冲即可初始化 A/D 转换器。当选择位全部被清零例 外,因为 A/D 转换不需要重新初始化。 A/D 转换应用范例 下面两个短程序的例子用来说明怎样设置和执行 A/D 转换。第一个范例,这种方法轮回检测寄 存器 ADCR 的 EOCB 位,来判断转换结束。第二个范例,A/D 中断用于检测转换结束。 范例:使用 EOCB 轮询方法侦测转换的结束 clr EADI ; disable ADC interrupt mov a,00000001B mov ACSR,a ;select fSYS/8 as A/D clock and turn on ADONB bit mov a,00100000B ; setup ADCR register to configure Port PB0~PB3 ; as A/D inputs mov ADCR,a ; and select AN0 to be connected to the A/D converter : : ; As the Port B channel bits have changed the ; following START ; signal (0-1-0) must be issued ; instruction cycles : Start_conversion: clr START set START ; reset A/D clr START ; start A/D Rev. 1.70 64 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 Polling_EOC: sz EOCB jmp mov mov mov mov : jmp polling_EOC a,ADRL adrl_buffer,a a,ADRH adrh_buffer,a ; poll the ADCR register EOCB bit to detect end ; of A/D conversion ; continue polling ; read low byte conversion result value ; save result to user defined register ; read high byte conversion result value ; save result to user defined register start_conversion ; start next A/D conversion 范例:使用中断方法侦测转换的结束 clr mov mov mov EADI a,00000001B ACSR,a a,00100000B mov : ADCR,a ; disable ADC interrupt ; select fSYS/8 as A/D clock and turn on ADONB bit ; setup ADCR register to configure Port PB0~PB3 ; as A/D inputs ; and select AN0 to be connected to the A/D ; As the Port B channel bits have changed the ; following START signal(0-1-0) must be issued ; Start_conversion: clr START set START clr START clr ADF set EADI set EMFI set EMI ADC interrupt service routine ADC_: mov acc_stack,a mov a,STATUS mov status_stack,a : mov a,ADRL mov adrl_buffer,a mov a,ADRH mov adrh_buffer,a : EXIT__ISR: mov a,status_stack mov STATUS,a mov a,acc_stack clr ADF reti Rev. 1.70 ; reset A/D ; start A/D ; clear ADC interrupt request flag ; enable ADC interrupt ; enable multi-function interrupt ; enable global interrupt ; save ACC to user defined memory ; save STATUS to user defined memory ; read low byte conversion result value ; save result to user defined register ; read high byte conversion result value ; save result to user defined register ; restore STATUS from user defined memory ; restore ACC from user defined memory ; clear ADC interrupt flag 65 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 A/D 转换功能 该系列单片机有一个 12 位的 A/D 转换器,它转换的最大值可达 FFFH。由于模拟输入最大值等 于 VDD 的电压值,因此每一位可表示 VDD/4096 的模拟输入值。下图显示了理想情况下模拟输入值 和数字输出值之间转换功能。 为了减少量化错误,A/D 转换器输入端会加入 0.5 LSB 的偏移量。除了数字化数值 0,其后的数 字化数值会在精确点之前的 0.5 LSB 处改变,而数字化数值的最大值将在 VDD 之前的 1.5 LSB 处改 变。 理想的 A/D 转换功能 Rev. 1.70 66 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 串行接口 该单片机有两种易与外围设备通信的串行接口:四线 SPI 和两线 I2C 接口。这两种接口具有相 当简单的通讯协议,单片机可以通过这些接口与传感器、闪存或 EEPROM 内存等硬件设备通讯。SIM 接口的引脚与其他的 I/O 引脚共用,所以要使用 SIM 功能时应先在配置选项中选中 SIM 功能。因为 这两种接口共用引脚和寄存器,所以要通过一个内部寄存器中的一个位来选择哪一种通讯接口。 SPI 接口 SPI 接口常用于与外部设备如传感器、闪存或 EEPROM 内存等通讯。四线 SPI 接口最初是由摩 托罗拉公司研制,是一个有相当简单的通讯协议的串行数据接口,这个协议可以简化与外部硬件的 编程要求。 SPI 通信模式为全双工模式,且能以主/从模式的工作方式进行通信,单片机既可以做为主机, 也可以做为从机。虽然 SPI 接口理论上允许一个主机控制多个从机,但此处的 SPI 中只有一个片选 信号 引脚,因此只有一个从机能连接到一个 SPI 总线上。 SPI 主从机连接方式 SPI 接口操作 SPI 接口是一个全双工串行数据传输器。SPI 接口的四线为:SDI、SDO、SCK 和 。SDI 和 SDO 是数据的输入和输出线。SCK 是串行时钟线,是从机的选择线。SPI 的接口引脚与普通 I/O 口和 I2C 的功能脚共用。通过设定 SIM 配置选项和 SIMCTL0/SIMCTL2 寄存器的对应位,来使能 SPI 接口。 SPI 配置选项设定好后,还可以通过 SIMCTL0 寄存器中的 SIMEN 位来除能或使能。连接到 SPI 接 口的单片机以从主/从模式进行通信,且主机完成所有的数据传输初始化,并控制时钟信号。由于单 片机只有一个 引脚,所以只能拥有一个从机设备。 该系列单片机的 SPI 功能具有以下特点: · 全双工同步数据传输 · 主从模式 · 最低有效位先传或者最高有效位先传的数据传输模式 · 传输完成标志位 · 时钟源上升沿或者下降沿有效 · WCOL 和 CSEN 位使能或除能选择 ____ SPI 接口状态受很多因素的影响,如单片机处于主机或从机的工作模式和 CSEN,SIMEN,SCS 位的状态。表格中的 I,Z 表示输入引脚处于浮空状态。单片机中有几个与 SPI 接口有关的配置选项, 其中之一就是 SIM 功能,若使能了 SIM 功能则选择了 SIM 功能引脚。注意,如果配置选项中并没 有选择 SIM 功能,则 SIMCTL0 中的 SIMEN 位是无效的。另外两个 SIM 的配置选项决定要不要使 用 CSEN 和 WCOL 位。 Rev. 1.70 67 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 配置选项 功能 SIM 功能 SIM 接口或 I/O 口 SPI CSEN 位 使能/除能 SPI WCOL 位 使能/除能 SIM 接口配置选项 SPI 寄存器 单片机中有三个用于控制 SPI 接口工作的寄存器。分别是 SIMDR 数据寄存器和两个控制寄存器 SIMCTL0 和 SIMCTL2。注:SIMCTL1 只用于 I2C 接口。 主机(SIMEN=1) 从机(SIMEN=1) CSEN=1 CSEN=1 ____ ____ CSEN=0 SCS=0 SCS=1 主机/从机 (SIMEN=0) CSEN=0 CSEN=1 SCS Z Z L Z I,Z I,Z SDO Z O O O O Z SDI Z I,Z Z Z I,Z H:CKPOL=0 L:CKPOL=1 I,Z SCK I,Z H:CKPOL=0 L:CKPOL=1 I,Z I,Z Z 引脚 ____ “Z”为浮空,“H”为输出高,“L”为输出低,“I”为输入,“O”为输出,“I,Z”为输入浮空(不带上拉电阻) SPI 接口状态 SPI 方框图 Rev. 1.70 68 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SPI/I2C 控制寄存器-SIMCTL0 I2C 控制寄存器-SIMCTL1 Rev. 1.70 69 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SPI 控制寄存器-SIMCTL2 SIMDR 用于存储发送和接收的数据。这个寄存器由 SPI 和 I2C 功能所共用。在单片机尚未将数 据写入到 SPI 总线中时,要传输的数据应存在 SIMDR 中。SPI 总线接收到数据之后,单片机就可以 从 SIMDR 数据寄存器中读取。所有通过 SPI 传输或者接收的数据都必须通过 SIMDR 实现。 位 7 6 5 4 3 2 1 0 Label SD7 SD6 SD5 SD4 SD3 SD2 SD1 SD0 R/W R/W R/W R/W R/W R/W R/W R/W R/W POR X X X X X X X X 单片机中也有两个控制 SPI 接口功能的寄存器,SIMCTL0 和 SIMCTL2。应注意的是 SIMCTL2 与 I C 接口功能中的的寄存器 SIMAR 是同一个寄存器。SPI 功能不会用到寄存器 SIMCTL1,SIMCTL1 只适用于 I2C 中。寄存器 SIMCTL0 用于控制使能/除能功能和设置数据传输的时钟频率。虽然 SIMCTL0 与 SPI 功能关,但是也用于控制外部时钟分频。寄存器 SIMCTL2 用于其他的控制功能如 LSB/MSB 选择,写冲突标志位等。 以下是寄存器 SIMCTL1 每个位的具体解释: · SIMIDLE SIMIDLE 位是用于选择 SPI 接口功能在 IDLE 模式下是否继续运行。若将该位设置为高,那么 SPI 接口功能将在 IDLE 模式时继续运行。反之,当设置位低时,单片机运行在 IDLE 时停止 SPI 功 能。这个 SPI/I2C 空闲模式控制位位于寄存器 CLKMOD 中的第四位。 · SIMEN SIMEN 是 SPI 接口的总控制开/关位。当 SIMEN 位清 0 时,SPI 接口除能,SDI、SDO、SCK 2 ____ 和SCS线将处于为浮空状态且 SPI 工作电流将降至最低。此位为高时 SPI 使能。若要使这个位起效, 则应在配置选项中先使能 SIM 功能。当 SIMEN 位从低到高时,SPI 寄存器将是一个未知状态,因此 应在应用程序中初始化这些寄存器。 · SIM0~SIM2 这三个位可以设置 SIM 功能的工作模式。用于选择 SPI 的主从模式和 SPI 的主机时钟频率及 I2C Rev. 1.70 70 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 或 SPI 功能。SPI 时钟源可来自于系统时钟也可以选择来自定时/计数器。若选择的是作为 SPI 从机, 则其时钟源从外部主机而得。 SPI 主/从时钟控制和 I2C 使能 SIM0 SIM1 SIM2 0 0 0 SPI 主机,fSYS/4 0 0 1 SPI 主机,fSYS/16 0 1 0 SPI 主机,fSYS/64 0 1 1 SPI 主机,fSUB 1 0 0 SPI 主机定时/计数器 0 输出/2 1 0 1 SPI 从机 1 1 0 I2C 模式 1 1 1 未使用 SPI 控制寄存器-SIMCTL2 寄存器 SIMCTL2 也被用于 I2C 接口,但名稱為 SIMAR。 · TRF TRF 是发送/接收结束标志位,若有 SPI 数据传输结束时会自动设为高,且须由应用程序清零。 该位可以产生中断。 · WCOL WCOL 位用于判断数据冲突的发生。如果这一位为高,表示在数据传输阶段有数据想要写入到 寄存器 SIMDR 中。而如果数据传输正在进行中,这个写动作会被单片机忽略。可通过程序清零这个 位。可以通过配置选项使能或除能 WCOL。 · CSEN ____ ____ CSEN 位用于SCS的开/关控制。如果 CSEN 位为低电平时,SCS位将除能并进入浮空状态。如 ____ 果 CSEN 位为高电平时,SCS位将使能并进入选择状态。注:这个位也可以通过配置选项使能或除 能。 · MLS MLS 是数据移位选择控制位,用于选择数据传输方式,高位优先还是低位优先。若 MLS 为高 时,则为高位优先;为低时,则低位优先。 · CKEG 和 CKPOL 这两位是用于设置在 SPI 总线上的时钟信号输出和输入数据。这两位必须在数据传输之前设置 好,否则,有可能会出现错误的时钟沿。CKPOL 位决定的是时钟线的初始状态,如果该位设为高则 在无效时钟周期内 SCK 线的电平将处于低。如果该位设为低则在无效时钟周期内 SCK 线将处于高 电平。CKEG 位决定的是基于 CKPOL 状态的有效时钟边沿类型。 Rev. 1.70 71 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SPI 主机模式时序 SPI 从机模式时序(CKEG=0) SPI 从机模式时序(CKEG=1) Rev. 1.70 72 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SPI 传输控制流程图 SCK 时钟信号 CKPOL CKEG 0 0 0 1 高电平 上升沿有效 高电平 下降沿有效 1 0 低电平 下降沿有效 1 1 低电平 上升沿有效 SPI 通信 将 SIMEN 设置为高,使能 SPI 功能之后,单片机处于主机模式,当数据写入到寄存器 SIMDR 的同时传输/接收开始进行。数据传输完成时,TRF 位将自动被置位但清除只能通过应用程序完成。 单片机处于从机模式时,收到主机发来的信号之后,会传输 SIMDR 中的数据,而且在 SDI 引脚上 ____ 的数据也会被移位到 SIMDR 寄存器中。主机应在输出时钟信号之前先输出一个SCS 信号以使能从 ____ 机,并且从机的数据传输功能也应在接收到SCS信号之前使能。 即使在单片机执行了 HALT 指令之后,SPI 功能仍将继续执行。 Rev. 1.70 73 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 I2C 接口 I2C 可以和外部硬件如传感器,EEPROM 内存等外部硬件接口进行通讯。最初是由飞利浦公司 研制,是适用于同步串行数据传输的双线式低速串行接口。I2C 接口具有两线通讯,非常简单的通讯 协议和在同一总线上和多个设备进行通讯的能力的优点,使之在很多的应用场合中大受欢迎。 I2C 接口的操作 I2C 串行接口是一个双线的接口,有一条串行数据线 SDA 和一条串行时钟线 SCL。由于可能有 多个设备在同一条总线上相互连接,所以这些设备的输出都是开漏型输出。因此应在这些输出口上 都应加上拉电阻。应注意的是:I2C 总线上的每个设备都没有选择线,但分别与唯一的地址一一对应, 用于 I2C 通讯。 如果有两个设备通过双向的 I2C 总线进行通讯,那么就存在一个主机,一个从机。主机和从机 都可以用于传输和接收数据,但只有主机才可以控制总线动作。那些处于从机模式的设备,要在 I2C 总线上传输数据只有两种方式,一是从机发送模式,另外就是从机接收模式。 单片机中有几个和 I2C 接口相关的配置选项。其中之一是使能 I2C 功能,选择 SIM 引脚而非普 通 I/O 口。应注意的是如果在配置选项中没有将 SIM 功能使能,那么寄存器 SIMCTL0 中的 SIMEN 位不起作用。配置选项中有一个选项允许使用其他的时钟来驱动 I2C 接口。另外有一个配置选项用 于控制 I2C 接口的去抖时间大小。这个功能可以使用内部时钟在外部时钟上增加一个去抖间隔,会 减小时钟线上毛刺发生的可能性,以避免单片机发生误动作。如果选择了这个功能,去抖时间可以 选择 1 个或者 2 个系统时钟。 功能 SIM SIM 功能 SIM 接口或 SEG 引脚 2 2 I C 时钟 I C 运行时不使用内部时钟除能/使能 I C 去抖时间 无延迟时间,1 个系统时钟;2 个系统时钟 2 I2C 接口配置选项 Rev. 1.70 74 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 I2C 寄存器 I2C 总线的三个控制寄存器是 SIMCTL0 和 SIMCTL1,SIMAR 及一个数据寄存器 SIMDR。SIMDR 寄存器,SPI 章节中已有介绍,用于存储正在传输和接收的数据,当单片机将数据写入 I2C 总线之前, 实际将被传输的数据存放在寄存器 SIMDR 中。从 I2C 总线接收到数据之后,单片机就可以从寄存器 SIMDR 中得到这个数据。I2C 总线上的所有传输或者接收到的数据都必须通过 SIMDR。应注意的是 SIMAR 也有另外一个名字,SIMCTL2,使用 SPI 功能时会用到。I2C 接口会用到寄存器 SIMCTL0 中的 SIMIDLE 位,SIMEN 位,和 SIM0~SIM2 位。SIMCTL0 在以上的 SPI 功能中已有介绍。 I2C 方框图 · SIMIDLE SIMIDLE 位用于选择当设备工作在休眠模式运行时 I2C 接口是否继续工作。SIMIDLE 位为高时 允许 I2C 总线在休眠模式下运行。 SIMIDLE 位为低时停止 I2C 总线在休眠模式下运行。 这个 SPI/I2C 空闲控制位位于寄存器 CLKMOD 中的第四位。 · SIMEN SIMEN 位是 I2C 接口的开/关控制位。如果清零 SIMEN 位,则将除能 I2C 接口,并且 SDA 和 SCL 引脚会处于浮空状态,这样 I2C 接口的工作电流会降至最低值。在这种情况下,这些引脚可以 用作 SEG 功能。将 SIMEN 设为高则将使能 I2C 功能。应先使能配置选项中的 SIM 功能以使能这个 位。应注意的是如果 SIMEN 位从低变为高,那么 I2C 的控制寄存器的值将处于不定态,因此在应用 程序中应先初始化 I2C 的控制寄存器。 · SIM0~SIM2 · 这几个位用于设置 SIM 功能的工作模式。如果要选择的是 I2C 功能,则应将这几个位设为 110。 RXAK RXAK 位是接收确认标志位。如果 RXAK 位被重设为 0 即 8 位数据传输之后,设备在第九个时 钟有接受到一个正确的确认位。如果单片机处于发送状态,发送方会检查 RXAK 位来判断接收方是 否愿意继续接收下一个字节。因此直到 RXAK 为 1 时,传输方停止发送数据。这时,传输方将释放 SDA 线,主机发出停止信号。 · SRW SRW 位是从机读写位。决定主机是否希望传输或接收来自 I2C 总线的数据。当传输地址和从机 的地址相同时,HASS 位会被设置为高,主机将检测 SRW 位来决定进入发送模式还是接收模式。如 果 SRW 位为高时,主机会请求从总线上读数据,此时设备处于传输模式。当 SRW 位为 0 时,主机 往总线上写数据,设备处于接收模式以读取该数据。 Rev. 1.70 75 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 · TXAK TXAK 是发送确认标志位。单片机接收 8 位数据之后会将该位在第九个时钟传到总线上。如果 单片机想要接收更多的数据,则应在接收数据之前将此位设置为 0。 · HTX · HTX 位是传送/接收模式标志位。为高,表示单片机处于传送模式;为低,则处于接收模式。 HBB HBB 位是 I2C 总线的忙标志位。当检测到 START 信号时,I2C 总线将处于忙状态,此时 HBB 位变为高电平。当检测到 STOP 信号时,I2C 总线将处于停止状态,HBB 位变为低。 · HASS · HASS 是一个地址匹配标志位。这个标志位由从机设备的地址是否同主机发送的地址相同决定。 如果地址匹配,这一位会被设为高,反之,为低。 · HCF HCF 标志位是数据传输标志位。当数据被传输时,该位为 0,当 8 位数据传输完时这一位为高 并产生一个中断。 I2C 控制寄存器-SIMAR 寄存器 SIMAR 也被用于 SPI 接口,但名称为 SIMCTL2。寄存器 SIMAR 存储的是单片机的 7 位从机地址。寄存器 SIMAR 中的第 1~7 位是单片机的从机地址。位 0 未定义。如果接至 I2C 的主机 发送处的地址和寄存器 SIMAR 中存储的地址相符,那么就选中了这个从机。应注意的是寄存器 SIMAR 和 SPI 接口使用的寄存器 SIMCTL2 是同一个寄存器。 I2C 从机地址寄存器-SIMAR I2C 总线通信 I2C 总线上的通信需要四步完成,一个起始信号,一个从机地址发送,一个数据传输,还有一个 停止信号。当起始信号被写入 I2C 总线时,总线上的所有从机都会接收到这个起始信号并且被通知 总线上会即将有数据到达。数据的前 7 位是从机地址,高位在前,低位在后。如果发出的地址和从 机地址匹配,SIMCTL1 寄存器的 HAAS 位会被置位,同时产生 I2C 中断。进入中断服务程序后, 系统要检测 HAAS 位,以判断 I2C 总线中断是来自从机地址匹配,还是来自 8 位数据传递完毕。在 数据传递中,注意的是,在 7 位从机地址被发送后,接下来的一位,即第 8 位,是读/写控制位,该 位的值会反映到 SRW 位中。从机通过检测 SRW 位以确定主控制器是要进入发送模式还是接收模式。 在 I2C 总线开始传送数据前,需要先初始化 I2C 总线,初始化 I2C 总线步骤如下: 步骤 1 向 I2C 总线地址寄存器 SIMAR 写入从机地址。 步骤 2 置位 I2C 总线控制寄存器 SIMCTL0 的 SIMEN 位,以使能 I2C 总线。 步骤 3 置位 I2C 总线中断控制寄存器的 ESIM 位,以使能 I2C 总线中断。 Rev. 1.70 76 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 I2C 总线初始化流程图 · 起始信号 起始信号只能由连接 I2C 总线主机产生,而不是由只做从机的 MCU 产生。总线上的所有从机都 可以侦测到起始信号。如果有从机侦测到起始信号,则表明 I2C 总线处于忙碌状态,并会置位 HBB。 起始信号是指在 SCL 为高电平时,SDA 线上发生从高到低的电平变化。 · 从机地址 总线上的所有从机都会侦测由主机发出的起始信号。发送起始信号后,紧接着主机会发送从机 地址以选择要进行数据传输的从机。所有在 I2C 总线上的从机接收到 7 位地址数据后,都会将其与 各自内部的地址进行比较。如果从机从主机上接收到的地址与自身内部的地址相匹配,则会产生一 个 I2C 总线中断信号。地址位接下来的一位为读/写状态位(即第 8 位),将被保存到 SIMCTL1 寄存器 的 SRW 位,随后发出一个低电平应答信号(即第 9 位)。当单片机从机的地址匹配时,会将状态标 志位 HAAS 置位。I2C 总线有两个中断源,当程序运行至中断服务子程序时,通过检测 HAAS 位以 确定 I2C 总线中断是来自从机地址匹配,还是来自 8 位数据传递完毕。当是从机地址匹配发生中断 时,则从机或者是用于发送模式并将数据写进 SIMDR 寄存器,或者是用于接收模式,从 SIMDR 寄 存器中读取空值以释放 SCL 线。 Rev. 1.70 77 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 I2C 通讯时序图 I2C 总线 ISR 流程图 Rev. 1.70 78 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 · SRW 位 SIMCTL1 寄存器的 SRW 位用来表示主机是要从 I2C 总线上读取数据还是要将数据写到 I2C 总 线上。从机则通过检测该位以确定自己是作为发送方还是接收方。当 SRW 置“1”,表示主机要从 I2C 总线上读取数据,从机则作为发送方,将数据写到 I2C 总线;当 SRW 清“0”,表示主机要写数 据到 I2C 总线上,从机则做为接收方,从 I2C 总线上读取数据。 · 应答位 主机发送呼叫地址后,当 I2C 总线上的任何从机内部地址与其匹配时,会发送一个应答信号。 此应答信号会通知主机有从机已经接收到了呼叫地址。如果主机没有收到应答信号,则主机必须发 送停止(STOP)信号以结束通讯。当 HAAS 为高时,表示从机接收到的地址与自己内部地址匹配,则 从机需检查 SRW 位,以确定自己是作为发送方还是作为接收方。如果 SRW 位为高,从机须设置成 发送方,这样会置位 SIMCTL1 寄存器的 HTX 位。如果 SRW 位为低,从机须设置成接收方,这样 会清零 SIMCTL1 寄存器的 HTX 位。 · 数据字节 在从机确认接收到从地址后,会进行 8 位宽度的数据传输。这个数据传输顺序是的高位在前, 低位在后。接收方在接收到 8 位数据后必须发出一个应答信号(“0”)以继续接收下一个数据。如果 发送方没接收到应答信号,发送方将释放 SDA 线,同时,主机将发出 STOP 信号以释放 I2C 总线。 所传送的数据存储在 SIMDR 寄存器中。如果设置成发送方,从机必须将先将欲传输的数据写到 SIMDR 寄存器中;如果设置成接收方,从机必须从 SIMDR 寄存器读取数据。 数据时序图 · 接收应答位 当接收器想要继续接收下一个数据时,必须在第 9 个时钟发出应答信号(TXAK)。被设为发送方 的从机将检测寄存器 SIMCTL1 中的 RXAK 位以判断是否传输下一个字节的数据,如果单片机不传输 下一个字节,那么它将释放 SDA 线并等待接收主机的停止信号。 Rev. 1.70 79 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 外围时钟输出 外围时钟输出功能使单片机能够为外部硬件提供和单片机时钟同步的时钟信号。 外围时钟操作 外围时钟输出引脚 PCLK 与 LCD 段线其中一个引脚共用,可以通过 SIMCTL0 寄存器的 PCKEN 位来选择引脚功能。外围时钟功能由 SIMCTL0 寄存器控制。外围时钟输出的时钟源来自定时/计数 器 0 的 2 分频或者内部系统时钟分频。SIMCTL0 寄存器的 PCKEN 位是总的开/关控制位,当该位为 高时使能外围时钟,为低时除能外围时钟。系统时钟所需要的分频比来自于同一个寄存器中的 PCKPSC0 和 PSCPSC1 位。如果系统进入低功耗模式,将除能外围时钟输出功能。 外围时钟方框图 外围时钟输出控制 – SIMCTL0 Rev. 1.70 80 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 蜂鸣器 与可编程分频器的作用相似,单片机中蜂鸣器的功能在于提供可变频率的输出,以适用于像压 电蜂鸣器驱动或其它需要精确频率输出的电路。引脚 BZ 和 BZ 形成互补对且和输入/输出引脚 PA0 和 PA 共用。配置选项可以选择三种蜂鸣器选项的其中一个。第一个选项为 PA0 和 PA1 引脚都作 为一般的输入/输出引脚使用,第二个选项为两个引脚都作为 BZ 和 BZ 蜂鸣器引脚使用,第三个 选项为只有 PA0 引脚作为 BZ 蜂鸣器引脚使用而 PA1 引脚则保持一般的输入/输出引脚功能。要注 意的是 BZ 引脚是 BZ 引脚的反向输出,可以提供更大的功率给外部接口,如蜂鸣器。 蜂鸣器由内部时钟源驱动,然后通过一个分频器,分频率由配置选项选择,可以选择范围从 fS/22 到 fS/29 的蜂鸣器频率。产生 fS 的时钟源控制着蜂鸣器的频率,这个时钟源有三种不同的来源,它 们分别是 32768Hz 振荡器、32K_INT 振荡器或系统振荡器的四分频,选择哪种 fS 时钟源由配置选 项决定。注意,蜂鸣器的频率由配置选项确定,它可以选择内部时钟 fS 的不同时钟来源和分频比例, 但不存在与蜂鸣器频率相关的内部寄存器。 蜂鸣器功能 如果配置选项选择 PA0 和 PA1 引脚作为蜂鸣器的 BZ 和 BZ 输出互补对,为了确保蜂鸣器 正确运行,必须将控制寄存器 PAC 端口的 PAC0 位和 PAC1 位清 0,设定为输出。PA 数据寄存 器中的 PA0 位必须设为逻辑高以使能蜂鸣器的输出,如果设为逻辑低,PA0 和 PA1 引脚将维持逻 辑低。因此 PA 数据寄存器中的 PA0 位可做为 BZ 和 BZ 输出的开启/关闭控制位。注意 PA 寄存 器中的 PA1 位无法控制 BZ 蜂鸣器引脚。 PA0/PA1 引脚功能控制 PAC 寄存器 PAC0 PAC 寄存器 PAC1 PA 寄存器 PA0 PA 寄存器 PA1 0 0 1 x 0 0 0 x 0 1 1 x 0 1 0 x 1 0 x D PA0 =“0” PA1 = input line PA0 = input line PA1 = D 1 1 x x PA0 = input line PA1 = input line 输出功能 PA0 = BZ ___ PA1 =BZ PA0=“0” PA1=“0” PA0 = BZ PA1 = input line “x”表示与该值无关 “D”表示数据为“0”或“1” Rev. 1.70 81 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 如果配置选项只选择 PA0 引脚作为 BZ 蜂鸣器引脚,那么 PA1 引脚可以作为一般 I/O 引脚 使用。为了使 PA0 引脚作为 BZ 蜂鸣器引脚使用,必须将控制寄存器 PAC 的 PAC0 位清 0,PA 寄 存器中的 PA0 位也必须设为逻辑高以使能蜂鸣器输出,如果设定为逻辑低,PA0 将维持逻辑低。因 此 PA0 位可做为 BZ 蜂鸣器输出的开启/关闭控制位,如果 PAC 控制寄存器的 PAC0 位设定为逻 辑高,即使配置选项选择了 BZ 蜂鸣器输出,引脚 PA0 仍作为输入使用。 如果端口控制寄存器将引脚设定为输入功能,无论选择蜂鸣器配置选项中的哪一项,都将会忽 略配置选项的选择,这个引脚仍作为输入引脚使用。这样做,可以同时实现蜂鸣器输出和引脚输入 功能。引脚的实际功能可以通过应用程序中对相应端口控制寄存器的位写入不同的值而改变。 蜂鸣器输出引脚控制 注:上图所示为 PA0 和 PA1 引脚通过配置选项选择作为 BZ 和 BZ 蜂鸣器引脚输出。这两个引脚的端口控制 寄存器位必须设定为输出。PA1 上设定的数据不会影响蜂鸣器的输出。 Rev. 1.70 82 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 中断 中断是单片机一个重要功能。当外部事件或内部中断如定时/计数器或 A/D 转换有效,并且产 生中断时,系统会暂时中止当前的程序而转到执行相对应的中断服务程序。此单片机提供多个外部 _____ 中断和内部中断功能,外部中断由 INT0,INT1 和 PINT 引脚动作决定,而内部中断由定时/计数 器溢出,时基中断,RTC 中断,SPI/I2C 中断和 A/D 转换中断控制。 中断寄存器 所有中断允许和请求标志均由数据存储器内 INTC0,INTC1 和 MFIC/MFIC0/MFIC1 寄存器控 制。通过控制相应的中断允许位可以使能或禁止相关的中断。如果有中断发生,相应有中断请求标 志将被置位。总中断请求标志清零将禁止所有中断允许。 中断控制寄存器-INTC0 中断控制寄存器-INTC1 Rev. 1.70 83 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 中断控制寄存器-MFIC/MFIC0 中断控制寄存器-MFIC1 Rev. 1.70 84 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 中断有效边沿寄存器-INTEDGE 中断操作 如果相应的中断允许,定时/计数器溢出、时基、RTC 溢出、SPI/I2C 数据传输完成、A/D 转换 结束或者外部中断引脚触发都会通过设置相应的中断标志产生一个中断请求。当发生中断请求并且 相应的中断使能位置位,下条指令的地址将被压入堆栈。相应的中断向量地址加载至 PC 中。系统 将从此向量取下条指令。中断向量处通常为跳转指令,以跳转到相应的中断服务程序。中断服务程 序必须以 RETI 指令返回至主程序,以继续执行原来的程序。 各个中断使能位以及相应的请求标志位,以优先级的次序显示在下图。 一旦中断子程序被响应,系统将自动清除 EMI 位,所有其它的中断将被屏蔽,这个方式可以防 止任何进一步的中断嵌套。其它中断请求可能发生在此期间,虽然中断不会立即响应,但是中断请 求标志位会被记录。如果某个中断服务子程序正在执行时,有另一个中断要求立即响应,那么 EMI 位应在程序进入中断子程序后置位,以允许此中断嵌套。如果堆栈已满,即使此中断使能,中断请 求也不会被响应,直到 SP 减少为止。如果要求立刻动作,则堆栈必须避免成为储满状态。 Rev. 1.70 85 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 中断结构 中断优先级 中断发生在两个连续的 T2 脉冲上升沿之间,如果相应的中断请求被允许,中断将在后一个 T2 脉冲响应。下表指出在同时提出请求的情况下所提供的优先级。 中断源 外部中断 0 外部中断 1 定时/计数器 0 溢出中断 定时/计数器 1 溢出中断 SPI/I2C 总线中断 多功能中断 优先级 1 2 3 4 5 6 中断向量 04H 08H 0CH 10H 14H 18H A/D 转换中断,实时时钟中断,时基中断和外围中断是同一个中断向量 18H。每个中断都有自 己的中断标志位,但也有共同的中断标志 MFF。一旦多功能中断响应,MFF 标志位被硬件清为零, 然而单独的中断触发多功能中断后,需通过软件清零其中断请求标志。 Rev. 1.70 86 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 外部中断 要使能外部中断,总中断控制位 EMI、外部中断使能位 EEI0 和 EEI1 必须先被置位。此外,必 须使用 INTEDGE 寄存器使能外部中断功能并选择触发沿类型。当触发沿选择位设置好触发类型, INT0 和 INT1 引脚的状态发生变化,外部中断请求标志位 EIF0 或 EIF1 被置位时,将发生外部中断。 外部中断引脚和普通 I/O 口 PD4 和 PD5 共用,如果寄存器 INTC0 中相应的中断使能位被置位,此 引脚将被作为外部中断脚使用。此时该引脚必须通过设置控制寄存器 PDC.4 和 PDC.5,将该引脚 设置为输入口。当中断使能,堆栈未满并且外部中断脚状态改变,将调用位于地址 04H 或 08H 处的 外部中断向量子程序。当响应外部中断服务子程序时,中断请求标志位 EIF0 或者 EIF1 会自动复 位且 EMI 位会被清零以除能其它中断。注意,即使此引脚被用作外部中断输入,其配置选项中的 上拉电阻仍保持有效。 寄存器 INTEDGE 被用来选择有效的边沿类型,来触发外部中断。可以选择上升沿还是下降沿 或者双沿触发都产生外部中断。注意 INTEDGE 也可以用来除能外部中断功能。 外部中断引脚与内部滤波器连接,以减少由外部中断引脚上的噪声和干扰产生的无用的中断。 由于内部滤波电路会消耗一定的电量,可以通过配置选项关掉滤波功能。内部滤波电路会产生一定 的功耗,通过配置选项可关闭该滤波器,这在功耗要求严格的应用中十分有用,但其输入信号则为 原始信号。需要注意滤波器的开启/关闭配置选项,因为它不仅用于外部中断引脚,也应用于定时/ 计数器外部输入脚。单独的外部中断或定时/计数器引脚没有滤波器开启/关闭功能。 外部设备中断 外部设备中断和外部中断工作方式类似,属于多功能中断。 要使外部设备中断发生,总中断控制位 EMI,外部设备中断使能位 EPI 和多功能中断使能位 —————— EMFI 必须先被置位。当 P I N T 引脚出现一个下降沿跳变,此时外部中断请求标志位 PEF 被置位, 外部设备发生中断。外部设备中断引脚与其他引脚共用,可以通过配置选项设置为外部设备中断脚。 当中断使能,堆栈未满且外部设备中断脚出现一个下降沿跳变,单片机将调用位于多功能中断向量 18H 处的子程序。当响应外部设备中断服务子程序时,中断请求标志位 MFF 会被复位且 EMI 位会 被清零以除能其它中断。PEF 标志位不会自动复位,由应用程序清零。 定时/计数器中断 要使定时/计数器 0 或者定时/计数器 1 中断发生,总中断控制位 EMI 和相应的内部中断使能位 ET0I 或 ET1I 必须先被置位。当定时/计数器溢出,相应的中断请求标志位 T0F 或 T1F 将置位并 触发定时/计数器中断。中断使能,堆栈未满,当定时/计数器溢出发生中断时,将调用位于地址 0CH 或 10H 的子程序。当响应中断服务子程序时,中断请求标志位 T0F 或 T1F 会被自动复位且 EMI 位 会被清零以除能其它中断。 定时/计数器 0 和定时/计数器 1 有各自的中断向量,然而定时/计数器 2 和定时/计数器 3 的中断 向量包含在多功能中断中。要使定时/计数器 2 或定时/计数器 3 中断发生,总中断控制位 EMI,相应 Rev. 1.70 87 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 的内部中断使能位 ET2I 或 ET3I,多功能中断使能位 EMFI 必须先被置位。当定时/计数器 2 或定时/ 计数器 3 溢出时,相应的中断请求标志位 T2F 或 T3F 置位,将发生中断。中断使能,堆栈未满,当 定时/计数器 2 或定时/计数器 3 溢出时,将会调用位于地址 18H 处的子程序。当响应定时/计数器 2 或定时/计数器 3 的中断子程序时,多功能中断请求标志位 MFF 会被复位且 EMI 位会被清为 0 以除 能其它中断。T2F 和 T3F 标志位应在应用程序中清除因为它不会自动复位。 A/D 中断 A/D 中断包含在多功能中断中。 要使 A/D 转换中断发生,总中断控制位 EMI,A/D 中断使能位 EADI 和多功能中断使能位 EMFI 必须先被置位。当 A/D 转换结束,A/D 中断请求标志 ADF 被置位,将会发生 A/D 中断。当中断使 能,堆栈未满和 A/D 转换结束,将调用位于地址 18H 的多功能中断子程序。当响应 A/D 转换中断服 务子程序时,中断请求标志位 MFF 会被复位且 EMI 位会被清零以除能其它中断。由于 ADF 标志位 不能自动复位,由应用程序清零。 SPI/I2C 总线中断 要使 SPI/I2C 中断发生,总中断控制位 EMI 和相应的中断使能位 ESIM 必须先被置位。当 SPI/I2C 接口完成传送或接收一个字节数据或者 I2C 地址匹配,相应的 SPI/I2C 中断请求标志位 SIMF 被置位, 将会发生 SPI/I2C 中断。当中断使能,堆栈未满, SPI/I2C 接口完成传送或接收一个字节数据或者 I2C 地址匹配发生时,将调用位于地址 14H 的 SPI/I2C 中断子程序。当响应 SPI/I2C 中断服务子程序时, SIMF 会被自动复位且 EMI 位会被清零以除能其它中断。 多功能中断 这里提供了附加的中断,即多功能中断,与其他中断不同,它没有独立源,但由另外 4 个或 5 个现有的中断源构成,即 A/D 转换中断,时基中断,实时时钟中断,外部设备中断和定时/计数器 2 中断。 要使多功能中断发生,总中断控制位 EMI 和相应的中断使能位 EMFI 必须先被置位。当时基溢 出,实时时钟溢出,A/D 转换完成,外部设备中断或定时/计数器 2 中断,相应的中断标志位 MFF 被置位,将会发生多功能中断。当中断使能,堆栈未满,包括在多功能中断中的任意一个中断发生 时,将调用位于地址 18H 处的子程序。当响应中断服务子程序时,多功能请求标志位 MFF 会被复 位且 EMI 位会被清零以除能其它中断。但必须注意的是,来自多功能中断的源头的请求标志位,即 时基中断,实时时钟中断,A/D 转换中断,外部设备中断和定时/计数器 2 的请求标志位不会自动复 位,必须由应用程序清零。 实时时钟中断 实时时钟中断包含于多功能中断中。 要使实时时钟中断发生,总中断控制位 EMI,实时时钟使能位 ERTI 和多功能中断使能位 EMFI 必须先被置位。当实时时钟溢出,相应中断请求标志 RTF 被置位时,将会发生实时时钟中断。当中 断使能,堆栈未满,实时时钟溢出,将调用位于地址 18H 的中断子程序。当响应实时时钟中断时, 多功能请求标志位 MFF 会被复位且 EMI 位会被清零以除能其它中断。RTF 标志位不会自动复位, 必须由应用程序清零。 Rev. 1.70 88 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 RTC 中断 实时时钟控制寄存器-RTCC 和时基中断的中断相似,RTC 中断也可以提供一个固定周期的中断信号。RTC 中断时钟源由内 部时钟源 fS 产生。fS 输入时钟首先经过分频器,分频率可以通过设置 RTCC 寄存器相应的位来选择 以获取更长的 RTC 中断周期,其范围可以是 28/ fS~215/ fS。产生 fS 的时钟源,控制着实时时钟中断 周期,它由三种不同的振荡源产生:32768Hz 振荡器,32K_INT 或者 fsys/4,振荡源的选择由 fS 时 钟源的配置选项决定。 注意的是,RTC 中断周期由配置选项和一个内部 RTCC 寄存器共同控制。配置选项选择内部时 钟 fS 的时钟源,RTCC 寄存器的 RT2,RT1 和 RT0 位选择分频比。注意的是,实际的分频比能被编 程在 28~215。 时基中断 时基中断也包含在多功能中断中。 要使时基中断发生,总中断控制位 EMI,时基中断使能位 ETBI 和多功能中断使能位 EMFI 必 须先被置位。当时基溢出,相应的时基中断请求标志位 TBF 被置位,则会发生时基中断。当中断使 能,堆栈未满和时基溢出,将会调用位于地址 018H 处的多功能中断向量子程序。当响应时基中断 子程序,EMI 位会被清零以除能其它中断,但是只有 MFF 中断请求标志位会被复位。TBF 标志位 不会自动复位,必须通过应用程序来清零。 时基中断的目的是提供一个固定周期的中断信号,时钟源来自内部时钟源 fS。fS 输入时钟首先 经过分频器,分频率由配置选项选择以提供更长的时基中断周期。时基中断溢出范围是 212/ fS~215/ fS。 产生 fS 的时钟源,控制着时基中断周期,可源于三种不同的振荡源:32768Hz 振荡器,32K_INT 振 荡器和 fsys/4,振荡源的选择由 fS 时钟源的配置选项决定。 时基中断也可以作为可编程定时器,当时基溢出时,将置位时基中断标志,并通过多功能中断 向量产生中断请求。 Rev. 1.70 89 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 时基中断 编程注意事项 通过禁止中断使能位,可以屏蔽中断请求,然而,一旦中断请求标志位被设定,它们会被保留 在 INTC0、INTC1 和 MFIC 中断控制寄存器内,直到相应的中断服务子程序执行或请求标志位被软 件指令清除。 建议在中断服务子程序中不要使用“CALL 子程序”指令。中断通常发生在不可预料的情况或是 需要立刻执行的某些应用。假如只剩下一层堆栈且没有控制好中断,当“CALL 子程序”在中断服务 子程序中执行时,将破坏原来的控制序列。 所有中断在暂停模式下都具有唤醒功能。 当进入中断服务程序,系统仅将程序计数器的内容压入堆栈,如果中断服务程序会改变状态寄 存器或其他的寄存器的内容而破坏控制流程,应事先将这些数据保存起来。 Rev. 1.70 90 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 复位和初始化 复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无关的先置条件。 最重要的复位条件是在初次提供电源给单片机后,经短暂延迟,内部电路将使得单片机被定义在良 好的状态且准备执行第一条程序语句。上电复位之后,在程序未开始执行前,部分重要的内部寄存 器将会被预先设定状态。程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序存 储器地址开始执行程序。 除了上电复位外,即使单片机正在执行状态,有些情况的发生也迫使单片机必须加以复位。其 中一个例子是当提供电源给单片机以执行程序后, RES 引脚被强制拉至低电平。这个例子为正常操 作复位,单片机中只有一部分寄存器受影响,以便复位引脚回复至高电平后,单片机仍可以正常操 作。复位的另一种形式是看门狗定时器溢出而复位单片机,所有复位操作类型导致不同的寄存器条 件状态。 另外一种复位为低电压复位,即 LVR 复位,在电源提供电压低于某一临界值的情况下,一种和 RES 引脚复位类似的完全复位将会被执行。 复位功能 通过内部与外部事件触发复位,单片机共有五种复位方式: · 上电复位 这是最基本且不可避免的复位,发生在单片机上电后。除了保证程序存储器会从起始地址开始 执行,上电复位也使得其它寄存器被设定在预设条件,所有的输入/输出端口寄存器和输入/输出端口 控制寄存器在上电复位时会保持高电平,以确保上电后所有引脚被设为输入状态。 虽然单片机有一个内部 RC 复位功能,如果电源上升缓慢或刚上电时电源不稳定,内部 RC 振荡 可能会导致芯片复位不良,所以推荐使用和 RES 引脚连接的外部 RC 电路。由 RC 电路所造成的时间 延迟使得 RES 引脚在电源供应稳定前的一段延长周期内保持在低电平。在这段时间内,单片机的正 常操作是被禁止的。RES 引脚达到一定电压值后,再经过延迟时间 tRSTD,单片机开始进行正常操作。 下图中 SST 是系统延迟周期 System Start-up Timer 的缩写。 上电复位时序图 ———— ———— 多数应用场合中,可以在 VDD 和RES之间接入一个电阻,在 VSS 与RES之间接入一个电容作 ———— 为外部复位电路。任何和RES脚的连接线必须尽量短以减少噪声干扰。 Rev. 1.70 91 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 当系统在较强干扰的场合工作时,建议使用增强型的复位电路,如下图所示。 注:“” 表示建议加上此元件以加强静电保护。 “” 表示建议在电源有较强干扰场合加上此元件。 ———— 外部RES电路 欲知更多外部复位电路的相关信息可参考 HOLTEK 网站应用范例 HA0075S。 · RES 引脚复位 当单片机正常工作,RES 引脚通过外部硬件(如外部开关)强迫拉至低电平时,此种复位形式即会 发生。这种复位形式与其它复位一样,程序计数器会被清除为零且程序从头开始执行。 RES 引脚复位时序图 · 低电压复位 单片机具有低电压复位电路,用来监测它的电源电压,可通过配置选项进行选择。例如在更换 电池的情况下,单片机供应的电压可能会落在 0.9V~VLVR 的范围内,这时 LVR 将会自动复位单片机。 LVR 包含以下的规格:有效的 LVR 信号,即在 0.9V~VLVR 的低电压状态的时间,必须超过交流电气 特性中 tLVR 参数的值。如果低电压存在不超过 1ms,则 LVR 将会忽略它且不会执行复位功能。VLVR 参数值可通过配置选项进行设定。 低电压复位时序图 Rev. 1.70 92 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 · 正常操作时看门狗溢出复位 除了看门狗溢出标志位 TO 将被设为 1 之外,正常操作时看门狗溢出复位和 RES 复位相同。 正常操作时看门狗溢出复位时序图 · 暂停时看门狗溢出复位 暂停时看门狗溢出复位和其它种类的复位有些不同,除了程序计数器与堆栈指针将被清 0 及 TO 位被设为 1 外,绝大部分的条件保持不变。图中 tSST 的详细说明请参考交流电气特性。 暂停时看门狗溢出复位时序图 · 复位初始状态 不同的复位形式以不同的途径影响复位标志位。这些标志位,即 PDF 和 TO 位存放在状态寄存 器中,由暂停功能或看门狗计数器等控操作控制。复位标志位如下所示: TO 0 u 1 1 PDF 0 u u 1 复位条件 上电时的 RES 复位 正常运行时的 RES 或 LVR 复位 正常运行时的 WDT 溢出复位 暂停时的 WDT 溢出复位 注:“u”代表不改变 在单片机上电复位之后,各功能单元初始化的情形,列于下表。 项 目 程序计数器 中断 看门狗定时器 定时/计数器 预分频器 输入/输出口 堆栈指针 Rev. 1.70 复位后情况 清除为零 所有中断被禁止 WDT 清除并重新计数 定时/计数器停止 定时/计数器之预分频器内容清除 所有 I/O 设为输入模式 堆栈指针指向堆栈顶端 93 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 不同的复位形式以不同的途径影响单片机中的内部寄存器。为保证复位发生后程序正常执行, 了解单片机特定的复位后的情况是非常重要的。下表描述了不同复位影响单片机的内部寄存器。注 意,该单片机有不同的封装,对于大型封装可能存在差异。 WDT 溢出 (正常运行) WDT 溢出 (暂停模式) uuuu uuuu uuuu uuuu MP0 xxxx xxxx MP1 xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu BP -00- 0000 -00- 0000 -00- 0000 -uu- uuuu ACC xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu PCL 0000 0000 0000 0000 0000 0000 0000 0000 TBLP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu TBLH xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu RTCC --00 0111 --00 0111 --00 0111 --uu uuuu STATUS --00 xxxx --uu uuuu --lu uuuu --11 uuuu INTC0 0000 0000 0000 0000 0000 0000 uu uu uuuu TMR0 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0C 00-0 1000 00-0 1000 00-0 1000 uu-u uuuu TMR1H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1C 0000 1--- 0000 1--- 0000 1--- uuuu u--- TMR2 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR2C 00-0 1000 00-0 1000 00-0 1000 uu-u uuuu TMR3 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR3C 00-0 1000 00-0 1000 00-0 1000 uu-u uuuu PA 1111 1111 1111 1111 1111 1111 uuuu uuuu PAC 1111 1111 1111 1111 1111 1111 uuuu uuuu PB 1111 1111 1111 1111 1111 1111 uuuu uuuu PBC 1111 1111 1111 1111 1111 1111 uuuu uuuu PC 1111 1111 1111 1111 1111 1111 uuuu uuuu PCC 1111 1111 1111 1111 1111 1111 uuuu uuuu PD 1111 1111 1111 1111 1111 1111 uuuu uuuu PDC 1111 1111 1111 1111 1111 1111 uuuu uuuu PWM0L 0000 ---0 0000 ---0 0000 ---0 uuuu ---u PWM0H 0000 0000 0000 0000 0000 0000 uuuu uuuu PWM1L 0000 ---0 0000 ---0 0000 ---0 uuuu ---u PWM1H 0000 0000 0000 0000 0000 0000 uuuu uuuu INTC1 -000 --00 -000 --00 -000 --00 -uuu --uu PWM2L 0000 ---0 0000 ---0 0000 ---0 uuuu ---u PWM2H 0000 0000 0000 0000 0000 0000 uuuu uuuu PWM3L 0000 ---0 0000 ---0 0000 ---0 uuuu ---u PWM3H 0000 0000 0000 0000 0000 0000 uuuu uuuu xxxx ---- xxxx ---- xxxx ---- uuuu ---- ADRL Rev. 1.70 复位 (上电复位) RES (正常运行) uuuu uuuu 寄存器 94 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 复位 (上电复位) RES (正常运行) WDT 溢出 (正常运行) WDT 溢出 (暂停模式) ADRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu ADCR 0100 0000 0100 0000 0100 0000 uuuu uuuu ACSR 10-- -000 10-- -000 10-- -000 uu-- -uuu CLKMOD 0000 0x11 0000 0x11 0000 0x11 uuuu uuuu PAWU 0000 0000 0000 0000 0000 0000 uuuu uuuu PAPU 0000 0000 0000 0000 0000 0000 uuuu uuuu PBPU 0000 0000 0000 0000 0000 0000 uuuu uuuu PCPU 0000 0000 0000 0000 0000 0000 uuuu uuuu PDPU 0000 0000 0000 0000 0000 0000 uuuu uuuu INTEDGE ---- 0000 ---- 0000 ---- 0000 ---- uuuu LCDCTRL 0000 0000 0000 0000 0000 0000 uuuu uuuu LCDOUT1 ---- --00 ---- --00 ---- --00 ---- --uu LCDOUT2 0000 0000 0000 0000 0000 0000 uuuu uuuu LEDCTRL -000 0000 -000 0000 -000 0000 -uuu uuuu MISC 0000 1010 0000 1010 0000 1010 uuuu uuuu MFIC/MIFC0 0000 0000 0000 0000 0000 0000 uuuu uuuu MFIC1 --00 --00 --00 --00 --00 --00 --uu --uu SIMCTL0 1110 0000 1110 0000 1110 0000 uuuu uuuu SIMCTL1 1000 00-1 1000 00-1 1000 00-1 uuuu uu-u SIMDR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu SIMAR/SIMCTL2 0000 0000 0000 0000 0000 0000 uuuu uuuu 寄存器 注: “u”表示未变化。 “x”表示未确定。 “-”表示未使用。 Rev. 1.70 95 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 振荡器 不同的振荡器选择可以让使用者在不同的应用需求中获得更大范围的功能。有三种系统时钟可 供选择,看门狗定时器也有多种灵活的时钟源选项,给使用者最大的灵活性。所有的振荡器选项都 可通过配置选项来选择。 系统时钟配置 有三种方法产生系统时钟,两个高频振荡和一个外部时钟。两个高频振荡器为外部晶体/陶瓷振 荡器和外部 RC 电路。选择低频还是高频振荡器通过寄存器 CLKMOD 的 HLCLK 位来控制。根据配 置选项来选择高频的时钟源。低频振荡器的频率由寄存器 CLKMOD 的 SLOWC0~SLOWC2 位来决 定。 系统晶体/陶瓷振荡器 选择外部晶振配置选项之后,只要简单地将晶体连接至 OSC1 和 OSC2,就会产生震荡所需的 相移及反馈,而不需外部电容。然而对于某些晶振和频率,可能需要加上两个小电容以保证起振。 使用陶瓷谐振器通常需要小电容 C1,C2 以帮助起振,接法如下图。C1 和 C2 的大小则应根据制造 商的规格参数加于选择。大多数的应用场合中,电阻 RP1 并不需要,但在不使用 LVR 功能的场合中, 可能需要 RP1 以保证振荡器在 VDD 电压值小于工作范围内时停振。内部振荡器电路包含了滤波电路 以减少振荡器引脚上的噪声引起误动作的可能性。根据震荡频率的高(大于或等于 1MHz)低(小 于 1MHz)频,必须选择另外的配置选项,以配置单片机。 更多振荡器的应用信息可在 HOLTEK 网站找到。 晶体/陶瓷振荡器 晶体振荡器 C1 和 C2 值 晶体振荡器频率 C1 C2 12MHz 晶振 — — 8MHz 晶振 — — 4MHz 晶振 — — 1MHz 晶振 — — 10pF 10pF 455kHz 陶瓷共振器(注 2) 注: 1、C1 和 C2 数值仅作参考用 2、XTAL 模式配置选项:455kHz 3、RP1 的建议值为 5M~10MΩ 晶体振荡器电容推荐值 Rev. 1.70 96 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 外部 RC 振荡器 正确选择配置选项后,使用外部 RC 振荡器电路,需要在 OSC1 和 VDD 之间连接一个阻值在 47kΩ 到 1.5MΩ 之间的电阻,OSC1 与 VSS 之间连接一个 470pF 电容。虽然此振荡器配置成本较低, 但振荡频率会因 VDD、温度和芯片本身的制程而发生变化,因此不适合用于做计时严格或需要精确 振荡器频率的场合。对于外部电阻 ROSC 的阻值,请参考附录章节中典型 RC 振荡器对温度以及对 VDD 特性图。 RC 振荡器 应注意的是系统频率由内部电容和外部电阻 ROSC 共同决定,图中显示的外部电容并不会影响振 荡器的频率值。当应用电路用到开漏输出脚 OSC2 时,附加的外部电容可增强振荡器的稳定性。内 部振荡器电路包含了滤波电路去减少振荡器引脚上噪声引起误动作的可能性。 内部 32K_INT 振荡器 当单片机进入暂停模式时,正常情况下会关闭内部时钟,以停止单片机的运行并达到省电的目 的。但是,在很多应用场合中,单片机可能需要保持某些内部功能的运作,如暂停模式下仍需要保 持定时器功能。在这种情况下,单片机使用 32K_INT 振荡器。这种单片机有一个完全集成的能自由 运作的 32K_INT 振荡器,它在 5V 电压下运行的典型周期值为 31.2μs 并且不需要有外部元件。可通 过配置选项设置。当单片机进入暂停模式时,系统时钟将停止运行,但 32K_INT 振荡器仍可以继续 运行以保证某些内部功能的继续运作。 内部 32K_INT 振荡器 外部 32768Hz 振荡器 单片机还具有与内部 32K_INT 振荡器相似功能的外部 32768Hz 振荡器,也是用来在单片机处 于暂停模式时保证单片机的部分功能能够正常运行。即使单片机处于暂停模式下,此振荡器也一直 处于工作状态。时钟频率固定为 32768Hz,此时 OSC3 和 OSC4 引脚必须连接 32768Hz 晶体振荡器。 并不需要外部电阻和电容连接到 32768Hz 晶振以帮助起振。对于那些要求精确频率的场合中,可能 需要这些元件来对由制程产生的误差提供频率补偿。 Rev. 1.70 97 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 外部 32768Hz 振荡器 32768Hz 振荡器 C3 和 C4 值 晶体频率 C3 C4 32768Hz 8pF 10pF 注: 1、C3 和 C4 数值仅作参考用 2、RP2 的建议值为 5M~10MΩ 32768Hz 振荡器电容推荐值 配置选项可选择外部 32768Hz 振荡器或者内部 32K_INT 振荡器。 系统上电期间,32768Hz 振荡器启动会有一定的延时。RTCC 寄存器中 QOSC 位有快速起振功 能,进而缩短延迟时间。系统上电时会清零 QOSC 位以获得快速启动 32768Hz 振荡器。为了降低功 耗,建议系统上电 2 秒后,在应用程序中将 QOSC 位设为 1。应注意的是,无论 QOSC 位是什么值, 32768Hz 振荡器会一直运作,不同的只是在快速启动时的功耗更大而已。 外部振荡器 单片机的系统时钟也可来源于外部时钟,这样就给用户提供了一种将外部硬件和单片机同步运 行的选择。通过配置选项选择,将外部时钟源接至 OSC1 引脚即可。如果使用的是外部振荡器提供 的时钟源,则 OSC2 引脚应处于浮空状态。内部振荡电路中有一个滤波电路,它用于减少振荡器引 脚的噪声引起单片机误动作的可能性,然而这个滤波电路有一定的功耗,可以通过振荡器配置选项 来关闭这个滤波器。在功耗要求严格,高集成度的外部时钟源和外部低阻抗时钟源的应用中,不使 用内部滤波器。 Rev. 1.70 98 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 系统工作模式 该系列单片机有多种工作模式。系统有以下几种工作模式:正常模式、低速模式,空闲模式和 休眠模式,使单片机可以在多种高或低的频率中运行。而且,单片机能够在不同的频率和工作模式 中进行动态切换。由于单片机的这些功能特性,使得用户可以根据各自的应用特性需求获得最佳的 性能。 时钟源 该单片机的系统时钟为双时钟模式,一个为高频振荡器,另一个为高频分频时钟。高频振荡器 和低频时钟都是系统时钟源,可以通过 CLKMOD 寄存器的 HLCLK 位来动态选择。 高频振荡器时钟源 fM,可通过配置选项设定为外部晶体/陶瓷振荡器、外部 RC 振荡器或者外部 时钟源。 可以通过设置 CLKMOD 寄存器中的 SLOWC0~SLOWC2 位由低频振荡器时钟源来获得 fSLOW。 另一个次时钟源 fSUB,是一个 32kHz 的时钟源,通过配置选项选择 32K_INT 振荡器或者外部 32768Hz 晶振。fSUB 和 fSYS/4 用于某些内部功能的时钟源,如:LCD 驱动,看门狗时钟,蜂鸣器, RTC 中断和时基中断。LCD 时钟源是 fSUB 的 8 分频,即 4kHz 的频率。fS 时钟源可由配置选项设定 选择为 fSUB 或 fsys/4。 工作模式 时钟源的配置选项选定后,通过设置 CLKMOD 寄存器以确定选定时钟源的工作模式。 CLKMOD 寄存器的 HLCLK、IDLEN 位和 HALT 指令共同决定单片机运行的模式。该单片机可以在 以下几种模式下运行。 · 正常模式:fM 开启,fSLOW 开启,fSYS= fM,CPU 开启,fS 开启,fLCD 开启/关闭(由 LCDEN 位 决定),fWDT 开启/关闭(由配置选项和 WDT 控制寄存器决定) 。 · 慢速模式:fM 开启,fSLOW=fM/2~fM/64,fSYS=fSLOW,CPU 开启,fS 开启,fLCD 开启/关闭(由 LCDEN 位决定),fWDT 开启/关闭(由配置选项和 WDT 控制寄存器决定) 。应注意 fSLOW 应大于 100kHz。 · 空闲模式:fM,fSLOW,fSYS 关闭,CPU 关闭,fSUB 开启,fS 开启/关闭(根据 fSUB 或 fSYS /4) ,fLCD 开启或关闭(由 LCDEN 位决定),fWDT 开启/关闭(由配置选项和 WDT 控制寄存器决定)。 · 休眠模式:fM,fSLOW,fSYS,fS,fLCD 关闭,CPU 关闭,fSUB,fWDT 开启/关闭(由配置选项和 WDT 控制寄存器决定)。 Rev. 1.70 99 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 时钟控制寄存器 - CLKMOD 双重时钟模式 Rev. 1.70 100 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 双重时钟模式结构 Rev. 1.70 101 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 暂停模式和唤醒 暂停模式 HOLTEK 的单片机都能进入暂停模式。进入暂停模式后,单片机的工作电流会降至很低的水平。 单片机进入暂停模式时,会关闭系统振荡器,将功耗降到很低的水平。然而,由于单片机仍保持它 当前的内部状态,用户依然可以唤醒单片机并继续使之运行而不需要通过完全复位来完成。在要求 功耗小且持续保持稳定的应用中,如电池的应用,这种功能是极其重要的。 进入暂停模式 只有在应用程序中执行“HALT”指令,单片机才可以进入暂停模式。执行这条指令之后,会有 以下情形发生: · 系统振荡器停止运作,且应用程序停止在“HALT”指令处。 · 数据存储器内容和寄存器内容保持当前值。 · 如果 WDT 时钟源来自 WDT 振荡器,则 WDT 将被清零并重新计数;如果 WDT 时钟源来自系 统时钟,则 WDT 停止计数。 · 输入/输出端口保持当前状态。 · 置位状态寄存器中的暂停标志位-PDF,并清零看门狗溢出标志位-TO。 Rev. 1.70 102 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 静态电流的注意事项 要使系统静态电流降到最小,为微安级,除了需要单片机进入暂停模式,还要考虑到电路的设 计。应该特别注意的是单片机的输入/输出口的状态。所有高阻抗输入脚都必须连接到固定的高或低 电平,因为引脚浮空会造成内部振荡并导致耗电增加。这也应用于有不同封装的单片机,因为它们 可能含有未引出的引脚,这些引脚也必须设为输出或者带有上拉电阻的输入。另外还需注意单片机 设为输出的 I/O 引脚上的负载。应将它们设置在有最小拉电流的状态或者将它们和其他的 CMOS 输 入一样接到没有拉电流的外部电路上。还应注意的是,如果使能配置选项中的看门狗定时器内部振 荡器,会导致耗电增加。 唤醒 系统进入 HALT 模式之后,可以通过以下几种方式唤醒: · 外部复位 · PA 口下降沿 · 系统中断 · WDT 溢出 若由外部 RES 引脚唤醒,系统会经过完全复位的过程;若由 WDT 溢出唤醒,则会发生看门狗 定时器复位。这两种唤醒方式都会使系统复位,可以通过状态寄存器中 TO 和 PDF 位来判断它的唤 醒源。系统上电或执行清除看门狗的指令,会清零 PDF;执行 HALT 指令,PDF 将被置位。看门狗 计数器溢出将会置位 TO 标志并唤醒系统,这种复位会重置程序计数器和堆栈指针,其它标志保持 原有状态。 PA 口中的每个引脚都可以通过配置选项使能下降沿唤醒功能。PA 端口唤醒后,程序将在 “HALT”指令后继续执行。 如果系统是通过中断唤醒,则有两种可能发生。第一种情况是:相关中断除能或者是堆栈已满, 则程序会在“HALT”指令之后继续执行。这种情况下,唤醒系统的中断会等到相关中断使能或有堆 栈层可以使用之后才执行。第二种情况是:相关中断使能且堆栈未满,则中断可以马上执行。 如果 在进入暂停模式之前中断标志位已经被设置为“1”,则相关中断的唤醒功能将无效。 不管是哪一种唤醒,一旦有唤醒事件发生,单片机恢复正常运行将需要 1024 个系统时钟周期。 然而,如果是由中断唤醒系统,则实际的中断子程序执行将延迟一个或数个周期;如果唤醒后接着 去执行 HALT 指令的下一条指令,则它在 1024 个系统周期结束后立刻执行。 Rev. 1.70 103 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 低电压检测-LVD 内部低电压检测功能提供给使用者一种监测电压是否低于直流特性规定的特定电压值的方法。 LVD 工作 要使 LVD 工作,则先应使能配置选项,然后通过寄存器 RTCC 中的第 3 位和第 5 位来控制 LVD 的工作方式。寄存器 RTCC 的第 3 位,LVDC,是 LVD 的使能/除能位,为低时,LVD 功能关闭。寄 存器 RTCC 的第 5 位,LVDO 是 LVD 的检测输出位。正常工作时,如果电源电压高于 DC 特性中规 定的电压 VLVD 时,LVDO 位为低。如果电源电压低于 VLVD 则 LVDO 位将为高,说明单片机处于 低压状态。注意 LVDO 位为只读位。通过检测 RTCC 寄存器的 LVDO 位状态,程序可以检测到目前 的电压状态。 上电或复位之后,寄存器 RTCC 位的 LVDC 位将清 0 以关闭 LVD。注意如果 LVD 使能,LVD 的内部线路会有耗电,可以将 LVDC 位清 0,以减少耗电。应注意的是,不要搞混 LVD 和 LVR 的 功能。LVR 功能,单片机会产生自动复位功能。而 LVD 功能,有影响的只是 LVDO 位而不会影响 其它单片机功能。 通过配置选项可以选择激活 LVD 的不同电压值。 Rev. 1.70 104 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 看门狗定时器 看门狗定时器的功能在于防止单片机由于诸如电噪声等外部不可控制事件造成的程序误动作或 跳转到未知的地址。当 WDT 溢出时,芯片复位。 看门狗定时器工作 WDT 定时器时钟源来自于内部时钟 fS,而 fS 的时钟源又是通过配置选项从 fSUB 和 fSYS/4 中选择。 注意的是,假如除能 WDT 配置选项,则任何和 WDT 有关的指令将无效。 在此单片机中,多数看门狗定时器的选项,如使能/除能、WDT 时钟源和清除看门狗指令类型 都是通过配置选项来选择。除了通过配置选项来使能 WDT,还可以通过 MISC 寄存器的四个 位:WDTEN3~WDTEN0 来使能 WDT。必须注意的是,这些位必须设置为 1010 才能除能看门狗定 时器。任何其他的值都会使能看门狗定时器。上电之后这些位的值为 1010,用以除能看门狗定时器。 看门狗定时器软件控制 - MISC WDT 定时器的时钟源是 fSUB,fSUB 的时钟源又是来源于 32K_INT 振荡器或 32768Hz 振荡器。 在 5V 电压下,32K_INT 内部振荡器周期大约为 31.2μS。但是实际内部时钟周期是会随 VDD 的温度 和制程差而变化。32768Hz 振荡器由外部的 32768Hz 晶振提供。另一个看门狗定时器的时钟源是 fSYS/4。无论看门狗定时器时钟源为内部 32K_INT,32768Hz 振荡器还是 fSYS/4,均可通过配置选项选 择 213~216 分频来得到特定的 WDT 溢出时间。当选择 216 分频,有最大溢出周期。溢出时间可能随 VDD, 温度和制程差变化。由于清除指令只会复位分频器的后部,所以实际的分频率和 WDT 溢出时间因两 个因数的不同而变化。实际的分频值取决于未执行清除指令之前的看门狗定时器计数值。 如果看门狗定时器的时钟源选择 fSYS/4,则当系统进入低功耗模式时,指令时钟停止并且看门狗 定时器会失去其保护作用。当系统在噪声环境中运行时,建议选择 32K_INT 的 RC 振荡器。 看门狗定时器 Rev. 1.70 105 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 正常工作模式下,WDT 溢出将导致芯片复位,并置位状态标志位 TO。然而如果系统处于暂停 模式,当 WDT 定时计数器溢出时,会置位状态寄存器中的 TO,并且只是复位程序计数器和堆栈指针。 有三种方法可以用来清除 WDT 的内容。第一种是外部硬件复位( RES 引脚拉至低电平),第二种是通 过软件指令,而第三种是通过“HALT”指令。 清除看门狗定时器内容 通过软件指令有两种方法清除看门狗寄存器,其中一种必须由配置选项选择。第一种选择是使 用单一“CLR WDT”指令,而第二种是使用“CLR WDT1”和“CLR WDT2”两个指令。对于第一 种选择,只要执行“CLR WDT”便可清除 WDT。而第二种选择,“CLR WDT1”和“CLR WDT2” 两者必须交替执行才能成功的清除 WDT。关于第二种选择要注意的是,如果使用“CLR WDT1”来 清除 WDT,再次执行这条指令将是无效的,只有执行“CLR WDT2”指令才能清除 WDT。同样的 “CLR WDT2”指令已经执行后,只有接着执行“CLR WDT1”指令才可以清除看门狗定时器。 Rev. 1.70 106 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 配置选项 单片机的配置选项可在烧录程序时一起烧录进芯片。在开发过程中,我们可以借助 HT-IDE 软 件开发工具选择配置选项。这些选项可通过硬件烧录工具烧录到芯片中,程序一旦烧录到芯片后就 不能通过软件修改。必须根据系统功能要求选择所有的配置选项,详见下表所示。 序号 选择 振荡器选择 1 高速振荡器类型选择—fM 1.外部晶体振荡器 2.外部 RC 振荡器 3.外部时钟-内部滤波器开 4.外部时钟-内部滤波器关 2 fSUB 时钟选择: 1.外部 32768Hz 振荡器 2.内部 32K_INT 振荡器 3 fS 时钟选择:fSUB 或 fSYS/4 4 XTAL 模式选择:455kHz 或 1M~12MHz 5 32768Hz 晶振:使能或除能 PFD 选择 6 PA3:普通 I/O 或 PFD 输出 7 PFD 时钟选择:定时器/计数器 0 或定时器/计数器 1 蜂鸣器选择 ——— 8 PA0/PA1:普通 I/O 或 BZ/BZ 或 PA0=BZ 和 PA1 为普通的 I/O 9 蜂鸣器频率:fS/22,fS/23 ,fS/24,fS/25,fS/26,fS/27,fS/28,fS/29 时基选择 10 时基溢出周期:212/fs,213/fs,214/fs,215/fs。 LCD 选择 11 LCD 类型:R 或 C-仅 HT56R67 有 看门狗选择 12 看门狗定时器功能:使能或除能 13 清看门狗指令:1 或 2 个指令 14 看门狗周期:212/fs~213/fs, 213/fs~214/fs, 214/fs~215/fs,215/fs~216/fs。 LVD/LVR 选择 15 LVD 功能:使能或除能 16 LVR 功能:使能或除能 17 LVR/LVD 电压:2.1V/2.2V 或 3.15V/3.3V 或 4.2V/4.4V 18 SIM 引脚使能或除能. 19 SPI_WCOL:使能或除能 20 SPI_CSEN:使能或除能(1/0)CSEN 软件功能。 SPI Rev. 1.70 107 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 序号 选择 2 IC 21 I2C 去抖动时间:无,1 个系统时钟,2 个系统时钟 PINTB 功能 22 外部设备中断或段选功能 定时/或计数器和外部中断功能引脚的滤波器功能 23 中断和定时/计数器输入引脚内部滤波器开关控制-适用于所有引脚。 锁定选择 Rev. 1.70 24 全部锁定 25 部分锁定 108 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 应用电路 HT56R67 的应用电路 Rev. 1.70 109 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 的应用电路 Rev. 1.70 110 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 指令集 简介 任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如 何去执行指定的工作。在 HOLTEK 单片机中,提供了丰富且灵活的指令,共超过六十条,程序设计 者可以事半功倍地实现他们的应用。 为了更加容易理解各种各样的指令码,接下来按功能分组介绍它们。 指令周期 大部分的操作均只需要一个指令周期来执行。分支、调用或查表则需要两个指令周期。一个指 令周期相当于四个系统时钟周期,因此如果在 8MHz 的系统时钟振荡器下,大部分的操作将在 0.5s 中执行完成,而分支或调用操作则将在 1s 中执行完成。虽然需要两个指令周期的指令通常指的是 JMP、CALL、RET、RETI 和查表指令,但如果牵涉到程序计数器低字节寄存器 PCL 也将多花费一 个周期去加以执行。即指令改变 PCL 的内容进而导致直接跳转至新地址时,需要多一个周期去执行, 例如“CLR PCL”或“MOV PCL, A”指令。对于跳转指令必须注意的是,如果比较的结果牵涉到 跳转动作将多花费一个周期,如果没有则需一个周期即可。 数据的传送 单片机程序中数据传送是使用最为频繁的操作之一,使用三种 MOV 的指令,数据不但可以从 寄存器转移至累加器(反之亦然),而且能够直接移动立即数到累加器。数据传送最重要的应用之一是 从输入端口接收数据或者传送数据到输出端口。 算术运算 算术运算和数据处理是大部分单片机应用所必需具备的能力,在盛群单片机内部的指令集中, 可直接实现加与减的运算。当加法的结果超出 255 或减法的结果少于 0 时,要注意正确的处理进位 和借位的问题。INC、INCA、DEC 和 DECA 指令提供了对一个指定地址的值加一或减一的功能。 逻辑和移位运算 标准逻辑运算例如 AND、OR、XOR 和 CPL 全都包含在盛群单片机内部的指令集中。大多数 牵涉到数据运算的指令,数据的传送必须通过累加器。在所有逻辑数据运算中,如果运算结果为零, 则零标志位将被置位,另外逻辑数据运用形式还有移位指令,例如 RR、RL、RRC 和 RLC 提供了向 左或向右移动一位的方法。不同的移位指令可满足不同的应用需要。移位指令常用于串行端口的程 序应用,数据可从内部寄存器转移至进位标志位,而此位则可被检验,移位运算还可应用在乘法与 除法的运算组成中。 分支和控制转换 程序分支是采取使用 JMP 指令跳转至指定地址或使用 CALL 指令调用子程序的形式,两者之不 同在于当子程序被执行完毕后,程序必须马上返回原来的地址。这个动作是由放置在子程序里的返 回指令 RET 来实现,它可使程序跳回 CALL 指令之后的地址。在 JMP 指令中,程序则只是跳到一 个指定的地址而已,并不需如 CALL 指令般跳回。一个非常有用的分支指令是条件跳转,跳转条件 是由数据存储器或指定位来加以决定。遵循跳转条件,程序将继续执行下一条指令或略过且跳转至 接下来的指令。这些分支指令是程序走向的关键,跳转条件可能是外部开关输入,或者是内部数据 位的值。 Rev. 1.70 111 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 位运算 提供数据存储器中单个位的运算指令是盛群单片机的特性之一。这特性对于输出端口位的设置 尤其有用,其中个别的位或端口的引脚可以使用“SET [m].i”或“CLR [m].i”指令来设定其为高位 或低位。如果没有这特性,程序设计师必须先读入输出口的 8 位数据,处理这些数据,然后再输出 正确的新数据。这种读入-修改-写出的过程现在则被位运算指令所取代。 查表运算 数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存 储器的不便。为了改善此问题,盛群单片机允许在程序存储器中建立一个表格作为数据可直接存储 的区域,只需要一组简易的指令即可对数据进行查表。 其它运算 除了上述功能指令外,其它指令还包括用于省电的“HALT”指令和使程序在极端电压或电磁环 境下仍能正常工作的看门狗定时器控制指令。这些指令的使用则请查阅相关的章节。 Rev. 1.70 112 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 指令集概要 下表中说明了按功能分类的指令集,用户可以将该表作为基本的指令参考。 惯例 x:立即数 A:累加器 m:数据存储器地址 i:第 0~7 位 助记符 addr:程序存储器地址 说明 指令 周期 影响标志位 算术运算 ADD A,[m] ACC 与数据存储器相加,结果放入 ACC 1 ADDM A,[m] ACC 与数据存储器相加,结果放入数据存储器 1 ADD A, x ACC 与立即数相加,结果放入 ACC 1 ADC A,[m] ACC 与数据存储器、进位标志相加,结果放入 ACC 1 ADCM A,[m] ACC 与数据存储器、进位标志相加,结果放入数据存储器 1 SUB A, x ACC 与立即数相减,结果放入 ACC 1 SUB A,[m] ACC 与数据存储器相减,结果放入 ACC 1 SUBM A,[m] ACC 与数据存储器相减,结果放入数据存储器 1 SBC A,[m] ACC 与数据存储器、进位标志的反相减,结果放入 ACC 1 SBCM A,[m] ACC 与数据存储器、进位标志相减,结果放入数据存储器 DAA [m] 将加法运算中放入 ACC 的值调整为十进制数,并将结果放入数 据存储器 1 Z,C,AC,OV 注 Z,C,AC,OV Z,C,AC,OV Z,C,AC,OV 注 Z,C,AC,OV Z,C,AC,OV Z,C,AC,OV 注 Z,C,AC,OV Z,C,AC,OV 注 Z,C,AC,OV 1注 C 逻辑运算 A,[m] ACC 与数据存储器做“与”运算,结果放入 ACC 1 Z OR A,[m] ACC 与数据存储器做“或”运算,结果放入 ACC 1 Z XOR A,[m] ACC 与数据存储器做“异或”运算,结果放入 ACC 1 AND ANDM ORM A,[m] A,[m] ACC 与数据存储器做“与”运算,结果放入数据存储器 ACC 与数据存储器做“或”运算,结果放入数据存储器 Z 1 注 Z 1 注 Z 注 Z XORM A,[m] ACC 与数据存储器做“异或”运算,结果放入数据存储器 1 AND A, x ACC 与立即数做“与”运算,结果放入 ACC 1 Z OR A, x ACC 与立即数做“或”运算,结果放入 ACC 1 Z XOR A, x ACC 与立即数做“异或”运算,结果放入 ACC 1 CPL [m] 对数据存储器取反,结果放入数据存储器 1 CPLA [m] 对数据存储器取反,结果放入 ACC 1 [m] 递增数据存储器,结果放入 ACC 1 Z 注 Z Z 递增和递减 INCA INC [m] 递增数据存储器,结果放入数据存储器 1 DECA [m] 递减数据存储器,结果放入 ACC 1 DEC [m] 递减数据存储器,结果放入数据存储器 1 数据存储器右移一位,结果放入 ACC 1 Z 注 Z Z 注 Z 移位 RRA RR Rev. 1.70 [m] [m] 数据存储器右移一位,结果放入数据存储器 113 1 无 注 无 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 助记符 RRCA [m] 说明 指令 周期 带进位将数据存储器右移一位,结果放入 ACC 1 [m] 带进位将数据存储器右移一位,结果放入数据存储器 1 RLA [m] 数据存储器左移一位,结果放入 ACC 1 C 无 注 [m] 数据存储器左移一位,结果放入数据存储器 1 RLCA [m] 带进位将数据存储器左移一位,结果放入 ACC 1 RLC [m] 带进位将数据存储器左移一位,结果放入数据存储器 1 A,[m] 将数据存储器送至 ACC 1 RL C 注 RRC 影响标志位 无 C 注 C 数据传送 MOV MOV [m],A MOV A, x 无 注 将 ACC 送至数据存储器 1 将立即数送至 ACC 1 无 清除数据存储器的位 1注 无 位运算 CLR SET [m].i [m].i 置位数据存储器的位 addr 无条件跳转 1 注 无 无 转移 JMP SZ [m] 无 2 如果数据存储器为零,则跳过下一条指令 1 注 无 注 无 SZA [m] 数据存储器送至 ACC,如果内容为零,则跳过下一条指令 1 SZ [m].i 如果数据存储器的第 i 位为零,则跳过下一条指令 1注 无 1 注 无 1 注 无 1 注 无 1注 无 1注 无 子程序调用 2 无 从子程序返回 2 无 从子程序返回,并将立即数放入 ACC 2 无 从中断返回 2 无 读取当前页的 ROM 内容,并送至数据存储器和 TBLH 2注 无 读取最后页的 ROM 内容,并送至数据存储器和 TBLH 2 注 无 1 注 置位数据存储器 1 注 清除看门狗定时器 1 SNZ SIZ [m].i [m] 如果数据存储器的第 i 位不为零,则跳过下一条指令 递增数据存储器,如果结果为零,则跳过下一条指令 SDZ [m] 递减数据存储器,如果结果为零,则跳过下一条指令 SIZA [m] 递增数据存储器,将结果放入 ACC,如果结果为零,则跳过下 一条指令 SDZA [m] 递减数据存储器,将结果放入 ACC,如果结果为零,则跳过下 一条指令 CALL addr RET RET A, x RETI 查表 TABRDC TABRDL [m] [m] 其它指令 空指令 NOP CLR [m] SET [m] CLR WDT Rev. 1.70 无 1 清除数据存储器 114 无 无 TO,PDF 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 助记符 说明 指令 周期 CLR WDT1 预清除看门狗定时器 1 CLR WDT2 预清除看门狗定时器 1 影响标志位 TO,PDF TO,PDF SWAP [m] 交换数据存储器的高低字节,结果放入数据存储器 1 SWAPA [m] 交换数据存储器的高低字节,结果放入 ACC 1 无 进入暂停模式 1 TO,PDF HALT 注 无 注: 1、对跳转指令而言,如果比较的结果牵涉到跳转即需 2 个周期,如果没有发生跳转,则只需一个周期。 2、任何指令若要改变 PCL 的内容将需要 2 个周期来执行。 3、对于“CLR WDT1”或“CLR WDT2”指令而言,TO 和 PDF 标志位也许会受执行结果影响, “CLR WDT1” 和“CLR WDT2”被连续地执行后,TO 和 PDF 标志位会被清除,否则 TO 和 PDF 标志位保持不变。 指令定义 ADC A, [m] 说明: 运算过程: 影响标志位: Add data memory and carry to the accumulator 将指定的数据存储器、累加器内容以及进位标志相加,结果存放到累加器。 ACCACC+[m]+C OV、Z、AC、C ADCM 说明: 运算过程: 影响标志位: Add the accumulator and carry to the accumulator 将指定的数据存储器、累加器内容和进位标志位相加,结果存放到指定的数据 存储器。 [m]ACC+[m]+C OV、Z、AC、C ADD A, [m] 说明: 运算过程: 影响标志位: Add data memory to the accumulator 将指定的数据存储器和累加器内容相加,结果存放到累加器。 ACCACC+[m] OV、Z、AC、C ADD A, x 说明: 运算过程: 影响标志位: Add immediate data to the accumulator 将累加器和立即数相加,结果存放到累加器。 ACCACC+x OV、Z、AC、C ADDM A, [m] 说明: 运算过程: 影响标志位: Add the accumulator to the data memory 将指定的数据存储器和累加器内容相加,结果存放到指定的数据存储器。 [m]ACC+[m] OV、Z、AC、C AND A, [m] 说明: 运算过程: 影响标志位: Logical AND accumulator with data memory 将累加器中的数据和指定数据存储器内容做逻辑与,结果存放到累加器。 ACCACC “AND” [m] Z Rev. 1.70 A, [m] 115 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 AND A, x Logical AND immediate data to the accumulator 说明: 运算过程: 影响标志位: 将累加器中的数据和立即数做逻辑与,结果存放到累加器。 ACCACC “AND” x Z ANDM A, [m] 说明: 运算过程: 影响标志位: Logical AND data memory with the accumulator 将指定数据存储器内容和累加器中的数据做逻辑与,结果存放到数据存储器。 [m]ACC “AND” [m] Z CALL 说明: Subroutine call 无条件的调用指定地址的子程序,此时程序计数器先加 1 获得下一个要执行的 指令地址并压入堆栈,接着载入指定地址并从新地址执行程序。由于指令需要 额外的运算,所以此指令为 2 个周期。 StackProgram Counter+1 Program Counter addr 无 addr 运算过程: 影响标志位: CLR [m] 说明: 运算过程: 影响标志位: 无 Clear data memory 将指定数据存储器的内容清零。 [m] 00H CLR [m] .i 说明: 运算过程: 影响标志位: Clear bit of data memory 将指定数据存储器的 i 位内容清零。 [m].i 0 无 CLR WDT 说明: 运算过程: Clear Watchdog Timer WDT 计数器、暂停标志位 PDF 和看门狗溢出标志位 TO 清零。 WDT 00H PDF & TO 0 TO、PDF 影响标志位: CLR 说明: WDT1 影响标志位: Preclear Watchdog Timer PDF 和 TO 标志位都被清 0。必须配合 CLR WDT2 一起使用清除 WDT 计时器。 当程序仅执行 CLR WDT1,而没有执行 CLR WDT2 时,PDF 与 TO 保留原状 态不变。 WDT 00H PDF & TO 0 TO、PDF CLR 说明: Preclear Watchdog Timer PDF 和 TO 标志位都被清 0。必须配合 CLR WDT1 一起使用清除 WDT 计时器。 运算过程: Rev. 1.70 WDT2 116 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 影响标志位: 当程序仅执行 CLR WDT2,而没有执行 CLR WDT1 时,PDF 与 TO 保留原状态 不变。 WDT 00H PDF & TO 0 TO、PDF CPL 说明: Complement data memory 将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1。 运算过程: [m] 运算过程: 影响标志位: [m] [ m ] Z CPLA 说明: Complement data memory 将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1,结果被 存放回累加器且数据寄存器的内容保持不变。 [m] 运算过程: 影响标志位: ACC [ m ] Z DAA 说明: 影响标志位: Decimal-Adjust accumulator for addition 将累加器中的内容转换为 BCD(二进制转成十进制)码。如果低四位的值大于 “9”或 AC=1,那么 BCD 调整就执行对原值加“6”,否则原值保持不变;如 果高四位的值大于“9”或 C=1,那么 BCD 调整就执行对原值加“6” 。BCD 转 换实质上是根据累加器和标志位执行 00H,06H,60H 或 66H 的加法运算,结 果存放到数据存储器。只有进位标志位 C 受影响,用来指示原始 BCD 的和是 否大于 100,并可以进行双 精度十进制数的加法运算。 [m] ACC+00H 或 [m] ACC+06H [m] ACC+60H 或 [m] ACC+66H C DEC [m] 说明: 运算过程: 影响标志位: Decrement data memory 将指定数据存储器的内容减 1。 [m] [m]-1 Z DECA 说明: Decrement data memory and place result in the accumulator 将指定数据存储器的内容减 1,把结果存放回累加器并保持指定数据存储器的 内容不变。 ACC [m]-1 Z Enter power down mode 此指令终止程序执行并关掉系统时钟,RAM 和寄存器的内容保持原状态,WDT 计数器和分频器被清“0”,暂停标志位 PDF 被置位 1,WDT 溢出标志位 TO 被 清 0。 TO 0 [m] 操作: [m] 运算过程: 影响标志位: HALT 说明: 运算过程: Rev. 1.70 117 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 影响标志位: INC [m] 说明: 运算过程: 影响标志位: INCA 说明: [m] 运算过程: 影响标志位: JMP 说明: Increment data memory and place result in the accumulator 将指定数据存储器的内容加 1,结果存放回累加器并保持指定的数据存储器内 容不变。 ACC [m]+1 Z 运算过程: 影响标志位: Directly jump 程序计数器的内容无条件地由被指定的地址取代,程序由新的地址继续执行。 当新的地 址被加载时,必须插入一个空指令周期,所以此指令为 2 个周期的 指令。 PC addr 无 MOV A, [m] 说明: 运算过程: 影响标志位: Move data memory to the accumulator 将指定数据存储器的内容复制到累加器。 ACC [m] 无 MOV A, x 说明: 运算过程: 影响标志位: Move immediate data to the accumulator 将 8 位立即数载入累加器。 ACC x 无 MOV [m], A 说明: 运算过程: 影响标志位: NOP 说明: 运算过程: 影响标志位: Move the accumulator data to memory 将累加器的内容复制到指定的数据存储器。 [m] ACC 无 No operation 空操作,顺序执行下一条指令。 PC PC+1 无 OR A, [m] 说明: 运算过程: 影响标志位: Logical OR accumulator with data memory 将累加器中的数据和指定的数据存储器内容逻辑或,结果存放到累加器。 ACCACC “OR” [m] Z Rev. 1.70 addr PDF 1 TO、PDF Increment data memory 将指定数据存储器的内容加 1。 [m] [m]+1 Z 118 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 OR A, x 说明: 运算过程: 影响标志位: Logical OR immediate data to the accumulator 将累加器中的数据和立即数逻辑或,结果存放到累加器。 ACCACC “OR” x Z ORM A, [m] 说明: 运算过程: 影响标志位: Logical OR data memory with accumulator 将存在指定数据存储器中的数据和累加器逻辑或,结果放到数据存储器。 [m]ACC “OR” [m] Z RET 说明: 运算过程: 影响标志位: Return from subroutine 将堆栈寄存器中的程序计数器值恢复,程序由取回的地址继续执行。 PC Stack 无 RET A, x 说明: Return and place immediate data in the accumulator 将堆栈寄存器中的程序计数器值恢复且累加器载入指定的立即数,程序由取回 的地址继续执行。 PC Stack ACC x 无 运算过程: 影响标志位: RETI 说明: 影响标志位: Return from interrupt 将堆栈寄存器中的程序计数器值恢复且中断功能通过设置 EMI 位重新使能。 EMI 是控制中断使能的主控制位。如果在执行 RETI 指令之前还有中断未被相 应,则这个中断将在返回主程序之前被相应。 PC Stack EMI 1 无 RL Rotate data memory left 运算过程: [m] 说明: 运算过程: 影响标志位: RLA 说明: [m] 运算过程: 影响标志位: Rev. 1.70 将指定数据存储器的内容左移 1 位,且第 7 位移到第 0 位。 [m].(i+1) [m].i (i=0~6) [m].0 [m].7 无 Rotate data memory left and place result in the accumulator 将指定数据存储器的内容左移 1 位,且第 7 位移到第 0 位,结果送到累加器, 而指定数据存储器的内容保持不变。 ACC.(i+1) [m].i (i=0~6) ACC.0 [m].7 无 119 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 RLC 说明: [m] 运算过程: 影响标志位: RLCA 说明: [m] Rotate data memory left through carry 将指定数据存储器的内容连同进位标志左移 1 位,第 7 位取代进位标志且原本 的进位标志移到第 0 位。 [m].(i+1) [m].i (i=0~6) [m].0 C C [m].7 C 影响标志位: Rotate left through carry and place result in the accumulator 将指定数据存储器的内容连同进位标志左移 1 位,第 7 位取代进位标志且原本 的进位标志移到第 0 位,移位结果送回累加器,但是指定数据寄存器的内容保持 不变。 ACC.(i+1) [m].i (i=0~6) ACC.0 C C [m].7 C RR Rotate data memory right 运算过程: [m] 说明: 运算过程: 影响标志位: RRA 说明: [m] 运算过程: 影响标志位: RRC 说明: [m] 将指定数据存储器的内容循环右移 1 位且第 0 位移到第 7 位。 [m].i [m].(i+1) (i=0~6) [m].7 [m].0, 无 Rotate right and place result in the accumulator 将指定数据存储器的内容循环右移 1 位,第 0 位移到第 7 位,移位结果存放到 累加器,而指定数据存储器的内容保持不变。 ACC.i [m].(i+1) (i=0~6) ACC.7 [m].0 无 影响标志位: Rotate data memory right through carry 将指定数据存储器的内容连同进位标志右移 1 位,第 0 位取代进位标志且原本 的进位标志移到第 7 位。 [m].i [m].(i+1) (i=0~6) [m]. 7 C C [m].0 C RRCA Rotate right through carry and place result in the accumulator 运算过程: [m] 说明: 运算过程: Rev. 1.70 将指定数据存储器的内容连同进位标志右移 1 位,第 0 位取代进位标志且原本 的进位标志移到第 7 位,移位结果送回累加器,但是指定数据寄存器的内容保持 不变。 ACC.i [m].(i+1) (i=0~6) 120 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 影响标志位: SBC 说明: A,[m] ACC.7 C C [m].0 C Subtract data memory and carry from the accumulator 将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到累加器。 如果结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 运算过程: ACCACC-[m]- C 影响标志位: OV、Z、AC、C SBCM 说明: Subtract data memory and carry from the accumulator 将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到数据存储 器。如果结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 A,[m] 运算过程: [m]ACC-[m]- C 影响标志位: OV、Z、AC、C SDZ 说明: 运算过程: 影响标志位: Skip if decrement data memory is 0 将指定的数据存储器的内容减 1,判断是否为 0,若为 0 则跳过下一条指令,由 于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指 令。如果结果不为 0,则程序继续执行下一条指令。 [m] [m] -1,如果[m]=0 跳过下一条指令执行 无 SDZA [m] Decrement data memory and place result in ACC,skip if 0 说明: 运算过程: 影响标志位: 将指定数据存储器内容减 1,判断是否为 0,如果为 0 则跳过下一条指令,此结 果将存放到累加器,但指定数据存储器内容不变。由于取得下一个指令时会要 求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0,则 程序继续执行下一条指令。 ACC [m]-1,如果 ACC=0 跳过下一条指令执行 无 SET Set data memory [m] [m] 说明: 运算过程: 影响标志位: 将指定数据存储器的每一位设置为 1。 [m] FFH 无 SET [m].i 说明: 运算过程: 影响标志位: Set bit of data memory 将指定数据存储器的第 i 位设置为 1。 [m].i 1 无 Rev. 1.70 121 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 SIZ 说明: [m] 运算过程: 影响标志位: SIZA 说明: [m] Skip if increment data memory is 0 将指定的数据存储器的内容加 1,判断是否为 0,若为 0 则跳过下一条指令。由 于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指 令。如果结果不为 0,则程序继续执行下一条指令。 [m] [m]+1,如果[m]=0 跳过下一条指令执行 无 运算过程: 影响标志位: Increment data memory and place result in ACC,skip if 0 将指定数据存储器的内容加 1,判断是否为 0,如果为 0 则跳过下一条指令,此 结果会被存放到累加器,但是指定数据存储器的内容不变。由于取得下一个指 令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不 为 0,则程序继续执行下一条指令。 ACC [m]+1,如果 ACC=0 跳过下一条指令执行 无 Skip if bit I of the data memory is not 0 判断指定数据存储器的第 i 位,若不为 0,则程序跳过下一条指令执行。由于取 得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。 如果结果为 0,则程序继续执行下一条指令。 如果[m].i≠0,跳过下一条指令执行 无 SUB Subtract data memory from the accumulator 运算过程: 影响标志位: SNZ [m]. i 说明: A, [m] 说明: 将累加器的内容减去指定的数据存储器的数据,把结果存放到累加器。如果结 果为负, C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 运算过程: ACCACC-[m] 影响标志位: OV、Z、AC、C SUBM A, [m] 说明: 运算过程: 影响标志位: SUB 说明: 将累加器的内容减去指定数据存储器的数据,结果存放到指定的数据存储器。 如果结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。 [m]ACC-[m] OV、Z、AC、C 运算过程: 影响标志位: Subtract immediate data from the accumulator 将累加器的内容减去立即数,结果存放到累加器。如果结果为负,C 标志位清 除为 0,反之结果为正或 0,C 标志位设置为 1。 ACCACC-x OV、Z、AC、C SWAP 说明: Swap nibbles within the data memory 将指定数据存储器的低 4 位和高 4 位互相交换。 Rev. 1.70 A, x Subtract data memory from the accumulator [m] 122 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 运算过程: 影响标志位: SWAPA 说明: [m] 运算过程: 影响标志位: SZ 说明: [m] [m].3~[m].0 [m].7~[m].4 无 Swap data memory and place result in the accumulator 将指定数据存储器的低 4 位和高 4 位互相交换,再将结果存放到累加器且指定 数据寄存器的数据保持不变。 ACC.3~ACC.0 [m].7~[m].4 ACC.7~ACC.4 [m].3~[m].0 无 运算过程: 影响标志位: Skip if data memory is 0 判断指定数据存储器的内容是否为 0,若为 0,则程序跳过下一条指令执行。由 于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指 令。如果结果不为 0,则程序继续执行下一条指令。 如果[m] = 0, 跳过下一条指令执行 无 SZA Move data memory to ACC,skip if 0 [m] 说明: 运算过程: 影响标志位: 将指定数据存储器内容复制到累加器,并判断指定数据存储器的内容是否为 0, 若为 0 则跳过下一条指令。由于取得下一个指令时会要求插入一个空指令周期, 所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一条指令。 ACC[m],如果[m] = 0,跳过下一条指令执行 无 SZ Skip if bit I of the data memory is 0 [m]. i 说明: 运算过程: 影响标志位: TABRDC [m] 说明: 运算过程: 影响标志位: TABRDL [m] 说明: Rev. 1.70 判断指定数据存储器的第 i 位是否为 0,若为 0,则跳过下一条指令。由于取得 下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如 果结果不为 0,则程序继续执行下一条指令。 如果[m].i = 0,跳过下一条指令执行 无 Move the ROM code(current page) to TBLH and data memory 将表格指针 TBLP 所指的程序代码低字节(当前页)移至指定的数据存储器且 将高字节移至 TBLH。 [m] 程序代码(低字节) TBLH程序代码(高字节) 无 Move the ROM code(last page) to TBLH and data memory 将表格指针 TBLP 所指的程序代码低字节(最后一页)移至指定的数据存储器 且将高字节移至 TBLH。 123 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 影响标志位: [m] 程序代码(低字节) TBLH程序代码(高字节) 无 XOR A, [m] 说明: 运算过程: 影响标志位: Logical XOR accumulator with data memory 将累加器的数据和指定的数据存储器内容逻辑异或,结果存放到累加器。 ACCACC “XOR” [m] Z XORM 说明: 运算过程: 影响标志位: Logical XOR data memory with accumulator 将累加器的数据和指定的数据存储器内容逻辑异或,结果放到数 据存储器。 [m]ACC “XOR” [m] Z XOR A, x 说明: 运算过程: 影响标志位: Logical XOR immediate data to the accumulator 将累加器的数据与立即数逻辑异或,结果存放到累加器。 ACCACC “XOR” x Z 运算过程: Rev. 1.70 A, [m] 124 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 封装信息 请注意,这里提供的封装信息仅作为参考。由于这个信息经常更新,提醒用户咨询 Holtek 网 站以获取最新版本的封装信息。 封裝信息的相关内容如下所示,点击可链接至 Holtek 网站相关信息页面。 Rev. 1.70 封装信息(包括外形尺寸、包装带和卷轴规格) 封装材料信息 纸箱信息 125 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 64-pin LQFP (7mm×7mm)外形尺寸 符号 A B C D E F G H I J K α 符号 A B C D E F G H I J K α Rev. 1.70 最小 — — — — — 0.005 0.053 — 0.002 0.018 0.004 0° 尺寸(单位:inch) 正常 0.354 BSC 0.276 BSC 0.354 BSC 0.276 BSC 0.016 BSC 0.007 0.055 — — 0.024 — — 最大 — — — — — 0.009 0.057 0.063 0.006 0.030 0.008 7° 最小 — — — — — 0.13 1.35 — 0.05 0.45 0.09 0° 尺寸(单位:mm) 正常 9.00 BSC 7.00 BSC 9.00 BSC 7.00 BSC 0.40 BSC 0.18 1.40 — — 0.60 — — 最大 — — — — — 0.23 1.45 1.60 0.15 0.75 0.20 7° 126 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 100-pin LQFP (14mm×14mm)外形尺寸 符号 A B C D E F G H I J K α 符号 A B C D E F G H I J K α Rev. 1.70 最小 — — — — — 0.007 0.053 — 0.002 0.018 0.004 0° 尺寸(单位:inch) 正常 0.630 BSC 0.551 BSC 0.630 BSC 0.551 BSC 0.020 BSC 0.009 0.055 — — 0.024 — — 最大 — — — — — 0.011 0.057 0.063 0.006 0.030 0.008 7° 最小 — — — — — 0.17 1.35 — 0.05 0.45 0.09 0° 尺寸(单位:mm) 正常 16 BSC 14 BSC 16 BSC 14 BSC 0.50 BSC 0.22 1.40 — — 0.60 — — 最大 — — — — — 0.27 1.45 1.60 0.15 0.75 0.20 7° 127 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 128-pin QFP (14mm×20mm)外形尺寸 符号 A B C D E F G H I J K L α 符号 A B C D E F G H I J K L α Rev. 1.70 最小 0.669 0.547 0.906 0.783 — 0.007 0.101 — 0.010 0.026 0.004 — 0° 尺寸(单位:inch) 典型 0.677 0.551 0.913 0.787 0.020 BSC 0.008 0.107 — 0.014 0.031 — — — 最大 0.685 0.555 0.921 0.791 — 0.011 0.113 0.130 0.018 0.037 0.008 0.003 7° 最小 17.00 13.90 23.00 19.90 — 0.17 2.57 — 0.25 0.65 0.10 — 0° 尺寸(单位:mm) 典型 17.20 14.00 23.20 20.00 0.50 BSC 0.20 2.72 — 0.40 0.80 — — — 最大 17.40 14.10 23.40 20.10 — 0.27 2.78 3.30 0.45 0.95 0.20 0.08 7° 128 2014-04-04 HT56R67/HT56R668/HT56C668/HT56R678/HT56C678/HT56R688 Copyright 2014 by HOLTEK SEMICONDUCTOR INC. 使用指南中所出现的信息在出版当时相信是正确的,然而盛群对于说明书的使用不负任何责任。文中提 到的应用目的仅仅是用来做说明,盛群不保证或表示这些没有进一步修改的应用将是适当的,也不推荐 它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方。盛群产品不授权使用于救生、维 生从机或系统中做为关键从机。盛群拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们 的网址 http://www.holtek.com.tw Rev. 1.70 129 2014-04-04