用户手册 带 12-bit ADC 的 8 位 RISC OTP MCU REV 1.0.3 通讯地址 : 深圳市南山区蛇口南海大道 1079 号花园城数码大厦 A 座 9 楼邮政编码 :518067 公司电话 :+(86 755)86169257 传真 :+(86 755)86169057 公司网站 :www.chipsea.com Rev.1.0.3 第 1 页, 共 84 页
版本历史 版本历史 历史版本. 修改内容 版本日期 REV 1.0.0 初始版本 2013-07-08 REV 1.0.1 增加晶振精度信息, 修正引脚图 2013-07-17 REV 1.0.2 增加定时 / 计数器 2 注解 2013-07-19 REV 1.0.3 修改 CSU8RP3116 的定时器频率 2013-07-22 第 2 页, 共 84 页
目录 目录 版本历史... 2 目录... 3 1 产品概述... 5 1.1 功能描述... 5 1.2 主要特性... 5 1.3 PIN 配置... 6 2 标准功能... 8 2.1 CPU 核... 8 2.1.1 存储器... 10 2.1.2 状态寄存器... 12 2.1.3 SFR... 13 2.2 时钟系统... 15 2.2.1 概述... 15 2.2.2 时钟框图... 15 2.2.3 寄存器... 16 2.2.4 内部高速 RC 时钟... 16 2.2.5 内部低速 wdt 时钟... 17 2.2.6 外部高速晶振时钟... 17 2.2.7 外部低速晶振时钟... 17 2.2.8 外部 RC 振荡器... 17 2.2.9 外部时钟源... 17 2.3 复位系统... 18 2.3.1 上电复位... 19 2.3.2 看门狗复位... 19 2.3.3 掉电复位... 19 2.3.4 外部硬件复位... 20 2.4 中断... 21 2.4.1 中断使能寄存器... 22 2.4.2 中断标志寄存器... 23 2.4.3 外部中断 0... 24 2.4.4 外部中断 1... 24 2.4.5 AD 中断溢出... 25 2.4.6 定时器 0 溢出中断... 25 2.4.7 定时 / 计数器 2 溢出中断... 25 2.4.8 定时 / 计数器 3 溢出中断... 25 2.4.9 PUSH 和 POP 处理... 25 2.5 定时器 0... 26 2.6 I/O PORT... 28 2.6.1 PT1 口... 28 2.6.2 PT3 口... 30 2.6.3 PT5 口... 31 3 增强功能... 33 3.1 HALT 和 SLEEP 模式... 33 3.2 看门狗 (WDT)... 35 第 3 页, 共 84 页
目录 3.3 定时 / 计数器 2... 37 3.3.1 寄存器描述... 37 3.3.2 蜂鸣器... 40 3.3.3 PWM... 40 3.4 定时 / 计数器 3... 41 3.4.1 寄存器描述... 41 3.4.2 蜂鸣器... 43 3.4.3 PWM... 43 3.5 模数转换器 (ADC)... 45 3.5.1 寄存器描述... 45 3.5.2 转换时间... 48 3.5.3 使用内部参考电压的校准方法... 50 3.5.4 AD 失调电压校正... 51 3.5.5 数字比较器... 52 3.5.6 内部测量 VDD 的电压... 53 3.6 数据查表... 55 3.7 输入逻辑电平电压配置... 56 3.8 烧录模块... 57 3.9 代码选项... 58 4 MCU 指令集... 59 5 电气特性... 74 5.1 极限值... 74 5.2 直流特性 (VDD = 5V,T A = 25ºC, 如无其他说明则都是此条件 )... 74 5.3 ADC 特性 (VDD = 5V,T A = 25ºC, 如无其他说明则都是此条件 )... 76 5.4 16MHZ IRC 时钟频率特性... 77 5.5 8MHZ IRC 时钟频率特性... 77 5.6 4MHZ IRC 时钟频率特性... 77 5.7 2MHZ IRC 时钟频率特性... 78 5.8 WDT 时钟频率特性... 78 5.9 ERC 频率特性... 79 5.10 2.0V 掉电复位温度特性... 79 5.11 2.4V 低电压复位温度特性... 79 5.12 3.6V 低电压复位温度特性... 80 5.13 1.4V(V14_CHO[2:0]=000) 内部参考电压温度特性... 80 5.14 1.4V(V14_CHO[2:0]=100) 内部参考电压温度特性... 81 5.15 2V 内部参考电压温度特性... 81 5.16 3V 内部参考电压温度特性... 81 5.17 4V 内部参考电压温度特性... 82 6 封装图... 83 6.1 DIP-14PIN... 83 6.2 SOP-14PIN... 84 第 4 页, 共 84 页
产品概述 1 产品概述 1.1 功能描述 CSU8RP3115/CSU8RP3116/CSU8RP3119 是一个带 12-bit ADC 的 8 位 CMOS 单芯片 RISC MCU, 内置 1K 14 位 OTP 程序存储器 1.2 主要特性 高性能的 RISC CPU 8 位单片机 MCU 内置 1K 14 位程序存储器 OTP 64 字节数据存储器 (SRAM) 只有 42 条单字指令 8 级存储堆栈 支持 ISP 振荡器 内带 16/8/4/2MHz 振荡器, 精度为 ±1%@5V 外部 32768Hz 晶振 (RTC) 或 4MHz~16MHz 晶振 ERC 3V DC~4M 5V DC~8M 外设特性 11 位双向 I/O 口,1 位输入口 2 路 PWM 输出,2 路蜂鸣器输出 4 个内部中断,2 个外部中断 5 个具有唤醒功能的输入口 5+3 路 12-bitADC 内部 1.4V 2.0V 3.0V 4.0V VDD 外部输入六种参考电压选择 带数字比较器 低电压检测 (LVD) 引脚, 内部提供 2.4V 3.6V 电压比较 专用微控制器的特性 上电复位 (POR) 上电复位延迟定时器 (98ms) 内带低电压复位 (LVR) 定时器 0 8 位可编程预分频的 8 位的定时器 定时 / 计数器 2 8 位可编程预分频的 8 位的分频器 定时 / 计数器 3 8 位可编程预分频的 8 位的分频器 扩展型看门狗定时器 (32K WDT) 可编程的时间范围 CMOS 技术 工作电压范围 2.2V~5.5V@fcpu=4MHz( 指令周期 ) 2.4V~5.5V@fcpu=8MHz( 指令周期 ) 工作温度范围 -40~85 ºC( 工业级 ) 低功耗特性 MCU 工作电流 正常模式 0.23mA@fosc=2MHz,fcpu=1MHz,3V 1.41mA@fosc=16MHz,fcpu=8MHz,3V 正常模式 6uA@32KHz,3V 休眠模式下的电流小于 1μA 3 个开漏输出口 输入逻辑电平电压可配置 封装 8/14-pin SOP DIP 型号 ROM 堆 PWM/ RAM 定时器 IO Wake-up ADC 输栈 Buzzer 引脚数入通道 封装 CSU8RP3115 1K*14 64 8 3(16MHz) 2(16MHz) 6 2 3+3 8-pin SOP DIP CSU8RP3116 1K*14 64 8 3(8MHz) 2(8MHz) 12 5 5+3 14-pin SOP DIP CSU8RP3119 1K*14 64 8 3(16MHz) 2(16MHz) 12 5 5+3 14-pin SOP DIP 第 5 页, 共 84 页
产品概述 1.3 PIN 配置 表 1 引脚说明表 管脚名称 输入 / 输出管脚序号 描述 VDD P 1 电源 P1.5/XIN/INT1 I/O 2 IO; 外置晶振输入 ; 外部中断 1 输入, 具有唤醒功能 P1.4/XOUT/INT1 I/O 3 IO; 外置晶振输出 ; 外部中断 1 输入, 具有唤醒功能 P1.3/RST /INT1 I 4 普通输入口 ; 复位输入 ; 外部中断 1 输入, 具有唤醒功能 P5.1/BZ3/PWM3 I/O 5 IO; 蜂鸣器输出 ;PWM 输出 ; 具有开漏输出功能 P5.0/BZ2/PWM2 I/O 6 IO; 蜂鸣器输出 ;PWM 输出 ; 具有开漏输出功能 P1.1/INT1/T3 I/O 7 IO; 外部中断 1 输入 ; 具有唤醒功能 ; 具有开漏输出功能 ; 定时 / 计数器 3 外部输入 P1.0/INT0/T2 I/O 8 IO; 外部中断 0 输入 ; 具有唤醒功能 ; 定时 / 计数器 2 外部输入 P3.0/AIN0/VREF I/O 9 IO;ADC 输入 0;ADC 参考电压输入 P3.1/AIN1 I/O 10 IO;ADC 输入 1 P3.2/AIN2 I/O 11 IO;ADC 输入 2 P3.3/AIN3 I/O 12 IO;ADC 输入 3 P3.4/AIN4 I/O 13 IO;ADC 输入 4 VSS P 14 地 第 6 页, 共 84 页
产品概述 8-pin SOP DIP 14-pin SOP DIP 图 1 8-pin 配置图 图 2 14-pin 配置图 第 7 页, 共 84 页
标准功能 2 标准功能 2.1 CPU 核 SRAM Data memory 64 bytes Program Counter Program Bus (10 bits) OTP Program Memory 1K*14bits Adderss Mux Stack Register 8 Level Program Data (14 bits) Instruction Register Data Bus (8 bits) FSR Data Mux Instruction Decoder Work Register ALU Contorl information Status Register 图 3 CSU8RP3115/CSU8RP3116/CSU8RP3119 CPU 核的功能模块图 从 CPU 核的功能模块图中, 可以看到它主要包含 7 个主要寄存器及 2 个存储器单元 第 8 页, 共 84 页
标准功能 表 2 MCU 架构说明 模块名称描述程序计数器此寄存器在 CPU 的工作周期间起到很重要的作用, 它记录 CPU 每个周期处理程序存储器中指令的指针 在一个 CPU 周期中, 程序计数器将程序存储器地址 (10bits), 指令指针推送到程序存储器, 然后自动加 1 以进行下一次周期 栈寄存器堆栈寄存器是用来记录程序返回的指令指针 当程序调用函数, 程序计数器会将指令指针推送到堆栈寄存器 在函数执行结束之后, 堆栈寄存器会将指令指针送回到程序计数器以继续原来的程序处理 指令寄存器程序计数器将指令指针 ( 程序存储器地址 ) 推送到程序存储器, 程序存储器将程序存储器的数据 (14bits) 及指令推送到指令寄存器 CSU8RP3115/CSU8RP3116/CSU8RP3119 的指令是 14bits, 包括 3 种信息 : 直接地址, 立即数及控制信息 CPU 能将立即数推送到工作寄存器, 或者进行某些处理后, 根据控制信息, 将立即数存储到直接地址所指向的数据存储器寄存器中 直接地址 (8bits) 数据存储器的地址 CPU 能利用此地址来对数据存储器进行操作 直接数据 (8bits) CPU 通过 ALU 利用此数据对工作寄存器进行操作 控制信息它记录着 ALU 的操作信息 指令译码器指令寄存器将控制信息推送到指令译码器以进行译码, 然后译码器将译码后的信息发送到相关的寄存器 算术逻辑单元算术逻辑单元不仅能完成 8 位二进制的加, 减, 加 1, 减 1 等算术计算, 还能对 8 位变量进行逻辑的与, 或, 异或, 循环移位, 求补, 清零等逻辑运算 工作寄存器工作寄存器是用来缓存数据存储器中某些存储地址的数据 状态寄存器当 CPU 利用 ALU 处理寄存器数据时, 如下的状态会随着如下顺序变化 :PD, TO,DC,C 及 Z 文件选择寄存器在 CSU8RP3115/CSU8RP3116/CSU8RP3119 的指令集中,FSR 是用于间接数据处理 ( 即实现间接寻址 ) 用户可以利用 FSR 来存放数据存储器中的某个寄存器地址, 然后通过 IND 寄存器对这个寄存器进行处理 程序存储器 CSU8RP3115/CSU8RP3116/CSU8RP3119 内带 1K 14 位的 OTP 作为程序存储器 由于指令的操作码 (OPCODE) 是 14bits, 用户最多只能编程 1K 的指令 程序存储器的地址总线是 10bits, 数据总线是 14bits 数据存储器 CSU8RP3115/CSU8RP3116/CSU8RP3119 内带 64 bytes 的 SRAM 作为数据存储器 此数据存储器的地址总线是 6bits, 数据总线是 8bits 第 9 页, 共 84 页
标准功能 2.1.1 存储器 (1) 程序存储器程序存储器主要用于指令的存储, 在 CSU8RP3115/CSU8RP3116/CSU8RP3119 中, 该程序存储器是 1K*14bit 的程序 OTP, 对于程序员来说, 该存储器只读, 不可以写入 系统的 reset 地址为 000H, 中断入口地址为 004H, 需要注意的一点就是所有的中断共用同一个中断入口地址 Program Counter Reset Vector 0x000 Interrupt Vector 0x004 Stack Level1 Stack Level2 Stack Level3 Stack Level4 Stack Level5 Stack Level6 Stack Level7 Stack Level8 0x3FF 图 4 程序存储器 第 10 页, 共 84 页
标准功能 (2) 数据存储器数据存储器主要用于程序运行过程中, 全局以及中间变量的存储 该存储器分为三个部分 地址的 00H 至 07H 是系统特殊功能寄存器, 例如间接地址, 间接地址指针, 状态寄存器, 工作寄存器, 中断标志位, 中断控制寄存器 地址的 08H 至 3FH 外设特殊功能寄存器, 例如 IO 端口, 定时器, 系统特殊功能寄存器和外设特殊功能寄存器是用寄存器实现, 而通用数据存储器是 RAM 实现, 可以读出也可以写入 表 3 数据存储器地址分配 数据存储器 起始地址 结束地址 系统特殊功能寄存器 00H 07H 外设特殊功能寄存器 08H 3FH 通用数据存储器 40H 7FH 通过 IND0 以及 FSR0 这两个寄存器可以对数据存储器以及特殊功能寄存器进行间接访问 当从间接地址寄存器 (IND0) 读入数据时,MCU 实际上是以 FSR0 中的值作为地址去访问数据存储器得到数据 当向间接寄存器 (IND0) 写入数据时,MCU 实际上是以 FSR0 中的值作为地址去访问数据存储器将值存入该地址 其访问方式见 Data Memory FSR0 40H 00H IND0 40H 97H 97H 7FH 图 5 间接地址访问 第 11 页, 共 84 页
标准功能 2.1.2 状态寄存器 状态寄存器包含 ALU 的算术状态及复位状态 状态寄存器类似于其它寄存器, 可以作为任何指令的目标寄存器 如果状态寄存器是某条指令的目标寄存器, 而且影响到 Z,DC 或 C 位, 那么对这三个位的写是不使能 这些位是由器件逻辑进行置位或清零 TO 及 PD 位是不可写的 状态寄存器 ( 地址为 04h) 特性 R-0 R-0 U-0 R-0 R-0 R/W-0 R/W-0 R/W-0 STATUS LVD36 LVD24 PD TO DC C Z Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 7 LVD36:3.6V LVD 工作电压标志, 只有当代码选项 LVD_SEL 为 2 b01 和 2 b10 有效 1: 系统工作电压低于 3.6V, 说明低电压检测器已处于监控状态 0: 系统工作电压超过 3.6V, 低电压检测器没有工作 Bit 6 LVD24:2.4V LVD 工作电压标志, 只有当代码选项 LVD_SEL 为 2 b01 有效 1: 系统工作电压低于 2.4V, 说明低电压检测器已处于监控状态 0: 系统工作电压超过 2.4V, 低电压检测器没有工作 Bit 4 PD: 掉电标志位 通过对此位写 0 清零,sleep 后置此位 1: 执行 SLEEP 指令后 0: 上电复位后或硬件复位或 CLRWDT 指令之后 Bit 3 TO: 看门狗定时溢出标志 通过对此位写 0 清零, 看门狗定时溢出设置此位 1: 看门狗定时溢出发生 0: 上电复位后或硬件复位或 CLRWDT 指令后或 SLEEP 指令后 Bit 2 DC: 半字节进位标志 / 借位标志用于借位时, 极性相反 1: 结果的第 4 位出现进位溢出 0: 结果的第 4 位不出现进位溢出 Bit 1 C: 进位标志 / 借位标志用于借位时, 极性相反 1: 结果的最高位 (MSB) 出现进位溢出 0: 结果的最高位 (MSB) 不出现进位溢出 Bit 0 Z: 零标志 1: 算术或逻辑操作是结果为 0 0: 算术或逻辑操作是结果不为 0 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 12 页, 共 84 页
标准功能 2.1.3 SFR 特殊功能寄存器 (SFR) 包含系统专用寄存器和辅助专用寄存器 系统专用寄存器用于完成 CPU 核的功能, 由间接地址, 间接地址指针, 状态寄存器, 工作寄存器, 中断标志及中断控制寄存器 辅助专用寄存器是为辅助功能而设计, 比如 I/O 口, 定时器, 信号的条件控制寄存器 表 4 寄存器列表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 00h IND0 以 FSR0 中内容作为地址的数据存储器中的数据 xxxxxxxx 02h FSR0 间接数据存储器的地址指针 0 00000000 04h STATUS LVD36 LVD24 PD TO DC C Z xxu00000 05h WORK 工作寄存器 00000000 06h INTF TM2IF TM0IF SRADIF E1IF E0IF u0u00u00 07h INTE GIE TM2IE TM0IE SRADIE E1IE E0IE 00u00u00 0Ah EADRH PAR[9:8] uuuuuu00 0Bh EADRL PAR[7:0] 00000000 0Ch EDATH EDATH[5:0] uu000000 0Dh WDTCON WDTEN WTS[2:0] 0uuuu000 0Eh WDTIN WDTIN[7:0] 11111111 0Fh TM0CON T0EN T0RATE[2:0] T0RSTB T0SEL[1:0] 0000u100 10h TM0IN TM0IN[7:0] 11111111 11h TM0CNT TM0CNT[7:0] 00000000 16h MCK CST CST_INCST_WDT EO_SLP CLKSEL 0010uuu0 17h TM2CON T2EN T2RATE[2:0] T2CKS T2RSTB T2OUT PWM2OUT00000100 18h TM2IN TM2IN[7:0] 11111111 19h TM2CNT TM2CNT[7:0] 00000000 1ah TM2R TM2R[7:0] 00000000 1bh TM3CON T3EN T3RATE[2:0] T3CKS T3RSTB T3OUT PWM3OUT00000100 1ch TM3IN TM3IN[7:0] 11111111 1dh TM3CNT TM3CNT[7:0] 00000000 1eh TM3R TM3R[7:0] 00000000 20h PT1 PT1[5:3] PT1[1:0] uuxxxuxx 21h PT1EN PT1EN[5:3] PT1EN[1:0] uu000u00 22h PT1PU PT1PU[5:3] PT1PU[1:0] uu000u00 23h PT1CON PT11OD PT1W[3:0] E1M E0M[1:0] 00000000 28h PT3 PT3[4:0] uuuxxxxx 29h PT3EN PT3EN[4:0] uuu00000 2ah PT3PU PT3PU[4:0] uuu00000 2bh PT3CON PT3CON[4:0] uuu00000 2fh METCH VTHSEL V14_CHO[2:0] T3RATE[3] T2RATE[3] 00000000 30h PT5 PT5[1:0] uuuuuuxx 31h PT5EN PT5EN[1:0] uuuuuu00 32h PT5PU PT5PU[1:0] uuuuuu00 33h PT5CON PT51OD PT50OD uuuuuu00 3ch INTF2 TM3IF uuu0uuuu 3dh INTE2 TM3IE uuu0uuuu 34h SRADCON0 SRADACKS[1:0] SRADCKS[1:0] uu00uu00 35h SRADCON1 SRADEN SRADS OFTEN CALIF ENOV OFFEX VREFS[1:0] 00000000 36h SRADCON2 CHS[3:0] 0000uuuu 第 13 页, 共 84 页
标准功能 37h SRADL SRAD[7:0] 00000000 38h SRADH SRAD[11:8] uuuu0000 39h SROFTL SROFT[7:0] 00000000 3ah SROFTH SROFT[11:8] uuuu0000 注 : 进行读操作时, 无效位读出为 0 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 14 页, 共 84 页
标准功能 2.2 时钟系统 2.2.1 概述 芯片的时钟系统包括内置 16/8/4/2MHz 的 RC 振荡时钟 (IHRC) 外置高速晶振 内置低速 32KHz 的 WDT 时钟 外置低速的晶振时钟 外部 RC 时钟 外部时钟源 除去 WDT 时钟外, 以上时钟都可以做为系统时钟源 Fosc Fcpu 是 CPU 时钟频率 普通模式 ( 高速时钟 ):Fcpu=Fosc/N,N=2 4 8 16 32 低速模式 ( 低速时钟 ):Fcpu=Fosc/N,N=2 4 8 16 32 2.2.2 时钟框图 VSS VSS 22pF XIN 代码选项 XTAL_PIN[1:0] XOUT ERC XTAL1 32768Hz XTAL2 4~16MHz ECK CLK_SEL MUX MCK 代码选项 CLKDIV[1:0] MCK/2~MCK/16 CPUCLK 22pF 内置 16/8/4/2MHz RC 时钟 ICK 图 6 CSU8RP3115/CSU8RP3116/CSU8RP3119 振荡器状态框图 A VSS VDD 代码选项 XTAL_PIN[1:0] XIN XOUT ERC XTAL1 32768Hz XTAL2 4~16MHz ECK CLK_SEL MUX MCK 代码选项 CLKDIV[1:0] MCK/2~MCK/16 CPUCLK 内置 16/8/4/2MHz RC 时钟 ICK 图 7 CSU8RP3115/CSU8RP3116/CSU8RP3119 振荡器状态框图 B 第 15 页, 共 84 页
标准功能 2.2.3 寄存器 表 5 CSU8RP3115/CSU8RP3116/CSU8RP3119 时钟系统寄存器列表 地址名称 Bit7 Bits6 Bit5 Bits4 Bit3 Bits2 Bit1 Bit0 上电复位值 16H MCK CST CST_IN CST_WDT EO_SLP CLKSEL 0010uuu0 表 6 MCK 寄存器各位功能表 位地址标识符功能外部晶振启动开关 7 CST 1: 外部晶振关闭 0: 外部晶振打开内部晶振启动开关 6 CST_IN 1: 内部晶振关闭 0: 内部晶振打开内部 WDT 晶振启动开关 5 CST_WDT 1: 内部 WDT 晶振关闭 0: 内部 WDT 晶振打开外部低速晶振控制位 1: 如果选择的是外部低速晶振 (32768Hz), 在 sleep 模式下不关闭 4 EO_SLP 外部晶振 0:sleep 模式下关闭外部晶振时钟源选择位 CLK_SEL CPU 时钟 0 CLKSEL 0 内部晶振系统时钟 1 外部晶振系统时钟 对 MCK 寄存器进行写操作时, 建议使用 bcf 或 bsf 指令 注意 : 把 CPU 时钟由内部晶振切换到外部晶振, 并把内部晶振关闭时应按照以下顺序执行 bcf mck,7 call delay bsf mck,0 nop nop bsf mck,6 ; 打开外部晶振 ; 低速 32768Hz 推荐延迟 2S; 高速 16MHz 推荐延迟 15mS ; 切换到外部晶振 ; 关闭内部晶振 2.2.4 内部高速 RC 时钟 内部高速 RC 时钟 (16/8/4/2MHz), 通过寄存器 CST_IN 使能开关 当使用内部高速 RC 时钟做为系统的主时钟时, 外部晶振引脚 PT1.4 PT1.5 可以通过代码选项配置做为普通的 GPIO 口 第 16 页, 共 84 页
标准功能 2.2.5 内部低速 wdt 时钟 内部低速 wdt 时钟 (32kHz), 通过寄存器 CST_WDT 使能开关 内部 wdt 时钟不能做为系统主时钟, 只能做为 WDT 使用和定时器 0 使用 2.2.6 外部高速晶振时钟 外部高速晶振时钟, 通过代码选项配置为外部高速时钟, 同时通过寄存器 CST 使能开关 此时, PT1.4 PT1.5 口做为晶振引脚 2.2.7 外部低速晶振时钟 外部低速晶振时钟, 通过代码选项配置为外部低速时钟, 同时通过寄存器 CST 使能开关 此时, PT1.4 PT1.5 口做为晶振引脚 2.2.8 外部 RC 振荡器 外部 RC 振荡器, 通过代码选项配置为外部 RC 振荡器, 同时通过寄存器 CST 使能开关 此时, PT1.5 口做为 RC 输入引脚,PT1.4 做为普通的 GPIO 口 外置 RC 振荡器的频率最高可以到 8MHz, 最低可以到几 KHz, 甚至更低 2.2.9 外部时钟源 外部时钟源, 通过代码选项配置为外部高速时钟或外部低速时钟或外部 RC 振荡器, 同时通过寄存器 CST 使能开关 外部时钟源通过 PT1.5 口灌入时钟 当外部时钟源频率较快时, 代码选项建议选择外部高速时钟或外部 RC 时钟 ; 当外部时钟源频率较低时 ( 与外部低速时钟频率相当 ), 代码选项可以选择外部低速时钟或外部 RC 时钟 第 17 页, 共 84 页
标准功能 2.3 复位系统 CSU8RP3115/CSU8RP3116/CSU8RP3119 有以下方式复位 : 1) 上电复位 2) RST 硬件复位 ( 正常操作 ) 3) RST 硬件复位 ( 从 Sleep 模式 ) 4) WDT 复位 ( 正常操作 ) 5) WDT 复位 ( 从 Sleep 模式 ) 6) 低电压复位 (LVR) 上述任意一种复位发生时, 所有系统寄存器恢复默认状态 (WDT 复位 TO PD 标志位除外 ), 程序停止运行, 同时程序计数器 PC 清零 复位结束后, 系统从向量 000H 重新开始 各种复位情况下的 TO,PD 标志位如下表所示 表 7 复位信号和状态寄存器关系 条件 TO PD 上电复位 0 0 RST 硬件复位 ( 正常操作 ) 0 0 RST 硬件复位 ( 从 Sleep 模式 ) 0 0 WDT 复位 ( 正常操作 ) 1 不变 WDT 复位 ( 从 Sleep 模式 ) 1 不变 低电压复位 0 0 下图给出了复位电路原理图 POR RST LVR(2.0v) LVR(2.4v) LVR(3.6v) WDT Reset 代码选项选择 DRT To CPU 图 8 复位电路原理图 第 18 页, 共 84 页
标准功能 任何一种复位情况都需要一定的响应时间, 系统提供完善的复位流程以保证复位动作的顺利进行 对于不同类型的振荡器起振的时间不同, 所以完成复位的时间也有所不同 RC 振荡器起振时间最短, 外置低速晶振起振时间最长 所以在有外部晶振电路应用的情况下, 用户应在上电复位后, 预留一定的时间再从内部 RC 时钟切换到外部晶振电路 用户在终端使用过程中, 应注意考虑主机对上电复位的要求 VPOR VDD VLVR Internal reset twvs 图 9 上电复位电路示例及上电过程 参数 最小值 典型值 最大值 VPOR 1.8V 2.0V 2.2V VLVR 1.8V 2.0V 2.2V t WVS 78.4ms 98ms 117.6ms ( 测试条件 :VDD=5V,T=25 ) VPOR: 上电复位 VLVR: 低电压复位 t WVS : 等待电压稳定时间 2.3.1 上电复位 系统上电呈现逐渐上升的曲线形式, 需要一定时间才能达到正常的工作电压 ( 对于不同的指令周期所需工作电压是不同的, 指令周期越快相应所需的工作电压就越高, 见 5.2 直流特性 ) 要求用户系统的上电速度要大于 0.07V/mS, 尤其是要注意指令周期是 4/8MHz 时, 因为他要求的工作电压最高 2.3.2 看门狗复位 看门狗复位是一种系统的保护设置 在正常状态下, 程序将看门狗定时器清零 如出错, 系统处于未知状态, 此时利用看门狗复位 看门狗复位后, 系统重新进入正常状态 2.3.3 掉电复位 掉电复位针对外部引起的系统电压跌落情况, 例如受到干扰或者负载变化 系统掉电可能会引起系统工作状态不正常或者程序执行错误 第 19 页, 共 84 页
标准功能 图 10 系统掉电复位示意图 电压跌落可能会进入系统死区 进入系统死区, 即电源电压不能满足系统的最小工作电压要求 系统掉电复位示意图如上图所示 芯片的掉电复位点在 2.0V, 芯片的低电压复位点可以通过代码选项设置成 2.4V 或者 3.6V 或者不设置低电压复位点 为避免进入系统死区, 建议利用低电压复位 (LVR) 功能, 尤其是指令周期是高速应用的情况 不同指令周期的系统出错区域不同, 取决于指令周期工作电压范围, 见 5.2 如果指令周期是 4/8MHz 时, 建议使用 2.4V/3.6V 低电压复位 掉电复位性能的改善可以通过如下几点实现 : 1) 低电压复位 (LVR) 2) 看门狗复位 3) 降低系统指令周期 4) 采用外部复位电路 ( 稳压二极管复位电路 ; 电压偏移复位电路 ; 外部 IC 复位 ) 2.3.4 外部硬件复位 外部复位由代码选项 RESET_PIN 控制, 见 3.9 通过设置该代码选项, 可使能外部硬件复位功能 外部硬件复位引脚为施密特触发结构, 低电平有效 硬件复位引脚为高电平时, 系统正常工作 ; 硬件复位引脚为低电平时, 系统复位 在芯片代码选项使能外部硬件复位功能后, 需要注意的是 : 在系统上电完成后, 外部复位需要输入高电平, 否则, 系统会一直复位, 直到外部硬件复位结束 外部硬件复位可以在上电过程中使用系统复位 良好的外部复位电路可以保护系统避免进入系统死区 第 20 页, 共 84 页
标准功能 2.4 中断 CSU8RP3115/CSU8RP3116/CSU8RP3119 有 6 个中断源, 只有 1 个中断入口地址 004H 与中断相关的 SFR: 中断使能控制寄存器 INTE 和中断标志位寄存器 INTF 这 4 个中断源都各自有一个中断使能, 和一个总使能位 GIE, 并且它们的标志位硬件置位, 软件清 0 当响应中断时, 会把当前的 PC 值入栈保护, 并把 PC 置为 004H, 同时把总使能位 GIE 清 0 执行完中断服务程序, 并用 RETFIE 返回到之前的主程序, 并把 GIE 置 1 所有的中断都可以唤醒 sleep 睡眠模式和 halt 停止模式 E0IF E0IE E1IF E1IE Interrup to CPU ADIF ADIE TM0IF TM0IE TM2IF TM2IE TM3IF TM3IE GIE 图 11 中断逻辑 第 21 页, 共 84 页
标准功能 2.4.1 中断使能寄存器 INTE 寄存器 ( 地址为 07h) 特性 R/W-0 R/W-0 U-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 INTE GIE TM2IE TM0IE SRADIE E1IE E0IE Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 7 GIE: 全局中断使能标志 1 = 使能所有非屏蔽中断 0 = 不使能所有中断 Bit 6 TM2IE:8-Bit 定时 / 计数器 2 中断使能标志 1 = 使能定时 / 计数器 2 中断 0 = 不使能定时 / 计数器 2 中断 Bit 4 TM0IE:8-Bit 定时 0 器中断使能标志 1 = 使能定时器 0 中断 0 = 不使能定时器 0 中断 Bit 3 SRADIE:AD 中断使能标志 1 = 使能 AD 中断 0 = 不使能 AD 中断 Bit 1 E1IE: 外部中断 1 使能标志 1 = 使能外部中断 1 0 = 不使能外部中断 1 Bit 0 E0IE: 外部中断 0 使能标志 1 = 使能外部中断 0 0 = 不使能外部中断 0 INTE2 寄存器 ( 地址为 3dh) 特性 U-0 U-0 U-0 R/W-0 U-0 U-0 U-0 U-0 INTE2 TM3IE Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4 TM3IE:8-Bit 定时 / 计数器 3 中断使能标志 1 = 使能定时 / 计数器 3 中断 0 = 不使能定时 / 计数器 3 中断 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 22 页, 共 84 页
标准功能 2.4.2 中断标志寄存器 中断标志位都是硬件置 1, 软件清 0 某一个中断标志位在其对应的中断使能位没有置 1 的情况下, 也有可能硬件置 1 INTF 寄存器 ( 地址为 06h) 特性 U-0 R/W-0 U-0 R/W -0 R/W -0 U-0 R/W -0 R/W -0 INTF TM2IF TM0IF SRADIF E1IF E0IF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 6 TM2IF:8-Bit 定时 / 计数器 2 中断标志, 软件清零, 硬件置高 1 = 发生定时中断, 必须软件清 0 0 = 没发生定时中断 Bit 4 TM0IF:8-Bit 定时器 0 中断标志, 软件清零, 硬件置高 1 = 发生定时中断, 必须软件清 0 0 = 没发生定时中断 Bit 3 SRADIF:AD 中断中断标志, 软件清零, 硬件置高 1 = 发生 AD 中断, 必须软件清 0 0 = 没发生 AD 中断 Bit 1 E1IF: 外部中断 1 中断标志, 软件清零, 硬件置高 1 = 外部中断 1 发生中断, 必须软件清 0 0 = 外部中断 1 没发生中断 Bit 0 E0IF: 外部中断 0 中断标志, 软件清零, 硬件置高 1 = 外部中断 0 发生中断, 必须软件清 0 0 = 外部中断 0 没发生中断 INTF2 寄存器 ( 地址为 3ch) 特性 U-0 U-0 U-0 R/W -0 U-0 U-0 U-0 U-0 INTF2 TM3IF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4 TM3IF:8-Bit 定时 / 计数器 3 中断标志, 软件清零, 硬件置高 1 = 发生定时中断, 必须软件清 0 0 = 没发生定时中断 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 23 页, 共 84 页
标准功能 2.4.3 外部中断 0 PT1.0 为外部中断 0 的输入端 触发方式由 PT1CON 寄存器中的 E0M[1:0] 寄存器决定 INTE 寄存器中的 E0IE 为外部中断 0 的使能位,INTF 寄存器中的 E0IF 为中断标志位, 硬件置 1, 软件清 0 可唤醒 sleep 或 halt 模式 只要 PT1.0 被触发, 中断标志位 E0IF 就会置 1 PT1CON 寄存器 ( 地址为 23h) 特性 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT1CON E1M E0M[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 2 E1M: 外部中断 1 触发模式 1 = 外部中断 1 为下降沿触发 0 = 外部中断 1 在状态改变时触发 Bit 1-0 E0M[1:0]: 外部中断 0 触发模式 11 = 外部中断 0 在状态改变时触发 10 = 外部中断 0 在状态改变时触发 01 = 外部中断 0 为上升沿触发 00 = 外部中断 0 为下降沿触发 2.4.4 外部中断 1 PT1.1 PT1.3 PT1.4 和 PT1.5 都可作为外部中断 1 的输入端 触发方式由 PT1CON 寄存器中的 E1M 寄存器决定 INTE 寄存器中的 E1IE 为外部中断 0 的使能位,INTF 寄存器中的 E1IF 为中断标志位, 硬件置 1, 软件清 0 只要对应 PT 口作为外部中断输入端, 且外部中断 1 被触发, 中断标志位 E1IF 就会置 1 PT1CON 寄存器 ( 地址为 23h) 特性 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT1CON PT1W[3:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 6 PT1W[3]:PT1.5 外部中断 1 使能 0 = 禁止 PT1.5 外部中断 1 1 = 使能 PT1.5 外部中断 1 Bit 5 PT1W[2]:PT1.4 外部中断 1 使能 0 = 禁止 PT1.4 外部中断 1 1 = 使能 PT1.4 外部中断 1 Bit 4 PT1W[1]:PT1.3 外部中断 1 使能 0 = 禁止 PT1.3 外部中断 1 1 = 使能 PT1.3 外部中断 1 Bit 3 PT1W[0]:PT1.1 外部中断 1 使能 0 = 禁止 PT1.1 外部中断 1 1 = 使能 PT1.1 外部中断 1 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 24 页, 共 84 页
标准功能 2.4.5 AD 中断溢出 INTE 寄存器中的 SRADIE 为 ADC 中断的使能位,INTF 寄存器中的 SRADIF 为中断标志位, 软件清 0 当 ADC 转换完成时, SRADIF 就会硬件置 1 2.4.6 定时器 0 溢出中断 INTE 寄存器中的 TM0IE 为定时器 0 中断的使能位,INTF 寄存器中的 TM0IF 为中断标志位, 软件清 0 当定时器 0 溢出时, TM0IF 就会硬件置 1 2.4.7 定时 / 计数器 2 溢出中断 INTE 寄存器中的 TM2IE 为定时 / 计数器 2 中断的使能位,INTF 寄存器中的 TM2IF 为中断标志位, 软件清 0 当定时 / 计数器 2 溢出时, TM2IF 就会硬件置 1 2.4.8 定时 / 计数器 3 溢出中断 INTE2 寄存器中的 TM3IE 为定时 / 计数器 3 中断的使能位,INTF2 寄存器中的 TM3IF 为中断标志位, 软件清 0 当定时 / 计数器 3 溢出时, TM3IF 就会硬件置 1 2.4.9 PUSH 和 POP 处理 CSU8RP3115/CSU8RP3116/CSU8RP3119 有 8 级的 PUSH 和 POP 堆栈 有中断请求被响应后, 程序跳转到 004h 执行子程序 响应中断之前必须保存 WORK 和 STATUS 中的的标志位 ( 只保存 C,DC,Z) 芯片提供 PUSH 和 POP 指令进行入栈保存和出栈恢复, 从而避免中断中断结束后程序运行错误 子程序中也可以使用 PUSH 和 POP 指令对 WORK 和 STATUS(C,DC,Z) 进行保存和恢复 org 004H goto int_server int_server: push btfsc intf,e0if ; 判断外部中断 0 标志 goto ex0_int btfsc intf,e1if ; 判断外部中断 1 标志 goto ex1_int btfsc intf,tm0if ; 判断定时器 0 中断标志 goto tm0_int btfsc intf,tm2if ; 判断定时 / 计数器 2 中断标志 goto tm2_int btfsc intf,tm3if ; 判断定时 / 计数器 3 中断标志 goto tm3_int ex0_int: bcf intf, e1if ; 清除 e1if pop retfie 第 25 页, 共 84 页
标准功能 2.5 定时器 0 TM0IN[7:0] T0SEL[1:0] CPUCLK MCK CKT0 32KHz WDTCLK MUX RTC T0RATE[2:0] CKT0~CKT0/128 T0EN TM0CLK EN OUT 8 Bits Counter CLK 超时溢出 图 12 定时器 0 功能框图 定时器 0 模块的输入为 CPUCLK 在定时器 0 模块集成了一个分频器, 分频的时钟 TM0CLK 作为 8 bits 计数器的输入时钟 当用户设置了定时器 0 模块的使能标志,8 bits 计数器将启动, 将会从 000H 递增到 TM0IN 用户需要设置 TM0IN( 定时器 0 模块中断信号选择器 ) 以选择定时超时中断信号 当定时超时发生时, 中断标志位会自设置, 程序计数器会跳转到 004H 以执行中断服务程序 表 8 定时器 0 寄存器列表 地址 名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 上电复位值 06H INTF TM0IF u0u00u00 07H INTE GIE TM0IE 00u00u00 0FH TM0CON T0EN T0RATE[2:0] T0RSTB T0SEL[1:0] 0000u100 10H TM0IN TM0IN[7:0] 11111111 11H TM0CNT TM0CNT[7:0] 00000000 第 26 页, 共 84 页
标准功能 表 9 TM0CON 寄存器各位功能表 位地址 标识符 功能 7 T0EN 定时器 0 使能位 1: 使能定时器 0 0: 禁止定时器 0 定时器 0 时钟选择 T0RATE [2:0] TM0CLK 000 CKT0 001 CKT0/2 6:4 T0RATE[2:0] 010 CKT0/4 011 CKT0/8 100 CKT0/16 101 CKT0/32 110 CKT0/64 111 CKT0/128 2 T0RSTB 定时器 0 复位 1: 禁止定时器 0 复位 0: 使能定时器 0 复位当将该位为 0 时, 定时器 0 复位后,T0RSTB 会自动置 1 时钟源选择 T0SEL[1:0] 定时器 0 时钟源 00 CPUCLK 1:0 T0SEL[1:0] 仅当外部接 32768Hz 晶振, 且晶振打开时有效 01 MCK 10 外部 32768Hz 晶振时钟, 11 内部 32K WDT 时钟, 仅当内部 WDT 晶振打开时有效 表 10 TM0IN 寄存器各位功能表 位地址 标识符 功能 7 :0 TM0IN[7:0] 定时器 0 溢出值 ( 溢出值 :1~255) 表 11 TM0CNT 寄存器各位功能表 位地址标识符功能 7 :0 TM0CNT[7:0] 定时器 0 计数寄存器, 只读操作 : 1) 设置 TM0CLK, 为定时器 0 模块选择输入 2) 设置 TM0IN, 选择定时器 0 溢出值 ( 溢出值 :1~255) 3) 设置寄存器标志位 :TM0IE 与 GIE, 使能定时器 0 中断 4) 清零寄存器标志位 :T0RSTB, 复位定时器 0 模块的计数器 5) 设置寄存器标志位 :TM0EN, 使能定时器 0 模块的 8 bits 计数器 6) 当定时超时发生时, 程序计数器会跳转到 004H 定时器 0 溢出时间计算方法 : 定时器 0 溢出时间 =(TM0IN+1)/TM0CLK. 第 27 页, 共 84 页
标准功能 2.6 I/O PORT 表 12 I/O 口寄存器表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 20h PT1 PT1[5:3] PT1[1:0] uuxxxuxx 21h PT1EN PT1EN[5:3] PT1EN[1:0] uu000u00 22h PT1PU PT1PU[5:3] PT1PU[1:0] uu000u00 23h PT1CON PT11OD PT1W[3:0] E1M E0M[1:0] 00000000 28h PT3 PT3[4:0] uuuxxxxx 29h PT3EN PT3EN[4:0] uuu00000 2ah PT3PU PT3PU[4:0] uuu00000 2bh PT3CON PT3CON[4:0] uuu00000 30h PT5 PT5[1:0] uuuuuuxx 31h PT5EN PT5EN[1:0] uuuuuu00 32h PT5PU PT5PU[1:0] uuuuuu00 33h PT5CON PT51OD PT50OD uuuuuu00 微控制器中的通用 I/O 口 (GPIO) 用于通用的输入与输出功能 用户可以通过 GPIO 接收数据信号或将数据传送给其它的数字设备 CSU8RP3115/CSU8RP3116/CSU8RP3119 的部分 GPIO 可以被定义为其它的特殊功能 在本节, 只说明 GPIO 的通用 I/O 口功能, 特殊功能将会在接下来的章节中说明 2.6.1 PT1 口 PT1 寄存器 ( 地址为 20h) 特性 U-0 U-0 R/W-X R/W-X R/W-0 U-0 R/W-0 R/W-0 PT1 PT1[5:3] PT1[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 5-0 PT1[5:0]:GPIO1 口数据标志 PT1[5] = GPIO1 bit 5 数据标志位 PT1[4] = GPIO1 bit 4 数据标志位 PT1[3] = GPIO1 bit 3 数据标志位 PT1[1] = GPIO1 bit 1 数据标志位 PT1[0] = GPIO1 bit 0 数据标志位 PT1EN 寄存器 ( 地址为 21h) 特性 U-0 U-0 R/W-0 R/W-0 R-0 U-0 R/W-0 R/W-0 PT1EN PT1EN[5:3] PT1EN[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 5-0 PT1EN[5:0]:GPIO1 口输入 / 输出控制标志 PT1EN[5] = GPIO1 bit 5 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT1EN[4] = GPIO1 bit 4 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT1EN[3] = GPIO1 bit 3 的 I/O 控制标志位 ;0 = 定义为输入口, 只能为输入口, 只读 PT1EN[1] = GPIO1 bit 1 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT1EN[0] = GPIO1 bit 0 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 28 页, 共 84 页
标准功能 PT1PU 寄存器 ( 地址为 22h) 特性 U-0 U-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 PT1PU PT1PU[5:3] PT1PU[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 5-0 PT1PU[5:0]:GPIO1 口上拉电阻使能标志 PT1PU[5] = GPIO1 bit 5 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT1PU[4] = GPIO1 bit 4 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT1PU[3] = GPIO1 bit 3 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT1PU[1] = GPIO1 bit 1 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT1PU[0] = GPIO1 bit 0 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT1CON 寄存器 ( 地址为 23h) 特性 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT1CON PT11OD PT1W[3:0] E1M E0M[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 7 PT11OD:PT1.1 漏极开路使能位 0 = 禁止 PT1.1 漏极开路 1 = 使能 PT1.1 漏极开路 Bit 6 PT1W[3]:PT1.5 外部中断 1 使能 0 = 禁止 PT1.5 外部中断 1 1 = 使能 PT1.5 外部中断 1 Bit 5 PT1W[2]:PT1.4 外部中断 1 使能 0 = 禁止 PT1.4 外部中断 1 1 = 使能 PT1.4 外部中断 1 Bit 4 PT1W[1]:PT1.3 外部中断 1 使能 0 = 禁止 PT1.3 外部中断 1 1 = 使能 PT1.3 外部中断 1 Bit 3 PT1W[0]:PT1.1 外部中断 1 使能 0 = 禁止 PT1.1 外部中断 1 1 = 使能 PT1.1 外部中断 1 Bit 2 E1M: 外部中断 1 触发模式 1 = 外部中断 1 为下降沿触发 0 = 外部中断 1 在状态改变时触发 Bit 1-0 E0M[1:0]: 外部中断 0 触发模式 11 = 外部中断 0 在状态改变时触发 10 = 外部中断 0 在状态改变时触发 01 = 外部中断 0 为上升沿触发 00 = 外部中断 0 为下降沿触发 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 29 页, 共 84 页
标准功能 2.6.2 PT3 口 PT3 寄存器 ( 地址为 28h) 特性 U-0 U-0 U-0 R/W-X R/W-X R/W-X R/W-X R/W-X PT3 PT3[4:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4-0 PT3[4:0]:GPIO3 口数据标志位 PT3[4] = GPIO3 bit 4 的数据标志位 PT3[3] = GPIO3 bit 3 的数据标志位 PT3[2] = GPIO3 bit 2 的数据标志位 PT3[1] = GPIO3 bit 1 的数据标志位 PT3[0] = GPIO3 bit 0 的数据标志位 PT3EN 寄存器 ( 地址为 29h) 特性 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT3EN PT3EN[4:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4-0 PT3EN[4:0]:GPIO 3 口输入 / 输出控制标志 PT3EN[4] = GPIO3 bit 4 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT3EN[3] = GPIO3 bit 3 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT3EN[2] = GPIO3 bit 2 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT3EN[1] = GPIO3 bit 1 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT3EN[0] = GPIO3 bit 0 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT3PU 寄存器 ( 地址为 2ah) 特性 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT3PU PT3PU[4:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4-0 PT3PU[4:0]:GPIO3 口上拉电阻使能标志 PT3PU[4] = GPIO3 bit 4 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT3PU[3] = GPIO3 bit 3 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT3PU[2] = GPIO3 bit 2 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT3PU[1] = GPIO3 bit 1 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT3PU[0] = GPIO3 bit 0 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 30 页, 共 84 页
标准功能 PT3CON 寄存器 ( 地址为 2bh) 特性 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PT3CON PT3CON[4:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 4-0 PT3CON[4:0]:GPIO3 口模拟 / 数字端口使能标志 PT3CON[4] = GPIO3bit 4 的 I/O 控制标志位 ;0 = 定义为数字口,1 = 定义为模拟口 PT3CON[3] = GPIO3bit 3 的 I/O 控制标志位 ;0 = 定义为数字口,1 = 定义为模拟口 PT3CON[2] = GPIO3bit 2 的 I/O 控制标志位 ;0 = 定义为数字口,1 = 定义为模拟口 PT3CON[1] = GPIO3bit 1 的 I/O 控制标志位 ;0 = 定义为数字口,1 = 定义为模拟口 PT3CON[0] = GPIO3bit 0 的 I/O 控制标志位 ;0 = 定义为数字口,1 = 定义为模拟口 2.6.3 PT5 口 PT5 寄存器 ( 地址为 30h) 特性 U-0 U-0 U-0 U-0 U-0 U-0 R/W-X R/W-X PT5 PT5[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 1-0 PT5[1:0]:GPIO5 口数据标志位 PT5[1] = GPIO5 bit 1 的数据标志位 PT5[0] = GPIO5 bit 0 的数据标志位 PT5EN 寄存器 ( 地址为 31h) 特性 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 PT5EN PT5EN[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 1-0 PT5EN[1:0]:GPIO5 口输入 / 输出控制标志 PT5EN[1] = GPIO5 bit 1 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT5EN[0] = GPIO5 bit 0 的 I/O 控制标志位 ;0 = 定义为输入口,1 = 定义为输出口 PT5PU 寄存器 ( 地址为 32h) 特性 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 PT5PU PT5PU[1:0] Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 1-0 PT5PU[1:0]:GPIO5 口上拉电阻使能标志 PT5PU[1] = GPIO5 bit 1 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 PT5PU[0] = GPIO5 bit 0 控制标志位 ;0 = 断开上拉电阻,1 = 使用上拉电阻 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 31 页, 共 84 页
标准功能 PT5CON 寄存器 ( 地址为 33h) 特性 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 PT5CON PT51OD PT50OD Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Bit 1-0 PT5CON[1:0]:GPIO5 口控制标志 PT5CON[1] = GPIO5 bit 1 控制标志位 ;0 = 禁止开漏输出,1 = 使能开漏输出 PT5CON[0] = GPIO5 bit 0 控制标志位 ;0 = 禁止开漏输出,1 = 使能开漏输出 特性 (Property): R = 可读位 W = 可写位 U = 无效位 -n = 上电复位后的值 1 = 位已设置 0 = 位已清零 X = 不确定位 第 32 页, 共 84 页
增强功能 3 增强功能 3.1 Halt 和 Sleep 模式 CSU8RP3115/CSU8RP3116/CSU8RP3119 支持低功耗工作模式 为了使 CSU8RP3115/CSU8RP3116/CSU8RP3119 处于待机状态, 可以让 CPU 停止工作使 CSU8RP3115/CSU8RP3116/CSU8RP3119 进行停止或睡眠模式, 减低功耗 这两种模式描述如下 : 停止模式 CPU 执行停止指令后, 程序计数器停止计数直到出现中断指令 为了避免由中断返回 (Interrupt Return) 引起的程序错误, 建议在停止指令之后加一 NOP 指令以保证程序返回时能正常运行 睡眠模式 CPU 执行睡眠指令后, 所有的振荡器停止工作 (EO_SLP 为 0 时 ) 直到出现一个外部中断指令复位 CPU 为了避免由中断返回 (Interrupt Return) 引起的程序错误, 建议停止指令之后加一 NOP 指令以保证程序的正常运行 在睡眠模式下的功耗大约有 1uA 为了保证 CPU 在睡眠模式下的功耗最小, 在执行睡眠指令之前, 需要把 IO 口的上拉电阻断开, 并且保证所有的输入口是接到 VDD 或 VSS 电平 注 : 芯片如果处于 sleep 状态, 这时候降低电压, 配置 2.4V 和 3.6V 低电压复位不会起作用, 低于 2.0V 掉电复位点才会复位 如果 sleep 唤醒后, 此时还处于低电压复位点以下, 则会立即复位 第 33 页, 共 84 页
增强功能 Halt 示范程序 : movlw 01h movwf pt1up ; 断开 pt1 除 bit0(pt1[0]) 外的其他接口的上拉电阻 movlw feh movwf pt1en ;pt1 口除 bit0(pt1[0]) 做输入口外, 其他接口作为输出口 (pt1.3 除外 ) clrf pt1 ; 将 pt1[4:1] 输出为低 clrf pt3up ; 断开 pt3 上拉电阻 clrf pt3en ;pt3 口用作输入口 clrf pt3con ;pt3 口用作数字口 clrf pt3 ; 将 pt3 输出为低 clrf pt5up ; 断开 pt5 上拉电阻 clrf pt5en ;pt5 口用作输入口 clrf pt5 ; 将 pt5 输出为低 clrf intf ; 清除中断标志位 movlw 81h movwf inte ; 使能外部中断 0 halt ; 进入停止模式 nop ; 保证 CPU 重启后程序能正常工作 Sleep 示范程序 : movlw 01h movwf pt1up ; 断开 pt1 除 bit0(pt1[0]) 外的其他接口的上拉电阻 movlw feh movwf pt1en ;pt1 口除 bit0(pt1[0]) 做输入口外, 其他接口作为输出口 (pt1.3 除外 ) clrf pt1 ; 将 pt1[4:1] 输出为低 clrf pt3up ; 断开 pt3 上拉电阻 clrf pt3en ;pt3 口用作输入口 clrf pt3con ;pt3 口用作数字口 clrf pt3 ; 将 pt3 输出为低 clrf pt5up ; 断开 pt5 上拉电阻 clrf pt5en ;pt5 口用作输入口 clrf pt5 ; 将 pt5 输出为低 clrf intf ; 清除中断标志位 movlw 81h movwf inte ; 使能外部中断 0 sleep ; 进入睡眠模式 nop ; 保证 CPU 重启后程序能正常工作 第 34 页, 共 84 页
增强功能 3.2 看门狗 (WDT) WDTOEN WDTEN WDTIN Compare WDT_RST WDTOUT Watch Dog Timer Ocsillator 8Bits Counter MUX 8Bits Counter WDTS 图 13 看门狗定时器功能框图 看门狗定时器 (WDT) 用于防止程序由于某些不确定因素而失去控制 当 WDT 启动时,WDT 计时超时后将使 CPU 复位 在运行的程序一般在 WDT 复位 CPU 之前先复位 WDT 当出现某些故障时, 程序会被 WDT 复位到正常状态下, 但程序不会复位 WDT 当用户把 CST_WDT 清 0 时, 则内部的看门狗定时器振荡器 (32KHz) 将会启动, 产生的时钟被送到 8 bits 计数器 1 当用户置位 WDTEN 时, 8 bits 计数器 1 开始计数, 8 bits 计数器 1 的输出是内部信号 WDTA[7:0], 被发送到一个受寄存器标志位 WDTS[2:0] 控制的多路选择器, 选择器的输出作为 8 bits 计数器 2 的时钟输入 当 8 bits 计数器 2 计数值与 WDTIN 数值相等时溢出, 溢出时它会发送 WDTOUT 信号复位 CPU 及置位 TO 标志位 用户可以使用指令 CLRWDT 复位 WDT 表 13 看门狗定时器寄存器表 地址 名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 上电复位值 04H STATUS TO xxu00000 0DH WDTCON WDTEN WDTS[2:0] 0uuuu000 0Eh WDTIN WDT_IN[7:0] 11111111 操作 : 1. 设置 WDTS[3:0], 选择 WDT 时钟频率 2. 设置 WDTIN, 选择不同的溢出时间值 2. 置位寄存器标志位 :WDTEN, 使能 WDT 3. 把 CST_WDT 清 0, 打开 WDT 的晶振 4. 在程序中执行 CLRWDT 指令复位 WDT WDT 溢出时间计算公式 : 第 35 页, 共 84 页
增强功能 (8 WDTS[2:0]) 2 溢出时间 = *( WDTIN[7 : 0] + 1) 32k WDTS[2:0] 范围为 0~7,WDTIN[7:0] 范围为 0~255 WDTS[2:0] 计数器时钟 时间 ( 当 WDTIN==FFH) 000 WDTA [0] 2048ms 001 WDTA [1] 1024ms 010 WDTA [2] 512ms 011 WDTA [3] 256ms 100 WDTA [4] 128ms 101 WDTA [5] 64ms 110 WDTA [6] 32ms 111 WDTA [7] 16ms 第 36 页, 共 84 页
增强功能 3.3 定时 / 计数器 2 PWM2OUT TM2R[7:0] PT5.0 IO 电路 T2RATE[3:0] TM2IN[7:0] Compare PWM MUX PT5.0 CPUCLK MCK PT1.0 CPUCLK~CPUCLK/128 MCK~MCK/128 两个 MCK 时钟采样 PT1.0 T2CKS MUX T2EN TM2LCK 8 Bits Counter DIV2 BZ T2OUT 超时溢出 图 14 定时 / 计数器 2 模块的功能框图 定时 / 计数器 2 模块的输入是 TM2CLK 当用户设置了定时 / 计数器 2 模块的使能标志,8 bits 计数器将启动, 从 00h 递增到 TM2IN 用户需要设置 TM2IN( 定时器模块中断信号选择器 ) 以选择定时超时中断信号 当定时超时发生时,BZ 输出信号发生跳变 主要功能 : 1) 8 位可编程定时器 ; 2) 外部事件计数 ; 3) 蜂鸣器输出 ; 4) PWM2 输出 ; 3.3.1 寄存器描述 表 14 定时器寄存器列表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 06h INTF TM2IF u0u00u00 07h INTE GIE TM2IE 00u00u00 17h TM2CON T2EN T2RATE[2:0] T2CKS T2RSTB T2OUT PWM2OUT 00000100 18h TM2IN TM2IN[7:0] 11111111 19h TM2CNT TM2CNT[7:0] 00000000 1ah TM2R TM2R[7:0] 00000000 2fh METCH T2RATE[3] 00000000 第 37 页, 共 84 页
增强功能 表 15 TM2CON 寄存器各位功能表 位地址 标识符 功能 7 T2EN 定时 / 计数器 2 使能位 1: 使能定时器 2 0: 禁止定时器 2 定时 / 计数器 2 时钟选择 T2RATE [3:0] TM2CLK 0000 CPUCLK 0001 CPUCLK /2 0010 CPUCLK /4 0011 CPUCLK /8 0100 CPUCLK /16 0101 CPUCLK /32 0110 CPUCLK /64 0111 CPUCLK /128 1000 MCK 1001 MCK /2 6:4 T2RATE[2:0] 1010 MCK /4 1011 MCK /8 1100 MCK /16 1101 MCK /32 1110 MCK /64 1111 MCK /128 以上配置在 CSU8RP3115 CSU8RP3119 中均有效 ; 但是请注意 : CSU8RP3116 仅支持 0000-0111 8 种配置, 若配置为 0111 以上的时钟, 则配置按低 3 位进行识别 例如在 CSU8RP3116 中配置 T2RATE [3:0]= 1000, 则认为 T2RATE [3:0]= 0000, 即 TM2CLK=CPUCLK, 而不是 TM2CLK=MCK 3 T2CKS 2 T2RSTB 1 T2OUT 0 PWM2OUT 定时 / 计数器 2 时钟源选择位 1:PT1.0 作为时钟 0:CPUCLK 或 MCK 的分频时钟 定时 / 计数器 2 复位 1: 禁止定时 / 计数器 2 复位 0: 使能定时 / 计数器 2 复位 当将该位为 0 时, 定时器 2 复位后,T2RSTB 会自动置 1 PT5.0 口输出控制 PWM2OUT T2OUT PT5.0 输出控制, 仅当 PT5.0 配置为输出有 效 0 0 IO 输出 0 1 蜂鸣器输出 1 0 PWM2 输出 1 1 PWM2 输出 表 16 TM2IN 寄存器各位功能表 位地址 标识符 功能 7 :0 TM2IN[7:0] 定时 / 计数器溢出值 第 38 页, 共 84 页
增强功能 表 17 TM2CNT 寄存器各位功能表 位地址 标识符 功能 7 :0 TM2CNT[7:0] 定时 / 计数器 2 计数寄存器, 只读 表 18 TM2R 寄存器各位功能表 位地址 标识符 功能 7 :0 TM2R[7:0] 定时 / 计数器 2 的 PWM 高电平占空比控制寄存器 表 19 METCH 寄存器各位功能表 位地址 标识符 功能 1 T2RATE[3] 定时器 2 时钟选择 0:CPUCLK, 1:MCK 第 39 页, 共 84 页
增强功能 操作 : 1) 设置 TM2CLK, 为定时器模块选择输入 2) 设置 TM2IN, 选择定时器溢出值 3) 设置寄存器标志位 :TM2IE 与 GIE, 使能定时器中断 4) 清零寄存器标志位 :T2RSTB, 复位定时器模块的计数器 5) 设置寄存器标志位 :T2EN, 使能定时器模块的 8 bits 计数器 6) 当定时超时发生时,BZ 输出信号发生跳变, 可作为蜂鸣器输出 ; 程序计数器会跳转到 004H 定时器 2 溢出时间计算方法 : 定时器 2 溢出时间 =(TM2IN+1)/TM2CLK. (TM2IN 不为 0) 3.3.2 蜂鸣器 操作 : 1) 把 PT5.0 配置为输出口 2) 设置 TM2CLK, 为定时器模块选择输入 3) 设置 TM2IN, 选择定时器溢出值 4) 清零寄存器标志位 :T2RSTB, 复位定时器模块的计数器 5) 设置寄存器标志位 :T2EN, 使能定时器模块的 8 bits 计数器 6) 当定时超时发生时,BZ 输出信号发生跳变, 可作为蜂鸣器输出 蜂鸣器周期计算方法 : 蜂鸣器周期 =(TM2IN+1)*2/TM2CLK. (TM2IN 不为 0) 3.3.3 PWM 操作 : 1) 把 PT5.0 配置为输出口 2) 设置 TM2CLK, 为定时 / 计数器 2 模块选择输入 3) 设置 TM2IN 来配置 PWM2 的周期 4) 设置 TM2R 来配置 PWM2 的高电平的的脉宽 5) 使能 PWM2OUT 输出, 配置 PT5.0 为输出端口, 之后把 T2EN 置 1 启动定时器 6) PWM 从 PT5.0 输出 周期为 TM2IN+1, 高电平脉宽为 TM2R 如 TM2IN=0x0F,TM2R=0x03 的 PWM2 波形输出如下 : TM2CLK 0 1 2 3... 15 0 1... 2 3 15 0 1 T2EN PWM2OUT 第 40 页, 共 84 页
增强功能 3.4 定时 / 计数器 3 PWM3OUT TM3R[7:0] PT5.1 IO 电路 T3RATE[2:0] TM3IN[7:0] Compare PWM MUX PT5.1 CPUCLK MCK PT1.1 CPUCLK~CPUCLK/128 MCK~MCK/128 两个 MCK 时钟采样 PT1.1 T3CKS MUX T3EN TM3LCK 8 Bits Counter DIV2 BZ T3OUT 超时溢出 图 15 定时 / 计数器 3 模块的功能框图 定时 / 计数器 3 模块的输入是 TM3CLK 当用户设置了定时 / 计数器 3 模块的使能标志,8 bits 计数器将启动, 从 00h 递增到 TM3IN 用户需要设置 TM3IN( 定时器模块中断信号选择器 ) 以选择定时超时中断信号 当定时超时发生时,BZ 输出信号发生跳变 主要功能 : 1) 8 位可编程定时器 ; 2) 外部事件计数 ; 3) 蜂鸣器输出 ; 4) PWM 输出 ; 3.4.1 寄存器描述 表 20 定时器寄存器列表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 3ch INTF2 TM3IF uuu0uuuu 3dh INTE2 TM3IE uuu0uuuu 1bh TM3CON T3EN T3RATE[2:0] T3CKS T3RSTB T3OUT PWM3OUT00000100 1ch TM3IN TM3IN[7:0] 11111111 1dh TM3CNT TM3CNT[7:0] 00000000 1eh TM3R TM3R[7:0] 00000000 2fh METCH T3RATE[3] 00000000 第 41 页, 共 84 页
增强功能 表 21 TM3CON 寄存器各位功能表 位地址 标识符 功能 7 T3EN 定时 / 计数器 3 使能位 1: 使能定时器 3 0: 禁止定时器 3 定时 / 计数器 3 时钟选择 T3RATE [3:0] TM3CLK 0000 CPUCL 0001 CPUCLK /2 0010 CPUCLK /4 0011 CPUCLK /8 0100 CPUCLK /16 0101 CPUCLK /32 6:4 T3RATE[2:0] 0110 CPUCLK /64 0111 CPUCLK /128 1000 MCK 1001 MCK /2 1010 MCK /4 1011 MCK /8 1100 MCK /16 1101 MCK /32 1110 MCK /64 1111 MCK /128 3 T3CKS 定时 / 计数器 3 时钟源选择位 1:PT1.1 作为时钟 0:CPUCLK 或 MCK 的分频时钟 2 T3RSTB 定时 / 计数器 3 复位 1: 禁止定时 / 计数器 3 复位 0: 使能定时 / 计数器 3 复位当将该位为 0 时, 定时器 3 复位后,T3RSBT 会自动置 1 PT5.1 口输出控制 1 T3OUT PWM3OUT T3OUT PT5.1 输出控制, 仅当 PT5.1 配置为输出有效 0 0 IO 输出 0 PWM3OUT 0 1 蜂鸣器输出 1 0 PWM3 输出 1 1 PWM3 输出 表 22 TM3IN 寄存器各位功能表 位地址 标识符 功能 7 :0 TM3IN[7:0] 定时 / 计数器溢出值 表 23 TM3CNT 寄存器各位功能表 位地址 标识符 功能 7 :0 TM3CNT[7:0] 定时 / 计数器 3 计数寄存器, 只读 表 24 TM3R 寄存器各位功能表 第 42 页, 共 84 页
增强功能 位地址 标识符 功能 7 :0 TM3R[7:0] 定时 / 计数器 3 的 PWM 高电平占空比控制寄存器 表 25 METCH 寄存器各位功能表 位地址 标识符 功能 2 T3RATE[3] 定时器 3 时钟选择 0:CPUCLK, 1:MCK 操作 : 1) 设置 TM3CLK, 为定时器模块选择输入 2) 设置 TM3IN, 选择定时器溢出值 3) 设置寄存器标志位 :TM3IE 与 GIE, 使能定时器中断 4) 清零寄存器标志位 :T3RSTB, 复位定时器模块的计数器 5) 设置寄存器标志位 :T3EN, 使能定时器模块的 8 bits 计数器 6) 当定时超时发生时,BZ 输出信号发生跳变, 可作为蜂鸣器输出 ; 程序计数器会跳转到 004H 定时器 3 溢出时间计算方法 : 定时器 3 溢出时间 =(TM3IN+1)/TM3CLK. (TM3IN 不为 0) 3.4.2 蜂鸣器 操作 : 1) 把 PT5.1 配置为输出口 2) 设置 TM3CLK, 为定时器模块选择输入 3) 设置 TM3IN, 选择定时器溢出值 4) 清零寄存器标志位 :T3RSTB, 复位定时器模块的计数器 5) 设置寄存器标志位 :T3EN, 使能定时器模块的 8 bits 计数器 6) 当定时超时发生时,BZ 输出信号发生跳变, 可作为蜂鸣器输出 蜂鸣器周期计算方法 : 蜂鸣器周期 =(TM3IN+1)*2/TM3CLK. (TM3IN 不为 0) 3.4.3 PWM 操作 : 1) 把 PT5.1 配置为输出口 2) 设置 TM3CLK, 为定时 / 计数器 3 模块选择输入 3) 设置 TM3IN 来配置 PWM3 的周期 4) 设置 TM3R 来配置 PWM3 的高电平的的脉宽 5) 使能 PWM3OUT 输出, 配置 PT5.1 为输出端口, 之后把 T3EN 置 1 启动定时器 6) PWM3 从 PT5.1 输出 周期为 TM3IN+1, 高电平脉宽为 TM3R 如 TM3IN=0x0F,TM3R=0x03 的 PWM3 波形输出如下 : 第 43 页, 共 84 页
增强功能 0 1 2 3... 15 0 1... 2 3 15 0 1 TM3CLK T3EN PWM3OUT 第 44 页, 共 84 页
增强功能 3.5 模数转换器 (ADC) CSU8RP3115/CSU8RP3116/CSU8RP3119 模数转换模块共用 5 条外部通道 (AIN0~AIN4) 和 3 条特殊通道 (AIN5: 内部 1/8VDD;AIN6: 内部参考电压 ;AIN7:GND), 可以将模拟信号转换成 12 位数字信号 进行 AD 转换时, 首先要选择输入通道 (AIN0~AIN5), 然后把 SRADEN 置 1 使能 ADC, 之后把 SRADS 置 1, 启动 AD 转换 转换结束后, 系统自动将 SRADS 清 0, 并将转换结果存入寄存器 SRADL 和 SRADH 中 AIN0/P3.0 AIN1/P3.1 AIN2/P3.2 AIN3/P3.3 AIN4/P3.4 模数转换器 ADC 12-bit 数据总线 AIN5( 内部 1/ 8 VDD) AIN6( 内部参考电压 ) AIN7( 接地 ) 3.5.1 寄存器描述 图 16 模数转换器 ADC 功能框图 表 26 ADC 寄存器列表 地址 名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 上电复位值 06h INTF ADIF u0u00u00 07h INTE GIE ADIE 00u00u00 34h SRADCON0 SRADACKS[1:0] SRADCKS[1:0] uu00uu00 35h SRADCON1 SRADEN SRADS OFTEN CALIF ENOV OFFEX VREFS[1:0] 00000000 36h SRADCON2 CHS[3:0] 0000uuuu 37h SRADL SRAD[7:0] 00000000 38h SRADH SRAD[11:8] uuuu0000 39h SROFTL SROFT[7:0] 00000000 3Ah SROFTH SROFT[11:8] uuuu0000 第 45 页, 共 84 页
增强功能 2FH METCH V14_CHO[2:0] 00000000 表 27 SRADCON0 寄存器各位功能表 位地址 标识符 功能 ADC 输入信号获取时间 SRADACKS[1:0] ADC 输入信号获取时间 5:4 SRADACKS[1:0] 00 16 个 ADC 时钟 01 8 个 ADC 时钟 10 4 个 ADC 时钟 11 2 个 ADC 时钟 ADC 时钟 SRADCKS[1:0] ADC 采样时钟 1:0 SRADCKS[1:0] 00 CPUCLK 01 CPUCLK/2 10 CPUCLK/4 11 CPUCLK/8 表 28 SRADCON1 寄存器各位功能表 位地址 标识符 功能 7 SRADEN ADC 使能位 1: 使能 0: 禁止 6 SRADS ADC 启动位 / 状态控制位 1: 开始, 转换过程中 0: 停止, 转换结束当置位后, 启动 ADC 转换, 转换完成会自动清 0 5 OFTEN 转换结果选择控制位 1: 转换结果放在 SROFT 寄存器中 0: 转换结果放在 SRAD 寄存器中 4 CALIF 校正控制位 (OFTEN 为 0 时有效 ) 1: 使能校正, 即 AD 转换的结果是减去了 SROFT 失调电压值 0: 禁止校正, 即 AD 转换结果是没有减去 SROFT 失调电压值 3 ENOV 使能比较器溢出模式 (CALIF 为 1 时有效 ) 1: 使能, 上溢或下溢直接是减去后的结果 0: 禁止, 下溢为 000h, 上溢为 fffh 2 OFFEX OFFSET 交换 1: 比较器两端信号交换 0: 比较器两端信号不交换 ( 正端为信号, 负端为参考电压 ) ADC 参考电源选择注 : 不同参考电压切换, 建议延迟 10uS 再做 AD 转换 VREFS[1:0] AD 参考电压 00 VDD 1:0 VREFS[1:0] 01 PT3.0 外部参考电源输入 10 内部参考电压 11 内部参考电压,PT3.0 可外接电容作为内置参考电压滤波使用, 以提高精度 第 46 页, 共 84 页
增强功能 表 29 METCH 寄存器各位功能表 位地址 标识符 功能 VREFS[1:0] 配置为 2 b10, 则可通过 V14_CHO[2:0] 选择参考如下电压, 若 VREFS[1:0] 不是配置为 2 b10, 则以下位无效 内部参考电压选择 V14_CHO[2:0] 内部参考电压 6:4 V14_CHO[2:0] 0XX 1.4V 100 1.4V 101 2.0V 110 3.0V 111 4.0V 表 30 SRADCON2 寄存器各位功能表 位地址 标识符 功能 ADC 输入通道选择位 CHS[3:0] 输入通道 0000 AIN0 输入 0001 AIN1 输入 0010 AIN2 输入 7:4 CHS[3:0] 0011 AIN3 输入 0100 AIN4 输入 0101 AIN5 输入, 内部 1/8VDD 0110 AIN6 输入, 内部参考电压 0111 AIN7 输入, 内部接地 其它 保留 表 31 SRADL 寄存器各位功能表 位地址 标识符 功能 7:0 SRAD[7:0] ADC 数据的低 8 位, 只可读 表 32 SRADH 寄存器各位功能表 位地址 标识符 功能 3:0 SRAD[11:8] ADC 数据的高 4 位, 只可读 表 33 SROFTL 寄存器各位功能表 位地址 标识符 功能 7:0 SROFT[7:0] 校正值数据的低 8 位 表 34 SROFTH 寄存器各位功能表 位地址 标识符 功能 3:0 SROFT[11:8] 校正值数据的高 4 位 输入电压 表 35 输入电压和 SRAD 输出数据的关系 SRAD[11:0] 第 47 页, 共 84 页
增强功能 11 10 9 8 7 6 5 4 3 2 1 0 0/4096*VREF 0 0 0 0 0 0 0 0 0 0 0 0 1/4096*VREF 0 0 0 0 0 0 0 0 0 0 0 1 4094/4096*VREF 1 1 1 1 1 1 1 1 1 1 1 0 4095/4096*VREF 1 1 1 1 1 1 1 1 1 1 1 1 3.5.2 转换时间 12 位 AD 转换时间 =(1/ADC 时钟频率 ) (12+ADC 输入信号获取时间 +CALIF) (1) 表 36 转换时间说明表 CLKDIV (3) (2) CALIF SRADCKS SRADACKS AD 转换时间 0 01 10 11 01 10 11 01 10 11 01 00 1/ ( (16MHz / 4) / 2) (12 + 0 + 16) = 14us 01 1/ ( (16MHz / 4) / 2) (12 + 0 + 8) = 10us 00 1/ ( (16MHz / 4) / 4) (12 + 0 + 16) = 28us 01 1/ ( (16MHz / 4) / 4) (12 + 0 + 8) = 20us 10 1/ ( (16MHz / 4) / 4) (12 + 0 + 4) = 16us 00 1/ ( (16MHz / 4) / 8) (12 + 0 + 16) = 56us 01 1/ ( (16MHz / 4) / 8) (12 + 0 + 8) = 40us 10 1/ ( (16MHz / 4) / 8) (12 + 0 + 4) = 32us 11 1/ ( (16MHz / 4) / 8) (12 + 0 + 2) = 28us 00 1/ ( (16MHz / 4) / 2) (12 + 1 + 16) = 14.5us 01 1/ ( (16MHz / 4) / 2) (12 + 1 + 8) = 10.5us 00 1/ ( (16MHz / 4) / 4) (12 + 1 + 16) = 29us 01 1/ ( (16MHz / 4) / 4) (12 + 1 + 8) = 21us 10 1/ ( (16MHz / 4) / 4) (12 + 1 + 4) = 17us 00 1/ ( (16MHz / 4) / 8) (12 + 1 + 16) = 58us 01 1/ ( (16MHz / 4) / 8) (12 + 1 + 8) = 42us 10 1/ ( (16MHz / 4) / 8) (12 + 1 + 4) = 34us 11 1/ ( (16MHz / 4) / 8) (12 + 1 + 2) = 30us 00 1/ ( (16MHz / 8) / 2) (12 + 0 + 16) = 28us 01 1/ ( (16MHz / 8) / 2) (12 + 0 + 8) = 20us 10 1/ ( (16MHz / 8) / 2) (12 + 0 + 4) = 16us 00 1/ ( (16MHz / 8) / 4) (12 + 0 + 16) = 56us 01 1/ ( (16MHz / 8) / 4) (12 + 0 + 8) = 40us 10 1/ ( (16MHz / 8) / 4) (12 + 0 + 4) = 32us 11 1/ ( (16MHz / 8) / 4) (12 + 0 + 2) = 24us 00 1/ ( (16MHz / 8) / 8) (12 + 0 + 16) = 112us 01 1/ ( (16MHz / 8) / 8) (12 + 0 + 8) = 80us 10 1/ ( (16MHz / 8) / 8) (12 + 0 + 4) = 64us 11 1/ ( (16MHz / 8) / 8) (12 + 0 + 2) = 48us 00 1/ ( (16MHz / 8) / 2) (12 + 1 + 16) = 29us 01 1/ ( (16MHz / 8) / 2) (12 + 1 + 8) = 21us 10 1/ ( (16MHz / 8) / 2) (12 + 1 + 4) = 17us 第 48 页, 共 84 页
增强功能 10 11 01 10 11 01 10 11 01 10 11 01 00 1/ ( (16MHz / 8) / 4) (12 + 1 + 16) = 58us 01 1/ ( (16MHz / 8) / 4) (12 + 1 + 8) = 42us 10 1/ ( (16MHz / 8) / 4) (12 + 1 + 4) = 34us 11 1/ ( (16MHz / 8) / 4) (12 + 1 + 2) = 30us 00 1/ ( (16MHz / 8) / 8) (12 + 1 + 16) = 116us 01 1/ ( (16MHz / 8) / 8) (12 + 1 + 8) = 84us 10 1/ ( (16MHz / 8) / 8) (12 + 1 + 4) = 68us 11 1/ ( (16MHz / 8) / 8) (12 + 1 + 2) = 60us 00 1/ ( (16MHz / 16) / 2) (12 + 0 + 16) = 56us 01 1/ ( (16MHz / 16) / 2) (12 + 0 + 8) = 40us 10 1/ ( (16MHz / 16) / 2) (12 + 0 + 4) = 32us 11 1/ ( (16MHz / 16) / 2) (12 + 0 + 2) = 28us 00 1/ ( (16MHz / 16) / 4) (12 + 0 + 16) = 112us 01 1/ ( (16MHz / 16) / 4) (12 + 0 + 8) = 80us 10 1/ ( (16MHz / 16) / 4) (12 + 0 + 4) = 64us 11 1/ ( (16MHz / 16) / 4) (12 + 0 + 2) = 48us 00 1/ ( (16MHz / 16) / 8) (12 + 0 + 16) = 224us 01 1/ ( (16MHz / 16) / 8) (12 + 0 + 8) = 160us 10 1/ ( (16MHz / 16) / 8) (12 + 0 + 4) = 128us 11 1/ ( (16MHz / 16) / 8) (12 + 0 + 2) = 96us 00 1/ ( (16MHz / 16) / 2) (12 + 1 + 16) = 58us 01 1/ ( (16MHz / 16) / 2) (12 + 1 + 8) = 42us 10 1/ ( (16MHz / 16) / 2) (12 + 1 + 4) = 34us 11 1/ ( (16MHz / 16) / 2) (12 + 1 + 2) = 15us 00 1/ ( (16MHz / 16) / 4) (12 + 1 + 16) = 116us 01 1/ ( (16MHz / 16) / 4) (12 + 1 + 8) = 84us 10 1/ ( (16MHz / 16) / 4) (12 + 1 + 4) = 68us 11 1/ ( (16MHz / 16) / 4) (12 + 1 + 2) = 60us 00 1/ ( (16MHz / 16) / 8) (12 + 1 + 16) = 232us 01 1/ ( (16MHz / 16) / 8) (12 + 1 + 8) = 168us 10 1/ ( (16MHz / 16) / 8) (12 + 1 + 4) = 136us 11 1/ ( (16MHz / 16) / 8) (12 + 1 + 2) = 120us 00 1/ ( (16MHz / 32) / 2) (12 + 0 + 16) = 112us 01 1/ ( (16MHz / 32) / 2) (12 + 0 + 8) = 80us 10 1/ ( (16MHz / 32) / 2) (12 + 0 + 4) = 64us 11 1/ ( (16MHz / 32) / 2) (12 + 0 + 2) = 56us 00 1/ ( (16MHz / 32) / 4) (12 + 0 + 16) = 224us 01 1/ ( (16MHz / 32) / 4) (12 + 0 + 8) = 160us 10 1/ ( (16MHz / 32) / 4) (12 + 0 + 4) = 128us 11 1/ ( (16MHz / 32) / 4) (12 + 0 + 2) = 96us 00 1/ ( (16MHz / 32) / 8) (12 + 0 + 16) = 448us 01 1/ ( (16MHz / 32) / 8) (12 + 0 + 8) = 320us 10 1/ ( (16MHz / 32) / 8) (12 + 0 + 4) = 256us 11 1/ ( (16MHz / 32) / 8) (12 + 0 + 2) = 192us 00 1/ ( (16MHz / 32) / 2) (12 + 1 + 16) = 116us 01 1/ ( (16MHz / 32) / 2) (12 + 1 + 8) = 84us 10 1/ ( (16MHz / 32) / 2) (12 + 1 + 4) = 68us 11 1/ ( (16MHz / 32) / 2) (12 + 1 + 2) = 60us 第 49 页, 共 84 页
增强功能 10 11 00 1/ ( (16MHz / 32) / 4) (12 + 1 + 16) = 232us 01 1/ ( (16MHz / 32) / 4) (12 + 1 + 8) = 168us 10 1/ ( (16MHz / 32) / 4) (12 + 1 + 4) = 136us 11 1/ ( (16MHz / 32) / 4) (12 + 1 + 2) = 120us 00 1/ ( (16MHz / 32) / 8) (12 + 1 + 16) = 464us 01 1/ ( (16MHz / 32) / 8) (12 + 1 + 8) = 336us 10 1/ ( (16MHz / 32) / 8) (12 + 1 + 4) = 272us 11 1/ ( (16MHz / 32) / 8) (12 + 1 + 2) = 240us (1) fosc=16mhz (2) 代码选项 (3) AD 转换时间随 fosc 频率的改变而改变 3.5.3 使用内部参考电压的校准方法 内部参考电压作参考时, 由于参考电压本身的具有离散性, 所以需要对内部参考电压进行校正 在 烧录芯片的时候, 已经在程序区的特定 ( 不同型号 MCU 的位置有差别, 注意参考用户手册 ) 的地址里烧录 了对应参考电压的校正值, 所以在上电的时候, 需要把这个校正值读出来, 在采到 AD 后, 把这个校正值 与采到的 AD 值相乘然后除以 2000H, 得到的最后结果才是实际 AD 值 V14_CHO[2:0]=0xx 的 1.4V, V14_CHO[2:0]=100 的 1.4V,V14_CHO[2:0]=101 的 2.0V,V14_CHO[2:0]=110 的 3.0V, V14_CHO[2:0]=111 的 4.0V 的校正值分别存放在程序区的 3FFH,3FEH,3FDH,3FCH,3FBH 如果有多个通道在使用时, 当检测其中任一通道时, 其它模拟口要设置为数字口 movlf macro d1,f1 movlw d1 movwf f1 endm movff macro f1,f2 movfw f1 movwf f2 endm ;************************************************************************ AD_ROUT: ; 上电先从程序区的 3ffH 中读出 1.4V 参考的校准值 movlf ffh,eadrl ; 要读的地址放入 EADRL EADRH 中 movlf 03H,eadrh movp movwf M_D_TEMP12 ; 低位 W 中的数据放在 M_D_TEMP12 中 movff edath,m_d_temp11 ; 高位 EDATH 的数据放在 M_D_TEMP11 中 return AD_init: ;CPUCLK = 16/4 =4MHZ movlw 00000001B ;B1:B0 01 ADC CLOCK = CPUCLK/2=2M movwf SRADCON0 ;B5 B4 = 0 0 ADC 输入信号获取时间 16 个 ADC 时钟 movlw 00000010B ;B[5] 0 结果放在 SRAD 中 movwf SRADCON1 ;B[1:0] 10 内部参考电压 movlw 00000000B movwf METCH ;V14_CHO[2:0]=000 内部参考电压 1.4V movlw 00000000B ;00H AIN0 输入 movwf SRADCON2 movlw 00000000B movwf SRADL ;[ADL7:0] ADC 数据的低 8 位 movwf SRADH ;[ADH11:8] ADC 数据的高 4 位 第 50 页, 共 84 页
增强功能 return ADC_CONVERT: movlf 00001000B movwf PT3CON movlf 30h,SRADCON2 bsf SRADCON1,ADEN call delay40us bsf SRADCON1,SRADS nop btfsc SRADCON1,SRADS goto $-1 movfw SRADL movwf AD3_VALU_l,1 movfw SRADH movwf AD3_VALU_h,1 ; 把其它的模拟口设为数字口, 打开当前的模拟口 ; 转换第 3 通道的信号 movff AD3_VALU_h,M_D_TEMP3 ; 采到的 AD 值作为被乘数 movff AD3_VALU_l,M_D_TEMP4 movff M_D_TEMP11,M_D_TEMP9 movff M_D_TEMP12,M_D_TEMP10 ; 程序区里 3FFH 读出的值为乘数 call F_Mul2_2 ; 调用乘法运算 movlf 20H,M_D_TEMP9 movlf 00H,M_D_TEMP10 ;AD 值与校准系数得到的积作被除数 /2000H call F_Div4_2 ; 调用除法运算 movff M_D_TEMP3,AD3_VALU_h ; 把除法结果重新放在 AD 保存寄存器里 movff M_D_TEMP4,AD3_VALU_l 3.5.4 AD 失调电压校正 不同芯片由于离散性的原因,AD 的失调电压可能有正有负 校正失调电压的方法 : 在 AD 转换过程中通过不断变换 SRADCON1 寄存器中的 OFFEX 的值 如第一次 AD 转换 OFFEX 置 0, 第二次 AD 转换 OFFEX 置 1, 然后将第一次和第二次测试的 AD 值求平均值 两次转换得到的平均值就是去掉失调电压的正确结果 第 51 页, 共 84 页
增强功能 clrf sradcon1 ;VDD 为参考电压,often=0,calif=0;enov=0,offex=0,vrefs=00 movlw 20h movwf sradcon2 ;chs[3:0]=0010, 选择通道 2 bsf sradcon1,7 ; 使能 ADC 模块 call delay_10us bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 movlw sradl movwf adtmp1_l movlw sradh movwf adtmph_l bsf sradcon1,2 ;offex=1 bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 movlw sradl movwf adtmp1_2 movlw sradh movwf adtmph_2 aver adtmph_1,adtmpl_1,adtmph_2,adtmpl_2 ; 求两次 AD 值平均值, 并保存在 ;adtmph_1,adtmpl_1 3.5.5 数字比较器 ADC 模块可作为一个数字比较器 被测信号的输入频率应小于转换频率的 1/2 比较器的速率是和 AD 转换频率相关的 操作 : 1) 通过 ADC 通道选择控制位 chs[3:0] 选择比较器负端的信号输入, 之后把 OFTEN 置 1,CALIF 清 0,ENOV 置 0, 把 SRADEN 置 1 使能 ADC,SRADS 置 1 启动转换, 转换完成可把转换结果写入 SROFT 寄存器 也可以直接把负端信号的 AD 值直接写到 SROFT 寄存器中, 即人为指定负端电压值 2) 通过 ADC 通道选择控制位 chs[3:0] 选择比较器正端的信号输入, 之后把 OFTEN 置 0,CALIF 清 1,ENOV 置 1, 把 SRADEN 置 1 使能 ADC,SRADS 置 1 启动转换 3) AD 数据的最高位 SRAD[11] 则是比较器的结果, 为 0 时表示正端电压大于负端电压, 为 1 时表示正端电压小于负端电压 SRAD[11:0] 为差值, 带符号位的补码 比较通道 0 和通道 1 的电压值, 通道 0 接比较器正端, 通道 1 接比较器负端 第 52 页, 共 84 页
增强功能 clrf sradcon1 ;VDD 为参考电压,often=0,calif=0;enov=0,offex=0,vrefs=00 bsf sradcon1,5 ;often=1, 结果保存在 sroft 寄存器中 movlw 00h movwf sradcon2 ;chs[3:0]=0000, 选择通道 0 作为比较器负端 bsf sradcon1,7 ; 使能 ADC 模块 call delay_10us bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 movlw 10h movwf sradcon2 ;chs[3:0]=0001, 选择通道 1 作为比较器正端 bcf sradcon1,5 ;often=0 bsf sradcon1,4 ;calif=1 bsf sradcon1,3 ;enov=1 bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 btfsc sradh,3 goto le_cmp ; 正端电压小于负端电压 goto gt_cmp ; 正端大于等于负端电压 比较 1V 电压和通道 1 的电压, 通道 1 接比较器正端,1V 接比较器负端, 假设采用 5V 的 VDD 作为参考电压, 那么 1V 的 AD 值为 0x333 clrf sradcon1 ;VDD 为参考电压,often=0,calif=0;enov=0,offex=0,vrefs=00 movlw 10h movwf sradcon2 ;chs[3:0]=0001, 选择通道 1 作为比较器正端 bsf sradcon1,4 ;calif=1 bsf sradcon1,3 ;enov=1 movlw 03h movwf srofth movlw 33h movwf sroftl ;sroft 寄存器存入 333h, 即 1V 作为比较器负端 bsf sradcon1,7 ; 使能 ADC 模块 call delay_10us bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 btfsc sradh,3 goto le_cmp ; 正端电压小于负端电压 goto gt_cmp ; 正端大于等于负端电压 3.5.6 内部测量 VDD 的电压 第 53 页, 共 84 页
增强功能 用户可以通过使用内部参考电压或者外部参考电压输入 ( 外部参考电压固定且不随 VDD 电压变化 ) 两种方法来测试芯片内部 VDD 的电压 使用外部参考电压, 使用条件较多, 需额外提供参考源 使用内部参考电压不需要额外的硬件条件 但是, 使用内部参考电压会由于本身内部参考电压值的不准而影响精度 可以通过内部参考电压校正来提高测试的精度 外接 3V 作为参考电压, 测 VDD 电压 选择通道 5, 测出 1/8VDD 的 AD 值, 之后乘以 8 得出 VDD 的 AD 值, 再乘以参考电压则为 VDD 电压 clrf sradcon1 ;often=0,calif=0;enov=0,offex=0,vrefs=00 bsf sradcon1,0 ;vrefs=01, 选择外部参考电压, 接 3V movlw 50h movwf sradcon2 ;chs[3:0]=0101, 选择通道 5,1/8VDD bsf sradcon1,7 ; 使能 ADC 模块 call delay_10us bsf sradcon1,6 ;srads=1, 开始转换 btfsc sradcon1,6 ; 检测转换是否完成 goto $-1 movlw sradl movwf adtmp1 movlw sradh movwf adtmph bcf status,c rlf adtmp1 rlf adtmph ;AD 值乘以 2 rlf adtmp1 rlf adtmph ;AD 值乘以 4 rlf adtmp1 rlf adtmph ;AD 值乘以 8, 小数点在 adtmph 的 bit3 和 bit4 之间 第 54 页, 共 84 页
增强功能 3.6 数据查表 通过 MOVP 指令可以实现对于用户程序存储器内的数据读取, 用户程序存储器的地址范围为 000H~3FFH 表 37 数据 E2PROM 寄存器列表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 05h WORK 工作寄存器 00000000 0Ah EADRH EDAR [9:8] uuuuuu00 0Bh EADRL EDAR [7:0] 00000000 0Ch EDATH EDATH[5:0] uu000000 EADRH/EADRL 提供读操作的数据地址 ; EDATH/WORK 提供读操作所用的数据 读操作都是基于一个字 (14 bits) 的 EDATH 寄存器只可读 执行读操作时, 在地址寄存器输入相应的值, 之后执行 MOVP 指令, 便可在相应的 OTP 地址的数据读入到 EDATH/WORK 寄存器中 执行一次读操作大概需要 3 个指令周期 movlw 03H movwf EADRH ; 给高字节地址赋值 movlw 00H movwf EADRL ; 给低字节地址赋值 movp ; 执行读操作 nop 第 55 页, 共 84 页
增强功能 3.7 输入逻辑电平电压配置 表 38 METCH 寄存器列表 地上电复位名称 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 址值 2Fh METCH VTHSEL 00000000 表 39 METCH 寄存器各位功能表 位地址 标识符 功能 输入逻辑电平电压控制信号 VTHSEL 输入逻辑电平 0 单 符号 参数 最小值 典型值 最大值 位 VIH1 数字输入高电平 0.75VDD V 复位输入高电平 0.8VDD V VIL1 数字输入低电平 0.3VDD V 7 VTHSEL 复位输入低电平 0.2VDD V 1 单 符号 参数 最小值 典型值 最大值 位 VIH2 数字输入高电平 2.0 V 复位输入高电平 2.0 V OSCI(PT1.4,PT1.5) 2.5 V VIL2 数字输入低电平 0.8 V 复位输入低电平 0.8 V OSCI(PT1.4,PT1.5) 1.0 V 第 56 页, 共 84 页
增强功能 3.8 烧录模块 烧写器的接口 : Application PCB VS VPP VDD VSS PDA PCL To application circuit Isolation circuit 图 17 烧写器接口图 表 40 烧录接口说明 端口名称 型式 说明 VPP 输入 烧录电源 VDD 输入 电源正端 VSS 输入 电源负端 PDA 输入 / 输出 [1] PT1[4] 端口, 数据信号 PCL 输入 [2] PT1[5] 端口, 时钟信号 VS 输入 PT3[0] AD 校正信号线程序中若使用 AD 校正功能, 则烧录时需连接此线, 若无使用 1.4V 校正功能, 则可以不连接, 若连接, 对烧录亦无影响 ( 上述描述仅针对离线烧录器, 使用仿真器烧录时无论是否使用 AD 校正功能, 均不需要连接 ) 第 57 页, 共 84 页
增强功能 3.9 代码选项 标识符 ICK_SEL CLKDIV LVD_SEL RESET_PIN XTAL_PIN SECURITY 功能内部晶振选择内部晶振频率 2MHz 4MHz 8MHz 16MHz 指令周期选择指令周期指令周期 =2 个时钟周期指令周期 =4 个时钟周期指令周期 =8 个时钟周期指令周期 =16 个时钟周期 LVD 配置功能 VDD 低于 2.0V,LVD 复位系统 VDD 低于 2.0V,LVD 复位系统 ; STATUS 的 LVD24 作为 2.4V 的低电压检测器 VDD 低于 2.4V,LVD 复位系统 ; STATUS 的 LVD36 作为 3.6V 的低电压检测器 VDD 低于 2.0V,LVD 复位系统 ; STATUS 的 LVD36 作为 3.6V 的低电压检测器复位引脚选择 PT1.3 作为复位引脚 PT1.3 作为普通输入口晶振引脚选择晶振引脚 PT1.4 和 PT1.5 作为普通 IO 口 PT1.5 作为外部 RC 时钟输入 ; 或者 PT1.5 通过外部时钟源直接灌入时钟 ; PT1.4 还是普通 IO 口 ; PT1.4 和 PT1.5 接外部晶振为 32768Hz PT1.4 和 PT1.5 接外部晶振 4M~16MHz; 还可通过 PT1.5 灌时钟, PT1.4 悬空代码保密位使能代码加密禁止代码加密 第 58 页, 共 84 页
MCU 指令集 4 MCU 指令集 表 41 表 MCU 指令集 指令 操作 指令周期 标志位 ADDLW k [W] [W]+k 1 C,DC,Z ADDPCW [PC] [PC]+1+[W] 2 ~ ADDWF f,d [Destination] [f]+[w] 1 C,DC,Z ADDWFC f,d [Destination] [f]+[w]+c 1 C,DC,Z ANDLW k [W] [W] AND k 1 Z ANDWF f,d [Destination] [W] AND [f] 1 Z BCF f,b [f<b>] 0 1 ~ BSF f,b [f<b>] 1 1 ~ BTFSC f,b Jump if[f<b>]=0 1/2 ~ BTFSS f,b Jump if[f<b>]=1 1/2 ~ CALL k Push PC+1 and Goto K 2 ~ CLRF f [f] 0 1 Z CLRWDT Clear watch dog timer 1 ~ COMF f,d [f] NOT([f]) 1 Z DAW Decimal Adjust W 1 C,DC DECF f,d [Destination] [f] -1 1 Z DECFSZ f,d [Destination] [f] -1,jump if the result is zero 1/2 ~ GOTO k PC k 2 ~ HALT CPU Stop 1 ~ INCF f,d [Destination] [f]+1 1 Z INCFSZ f,d [Destination] [f]+1,jump if the result is zero 1/2 ~ IORLW k [W] [W] OR k 1 Z IORWF f,d [Destination] [W] OR [f] 1 Z MOVFW f [W] [f] 1 ~ MOVLW k [W] k 1 ~ MOVP Read table list 3 ~ MOVWF f [f] [W] 1 ~ NOP No operation 1 ~ POP Pop W and Status 2 ~ PUSH Push W and Status 2 ~ RETFIE Pop PC and GIE =1 2 ~ RETLW k RETURN and W=k 2 ~ RETURN POP PC 2 ~ RLF f,d [Destination<n+1>] [f<n>] 1 C,Z RRF f,d [Destination<n-1>] [f<n>] 1 C,Z SLEEP STOP OSC 1 PD SUBLW k [W] k [W] 1 C,DC,Z SUBWF f,d [Destinnation] [f] [W] 1 C,DC,Z SUBWFC f,d [Destinnation] [f] [W]-1+C 1 C,DC,Z SWAPF f,d swap f 1 ~ XORLW k [W] [W] XOR k 1 Z XORWF f,d [Destination] [W] XOR [f] 1 Z 参数说明 : f: 数据存储器地址 (00H ~7FH) W: 工作寄存器 k: 立即数 第 59 页, 共 84 页
MCU 指令集 元 1 d: 目标地址选择 : d=0 结果保存在工作寄存器, d=1: 结果保存在数据存储器 f 单 b: 位选择 (0~7) [f]: f 地址的内容 PC: 程序计数器 C: 进位标志 DC: 半加进位标志 Z: 结果为零标志 PD: 睡眠标志位 TO: 看门狗溢出标志 WDT: 看门狗计数器 表 42 MCU 指令集描述 ADDLW 加立即数到工作寄存器 指令格式 ADDLW K (0<=K<=FFh) 6 8 操作 (W)< (W)+K 标志位 C,DC,Z 描述 工作寄存器的内容加上立即数 K 结果保存到工作寄存器中 周期 1 例子 ADDLW 08h 在指令执行之前 : W=08h 在指令执行之后 : W=10h 2 ADDPCW 将 W 的内容加到 PC 中 指令格式 ADDPCW 14 操作 (PC)< (PC)+1+(W) 当 (W)<=7Fh (PC)< (PC)+1+(W)-100h 其余 标志位 没有 描述 将地址 PC+1+W 加载到 PC 中 周期 2 例子 1 ADDPCW 在指令执行之前 : W=7Fh,PC=0212h 指令执行之后 : PC=0292h 例子 2 ADDPCW 例子 3 ADDPCW 在指令执行之前 : W=80h,PC=0212h 指令执行之后 : PC=0193h 在指令执行之前 : W=FEh,PC=0212h 指令执行之后 : PC=0211h 第 60 页, 共 84 页
MCU 指令集 3 ADDWF 加工作寄存器到 f 指令格式 ADDWF f,d 0<=f<=7Fh d=0,1 7 7 操作 [ 目标地址 ]< (f)+(w) 标志位 C,CD,Z 描述将 f 的内容和工作寄存器的内容加到一起 如果 d 是 0, 结果保存到工作寄存器中 如果 d 是 1, 结果保存到 f 中 周期 1 例子 1 指令执行之前 : ADDWF f 0 f=c2h W=17h 在指令执行之后 f=c2h W=D9h 例子 2 ADDWF f 1 指令执行之前 f=c2h W=17h 指令执行之后 f=d9h W=17h 4 ADDWFC 将 W f 和进位位相加指令格式 ADDWFC f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目标地址 )< (f)+(w)+c 标志位 C,DC,Z 描述将工作寄存器的内容和 f 的内容以及进位位相加当 d 为 0 时结果保存到工作寄存器当 d 为 1 时结果保存到 f 中周期 1 例子指令执行之前 ADDWFC f,1 C=1 f=02h W=4Dh 指令执行之后 C=0 f=50h W=4Dh 5 ANDLW 工作寄存器与立即数相与指令格式 ANDLW K 0<=K<=FFh 6 8 操作 (W)< (W) AND K 标志位 Z 描述将工作寄存器的内容与 8bit 的立即数相与, 结果保存到工作寄存器中 周期 1 例子在指令执行之前 ANDLW 5Fh W=A3h 在指令执行之后 W=03h 第 61 页, 共 84 页
MCU 指令集 6 ANDWF 将工作寄存器和 f 的内容相与指令格式 ANDWF f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目标地址 )< (W) AND (f) 标志位 Z 描述将工作寄存器的内容和 f 的内容相与如果 d 为 0 结果保存到工作寄存器中如果 d 为 1 结果保存到 f 中周期 1 例子 1 在指令执行之前 ANDWF f,0 W=0Fh f=88h 在指令执行之后 W=08h f=88h 例子 2 ANDWF f,1 在指令执行之前 W=0Fh f=88h 在指令执行之后 W=0Fh f=08h 7 BCF 清除 f 的某一位指令格式 BCF f,b 0<=f<=7Fh 0<=b<=7 BCF b f 4 3 7 操作 (f[b])< 0 标志位无描述 F 的第 b 位置为 0 周期 1 例子指令执行之前 : BCF FLAG 2 FLAG=8Dh 指令执行之后 : FLAG=89h 8 BSF F 的 b 位置 1 指令格式 BSF f,b 0<=f<=7Fh 0<=b<=7 BSF b f 4 3 7 操作 (f[b])< 1 标志位无描述将 f 的 b 位置 1 周期 1 例子在指令执行之前 BSF FLAG 2 FLAG=89h 在指令执行之后 FLAG=8Dh 第 62 页, 共 84 页
MCU 指令集 9 BTFSC 指令格式 操作标志位描述 周期例子 NODE BTFSC FLAG 2 OP1: OP2: 如果 bit 测试为 0 则跳转 BTFSC f,b 0<=f<=7Fh 0<=b<=7 BTFSC b f 4 3 7 Skip if (f[b])=0 无如果 f 的 bit 位是 0, 下一条取到的指令将被丢到, 然后执行一条空指令组成一个两周期的指令 无跳转则为 1 个指令周期, 否则 2 个指令周期在程序执行以前 PC=address(NODE) 指令执行之后 If(FLAG[2])=0 PC=address(OP2) If(FLAG[2])=1 PC=address(OP1) 10 BTFSS 指令格式 操作标志位描述 周期例子 NODE BTFSS FLAG 2 OP1: OP2: 如果 bit 测试为 1, 则跳转 BTFSS f,b 0<=f<=7Fh 0<=b<=7 BTFSS b f 4 3 7 Skip if (f[b])=1 无如果 f 的 bit 位是 1, 下一条取到的指令将被丢到, 然后执行一条空指令组成一个两周期的指令 无跳转则为 1 个指令周期, 否则 2 个指令周期在程序执行以前 PC=address(NODE) 指令执行之后 If(FLAG[2])=0 PC=address(OP1) If(FLAG[2])=1 PC=address(OP2) 11 CALL 子程序调用 指令格式 CALL K 0<=K<=3FFh 3 11 操作 (top stack)< PC+1 PC< K 标志位 无 描述 子程序调用, 先将 PC+1 压入堆栈, 然后把立即数地址下载到 PC 中 周期 2 第 63 页, 共 84 页
MCU 指令集 12 CLRF 清除 f 指令格式 CLRF f 0<=f<=7fh 7 7 操作 (f)< 0 标志位 Z 描述 将 f 的内容清零 周期 1 例子 CLRF WORK 在指令执行之前 WORK=5Ah 在指令执行之后 WORK=00h * 注 当 clrf status 寄存器时, 标志位 Z 不会置高 13 CLRWDT 清除看门狗定时器 指令格式 CLRWDT 14 操作 看门狗计数器清零 标志位 无 描述 清除看门狗定时器 周期 1 例子 CLRWDT 指令执行之后 WDT=0 14 COMF 指令格式 f 取反 COMF f,d 0<=f<=7fh d=0,1 7 7 ( 目的地址 )< NOT(f) Z 操作标志位描述将 f 的内容取反, 当 d 为 0 时, 结果保存到工作寄存器中, 当 d 为 1 时, 结果保存到 f 中 周期 1 例子 COMF f,0 例子 2 COMF f,1 在指令执行之前 W=88h,f=23h 在指令执行之后 W=DCh,f=23h 在指令执行之前 W=88h,f=23h 在指令执行之后 W=88h,f=DCh 第 64 页, 共 84 页
MCU 指令集 15 DAW 十进制调整 W 寄存器指令格式 DAW 14 操作十进制调整 W 寄存器标志位 C,DC 描述一般与加法一起使用 如果低半字节的值大于 9 或 DC 为 1 时, 低半字节加 6; 如果高半字节的值大于 9 或 C 为 1 时, 高半字节加 6 周期 1 例子在 DAW 指令执行之前若 W=25h; W=25+39 =64=5EH ADDLW 39h 在指令执行之后 DAW W=64H 16 DECF f 减 1 指令格式 DECF f,d 0<=f<=7fh d=0,1 7 7 操作 ( 目的地址 )< (f)-1 标志位 Z 描述 F 的内容减 1 当 d 为 0 时, 结果保存到工作寄存器中当 d 为 1 时, 结果保存到 f 中 周期 1 例子在指令执行之前 DECF f,0 W=88h f=23h 在指令执行之后 W=22h f=23h 例子 2 DECF f,1 在指令执行之前 W=88h f=23h 在指令执行之后 W=88h f=22h 17 DECFSZ f 减 1 如果为 0 则跳转指令格式 DECFSZ f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目的地址 )< (f)-1, 如果结果为 0 跳转标志位无描述 f 的内容减 1 如果 d 为 0, 结果保存到工作寄存器中 如果 d 为 1, 结果保存到 f 中如果结果为 0, 下一条已经取到的指令将被丢掉, 然后插入一条 NOP 指令组成一个两个周期的指令 周期无跳转则为 1 个指令周期, 否则 2 个指令周期例子在指令执行之前 第 65 页, 共 84 页
MCU 指令集 Node DECFSZ FLAG,1 OP1: OP2: PC=address(Node) 在指令执行之后 (FLAFG)=(FLAG)-1 If(FLAG)=0 PC=address(OP2) If(FLAG)!=0 PC=address(OP1) 18 GOTO 无条件跳转 指令格式 GOTO K 0<=K<=3FFh 3 13 操作 PC< K 标志位 无 描述 立即地址载入 PC 周期 2 19 HALT 停止 CPU 时钟 指令格式 HALT 14 操作 CPU 停止 标志位 无 描述 CPU 时钟停止, 晶振仍然工作,CPU 能够通过内部或者外部中断重启 周期 1 20 INCF f 加 1 指令格式 INCF f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目的地址 )< (f)+1 标志位 Z 描述 f 加 1 如果 d 为 0, 结果保存到工作寄存器中如果 d 为 1, 结果保存到 f 中 周期 1 例子在指令执行之前 INCF f,0 W=88h f=23h 在指令执行之后 W=24h f=23h 例子 2 INCF f,1 在指令执行之前 W=88h f=23h 在指令执行之后 W=88h f=24h 第 66 页, 共 84 页
MCU 指令集 21 INCFSZ f 加 1, 如果结果为 0 跳转指令格式 INCFSZ f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目的地址 )< (f)+1 如果结果为 0 就跳转标志位无描述 f 的内容加 1 如果 d 为 0, 结果保存到工作寄存器中 如果 d 为 1, 结果保存到 f 中如果结果为 0, 下一条已经取到的指令将被丢掉, 然后插入一条 NOP 指令组成一个两个周期的指令 周期无跳转则为 1 个指令周期, 否则 2 个指令周期 例子 Node INCFSZ FLAG,1 OP1: OP2: 在指令执行之前 PC=address(Node) 在指令执行之后 (FLAFG)=(FLAG)+1 If(FLAG)=0 PC=address(OP2) If(FLAG)!=0 PC=address(OP1) 22 IORLW 工作寄存器与立即数或指令格式 IORLW K 0<=K<=FFh 7 7 操作 (W)< (W) K 标志位 Z 描述立即数与工作寄存器的内容或 结果保存到工作寄存器中 周期 1 例子在指令执行之前 IORLW 85H W=69h 在指令执行之后 W=EDh 23 IORWF f 与工作寄存器或指令格式 IORWF f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目的地址 )< (W) (f) 标志位 Z 描述 f 和工作寄存器或当 d 为 0 时, 结果保存到工作寄存器中当 d 为 1 时, 结果保存到 f 中周期 1 例子在指令执行前 IORWF f,1 W=88h f=23h 在指令执行后 W=88h f=abh 第 67 页, 共 84 页
MCU 指令集 24 MOVFW 传送到工作寄存器 指令格式 MOVFW f 0<=f<=7Fh 7 7 操作 (W)< (f) 标志位 无 描述 将数据从 f 传送到工作寄存器 周期 1 例子 MOVFW f 在指令执行之前 W=88h f=23h 在指令执行之后 W=23h f=23h 25 MOVLW 将立即数传送到工作寄存器中指令格式 MOVLW K 0<=K<=FFh 6 8 操作 (W)< K 标志位无描述将 8bit 的立即数传送到工作寄存器中周期 1 例子在指令执行之前 MOVLW 23H W=88h 在指令执行之后 W=23h 26 MOVP 读查表区数据指令格式 MOVP 14 操作把 OTP 数据读到 EDATH/WORK 中标志位无描述把地址为 EADRH/EADRL 的查表区数据读到 EDATH/WORK 中周期 2 例子在指令执行之前 MOVP EADRH=04h,EADRL=00h 地址为 0400h 的查表区数据位 1234h 在指令执行之后 EDATH=12h,W=34h 27 MOVWF 指令格式操作 将工作寄存器的值传送到 f 中 MOVWF f 0<=f<=7Fh 7 7 (f)< (W) 第 68 页, 共 84 页
MCU 指令集 标志位无描述将工作寄存器的值传送到 f 中周期 1 例子在指令执行之前 MOVWF f W=88h f=23h 在指令执行之后 W=88h f=88h 28 NOP 无操作 指令格式 NOP 14 操作 无操作 标志位 无 描述 无操作 周期 1 29 PUSH 把 work 和 status 寄存器入栈保护 指令格式 PUSH 14 操作 (top stack)< work/status 标志位 无 描述 把 work 和 status 寄存器的值做入栈处理, 支持 8 级堆栈, 不同于 PC 堆栈 ; 其中状态寄存器不包括 LVD36,LVD24,PD 和 TO 周期 2 30 POP 把 work 和 status 寄存器出栈处理指令格式 POP 14 操作 (Top Stack)=>work/status Pop Stack 标志位无描述把当前栈顶的值做出栈处理, 分别更新 work 和 status 寄存器, 支持 8 级堆栈, 不同于 PC 堆栈 ; 其中状态寄存器不包括 LVD36,LVD24,PD 和 TO 周期 2 31 RETFIE 指令格式操作标志位 从中断返回 RETFIE 14 (Top Stack)=>PC Pop Stack 1=>GIE 无 第 69 页, 共 84 页
MCU 指令集 描述 PC 从堆栈顶部得到, 然后出栈, 设置全局中断使能位为 1 周期 2 32 RETLW 返回, 并将立即数送到工作寄存器中 指令格式 RETLW K 0<=K<=FFh 6 8 操作 (W)< K (Top Stack)=>PC Pop Stack 标志位 无 描述 将 8bit 的立即数送到工作寄存器中,PC 值从栈顶得到, 然后出栈 周期 2 33 RETURN 从子程序返回 指令格式 RETURN 14 操作 (Top Stack)=>PC Pop Stack 标志位 无 描述 PC 值从栈顶得到, 然后出栈 周期 2 34 RLF 带进位左移指令格式 RLF f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目标地址 [n+1])< (f[n]) ( 目标地址 [0])< C C< (f[7]) 标志位 C,Z 描述 F 带进位位左移一位如果 d 为 0, 结果保存到工作寄存器如果 d 为 1, 结果保存到 f 中周期 1 例子在指令执行之前 RLF f,1 C=0 W=88h f=e6h 在指令执行之后 C=1 W=88h f=cch 35 RRF 指令格式 带进位右移 RRF f,d 0<=f<=7Fh d=0,1 7 7 第 70 页, 共 84 页
MCU 指令集 操作 ( 目标地址 [n-1])< (f[n]) ( 目标地址 [7])< C C< (f[7]) 标志位 C 描述 F 带进位位右移一位如果 d 为 0, 结果保存到工作寄存器如果 d 为 1, 结果保存到 f 中周期 1 例子 RRF f,0 在指令执行之前 C=0 W=88h f=95h 在指令执行之后 C=1 W=4Ah f=95h 36 SLEEP 晶振停止 指令格式 SLEEP 14 操作 CPU 晶振停止 标志位 PD 描述 CPU 晶振停止 CPU 通过外部中断源重启 周期 1 37 SUBLW 立即数减工作寄存器的值指令格式 SUBLW K 0<=K<=FFh 6 8 操作 (W)< K-(W) 标志位 C,DC,Z 描述 8bit 的立即数减去工作寄存器的值, 结果保存到工作寄存器中周期 1 例子在指令执行之前 SUBLW 02H W=01h 在指令执行之后 W=01h C=1( 代表没有借位 ) Z=0( 代表结果非零 ) 例子 2 SUBLW 02H 例子 2 SUBLW 02H 在指令执行之前 W=02h 在指令执行之后 W=00h C=1( 代表没有借位 ) Z=1( 代表结果为零 ) 在指令执行之前 W=03h 在指令执行之后 W=FFh C=0( 代表有借位 ) Z=0( 代表结果非零 ) 38 SUBWF 指令格式 f 的值减工作寄存器的值 SUBWF f,d 0<=f<=7Fh d=0,1 7 7 第 71 页, 共 84 页
MCU 指令集 操作 ( 目标地址 )< (f)-(w) 标志位 C,DC,Z 描述 f 的值减去工作寄存器的值 如果 d 为 0, 结果保存到工作寄存器如果 d 为 1, 结果保存到 f 中周期 1 例子在指令执行之前 SUBWF f,1 f=33h W=01h 在指令执行之后 f=32h C=1 Z=0 例子 2 SUBWF f,1 例子 3 SUBWF f,1 在指令执行之前 f=01h W=01h 在指令执行之后 f=00h C=1 Z=1 在指令执行之前 f=04h W=05h 在指令执行之后 f=ffh C=0 Z=0 39 SUBWFC 带借位的减法指令格式 SUBWFC f,d 0<=f<=7Fh d=0,1 7 7 操作 ( 目标地址 )< (f)-(w)-1+c 标志位 C,DC,Z 描述 f 的值减去工作寄存器的值如果 d 为 0, 结果保存到工作寄存器如果 d 为 1, 结果保存到 f 中周期 1 例子在指令执行之前 SUBWFC f,1 W=01h f=33h C=1 在指令执行之后 f=32h C=1 Z=0 例子 2 SUBWFC f,1 例子 3 SUBWFC f,1 在指令执行之前 W=01h f=02h C=0 在指令执行之后 f=00h C=1 Z=1 在指令执行之前 W=05h f=04h C=0 在指令执行之后 f=feh C=0 Z=0 40 SWAPF 指令格式操作 交换寄存器的值 SWAPF f,d 0<=f<=7Fh d=0,1 7 7 (des[3:0])< f[7:4] (des[7:4])< f[3:0] 第 72 页, 共 84 页
MCU 指令集 标志位无描述把 f 寄存器的高 4 位数据给目标寄存器的低 4 位 ; 把 f 寄存器的低位数据给目标寄存器的高 4 位 d 为 1 时,f 寄存器为目标寄存器 ; 否则,w 寄存器为目标寄存器周期 1 例子在指令执行之前 SWAPF f,1 f=ach 在指令执行之后 f=cah 41 XORLW 工作寄存器的值与立即数异或指令格式 XORLW K 0<=K<=FFh 6 8 操作 (W)< (W)^K 标志位 Z 描述 8bit 的立即数与工作寄存器的值异或, 结果保存在工作寄存器中周期 1 例子在指令执行之前 XORLW 5Fh W=Ach 在指令执行之后 W=F3h 42 XORWF 指令格式 f 的值与工作寄存器的值异或 XORWF f,d 0<=f<=7Fh d=0,1 7 7 ( 目标地址 )< (W)^(f) Z 操作标志位描述 F 的值与工作寄存器的值异或, 当 d 为 0 时, 结果保存到工作寄存器中当 d 为 1 时, 结果保存到 f 中周期 1 例子 XORWF f,1 在指令执行之前 W=ACh f=5fh 在指令执行之后 f=f3h 第 73 页, 共 84 页
电气特性 5 电气特性 5.1 极限值 参数 范围 单位 电源 VDD -0.3~6.0 V 引脚输入电压 -0.3~VDD+0.3 V 工作温度 -40~+85 ºC 存贮温度 -55~+150 ºC 焊接温度, 时间 220ºC,10 秒 5.2 直流特性 (VDD = 5V,T A = 25ºC, 如无其他说明则都是此条件 ) 符号 参数 测试条件 最小值 典型值 最大值 单位 VDD 工作电压 25 ºC 2.2 5 5.5 V -40 ºC ~+85 ºC 2.3 5 5.5 V FXT 外部晶振频率 16 MHz 25 ºC, 代码选项 XTAL_PIN 选 ERC 16 MHz 25 ºC, 代码选项 XTAL_PIN 选外部外部灌入时 50 KHz EXT_CK 低速晶振钟 25 ºC, 代码选项 XTAL_PIN 选外部 4 MHz 高速晶振 Vpor 系统电源电压上升速率 0.07 V/ms Tcpu 指令周期 VDD:2.2V~5.5V 250 VDD:2.4V~5.5V 125 ns 数字输入高 VIH1 电平 PT1,PT3,PT5 0.75VDD (VTHSEL=0) 复位输入高电平 0.8VDD V 数字输入低 VIL1 电平 PT1, PT3,PT5 0.3VDD (VTHSEL=0) 复位输入低电平 0.2VDD V 数字输入高 PT1,PT3,PT5( 普通 IO) 2.0 电平 VIH2 复位输入高 V (VTHSEL=1) 2.0 电平 OSCI PT1.4,PT1.5( 做时钟口时 ) 2.5 数字输入低 PT1, PT3,PT5 0.8 电平 VIL2 复位输入低 (VTHSEL=1) 0.8 电平 V OSCI PT1.4,PT1.5( 做时钟口时 ) 1.0 IPU 上拉电流 PT1,PT3,PT5;Vin = 0; 50 ua IOH 高电平输出 VOH=0.9VDD;VDD=5V 17.0 ma 电流 VOH=0.9VDD;VDD=3V 6.6 ma IOL 低电平输出 VOL=0.1VDD;VDD=5V 14.5 ma 第 74 页, 共 84 页
电气特性 LVD IRC WDT Tint0,1 IDD1 IDD2 IDD3 IDD4 IDD5 电流 VOL=0.1VDD;VDD=3V 6.3 ma 复位电压 / 2.0V 上电 / 掉电复位点 ;-40~85 度 1.80 1.95 2.30 低电压检测 2.4V 上电 / 掉电复位点 ;-40~85 度 2.30 2.60 2.70 V 电压 3.6V 上电 / 掉电复位点 ;-40~85 度 3.50 3.70 4.10 内置 RC 时 25,5V 15.84 16.0 16.16 钟 16Mhz -40 ~85, 2.3V~5.5V 15.2 16.0 16.8 内置 RC 时 25,5V 7.92 8.0 8.08 钟 8Mhz -40 ~85, 2.3V~5.5V 7.6 8.0 8.4 内置 RC 时 25,5V 3.96 4.0 4.04 MHz 钟 4Mhz -40 ~85, 2.3V~5.5V 3.8 4.0 4.2 内置 RC 时 25,5V 1.98 2.0 2.02 钟 2Mhz -40 ~85, 2.3V~5.5V 1.9 2.0 2.1 内置看门狗 25,5V 29 32 35 KHz 时钟 -40 ~85, 2.3V~5.5V 26 32 38 KHz 中断触发脉宽 25,5V Tcpu ns VDD=3V, 关掉 WDT 0.5 ua sleep 模式 VDD=3V, 打开 WDT 2.0 ua 电流 VDD=5V, 关掉 WDT 0.8 ua VDD=5V, 打开 WDT 3.3 ua 工作电流 ( 空闲模式, 低电压检测关闭 ) 工作电流 ( 空闲模式 ) 工作电流 ( 空闲模式 ) 工作电流 ( 空闲模式 ) 内部振荡器关闭 (fcpu=fosc/4) fosc = 32768Hz,3V 内部振荡器关闭 (fcpu=fosc/4) fosc = 32768Hz,5V 内部晶振模 fosc=16mhz 内部晶振模 fosc=8mhz 内部晶振模 fosc=4mhz 3V 5V 3V 5V 3V 5V 6 10 fcpu=fosc/2 1.41 fcpu=fosc/4 0.89 fcpu=fosc/8 0.61 fcpu=fosc/16 0.48 fcpu=fosc/2 2.57 fcpu=fosc/4 1.59 fcpu=fosc/8 1.10 fcpu=fosc/16 0.86 fcpu=fosc/2 0.75 fcpu=fosc/4 0.48 fcpu=fosc/8 0.35 fcpu=fosc/16 0.27 fcpu=fosc/2 1.37 fcpu=fosc/4 0.86 fcpu=fosc/8 0.63 fcpu=fosc/16 0.48 fcpu=fosc/2 0.41 fcpu=fosc/4 0.27 fcpu=fosc/8 0.20 fcpu=fosc/16 0.17 fcpu=fosc/2 0.73 fcpu=fosc/4 0.48 fcpu=fosc/8 0.36 ua ma ma ma 第 75 页, 共 84 页
电气特性 IDD6 IDD7 工作电流 ( 空闲模式 ) 工作电流 fcpu=fosc/16 0.29 fcpu=fosc/2 0.23 3V fcpu=fosc/4 0.21 fcpu=fosc/8 0.16 内部晶振模 fcpu=fosc/16 0.11 fosc=2mhz fcpu=fosc/2 0.41 5V fcpu=fosc/4 0.38 fcpu=fosc/8 0.28 fcpu=fosc/16 0.19 ERC 模式,VDD=5V,fcpu=fosc/4 R=1KΩ F=6.4MHZ 4.00 C=47P R=10KΩ F=2.6MHZ 0.84 R=100KΩ F=384KHZ 0.16 R=1MΩ F=48KHZ 0.07 R=1KΩ F=6.4MHZ 4.06 C=100P R=10KΩ F=2.1MHZ 0.76 R=100KΩ F=300KHZ 0.144 R=1MΩ F=41KHZ 0.07 ERC 模式,VDD=3V,fcpu=fosc/4 R=1KΩ F=5.0MHZ 2.05 C=47P R=10KΩ F=1.5MHZ 0.37 R=100KΩ F=210KHZ 0.06 R=1MΩ F=26KHZ 0.026 R=1KΩ F=5.0MHZ 2.10 C=100P R=10KΩ F=1.1MHZ 0.32 R=100KΩ F=157KHZ 0.055 R=1MΩ F=21KHZ 0.024 ma ma 5.3 ADC 特性 (VDD = 5V,T A = 25ºC, 如无其他说明则都是此条件 ) 符号 参数 测试条件 最小值 典型值 最大值 单位 VDD ADC 工作 25 ºC 2.2 5 5.5 V 电压范围 -40 ºC ~+85 ºC 2.3 5 5.5 V AIN0~ AIN5 模拟输入范 input voltage 围 VREF 受寄存器 VREFS[1:0] 控制 0 VREF V Vref 外部参考电 input range 压输入范围 VREFS[1:0]=01 0 VDD V ADC current consumption ADC Conversion Cycle Time INL No missing code IVREF ADC 功耗 ADC 转换周期 VDD=5V(VDD 作为参考电压 ) 0.43 ma VDD=3V(VDD 作为参考电压 ) 0.40 ma 3.5 10 us 积分非线性 SRADACKS[1:0]=01; SRADCKS[1:0]=01; ±4 ±10 LSB VREFS[1:0]=01, 外部参考电压 10 11 12 Bits 无失码 VREFS[1:0]=00,VDD 做为参考电压 9 10 11 Bits VREFS[1:0]=10, 内部参考电压 7 8 9 Bits 内部参考电 V14_CHO[2:0]=000 1.4 V 压 1.4V V14_CHO[2:0]=100 1.4 V 内部参考电 V14_CHO[2:0]=101 2.0 V 第 76 页, 共 84 页
电气特性 Offset 压 2.0V 内部参考电压 3.0V 内部参考电压 4.0V ADC 失调电压 5.4 16MHz IRC 时钟频率特性 V14_CHO[2:0]=110 3.0 V V14_CHO[2:0]=111 4.0 V 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 2.5 mv 16MHz IRC 时钟频率随电压和温度变化曲线 频率 (MHz) 16.5 16.2 15.9 15.6 15.3 15-35 -20 0 20 40 60 85 温度 ( 度 ) 5.5V 5.0V 4.5V 4.0V 3.5V 3.0V 2.5V 图 18 RC 时钟频率的电压和温度特性 5.5 8MHz IRC 时钟频率特性下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 8MHz IRC 时钟频率随电压和温度变化曲线 频率 (MHz) 8.2 8.1 8 7.9 7.8-35 -20 0 20 40 60 85 温度 ( 度 ) 5.5V 5.0V 4.5V 4.0V 3.5V 3.0V 2.5V 图 19 RC 时钟频率的电压和温度特性 5.6 4MHz IRC 时钟频率特性下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 第 77 页, 共 84 页
电气特性 4MHz IRC 时钟频率随电压和温度变化曲线 频率 (MHz) 4.1 4.05 4 3.95 3.9-35 -20 0 20 40 60 85 温度 ( 度 ) 5.5V 5.0V 4.5V 4.0V 3.5V 3.0V 2.5V 图 20 RC 时钟频率的电压和温度特性 5.7 2MHz IRC 时钟频率特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 2MHz IRC 时钟频率随电压和温度变化曲线 频率 (MHz) 2.05 2.025 2 1.975 1.95-35 -20 0 20 40 60 85 温度 ( 度 ) 5.5V 5.0V 4.5V 4.0V 3.5V 3.0V 2.5V 5.8 WDT 时钟频率特性 图 21 RC 时钟频率的电压和温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 WDT 时钟频率随电压和温度变化曲线 频率 (KHz) 36 34 32 30 28-35 -20 0 20 40 60 85 温度 ( 度 ) 5.5V 5.0V 4.5V 4.0V 3.5V 3.0V 2.5V 图 22 WDT 频率的电压和温度特性 第 78 页, 共 84 页
电气特性 5.9 ERC 频率特性 下图是实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 ERC 晶振频率 (47pF&1kΩ) 温度特性曲线 ERC 频率 (MHz) 8 6.5 5 3.5 2-35 20 85 温度 ( 度 ) 5.5 5 4.5 4 3.5 3 2.5 图 23 ERC@(47pF&1kΩ) 温度特性 5.10 2.0V 掉电复位温度特性下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 2.0V 低电压复位随温度变化曲线 2.1 电压 (V) 2 1.9 2.0V 1.8-35 -20 0 20 40 60 85 温度 ( 度 ) 图 24 2.0V 掉电复位温度特性 5.11 2.4V 低电压复位温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 第 79 页, 共 84 页
电气特性 2.4V 低电压复位随温度变化曲线 电压 (V) 2.65 2.6 2.4V 2.55-35 -20 0 20 40 60 85 温度 ( 度 ) 图 25 2.4V 低电压复位温度特性 5.12 3.6V 低电压复位温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 3.6V 低电压复位随温度变化曲线 电压 (V) 4.1 4 3.9 3.8 3.7 3.6 3.5-35 -20 0 20 40 60 85 温度 ( 度 ) 3.6V 图 26 3.6V 低电压复位温度特性 5.13 1.4V(V14_CHO[2:0]=000) 内部参考电压温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 内部参考电压温度特性 电压 (V) 1.402 1.4 1.398 1.396 1.394 1.392-35 -20 0 20 40 60 85 温度 ( 度 ) IVREF 图 27 内置参考电压温度特性 第 80 页, 共 84 页
电气特性 5.14 1.4V(V14_CHO[2:0]=100) 内部参考电压温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 内部参考电压温度特性 电压 (V) 1.392 1.391 1.39 1.389 1.388 1.387-35 -20 0 20 40 60 85 温度 ( 度 ) IVREF 图 28 内置参考电压温度特性 5.15 2V 内部参考电压温度特性下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 内部参考电压温度特性 1.988 电压 (V) 1.986 1.984 1.982 IVREF 1.98-35 -20 0 20 40 60 85 温度 ( 度 ) 图 29 内置参考电压温度特性 5.16 3V 内部参考电压温度特性下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 内部参考电压温度特性 2.964 电压 (V) 2.962 2.96 2.958 IVREF 2.956-35 -20 0 20 40 60 85 温度 ( 度 ) 第 81 页, 共 84 页
电气特性 图 30 内置参考电压温度特性 5.17 4V 内部参考电压温度特性 下图位实际芯片的测试数据, 不同芯片会略微有所差异, 仅供参考 内部参考电压温度特性 电压 (V) 3.962 3.96 3.958 3.956 3.954 3.952 3.95-35 -20 0 20 40 60 85 温度 ( 度 ) IVREF 图 31 内置参考电压温度特性 第 82 页, 共 84 页
封装图 6 封装图 6.1 DIP-14pin SYMBOLS MIN NOR MAX MIN NOR MAX (inch) (mm) A - - 0.210 - - 5.334 A1 0.015 - - 0.381 - - A2 0.125 0.130 0.135 3.175 3.302 3.429 D 0.735 0.075 0.775 18.669 1.905 19.685 E 0.300 7.62 E1 0.245 0.250 0.255 6.223 6.35 6.477 L 0.115 0.130 0.150 2.921 3.302 3.810 eb 0.335 0.355 0.375 8.509 9.017 9.525 θ 0 7 15 0 7 15 第 83 页, 共 84 页
封装图 6.2 SOP-14pin SYMBOLS MIN NOR MAX MIN NOR MAX (inch) (mm) A 0.058 0.064 0.068 1.4732 1.6256 1.7272 A1 0.004-0.010 0.1016-0.254 B 0.013 0.016 0.020 0.3302 0.4064 0.508 C 0.0075 0.008 0.0098 0.1905 0.2032 0.2490 D 0.336 0.341 0.344 8.5344 8.6614 8.7376 E 0.150 0.154 0.157 3.81 3.9116 3.9878 e - 0.050 - - 1.27 - H 0.228 0.236 0.244 5.7912 5.9944 6.1976 L 0.015 0.025 0.050 0.381 0.635 1.27 θ 0-8 0-8 第 84 页, 共 84 页