SH67P847 1K 一次性编程, 10 位 ADC 型 4 位单片机 特性 基于 SH6610C, 10 位 ADC 型 4 位单片机 OTP ROM: 1K X 16 位 RAM: 124 X 4 位 - 28 系统控制寄存器 - 96 数据存储器 工作电压: - fOSC = 16MHz, VDD = 3.3V - 5.5V 6 个双向 I/O 端口 4 层堆栈 (包括中断) 一个 8 位自动重载定时/计数器 预热计数器 中断源: - 模/数中断 - 定时器 0 中断 - 外部中断: PORTA .3 (下降沿) 振荡器 - 内建 RC 振荡器: 16MHz 指令周期时间 (16/fOSC) 两种低功耗工作模式: HALT 和 STOP 复位 - 内建上电复位 (POR) - 内建低电压复位 (LVR) (代码选项) - 内建看门狗定时器 (WDT) (代码选项) 4 通道 10 位模/数转换器 (ADC) 1 通道 9 位脉宽调制输出 (PWM) OTP 类型/代码保护 8 引脚 SOP 封装 概述 SH67P847 是一种先进的 CMOS 4 位单片机。该器件集成了 SH6610C CPU 内核, RAM, ROM, 定时器, ADC, 高速 PWM 输出, 看门狗定时器, 低电压复位。SH67P847 适应于电池包充电器应用。 引脚配置 1 PORTA.3/VPP 2 GND 3 PORTA.0/VREF/AN0/SDA 4 SH67P847 PORTB.1/PWM 1 8 PORTB.0/AN3 7 PORTA.2/AN2/SCK 6 VDD 5 PORTA.1/AN1 V1.0 SH67P847 方框图 Reset Circuit Oscillator Watchdog Timer RAM 28 X 4 Bits System Register RAM 96 X 4 Bits Data Memory PORTA (4-Bit) PORTA.0/AN0/VREF PORTA.1/AN1 PORTA.2/AN2 PORTA.3/VPP PORTB (4-Bit) PORTB.0/AN3 PORTB.1/PWM ADC OTP ROM 1024 X 16 Bits PWM CPU Timer VDD Power Circuit GND 2 SH67P847 引脚描述 引脚编号 引脚命名 引脚性质 说明 1 PORTB.1 /PWM I/O O 可编程 I/O PWM 输出 2 PORTA.3 I/O I 可编程 I/O (开漏输出) 外部中断输入 (下降沿) 3 GND P 4 PORTA.0 /AN0 /VREF I/O I I 可编程 I/O ADC 输入通道 ADC 外部 VREF 输入端口 5 PORTA.1 /AN1 I/O I 可编程 I/O ADC 输入通道 6 VDD P 7 PORTA.2 /AN2 I/O I 可编程 I/O ADC 输入通道 8 PORTB.0 /AN3 I/O I 可编程 I/O ADC 输入通道 接地引脚 电源引脚 其中, I: 输入; O: 输出; P: 电源; Z: 高阻 OTP编程引脚说明 (OTP编程模式) 引脚编号 引脚命名 引脚性质 共用引脚 说明 6 VDD P VDD 2 VPP P PORTA.3 3 GND P GND 7 SCK I PORTA.2 编程时钟输入引脚 4 SDA I/O PORTA.0 编程数据引脚 编程电源 (+5.5V) 编程高压电源 (+11V) 电源地 其中, I: 输入; O: 输出; P: 电源; Z: 高阻 3 SH67P847 功能说明 1. CPU 1.4. 查表寄存器 (TBR) CPU 包含以下功能模块: 程序计数器 (PC), 算术逻辑单元 (ALU), 进 位 标 志 (CY), 累 加 器 , 查 表 寄 存 器 , 数 据 指 针 (INX, DPH, DPM, 和 DPL) 和堆栈。 通过查表指令 (TJMP) 和常数返回指令 (RTNW) 可以实现 读取保存在程序存储器中的表格数据。查表指令执行时, 查表 寄存器 TBR 和 AC 中存放的是待读取 ROM 的低 8 位地址。 TJMP 指令指向的 ROM 地址为 ((PC11 - PC8) X (28) + (TBR, AC))。由 RTNW 指令将查表所得值返回至 (TBR, AC) 中。 表格数据的第 7 位至第 4 位存放在 TBR 中, 第 3 位至第 0 位 存放在 AC 中。 1.1. PC 程序计数器用于寻址程序 ROM。该计数器有 12 位: 页寄存器 (PC11), 和循环递增计数器 (PC10, PC9, PC8, PC7, PC6, PC5, PC4, PC3, PC2, PC1, PC0)。 程序计数器装入与该条指令相关的数据。对于目标地址大于 2K 的 ROM 空间, 可通过无条件跳转指令 (JMP) 中设置页寄 存器位的值实现跳转。 程序计数器只能寻址 4K 程序 ROM 空间 (参考 ROM 说明)。 1.5. 数据指针 数据指针能直接寻址数据存储器。指针地址储存在寄存器 DPH (3 位), DPM (3 位) 和 DPL (4 位)。最大寻址范围为 3FFH。通过索引寄存器 (INX), 可以读写由 DPH, DPM 和 DPL 指定的数据存储器。 1.2. ALU 和 CY ALU 执行算术运算和逻辑操作。ALU 具有下述功能: 二进制加法/减法 (ADC, ADCM, ADD, ADDM, SBC, SBCM, SUB, SUBM, ADI, ADIM, SBI, SBIM) 加法/减法的十进制调整 (DAA, DAS) 逻辑操作 (AND, ANDM, EOR, EORM, OR, ORM, ANDIM, EORIM, ORIM) 条件跳转 (BA0, BA1, BA2, BA3, BAZ, BNZ, BC, BNC) 逻辑移位 (SHR) 进位标志 (CY) 记录 ALU 算术运算操作中的进位/借位状态。 在中断或子程序调用过程中, 进位标志被压入堆栈中并于执 行 RTNI 指令时由堆栈中弹出。它不受 RTNW 指令的影响。 1.6. 堆栈 堆栈是一组寄存器, 在每次子程序调用或中断时能顺序保存 CY 和 PC (11-0) 中的值, 最高位保存 CY 值。其结构为 13 位 X 4 层。当遇到返回指令 (RTNI/RTNW) 时, 堆栈中的内 容将按顺序返回到 PC 中。堆栈中的数据按照先进后出的方式 处理。 注意: 堆栈嵌套包括子程序调用和中断请求子程序调用, 其最大值 为 4 层。如果程序调用和中断请求的数量超过 4 层, 堆栈底部 将溢出, 程序将无法正常执行。 1.3. 累加器 (AC) 累加器是一个 4 位寄存器, 用于保存算术逻辑单元的运算结 果。它和 ALU 一起, 完成与系统寄存器数据存储器之间的数 据传送。 2. RAM 内建 RAM 由通用数据存储器和系统寄存器组成。由于 RAM 的静态特性, 数据存储器能在 CPU 进入 STOP 或者 HALT 方式后 保持其中的数据不变。 2.1. RAM 寻址 用一条指令能直接访问数据存储器和系统寄存器。下列为存储器空间分配: 系统寄存器: $000 - $01F 数据存储器: $020 - $07F 4 SH67P847 2.2. 系统寄存器的配置 地址 第3位 第2位 第1位 第0位 $00 IEAD IET0 - IEP 读/写 中断允许标志寄存器 $01 IRQAD IRQT0 - IRQP 读/写 中断请求标志寄存器 $02 - T0M.2 T0M.1 T0M.0 读/写 第 2-0 位: 定时器 0 模式寄存器 $03 T0L.3 T0L.2 T0L.1 T0L.0 读/写 定时器 0 载入/计数器低位寄存器 $04 T0H.3 T0H.2 T0H.1 T0H.0 读/写 定时器 0 载入/计数器高位寄存器 $05 PA.3 PA.2 PA.1 PA.0 读/写 PORTA 数据寄存器 $06 - - PB.1 PB.0 读/写 PORTB 数据寄存器 $07 VREFS CH1 CH0 ADCON $08 ACR3 ACR2 ACR1 ACR0 读/写 第 3-0 位: ADC 端口配置控制寄存器 $09 GO/ DONE TADC1 TADC0 ADCS 第 0 位: ADC 转换时间选择寄存器 读/写 第 2-1 位: ADC 时钟周期选择寄存器 第 3 位: ADC 转换控制/状态标志寄存器 $0A A2 A1 A0 - 只读 ADC 数据低位寄存器 $0B A6 A5 A4 A3 只读 ADC 数据中位寄存器 $0C - A9 A8 A7 只读 ADC 数据高位寄存器 $0D - - - - - $0E TBR.3 TBR.2 TBR.1 TBR.0 读/写 查表寄存器 读/写 说明 第 0 位: ADC 转换允许选择寄存器 读/写 第 2-1 位: ADC 转换通道选择寄存器 第 3 位: 内部/外部参考电压选择寄存器 保留 $0F INX.3 INX.2 INX.1 INX.0 读/写 索引寄存器 $10 DPL.3 DPL.2 DPL.1 DPL.0 读/写 索引地址低位寄存器 (4 位) $11 - DPM.2 DPM.1 DPM.0 读/写 索引地址中位寄存器 (3 位) $12 - DPH.2 DPH.1 DPH.0 读/写 索引地址高位寄存器 (3 位) $13 PACR.3 PACR.2 PACR.1 PACR.0 读/写 PORTA 输入/输出控制寄存器 $14 - - PBCR.1 PBCR.0 读/写 PORTB 输入/输出控制寄存器 $15 PWMS TCK1 TCK0 PWM_EN $16 PP.3 PP.2 PP.1 PP.0 读/写 PWM 周期低位寄存器 $17 PP.7 PP.6 PP.5 PP.4 读/写 PWM 周期高位寄存器 $18 - - - PDF.0 读/写 PWM 占空比微调寄存器 $19 PD.3 PD.2 PD.1 PD.0 读/写 PWM 占空比低位寄存器 $1A PD.7 PD.6 PD.5 PD.4 读/写 PWM 占空比高位寄存器 $1B - PPACR.2 PPACR.1 PPACR.0 读/写 PORTA 上拉控制寄存器 $1C - - PPBCR.1 PPBCR.0 读/写 PORTB 上拉控制寄存器 $1D - - - - $1E WDT WDT.2 - WDT.1 - WDT.0 - $1F - - - - 第 0 位: PWM 输出允许选择寄存器 读/写 第 2-1 位: PWM 时钟选择寄存器 第 3 位: PWM 占空比的输出模式选择寄存器 - 保留 读/写 第 2-0 位: 看门狗定时器控制寄存器 只读 第 3 位: 看门狗定时器溢出标志寄存器 - 5 保留 SH67P847 3. ROM ROM 能寻址 1024 X 16 位程序空间, 地址由$000 到$3FF。 3.1. 矢量地址区 ($000 到$004) 程序顺序执行。从地址$000 到$004 的区域是为特殊中断服务程序保留的, 作为中断服务的入口地址。 地址 指令 说明 $000 JMP* 跳转至RESET服务程序 $001 JMP* 跳转至 ADC 中断服务程序 $002 JMP* 跳转至 TIMER0 中断服务程序 $003 JMP* - $004 JMP* 跳转至端口中断服务程序 *JMP 指令能由任意指令代替。 6 SH67P847 4. 初始状态 4.1. 系统寄存器初始状态 地址 第3位 第2位 第1位 第0位 上电复位/低电压复位 WDT 复位 $00 IEAD IET0 - IEP 00-0 00-0 $01 IRQAD IRQT0 - IRQP 00-0 00-0 $02 - T0M.2 T0M.1 T0M.0 -000 -uuu $03 T0L.3 T0L.2 T0L.1 T0L.0 xxxx xxxx $04 T0H.3 T0H.2 T0H.1 T0H.0 xxxx xxxx $05 PA.3 PA.2 PA.1 PA.0 0000 0000 $06 - - PB.1 PB.0 --00 --00 $07 VREFS CH1 CH0 ADCON 0000 uuuu $08 ACR3 ACR2 ACR1 ACR0 0000 uuuu $09 GO/ DONE A2 TADC1 TADC0 ADCS 0000 0uuu $0A A1 A0 - xxxx uuuu $0B A6 A5 A4 A3 xxxx uuuu $0C - A9 A8 A7 -xxx -uuu $0D - - - - ---- ---- $0E TBR.3 TBR.2 TBR.1 TBR.0 xxxx uuuu $0F INX.3 INX.2 INX.1 INX.0 xxxx uuuu $10 DPL.3 DPL.2 DPL.1 DPL.0 xxxx uuuu $11 - DPM.2 DPM.1 DPM.0 -xxx -uuu $12 - DPH.2 DPH.1 DPH.0 -xxx -uuu $13 PACR.3 PACR.2 PACR.1 PACR.0 0000 0000 $14 - - PBCR.1 PBCR.0 --00 --00 $15 PWMS TCK1 TCK0 PWM_EN 0000 uuu0 $16 PP.3 PP.2 PP.1 PP.0 xxxx uuuu $17 PP.7 PP.6 PP.5 PP.4 xxxx uuuu $18 - - - PDF.0 ---x ---u $19 PD.3 PD.2 PD.1 PD.0 xxxx uuuu $1A PD.7 PD.6 PD.5 PD.4 xxxx uuuu $1B - PPACR.2 PPACR.1 PPACR.0 -000 -000 $1C - - PPBCR.1 PPBCR.0 --00 --00 $1D - - - - ---- ---- $1E WDT WDT.2 WDT.1 WDT.0 0000 1000 $1F - - - - ---- ---- 说明: x = 不定, u = 未更改, - = 未使用, 读出值为“0”。 4.2. 其它初始状态 其它 复位后 程序计数器 (PC) $000 CY 不定 累加器 (AC) 不定 数据存储器 不定 7 SH67P847 5. 系统时钟和振荡器 振荡器振荡产生的脉冲为 CPU 和片上电路提供系统时钟。 系统时钟 fSYS = fOSC/16 5.1. 指令周期 对于 16MHz 振荡器, 为 1MHz (= 1µs)。 8 SH67P847 6. I/O 端口 SH67P847 提供 6 个可编程双向 I/O 端口。端口数据为寄存器$05 - $06。端口控制寄存器 ($13 - $14) 控制端口为输入或者输 出。每个 I/O 端口 (除 PORTA.3) 包含上拉电阻, 通过各自端口上拉电阻控制寄存器 ($1B - $1C) 相应的值来控制。 当端口被选择作为输入口, 写“1”到各自相对的上拉控制寄存器 ($1B - $1C) 可以打开上拉电阻, 写“0”可以关闭上拉电阻。 不论各自端口上拉控制寄存器 ($1B - $1C) 相对应位的值是多少, 当端口作为输出端口时, 上拉电阻将会自动关闭。 当 PORTA.3 被选择作为输入端口, 它们可以通过下降沿触发端口中断 (若端口中断已经允许)。 系统寄存器$05 - $06: 端口数据寄存器 地址 第3位 第2位 第1位 第0位 $05 PA.3 PA.2 PA.1 PA.0 读/写 PORTA 数据寄存器 $06 - - PB.1 PB.0 读/写 PORTB 数据寄存器 读/写 说明 系统寄存器$13 - $14: 端口控制寄存器 地址 第3位 第2位 第1位 第0位 读/写 $13 PACR.3 PACR.2 PACR.1 PACR.0 读/写 PORTA 输入/输出控制寄存器 $14 - - PBCR.1 PBCR.0 读/写 PORTB 输入/输出控制寄存器 第0位 读/写 说明 PA (/B) CR.n, (n = 0, 1, 2, 3) 0: 设置为输入口。(初始值) 1: 设置为输出口。 系统寄存器$1B - $1C: 上拉电阻控制寄存器 地址 第3位 $1B - $1C - 第2位 第1位 说明 PPACR.2 PPACR.1 PPACR.0 读/写 PORTA 输入/输出控制寄存器 - PPBCR.1 PPBCR.0 读/写 PORTB 输入/输出控制寄存器 PPA (/B) CR.n, (n = 0, 1, 2) 0: 禁止内部上拉电阻。(初始值) 1: 允许内部上拉电阻。 9 SH67P847 I/O 引脚的等效电路 VDD Pull high Register Pull high VDD I/O Control Register I/O Pin DATA Register GND DATA READ DATA IN READ M2T1 0 1 s 在 SH67P847, 每个输出端口包含一个锁存器, 用来保存输出数据。在输出模式下写端口数据寄存器 (PDR) 可以直接传输数据 到相应的端口。 所有输入端口不包含锁存器, 所以外部输入电平要一直保持到端口读取动作完成。 当某个端口被设置为输出口时, 对该端口位的读操作会读取锁存器内的数据, 而非端口外部电平。 PORTA.0 - PORTA.2 共用为 ADC AN0-2 输入通道 (AN0-2)。 PORTA.0 共用为参考电压输入 (VREF)。 PORTB.0 共用为 ADC 输入通道 (AN3)。 PORTB.1 共用为 PWM 输出 (PWM)。 端口中断 PORTA.3 用作端口中断源。由于 PORTA.3 是位可编程的 I/O, 因此只有 PORTA.3 用作数字输入端口时, 数字信号引脚上 VDD 到 GND 的跳变才能产生端口中断。 端口中断可以用来将 CPU 从 HALT 或者 STOP 模式唤醒。 IEP Falling Edge Detector PORTA.3 Port Interrupt PACR.3 IRQP 端口中断模块示意图 10 SH67P847 7. 定时器 当高 4 位载入寄存器被写入或 Timer 计数值由$FF 到$00 溢 出时, Timer 将自动载入预设值。 8 位 Timer 有下述特性: - 8 位递增计数 - 自动重载 - 8 级预分频 - 计数值由$FF 到$00 时, 产生溢出中断请求 Timer 框图: 4tOSC System clock 由于寄存器的高 4 位控制 Timer 的读写操作, 使用中请根据 以下步骤操作: - 写操作 先写低 4 位, 再写高 4 位以更新计数器。 - 读操作 先读高 4 位, 再读低 4 位。 SYNC 8-BIT COUNTER Prescaler TM.2 TM.1 TM.0 Load Reg. L Timer 功能: - 可编程定时功能 - 计数值可读 8-bit timer counter 7.1. Timer0 结构和操作 Latch Reg. L Timer0 由一个 8 位只写载入寄存器 (TL0L, TL0H) 和一个 8 位只读计数器 (TC0L, TC0H) 构成。每个计数器由低四位和 高四位组成。将数据写入载入寄存器 (TL0L, TL0H) 就可以 初始化 Timer。 7.2. Timer0 模式寄存器 通过设置 Timer 模式寄存器 (T0M) 可以使 Timer 工作在不同的模式。 系统时钟经过预分频器分频后, 进入计数器。Timer 模式寄存器中 T0M.2-0 用于设定分频比。 表 1. Timer0 模式寄存器 ($02) T0M.2 0 0 T0M.1 0 0 T0M.0 预分频器分频比 时钟源 0 /211 系统时钟 1 /29 系统时钟 系统时钟 0 1 0 /27 0 1 1 /25 系统时钟 1 0 0 /23 系统时钟 1 0 1 /22 系统时钟 1 1 0 /21 系统时钟 1 /20 系统时钟 1 Load Reg. H 1 11 SH67P847 8. 中断 SH67P847 有三个中断源: - ADC 中断 - Timer0 中断 - PORTA .3 中断 (下降沿) 中断控制标志位和中断服务 中断控制标志为系统寄存器的$00 和$01。这两个寄存器能够由软件访问和设置。芯片上电复位后, 这些标志位被清 0。 系统寄存器 地址 第3位 第2位 第1位 第0位 读/写 $00 IEAD IET0 - IEP 读/写 中断允许标志寄存器 $01 IRQAD IRQT0 - IRQP 读/写 中断请求标志寄存器 说明 当 IEx 设置为 1 且有中断请求时 (IRQx 为 1) 中断被激活并且根据中断优先级产生相应的中断矢量地址。当发生中断时, PC 和 CY 标志将被保存在堆栈存储器中, 同时程序跳转至中断服务矢量地址处执行。在中断发生后, 所有中断允许标志 (IEx) 自动复 位为 0, 因此在 IRQx = 1 时 IEx 标志再次设置为 1 时, 将可能再次产生中断。 Inst.cycle 1 2 3 Instruction Execution N Instruction Execution I1 Instruction Execution I2 Interrupt Generated Interrupt Accepted Vector Generated Stacking 4 5 Fetch Vector address Reset IE.X Start at vector address 中断服务流程图 中断嵌套 在 CPU 中断服务期间, 用户可以在中断返回前设置任何中断允许标志。中断服务流程图中标示下个中断和将要发生的下一个中 断嵌套。如果中断请求已经产生且执行允许 IE 使能的指令 N, 那么在两个指令周期后将执行中断程序。但是, 如果指令 I1 或指 令 I2 清除中断请求或允许标志, 那么中断服务将被取消。 ADC 中断 当系统寄存器$00 (IEAD) 的第 3 位设置为“1”, ADC 中断允许。当完成 A/D 转换后, 将产生一个中断请求 (IRQAD = 1), 如果 ADC 中断允许 (IEAD = 1), 将启动一次 ADC 中断服务程序。该 ADC 中断能用来将 CPU 从 HALT 方式中唤醒。 定时器中断 Timer0 的计数时钟是以系统时钟为基准的。Timer 计数值由$FF 到$00 溢出时将产生一个内部中断请求 (IRQT0 = 1), 如果中 断允许标志被允许 (IET0 = 1) 则进入定时器中断服务程序。定时器中断同样也能用于从 HALT 模式唤醒 CPU。 端口下降沿中断 只有数字输入端口可以产生端口中断。模拟输入不能产生中断请求。 PORTA.3 输入引脚上的下降沿将产生中断请求 (IRQP = 1)。端口中断可以用来将 CPU 从 HALT 或者 STOP 模式唤醒。 12 SH67P847 9. 模/数转换器 (ADC) SH67P847 内建有一个 4 通道的 10 位逐次逼近型模/数转换器 (ADC)。 ADC 控制寄存器: 这些寄存器定义了模/数转换模拟通道数设置, 转换通道选择, 参考电压选择, 模/数转换时钟选择, 模/数转换 启动控制位和结束标志。模/数转换结果寄存器为只读寄存器。 模/数转换的步骤: - 设置模拟通道数和选择参考电压。(如果使用外部参考电压, 切记任何模拟输入电压值不能大于 VREF)。 - 运行模/数转换器, 选择需转换的信号通道。 - 设置模/数转换时钟源。 - 置 GO/ DONE = 1, 启动模/数转换。 系统寄存器$07 地址 第3位 第2位 第1位 第0位 读/写 $07 VREFS CH1 CH0 ADCON 第 0 位: ADC 转换允许选择寄存器 读/写 第 2-1 位: ADC 转换通道选择寄存器 第 3 位: 内部/外部参考电压选择寄存器 X X X 0 读/写 禁止 ADC 工作 X X X 1 读/写 允许 ADC 工作 X 0 0 X 读/写 ADC 通道 AN0 X 0 1 X 读/写 ADC 通道 AN1 X 1 0 X 读/写 ADC 通道 AN2 X 1 1 X 读/写 ADC 通道 AN3 0 X X X 读/写 内部参考电压 (VREF = VDD) 1 X X X 读/写 外部参考电压 说明 系统寄存器$08: (模/数转换端口配置控制寄存器) 地址 第3位 第2位 第1位 第0位 读/写 $08 ACR3 ACR2 ACR1 ACR0 读/写 第 3-0 位: 模/数转换端口配置控制寄存器 X X X 0 读/写 PORTA.0 作为 I/O X X X 1 读/写 PORTA.0 作为 ADC 通道 AN0 X X 0 X 读/写 PORTA.1 作为 I/O X X 1 X 读/写 PORTA.1 作为 ADC 通道 AN1 X 0 X X 读/写 PORTA.2 作为 I/O X 1 X X 读/写 PORTA.2 作为 ADC 通道 AN2 0 X X X 读/写 PORTB.0 作为 I/O 1 X X X 读/写 PORTB.0 作为 ADC 通道 AN3 13 说明 SH67P847 系统寄存器$09: (模/数转换控制寄存器) 地址 $09 第3位 第2位 第1位 第0位 读/写 TADC1 TADC0 ADCS 第 0 位: ADC 转换时间控制寄存器 读/写 第 2-1 位: ADC 时钟周期选择寄存器 第 3 位: ADC 状态标志寄存器 X X X 0 读/写 A/D 转换时间 = 15 tAD X X X 1 读/写 A/D 转换时间 = 114 tAD X 0 0 X 读/写 ADC 转换时钟周期 tAD = tSYS (tSYS=tOSC*16) X 0 1 X 读/写 ADC 转换时钟周期 tAD = 2 tSYS (tSYS=tOSC*16) X 1 0 X 读/写 ADC 转换时钟周期 tAD = 4 tSYS (tSYS=tOSC*16) X 1 1 X 读/写 ADC 转换时钟周期 tAD = 8 tSYS (tSYS=tOSC*16) 0 X X X 读/写 ADC 转换完成 1 X X X 读/写 置“1”启动 A/D 转换, 转换过程中保持 GO/ DONE = 1 GO/ DONE 说明 系统寄存器$0A - $0C: (模/数转换结果寄存器) 地址 第3位 第2位 第1位 第0位 读/写 $0A A2 A1 A0 - 只读 ADC 数据低位寄存器 $0B A6 A5 A4 A3 只读 ADC 数据中位寄存器 $0C - A9 A8 A7 只读 ADC 数据高位寄存器 说明 VDD CH1:CH0 VREF PORTA.0/VREF 00 ADC Select VREF 01 Input voltage 10 11 PORTA.0/AN0 PORTA.1/AN1 PORTA.2/AN2 PORTB.0/AN3 模/数转换器示意图 注意: - 正确选择 ADC 转换时钟周期 tAD, 保证 1µs ≤ tAD ≤ 33.4µs。 当完成 ADC 转换后, 将产生模/数转换中断 (如果模/数转换中断允许)。 模拟输入通道必须将其对应的 PXCR (X = A, B) 位作为输入。 如果 I/O 端口已被选择为模拟输入端, 那么 I/O 功能和上拉电阻被禁止。 - 当模/数转换转换完成后, GO/ DONE 位由硬件自动清零。 - 在转换过程中将 GO/ DONE 位清零会中止当前的转换过程。 - 尚未完成转换过程而将 GO/ DONE 位清零的模/数转换将不会更新 ADC 转换结果寄存器内容。 - 在下一个 A/D 转换开始前需要等待 16-tOSC 的时间。 - ADC 能在 HALT 方式下继续工作,但在执行“STOP”指令后自动停止工作。 - ADC 能将 CPU 从 HALT 方式下唤醒 (如果 ADC 中断允许)。 14 SH67P847 10. 脉宽调制 (PWM) SH67P847 包含一个 9 位 PWM 模块。PWM 模块可以产生周期和占空比分别可以调整的脉宽调制波形。PWM 模块的工作模式 由 PWMC 寄存器来设置。PWM 输出的周期由 PWMP 寄存器来设置。而 PWM 输出波形的占空比由 PWMD 寄存器来设置。 系统寄存器$15: PWM 控制寄存器 (PWMC) 地址 第3位 第2位 第1位 第0位 $15 PWMS TCK1 TCK0 X X X 0 读/写 PWM 功能关闭 (初始值) X X X 1 读/写 PWM 功能打开 X 0 0 X 读/写 PWM 时钟 = tOSC (初始值) X 0 1 X 读/写 PWM 时钟 = 2tOSC X 1 0 X 读/写 PWM 时钟 = 4tOSC X 1 1 X 读/写 PWM 时钟 = 8tOSC 0 X X X 读/写 PWM 占空比输出普通模式 (高电平有效) (初始值) 1 X X X 读/写 PWM 占空比输出反转模式 (低电平有效) 读/写 说明 第 0 位: PWM 输出允许设置寄存器 PWM_EN 读/写 第 2-1 位: PWM 时钟选择寄存器 第 3 位: PWM 占空比的输出模式设置寄存器 PWM 输出引脚与 PORTB.1 共用。 系统寄存器$16 - $17: PWM 周期控制寄存器 (PWMP) 地址 第3位 第2位 第1位 第0位 $16 PP.3 PP.2 PP.1 PP.0 读/写 PWM 周期低位寄存器 $17 PP.7 PP.6 PP.5 PP.4 读/写 PWM 周期高位寄存器 读/写 说明 PWM 输出周期 = [PP.7, PP.0] X PWM 时钟。 当[PP.7, PP.0] = 00H, 如果 PWMS 位设置为 0, PWM 输出低电平。 当[PP.7, PP.0] = 00H, 如果 PWMS 位设置为 1, PWM 输出高电平。 系统寄存器$18 - $1A: PWM 占空比控制寄存器 (PWMD) 地址 第3位 第2位 第1位 第0位 读/写 说明 $18 - - - PDF.0 读/写 PWM 占空比微调寄存器 $19 PD.3 PD.2 PD.1 PD.0 读/写 PWM 占空比低位寄存器 $1A PD.7 PD.6 PD.5 PD.4 读/写 PWM 占空比高位寄存器 PWM 输出占空比 = [PD.7, PD.0] X PWM 时钟。 如果[PP.7, PP.0] ≤ [PD.7, PD.0], 当 PWMS 位设置为 0, PWM 输出高电平。 如果[PP.7, PP.0] ≤ [PD.7, PD.0], 当 PWMS 位设置为 1, PWM 输出低电平。 15 SH67P847 编程注意事项: 1. 2. 3. 4. 5. 6. 选择 PWM 模块时钟源。 通过写适当的值到 PWM 周期控制寄存器 (PWMP) 设置 PWM 周期: 首先设置低 4 位, 然后设置高 4 位。 通过写适当的值到 PWM 占空比控制寄存器 (PWMD) 设置 PWM 占空比: 先设置微调位, 然后设置低 4 位, 最后设置高 4 位。 通过写 PWM 控制寄存器 (PWMC) 的 PWMS 位选择 PWM 占空比的输出模式。 为了输出适当的 PWM 波形, 通过写 PWM 控制寄存器 (PWMC) 中的 PWM_EN 位为“1”来允许 PWM 模块工作。 如果 PWM 周期或者占空比需要改变, 操作流程如同步骤 2 或者步骤 3 说明。修改后的重载入计数器的值在下一个周期开始有效。 01 02 03 04 05 7D 7E 7F 80 EF F0 01 02 03 04 PWM clock tPWM PWM output PWM output (PWMS = 1) PWM output duty cycle = 7FH X tPWM [PP.7, PP.0] = F0H [PD.7, PD.0] = 7FH PWM output period cycle = F0H X tPWM PWM 输出举例 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 01 02 03 04 05 06 07 08 PWM clock tPWM Write [PP.7, PP.0] = 0DH Write [PD.7, PD.0] = 07H PWM output Duty cycle = 06H X tPWM Duty cycle = 06H X tPWM Period cycle = 0FH X tPWM Duty cycle = 07H X tPWM Period cycle = 0DH X tPWM PWM 输出周期或者占空比周期变化举例 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 01 02 03 04 05 06 07 08 PWM clock tPWM [PD.7, PD0] = 06H [PDF.0]=0 [PD.7, PD0] = 06H [PDF.0]=1 PWM output Duty cycle = 6H X tPWM Duty cycle = (6+1/2) X tPWM Period cycle = 0DH X tPWM Period cycle = 0DH X tPWM PWM 输出微调举例 16 Duty cycle = (6+1/2) X tPWM SH67P847 11. 低电压复位 (LVR) LVR 用于监控电源电压并产生芯片内部复位。它一般用于交流供电电路或有大负载的电路, 这些电路工作时负载的启动会引起 器件工作电压暂时低于电路的最低允许工作电压。 LVR 功能可以通过代码选项永久开启或禁止。 当 LVR 功能开启时其功能如下: - 当 VDD ≤ VLVR 时产生系统复位。 - 当 VDD > VLVR 时释放系统复位。 这里, VDD: 电源电压, VLVR: LVR 检测电压。 12. 看门狗定时器 (WDT) 看门狗定时器是一个递减计数器, 拥有独立内建 RC 振荡器作为时钟源, 因此在 STOP 模式下仍会持续运行。当定时器溢出时, WDT 将复位 CPU。通过代码选项可以允许或禁止该功能。WDT 控制位 ($1E 第 2-0 位) 用来选择不同的溢出时间。定时器溢 出后, WDT 溢出标志 ($1E 第 3 位) 将由硬件自动设置为“1”。通过读或者写系统寄存器$1E, WDT 会在溢出前重新开始计数。 系统寄存器$1E: 看门狗定时器 (WDT) 地址 $1E 第3位 第2位 第1位 第0位 读/写 WDT.2 WDT.1 WDT.0 读/写 第 2-0 位: 看门狗定时器控制寄存器 只读 第 3 位: 看门狗定时器溢出标志寄存器 X 0 0 0 读/写 WDT 溢出周期为 4096ms X 0 0 1 读/写 WDT 溢出周期为 1024ms X 0 1 0 读/写 WDT 溢出周期为 256ms X 0 1 1 读/写 WDT 溢出周期为 128ms X 1 0 0 读/写 WDT 溢出周期为 64ms X 1 0 1 读/写 WDT 溢出周期为 16ms X 1 1 0 读/写 WDT 溢出周期为 4ms X 1 1 1 读/写 WDT 溢出周期为 1ms 0 X X X 只读 未发生 WDT 溢出复位 1 X X X 只读 WDT 溢出, 发生 WDT 复位 WDT 说明 注意: 看门狗定时器溢出周期是当 VDD = 5V 时的参考值。 13. HALT 和 STOP 模式 在执行 HALT 指令后, CPU 将进入待机模式 1 (HALT)。在 HALT 模式下, CPU 将停止工作。但是其周边电路 (Timer, ADC…) 将继续工作。 在执行 STOP 指令后, CPU 将进入待机模式 2 (STOP)。 在 STOP 模式下, 除了看门狗定时器电路外, 整个芯片 (包括振荡器) 将 停止工作。 在 HALT 模式下, 发生任何中断 CPU 将被唤醒。 在 STOP 模式下, 发生端口中断 CPU 将被唤醒。 当通过任何中断, CPU 从 HALT/STOP 被唤醒, 将会首先执行相关中断服务子程序。然后才会执行 HALT/STOP 的下一条指令。 17 SH67P847 14. 预热计数器 本芯片内建振荡器预热计数器, 它能消除振荡器在下列情况下起振时的不稳定状态: 14.1. 上电复位 15 在 RC 振荡器模式下, fOSC = 16MHz, 预热计数器预分频比为 1/2 (32768)。 14.2. 由 STOP 模式唤醒, WDT 复位, LVR 复位 在 RC 振荡器模式下, fOSC = 16MHz, 预热计数器预分频比为 1/28 (256)。 15. 代码选项 15.1. 看门狗定时器 OP_WDT: 0 = 关闭 (初始值) 1 = 打开 15.2. Low Voltage Reset OP_LVR: 0 = 关闭 (初始值) 1 = 打开 18 SH67P847 OTP在系统烧写时注意事项 OTP在系统编程时注意事项只对OTP芯片有效。 对于用户采用 COB (Chip on Board) 组装方式时, OTP 芯片可以使用在系统编程 (In System Programming) 方式编程。 使用在系统编程方式编程时, 用户必须在印制板 (PCB) 上预留出 OTP 芯片的编程接口, 以便连接 OTP 编程器进行编程。 在此模式下, 用户可在OTP芯片编程前将包括OTP芯片在内的所有器件组装在PCB上后, 再对OTP芯片进行编程。当然也可以可 先将OTP芯片组装到PCB上, 对OTP芯片编程完成后再组装其它器件。 为了提高 OTP 编程的可靠性, 在编程操作时 OTP 编程信号线必须直接连接到 OTP 编程器上, 不允许有其它器件或外加电路与之 并联。所以在 PCB 上必须预留 4 组跳线或分割焊盘, 将 OTP 编程接口 (VDD, VPP, SDA, SCK) 与应用电路分隔开, 如下图所示: Application PCB OTP Chip VPP VDD SCK OTP Writer SDA GND To Application Circuit Jumper 具体操作步骤如下: (1) 在 OTP 芯片编程前将 4 组跳线断开。 (2) 将 OTP 芯片的编程接口连接到 OTP 编程器, 完成代码编程。 (3) 将用户板与 OTP 烧写器编程器断开, 将 4 组跳线短接。 有关 OTP 编程的更多详细资料, 请参见 OTP 编程器的用户手册。 19 SH67P847 指令集 所有的指令都是单周期和单字的指令。具有面向存储器的操作特性。 1. 以下为算术和逻辑指令 1.1. 累加器类型 助记符 指令代码 功能 标志位改变 00000 0bbb xxx xxxx AC <- Mx + AC + CY CY 00000 1bbb xxx xxxx AC, Mx <- Mx + AC + CY CY 00001 0bbb xxx xxxx AC <- Mx + AC CY 00001 1bbb xxx xxxx AC, Mx <- Mx + AC CY 00010 0bbb xxx xxxx AC <- Mx + -AC + CY CY 00010 1bbb xxx xxxx AC, Mx <- Mx + -AC + CY CY 00011 0bbb xxx xxxx AC <- Mx + -AC +1 CY 00011 1bbb xxx xxxx AC, Mx <- Mx + -AC +1 CY EOR X (, B) 00100 0bbb xxx xxxx AC <- Mx ⊕ AC EORM X (, B) 00100 1bbb xxx xxxx AC, Mx <- Mx ⊕ AC 00101 0bbb xxx xxxx AC <- Mx | AC ADC X (, B) ADCM X (, B) ADD X (, B) ADDM X (, B) SBC X (, B) SBCM X (, B) SUB X (, B) SUBM OR X (, B) X (, B) ORM X (, B) 00101 1bbb xxx xxxx AC, Mx <- Mx | AC AND X (, B) 00110 0bbb xxx xxxx AC <- Mx & AC 00110 1bbb xxx xxxx AC, Mx <- Mx & AC 11110 0000 000 0000 0 -> AC [3], AC[0] -> CY; AC 右移 1 位 CY 指令代码 功能 标志位改变 01000 iiii xxx xxxx AC <- Mx + I CY 01001 iiii xxx xxxx AC, Mx <- Mx + I CY 01010 iiii xxx xxxx AC <- Mx + -I +1 CY 01011 iiii xxx xxxx AC, Mx <- Mx + -I +1 CY 01100 iiii xxx xxxx AC, Mx <- Mx ⊕ I 01101 iiii xxx xxxx AC, Mx <- Mx | I 01110 iiii xxx xxxx AC, Mx <- Mx & I 助记符 指令代码 功能 标志位改变 DAA X 11001 0110 xxx xxxx AC, Mx <- 加法的十进制调整 CY DAS 11001 1010 xxx xxxx AC, Mx <- 减法的十进制调整 CY ANDM X (, B) SHR 1.2. 立即数类型 助记符 ADI ADIM SBI SBIM EORIM ORIM ANDIM X, I X, I X, I X, I X, I X, I X, I 1.3. 十进制调整 X 20 SH67P847 2. 传输指令 助记符 指令代码 功能 LDA X (, B) 00111 0bbb xxx xxxx AC <- Mx STA X (, B) 00111 1bbb xxx xxxx Mx <- AC 01111 iiii xxx xxxx AC, Mx <- I 指令代码 功能 LDI X, I 标志位改变 3. 控制指令 助记符 BAZ X 10010 xxxx xxx xxxx PC <- X, 如果 AC = 0 BNZ X 10000 xxxx xxx xxxx PC <- X, 如果 AC ≠ 0 10011 xxxx xxx xxxx PC <- X, 如果 CY = 1 BC X BNC X 10001 xxxx xxx xxxx PC <- X, 如果 CY ≠ 1 BA0 X 10100 xxxx xxx xxxx PC <- X, 如果 AC (0) = 1 BA1 X 10101 xxxx xxx xxxx PC <- X, 如果 AC (1) = 1 BA2 X 10110 xxxx xxx xxxx PC <- X, 如果 AC (2) = 1 BA3 X 10111 xxxx xxx xxxx PC <- X, 如果 AC (3) = 1 CALL X 11000 xxxx xxx xxxx ST <- CY, PC + 1 PC <- X (不包括 p) RTNW H, L 11010 000h hhh llll PC <- ST; TBR <- hhhh, AC <- lllI RTNI 11010 1000 000 0000 CY, PC <- ST HALT 11011 0000 000 0000 STOP 11011 1000 000 0000 JMP X 1110p xxxx xxx xxxx PC <- X (包括 p) TJMP 11110 1111 111 1111 PC <- (PC11-PC8) (TBR) (AC) NOP 11111 1111 111 1111 空操作 标志位改变 CY 其中, PC 程序计数器 I 立即数 AC 累加器 ⊕ 逻辑异或 -AC 累加器的反码 | 逻辑或 CY 进位标志位 & 逻辑与 Mx 数据存储器 bbb RAM 页 p ROM 页 B RAM 页 ST 堆栈 TBR 查表寄存器 21 SH67P847 电气特性 极限参数* *注释 直流供电电压. . . . . . . . . . . . . . . . . . . . . .-0.3V to +7.0V 输入信号电压. . . . . . . . . . . . . . . . . .-0.3V to VDD + 0.3V 工作环境温度. . . . . . . . . . . . . . . . . . . . . .-40°C to +85°C 存储温度. . . . . . . . . . . . . . . . . . . . . . . . -55°C to +125°C 如果器件的工作条件超过左列“极限参数”的范围, 将造成器 件永久性破坏。只有当器件工作在说明书所规定的范围内时 功能才能得到保障。器件在极限参数列举的条件下工作将会 影响到器件工作的可靠性。 直流电气特性 (VDD = 3.3 - 5.5V, GND = 0V, TA = 25°C, 除非另有说明) 参数 符号 最小值 典型值* 最大值 单位 工作电压 VDD 3.3 5.0 5.5 V 工作电流 IOP1 - 3 4.5 fOSC = 16MHz (fSYS = 1MHz), VDD = 5.0V mA 所有输出引脚无负载, 执行 NOP 指令, WDT, ADC, LVR 关闭 待机电流 (HALT) ISB1 - - 1.5 fOSC = 16MHz (fSYS = 1MHz), VDD = 5.0V mA 所有输出引脚无负载, CPU 关闭 (执行 HALT 指令), WDT, ADC, LVR 关闭 1 fOSC = 16MHz (fSYS = 1MHz), VDD = 5.0V 所有输出引脚无负载 (包括所有数字输入引脚不浮 µA 动), CPU 关闭 (执行 STOP 指令), WDT, ADC, LVR 关闭 fOSC = 16MHz (fSYS = 1MHz), VDD = 5.0V 所有输出引脚无负载 (包括所有数字输入引脚不浮 µA 动), CPU 关闭 (执行 STOP 指令), WDT 打开, ADC, LVR 关闭 待机电流 (STOP) WDT 电流 ISB2 - - 条件 fOSC = 16MHz (fSYS = 1MHz) IWDT - - 20 VIL1 GND - 0.3 X VDD V I/O 端口 (除 PORTA.3) VIL2 GND - 0.2 X VDD V PORTA.3 VIH1 0.7 X VDD - VDD V I/O 端口 (除 PORTA.3) VIH2 0.8 X VDD - VDD V PORTA.3 输入漏电流 IIL -1 - 1 µA I/O 端口, VIN = GND 或 VDD, VDD = 5.0V 输出漏电流 IOL -1 - 1 µA PORTA.3, VDD = 5.0V, VOUT = VDD 输出高电压 VOH VDD - 0.7 - - V I/O 端口, PWM IOH = -5mA (VDD = 5.0V) 输出低电压 VOL - - GND + 0.6 V I/O 端口, PWM IOL = 5mA (VDD = 5.0V) 上拉电阻 RPH - 30 - 输入低电压 输入高电压 kΩ 上拉电阻 (VDD = 5.0V) ∗: 典型值这一列数据为 5.0V, 25°C, 除非另有说明。 流过VDD的最大电流值须小于25mA。 流过 GND 的最大电流值须小于 25mA。 22 SH67P847 交流电气特性 (VDD = 3.3V - 5.5V, GND = 0V, TA = 25°C, 除非另有说明) 参数 符号 最小值 典型值* 最大值 WDT 时间 tWDT 1 - - 频率漂移范围 (内建 RC) fOSC 15.2 16 16.8 MHz 频率稳定度 (内建 RC) |∆F|/F - - 2 % 内建 RC 振荡器, TA = 25°C, |F(3.3V)-F(5V)|/F(5V) tCY - 1 - µs fOSC = 16MHz (fSYS = 1MHz) 指令周期时间 单位 条件 ms VDD = 5.0V 内建 RC 振荡器, VDD = 5.0V, TA = 5°C - 45°C 包括芯片间差异 模/数转换器电气特性 (VDD = 3.3V - 5.5V, GND = 0V, TA = 25°C, fOSC = 16MHz (fSYS = 1MHz), 除非另有说明) 参数 符号 最小值 典型值* 最大值 单位 NR - - 10 bit 参考电压 VREF 2.4 - VDD V A/D 输入电压 VAIN GND - VREF V A/D 输入电阻 RAIN 2000 - - kΩ VIN = 5.0V VREF 输入电阻 RREF 180 - - kΩ VIN = 5.0V 差分非线性误差 EDNL - - ±1 LSB VREF = VDD = 5.0V 积分非线性误差 EINL - - ±2 LSB VREF = VDD = 5.0V, GND ≤ VAIN ≤ 4.8V 满刻度误差 EF - - ±5 LSB VREF = VDD = 5.0V 偏移量误差 EZ - - ±1 LSB VREF = VDD = 5.0V A/D 时钟周期 tAD 1 - 8 µs fOSC = 16MHz (fSYS = 1MHz) A/D 转换时间 tCNV1 - 15 - tAD 设置 ADCS = 0 - 114 - tAD 设置 ADCS = 1 精度 条件 GND ≤ VAIN ≤ VREF 低电压复位电气特性 (GND = 0V, TA = 25°C, fOSC = 16MHz (fSYS = 1MHz), 除非另有说明) 参数 低电压复位电压 符号 最小值 典型值* 最大值 单位 VLVR 3.3 - 3.7 V 条件 LVR 有效 时序波形 系统时钟时序波形: T1 T2 T3 T4 T5 fOSC/4 System Clock tCY 23 T6 T7 T8 T1 T2 T3 T4 SH67P847 应用电路 (仅供参考): 应用 1 (充电器) (1) 工作电压: 5.0V (2) 振荡器: 内建 RC (3) PORTA.2 - PORTA.0: ADC 输入, 用于采样电池电压, 充电电流和电池温度 (4) PORTB.0: LED 驱动端口 (5) PORTB.1: 充电控制端口 (6) PORTA.3 和 GND 之间接 10000pF 瓷片电容可以提高整体 EFT 性能 FROM ADAPTER 12Vdc Battery Pack VDD RB1 LED RB2 103 R2 PWM PB.0 PA.3 AN2 GND VDD AN0 AN1 VDD Rsense R1 VDD RT(NTC) 24 SH67P847 订购信息 产品编号 封装 SH67P847M 8L SOP 25 SH67P847 封装信息 SOP 8L 外形尺寸 单位: 英寸/毫米 HE 5 E 8 θ 1 b L 4 Detail F A1 e D A c D y See Detail F Seating Plane 符号 A A1 b c D E e HE 英寸单位尺寸 毫米单位尺寸 最大值 0.069 最大值 1.75 最小值 0.053 最小值 1.35 最大值 0.010 最大值 0.25 最小值 0.004 最小值 0.10 0.016 0.41 0.008 0.20 最大值 0.196 最大值 4.98 0.189 4.80 最大值 0.157 最大值 3.99 最小值 0.150 最小值 3.81 0.050 1.27 最大值 0.244 最大值 6.20 最小值 0.228 最小值 5.79 最大值 0.050 最大值 1.27 最小值 0.016 最小值 0.41 y 最大值 0.004 最大值 0.10 θ 0° ~ 8° 0° ~ 8° L 注意: 1. 尺寸 D 的最大值包括末端毛边 2. 尺寸 E 不包括树脂凸缘 26 SH67P847 产品规格更改记录 版本 1.0 记录 日期 2008 年 7 月 初始版本 27