HT47R20 8 位 R-F 型 OTP 单片机 特性 工作电压 2.2V~5.5V 8 个双向输入/输出口 4 个输入口 1 个外部中断输入口 1 个 16 位的可编程定时/计数器 并且具有 PFD(Programmable Frequency Divider)功能 内置晶体和 RC 振荡电路 内置 32768Hz 晶体振荡电路 可用于实时时 钟或系统时钟 看门狗定时器 2K×16 程序存储器 ROM 64×8 数据存储器 RAM 一个实时时钟(RTC) 一个 8 位的实时时钟预分频器 低电压检测 低电压复位 一组蜂鸣器输出 HALT 和唤醒功能可降低功耗 电容和电阻型 LCD 偏压方式 一个 20×2 20×3 或 19×4 段的液晶显示驱动 电路 一个 IR 载波输出 两个 RC 型 A/D 转换通道 4 层硬件堆栈 位操作指令 查表指令 表格内容字长 16 位 当系统时钟为 4MHz 时 指令周期为 1µs 指令执行时间为 1 或 2 个指令周期 63 条指令 64-pin QFP 封装 概述 HT47R20 是 8 位高性能精简指令集单片机 单指令周期和两级流水线结构 使其适合高速应用的场合 特别适用于带 LCD 的低功耗产品 例如 电子计算机 时钟计数器 游戏产品 电子秤 玩具 温度计 湿度计 体温计 电容测量仪 以及其它掌上型 LCD 产品 尤其是电池供电的系统 Rev. 1.10 1 2002-07-25 HT47R20 方框图 P B 0 /IN T S y s te m M In te rru p t C ir c u it P ro g ra m E P R O M IN T C C 1 C 2 X D A T A M e m o ry A /D S D S C O M 0 ~ C O M 2 C O M 3 / S E G 1 9 0 T 0 0 1 1 1 U R T C X O S C O S C 3 O S C 4 P B 0 /IN T P B 2 /T M R P B 3 L C D D r iv e r L C D 0 P B 1 P B P o rt A P A V 1 V 2 V IN 0 C S R S C R R T IN 1 C S R S R T W D T O S C P o rt B L C D M e m o ry H a lv e V o lta g e M T im e B a s e B P C lo c k S Y S C L K /4 W D T A C C P A 3 /P F D T y p e C o n v e rte r R T C S h ifte r C 1 C 3 P F D A /D R C S T A T U S A L U T im in g G e n e ra to r O S O S R E V D V S U R T C O u tp u t P B 2 /T M R X T im e r B M U X In s tr u c tio n D e c o d e r O S C 2 O S C 4 M M P U O v e r flo w S T A C K P ro g ra m C o u n te r In s tr u c tio n R e g is te r T im e r A C lo c k T 1 S E G 0 ~ S E G 1 8 H A L T P A 0 P A 1 P A 2 P A 3 P A 4 /B /B /IR /P ~ P Z Z F D A 7 E N /D IS L V D /L V R Rev. 1.10 2 2002-07-25 HT47R20 引脚图 V 2 V L C D V 1 C 2 C 1 O S C 4 V D D O S C 3 O S C 2 R E S O S C 1 N C 1 5 1 S E G 0 P A 1 /B Z 2 5 0 S E G 1 P A 2 /IR 3 4 9 S E G 2 P A 3 /P F D 4 4 8 S E G 3 P A 4 5 4 7 S E G 4 P A 5 6 4 6 S E G 5 P A 6 7 4 5 S E G 6 P A 7 8 4 4 S E G 7 P B 0 /IN T 9 4 3 S E G 8 4 2 S E G 9 4 1 S E G 1 0 H T 4 7 R 2 0 6 4 Q F P -A P B 1 1 0 P B 2 /T M R 1 1 P B 3 1 2 4 0 S E G 1 1 N C 1 3 3 9 S E G 1 2 N C 1 4 3 8 S E G 1 3 N C 1 5 3 7 S E G 1 4 N C 1 6 3 6 S E G 1 5 N C 1 7 3 5 S E G 1 6 N C 1 8 3 4 S E G 1 7 V S S 1 9 3 3 S E G 1 8 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 C O M 3 /S E G 1 9 C O M 2 C O M 1 C O M 0 IN 0 R S 0 3 C S 0 IN 1 C R T 0 R T 0 R T 1 C S 1 R S 1 Rev. 1.10 N C 6 4 6 3 6 2 6 1 6 0 5 9 5 8 5 7 5 6 5 5 5 4 5 3 5 2 P A 0 /B Z 2002-07-25 HT47R20 引脚说明 引脚名称 PA0/BZ PA1/ BZ PA2/IR PA3/PFD PA4~PA7 PB0/ INT PB1 PB2/TMR PB3 VSS IN1 CS1 RS1 RT1 IN0 CS0 RS0 CRT0 RT0 COM3/SEG19 COM2~COM0 输入/输出 掩膜选项 输入/输出 唤醒功能 上拉电阻 CMOS 或 NMOS 4 位斯密特触发输入口 具有上拉电阻 PB0 可由软件 设置为输入引脚或外部中断输入引脚( INT ) PB2 可由 软件设置为输入引脚或定时/计数器输入引脚 输入 — 输入 输出 输出 输出 输入 输出 输出 输出 输出 输出 — — 1/2 或 1/3 或 1/4 占空比 SEG18~SEG0 V1,V2,C1,C2 VLCD 输出 输入 — — — OSC4 OSC3 输出 输入 RTC 或系统 时钟 VDD OSC2 OSC1 输入 输出 输入 输入 — RES 功能说明 8 位双向输入/输出口 PA 低 4 位可由掩膜选项设置为 CMOS 或 NMOS 输出 带或不带上拉电阻(由上拉电阻 选项决定) NMOS 可以设置为带或不带上拉电阻的斯 密特触发输入 NMOS 输出的每一位可由掩膜选项设 为唤醒输入 PA0~PA1 可由掩膜选择设置为输入/输出 或蜂鸣器输出 PA2 可由掩膜选择设置为输入/输出或 IR 载波输出 PA3 可由掩膜选项设置为输入/输出或 PFD 输出 晶体或 RC — 负电源 接地 振荡器输入引脚(通道 1) 参考电容连接引脚(通道 1) 参考电阻连接引脚(通道 1) 电阻传感器测量连接引脚(通道 1) 振荡器输入引脚(通道 0) 参考电容连接引脚(通道 0) 参考电阻连接引脚(通道 0) 电阻/电容传感器测量连接引脚(通道 0) 电阻传感器测量连接引脚(通道 0) SEG19/COM3 可 由 掩 膜 选 项 设 置 为 LCD 显 示 的 Segment 或 Common 输出端 COM2~COM0 是 LCD 驱 动的 Common 输出 LCD 驱动的 Segment 输出 电压泵 LCD 电源 实时时钟振荡器 OSC3 OSC4 连接 32768Hz 的晶体振荡器 用于提供 时间或系统时钟(由掩膜选项确定) 正电源 OSC1 OSC2 连接 RC 或晶体(由掩膜选项确定)以产生 内部系统时钟 斯密特触发复位输入 低电平有效 极限参数 储存温度………….-50 ~125 工作温度………..….-40 ~85 电源供应电压………….-0.3V~5.5V 端口输入电压………….VSS-0.3V~VDD+0.3V 注 这里只强调额定功率 超过极限参数所规定的范围将对芯片造成损害 无法预期芯片在上述标示范围外的工作状态 而 且若长期在标示范围外的条件下工作 可能影响芯片的可靠性 Rev. 1.10 4 2002-07-25 HT47R20 直流电气特性 符号 Ta=25 参数 VDD 工作电压 IDD1 工作电流(晶体振荡) IDD2 工作电流(RC 振荡) IDD3 工作电流(fSYS=32768Hz) ISTB1 静态电流(*fS=T1) ISTB2 静态电流(*fS=32768Hz) ISTB3 静态电流(*fS=WDT RC 振荡) VDD — 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V ISTB4 静态电流(*fS=32768Hz) ISTB5 静态电流(*fS=32768Hz) ISTB6 静态电流(*fS=WDT RC 振荡) ISTB7 静态电流(*fS=WDT RC 振荡) 5V 3V VIL1 VIH1 输入/输出口低电平输入 电压 输入/输出口高电平输入 电压 VIL2 低电平输入电压( RES) VIH2 高电平输入电压( RES) IOL 输入/输出口灌电流 IOH 输入/输出口源电流 RPH 输入/输出口上拉电阻 VLVR VLVD 低电压复位 低电压检测 注 Rev. 1.10 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 3V 5V 测试条件 条件 — 无负载 fSYS=4MHz 无负载 fSYS=4MHz 最小 最大 单位 4 5.5 1.5 3 1.5 3 0.5 1.5 1 2 10 V mA mA mA mA mA mA µA µA µA 14 20 µA 2 5 µA 6 10 µA 17 30 µA 34 60 µA 13 25 µA 28 50 µA 14 25 µA 26 50 µA 10 20 µA 19 40 µA 12 25 -4 -8 60 30 3.2 3.3 0.3 VDD 0.3 VDD VDD VDD 0.4 VDD 0.4 VDD VDD VDD — — — — 80 50 3.6 3.6 V V V V V V V V mA mA mA mA kΩ kΩ V V 2.2 0.7 1.7 0.7 1.7 0.25 0.8 无负载 无负载 系统 HALT HALT 时 LCD 关闭 无负载 系统 HALT HALT 时 LCD 打开 电容型偏压 无负载 系统 HALT HALT 时 LCD 打开 电容型偏压 无负载 系统 HALT HALT 时 LCD 打开 电阻型偏压 1/2bias 无负载 系统 HALT HALT 时 LCD 打开 电阻型偏压 1/3bias 无负载 系统 HALT HALT 时 LCD 打开 电阻型偏压 1/2bias 无负载 系统 HALT HALT 时 LCD 打开 电阻型偏压 1/3bias VOL=0.1 VDD VOL=0.1 VDD VOH=0.9 VDD VOH=0.9 VDD 典型 0 0 0.7 VDD 0.7 VDD 0 0 0.9 VDD 0.9 VDD 6 10 -2 -5 40 10 2.7 3.0 * tSYS=1/fSYS **为保护电压 5 2002-07-25 HT47R20 交流电气特性 符号 Ta=25 参数 fSYS1 系统时钟(晶体振荡) fSYS2 系统时钟(RC 振荡) fRTCOSC 系统时钟(32768Hz 晶体振 荡) RTC 频率 fTIMER 定时器输入频率(TMR) fSYS3 tWDTOSC tRES tSST tINT Rev. 1.10 看门狗振荡器 外部复位低电平脉宽 系统启动延迟时间 中断脉冲宽度 VDD 3V 5V 3V 5V 3V 5V 3V 5V — — — 测试条件 条件 最小 典型 400 400 400 400 从 HALT 状态唤醒 6 0 0 45 35 1 — 1 最大 单位 4000 8000 4000 8000 kHz kHz kHz kHz 32768 Hz 32768 — Hz kHz kHz µs µs µs tSYS µs 90 65 — 1024 — 4000 8000 180 130 — — — 2002-07-25 HT47R20 系统功能说明 指令执行时序 单片机的系统时钟由晶体振荡器或 RC 振荡器产生 该时钟在芯片内部被分成四个互不重叠的时钟周 期 一个指令周期包括四个系统时钟周期 指令的读取和执行是以流水线方式进行的, 这种方式在一个指令周期进行读取指令操作 而在下一个 指令周期进行解码与执行该指令 因此 流水线方式使多数指令能在一个周期内执行完成 但如果渉及到 的指令要改变程序计数器的值 就需要花两个指令周期来完成这一条指令 S y s te m C lo c k T 1 T 2 T 3 T 4 T 1 T 2 T 3 T 4 T 1 T 2 T 3 T 4 In s tr u c tio n C lo c k P C P C P C + 1 F e tc h IN S T (P C ) E x e c u te IN S T (P C -1 ) P C + 2 F e tc h IN S T (P C + 1 ) E x e c u te IN S T (P C ) F e tc h IN S T (P C + 2 ) E x e c u te IN S T (P C + 1 ) 指令执行时序 程序计数器 PC 11 位的程序计数器(PC)控制程序存储器 ROM 中指令执行的顺序 它可寻址整个 ROM 范围的 2048 个 地址 取得指令码以后 程序计数器会自动加一 指向下一个指令码的地址 但如果执行跳转 条件跳跃 向 PCL 赋值 子程序调用 初始化复位 内部中断 外部中断 子程序返回等操作时 PC 会载入与指令 相关的地址而非下一条指令地址 当遇到条件跳跃指令且符合条件时 当前指令执行过程中读取的下一条指令会被丢弃 取而代之的是 一个空指令周期 随后才能取得正确的指令 反之 就会顺序执行下一条指令 程序计数器的低字节(PCL)是一个可读写的寄存器(06H) 对 PCL 赋值将产生一个短跳转动作 跳转的 范围为当前页 256 个地址 当遇到控制转移指令时 系统也会插入一个空指令周期 模式 初始化复位 外部中断 时基中断 实时时钟中断 定时/计数器中断 条件跳跃 装载 PCL 跳转 子程序调用 从子程序返回 *10 0 0 0 0 0 *9 0 0 0 0 0 *8 0 0 0 0 0 *7 0 0 0 0 0 *10 #10 S10 *9 #9 S9 *8 #8 S8 @7 #7 S7 程序计数器 *6 *5 *4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 PC+2 @6 @5 @4 #6 #5 #4 S6 S5 S4 *3 0 0 1 1 0 *2 0 1 0 1 0 *1 0 0 0 0 0 *0 0 0 0 0 0 @3 #3 S3 @2 #2 S2 @1 #1 S1 @0 #0 S0 程序计数器 注 *10 ~ *0 #10 ~ #0 S10 ~ S0 @7 ~ @0 程序计数器位 指令代码位 堆栈寄存器位 PCL 位 程序存储器 EPROM 程序存储器用来存放要执行的指令代码 以及一些数据 表格和中断入口 程序存储器有 2048×16 位 程序存储器空间可以用程序计数器或表格指针进行寻址 以下列出的程序存储器地址是系统专为特殊用途而保留的 地址 000H Rev. 1.10 7 2002-07-25 HT47R20 0 0 0 H 该地址为程序初始化保留 系统复位后 程序总是从 D e v ic e in itia liz a tio n p r o g r a m 000H 开始执行 0 0 4 H E x te r n a l in te r r u p t s u b r o u tin e 地址 004H 0 0 8 H T im e b a s e in te r r u p t s u b r o u tin e 该地址为外部中断服务程序保留 当 INT 引脚有触发信 0 0 C H 号输入 如果中断允许且堆栈未满 则程序会跳转到 004H R T C in te r r u p t s u b r o u tin e 地址开始执行 0 1 0 H P ro g ra m T im e r /e v e n t c o u n te r in te r r u p t s u b r o u tin e R O M 地址 008H 该地址为时基(Time Base)中断服务程序保留 当时基 n 0 0 H 发生溢出 如果中断允许且堆栈未满 则程序会跳转到 008H L o o k - u p ta b le ( 2 5 6 w o r d s ) n F F H 地址开始执行 地址 00CH 该地址为实时时钟(Real Time Clock)中断服务程序保 L o o k - u p ta b le ( 2 5 6 w o r d s ) 7 F F H 留 当实时时钟发生溢出 如果中断允许且堆栈未满 则 1 6 b its 程序会跳转到 00CH 地址开始执行 N o te : n ra n g e s fro m 0 to 7 地址 010H 该地址为定时/计数器中断服务程序保留 当定时/计数 器 A 或 B 发生溢出 如果中断允许且堆栈未满 则程序会跳转到 010H 地址开始执行 表格区 ROM 空间的任何地址都可做为查表使用 查表指令 TABRDC [m] (查当前页表格 1 页=256 个字) 和 TABRDL [m] (查最后页表格) 会把表格内容低字节传送给[m] 而表格内容高字节传送到 TBLH 寄 存器(08H) 只有表格内容的低字节被传送到目标地址中 而高字节被传送到表格内容高字节寄存器 TBLH 表格内容高字节寄存器 TBLH 是只读寄存器 表格指针(TBLP)是可读/写寄存器(07H) 用来指明表格地址 在查表之前 要先将表格地址写入 TBLP 中 如果主程序和中断服务程序(ISR)都用到查表指令 主程序中 TBLH 的值可能会因为 ISR 中执行的查表指令而发生变化 产生错误 也就是说 要避免在主程序和中断 服务程序中都使用查表指令 但如果必须这样做的话 我们可以在查表指令前先将中断禁止 在保存了 TBLH 的值后再开放中断以避免发生错误 所有与表格有关的指令都需要两个指令周期的执行时间 这里 提到的表格区都可以做为正常的程序存储器来使用 指令 TABRDC [m] TABRDL [m] 注 *10~*0 *10 P10 1 *9 P9 1 表格地址字节 *8 P8 1 *7 @7 @7 P10~P8 *6 @6 @6 表格区 *5 *4 @5 @4 @5 @4 表格区 当前程序指针字节 *3 @3 @3 *2 @2 @2 *1 @1 @1 *0 @0 @0 @7~@0 表格指针字节 堆栈寄存器 STACK 堆栈寄存器是特殊的存储器空间 用来保存 PC 的值 HT47R20 有 4 层堆栈 堆栈寄存器既不是数据 存储器的一部分 也不是程序存储器的一部分 而且它既不能读出 也不能写入 堆栈的使用是通过堆栈 指针(SP)来实现的 堆栈指针也不能读出或写入 当发生子程序调用或中断响应时 程序计数器(PC)的值 会被压入堆栈 在子程序调用结束或中断响应结束时(执行指令 RET 或 RETI) 堆栈将原先压入堆栈的内 容弹出 重新装入程序计数器中 在系统复位后 堆栈指针会指向堆栈顶部 如果堆栈已满 并且发生了不可屏蔽的中断 那么只有中断请求标志会被记录下来 而中断响应会被 抑制 直到堆栈指针(执行 RET 或 RETI 指令)发生递减 中断才会被响应 这个功能可以防止堆栈溢出 使得程序员易于使用这种结构 同样 如果堆栈已满 并且发生了子程序调用 那么堆栈会发生溢出 首 先进入堆栈的内容将会丢失 只有最后的 4 个返回地址会被保留 RAM 数据存储器 数据存储器由 85 8 位组成 分为两个功能区间 特殊功能寄存器和通用数据存储器(64 8) 数据存 储器单元大多数是可读/写的 但有些只读的 特殊功能寄存器包括间接寻址寄存器 0(00H) 间接寻址指针寄存器 0(MP0 01H) 间接寻址寄存器 1(02H) 间接寻址指针寄存器 1(MP1 03H) 存储器段指针寄存器(BP 04H) 累加器(ACC 05H) 程序 计数器低字节寄存器(PCL 06H) 表格指针寄存器(TBLP 07H) 表格内容高字节寄存器(TBLH 08H) Rev. 1.10 8 2002-07-25 HT47R20 实 时 时 钟 控 制 寄 存 器 (RTCC 09H) 状 态 标 志 寄 存 器 (STATUS 0AH) 中断控制寄存器 0(INTC0 0BH) 输入/ 输出寄存器(PA 12H PB 14H) 中断控制寄存器 1(INTC1 1EH) 定时/计数器 A 高 低位字节寄存器(TMRAH 20H TMRAL 21H) 定时/计数器控制寄存器(TMRC 22H) 定 时/计数器 B 高 低位字节寄存器(TMRBH 23H TMRBL 24H) RC 振荡型 A/D 转换控制寄存器(ADCR 25H) 其余 在 40H 之前的空间保留给系统以后扩展使用 读取这些地址 的返回值为 00H 通用数据寄存器地址从 40H 到 7FH 用 来存储数据和控制信息 所有的数据存储器单元都能直接执行算术 逻辑 递增 递减和循环操作 除了一些特殊位外 数据存储器的每一位 都可由 SET[m].i 置位或由 CLR[m].i 复位 而且都可 以通过间接寻址指针 MP0 MP1 进行间接寻址 间接寻址寄存器 地址 00H 和 02H 是间接寻址寄存器 并无实际的物理区 存 在 任 何 对 [00H] 和 [02H] 的 读 / 写 操 作 都 是 访 问 由 MP0(01H)和 MP1(03H)所指向的 RAM 单元 间接读取 00H 或 02H 地址得到的值为 00H 间接写入此地址 不会产生任 何操作 间接寻址寄存器之间不支持数据传送功能 间接寻址指 针 MP0 和 MP1 是 8 位寄存器 MP0 只能用于数据存储器 而 MP1 能用于数据存储器和 LCD 显示存储器 累加器 累加器(ACC)与算术逻辑单元(ALU)有密切关系 它对应 于 RAM 地址 05H 做为运算的立即数据 存储器之间的数 据传送必须经过累加器 0 0 H In d ir e c t A d d r e s s in g R e g is te r 0 0 1 H M P 0 0 2 H In d ir e c t A d d r e s s in g R e g is te r 1 0 3 H M P 1 0 4 H B P 0 5 H A C C 0 6 H P C L T B L P 0 7 H 0 8 H T B L H 0 9 H R T C C 0 A H S T A T U S 0 B H IN T C 0 0 C H 0 D H 0 E H S p e c ia l P u r p o s e D a ta M e m o ry 0 F H 1 0 H 1 1 H 1 2 H P A 1 3 H 1 4 H P B 1 5 H 1 6 H 1 7 H 1 8 H 1 9 H 1 A H 1 B H 1 C H 1 D H 1 E H IN T C 1 1 F H 2 0 H T M R A H 2 1 H T M R A L 2 2 H T M R C 2 3 H T M R B H 2 4 H T M R B L 2 5 H A D C R 算术逻辑单元 ALU 2 6 H 4 0 H 算术逻辑单元(ALU)是执行 8 位算术 逻辑运算的电路 它提供有以下功能 算术运算(ADD ADC SUB SBC DAA) 逻辑运算(AND OR XOR CPL) 7 F H 移位运算(PL RR RLC RRC) 递增和递减(INC DEC) 分支判断(SZ SNZ SIZ SDZ…) ALU 不仅可以储存数据运算的结果 还会改变状态寄存器的值 : U n u s e d R e a d a s "0 0 " G e n e ra l P u rp o s e D a ta M e m o ry (6 4 B y te s ) STATUS 状态寄存器 8 位的状态寄存器(0AH) 由零标志位(Z) 进位标志位(C) 辅助进位标志位(AC) 溢出标志位(OV) 暂停标志位(PD)和看门狗定时器溢出标志位(TO)组成 该寄存器不仅记录状态信息 而且还控制操作顺序 Rev. 1.10 符号 位 C 0 AC 1 Z 2 OV 3 功能 如果在加法运算中结果产生了进位或在减法运算中结果不产生借位, 则 C 被置位 反之 C 被清除 它也可被循环移位指令影响 如果在加法运算中低 4 位产生了进位或减法运算中低 4 位不产生借 位 则 AC 被置位 反之 AC 被清除 如果算术或逻辑运算的结果为零 则 Z 被置位 反之 Z 被清除 如果运算结果向最高位进位 但最高位并不产生进位输出 则 OV 被 置位 反之 OV 被清除 9 2002-07-25 HT47R20 PD 4 TO 5 6 7 系统上电或执行 CLR WDT 指令 PD 被清除 执行 HALT 指 令 PD 被置位 系统上电 执行 CLR WDT 或 HALT 指令 TO 被清除 WDT 定时溢出 TO 被置位 未用 读出为 0 未用 读出为 0 状态寄存器 除了 PD 和 TO 标志外 状态寄存器的其它位都可以用指令改变 任何对状态寄存器的写操作都不会 改变 PD 和 TO 的值 对状态寄存器的操作可能会导致与预期不一样的结果 TO 标志只受系统上电 看门 CLR WDT 指令或 HALT 指令的影响 PD 标志只受系统上电 CLR WDT 指令或 HALT 狗溢出 指令的影响 标志位 Z OV AC 和 C 反映的是最近一次操作的状态 在进入中断程序或子程序调用时 状态寄存器不会被自动压入堆栈 如果状态寄存器的内容是重要的 而 且子程序会影响状态寄存器的内容 那么程序员必须事先将 STATUS 的值保存好 中断 HT47R20 提供了一个外部中断 一个内部定时器/计数器中断 一个内部时基中断和一个内部实时时 钟中断 中断控制寄存器 0(INTC0)和中断控制寄存器 1(INTC1)包含了所有中断控制位 用来置位中断允 许/禁止以及中断请求标志 寄存器 INTC0 (0BH) INTC1 (1EH) 位 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 标志 EMI EEI ETBI ERTI EIF TBF RTF — ETI — — — TF — — — 功能 控制总中断(1=允许 0=禁止) 控制外部中断(1=允许 0=禁止) 控制时基中断(1=允许 0=禁止) 控制实时时钟中断(1=允许 0=禁止) 外部中断请求标志(1=请求 0=无) 时基中断请求标志(1=请求 0=无) 实时时钟中断请求标志(1=请求 0=无) 未定义 读取值为 0 控制定时/计数器中断(1=允许 0=禁止) 未定义 读取值为 0 未定义 读取值为 0 未定义 读取值为 0 定时/计数器中断请求标志(1=请求 0=无) 未定义 读取值为 0 未定义 读取值为 0 0 未定义 读取值为 INTC 寄存器 只要有中断子程序被服务 其余的中断全部被禁止(通过清除 EMI 位) 这种做法的目的在于防止中断 嵌套 在执行中断服务子程序期间 可能会发生其它的中断请求 但只有中断请求标志会被记录下来 如 果要实现中断嵌套 使用者可以在中断子程序中置位 EMI 及 INTC0 INTC1 中对应的中断控制位 如果 堆栈已满 即使有关的中断允许 该中断申请并不会被响应 一直到堆栈指针(SP)发生递减才会响应 但 如果需要立即服务 应避免让堆栈发生饱和 所有的中断都具有唤醒功能 当有中断服务请求 会将程序计数器值压栈 然后再转至中断服务程序 的入口 但要记住这时只有程序计数器的内容被压栈 如果寄存器和状态寄存器的内容被中断程序改变 而导致该中断服务程序会破坏预期控制序列的话 使用者应该事先将这些数据储存起来 外部中断是由引脚从高电位转变为低电位时触发的 其相关的中断申请标志位(EIF)接着就会被置位 如果外部中断允许 而且此时堆栈尚未用满 而外部中断被触发时 会调用 04H 地址的子程序 该中断申 请标志(EIF)和 EMI 位也因此而清除 以便禁止其他中断 Rev. 1.10 10 2002-07-25 HT47R20 内部定时/计数器中断是由置位定时/计数器中断申请标志(TF INTC1 的第 4 位)的方式来启动的 而 该中断申请标志是由定时器 A 或定时器 B 溢出产生的 如果中断允许 而此时堆栈尚未用满 而且 TF 也 已置位的话 会调用地址 10H 子程序 此时不仅其相关的中断申请标志(TF)会被清除 而且 EMI 位也会被 清除 以禁止其他中断 时基中断是由置位时基中断申请标志位(TBF)的方式来启动的 而该中断申请标志是由时基信号产生 的 如果中断允许 而此时堆栈尚未用满 而且 TBF 也已置位的话 会调用地址 08H 子程序 此时不仅 其相关的中断申请标志(TBF)会被清除 而且 EMI 位也会被清除 用以禁止任何进一步的中断 实时时钟中断是由置位实时时钟中断申请标志位(RTF INTC0 的第 6 位)的方式来启动的 而该中断 申请标志是由实时时钟产生的 如果中断允许 而此时堆栈尚未用满 而且 RTF 也已置位的话 会调用地 址 0CH 子程序 此时不仅其相关的中断申请标志(RTF)会被清除 而且 EMI 位也会被清除 用以禁止任何 进一步的中断 执行中断子程序期间 其他的中断响应会被暂停 直到执行 RETI 指令或是将 EMI 位和其相关中断控 制位设为 1 (此时堆栈尚未用满)为止 若欲从此中断子程序返回 只要执行 RET 或 RETI 指令即可 其 中 RETI 会设定 EMI 位 用以允许中断服务 而 RET 则否 如果在两个连续的 T2 脉冲上升沿之间发生中断 则在这两个 T2 后面的 T2 脉冲该中断会被服务 而 如果同时发生中断申请 其顺序会依照下表所显示 这个顺序可以通过设定各中断相关的控制位来改变顺 序 No. 中断源 优先级 中断向量 a 1 04H 外部中断 b 2 08H 时基中断 c 3 0CH 实时时钟中断 d 4 10H 定时/计数器中断 中断控制寄存器 0(INTC0)是由外部中断申请标志位(EIF) 实时时钟中断申请标志位(RTF) 时基中断 申请标志位(TBF) 外部中断允许位(EEI) 实时时钟中断允许位(ERTI) 时基允许位(ETBI)以及总中断允 许位(EMI)组成的 其地址为数据存储器(ROM)的 0BH 中断控制寄存器 1(INTC1)是由定时/计数器中断申 请标志位(TF) 定时/计数器中断允许位(ETI)组成的 其地址为数据存储器的 1EH EMI EEI ETI ETBI 和 ERTI 是用来控制中断的允许/禁止状态 这些控制位可以防止正在进行中断服务时的中断申请 一旦中 断申请标志(RTF TBF TF EIF)置位之后 仍会继续保留在 INTC0 或 INTC1 寄存器中 直到全部中断 都被服务或用软件指令清除为止 建议不要在中断服务程序中使用 CALL 指令来调用子程序 因为中断随时都可能发生 而且需要 立刻给予响应 如果只剩下一层堆栈 而中断不能被很好地控制 原先的控制序列很可能因为在中断子程 序中执行 CALL 指令而使堆栈溢出 从而发生混乱 振荡电路 HT47R20 向系统时钟提供 3 种振荡器电路 根据掩膜选择分别为 RC 振荡器 晶体振荡器和 32768Hz 的振荡器 无论选择何种振荡源 其信号都提供系统时钟 HALT 模式停止系统振荡器(RC 和晶体振荡器) 并忽略外部信号以节省电源 如果选择 32768Hz 的振荡器作为系统振荡器 那么在 HALT 模式下就不会停 止系统振荡器 但是停止执行指令由于这个振荡器(用于系统振荡器或 RCT 振荡器)也用于提供定时作用 因此在 HALT 模式下内部的定时操作(RTC 时基 WDT)仍然运行 O S C 3 O S C 1 O S C 4 O S C 2 3 2 7 6 8 H z C r y s ta l/ R T C O s c illa to r C r y s ta l O s c illa to r O S C 1 fS Y S /4 O S C 2 : fS O S C 2 Y S /4 N M O S o p e n d r a in 系统振荡 在这 3 种振荡器中 如果使用了 RC 振荡器则要在 OSC1 和 VDD 之间接一个外接的电阻 电阻的阻 值范围为 24 kΩ到 1MΩ 从 OSC2 输出系统时钟 4 分频的信号 用于给外部逻辑器件提供同步时钟信号 RC 振荡器提供了最廉价的解决方案 然而振荡器的频率会随着 VDD 温度和芯片自身的参数发生变化 因此 它不适合需要精确的振荡器频率的记时操作的场合 Rev. 1.10 11 2002-07-25 HT47R20 另一方面 如果选择了晶体振荡器 则要在 OSC1 和 OSC2 之间接一个晶体 用来提供晶体振荡器所 需的回馈和相移 但除此之外就不再需要其它任何外部元件了 另外 可在 OSC1 与 OSC2 之间接一个陶 瓷谐振器(Resonator) 来取代晶体振荡器用来得到频率产生 但是需要分别在 OSC1 和 OSC2 外接一个电容 器 还有一个振荡电路是专门设计给实时时钟(RTC)使用 只能采用 32.768KHZ 的晶体振荡器 只需把晶 体连接 OSC3 与 OSC4 之间 RTC 振荡器 可由置位 QOSC 位(RTCC 的第四位)为 1 加快起振速度 建议在电源开启之后 启动加快起振功能 并在两秒后关闭它 WDT 振荡器为一个 IC 内部自由振荡的 RC 型振荡器 并不需要连接任何外部元件 当系统进入暂停 模式时 系统时钟会立即关闭 但 WDT 振荡器仍会运作 (其振荡周期大约为 90µs@3V) 在掩膜选择时 如欲节省电源 可关闭 WDT 振荡器 看门狗定时器 WDT WDT 的的时钟来源可以在掩膜选择时 置成由专用的 RC 振荡器(WDT 振荡器) 指令时钟(系统时钟 4 分频)或实时时钟振荡器(RTC)来提供 WDT 是用来防止程序的不正常运行或是跳到未知或不希望去的地 址 而导致不可预见的结果 WDT 可以被掩膜选择禁止 如果在关闭状态 所有与 WDT 有关的指令操作 都是没有作用的 S y s te m C lo c k /4 R T C O S C 3 2 7 6 8 H z R O M C o d e O p tio n S e le c tio n fS D iv id e r fS /2 8 P r e s c a le r W D T 1 2 k H z O S C C K T R C K T R T im e - o u t R e s e t fS /2 1 6 W D T C le a r 看门狗定时器 如果 WDT 时钟源为内部 WDT 振荡器的话 那么溢出时间会因为温度 VDD 以及芯片参数的变化而 变化 如果选择了指令时钟为时钟源 在 HALT 状态时 WDT 会停止计数而失去保护功能 只能由外部 逻辑来重新启动系统 因此若单片机工作在干扰很大的环境中 强烈建议使用片内的 RC 振荡器(WDT OSC) 因为 HALT 模式会使系统时钟停止运作 看门狗定时器溢出在正常操作时不仅启动系统复位(Chip Reset) 并置位状态位 TO 在暂停模式中 这溢出会启动热复位(Warm Reset) 但只有程序计数器和状态指针会复位为零 要清除 WDT 的值可以有三 种方法 外部复位(低电平输入到 RES端) 清除看门狗指令或 HALT 指令 清除看门狗指令有 CLR WDT 和 CLR WDT1 CLR WDT2 二组指令 这两组指令中 只能选择其中一组 由掩膜选项决定 如果 选择 CLR WDT 那么只要执行 CLR WDT 指令就会清除 WDT 如果选择 CLR WDT1 和 CLR WDT2 那么二条指令要交替使用才会清除 WDT 否则 WDT 会由于溢出而使系统复位 看门狗定时器的溢出时间周期为 fs/215~fs/216 因为 CLR WDT 或 CLR WDT1 和 CLR WDT2 指令只能清除 WDT 的最后两级锁存器 多功能计时器 HT47R20 包含一个多功能定时器 供看门狗定时器(WDT) 时基 实时时钟产生不同超时时间周期 此多功能定时器由一个八阶除法器及一个七位预分频器所组成 使用的时钟源来自 WDT OSC RTC OSC 或指令时钟(系统时钟四分频) 多功能定时器为 LCD 驱动电路提供可选择的频率信号(范围从 fs/22 fs/28) 并为蜂鸣器输出电路提供可选择的频率信号(范围从 fs/22 fs/29) 频率由掩膜选择 为了正确地显示 建 议选择 4KHZ 作为 LCD 驱动信号 时基 时基提供一个周期性溢出时间中断 它的溢出时间范围为 fs/212~fs/215 由掩膜选项决定 如果时基发 生溢出现象 则其对应的中断请求标志(TBF)会被置位 如果中断允许 且此时堆栈尚有空间 则产生一 个中断服务到 08H 的地址 进入 HALT 模式后 时基仍然工作 并且可以唤醒 HALT 模式(如果看门狗时 钟来源是看门狗振荡器或 RTC 振荡器) 如果在进入 HALT 模式之前将 TBF 置 1 的话 则时基信号 的溢出就不能唤醒系统 Rev. 1.10 12 2002-07-25 HT47R20 fS /2 D iv id e r fS R O M 8 P r e s c a le r L C D D r iv e r f S /2 C o d e O p tio n B u z z e r fS /2 2 ~ fS /2 2 ~ fS /2 8 9 T im e B a s e In te r r u p t 1 5 1 2 fS /2 ~ fS /2 实时时钟 — RTC 实时时钟与时基的操作基本相同 可以产生有规律的内部中断 它的溢出时间范围为 fs/28~fs/215 由 软件设置决定 若将数据写入 RT2 RT1 和 RT0(RTCC 第 2 第 1 第 0 位)之中 会产生不同的溢出时间 如果实时时钟产生溢出的现象 则其对应的中断请求标志(RTF INTC 的第六位)会被置位 如果中断允许 且此时堆栈尚有空间 则产生一个中断服务到 0CH 的地址 实时时钟的溢出时间信号 也可提供给定时/ 计数器做为时钟来源 以便得到更长的溢出时间周期 fS fS /2 D iv id e r 8 P r e s c a le r R T 2 R T 1 R T 0 RT2 0 0 0 0 1 1 1 1 RT1 0 0 1 1 0 0 1 1 8 to 1 M u x . RT0 0 1 0 1 0 1 0 1 8 1 5 fS /2 ~ fS /2 R T C In te rru p t RTC 分频级数 28* 29* 210* 211* 212 213 214 215 注 *不建议使用 暂停模式 HALT 暂停模式是由 HALT 指令来实现的 具有下列功能 关闭系统振荡器 但看门狗定时器振荡器仍会继续运行(如果选择的是看门狗定时器 RC 振荡器 或是 实时时钟振荡器) 不改变 RAM 和寄存器的内容 清除并重新计数看门狗定时器(如果看门狗定时器的时钟来源为看门狗定时器 RC 振荡器 或是实时时 钟振荡器) 所有输入/输出口都维持其原有状态 置位 PD 标志并且清除 TO 标志 可由掩膜选择液晶显示驱动电路仍继续运作(如果选择的是看门狗定时器 RC 振荡器 或是实时时钟振 荡器) 若欲离开暂停模式 可以执行外部复位 中断 PA 口下降沿的信号 或是看门狗定时器溢出 其中 外部复位会造成系统初始化(System Initialization) 看门狗定时器溢出则会发生热复位 我们可以通过检测 TO 和 PD 标志的状态来了解系统复位的原因 欲清除 PD 标志 可通过系统上电或是执行 CLR WDT 指令 来达成 而若要置位 PD 标志 则可执行 HALT 指令 如果发生看门狗定时器超时 不仅会置位 TO 标志 还会产生唤醒 并且复位程序计数器和状态指针 而其它的电路则继续维持其原有的状态 PA 口唤醒和中断这两种方式可以视为正常运行的继续 PA 口上每个位在掩膜选择时都可以单独选择 用来唤醒系统 一旦从输入/输出口启动唤醒之后 程序即从下一条指令重新开始运行 但如果是从中断被 唤醒的话 此时可能会发生两种情况 如果相关中断都被禁止 或该中断被允许且堆栈已用满的话 程序 会从下一条指令重新开始运行 但如果该中断被允许 但堆栈尚未用满 则会产生一般中断响应 当进入 HALT 状态以前某个中断请求位被置位 那么系统不能用这个中断来唤醒 若发生唤醒事件 必需额外花费 1024tSYS(系统时钟周期)的时间 才能重新正常运行 换言之 唤醒 之后即会插入一个等待周期 如果唤醒是由于中断响应的话 实际中断子程序的执行会延时大约一个以上 Rev. 1.10 13 2002-07-25 HT47R20 的周期 如果唤醒事件导致下一条指令执行 一旦插入的等待周期执行完成之后 会立即执行实际中断子 程序 另外 为减少电源损耗 在进入暂停模式之前 应小心处理所有的输入/输出管脚 V D D 复位 总共有四种方法会产生系统复位 如下所示 正常操作时由 RES 引脚发生复位 R E S 在暂停模式由 RES 引脚发生复位 正常操作时由看门狗定时器溢出发生复位 暂停模式中的看门狗定时器溢出与其它系统复位状况不同 因为看门狗定时器溢出会执行热复位 用 来重新设置程序计数器和堆栈指针 并保持其它电路原有的状态 少数寄存器在其它复位状态皆不会改变 大部分寄存器一旦符合复位条件时 会复位成初始的状态 通过检测 PD 和 TO 这两个标志 程序即可区 别出各种不同的系统复位 TO 0 u 0 1 1 PD 0 u 1 u 1 u 注 复位原因 上电时 RES发生复位 正常运行时 RES发生复位 暂停模式下 RES发生复位 正常运行时 WDT 溢出 暂停模式下 WDT 溢出 表示不变 为了保证系统振荡器起振并稳定运行 系统复位(包括上电复位 WDT 溢出或由 RES端复位)或由暂停 状态唤醒时 系统启动定时器(SST)提供了一个额外的延迟时间 共 1024 个系统时钟周期 系统复位时 SST 会被加在复位延时中 由暂停模式唤醒也会加入 SST 延迟 系统复位时各功能单元的状态如下所示 程序计数器 PC 中断 预分频器 看门狗定时器 RTC 时基 定时/计数器 输入/输出口 堆栈指针 SP 000H 禁止 清除 清除 复位后定时器开始计数 关闭 输入模式 指向堆栈的顶端 H A L T W a rm W D T R E S tS S T O S C 1 S S T T im e - o u t S S T 1 0 - b it R ip p le C o u n te r C o ld R e s e t P o w e r - o n D e te c tio n C h ip R e s e t 复位时序 Rev. 1.10 E x te rn a l R E S V D D R e s e t W D T T im e - o u t R e s e t 复位电路结构 14 2002-07-25 HT47R20 有关寄存器的状态如下 寄存器 复位(上电) TMRAH TMRAL TMRC TMRBH TMRBL ADCR PC MP0 MP1 ACC TBLP TBLH STATUS INTC0 INTC1 RTCC PA PB xxxx xxxx xxxx xxxx 0000 1--xxxx xxxx xxxx xxxx 1xxx --00 000H xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx --00 xxxx -000 0000 ---0 ---0 --x0 0111 1111 1111 ---- 1111 注 * 表示 WDT 溢出 (正常运作) uuuu uuuu uuuu uuuu 0000 1--uuuu uuuu uuuu uuuu 1xxx --00 000H uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu --1u uuuu -000 0000 ---0 ---0 --x0 0111 1111 1111 ---- 1111 u 热复位 表示 RES 复位 (正常运作) uuuu uuuu uuuu uuuu 0000 1--uuuu uuuu uuuu uuuu 1xxx --00 000H uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu --uu uuuu -000 0000 ---0 ---0 --x0 0111 1111 1111 ---- 1111 x 不变 表示 RES 复位 (暂停模式) uuuu uuuu uuuu uuuu 0000 1--uuuu uuuu uuuu uuuu 1xxx --00 000H uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu --01 uuuu -000 0000 ---0 ---0 --x0 0111 1111 1111 ---- 1111 WDT 溢出 (暂停模式) uuuu uuuu uuuu uuuu uuuu u--uuuu uuuu uuuu uuuu uuuu --uu 000H* uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu --11 uuuu -uuu uuuu ---u ---u --uu uuuu uuuu uuuu ---- uuuu 未知 定时/计数器 HT47R20 有一个具有 PFD 输出功能的 16 位定时/计数器 可用作双通道的 RC 型 A/D 转换器 ADC/ TM 位(ACDR 寄存器的第 1 位)用来决定定时器 A 和定时器 B 是用作 16 位的定时/计数器还是用作双通道的 RC 型 A/D 转换器 S y s te m C S y s te m C lo A /D C R T C lo c k lo O c k /4 c k u t D a ta B u s M U 1 6 - b it T im e r A X T M R 0 o v e r flo w T R Q P F D T E T N T N T N T O N 0 1 2 P u ls e W id th M e a s u re m e n t M o d e C o n tro l 1 6 - b it T im e r B T N 2 T N 1 T N 0 R e lo a d P A 3 D a ta C T R L 定时/计数器 当 ADC/ TM 为 0 时 TMRAL TMRAH TMRBL TMRBH 组成了 16 位的定时/计数器 TMRBL 和 TMRBH 组成一个预置寄存器 分别用来存放定时/计数器初始值的低字节和高字节 当定时/计数器采用内部时钟时 可以有三个时钟来源 分别是系统时钟 系统时钟/4 或 RTC 超时时 钟 定时/计数器的时钟来源可以由外部输入 外部时钟输入允许用户去计算外部事件 测量外部 RC 型的 A/D 时钟 测量时间长度或脉宽 或产生 一个精确的时基信号 总共有 六个 与定时 /计 数器工 作模 式有关 的寄 存器 分别 是 TMRAH([20H]) TMRAL([21H]) TMRC([22H]) TMRBH([23H]) TMRBL([24H])和 ADCR([25H]) 若写入 TMRBL 只能将数据写入低字节 内部缓冲器中 但若写入的是 TMRBH 则可将数据和低字节内部缓冲器的内容同时写入定时/计数器预置寄 存器(16 位)之中 改变定时/计数器预置寄存器的内容 只可被写入 TMRBH 之动作改变 但若写入 TMRBL 则可维持定时/计数器预置寄存器的内容不受改变 同样的 若读取 TMRAH 则可将 TMRAL 传送至低字节 内部缓冲器之中 以避免发生计时错误 然而 若读取 TMRAL 则只读回低字节内部缓冲器的内容 换 言之 定时/计数器的低字节数据并不能直接读取 若欲读取该低字节的数据 必须先读取 TMRAH 以便 将定时/计数器的低字节数据传送至内部低字节缓冲器之中 如果定时/计数器正在计数 那么 TMRAH TMRAL TMRBH TMRBL 不能读写 为了避免定时/ Rev. 1.10 15 2002-07-25 HT47R20 计数器 A 和定时/计数器 B 之间产生冲突 应在定时/计数器关闭的情况下 使用指令 MOV 访问寄存器 TMRAH TMRAL TMRBH TMRBL TMRC 为定时/计数器控制寄存器 用来定义定时/计数器的某些选项 定时/计数器的控制寄存器可以 定义定时/计数器的工作模式 计数的允许或禁止以及计数的触发沿 名称 位 0~2 TE 3 TON 4 TN0 TN1 TN2 5 6 7 功能 未定义 读取时为 0 定义定时/计数器 TMR 作用沿(0=上升沿作用 1=下降 沿作用) 允许/禁止定时器计数(0=禁止 1=允许) 定义操作方式(TN2,TN1,TN0) 000=定时器模式(系统时钟) 001=定时器模式(系统时钟/4) 010=定时器模式(RTC 输出) 011=A/D 时钟模式(由 ADCR 寄存器决定 RC 振荡) 100=计数器模式(外部时钟) 101=脉冲宽度测量模式(系统时钟/4) 110=未定义 111=未定义 TMRC 寄存器 写入定时器 B 就可以将定时/计数器的初始值放到预置寄存器中 而读取定时器 A 就可以得到定时/计 数器的内容 定时器 B 是定时/计数器的初始值预置寄存器 TN0 TN1 和 TN2 用来定义操作模式 计数器模式是用来计数外部事件 这表示时钟来源为外部 TMR 引脚的输入 A/D 时钟模式是用来计数外部 A/D 时钟 RC 振荡模式由寄存器 ADCR 来决定 定时器模式 则作为普通定时器使用 其时钟来源为内部各种时钟 最后 脉冲宽度测量模式能够对外部引脚 TMR 的 高电平或低电平的持续时间进行计数 计数的时钟来源为指令时钟 在计数器 A/D 时钟或内部定时器模式下 一旦定时/计数器开始计数即从定时/计数器的现行内容 (TMRAH 和 TMRAL)开始计数至 FFFFH 若发生溢出 计数器即从定时/计数器预置寄存器(TMRBH 和 TMRBL)重新装入加载值 并同时置位中断请求标志(TF INTC1 的第四位) 在脉冲宽度测量模式下 当 TON 和 TE 位的值都为 1 时 如果 TMR 收到由高电平到低电平(如果 TE 位的值为 0 则为由低电平到高电平)的转变信号 计数器就会开始数 直到 TMR 引脚回到原来的电平 为止 并且会将 TON 位清零 测量的结果会依然存放在定时/计数器之中 也就是说一次只能计数一次脉 冲的宽度 而当 TON 位重新置位为 1 只要 TMR 收到跳变脉冲 测量就会再次执行下去 在脉冲测量 模式中 定时/计数器并不会根据逻辑电压来计数 其根据的标准为信号的转变沿 一旦发生计数溢出 计 数器会从定时/计数器加载寄存器重新装入初值 同时还会发出中断请求 这种情况和定时和计数这两个模 式一样 若欲启动计数器运行 只要将定时器启动位(TON TMRC 的第四位)的值设为 1 即可 在脉冲宽度 测量模式中 TON 位在测量周期完成后 会自动被清除 但在其它三种模式中 TON 位只可以用指令清 除 定时/计数器的溢出可作为唤醒的信号或由掩膜选项设定为 PA 的 PFD 输出 不管是何种操作模式 只 要将 0 写入 ETI 位中即可将相对的中断服务禁止 当选择 PFD 功能时 执行 CLR PA.3 指令可以允 许 PFD 输出 而执行 SET PA.3 指令则禁止 PFD 输出 并且 PA.3 输出为低电平 若在定时/计数器关闭的情况下 将数据写入定时/计数器的预置寄存器同时也会将该数据重新载入定 时/计数器之中 但若定时/计数器已经开启 写入定时/计数器的数据只会保存在定时/计数器的预置寄存器 中 这时定时/计数器并不会马上被改变而会继续计数下去 直到发生溢出为止 此时再由加载寄存器装入 新的初始值 一旦定时/计数器(读取 TMRAH)的数据被读取 会将时钟禁止 以避免发生错误 将时钟禁止可能会 导致计数错误 所以程序编写工程师必须考虑清楚才行 我们强烈建议在打开定时/计数器前先将要加载的数据写入到 TMRBL TMRBH TMRAL 和 TMRAH 中去 因为在系统初始化后 TMRBL TMRBH TMRAL 和 TMRAH 的值是未知的 如果定时/计数器是打开的 那么 TMRBL TMRBH TMRAL 和 TMRAH 最好不要进行读写操作 只 有在定时/计数器关闭并且使用 MOV 指令时 才能对这四个寄存器进行读写操作 Rev. 1.10 16 2002-07-25 HT47R20 下例为定时/计数器的定时式(禁止中断) clr tmrc clr adcr.1 ; 设置为定时/计数器模式 clr intc1.4 ; 清除定时/计数器的中断请求标志位 mov a, low (65536-1000) ; 置定时器初值 mov tmrbl, a ; 计数1000然后定时器溢出 mov a, high (65536-1000) mov tmrbh, a mov a, 00110000b ; 定时器时钟来源为T1并且允许定时器计数 mov tmrc, a p10: clr wdt snz intcl.4 ; 判断定时/计数器的中断请求标志位 jmp p10 clr intcl.4 ; 清除定时/计数器的中断请求标志位 ; 程序继续 A/D 转换 HT47R20 有两个 RC 型的 A/D 转换通道 包含两个可编程 16 位向上计数的计数器 计数器 A 的时钟 来源可以是系统时钟 指令时钟或 RTC 输出时钟 计数器 B 的时钟来源可以是外部 RC 振荡电路 当 ADC/ TM 位为 1 时(寄存器 ADRC 的第 1 位) TMRAL TMRAH TMRBL TMRBH 组成了 A/D 转换 器 标志 位 OVB/ OVA 0 ADC/ TM 1 — 2~3 M0 M1 M2 M3 4 5 6 7 功能 在 RC 型 A/D 转换模式下 该位用来定义定时/计数 器中断来自定时器 A 溢出或定时器 B 溢出(0=定时器 A 溢出 1=定时器 B 溢出) 在定时/计数器模式下 该位空缺 设定定时/计数器或 RC 型 A/D 转换器允许(0=定时/ 计数器允许 1=A/D 转换器允许) 未定义 读取时为 0 定义 A/D 转换器的工作模式(M3,M2,M1,M0) 0000=IN0 外部时钟输入模式 0001=RS0~CS0 振荡器(参考电阻和参考电容) 0010=RT0~CS0 振荡器(传感器电阻和参考电容) 0011=CRT0~CS0 振荡器(传感器电阻和参考电容) 0100=RS0~CRT0 振荡器(参考电阻和传感器电容) 0101=RS1~CS1 振荡器(参考电阻和参考电容) 0110=RT1~CS1 振荡器(传感器电阻和参考电容) 0111=IN1 外部时钟输入模式 1xxx=未定义 ADCR 寄存器 A/D 转换定时器 B 的时钟来源可以来自通道 0(IN0 外部时钟输入模式 RS0~CS0 振荡器 RT0~CS0 振荡器 CRT0~CS0 振荡器(CRT0 为一电阻)或 RS0~CRT0 振荡器(CRT0 为一电容))或来自通道 1(RS1~CS1 振荡器 RT1~CS1 振荡器或 IN1 外部时钟输入) 定时器 A 的时钟来源可以通过寄存器 TMRC 选择为系统 时钟 指令时钟或是 RTC 预分频输出时钟 总共有六个与 A/D 转换器有关的寄存器 分别是 TMRAH TMRAL TMRC TMRBH TMRBL 和 ADRC 内部定时器时钟输入到 TMRAH 和 TMRAL 中 A/D 时钟输入到 TMRBH 和 TMRBL 中 OVB/ OVA 位(ADCR 寄存器的第 0 位)用来设置定时器 A 或定时器 B 溢出作为定时/计数器中断信号 在 A/D 转换模 式下 当定时器 A 或定时器 B 溢出时 TON 位被清除并且计数器停止计数 写入 TMRAH/TMRBH 就是对 定时器 A/定时器 B 设置初值 读取 TMRAH/TMRBH 就是读取定时器 A/定时器 B 的内容 写入 TMRAL/TMRBL 只能将数据写入内部缓冲器的低位字节 但若写入的是 TMRAH/TMRBH 则可将数据和 Rev. 1.10 17 2002-07-25 HT47R20 低字节内部缓冲器的内容写入定时器 A/定时器 B(16 位)之中 改变定时 A/定时器 B 的内容 只可被写入 TMRAH/TMRBH 之动作改变 但若写入 TMRAL/TMRBL 则可维持定时 A/定时器 B 的内容不受改变 若读取 TMRAH/TMRBH 则可将 TMRAL/TMRBL 传送至低字节内部缓冲器之中 以避免发生计时错 误 然而 若读取 TMRAL/TMRBL 则只读回低字节内部缓冲器的内容 换言之 定时器 A/定时器 B 的 低字节数据并不能直接读取 若欲读取该低字节的数据 必须先读取 TMRAH/TMRBH 以便将定时/计数 器的低字节数据传送至内部低字节缓冲器之中 寄存器 ADCR 的 4~7 位用来决定选取哪一组电阻 电容来组成 TMRBH 和 TMRBL 的振荡输入 寄存器 TMRC 的 TN0 TN1 TN2 用来决定定时器 A 的时钟来源 定时器 A 的时钟来源可以是系统 时钟 指令时钟或实时时钟(Real Time Clock)分频器时钟 当 TON 位(TMRC 的第 4 位)置为 1 时 定时器 A 和定时器 B 就开始计数 直到定时器 A 或定时 器 B 发生溢出 此时 定时/计数器便置位中断请求标志(TF INTC1 的第 4 位) 同时计数器 A 和计数器 B 停止计数并 TON 位被清为 0 当 TON 位(TMRC 的第 4 位)置为 1 时 那么 TMRBL TMRBH TMRAL 和 TMRAH 不能进行读 写操作 只有在定时/计数器关闭并且使用 MOV 指令时 才能对这四个寄存器进行读写操作 下例是 RC 型 AD 转换模式(定时器 A 溢出) clr tmrc clr adcr.1 ; 设置定时器模式 clr intc1.4 ; 清除定时/计时器中断请求标志位 mov a, low (65536-1000) ; 置TIMERA初值 mov tmral, a ; 计数1000后溢出 mov a, high (65536-1000) mov tmrah, a mov a, 00010010b ; RS0~CS0; 设置RC型ADC模式; 设置TIMERA溢出 mov adcr,a mov a, 00h ; 置TIMERB初值 mov tmrbl, a mov a, 00h mov tmrbh, a mov a, 00110000b ; TIMERA的时钟来源为T1并且允许计数 mov tmrc, a p10: clr wdt snz intcl.4 ; 判断定时/计数器中断请求标志位 jmp p10 clr intcl.4 ; 清除定时/计数器中断请求标志位 ; 程序继续 下例是 RC 型 AD 转换模式(定时器 B 溢出) clr tmrc clr adcr.1 ; 设置定时器模式 clr intc1.4 ; 清除定时/计数器中断请求标志位 mov a, 00h ; 置TIMERA初值 mov tmrbl, a mov a, 00h mov tmrbh, a mov a, 00010011b ; RS0~CS0; 设置RC型ADC模式; 设置TIMERB溢出 mov adcr,a mov a, low (65536-1000) ; 置TIMERB初值 mov tmrbl, a ; 计数1000后溢出 mov a, high (65536-1000) mov tmrbh, a mov a, 00110000b ; TIMERA的时钟来源为T1并且允许计数 mov tmrc, a p10: clr wdt Rev. 1.10 18 2002-07-25 HT47R20 snz jmp clr intcl.4 p10 intcl.4 ; 判断定时/计数器中断请求标志位 ; 清除定时/计数器中断请求标志位 ; 程序继续 S 1 S y s te m C lo c k O V B /O V A = 0 S 2 S y s te m T im e r A C lo c k /4 In te rru p t S 3 R T C O u tp u t T O N O V B /O V A = 1 T im e r B R e s e t T O N S 1 2 S 1 3 S 4 S 5 IN 0 C S 0 S 6 S 7 S 8 C R T 0 R S 0 S 9 R T 0 S 1 0 IN 1 S 1 1 C S 1 R S 1 R T 1 T N 2 T N 1 T N 0 S 1 S 2 S 3 M 3 M 2 M 1 M 0 S 4 S 5 S 6 S 7 S 8 S 9 S 1 0 S 1 1 S 1 2 S 1 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 O th e r N o te : 0 = o ff, 1 = o n 1 0 0 1 0 0 0 0 1 0 1 0 N o te : 0 = o ff, 1 = o n RC 型 A/D 转换器 输入/输出口 HT47R20 有一个 8 位双向输入/输出口和一个 4 位的输入口 PA 和 PB 分别对应 RAM 中的[12H]和 [14H]] PA 的高半字节引脚经常是带有上拉电阻的 NMOS 输入/输出 PA 的低半字节引脚可由掩膜选择 设定为 NMOS 输入/输出或 CMOS 输出 PA 的每个引脚都可以具有唤醒功能 并且 PA 的低字节位可由掩 膜选择设定为有或无上拉电阻 PB 只能用于输入 且每个引脚都可由掩膜选择设定有或无上拉电阻 就 PA PB 口作为输入而言 并不具有锁存功能 也就是说 所有输入在 MOV A [m]指令(m=12H 或 m=14H) 的 T2 上升沿时会被重新读入 就 PA 口作为输出而言 所有数据被锁存住 而且不受任何影响 直到输出 锁存被写入新的值为止 PA 口某个引脚在当成输入线使用时必须先设定相对应的为 1 以便关闭 NMOS 也就是先执行 MOV A,0FFH 和 MOV [12H],A 指令关闭 NMOS 然后执行 MOV A,[12] 指令来读取寄存器的数据 在系统复位之后 这些引脚输入若不是高电平即为浮接(由掩膜选项决定) 这些输出锁存的每个位都 可由 SET [m].i 置位或是以 CLR [m].i 清除 有些指令会先输入数据 然后才输出运行结果 举例来说 SET [m].i CLR [m].i CPL [m]和 CPLA[m] 这些指令会先将整个口状态读入 CPU 中 接着执行所定义的运算 最后再将执行的结果写入锁存或是累 加器中 对 PA 口的输出锁存器不能使用这些指令 因为这些指令可能会引起输入和输出引脚的混乱(当输 入引脚为低电平时) Rev. 1.10 19 2002-07-25 HT47R20 V D D V V D D D D W E A K P u ll- u p D D a ta B u s C K W R B Z O p tio n Q S O p tio n U C K W R B Z O p tio n Q S O p tio n P A 1 /B Z Q M U C h ip R e s e t X C h ip R e s e t D D a ta B u s M D D W E A K P u ll- u p P A 0 /B Z Q V X B Z S ig n a l M S y s te m M U R e a d P a th U R e a d P a th X X S y s te m W a k e -u p W a k e -u p O p tio n O p tio n PA0/BZ PA1/ BZ 输入/输出口 IR D D A T A B U S S Q M W E A K P u ll- u p M a s k O p tio n U C h ip R e s e t P F D V D D Q C K W R V D D O p tio n X M a s k O p tio n P A 3 /P F D S ig n a l M U R e a d P a th X S y s te m W a k e -u p M a s k O p tio n PA2/IR PA3/PFD 输入/输出口 V D D W E A K P u ll- u p Q D D a ta B u s C K W r ite S V P A 4 ~ P A 7 Q D D W E A K P u ll- u p C h ip R e s e t R e a d I/O S y s te m R e a d D a ta W a k e -u p D a ta B u s O p tio n PA4~PA7 输入/输出口 Rev. 1.10 P B 0 ~ P B 3 PB 输入口 20 2002-07-25 HT47R20 LCD 液晶显示存储器 HT47R20 为液晶显示提供一块嵌入式的数据存储区 LCD 的显示寄存区设计为 20 3bits 如果系统 设置 LCD 为 19 4 的输出显示 那么 LCD 显示存储区域的 53H 无法读写 它的存储区域为 RAM 的 BANK1 内的 40H~53H 存储器段指针(BP RAM 的 04H 单元)是在 RAM 和 LCD 显示存储器之间的切换开关 当 任何数据写入 40H~53H BP 被置 1 任何数据写入 40H~53H 将会影响 LCD 的显示 当 BP 被清 0 意味着访问通用数据存储器 LCD 只能通过 MP1 进行间接寻址来访问 当数据被写入显示数据区域 这 些数据自动地被 LCD 驱动器读取来产生相应的 LCD 驱动信号 把 1 或 0 写入显示存储器的相应位 来控制显示或不显示 图示表达了显示存储器和 HT47R20 上 LCD 显示模式之间的对应显示关系 4 0 H C O M 4 1 H 4 2 H 4 3 H 5 1 H 5 2 H 5 3 H B it 0 S E G M E N T 0 1 1 2 2 3 3 0 1 2 3 1 7 1 8 1 9 显示存储器(Bank 1) 液晶显示驱动输出 HT47R20 的 LCD 液晶显示驱动器数 可通过掩膜选择为 20×2 20×3 或 19×4(1/2 1/3 1/4 占空比) LCDd 驱动偏压方式可以为电容式偏压或电阻式偏压 在 C1 和 C2 引脚之间要接上一个电容 可以通过掩膜选择设置为 1/2 偏压还是 1/3 偏 压 如果选择了 1/2 偏压 则要在 V2 脚和地之间接上一个电容 如果是 1/3 偏压 则要在 V1 和 V2 脚上分别接上一个电容 参见参考电路 如果 选择了电阻式偏压 则不需要外接电容 Rev. 1.10 21 1 /3 b ia s 1 /2 b ia s C 1 C 1 C 2 C 2 V 1 V L C D V 2 V V 1 D D V L C D V 2 2002-07-25 V D D HT47R20 D u r in g a R e s e t P u ls e : C O M 0 ,C O M 1 ,C O M 2 A ll L C D d r iv e r o u tp u ts N o r m a l O p e r a tio n M o d e : * * * C O M 0 C O M 1 C O M 2 * L C D s e g m e n ts o n C O M 0 ,1 ,2 s id e s u n lig h te d O n ly L C D s e g m e n ts o n C O M 0 s id e lig h te d O n ly L C D s e g m e n ts o n C O M 1 s id e lig h te d O n ly L C D s e g m e n ts o n C O M 2 s id e lig h te d L C D s e g m e n ts o n C O M 0 ,1 s id e s lig h te d L C D s e g m e n ts o n C O M 0 ,2 s id e s lig h te d L C D s e g m e n ts o n C O M 1 ,2 s id e s lig h te d L C D s e g m e n ts o n C O M 0 ,1 ,2 s id e s lig h te d H a lt M o d e : C O M 0 ,C O M 1 ,C O M 2 A ll L C D d r iv e r o u tp u ts V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S V L 1 /2 V S C D V L 1 /2 V S V L 1 /2 V S C D S C D S V L C D V L C D C D S C D S V L C D C D S V L C D C D S V L C D V L C D C D S V L C D C D S V L C D C D S V L C D C D S V L C D C D S V L C D C D S V L C D C D S S V L C D V L C D C D S V L C D N o te : " * " O m it th e C O M 2 s ig n a l, if th e 1 /2 d u ty L C D is u s e d . Rev. 1.10 22 2002-07-25 HT47R20 V A V B V C C O M 0 V S S V A V B V C C O M 1 V S S V A V B V C C O M 2 V S S V A V B C O M 3 V C V S S V A V B V C L C D s e g m e n ts O N C O M 2 s id e lig h te d V S S N o te : 1 /4 d u ty , 1 /3 b ia s , C ty p e : " V A " 3 /2 V L C D , " V B " V L C D , " V C " 1 /2 V L C D 1 /4 d u ty , 1 /3 b ia s , R ty p e : " V A " V L C D , " V B " 2 /3 V L C D , " V C " 1 /3 V L C D Rev. 1.10 23 2002-07-25 HT47R20 低电压复位/检测 HT47R20 有低电压检测(LVD)和低电压复位(LVR)电路 可以通过掩膜设置来允许或禁止这个功能 可 以通过掩膜选择来设置 LVD 功能 一旦通过掩膜选择允许了 LVD 功能 则用户可以通过 RTCC.3 来允许/ 禁止(1/0)使用 LVD 电路 并且可以通过 RTCC.5 来读取 LVD 检测的状态 否则的话 LVD 功能是无效的 当 LVR 执行系统复位功能时其功能和外部复位信号的功能是一样的 在 HALT 模式中 LVR 是无效的 寄存器 位号 2 RT0~RT2 0 3 4 5 RTCC (09H) 6 标号 LVDC* QOSC LVDO 读/写 复位 读/写 0 读/写 读/写 读/写 0 0 0 7 功能 8选1的多路选择器控制输入以选择实时时钟的 前置分频输出 低电压检测使能位 0 除能 1 使能 32768振荡器是否快速起振 0/1 快/慢起振 低电压检测输出(1/0) 1 低电压检测到 未使用 读出为 0 RTCC 寄存器 注 * 位如果这项功能是有效的那么参考电压也是有效的 否则参考电压由 LVR 掩膜选择决定 LVR LVD 选择和 LVDC 之间的关系见下表 LVD EN EN EN EN DIS DIS LVR EN EN DIS DIS EN DIS LVDC ON OFF ON OFF X X VREF 电压 EN EN EN DIS EN DIS LVR 比较器 EN EN DIS DIS EN DIS LVD 比较器 EN DIS EN DIS DIS DIS 蜂鸣器 HT47R20 单片机提供了一对与 PA0 PA1 共用引脚的蜂鸣器输出 分别是 BZ 及 BZ 该蜂鸣器的输 出允许与输出频率 均可由掩膜选项决定 如果蜂鸣器输出允许 用软件指令同时置 PA.0 和 PA.1 为 0 则启动蜂鸣器输出 如果置 PA.0=1 则 关闭此蜂鸣器 如果置 PA.0=0 且 PA.1=1 则只有蜂鸣器 BZ 输出 而蜂鸣器 BZ 被关闭 PA1 0 (CLR PA.1) 1 (SET PA.1) X PA0 0 (CLR PA.0) 0 CLR PA.0) 1 SET(PA.0) 功能 PA0=BZ PA1= BZ PA0= BZ PA1=0 PA0=0 PA1=0 蜂鸣器 红外载波发射 HT47R20 具有红外载波发射功能 可以很方便的与红外线二极管相连 其输出与 PA2 共用一个引脚 其输出允许由掩膜选项决定 如果红外载波输出允许 置 PA2 为 0 可以打开红外载波输出 置 PA2 为 1 则关闭红外载波输出 并且 PA2 口输出为低电平 红外载波的输出频率为系统时钟的 12 分频 其占空比为 1/4 PA2 0 (CLR PA2) 1 (SET PA2) Rev. 1.10 功能 PA2=红外载波输出 PA2=0 24 2002-07-25 HT47R20 可编程分频器 — PFD PFD 的输出与 PA3 共用一个引脚 由掩膜选项决定 如果 PFD 输出允许 置 PA3 为 0 (CLR PA.3)可以打开 PFD 输出 置 PA3 为 1 则关闭 PFD 输出 并且 PA3 口输出为低电平 1 1 PFD 输出频率= 2 × 定时器溢出时间 PA3 0 (CLR PA3) 1 (SET PA3) 功能 PA3=PFD 输出端 PA3=0 掩膜选择 下表列出了 HT47R20 的掩膜选择 这些选择必须设定清楚 编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Rev. 1.10 以确保系统运作正常 掩膜选择 振荡器类型选择 决定系统时钟为 RC 振荡器 晶体振荡器还是 RTC 振荡器 看门狗定时器 实时时钟 时基的振荡源 总共有三种不同的选择 分别为 WDT 振荡器 RTC 振荡器或系统时钟/4 看门狗定时器允许/禁止选择 看门狗定时器可由掩膜选择设置为允许或禁止 清除看门狗定时器次数选择 定义如何以指令清除看门狗定时器 One time 表 示 CLR WDT 指令能够清除看门狗定时器 Two times 表示需要交互执行 CLR WDT1 和 CLR WDT2 这两个指令才可清除看门狗定时器 时基的超时时间选择 超时时间范围为 fs/212~fs/215 fs 为 WDT 的时钟来源 蜂鸣器输出频率选择 共有八种蜂鸣器输出频率 为 fs/22~fs/29 fs 为 WDT 的时 钟来源 唤醒选择 定义唤醒功能的选择 所有 PA 输入/输出管脚都可选成有能力将系统 从暂停模式唤醒 上拉电阻选择 决定在 PA 口低半字节是否带有上拉电阻 PA 口 CMOS 或 NMOS 架构选择 PA 口的低半字节可分别选择为 CMOS 或是 NMOS 架构 如果是 CMOS 架构 只能当作输出使用 如果是 NMOS 架构 则 可以当作双向输入/输出使用 输入/输出管脚与其它功能共用选择 PA0/BZ PA1/BZ PA0 和 PA1 可设置为一般的输入/输出管脚 或是蜂鸣器的输 出口 PA2/IR PA2 可设置为一般输入/输出管脚或红外线输出口 PA3/PFD PA3 可设置为一般的输入/输出管脚或 PFD 的输出口 LCD common 选择 有两种形式可以选择 3 common(1/3 周期 1/2 偏压)或 4common(1/4 周 期 1/3 偏 压 ) 如 果 选 择 4 common 则 segment 输 出 端 (SEG19/COM3)要设为 common 输出 COM3 LCD 驱动时钟选择 共有七种频率可供 LCD 选择 fs/22~ fs/28, fs 表示 WDT 的 时钟源 暂停模式下 LCD 的开关状态选择 LCD 在暂停模式下的开关状态由掩膜选项设定 LVD 允许选择 LVR 允许选择 25 2002-07-25 HT47R20 应用电路 R C o s c illa to r a p p lic a tio n V C r y s ta l o s c illa to r a p p lic a tio n D D C 1 O S C 1 O S C 1 S E G 0 ~ 1 8 C O M 0 ~ 3 2 4 k W ~ 1 M W L C D P A N E L S E G 0 ~ 1 8 C O M 0 ~ 3 C 2 L C D P A N E L O S C 2 fS Y S /4 O p e n D r a in V D D O S C 2 V L C D C 1 1 0 0 k W V 1 H T 4 7 R 2 0 0 .1 m F V L C D D D C 1 1 0 0 k W 0 .1 m F 1 0 k W 0 .1 m F H T 4 7 R 2 0 0 .1 m F O S C 3 0 .1 m F P A 0 ~ P A 7 O S C 4 P B 0 ~ P B 3 IN 1 C S 1 C S 0 R S 0 R S 1 R S 1 C R T 0 R T 1 0 .1 m F V 1 V 2 0 .1 m F 0 .1 m F P A 0 ~ P A 7 P B 0 ~ P B 3 IN 0 IN 1 C S 1 L C D P o w e r S u p p ly C 2 R E S V 2 O S C 3 O S C 4 V C 2 R E S 1 0 k W L C D P o w e r S u p p ly R T 1 R T 0 IN 0 C S 0 R S 0 C R T 0 R T 0 3 2 7 6 8 H z C r y s ta l o s c illa to r a p p lic a tio n O S C 1 S E G 0 ~ 1 8 C O M 0 ~ 3 L C D P A N E L O S C 2 V D D V L C D L C D P o w e r S u p p ly 1 0 0 k W C 1 R E S 0 .1 m F C 2 1 0 k W H T 4 7 R 2 0 0 .1 m F V 1 O S C 3 V 2 0 .1 m F 0 .1 m F O S C 4 P A 0 ~ P A 7 P B 0 ~ P B 3 IN 0 IN 1 C S 1 R S 1 R T 1 Note: Rev. 1.10 C S 0 R S 0 C R T 0 R T 0 C1=C2=300pF if fSYS<1MHz Otherwise, C1=C2=0 26 2002-07-25 HT47R20 指令集摘要 助记符 算术运算 ADD A,[m] ADDM A,[m] ADD A,x ADC A,[m] ADCM A,[m] SUB A,x SUB A,[m] SUBM A,[m] SBC A,[m] SBCM A,[m] DAA [m] 逻辑运算 AND A,[m] OR A,[m] XOR A,[m] ANDM A,[m] ORM A,[m] XORM A,[m] AND A,x OR A,x XOR A,x CPL [m] CPLA [m] 递增和递减 INCA [m] INC [m] DECA [m] DEC [m] 移位 RRA [m] RR [m] RRCA [m] RRC [m] RLA [m] RL [m] RLCA [m] RLC [m] 数据传送 MOV A,[m] MOV [m],A MOV A,x 位运算 CLR [m].i SET [m].i Rev. 1.10 说明 指令周期 影响标志位 ACC 与数据存储器相加 结果放入 ACC ACC 与数据存储器相加 结果放入数据存储器 ACC 与立即数相加 结果放入 ACC ACC 与数据存储器 进位标志相加 结果放入 ACC ACC 与数据存储器 进位标志相加 结果放入数据存储器 ACC 与立即数相减 结果放入 ACC ACC 与数据存储器相减 结果放入 ACC ACC 与数据存储器相减 结果放入数据存储器 ACC 与数据存储器 进位标志相减 结果放入 ACC ACC 与数据存储器 进位标志相减 结果放入数据存储器 将加法运算中放入 ACC 的值调整为十进制数 并将结果放 入数据存储器 1 1(1) 1 1 1(1) 1 1 1(1) 1 1(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(1) C ACC 与数据存储器做 与 运算 结果放入 ACC ACC 与数据存储器做 或 运算 结果放入 ACC ACC 与数据存储器做 异或 运算 结果放入 ACC ACC 与数据存储器做 与 运算 结果放入数据存储器 ACC 与数据存储器做 或 运算 结果放入数据存储器 ACC 与数据存储器做 异或 运算 结果放入数据存储器 ACC 与立即数做 与 运算 结果放入 ACC ACC 与立即数做 或 运算 结果放入 ACC ACC 与立即数做 异或 运算 结果放入 ACC 对数据存储器取反 结果放入数据存储器 对数据存储器取反 结果放入 ACC 1 1 1 1(1) 1(1) 1(1) 1 1 1 1(1) 1 Z Z Z Z Z Z Z Z Z Z Z 结果放入 ACC 结果放入数据存储器 结果放入 ACC 结果放入数据存储器 1 1(1) 1 1(1) Z Z Z Z 数据存储器右移一位 结果放入 ACC 数据存储器右移一位 结果放入数据存储器 带进位将数据存储器右移一位 结果放入 ACC 带进位将数据存储器右移一位 结果放入数据存储器 数据存储器左移一位 结果放入 ACC 数据存储器左移一位 结果放入数据存储器 带进位将数据存储器左移一位 结果放入 ACC 带进位将数据存储器左移一位 结果放入数据存储器 1 1(1) 1 1(1) 1 1(1) 1 1(1) 无 无 C C 无 无 C C 将数据存储器送至 ACC 将 ACC 送至数据存储器 将立即数送至 ACC 1 1(1) 1 无 无 无 清除数据存储器的位 置位数据存储器的位 1(1) 1(1) 无 无 递增数据存储器 递增数据存储器 递减数据存储器 递减数据存储器 27 2002-07-25 HT47R20 助记符 转移 JMP SZ SZA SZ SNZ SIZ SDZ SIZA 说明 addr [m] [m] [m].i [m].i [m] [m] [m] SDZA [m] CALL addr RET RET A,x RETI 查表 TABRDC [m] TABRDL [m] 其它指令 NOP CLR [m] SET [m] CLR WDT CLR WDT1 CLR WDT2 SWAP [m] SWAPA [m] HALT 无条件跳转 如果数据存储器为零 则跳过下一条指令 数据存储器送至 ACC 如果内容为零 则跳过下一条指令 如果数据存储器的第 i 位为零 则跳过下一条指令 如果数据存储器的第 i 位不为零 则跳过下一条指令 递增数据存储器 如果结果为零 则跳过下一条指令 递减数据存储器 如果结果为零 则跳过下一条指令 递增数据存储器 将结果放入 ACC 如果结果为零 则跳 过下一条指令 递减数据存储器 将结果放入 ACC 如果结果为零 则跳 过下一条指令 子程序调用 从子程序返回 从子程序返回 并将立即数放入 ACC 从中断返回 读取当前页的 ROM 内容 读取最后页的 ROM 内容 并送至数据存储器和 TBLH 并送至数据存储器和 TBLH 空指令 清除数据存储器 置位数据存储器 清除看门狗定时器 预清除看门狗定时器 预清除看门狗定时器 交换数据存储器的高低字节 结果放入数据存储器 交换数据存储器的高低字节 结果放入 ACC 进入暂停模式 指令周期 影响标志位 2 1(2) 1(2) 1(2) 1(2) 1(3) 1(3) 无 无 无 无 无 无 无 1(2) 无 1(2) 无 2 2 2 2 无 无 无 无 2(1) 2(1) 无 无 1 1(1) 1(1) 1 1 1 1(1) 1 1 无 无 无 TO,PD TO(4),PD(4) TO(4),PD(4) 无 无 TO,PD x 立即数 m 数据存储器地址 A 累加器 i 第 0~7 位 addr 程序存储器地址 影响标志位 不影响标志位 (1) 如果数据是加载到 PCL 寄存器 则指令执行周期会被延长一个指令周期(四个系统时钟) (2) 如果满足跳跃条件 则指令执行周期会被延长一个指令周期(四个系统时钟) 否则指令执行周期不会被延长 (3) (1) (2) 和 (4) 如果执行 CLW WDT1 或 CLR WDT2 指令后 看门狗定时器被清除 则会影响 TO 和 PD 标志位 否则不会 影响 TO 和 PD 标志位 注 Rev. 1.10 28 2002-07-25 HT47R20 ADC A, [m] 说明 运算过程 影响标志位 累加器与数据存储器 进位标志相加 结果放入累加器 本指令把累加器 数据存储器值以及进位标志相加 结果存放到累加器 ACCÅACC+[m]+C TC2 ADCM A, [m] 说明 运算过程 影响标志位 AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C 累加器与数据存储器做 与 运算 结果放入累加器 本指令把累加器值 数据存储器值做逻辑与 结果存放到累加器 ACCÅACC “AND” [m] TC2 Rev. 1.10 Z 累加器与数据存储器相加 结果放入数据存储器 本指令把累加器 数据存储器值相加 结果存放到数据存储器 [m]ÅACC+[m] TC2 AND A, [m] 说明 运算过程 影响标志位 OV 累加器与立即数相加 结果放入累加器 本指令把累加器值和立即数相加 结果存放到累加器 ACCÅACC+x TC2 ADDM A, [m] 说明 运算过程 影响标志位 PD 累加器与数据存储器相加 结果放入累加器 本指令把累加器 数据存储器值相加 结果存放到累加器 ACCÅACC+[m] TC2 ADD A, x 说明 运算过程 影响标志位 TO 累加器与数据存储器 进位标志相加 结果放入数据存储器 本指令把累加器 数据存储器值以及进位标志相加 结果存放到存储器 [m]ÅACC+[m]+C TC2 ADD A, [m] 说明 运算过程 影响标志位 TC1 TC1 TO PD OV 29 Z AC C 2002-07-25 HT47R20 AND A, x 说明 运算过程 影响标志位 累加器与立即数做 与 运算 结果放入累加器 本指令把累加器值 立即数做逻辑与 结果存放到累加器 ACCÅACC “AND” x TC2 ANDM A, [m] 说明 运算过程 影响标志位 addr 运算过程 TO PD OV Z AC C 累加器与数据存储器做 与 运算 结果放入数据存储器 本指令把累加器值 数据存储器值做逻辑与 结果存放到数据存储器 ACCÅACC “AND” [m] TC2 CALL 说明 TC1 TC1 TO PD OV Z AC C 子程序调用 本指令直接调用地址所在处的子程序 此时程序计数器加一 将此程序计数器值存到堆 栈寄存器中 再将子程序所在处的地址存放到程序计数器中 StackÅPC+1 PC Å addr 影响标志位 TC2 CLR [m] 说明 运算过程 影响标志位 WDT 运算过程 PD OV Z AC C TC1 TO PD OV Z AC C Z AC C 将数据存储器的第 i 位清 0 本指令将数据存储器内第 i 位值清零 [m].i Å0 TC2 CLR 说明 TO 清除数据存储器 本指令将数据存储器内的数值清零 [m] Å00H TC2 CLR [m] . i 说明 运算过程 影响标志位 TC1 TC1 TO PD OV 清除看门狗定时器 本指令清除 WDT 计数器(从 0 开始重新计数) 暂停标志位(PD)和看门狗溢出标志位(TO) 也被清零 WDT Å 00H PD&TO Å 0 影响标志位 TC2 Rev. 1.10 TC1 TO 0 PD 0 OV 30 Z AC C 2002-07-25 HT47R20 CLR 说明 WDT1 运算过程 预清除看门狗定时器 必须搭配 CLR WDT2 一起使用 才可清除 WDT 计时器(从 0 开始重新计数) 当程序只 执行过该指令 没有执行 CLR WDT2 时 系统只会不会将暂停标志位(PD)和计数溢出 位(TO)清零 PD 与 TO 保留原状态不变 WDT Å 00H* PD&TO Å 0* 影响标志位 TC2 CLR 说明 WDT2 运算过程 TC1 TO 0* PD 0* OV Z AC C 预清除看门狗定时器 必须搭配 CLR WDT1 一起使用 才可清除 WDT 计时器(从 0 开始重新计数) 当程序只 执行过该指令 没有执行 CLR WDT1 时 系统只会不会将暂停标志位(PD)和计数溢出 位(TO)清零 PD 与 TO 保留原状态不变 WDT Å 00H* PD&TO Å 0* 影响标志位 TC2 CPL [m] 说明 运算过程 影响标志位 PD 0* OV TC1 TO PD OV 对数据存储器取反 结果放入累加器 本指令是将数据存储器内保存的值取反后 ACC Å [ m ] TC2 Rev. 1.10 TO 0* Z AC C Z AC C 对数据存储器取反 结果放入数据存储器 本指令是将数据存储器内保存的数值取反 [m] Å [ m ] TC2 CPLA [m] 说明 运算过程 影响标志位 TC1 TC1 TO PD OV 31 结果存放在累加器中 Z AC C 2002-07-25 HT47R20 DAA 说明 [m] 操作 将加法运算后放入累加器的值调整为十进制数 并将结果放入数据存储器 本指令将累加器高低四位分别调整为 BCD 码 如果低四位的值大于 9 或 AC=1 那 么 BCD 调整就执行对原值加 6 并且内部进位标志 AC1= AC 即 AC 求反 否则原 值保持不变 如果高四位的值大于 9 或 C=1 那么 BCD 调整就执行对原值加 6 再加 AC1 并把 C 置位 否则 BCD 调整就执行对原值加 AC1 C 的值保持不变 结果 存放到数据存储器中 只有进位标志位(C)受影响 如果 ACC.3~ACC.0 > 9 或 AC=1 那么 [m].3~[m].0 Å(ACC.3~ACC.0 )+6 AC1= AC 否则 [m].3~[m].0 Å(ACC.3~ACC.0 ) AC1=0 并且 如果 ACC.7~ACC.4+AC1 > 9 或 C=1 那么 [m].7~[m].4 Å(ACC.7~ACC.4 )+6+ AC1 C=1 否则 [m].7~[m].4 Å(ACC.7~ACC.4 )+ AC1 C=C 影响标志位 TC2 DEC [m] 说明 运算过程 影响标志位 运算过程 PD OV Z AC C TC1 TO PD OV Z AC C AC C 数据存储器的内容减 1 结果放入累加器 本指令将存储器内的数值减一 再放到累加器 ACC Å [m]-1 TC2 HALT 说明 TO 数据存储器的内容减 1 结果放入数据存储器 本指令将数据存储器内的数值减一再放回数据存储器 [m] Å [m]-1 TC2 DECA [m] 说明 运算过程 影响标志位 TC1 TC1 TO PD OV Z 进入暂停模式 本指令终止程序执行并关掉系统时钟 RAM 和寄存器内的数值保持原状态 WDT 计数 器清 0 WDT 计数溢出位(TO)被清为 0 暂停标志位(PD)被设为 1 PC Å PC+1 PD Å 1 TO Å 0 影响标志位 TC2 Rev. 1.10 TC1 TO 0 PD 1 OV 32 Z AC C 2002-07-25 HT47R20 INC [m] 说明 运算过程 影响标志位 数据存储器的内容加 1 结果放入数据存储器 本指令将数据存储器内的数值加一 结果放回数据存储器 [m] Å [m]+1 TC2 INCA [m] 说明 运算过程 影响标志位 PD OV Z AC C TC1 TO PD OV Z AC C AC C 无条件跳转 本指令是将要跳到的目的地直接放到程序计数器内 PC Å addr TC2 MOV A, [m] 说明 运算过程 影响标志位 TO 数据存储器的内容加 1 结果放入数据存储器 本指令是将存储器内的数值加一 结果放到累加器 ACC Å [m]+1 TC2 JMP addr 说明 运算过程 影响标志位 TC1 TC1 TO PD OV Z 将数据存储器送至累加器 本指令是将数据存储器内的数值送到累加器内 ACC Å [m] TC2 OV Z AC C OV Z AC C MOV [m], A 将累加器送至数据存储器 本指令是将累加器值送到数据存储器内 说明 [m] Å ACC 运算过程 影响标志位 TC2 TC1 TO PD OV Z AC C MOV A, x 说明 运算过程 影响标志位 TO PD 将立即数送至累加器 本指令是将立即数送到累加器内 ACC Å x TC2 Rev. 1.10 TC1 TC1 TO PD 33 2002-07-25 HT47R20 NOP 说明 运算过程 影响标志位 空指令 本指令不作任何运算 PC Å PC+1 TC2 OR A, [m] 说明 运算过程 影响标志位 Z AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C 从子程序返回 本指令是将堆栈寄存器中的程序计数器值送回程序计数器 PC Å Stack TC2 RET A, x 说明 运算过程 OV 累加器与数据存储器做 或 运算 结果放入数据存储器 本指令是把累加器值 存储器值做逻辑或 结果放到数据存储器 ACCÅACC “OR” [m] TC2 RET 说明 运算过程 影响标志位 PD 累加器与立即数做 或 运算 结果放入累加器 本指令是把累加器值 立即数做逻辑或 结果放到累加器 ACCÅACC “OR” x TC2 ORM A, [m] 说明 运算过程 影响标志位 TO 累加器与数据存储器做 或 运算 结果放入累加器 本指令是把累加器 数据存储器值做逻辑或 结果放到累加器 ACCÅACC “OR” [m] TC2 OR A, x 说明 运算过程 影响标志位 TC1 而只将程序计数器加一 TC1 TO PD OV Z AC 从子程序返回 并将立即数放入累加器 本指令是将堆栈寄存器中的程序计数器值送回程序计数器 PC Å Stack ACC Å x C 并将立即数送回累加器 影响标志位 TC2 Rev. 1.10 TC1 TO PD OV 34 Z AC C 2002-07-25 HT47R20 RETI 说明 从中断返回 本指令是将堆栈寄存器中的程序计数器值送回程序计数器 与 RET 不同的是它使用在 中断程序结束返回时 它还会将中断控制寄存器 INTC 的 0 位(EMI)中断允许位置 1 允 许中断服务 PC Å Stack EMI Å 1 运算过程 影响标志位 TC2 RL [m] 说明 运算过程 影响标志位 [m] 运算过程 影响标志位 [m] 运算过程 PD OV Z AC C TC1 TO PD OV Z AC 结果送回数据存储器 C 数据存储器左移一位 结果放入累加器 本指令是将存储器内的数值左移一位 第 7 位移到第 0 位 结果送到累加器 而数据存 储器内的数值不变 ACC.0 Å[m].7, ACC.(i+1) Å[m].i (i=0~6) TC2 RLC 说明 TO 数据存储器左移一位 结果放入数据存储器 本指令是将数据存储器内的数值左移一位 第 7 位移到第 0 位 [m].0 Å[m].7, [m].(i+1) Å[m].i (i=0~6) TC2 RLA 说明 TC1 TC1 TO PD OV Z AC C 带进位将数据存储器左移一位 结果放入数据存储器 本指令是将存储器内的数值与进位标志左移一位 第 7 位取代进位标志 进位标志移到 第 0 位 结果送回数据存储器 [m].(i+1) Å[m].i (i=0~6) [m].0 ÅC C Å [m].7 影响标志位 TC2 RLCA 说明 [m] 运算过程 TC1 TO PD OV Z AC C 带进位将数据存储器左移一位 结果放入累加器 本指令是将存储器内的数值与进位标志左移一位 第七位取代进位标志 进位标志移到 第 0 位 结果送回累加器 ACC.(i+1) Å[m].i (i=0~6) ACC.0 ÅC C Å [m].7 影响标志位 TC2 Rev. 1.10 TC1 TO PD OV 35 Z AC C 2002-07-25 HT47R20 RR [m] 说明 运算过程 影响标志位 数据存储器右移一位 结果放入数据存储器 本指令是将存储器内的数值循环右移 第 0 位移到第 7 位 [m].7 Å[m].0, [m].i Å[m].(i+1) (i=0~6) TC2 RRA 说明 [m] 运算过程 影响标志位 [m] 运算过程 TO PD OV Z AC C 数据存储器右移一位 结果放入累加器 本指令是将数据存储器内的数值循环右移 第 0 位移到第 7 位 结果送回累加器 而数 据存储器内的数值不变 ACC.7 Å[m].0, ACC.i Å[m].(i+1) (i=0~6) TC2 RRC 说明 TC1 结果送回数据存储器 TC1 TO PD OV Z AC C 带进位将数据存储器右移一位 结果放入数据存储器 本指令是将存储器内的数值加进位标志循环右移 第 0 位取代进位标志 进位标志移到 第 7 位 结果送回存储器 [m].i Å[m].(i+1) (i=0~6) [m]. 7 ÅC C Å [m].0 影响标志位 TC2 RRCA 说明 [m] 运算过程 TC1 TO PD OV Z AC C 带进位将数据存储器右移一位 结果放入累加器 本指令是将数据存储器内的数值加进位标志循环右移 第 0 位取代进位标志 进位标志 移到第 7 位 结果送回累加器 数据存储器内的数值不变 ACC.i Å[m].(i+1) (i=0~6) ACC.7 ÅC C Å [m].0 影响标志位 TC2 SBC A,[m] 说明 运算过程 影响标志位 TO PD OV Z AC C 累加器与数据存储器 进位标志相减 结果放入累加器 本指令是把累加器值减去数据存储器值以及进位标志的取反 ACCÅACC+[ m ]+ C TC2 Rev. 1.10 TC1 TC1 TO PD OV 36 Z AC 结果放到累加器 C 2002-07-25 HT47R20 SBCM A,[m] 说明 运算过程 影响标志位 累加器与数据存储器 进位标志相减 结果放入数据存储器 本指令是把累加器值减去数据存储器值以及进位标志取反 结果放到数据存储器 [m]ÅACC+[ m ]+C TC2 SDZ 说明 [m] 运算过程 影响标志位 [m] 运算过程 TO PD OV Z AC C 数据存储器减 1 如果结果为 0 则跳过下一条指令 本指令是把数据存储器内的数值减 1 判断是否为 0 若为 0 则跳过下一条指令 即如 果结果为零 放弃在目前指令执行期间所取得的下一条指令 并插入一个空周期用以取 得正确的指令(二个指令周期) 否则执行下一条指令(一个指令周期) 如果[m]-1=0 跳过下一条指令执行再下一条 TC2 SDZA 说明 TC1 TC1 TO PD OV Z AC C 数据存储器减 1 将结果放入累加器 如果结果为 0 则跳过下一条指令 本指令是把数据存储器内的数值减 1 判断是否为 0 为 0 则跳过下一行指令并将减完 后数据存储器内的数值送到累加器,而数据存储器内的值不变 即若结果为 0 放弃在目 前指令执行期间所取得的下一条指令 并插入一个空周期用以取得正确的指令(二个指令 周期) 否则执行下一条指令(一个指令周期) 如果[m]-1=0 跳过下一条指令执行再下一条 ACC Å([m]-1) 影响标志位 TC2 SET [m] 说明 运算过程 影响标志位 PD OV Z AC C TC1 TO PD OV Z AC C Z AC C 将数据存储器的第 i 位置 1 本指令是把存储器内的数值的第 i 位置为 1 [m].i Å1 TC2 Rev. 1.10 TO 置位数据存储器 本指令是把存储器内的数值每个位置为 1 [m] Å FFH TC2 SET [m]. i 说明 运算过程 影响标志位 TC1 TC1 TO PD OV 37 2002-07-25 HT47R20 SIZ 说明 [m] 运算过程 影响标志位 数据存储器加 1 如果结果为 0 则跳过下一条指令 本指令是把数据存储器内的数值加 1 判断是否为 0 若为 0 跳过下一条指令 即放弃 在目前指令执行期间所取得的下一条指令 并插入一个空周期用以取得正确的指令(二个 指令周期) 否则执行下一条指令(一个指令周期) 如果 ([m]+1=0) 跳过下一行指令 [m] Å[m]+1 TC2 SIZA 说明 运算过程 影响标志位 [m]. i 运算过程 影响标志位 TC1 TC1 TC1 累加器与立即数相减 本指令是把累加器值 ACCÅACC+ x +1 TC2 Rev. 1.10 OV Z AC C TO PD OV Z AC C TO PD OV Z AC C 累加器与数据存储器相减 结果放入累加器 本指令是把累加器值 数据存储器值相减 结果放到累加器 ACCÅACC+[ m ]+1 TC2 SUB A, x 说明 运算过程 影响标志位 PD 如果数据存储器的第 i 位不为 0 则跳过下一条指令 本指令是判断数据存储器内的数值的第 i 位 若不为 0 则程序计数器再加 1 跳过下一 行指令 放弃在目前指令执行期间所取得的下一条指令 并插入一个空周期用以取得正 确的指令(二个指令周期) 否则执行下一条指令(一个指令周期) 如果 [m].i≠0 跳过下一行指令 TC2 SUB A, [m] 说明 运算过程 影响标志位 TO 则跳过下一条指令 数据存储器加 1 将结果放入累加器 如果结果为 0 本指令是把数据存储器内的数值加 1 判断是否为 0 若为 0 跳过下一条指令 即放弃 在目前指令执行期间所取得的下一条指令 并插入一个空周期用以取得正确的指令(二 个指令周期) 并将加完后存储器内的数值送到累加器 而数据存储器的值保持不变 否则执行下一条指令(一个指令周期) 如果[m]+1=0 跳过下一行指令 ACC Å([m]+1) TC2 SNZ 说明 TC1 TC1 TO PD OV Z AC C 结果放入累加器 立即数相减 结果放到累加器 TO PD OV 38 Z AC C 2002-07-25 HT47R20 SUBM A, [m] 说明 运算过程 影响标志位 累加器与数据存储器相减 结果放入数据存储器 本指令是把累加器值 存储器值相减 结果放到存储器 [m]ÅACC+[ m ]+1 TC2 SWAP [m] 说明 运算过程 影响标志位 TO PD OV Z AC C 交换数据存储器的高低字节 结果放入数据存储器 本指令是将数据存储器的低四位和高四位互换 再将结果送回数据存储器 [m].7~[m].4 ↔[m].3~[m].0 TC2 SWAPA [m] 说明 运算过程 TC1 TC1 TO PD OV Z 交换数据存储器的高低字节 结果放入累加器 本指令是将数据存储器的低四位和高四位互换 ACC.3~ACC.0Å [m].7~[m].4 ACC.7~ACC.4Å [m].3~[m].0 AC C 再将结果送回累加器 影响标志位 TC2 SZ 说明 [m] 运算过程 影响标志位 [m] 运算过程 影响标志位 PD OV Z AC C TC1 TO PD OV Z AC C 数据存储器送至累加器 如果内容为 0 则跳过下一条指令 本指令是判断存储器内的数值是否为 0 若为 0 则跳过下一行指令 即放弃在目前指令 执行期间所取得的下一条指令 并插入一个空周期用以得正确的指令(二个指令周期) 并把存储器内值送到累加器 而存储器的值保持不变 否则执行下一条指令(一个指令周 期) 如果[m] = 0 跳过下一行指令 并 ACCÅ [m] TC2 Rev. 1.10 TO 如果数据存储器为 0 则跳过下一条指令 本指令是判断数据存储器内的数值是否为 0 为 0 则跳过下一行指令 即放弃在目前指 令执行期间所取得的下一条指令 并插入一个空周期用以得正确的指令(二个指令周期) 否则执行下一条指令(一个指令周期) 如果 [m] = 0, 跳过下一行指令 TC2 SZA 说明 TC1 TC1 TO PD OV 39 Z AC C 2002-07-25 HT47R20 SZ 说明 [m]. i 运算过程 影响标志位 如果数据存储器的第 i 位为 0 则跳过下一条指令 本指令是判断存储器内第 i 位值是否为 0 若为 0 则跳过下一行指令 即放弃在目前指 令执行期间所取得的下一条指令 并插入一个空周期用以得正确的指令(二个指令周期) 否则执行下一条指令(一个指令周期) 如果 [m].i = 0 跳过下一行指令 TC2 TABRDC [m] 说明 运算过程 TC1 TO PD OV Z AC C 读取 ROM 当前页的内容 并送至数据存储器和 TBLH 本指令是将表格指针指向程序寄存器当前页 将低位送到存储器 高位直接送到 TBLH 寄存器内 [m] Å程序存储器低四位 TBLHÅ程序存储器高四位 影响标志位 TC2 TABRDL [m] 说明 运算过程 TC1 TO PD OV Z AC C 读取 ROM 最后一页的内容 并送至数据存储器和 TBLH 本指令是将 TABLE 指针指向程序寄存器最后页 将低位送到存储器 TBLH 寄存器内 [m] Å程序存储器低四位 TBLHÅ程序存储器高四位 高位直接送到 影响标志位 TC2 XOR A, [m] 说明 运算过程 影响标志位 OV Z AC C TC1 TO PD OV Z AC C TC1 TO PD OV Z AC C 累加器与数据存储器做 异或 运算 结果放入累加器 本指令是把累加器值与立即数做逻辑异或 结果放到累加器 ACCÅACC “XOR” x TC2 Rev. 1.10 PD 累加器与数据存储器做 异或 运算 结果放入数据存储器 本指令是把累加器值 数据存储器值做逻辑异或 结果放到数据存储器 [m]ÅACC “XOR” [m] TC2 XOR A, x 说明 运算过程 影响标志位 TO 累加器与立即数做 异或 运算 结果放入累加器 本指令是把累加器值 数据存储器值做逻辑异或 结果放到累加器 ACCÅACC “XOR” [m] TC2 XORM A, [m] 说明 运算过程 影响标志位 TC1 TC1 TO PD OV 40 Z AC C 2002-07-25 HT47R20 封装信息 64-pin QFP (14×20)外形尺寸 C H D 5 1 G 3 3 I 5 2 3 2 F A B E 2 0 6 4 a K J 1 符号 A B C D E F G H I J K Rev. 1.10 1 9 尺寸 (单位 mm) 典型 最小 18.80 13.90 24.80 19.90 最大 19.20 14.10 25.20 20.10 1 0.40 2.50 3.10 3.40 0.10 1.15 0.10 0 1.45 0.20 7 41 2002-07-25 HT47R20 Holtek Semiconductor Inc. (Headquarters) No.3, Creation Rd. , Science-based Industrial Park, Hsinchu, Taiwan Tel: 886-3-563-1999 Fax: 886-3-563-1189 http://www.holtek.com.tw Holtek Semiconductor Inc. (Sales Office) 11F, No.576, Sec.7 Chung Hsiao E.Rd., Taiwan 886-2-2782-9635 Tel Fax 886-2-2782-9636 Fax 886-2-2782-7128(Internation at sales hotline) Holtek Semiconductor (Shanghai) Inc. 7th, Floor, Building 2, No.889, YiShan Rd., Shanghai, China Tel: 021-6485-5560 Fax: 021-6485-0313 http://www.holtek.com.cn Holtek Semiconductor (Hong Kong) Ltd. RM.711, Tower 2, Cheung Sha Wan Piaza, 833 Cheung Sha Wan Rd., Kowloon, Hong Kong Tel: 852-2-745-8288 Fax: 852-2-742-8657 Holmate Semiconduct, Inc. 48531 Warm Springs Boulevard, Suite 413, Fremont, CA 94539 Tel: 510-252-9880 Fax: 510-252-9885 http://www.holmate.com HOLTEK SEMICONDUCTOR INC.版权所有© However, Holtek assumes no responsibility arising from the use of the specifications described. The applications mentioned herein are used solely for the purpose of illustration and Holtek makes no warranty or representation that such applications will be suitable without further modification, nor recommends the use of its products for application that may present a risk to human life due to malfunction or otherwise. Holtek reserves the right to alter its products without prior notification. For the most up-to-date information, please visit our web site at http://www.holtek.com.tw. Rev. 1.10 42 2002-07-25