DATASHEET SEARCH SITE | WWW.ALLDATASHEET.COM
Document overview
- Manufacturer or author: Provided By ALLDATASHEET.COM(FREE DATASHEET DOWNLOAD SITE)
- PDF pages: 128
Technical content
中微股份 CMS69P22 www.mcu.com.cn - 1 - 内部试用版 CMS69P22 用户手册 电磁炉 MCU 内部试用版 本用户手册仅供参考,本公司保留对以下所有 产品在可靠性、功能和设计改进做进 一步说明的权利。
中微股份 CMS69P22 www.mcu.com.cn - 2 - 内部试用版
中微股份 CMS69P22 www.mcu.com.cn - 3 - 内部试用版
中微股份 CMS69P22 www.mcu.com.cn - 4 - 内部试用版
中微股份 CMS69P22 www.mcu.com.cn - 5 - 内部试用版
中微股份 CMS69P22 www.mcu.com.cn - 1 - 内部试用版 1. 产品概述 1.1 功能特性 ◆ 存储器 ROM: 2K*14 RAM: 80 ◆ 2 个 PWM 输出口 两种模式选择的 8 位 PWM 10 位 PWM ◆ 8 级堆栈缓存器 ◆ 指令周期(单指令或双指令周期) ◆ 简洁实用的指令系统(69 条指令) ◆ 专用蜂鸣器输出口(频率可变) ◆ 内置低压侦测电路 ◆ 内置 WDT 定时器 ◆ 8 个中断源 内部中断源 4 个:TMRO、TMR1、TMR2、ADC 外部中断源 4 个:EXT0、EXT1、IGBT 同步中断、 IGBT 故障中断 ◆ I/0 口配置 P0:具有唤醒功能、上拉电阻选项。 P1:具有上拉电阻选项 P2:具有上、下拉电阻选项 ◆ 3 个 8 位定时器 TMR0 TMR1 TMR2 ◆ 两种工作模式 正常模式 睡眠模式 ◆ 电磁炉驱动模块 ◆ 4 路 10 位模数转换(ADC) ◆ 运放模块 ◆ 查表功能 ◆ 三种振荡模式 EXTRC,最高可达 8M XT,最高可达 8M INTRC,8M/4M ◆ 多种封装形式可供选择 DIP20 SOP20
中微股份 CMS69P22 www.mcu.com.cn - 2 - 内部试用版 1.2 系统结构框图
中微股份 CMS69P22 www.mcu.com.cn - 3 - 内部试用版 1.3 管脚分布 CMS69P22 P0.4/PWM10/LY P0.3/BUZ PPG P0.2 P1.1/AD1 P0.1 /EXTINT1 P0.0/ EXTINT0 RES/P2.4 GND P1.0/AD0/T2OUT P0.5/PWM8/SYN- P0.6/SYN+ P2.0/GY P2.1/OPA_IN P1.2/AD2 OPA_OUT OSCIN/P2.2/OPA_P OSCOUT/P2.3 VDD P1.3/AD3
中微股份 CMS69P22 www.mcu.com.cn - 4 - 内部试用版 1.4 管脚描述 管脚名称 IO 类型 管脚说明 共享引脚 PO.0—PO.6 I/O 可编程为:输入口,带上拉电阻输入口, 推挽输出口;也可作为外部中断输入口; PWM 输出口;浪涌输入口;IGBT 同步输入 口;蜂鸣器输出口 LY,SYN+,SYN- ,EXTINT0, EXTINT1 PWM0,PWM1 P1.0—P1.3 I/O 可编程为:输入口,带上拉电阻输入口, 推挽输出口,A/D转换的模拟输入口,T2分 频输出口(T2OUT) AN0-AN3,T2OUT P2.0,P2.1 I/O 输入口,带上拉电阻输入口,推挽输出口, 过压检测口,运放输入口 GY,OPA_IN P2.2-P2.3 I/O 输入口,带上拉电阻输入口,带下拉输入 口,推挽输出口,开漏输出口,振荡输入 口,振荡输出口,运放比较器正端输入 OSCIN,OSCOUT,OPA_P P2.4 I 输入口 RES VDD,GND P 电源电压输入脚,接地脚 -- OSCIN,OSCOUT -- 晶体振荡,陶瓷振荡,RC 振荡输入口 P2.0,P2.1 RES -- 外部复位输入口 P2.4 AN0-AN3 I A/D 转换的模拟输入口 P1.0-P1.3 T2OUT O TMR2 分频输出口 P1.0 PWM0 O 8 位 PWM 输出 P0.6 PWM1 O 10 位 PWM 输出 P0.7 EXTINT0 EXTINT1 I 外部中断输入口 P0.0,P0.1 DRI_IGBT O IGBT 驱动口 -- SYN+,SYN- I IGBT 同步输入口 P0.5-P0.6 GY I IGBT 过压输入口 P2.0 LY I 浪涌检测输入口 P0.4 OPA_IN I 运放负端输入口 P2.1 OPA_OUT O 运放输出口(反馈输出) -- OPA_P I 运放正端输入口(通过 Config 配置) P2.2
中微股份 CMS69P22 www.mcu.com.cn - 5 - 内部试用版 1.5 烧写选择项 系统配置寄存器 系统配置寄存器(CONFIG)是 MCU 初始条件的 ROM 选项。它只能被 CMS 烧写器烧写,用户不能访问及操 作。它包含了以下内容: 1、 OSC(振荡方式) ◆ EXTRC: 外部 RC ◆ XT: 晶振 ◆ INTRC: 内部 RC(此时 OSCIN\\OSCOUT 自动成为普通 IO 口 P2.[0:1]) 2、PROTECT(加密) ◆ DISABLE ROM 代码不加密 ◆ ENABLE ROM 代码加密,加密后读出来的值将不确定 3、OSC TIME(起振时间) ◆ 18mS ◆ 9mS ◆ 2.2mS ◆ 560uS 4、LVR(低压侦测电路) ◆ ENABLE 打开低压侦测电路,选择内部复位,同时 P2.2 口作为普通上拉输入口 ◆ DISABLE 关闭低压侦测电路,选择外部复位,同时 P2.2 口作为复位口(低电平复位) 5、WDT(看门狗选择) ◆ ENABLE 打开看门口定时器 ◆ DISABLE 关闭看门狗定时器 6、INTRC_SEL(内部频率选择) ◆ 8M 内振频率为 8M ◆ 4M 内振频率为 4M 7、IGBT_EN(IGBT 驱动功能使能位选择) ◆ ENABLE IGBT 模块使能 ◆ DISABLE IGBT 模块禁止 8、IGBT WDT_EN(IGBT 看门狗使能位选择) ◆ ENABLE IGBT 看门狗使能 ◆ DISABLE IGBT 看门狗禁止 9、OPA_EN(运放使能位选择) ◆ ENABLE 运放模块使能 ◆ DISABLE 运放模块禁止 10、OPA_P_EN(运放比较器正端是否从 P2.2 输入选择) ◆ ENABLE 运放比较器正端从 P2.2 口输入 ◆ DISABLE 运放比较器正端从芯片内部输入
中微股份 CMS69P22 www.mcu.com.cn - 6 - 内部试用版 2. 中央处理器(CPU) 2.1 存储器 2.1.1 程序存储器 ◆ ROM:2K 复位向量 中断向量 通用存储区 跳转到复位向量 2.1.1.1 复位向量(0000H) CMS69P22系列单片机具有一个字长的系统复位向量(0000H)。 ◆ 上电复位 ◆ 看门狗复位 ◆ 外部复位 ◆ 低压复位(LVR) 发生上述任一种复位后,程序将从 0000H 处重新开始执行,系统寄存器也都将恢复为默认值。根据 FLAGS 寄存器中的 PF和 TF 标志位的内容可以判断系统复位方式。下面一段程序演示了如何定义 ROM 中的复位 向量。 ★ 例:定义复位向量 ORG 0000H ; 系统复位向量 JP START ; 跳至用户程序 ORG 0002H ; 用户程序起始地址 START: … ; 用户程序 END ; 程序结束 程序开始 跳转到用户程序 跳转到用户程序 用户程序区 程序结束 0000H 0001H 0002H 0003H 0004H 07FDH 07FEH 07FFH
中微股份 CMS69P22 www.mcu.com.cn - 7 - 内部试用版 2.1.1.2 中断向量 中断向量地址为 0001H。一旦有中断响应,程序计数器 PC 的当前值就会存入堆栈缓存器并跳转到 0001H 开始执行中断服务程序。所有中断都会进入0001H这个中断向量,具体执行哪个中断将由用户 根据中断请求标志位寄存器(INT_FLAG)的位决定。下面的示例程序说明了如何编写中断服务程序。 ★ 例:定义中断向量,中断程序放在用户程序之后 ORG 0000H ; 系统复位向量 JP START ; 跳至用户程序 ORG 0001H JP INT_START ORG 0002H ; 用户程序起始地址 START: … ; 用户程序 JP START INT_START: C A L L P U S H ;中断入口保护 ACC 及 FLAGS … ;中断处理程序 … ;中断处理程序 INT_EXIT: CALL POP ; 中断出口恢复现场 RETI ; 中断返回 ★ 例:定义中断向量,中断程序放在 0001H 之后 ORG 0000H ; 系统复位向量 JP START ; 跳至用户程序 ORG 0001H INT_START: C A L L P U S H ;中断入口保护 ACC 及 FLAGS … ;中断处理程序 … ;中断处理程序 INT_EXIT: CALL POP ; 中断出口恢复现场 RETI ; 中断返回 START: … ; 用户程序 J P S T A R T ; 用户程序结束 注:由于 CMS69P22 系列芯片并未提供专门的出栈、压栈指令,故用户需自己保护中断现场。
中微股份 CMS69P22 www.mcu.com.cn - 8 - 内部试用版 下面给出出栈、压栈的例子: ★ 例:中断入口保护现场 PUSH: LD ACC_BAK,A ;保存工作寄存器 ACC SWAPR ACC_BAK SWAPA FLAGS LD FLAGS_BAK,A ;保存状态寄存器 FLAGS RET ★ 例:中断出口恢复现场 POP: SWAPA FLAGS_BAK LD FLAGS,Z SWAPA ACC_BAK RETI 2.1.1.3 查表 ROM 空间的任何地址都可做为查表使用。 相关指令:
- TABLE [R] 把表格内容的低字节送给寄存器R,高字节 送到寄存器TABLE_DATAH(24H)。
- TABLEA 把表格内容的低字节送给累加器A,高字节 送到寄存器TABLE_DATAH(24H)。 相关寄存器:
- TABLE_SPH (22H) 可读写寄存器,用来指明表格高3位地址。
- TABLE_SPL (23H) 可读写寄存器,用来指明表格低8位地址。
- TABLE_D ATAH(24H) 只读寄存器,存放表格高字节内容。 注:在查表之前要先将表格地址写入TABLE_SPH和TABLE_SPL中。如果主程序和中断服务程 序都用到查表指令,主程序中TABLE_SPH的值可能会因为中断中执行的查表指令而发生变化,产 生错误。也就是说要避免在主程序和中断服务程序中都使用查表指令。但如果必须这样做的话, 我们可以在查表指令前先将中断禁止,在查表结束后再开放中断,以避免发生错误。
中微股份 CMS69P22 www.mcu.com.cn - 9 - 内部试用版 表格调用流程图 下面例子给出了如何在程序中调用表格。 ★ 例:程序中调用表格范例 … ; 上接用户程序 LDIA 02H ; 表格第2个地址 CALL TABLE ; 调用表格子程序 LD R01,A ; 将查表结果的低8位(这里是45H)给寄存器R01 LD A,TABLE_DATAH ; 将查表结果的高6位(这里是23H)给累加器A LD R02,A ; 将表格高6位给寄存器R02 … ; 处理用户程序 TABLE: ; 表格子程序 LD TABLE_SPL,A ; 将需要查找的表格地址赋给查表低8位地址 LDIA 10H ; 由于表格内容在0610H,所以低位指针要加上10H ADDR TABLE_SPL LDIA 06H ; 表格高3位地址为06H LD TABLE_SPH,A TABLEA ; 调表格指令,将低8位结果放入A RET ; 调用返回 ORG 0610H ; 0610地址存放表格 DW 03FFFH ; 表格第0个地址内容 DW 03FFFH ; 表格第1个地址内容 DW 02345H ; 表格第2个地址内容 DW 03FFFH ; 表格第 3 个地址内容 表格 11 位地址(TABLE_SPH+TABLE_SPL) 调表格指令(TABLEA 或 TABLE [R] ) 低 8 位数据给A(TABLEA)或 R(TABLE [R]) 高 6 位数据给TABLE_DATAH 提供表格低 8 位地址给 TABLE_SPL 提供表格高 3 位地址给 TABLE_SPH
中微股份 CMS69P22 www.mcu.com.cn - 1 0 - 内部试用版 2.1.1.4 跳转表 跳转表能够实现多地址跳转功能。由于 PCL 和 ACC 的值相加即可得到新的 PCL,因此,可以通过对 PCL 加上不同的 ACC 值来实现多地址跳转。ACC 值若为 n,PCL+ACC 即表示当前地址加 n,执行完当前指令后 PCL 值还会自加 1, 可参考以下范例。如果 PCL+ACC 后发生溢出,PC不会自动进位,故编写程序时应注 意。这样,用户就可以通过修改 ACC 的值轻松实现多地址的跳转。 ★ 例:正确的多地址跳转程序示例 ROM地址 0010H ADDR PCL ;ACC+PCL 0011H JP LOOP1 ;ACC=0跳至LOOP1 0011H JP LOOP2 ;ACC=1 跳至 LOOP2 0012H JP LOOP3 ;ACC=2 跳至 LOOP3 0013H JP LOOP4 ;ACC=3 跳至 LOOP4 0014H JP LOOP5 ;ACC=4 跳至 LOOP5 0015H JP LOOP6 ;ACC=5 跳至 LOOP6 0016H JP LOOP7 ;ACC=6 跳至 LOOP7 0017H JP LOOP8 ;ACC=7 跳至 LOOP8 ★ 例:错误的多地址跳转程序示例 ROM地址 00F8H ADDR PCL ;ACC+PCL 00F9H JP LOOP1 ;ACC=0跳至LOOP1 00FAH JP LOOP2 ;ACC=1 跳至 LOOP2 00FBH JP LOOP3 ;ACC=2 跳至 LOOP3 00FCH JP LOOP4 ;ACC=3 跳至 LOOP4 00FDH JP LOOP5 ;ACC=4 跳至 LOOP5 00FEH JP LOOP6 ;ACC=5 跳至 LOOP6 00FFH JP LOOP7 ;ACC=6 跳至 LOOP7 00100H JP LOOP8 ;ACC=7 跳至 0000H 地址 注:由于PCL溢出不会自动向高位进位,故在利用PCL作多地址跳转时,一定要注意该段程序 一定不能放在ROM空间的分页处。
中微股份 CMS69P22 www.mcu.com.cn - 1 1 - 内部试用版 2.1.2 数据存储器 ◆ RAM: 128 字节 地址 RAM 0000H 系统寄存器区 002FH 0030H 通用寄存器区 007FH 数据存储器由128×8位组成,分为两个功能区间:特殊功能寄存器(48×8)和通用数据存储器(80 ×8)。 数据存储器单元大多数是可读/写的,但有些只读的。特殊功能寄存器包地址从00H到2FH, 通用数据寄存器地址从30H 到7FH。 2.1.2.1 通用数据存储器 RAM 的 0030H~007FH 地址属于用户可自由定义的通用寄存器区,在此区域的寄存器上电为随机值。 当系统上电工作后,若发生意外复位(非上电复位),此区域寄存器保持原来值不变。
中微股份 CMS69P22 www.mcu.com.cn - 1 2 - 内部试用版 2.1.2.2 系统专用数据存储器 系统专用数据存储器表 地 址 名 称 说 明 00H IAR 间接寻址寄存器 01H TMR0 内部定时/计数器 02H PCL 程序指针 PC 低 8 位 03H FLAGS 系统状态标志寄存器 04H MP 间接寻址指针 05H P0 P0 IO 口数据寄存器 06H P1 P1 IO 口数据寄存器 07H P2 P2 IO 口数据寄存器 08H OPAC 运放功能控制寄存器 09H P0CL P0 IO 口功能控制寄存器 0AH P0CH P0 IO 口功能控制寄存器 0BH P1CL P1 IO 口功能控制寄存器 0CH P2CL P2 IO 口功能控制寄存器 0DH P2CH P2 IO 口功能控制寄存器 0EH COMP_RES1 比较器正端电压选择寄存器 1 0FH COMP_RES2 比较器正端电压选择寄存器 2 10H SYS_GEN 中断总使能及 ADC 使能 11H INT_EN 中断控制寄存器使能位 12H INT_FLAG 中断控制寄存器标志位 13H INT_EXT 外部中断上升或下降沿触发 14H ADDATAH AD 结果高 8 位存放寄存器(只读) 15H ADCON AD 控制寄存器 16H TMR1 定时计数器 1 17H TMR1C 定时计数器 1 控制寄存器 18H T2CNT TMR2 计数器(只读) 19H T2CON TMR2 控制寄存器 1AH T2DATA TMR2 数据寄存器 1BH ADDATAL AD 结果低 2 位存放寄存器(只读) 1CH PWM8DATA 8 位 PWM 数据寄存器 1DH PWM8CON 8 位 PWM 控制寄存器及 CLO 输出控制 1EH PWM10CON 10 位 PWM 控制寄存器 1FH PWM10DATA 10 位 PWM 数据寄存器 20H GY_LY 过压、浪涌控制寄存器 21H BUZCON 蜂鸣器控制寄存器 22H TABLE_SPH 查表高 3 位地址 23H TABLE_SPL 查表低 8 位地址 24H TABLE_DATAH 查表高 6 位结果 25H IGBT_CON IGBT 控制寄存器 26H PPG_FLAG PPG 控制和 IGBT 中断标志寄存器
中微股份 CMS69P22 www.mcu.com.cn - 1 3 - 内部试用版 27H PPG_TMRL PPG 控制寄存器 28H SYN_COUNTER 同步计数器(只读) 29H COMP_DLY 比较器延时使能寄存器 2AH COMP1C 比较器 1 控制寄存器 2BH COMP2C 比较器 2 控制寄存器 2CH COMP3C 比较器 3 控制寄存器 2DH COMP4C 比较器 4 控制寄存器 2E-2FH ---- 未用
中微股份 CMS69P22 www.mcu.com.cn - 1 4 - 内部试用版 2.2 寻址模式 2.2.1 直接寻址 通过工作寄存器(ACC)来对 RAM 进行操作。 ★ 例:ACC 的值送给 30H 寄存器 LD 30H,A ★ 例: 30H 寄存器的值送给 ACC LD A,30H 2.2.2 立即寻址 把立即数传给工作寄存器(ACC) ★ 例:立即数 12H 送给 ACC LDIA 12H 2.2.3 间接寻址 数据存储器能被直接或间接寻址。通过 IAR 寄存器可间接寻址,IAR 不是物理寄存器。当对 IAR 进行 存取时,它会根据 MP 寄存器内的值作为地址,并指向该地址的寄存器,因此在设置了 MP 寄存器后,就可 把 IAR 寄存器当作目的寄存器来存取。间接读取 IAR(MP=0)将产生 00H。间接写入 IAR 寄存器,将导致 一个空运作。以下例子说明了程序中间接寻址的用法。 ★ 例:MP 及 IAR 的应用 LDIA 030H LD MP,A ;间址指针指向 30H CLR IAR ;清零 IAR 实际是清零 MP 指向的 30H 寄存器 ★ 例:间接寻址清 RAM(30H-7FH)举例:
- ; 上接用户程序 LDIA 2FH LD MP,A LOOP: INCR MP ; 地址自加 1,初始地址 30H CLR IAR ; 清 MP 所指向的地址 LDIA 07FH SUBA MP SNZB FLAGS,C ; MP 一直加到 7FH JP LOOP
中微股份 CMS69P22 www.mcu.com.cn - 1 5 - 内部试用版 2.3 堆栈 CMS69P22 的堆栈缓存器共 8 层,堆栈缓存器既不是数据存储器的一部分,也不是程序存储器的一部 分,且既不能被读出,也不能被写入。对它的操作通过堆栈指针(SP)来实现,堆栈指针(SP)也不能读 出或写入,当系统复位后堆栈指针会指向堆栈顶部。当发生子程序调用及中断时的程序计数器(PC)值被 压入堆栈缓存器,当从中断或子程序返回时将数值返回给程序计数器(PC),下图说明其工作原理。 RET CALL RETI 中断 SP+1 SP-1 堆栈缓存器的使用将遵循一个原则“先进后出”。 注:堆栈缓存器只有 8 层,如果堆栈已满,并且发生不可屏蔽的中断,那么只有中断标志位会被 记录下来,而中断响应则会被抑制,直到堆栈指针发生递减,中断才会被响应,这个功能可以防 止中断使堆栈溢出,同样如果堆栈已满,并且发生子程序调用,那么堆栈将会发生溢出,首先进 入堆栈的内容将会丢失,只有最后 8 个返回地址被保留,故用户在写程序时应注意此点,以免发 生程序走飞。 2.4 工作寄存器(ACC) 2.4.1 概述 ALU 是 8BIT 宽的算术逻辑单元,MCU 所有的数学、逻辑运算均通过它来完成。它可以对数据进行加、 减、移位及逻辑运算;ALU 也控制状态位(FLAGS 状态寄存器中),用来表示运算结果的状态。 A 寄存器是一个 8-BIT 的寄存器,ALU 的运算结果可以存放在此,它并不属于数据存储器的一部分而是位 于 CPU 中供 ALU 在运算中使用,因此不能被寻址,只能通过所提供的指令来使用。
2.4.2 ACC 应用
★ 例:做数据传送 LD A,R ;R 寄存器的数值送给 ACC LD R,A ;ACC 的数值送给 R 寄存器 SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
中微股份 CMS69P22 www.mcu.com.cn - 1 6 - 内部试用版 ★ 例:立即寻址目标操作数 LDIA 030H ANDIA 030H XORIA 030H ★ 例:双操作数指令的第一操作数 HSUBA R HSUBR R ★ 例:双操作数指令的第二操作数 SUBA R ADDA R 2.5 程序状态寄存器(FLAGS) 寄存器 FLAGS 中包含 ALU 运算状态信息、系统复位状态信息,其中,位 TF 和PF 显示系统复 位状态 信息,包括上电复位、外部复位和看门狗复位;位 C、DC 和 Z 显示 ALU 的运算信息。 03H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 FLAGS TF PF - - OV Z HC C 读写 不可读写 不可读写 - - R/W R/W R/W R/W 复位值 不同复位,值不同 不同复位,值不同 - - X X X X BIT7 TF:WDT 溢出标志 1 = 上电或执行CLRWDT指令或执行STOP指令后; 0 = WDT溢出后 。 Bit 6 PF:低功耗标志 1 = 上电或执行了CLRWDT后; 0 = 执行STOP指令后 。 Bit 5 未用 BIT4 未用 BIT3 OV:数学运算溢出标志 运算结果高两位进位状态异或结果为1时,OV置1。 BIT2 C:进位标志 1 = 加法运算后有进位、减法运算没有借位发生或移位后移出逻辑“1”或比较运算的结果 ≥ 0; 0 =加法运算后没有进位、减法运算有借位发生或移位后移出逻辑“0”或比较运算的结果 < 0。 BIT1 HC:辅助进位标志 1 = 加法运算时低四位有进位,或减法运算后没有向高四位借位; 0 = 加法运算时低四位没有进位,或减法运算后有向高四位借位。 BIT0 Z:零标志 1 = 算术/逻辑/分支运算的结果为零; 0 = 算术/逻辑/分支运算的结果非零。
中微股份 CMS69P22 www.mcu.com.cn - 1 7 - 内部试用版 FLAGS 寄存器中除了 TF 和 PF 位,其他的都可以用指令设置或者清零。 ★ 例: CLR FLAGS ;清零 FLAGS 结果是 FLAGS=“UU000100”,“U”指未改变, 而不是想象中的全零。也就是说执行指令后,PF 和 TF 的值保 持不变,而 Z 标志位因清零而置一,所以若需要改变 FLAGS 的值,建议使用 SETB、CLRB、LDR,A 这几条指令, 因为这几条指令不会影响状态标志位。 ★ 例: LDIA 00H LD FLAGS,A ;把 FLAGS 中除 PF、TF 外的位都清零。 TF 和 PF 标志位可反映出芯片复位的原因,下面列出影响 TF、PF 的事件及各种复位后 TF、PF 的状态。 事件 TF PF TF PF 复位原因 电源上电 1 1 0 0 WDT 溢出唤醒休眠 MCU WDT 溢出 0 X 0 1 WDT 溢出非休眠态 STOP 指令 1 0 1 0 按键或外部复位唤醒休眠 MCU CLRWDT 指令 1 1 1 1 电源上电 休眠 1 0 X X 外部低电平复位 影响 PF、TF 的事件表 复位后 TF\\PF 的状态
中微股份 CMS69P22 www.mcu.com.cn - 1 8 - 内部试用版 2.6 预分频器(OPTION) 预分频器(OPTION)寄存器是 6BIT,只可写的寄存器,它包含各种用于配置 TMR0/WDT 预分频器和 TMR0 的控制位。通过执行 OPTION 指令可将累加寄存器的内容传送到预分频器。 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 OPTION 无 无 T0CS T0SE PSA PS2 PS1 PS0 读写 W W W W W W 复位值 X X 1 1 1 1 1 1 BIT7 未用 BIT6 未用 BIT5 T0CS:TMR0 时钟源选择位 0. 内部时钟 1. 外部时钟(RTCC 口输入波形) BIT4 T0SE:RTCC 信号触发源位 0. 上升沿触发 1. 下降沿触发 BIT3 PSA:预分频器分配位 0. 分给 TMR0 用 1. 分给 WDT 用 BIT2 ~ BIT0 PS2~PS0:预分配参数配置位 PS2—PS1—PS0 TMR0 分频比 WDT 分频比 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 预分频寄存器实际上是一个8位的计数器,用于监视寄存器WDT时,是作为一个后分频器;用于定时器/计数 器时,作为一个预分频器,通常统称作预分频器。在片内只有一个物理的分频器,只能用于WDT/TMR0两者之一, 不能同时使用。也就是说,若用于TMR0,WDT就不能使用预分频器,反之亦然。 当用于WDT时,CLRWDT指令将同时对预分频器和WDT定时器清零。 当用于TMR0时,有关写入TMR0的所有指令(如:CLR TMR0,SETB TMR0,1等)都会对预分频器清零。 由TMR0还是WDT使用预分频器,完全由软件控制。他可以动态改变。为了避免出现不该有的芯片复位,当从 TMR0换为WDT使用时,应该执行以下指令。 CLR TMR0 ; TMR0 清零和预分频器 CLRWDT ; WDT 清零 LDIA B'00xx1xxx ’ ; 设置新的预分频器值 OPTION 将预分频器从分配给 WDT 切换为分配给 TMR0 模块,应该执行以下指令 C L R W D T ; W D T 清 零 LDIA B'00xx0111’ ; 设置新的预分频器值 OPTION
中微股份 CMS69P22 www.mcu.com.cn - 1 9 - 内部试用版 2.7 程序计数器(PC) 程序计数器(PC),控制程序存储器 ROM 中的指令执行顺序,它可以寻址整个 ROM 的范围,取得指令码 后,程序计数器(PC)会自动加一,指向下一个指令码的地址。但如果执行跳转、条件跳转、向 PCL 赋值、 子程序调用、初始化复位、中断、中断返回、子程序返回等操作时,PC 会载入与指令相关的地址而不是下 一条指令的地址。 当遇到条件跳转指令且符合跳转条件时,当前指令执行过程中读取的下一条指令将会被丢弃,且会插 入一个空指令操作周期,随后才能取得正确的指令。反之,就会顺序执行下一条指令。 程序计数器(PC)是 11-BIT 宽度,低 8 位通过 PCL(02H)寄存器用户可以访问,高 3 位用户不能访问。 可容纳 2Kx14 位程序地址。对 PCL 赋值将会产生一个短跳转动作,跳转范围为当前页的 256 个地址。 注:由于程序员不能操作 PC 的高 3 位,所以当程序员在利用 PCL 作短跳转时应注意当前PC 的位置,以免发生 错误的程序跳转。 下面给出几种特殊情况的 PC 值 2.8 看门狗计数器(WDT) 看门狗计时器(Watch Dog Timer)是一个片内自振式的 RC 振荡计时器,无需任何外围元件,即使芯 片的主时钟停止工作,WDT 也能保持计时。WDT 计时溢出将产生复位。在 CMS69P22 系列芯片中集成了 CONFIG 选项,可将其置“0”来使 WDT 不起作用,详见 1.6 烧写 CONFIG 的选择。
2.8.1 WDT 周期
WDT 有一个基本的溢出周期 24mS(无预分频器),假如你需要更长时间的 WDT 周期,可以把预分频器分 配给 WDT,最大分频比为 1:128,此时 WDT 的周期约为 3S。WDT 的溢出周期将受到环境温度,电源电压等 参数影响。 “CLRWDT”和“STOP”指令将清除 WDT 计时器以及预分频器里的计数值(当预分频器分配给 WDT 时)。 WDT 一般用来防止系统失控,或者可以说防止单片机程序失控。在正常情况下,WDT 应该在其溢出前被 “CLRWDT”指令清零,以防止产生复位。如果程序由于某种干扰而失控,那么不能在 WDT 溢出前执行“CLRWDT” 指令,就会使 WDT 溢出而产生复位。使系统重启而不至于失去控制。若是 WDT 溢出产生的复位,则状态寄 存器(FLAGS)的“TF”位会被清零,用户可根据此位来判断复位是否是 WDT 溢出所造成的。 注:1. 若使用 WDT 功能,一定要在程序的某些地方放置“CLRWDT”指令,以保证在 WDT 溢 出前能被清零。否者会使芯片不停的复位,造成系统无法正常工作。 2. 不能在中断程序中对 WDT 进行清零,否则无法侦测到主程序跑飞的情况。 3. 程序中应在主程序中有一次清 WDT 的操作,尽量不要在多个分支中清零WDT,这种架构 能最大限度发挥看门狗计数器的保护功能。 4. 看门狗计数器不同芯片的溢出时间有一定差异,所以设置清 WDT 时间时,应与 WDT 的溢 出时间有较大的冗余,以避免出现不必要的 WDT 复位。 复位时 PC=0000; 中断时 PC=0001【原来的 PC+1 会被自动压入堆栈】 ; CALL 时 PC=【原来的 PC+1 会被自动压入堆栈】 ; RET、RETI、RET I 时 PC=堆栈出来的值; 操作 PCL 时 PC[10:8]不变,PC[7:0]=用户指定的值; JP 时 PC=程序指定的值; 其它指令 PC=PC+1;
中微股份 CMS69P22 www.mcu.com.cn - 2 0 - 内部试用版 3. 系统时钟 3.1 概述 时钟信号从 OSC1/RTCC 引脚输入后,在片内产生 4 个非重叠正交时钟信号,分别称作 Q1、Q2、Q3、Q4。 在 IC 内部每个 Q1 使程序计数器(PC)增量加一,Q4 从程序存储单元中取出该指令,并将其锁存在指令寄 存器中。在下一个 Q1 到 Q4 之间对取出的指令进行译码和执行,也就是说 4 个时钟周期才会执行一条指令。 下图表示时钟与指令周期执行时序图。 一个指令周期含有 4 个 Q 周期,指令的执行和取指是采用流水线结构,取指占用一个指令周期,而译 码和执行占用另一个指令周期,但是由于流水线结构,从宏观上看,每条指令的有效执行时间是一个指令 周期。如果一条指令引起程序计数器地址发生改变(例如 JP)那么预取的指令操作码就无效,就需要两个 指令周期来完成该条指令,这就是对 PC 操作指令都占用两个时钟周期的原因。 ◆ 时钟与指令周期时序图 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 O S C I N Q 1 Q 2 Q 3 Q 4 O S C O U T R C 模 式 PC PC+1 PC+2 取 指 P C 执行指令(PC-1) 取指(PC+1) 执行指令 PC 取指(PC+2) 执行指令(PC+1) 下面列出振荡频率与指令速度的关系 频率 双指令周期 单指令周期 1MHz 8uS 4uS 2MHz 4uS 2uS 4MHz 2uS 1uS 8MHz 1uS 500nS
中微股份 CMS69P22 www.mcu.com.cn - 2 1 - 内部试用版 3.2 系统振荡器 CMS69P22 有 3 种振荡方式: ◆ EXTRC 外部 RC 振荡 ◆ XT 外部晶振振荡 ◆ INTRC 内部 RC 振荡 不同的振荡方式在芯片 CONFIG 烧写的时候配置。
3.2.1 EXTRC:外部 RC 振荡
这种振荡成本很低,但频率精度较差,适用于时间精度要求不高的场合。外部 RC 振荡容易受电源电 压,RC 元件精度,外围环境温度影响。RC 振荡的接线图如下所示。 外部 RC 振荡 特性:
- 工作电压低
- 频率范围大
- 成本较低
- 频率受温度,电压等外界影响 建议参数: △ 6.8k,22p(4M) △ 2.4k,22p(8M)
中微股份 CMS69P22 www.mcu.com.cn - 2 2 - 内部试用版
3.2.2 XT:外部晶体振荡
这种振荡电路是在 OSCIN 与 OSCOUT 两端加一个晶振或陶瓷振荡器。 如下图所示: 特性:
- 频率精度高
- 频率不受温度,电压等外界影响
- 工作电压较高 建议参数: △ 建议接地电容为: 类 型 频 率 建议值 C1~C2 XT 455KHz 100P~470P XT 2MHz 10P~47P XT 4MHz 10P~47P XT 8MHz 10P~47P
3.2.3 INTRC:内部 RC 振荡
CMS69P22 选择内部 RC 振荡的时候,振荡口 OSCIN 和OSCOUT 自动转为普通 I/O 口用 P2.2、P2.3。 特性:
- 成本最低
- 可多出 2 个 I/O 口用来满足编程需求
- 频率受温度,电压等外界影响
- 设计频率 8M/4M
中微股份 CMS69P22 www.mcu.com.cn - 2 3 - 内部试用版 3.2.4 外部振荡 CMS69P22 可以接受外部振荡源(仅适合于 XT 类型的振荡),连接时将外部振荡接入 OSCIN,OSCOUT 开 路如下图所示。 3.3 起振时间 起振时间(OSC TIME)是指从芯片复位到芯片振荡稳定这段时间,可由内部烧写 CONFIG 选项设置为 18mS、9mS、2mS、560uS;具体设置参数请参照 1.6 烧写选项设定章节。 注:无论芯片是电源上电复位,还是其他原因引起的复位,都会存在这个起振时间,故在强干扰的 环境下使用,推荐选择 560uS 的起振时间。
中微股份 CMS69P22 www.mcu.com.cn - 2 4 - 内部试用版 4. 复位 CMS69P22 可用如下 5 种复位方式: ◆ 上电复位 ◆ 低电压复位(LVR 使能) ◆ 正常工作下的看门狗溢出复位 ◆ 休眠模式下的看门狗溢出复位 ◆ 复位口低电平(LVR 禁止) 上述任意一种复位发生时,所有的系统寄存器将恢复默认状态,程序停止运行,同时程序计数器 PC 清 零,复位结束后程序从复位向量 0000H 开始运行。FLAGS 的 PF 和 TF 标志位能够给出系统复位状态的信息, (详见 FLAGS 的说明),用户可根据 PF 和 TF 的状态,控制程序运行路径。 任何一种复位情况都需要一定的响应时间,系统提供完善的复位流程以保证复位动作的顺利进行。对于 不同类型的振荡器,完成复位所需要的时间也不同。因此,VDD 的上升速度和不同晶振的起振时间都不固定。 RC 振荡器的起振时间最短,晶体振荡器的起振时间则较长。 4.1 上电复位 上电复位与 LVR操作密切相关。系统上电的过程呈逐渐上升的曲线形式,需要一定时间才能达到正常电 平值。下面 给出上电复位的正常时序: ◆ 上电:系统检测到电源电压上升并等待其稳定; ◆ 外部复位(仅限于外部复位引脚使能状态):系统检测外部复位引脚状态。如果不为高电平,系统保 持复位状态直到外部复位引脚释放; ◆ 系统初始化:所有的系统寄存器被置为初始值; ◆ 振荡器开始工作:振荡器开始提供系统时钟; ◆ 执行程序:上电结束,程序开始运行。
中微股份 CMS69P22 www.mcu.com.cn - 2 5 - 内部试用版 4.2 掉电复位 4.2.1 掉电复位概述 掉电复位针对外部因素引起的系统电压跌落情形(例如,干扰或外部负载的变化),掉电复位可能会引 起系统工作状态不正常或程序执行错误。电压跌落可能会进入系统死区。系统死区意味着电源不能满足系 统的最小工作电压要求。 上图是一个典型的掉电复位示意图。图中,VDD 受到严重的干扰,电压值降的非常低。虚线以上区域系 统正常工作,在虚线以下的区域内,系统进入未知的工作状态,这个区域称作死区。当 VDD 跌至 V1 时, 系统仍处于正常状态;当VDD 跌至 V2和V3时,系统进入死区,则容易导致出错。 以下情况系统可能进入死区: DC 运用中: DC 运用中一般都采用电池供电,当电池电压过低或单片机驱动负载时,系统电压可能跌落并进入死区。 这时,电源 不会进一步下降到 LVD 检测电压,因此系统维持在死区。 AC 运用中: 系统采用 AC 供电时,DC 电压值受 AC 电源中的噪声影响。当外部负载过高,如驱动马达时,负载动 作产生的干扰也影响到 DC 电源。VDD 若由于受到干扰而跌落至最低工作电压以下时,则系统将有可能进 入不稳定工作状态。 在 AC 运用中,系统上、下电时间都较长。其中,上电时序保护使得系统正常上电,但下电过程却和DC 运用中情形类似,AC 电源关断后,VDD 电压在缓慢下降的过程中易进入死区。 如上图所示,系统正常工作电压区域一般高于系统复位电压,同时复位电压由低电压检测(LVR)电平决 定。当系统执行速度提高时, 系统最低工作电压也相应提高, 但由于系统复位电压是固定的, 因此在系统最 低工作电压与系统复位电压之间就会出现一个电压区域,系统不能正常工作,也不会复位,这个区域即为 死区。
中微股份 CMS69P22 www.mcu.com.cn - 2 6 - 内部试用版 4.2.2 掉电复位的改进办法 如何改进系统掉电复位性能,以下给出几点建议 ◆ 开启 MCU 的低压侦测功能 ◆ 开启看门狗计时器 ◆ 降低系统的工作频率 ◆ 采用外部低压复位电路 ◆ 增大电压下降斜率 开启 MCU 的低压侦测功能 CMS69P22 系列芯片,内部集成了低压侦测(LVR)功能,可由烧写 CONFIG 控制,详见 1.6 关于烧写 CONFIG 选择说明,开启 LVR 功能,当系统电压跌至低于 LVR 电压时,LVR 被触发,系统复位,但是 LVR 只是一个 单电压检测,并不能覆盖所有的死区范围,当开启 LVR 功能,系统工作还是出错请采用其他复位办法。 看门狗计时器 看门狗计时器用于保证程序正常运行,当系统进入工作死区或者程序运行出错时,看门狗计时器会溢出, 系统复位。 降低系统的工作速度 系统工作频率越快,系统最低工作电压越高。从而增大了工作死区的范围,降低系统工作速度就可以降 低最低工作电压,从而有效的减小系统工作在死区电压的机率。 采用外部低压复位电路 具体请参照 4.6 外部复位电路章节。 增大电压下降斜率 此方法可用于系统工作在 AC 供电的环境,一般 AC 供电系统,系统电压在掉电过程中下降很缓慢,这就 会造成芯片较长时间工作在死区电压,此时若系统重新上电,芯片工作状态可能出错,建议在芯片电源与 地线间加一个放电电阻,以便让 MCU 快速通过死区,进入复位区,避免芯片上电出错可能性。 4.3 看门狗复位 看门狗复位是系统的一种保护设置。在正常状态下,由程序将看门狗计时器清零。若出错,系统处于未 知状态,看门狗计时器溢出,此时系统复位。看门狗复位后,系统重启进入正常状态。 看门狗复位的时序如下: ◆ 看门狗定时器状态:系统检测看门狗计时器是否溢出,若溢出,则系统复位; ◆ 初始化:所有的系统寄存器被置为默认状态; ◆ 振荡器开始工作:振荡器开始提供系统时钟; ◆ 程序:复位结束,程序开始运行。 关于看门狗计时器的应用问题请参看2.8 WDT应用章节。
中微股份 CMS69P22 www.mcu.com.cn - 2 7 - 内部试用版 4.4 复位口电平复位 当 LVR 功能被屏蔽时,REST 口低电平会使 MCU 进入复位态具体工作时序如下: ◆ REST 口为低电平 ◆ REST 口电平从低变为高,若一直为低则芯片一直处于复位态。 ◆ 初始化:所有的系统寄存器被置为默认状态; ◆ 振荡器开始工作:振荡器开始提供系统时钟; ◆ 程序:复位结束,程序开始运行。 4.5 基本外部复位电路
4.5.1 RC 复位电路
上图为一个由电阻R1和电容C1组成的基本RC复位电路,它在系统上电的过程中能够为复位引脚提供一个 缓慢上升的复位信号。这个复位信号的上升速度低于VDD的上电速度,为系统提供合理的复位时序,当复位 引脚检测到高电平时,系统复位结束,进入正常工作状态,当系统选择LVR禁止模式时,用户可选用此电 路以提高复位的可靠性。 VSS 104 VDD VSS REST VDD K 100K MCU
中微股份 CMS69P22 www.mcu.com.cn - 2 8 - 内部试用版 4.5.2 二极管及 RC 复位电路 上图中,R1和C1同样是为复位引脚提供输入信号。对于电源异常情况,二极管正向导通使C1快速放电 并与 VDD保持一致,避免复位引脚持续高电平、系统无法正常复位。 4.5.3 三极管复位电路 电压偏置复位电路是一种简单的LVR电路,基本上可以解决掉电复位问题。这种复位电路中,R1和 R2 构 成分压电路,当VDD高于和等于分压值“0.7V x (R1 + R3)/ R1”时,三极管集电极C输出高电平,单片机正 常工作;VDD低于“0.7V x (R1 + R3) / R1”时,集电极C输出低电平,单片机复位。对于不同应用需求, 选择适当的分压电阻。单片机复位引脚上电压的变化与VDD电压变化之间的差值为 0.7V。如果VDD跌落并低 于复位引脚复位检测值,那么系统将被复位。如果希望提升电路复位电平,可将分压电阻设置为 R3>R1, 并 选择VDD与集电极之间的结电压高于0.7V。分压电阻R1和R3在电路中要耗电,此处的功耗必须计入整个系统 的功耗中。 VSS VDD VSS REST VDD MCU 10K 104 4148 VSS VDD VSS REST VDD 100K MCU
中微股份 CMS69P22 www.mcu.com.cn - 2 9 - 内部试用版 4.5.4 稳压二极管复位电路 稳压二极管复位电路是一种简单的 LVR 电路,基本上可以解决掉电复位问题。如上图电路中,利用稳压 管的击穿电压作为电路复位检测值,当 VDD 高于“Vz + 0.7V”时,三极管集电极输出高电平,单片机正常 工作;当 VDD 低于“Vz + 0.7V”时,三极管集电极输出低电平,单片机复位。稳压管规格不同则电路复位 检测值不同,根据电路的要求选 择合适的二极管。 注:上述外部复位电路中,R2 电阻不能取消,以提高 REST 口的抗 EMC 及 ESD 能力。 VZ 10K VSS VDD VSS REST VDD MCU K
中微股份 CMS69P22 www.mcu.com.cn - 3 0 - 内部试用版 5. 系统工作模式 CMS69P22 系列 MCU 存在两种工作模式,一种是正常工作模式,一种是睡眠工作模式。在正常工作模式下, 各个功能模块均处于工作状态,在休眠状态下,系统时钟停止,芯片保持原来的状态不变,此时 WDT 的功能 若没有被烧写 CONFIG 选项禁止,则 WDT 计时器一直工作。 5.1 休眠模式 省电模式是被 STOP 指令激活的,在省电模式状态下,系统振荡停止,以减小功耗,且所有外围停止工作。 省电模式可由复位,WDT 或者 P0 口的下降沿而结束。当省电模式被唤醒时,时钟电路仍需要振荡稳定时间。 当省电模式被唤醒时,系统从进入休眠的下一个地址开始执行程序。 5.1.1 休眠模式应用举例 系统在进入 SLEEP 模式之前,若用户需要获得较小的休眠电流,请先确认所有 I/O 的状态,若用户方案 中存在悬空的 I/O 口,把所有悬空口都设置为输出口,确保每一个输入口都有一个固定的状态,以避免 I/O 为输入状态时,口线电平处于不定态而增大休眠电流;关断 AD 模块及比较器模块;根据实际方案的功能需 求可禁止 WDT 功能来减小休眠电流。 ★ 例:进入 SLEEP 的处理程序 SLEEP_MODE: CLR SYS_GEN ;关断 ADC 模块及中断使能; LDIA B’10101010’ LD P0CL,A ; LDIA B’10101010’ LD P0CH,A ;P0 口设置为输出口; LDIA B’10101010’ LD P1CL,A LDIA B’10010010’ LD P1CH,A ;P1 口设置为输出口; LDIA B’00010010’ LD P2C,A ;P2 口设置为输出口(若采用 INTRC 模式); CLR BUZCON ;禁止 BUZ 功能; CLR PWM8CON ;禁止 8 位 PWM 功能; CLR PWM10CON ;禁止 10 位 PWM 功能; CLR IGBT_CON ;禁止电磁炉工作模块; … ;各个输出口设置为不带负载状态; LDIA 0A5H LD SP_FLAG,A ;置休眠状态记忆寄存器; ;SP_FLAG 不是系统寄存器,用户需自定义; CLRWDT ;清零 WDT; STOP ;执行 STOP 指令。
中微股份 CMS69P22 www.mcu.com.cn - 3 1 - 内部试用版 5.1.2 休眠模式的唤醒 当系统处于休眠状态有以下四种条件可以让 CPU 退出休眠状态: 1, 看门狗溢出 2, 系统掉电后,重新上电。 3, 复位口低电平(LVR 关闭) 4, P0 口下降沿 处于休眠态的 MCU 发生以上前 3 种情况的其中一种,芯片都会从复位地址(0000H)开始运行程序,用户可 根据 FLAGS 的 TF 与 PF 标志位及 SP_FLAG(用户要自己定义),判断何种复位。而如果发生第 4 种即 P0 口的 下降沿唤醒,则芯片将会从进入休眠的下一个地址开始运行程序。 ★ 例:休眠唤醒用户处理程序(复位) ORG 0000H JP START ;转到复位处理程序 ORG 0001H JP I NT_START ;转到中断处理程序 START: ;复位处理程序 SZB FLAGS,PF JP XXXX ;不是从休眠态复位的处理程序 SZB FLAGS,TF JP XXXX ;非 WDT 唤醒 MCU 处理程序 XXXX: ;WDT 唤醒 MCU 5.1.3 休眠模式唤醒时间 当 MCU 从休眠态被唤醒时,需要等待一个振荡稳定时间(OSC TIME),这个时间可由内部烧写选项设置为 18mS、9mS、2mS、560uS。详见 1.6 关于内部 CONFIG 烧写选项。
中微股份 CMS69P22 www.mcu.com.cn - 3 2 - 内部试用版 6. I/0 端口 CMS69P22 有三个 I/O 端口:端口 Port0,Port1 和 Port2。可读写端口数据寄存器可直接存取这些端口。 端口 位 管脚. 管脚描述 输入/输出 PORT 0 0 6 施密特触发输入,推挽式输出,外部中断 0 I/O 1 5 施密特触发输入,推挽式输出,外部中断 1 I/O 2 4 施密特触发输入,推挽式输出 I/O 3 2 施密特触发输入,推挽式输出,蜂鸣器输出 I/O 4 1 施密特触发输入,推挽式输出,浪涌输入 I/O 5 20 施密特触发输入,推挽式输出,同步比较器输入负端 I/O 6 19 施密特触发输入,推挽式输出,同步比较器输入正端 I/O PORT 1 0 9 施密特触发输入,推挽式输出,AN0,T2 分频输出 I/O 1 10 施密特触发输入,推挽式输出,AN1 I/O 2 11 施密特触发输入,推挽式输出,AN2 I/O 3 12 施密特触发输入,推挽式输出,AN3 I/O PORT 2 0 18 施密特触发输入,推挽式输出,IGBT 过压输入 I/O 1 17 施密特触发输入,推挽式输出,运放比较器负端输入 I/O 2 15 施密特触发输入,推挽式输出,运放比较器正端输入 I/O 3 14 施密特触发输入,推挽式输出 I/O 4 7 施密特触发输入 I <表 6-1 端口配置总概> ◆ I/O 口结构图
中微股份 CMS69P22 www.mcu.com.cn - 3 3 - 内部试用版
6.1 I/O 口模式及上、下拉电阻
寄存器 P0CL、P0CH、P1C、P2CL、P2HC 用于控制 I/O 口线的工作模式。
6.1.1 P0 口
CMS69P22 芯片的 P0 口是一个 7BIT 的 I/0 口,有三个寄存器与之相关。分别为 IO 口数据寄存器(P0)、 IO 口功能控制寄存器(P0CL、P0CH). 05H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 R/W -- R/W R/W R/W R/W R/W R/W R/W 复位值 0 X X X X X X X IGBT 功能 -- SYN+ SYN- LY -- -- -- -- 复用功能 PWM8 PWM10 BUZ RTCC EXTINT1 EXTINT0
中微股份 CMS69P22 www.mcu.com.cn - 3 4 - 内部试用版 09H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P0CL P0.3 功能配置 P0.2 功能配置 P0.1 功能配置 P0.0 功能配置 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 0 1 0 1 BIT7、BIT6 P0.3 功能配置 00:上拉输入; 01:BUZ 输出; 10:推挽输出; 11:输入; BIT5、BIT4 P0.2 功能配置 00:上拉输入; 01:未用; 10:推挽输出; 11:输入; BIT3、BIT2 P0.1 功能配置 00:上拉输入、中断; 01:输入、中断; 10:推挽输出; 11:输入、中断; BIT1、BIT0 P0.0 功能配置 00:上拉输入、中断; 01:输入、中断; 10:推挽输出; 11:输入、中断; 0AH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P0CH -- -- P0.6 功能配置 P0.5 功能配置 P0.4 功能配置 R/W -- -- R/W R/W R/W R/W R/W R/W 复位值 0 0 0 1 1 1 1 1 BIT5、BIT4 P0.6 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:输入; BIT3、BIT2 P0.5 功能配置 00:上拉输入; 01:PWM8 输入; 10:推挽输出; 11:输入; BIT1、BIT0 P0.4 功能配置 00:上拉输入; 01:PWM10 输出; 10:推挽输出; 11:输入;
中微股份 CMS69P22 www.mcu.com.cn - 3 5 - 内部试用版 ★ P0 口处理程序 LDIA B’00111101’ ; P0.5-P0.6 为输入,P0.4 为 PWM 输出 LD P0CH,A LDIA B’10101010’ ;P0.0-P0.3 为推挽输出 LD P0CL,A LDIA 03H ;P0.0- P0.1 输出高,P0.2-P0.3 输出低 LD P0,A ;由于 P0.5,P0.6 为输入口,P0.4 为 PWM 口,所以赋 0 或 1 都没影响
中微股份 CMS69P22 www.mcu.com.cn - 3 6 - 内部试用版
6.1.2 P1 口
P1 有 4-BIT 的输入输出管脚。它可做正常输入输出端口(施密特触发输入,推挽式输出)或者是一些选 择性功能用(AD 输入、T2 分频输出)。有二个寄存器与之相关。P1 口数据寄存器 P1、P1 口控制寄存器 P1C。 06H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P1 未用 未用 未用 未用 P1.3 P1.2 P1.1 P1.0 R/W -- -- -- -- R/W R/W R/W R/W 复位值 0 0 0 0 X X X X IGBT 功能 -- -- -- -- 可以连接到运放输出端 -- -- -- 复用功能 -- -- -- -- AN3 AN2 AN1 AN0/T2OUT 0BH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P1C P1.3 功能配置 P1.2 功能配置 P1.1 功能配置 P1.0 功能配置 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 1 0 1 0 0 1 1 BIT7、BIT6 P1.3 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:AN3; BIT5、BIT4 P1.2 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:AN2; BIT3、BIT2 P1.1 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:AN1; BIT1、BIT0 P1.0 功能配置 00:上拉输入; 01:T2OUT 输出; 10:推挽输出; 11:AN0/输入; 注:P1 口的使用方法同 P0 口
中微股份 CMS69P22 www.mcu.com.cn - 3 7 - 内部试用版
6.1.3 P2 口
P2 有 5-BIT 的输入输出管脚。P2.0、P2.1 可做为普通输入输出口,也可作为运放比较器负端输入口跟 IGBT 过压检测口;P2.2、P2.3 可做时钟输入或正常的输入输出,如果芯片选择内部振荡,则 P2.2、P2.3 自动作为普通输入/输出口,否则 P2.2、P2.3 为振荡输入/输出口。如果芯片选择内部复位(LVR ENABLE), 则 P2.4 自动作为普通上拉输入口。有三个寄存器与之相关。P2 口数据寄存器 P2(07H)、P2 口控制寄存器 P2CL(0CH)、P2CH(0DH)。 07H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 R/W -- -- -- R R/W R/W R/W R/W 复位值 X X X X X X X X IGBT 功能 -- -- -- -- -- -- OPA_IN GY 复用功能 -- -- -- RES OSCOUT OSCIN -- -- 0CH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P2CL 未用 未用 未用 未用 P2.1 功能配置 P2.0 功能配置 R/W -- -- -- -- R/W R/W R/W R/W 复位值 0 0 0 0 0 1 0 1 BIT3、BIT2 P2.1 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:输入; BIT1、BIT0 P2.0 功能配置 00:上拉输入; 01:输入; 10:推挽输出; 11:输入;
中微股份 CMS69P22 www.mcu.com.cn - 3 8 - 内部试用版 0DH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 P2CH 未用 未用 P2.3 功能配置 P2.2 功能配置 R/W -- -- R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 1 0 0 1 BIT5、BIT4、BIT3 P2.3 功能配置 000:上拉输入; 001:输入; 010:推挽输出; 011:下拉输入; 100:开漏输出 其它:未用 BIT2、BIT1、BIT0 P2.2 功能配置 000:上拉输入; 001:输入; 010:推挽输出; 011:下拉输入; 100:开漏输出 其它:未用 注:P2.4 只能是输入口,没有其他 I/O 口选项,用户使用时要注意。
中微股份 CMS69P22 www.mcu.com.cn - 3 9 - 内部试用版
6.2 I/O 使用
6.2.1 写 I/O 口 CMS69P22 系列芯片的 I/O 口寄存器,和一般通用寄存器一样,可以通过数据传输指令,位操作指令等 进行写操作。(P2.4 口除外,因为它是一个单向输入口) ★ 写 I/O 口程序 LD P0,A ;ACC 的值送给 P0 口 CLRB P1,0 ;P1 .0 口置零 CLR P2 ;清零 P2 口 SET P1 ;P1 口所有输出口置“1” SETB P1,0 ;P1 .0 口置“1” 6.2.2 读 I/O 口 ★ 读 I/O 口程序 LD A,P0 ; P0 的值送给 ACC SNZB P0,1 ;判断 P0 .1 口是否为“1”,为 1 间跳 SZB P0,1 ;判断 P0 .1 口是否为 0 注:当用户读一个 I/O 口状态时,若此 I/O 口为输入口,则用户读回的数据将是此口线外部 电平的状态,若此 I/O 口为输出口那么读出的值将会是此口线内部输出寄存器的数据。
中微股份 CMS69P22 www.mcu.com.cn - 4 0 - 内部试用版
6.3 I/O 口使用注意事项
- 当 I/O 从输出转换为输入时,要等待几个指令周期的时间,以便 I/O 口状态稳定。 2. 若使用内部上拉电阻,那么当 I/O 从输出转换为输入时,内部电平的稳定时间,与接在 I/O 口上的电容 有关,用户应根据实际情况,设置等待时间,以防止 I/O 口误扫描电平。 3. 当 I/O 口为输入口时,其输入电平应在“VDD+0.7V”与”VSS-0.7V”之间。若输入口电压不在此范围内 可采用如下图所示方法。 4. 若在 I/O 口线上串入较长的连接线,请在靠近芯片 I/O 的地方加上限流电阻以增强 MCU 抗 EMC 能力 5. 若使用到 P2.2 口作为信号输入口,建议采用如下图做法,以增强 MCU 抗 EMC 及 ESD 能力。 VSS VDD VSS P2.2 VDD MCU IN VDD VSS VDD VSS I/OR1 MCU IN
中微股份 CMS69P22 www.mcu.com.cn - 4 1 - 内部试用版 7. 中断 7.1 中断概述 CMS69P22共有 8 个中断源:4个内部中断(TMR0、TMR1、TMR2、ADC), 2个外部中断(EXT0、EXT1),2 个IGBT中断(IGBT故障中断、同步中断)。一旦程序进入中断,寄存器 SYS_GEN 的位 INT_GEN位 将被硬件 自动清零以避免再次响应其它中断。系统退出中断,即执行完 RETI 指令后,硬件自动将 GIE 置“1”,以 响应下一个 中断。中断请求存放在寄存器 INT_FLAG寄存器中。 F_AD 中断向量地址 0001H F_T2 F_T1 F_T0 F_EXT1 F_EXT0 INT_FLAG 寄存器 EXT0 触发 EXT1 触发 TMR0 溢出 TMR1 溢出 TMR2 溢出 ADC 输出 中断使能门 中断使能寄 存器 INT_GEN 同步触发 IGBT 故障 F_SYN F_IGBT
中微股份 CMS69P22 www.mcu.com.cn - 4 2 - 内部试用版 7.2 中断控制寄存器 中断请求控制寄存器 INT_EN 包括所有中断的使能控制位。INT_EN 的有效位被置为“1”,则系统进入 该中断服务程序,程序计数器入栈,程序转至 0001H 即中断程序。程序运行到指令 RETI 时,中断结束, 系统退出中断服务。 11H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 INT_EN EN_IGBT EN_SYN EN_AD EN_T0 EN_T1 EN_T2 EN_EXT1 EN_EXT0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 EN_IGBT:IGBT故障中断使能位 0:禁止 1:使能 BIT6 EN_SYN:IGBT同步中断使能位 0:禁止 1:使能 BIT5 EN_AD:AD中断使能位 0:禁止 1:使能 BIT4 EN_T0:TMR0中断使能位 0:禁止 1:使能 BIT3 EN_T1:TMR1中断使能位 0:禁止 1:使能 BIT2 EN_T2:TMR2中断使能位 0:禁止 1:使能 BIT1 EN_EXT1:外部中断1中断使能位 0:禁止 1:使能 BIT0 EN_EXT0:外部中断0中断使能位 0:禁止 1:使能
中微股份 CMS69P22 www.mcu.com.cn - 4 3 - 内部试用版 7.3 中断请求寄存器 中断请求寄存器 INT_FLAG 中存放各中断请求标志。一旦有中断请求发生,INT_FLAG 中的相应位将被置 “1”,该请求被响应后,程序应将该标志位清零,MCU不会自动清零该中断请求标志位。根据 INTR_FLAG 的 状态,程序判断是否有中断发生,并执行相应的中断服务。 12H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 INT_FLAG F_IGBT F_SYN F_AD F_T0 F_T1 F_T2 F_EXT1 F_EXT0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 F_IGBT:IGBT故障中断请求标志位 0:无中断请求 1:有中断请求 BIT6 F_SYN:IGBT同步中断请求标志位 0:无中断请求 1:有中断请求 BIT5 F_AD:AD中断请求标志位 0:无中断请求 1:有中断请求 BIT4 F_T0:TMR0中断请求标志位 0:无中断请求 1:有中断请求 BIT3 F_T1:TMR1中断请求标志位 0:无中断请求 1:有中断请求 BIT2 F_T2:TMR2中断请求标志位 0:无中断请求 1:有中断请求 BIT1 F_EXT1:外部中断1中断请求标志位 0:无中断请求 1:有中断请求 BIT0 F_EXT0:外部中断0中断请求标志位 0:无中断请求 1:有中断请求
中微股份 CMS69P22 www.mcu.com.cn - 4 4 - 内部试用版 7.4 总中断使能控制寄存器 只有当全局中断控制位 INT_GEN置“1”的时候程序才能响应中断请求。 一旦有中断发生,程序计数器 10H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SYS_EN --- --- --- --- --- --- ADC_EN INT_GEN 复位值 X X X X X X 0 0 BIT1 ADC_EN:AD功能使能位 0:禁止ADC功能(可降低芯片工作电流) 1:使能ADC功能 BIT0 INT_GEN:中断总使能位 0:禁止所有中断 1:使能中断功能
中微股份 CMS69P22 www.mcu.com.cn - 4 5 - 内部试用版 7.5 中断现场的保护方法 有中断请求发生并被响应后,程序转至 0001H 执行中断子程序。响应中断之前,必须保存 ACC、FLAGS 的内 容。 芯片没有提供专用的入栈保存和出栈恢复指令,用户需自己保护ACC和FLAGS的内容,以避免中断结束后可能 的程序运行错误。 ★ 例:对 ACC 与 FLAGS 进行入栈保护 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; LD ACC_BAK,A ;保存 ACC 的值,(ACC_BAK 需自定义); LD A,FLAGS LD FLAGS_BAK,A ;保存 FLAGS 的值, (FLAGS_BAK 需自定义); POP: ;中断服务程序出口,还原 ACC 及 FLAGS; LD A,ACCBAK ;还原 ACC 值; CLR FLAGS CLRB FLAGS,Z SZB FLAGS_BAK,0 SETB FLAGS,0 SZB FLAGS_BAK,1 SETB FLAGS,1 SZB FLAGS_BAK,2 SETB FLAGS,2 SZB FLAGS_BAK,3 SETB FLAGS,3 ;还原 FLAGS 的值。 RETI RETI
中微股份 CMS69P22 www.mcu.com.cn - 4 6 - 内部试用版 7.6 外部中断 CMS69P22 系列芯片有两个外部中断源(EXTINT0、EXTINT1),外部中断被触发,则无论 EN_EXT0、EN_EXT1 处于何种状态,F_EXT0、F_EXT1 都会被置一。当任何一个中断使能位与中断请求标志位同时为“1”,且总 中断使能位为使能状态,系统就会响应中断,当中断使能位为“0”,即使是中断请求标志位为“1”也不会 响应中断。在处理多中断时需要注意。 7.6.1 外部中断控制寄存器 CMS69P22 系列芯片的两个外部中断源(EXT0、EXT1)的触发方式可由 INT_EXT 寄存器控制,用户可通过 写 INT_EXT 控制外部中断源的触发方式。 13H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 INT_EXT --- --- --- --- EXT1 EXT0 R/W --- --- --- --- R/W R/W R/W R/W 复位值 X X X X 0 0 0 0 BIT3、BIT2 EXT1:EXT1信号边缘选择 00: 下降沿 01: 上升沿 1X: 两种边沿 BIT1、BIT0 EXT0:EXT0信号边缘选择 00: 下降沿 01: 上升沿 1X: 两种边沿 ★ 例:外部中断触发方式选择 LDIA B’00000010’ LD INT_EXT,A ;EXT0 设置为电平触发,EXT1 设置为下降沿触发
中微股份 CMS69P22 www.mcu.com.cn - 4 7 - 内部试用版 7.6.2 外部中断 0 外部中断 EXT0 与 P0.0 口共用一个 I/O 口,若要启用外部中断功能,要将 P0.0 口设置为中断输入模式, 当 EN_EXT0=1 且 F_EXT0=1 时,系统会响应外部中断 0,当 EN_EXT0=0 时无论 F_EXT0 为任何状态,都不会响 应中断。 ★ 外部中断 0 应用程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: LDIA B’10101001’ LD P0CL,A ;P0,0 口设置为中断输入口 CLR INT_EXT ;EXT0 为下降沿触发 CLRB INT_FLAG, F_EXT0 ;清零 EXT0 中断请求标志位 SETB INT_EN,EN_EXT0 ;使能 EXT0 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN JP START INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN _EXT0 ;判断是否使能 EXT0 中断 JP INT_EXIT SNZB INT_FLAG,F_E XT0 ;检查有无 EXT0 中断请求标志位 JP INT_EXIT CLRB INT_FLAG, F_EXT0 ;清零 EXT0 中断请求标志位 … ;EXT0 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS; RETI
中微股份 CMS69P22 www.mcu.com.cn - 4 8 - 内部试用版 7.6.3 外部中断 1 外部中断 EXT1 与 P0.1 口共用一个 I/O 口,若要启用外部中断功能,要将 P0.1 口设置为中断输入模式, 当 EN_EXT1=1 且 F_EXT1=1 时,系统会响应外部中断 1,当 EN_EXT1=0 时无论 F_EXT0 为任何状态,都不会响 应中断。 ★ 外部中断 1 应用程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: LDIA B’10100110’ LD P0CL,A ;P0 .1 口设置为中断输入口 LDIA B’00001000 LD INT_EXT,A ;EXT1 为电平触发 CLRB INT_FLAG, F_EXT1 ;清零 EXT1 中断请求标志位 SETB INT_EN,EN_EXT1 ;使能 EXT1 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN JP START INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN _EXT1 ;判断是否使能 EXT1 中断 JP INT_EXIT SNZB INT_FLAG,F_E XT1 ;检查有无 EXT1 中断请求标志位 JP INT_EXIT CLRB INT_FLAG, F_EXT1 ;清零 EXT1 中断请求标志位 … ;EXT1 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS; RETI 7.6.4 外部中断的响应时间 外部中断的响应时间为 2 个指令周期。
中微股份 CMS69P22 www.mcu.com.cn - 4 9 - 内部试用版 7.6.5 外部中断的应用注意事项 由于外部中断的反应时间很快,当系统外围电压波动时,或系统受到 EMC 干扰时,MCU 可能误进中断, 所以需要加上 RC 滤波电路。用户可根据外部中断所采样的信号频率选择不同的 R1 和 C1,以提高系统抗 EMC 能力。 EXT1 EXT0 VSS VDD VSS P0.1/P0.0 VDD MCU
中微股份 CMS69P22 www.mcu.com.cn - 5 0 - 内部试用版 7.7 内部定时中断 CMS69P22 系列芯片内部有三个定时器,每个定时器溢出都可能产生中断。
7.7.1 TMR0 中断
TMR0 溢出时,无论 EN_T0 处于何种状态,F_TO 都会置“1”。若 EN_T0 和 F_T0 都置“1”,系统 就会响应 TMR0的中断;若 EN_T0= 0,则无论 F_T0 是否置“1”,系统都不会响应 TMR0 中断。尤其需要注意 多种中断下的情形。 ★ TMR0 中断应用程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: CLRA OPTION ;设置 TMR0 时钟=Fcpu/2 CLR TMR0 ;初始化 TMR0 CLRB INT_FLAG, F_T0 ;清零 TMR0 中断请求标志位 SETB INT_EN,EN_T0 ;使能 TMR0 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN MAIN: JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN_T0 ;判断是否使能 TMR0 中断 JP INT_EXIT SNZB INT_FLAG,F_T 0 ;检查有无 TMR0 中断请求标志位 JP INT_EXIT CLRB INT_FLAG, F_T0 ;清零 TMR0 中断请求标志位 … ;TMR0 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS。 RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 1 - 内部试用版
7.7.2 TMR1 中断
TMR1 溢出时,无论 EN_T1 处于何种状态,F_T1 都会置“1”。若 EN_T1 和 F_T1 都置“1”,系统 就会响应 TMR1的中断;若 EN_T1= 0,则无论 F_T1 是否置“1”,系统都不会响应 TMR1 中断。尤其需要注意 多种中断下的情形。 ★ TMR1 中断应用程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: LDIA 06H LD TMR1,A ;初始化 TMR1 LDIA 80H LD TMR1C,A ;设置 TMR1 时钟=Fcpu、TMR1 定时器模式 CLRB INT_FLAG, F_T1 ;清零 TMR1 中断请求标志位 SETB INT_EN,EN_T1 ;使能 TMR1 中断 SETB TMR1C,TON ;TMR1 计时器开始工作 SETB SYS_GEN,INT_GEN ;使能 INT_GEN MAIN: JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN_T1 ;判断是否使能 TMR1 中断 JP INT_EXIT SNZB INT_FLAG,F_T 1 ;检查有无 TMR1 中断请求标志位 JP INT_EXIT CLRB INT_FLAG, F_T1 ;清零 TMR1 中断请求标志位 … ;TMR1 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS。 RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 2 - 内部试用版
7.7.3 TMR2 中断
TMR2 溢出时,无论 EN_T2 处于何种状态,F_T2 都会置“1”。若 EN_T2 和 F_T2 都置“1”,系统 就会响应 TMR2的中断;若 EN_T2= 0,则无论 F_T2 是否置“1”,系统都不会响应 TMR2 中断。尤其需要注意 多种中断下的情形。 ★ TMR1 中断应用程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: LDIA 032H LD T2DATA,A ;设置 T2 溢出时间 LDIA B’00110000’ LD T2CON,A ;设置 TMR2 时钟=Fcpu、 CLRB INT_FLAG, F_T2 ;清零 TMR2 中断请求标志位 SETB INT_EN,EN_T2 ;使能 TMR2 中断 SETB T2CON,0 ;TMR2 计时器开始工作 SETB SYS_GEN,INT_GEN ;使能 INT_GEN MAIN: JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN_T2 ;判断是否使能 TMR2 中断 JP INT_EXIT SNZB INT_FLAG,F_T 2 ;检查有无 TMR2 中断请求标志位 JP INT_EXIT CLRB INT_FLAG, F_T2 ;清零 TMR2 中断请求标志位 … ;TMR2 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS。 RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 3 - 内部试用版
7.8 ADC 中断
当 ADC 转换完成后,无论 EN_AD是否使能,F_AD 都会置“1”。若 EN_AD 和 F_AD 都置“1”,那么系 统就会响应 ADC 中断。若 EN_AD = 0,不管 F_AD是否置“1”,系统都不会进入 ADC 中断。用户应注意多 种中断 下的处理。 ★ 例:AD 中断设置程序 CLRB INT_EN,EN_AD LDIA B’10101011’ LD P0CL,A ;P0,0 口设置为 AD 输入口 LD 03H LD SYS_GEN,A ;开启 AD 模块,及使能中断。 LDIA B’00000110’ LD ADCON,A ;选择 AN0 通道, NOP CLRB INT_FLAG,F_AD ;清零 AD 中断请求标志 SETB INT_EN,EN_AD ;使能 AD 中断 NOP SETB ADCON,CONV NOP NOP NOP CLRB ADCON,CONV ;AD 中断开始信号 ★ 例:AD 中断处理程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: MAIN: JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; SNZB INT_EN,EN_AD ;判断是否使能 ADC 中断 JP INT_EXIT SNZB INT_FLAG,F_AD ;检查有无 ADC 中断请求标志位 JP INT_EXIT CLRB INT_FLAG,F_AD ;清零 ADC 中断请求标志位 … ;ADC 中断处理程序 INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS。
中微股份 CMS69P22 www.mcu.com.cn - 5 4 - 内部试用版 RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 5 - 内部试用版
7.9 IGBT 中断
CMS69P22 系列芯片有两个 IGBT 中断源(IGBT 故障中断、IGBT 同步中断)。 在 IGBT 故障中断使能后,有三个原因会产生 IGBT 故障中断:IGBT 过压、浪涌、IGBT WDT 溢出。任何一 种产生中断后,INT_EN 的第 7 位 EN_IGBT 将会被置 1,用户可根据 IGBT 中断标志寄存器来判断是哪个故障 响应的中断。 若设置 IGBT 同步中断使能(INT_EN.6),则在同步比较器发生翻转的时候,会产生 IGBT 的同步中断。 26H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PPG_TMRH INT_SYN INT_GY INT_LY INT_IGBT WDT SYN_DELAY IGBT_POWER[ 8] R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 ★ 例:IGBT 故障中断设置程序 BIT7 INT_SYN:IGBT同步中断标志位 0: 没有同步中断 1: 有同步中断 BIT6 INT_GY:IGBT过压中断标志位 0: IGBT没有过压 1: IGBT有过压 BIT5 INT_LY:浪涌标志位 0:没有浪涌 1:有浪涌 BIT4 INT_IGBT WDT:IGBT看门狗溢出标志位 0:IGBT看门狗定时器没有溢出 1:IGBT看门狗定时器溢出 BIT3、BIT2、BIT1 IGBT同步延时控制 BIT0 PPG输出控制第8位 LD 01H LD SYS_GEN,A ;中断总使能 SETB INT_EN,EN _IGBT ;IGBT 故障中断使能 LDIA 00H LD COMP_RES1,A ;过压、浪涌比较器正端电压设置成 0.4VDD CLR GY_LY ;过压、浪涌检测清零 LDIA 88H LD GY_LY,A ;过压、浪涌灵敏度设置,并使能检测 … … ;设置完成,等待 IGBT 故障中断
中微股份 CMS69P22 www.mcu.com.cn - 5 6 - 内部试用版 ★ 例:IGBT 故障中断处理程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_START ;中断程序入口; START: ;程序起始 MAIN: ;主程序循环 JP MAIN INT_START: ;中断程序 … … ;中断服务程序入口,保存 ACC 及 FLAGS; SZB INT_FLAG,F_IGBT ;判断是否 IGBT 故障中断 JP INT_IGBT ;是 IGBT 故障中断,跳转到 IGBT 故障中断程序 … … ;其它中断程序处理 INT_IGBT: ;IGBT 故障中断程序 CLR IGBT_CON ;有 IGBT 故障中断,立即关闭 IGBT 输出 CLRB INT_FLAG,F_IGBT ;清中断标志位,以便相应其它中断 SZB PPG_TMRH,4 JP INT_IGBT_WDT ;该故障是 IGBT 看门狗溢出产生 SZB PPG_TMRH,5 JP INT_IGBT_LY ;该故障是浪涌产生 SZB PPG_TMRH,6 JP INT_IGBT_GY ;该故障是 IGBT 过压产生 JP INT_BACK ;中断返回 INT_IGBT_WDT: … … ;IGBT 看门口溢出中断处理程序 JP INT_BACK ;中断返回 INT_IGBT_LY: … … ;浪涌中断处理程序 JP INT_BACK ;中断返回 INT_IGBT_GY: … … ;过压中断处理程序 JP INT_BACK ;中断返回 INT_BACK: … … ;中断出口,返回 ACC 跟 FLAGS RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 7 - 内部试用版 7.10 中断的优先级,及多中断嵌套 在同一时刻,系统中可能出现多个中断请求。此时,用户必须根据系统的要求对各中断进行优先权的设置。中 断请求标志 INT_FLAG由中断事件触发,当 F_XX 处于有效值“1”时,系统并不一定会响应该中断。各中断触发 事件如下表所示: 中断 有效触发 F_EXT0 由INT_EXT决定 F_EXT1 由INT_EXT决定 F_T2 TMR2溢出 F_T1 TMR1溢出 F_T0 TMR0溢出 F_AD AD转换结束 F_SYN IGBT同步中断 F_IGBT IGBT故障中断 例:多个中断处理程序 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: MAIN: JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; EXT0CH: SNZB INT_EN,EN _EXT0 ;判断是否使能 EXT0 中断 JP EXT1CH SZB INT_FLAG,F_EXT0 ;检查有无 EXT0 中断请求标志位 JP INT_EXT0 ;EXT0 中断处理程序 EXT1CH: SNZB INT_EN,EN _EXT1 ;判断是否使能 EXT1 中断 JP TMR0CH SZB INT_FLAG,F_EXT1 ;检查有无 EXT1 中断请求标志位 JP INT_EXT1 ;EXT1 中断处理程序 TMR0CH: SNZB INT_EN,EN_T0 ;判断是否使能 TMR0 中断 JP TMR1CH SZB INT_FLAG,F_ET0 ;检查有无 TMR0 中断请求标志位 JP INT_TMR0 ;TMR0 中断处理程序 TMR1CH: 注:多个中断同时发生时,MCU 没有预置的中断优先级。首先,必须预先设定好各中断的 优先权;其次,利用中断使能位和中断控制位,控制系统是否响应该中断。在程序中,
中微股份 CMS69P22 www.mcu.com.cn - 5 8 - 内部试用版 SNZB INT_EN,EN_T1 ;判断是否使能 TMR1 中断 JP TMR2CH SZB INT_FLAG,F_T1 ;检查有无 TMR1 中断请求标志位 JP INT_TMR1 ;TMR1 中断处理程序 TMR2CH: SNZB INT_EN,EN_T2 ;判断是否使能 TMR2 中断 JP ADCCH SZB INT_FLAG,F_T2 ;检查有无 TMR2 中断请求标志位 JP INT_TMR2 ;TMR2 中断处理程序 ADCCH: SNZB INT_EN,EN_AD ;判断是否使能 ADC 中断 JP INT_EXIT SNZB INT_FLAG,F_AD ;检查有无 ADC 中断请求标志位 JP INT_EXIT INT_ADC: CLRB INT_FLAG,F_AD … ;AD 中断处理程序 JP INT_EXIT INT_TMR2: CLRB INT_FLAG,F_TMR2 … ;TMR2 中断处理程序 JP INT_EXIT INT_TMR1: CLRB INT_FLAG,F_TMR1 … ;TMR1 中断处理程序 JP INT_EXIT INT_TMR0: CLRB INT_FLAG,F_TMR0 … ;TMR0 中断处理程序 JP INT_EXIT INT_EXT1: CLRB INT_FLAG,F_EXT1 … ;EXT1 中断处理程序 JP INT_EXIT INT_EXT0: CLRB INT_FLAG,F_EXT0 … ;EXT0 中断处理程序 JP INT_EXIT INT_EXIT: POP: ;中断服务程序出口,还原 ACC 及 FLAGS。 RETI
中微股份 CMS69P22 www.mcu.com.cn - 5 9 - 内部试用版 8. 定时计数器 TMR0 8.1 定时计数器 TMR0 概述 TMR0 由如下功能组成: ◆ 8 位定时器/计数器 ◆ 可用程序进行读写操作 ◆ 可选择定时器或计数器工作方式 ◆ 8位可编程控制寄存器(OPTION) ◆ 中断在 FF 到 00 时溢出 ◆ 外部时钟边沿可选择 TMR0的工作模式由TMR0控制寄存器(OPTION)的T0CS选择: 当T0CS=0时以定时器方式工作,在不用预分频器情况下每个指令周期加1,若对TMR0进行写操作那么增量 操作便禁止两个周期,当TMR0从FF加到00溢出时将产生TMR0中断,这个溢出将位F_T0(INT_FLAG,5)置1, 可以通过清零位EN_T0(INT_EN,4)来屏蔽该中断,在重新使能该中断时必须用软件清除 F_T0,TMR0中断不 能唤醒休眠状态下的CPU。 当T0CS=1时以计数器方式工作,TIMER0模块的计数器将对加到RTCC口的脉冲进行计数。是上升沿还是下 降沿有效则由位T0SE选择,T0SE=0时选择上升沿有效,T0SE=1时选择下降沿有效。 ◆ TMR0/WDT结构图
中微股份 CMS69P22 www.mcu.com.cn - 6 0 - 内部试用版 ◆ TMR0 时序图,内部时钟/无预分频器 ◆ TMR0 时序图,内部时钟/预分频器 1:2 8.2 与 TMR0 相关寄存器 有两个寄存器与 TMR0 相关,8 位定时器/计数器(TMR0), 8位可编程控制寄存器(OPTION)。 TMR0 为一个 8 位可读写的定时/计数器,OPTION 为一个 8 位只写寄存器,用户可改变 OPTION 的值,来改变 TMR0 的工作模式等。请参看 2.6 关于预分频寄存器(OPTION)的应用。 01H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 T M R 0 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 X X X X X X X X BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 OPTION 无 无 T0CS T0SE PSA PS2 PS1 PS0 读写 W W W W W W 复位值 X X 1 1 1 1 1 1
中微股份 CMS69P22 www.mcu.com.cn - 6 1 - 内部试用版 8.3 使用外部时钟作为 TMR0 的时钟源 TMR0 用于外部时钟计数时,外部时钟输入必须满足特定条件。要求外部时钟与内部相位时钟(Tosc)同 步,在同步后要经过一定延时,TMR0 才会递增。 如果不使用预分频器,那么外部时钟就是 TMR0 的输入,在内部时钟的 Q2 和 Q4 周期对预分频器输出进行采 样可实现 RTCC 与内部相位时钟同步。因此要求 RTCC 引脚信号的高电平时间至少为 2 个 Tosc(加上一小段 的 RC 延时),并且低电平时间至少为 2 个 Tosc(加上一小段的 RC 延时)。 若使用了预分频器,外部时钟输入要先经过异步脉动计数型预分频器的分频,从而使预分频器的输出对称。 为了使外部时钟满足采样要求,必须考虑纹波计数器的影响。因此 RTCC 的时钟周期至少为 4 个 Tosc(加上 一小段的 RC 延时)除以预分频值。RTCC 引脚上的高低电平持续时间只须满足 10ns 的最低脉宽要求即可。 ◆ TMR0 与外部时钟时序
8.4 TMR0 做定时器的应用
8.4.1 TMR0 的基本时间常数
PS2~PS0 TMR0 的输入时钟 T0CLK Fcpu=4MHz÷4 最大溢出间隔时间 TMR0 递增时间
000 Fcpu/2 512μS 2μS
001 Fcpu/4 1024μS 4μS
010 Fcpu/8 2048μS 8μS
011 Fcpu/16 4096μS 16μS
100 Fcpu/32 8192μS 32μS
101 Fcpu/64 16384μS 64μS
110 Fcpu/128 32768μS 128μS
111 Fcpu/256 65536μS 256μS
中微股份 CMS69P22 www.mcu.com.cn - 6 2 - 内部试用版
8.4.2 TMR0 初值的计算方法
TMR0 初值的计算方法的计算方法如下: TMR0 初始值=256-(TMR0 中断间隔时间×TMR0 的输入时钟) ★ 例:在 4MHz 的主频模式下设置 TMR0 的时间间隔为 100μS。 初始值 = 256 - (TMR0 中断间隔时间×TMR0 的输入时钟) ÷4÷2) = 206 = CEH 8.4.3 TMR0 操作流程 5, 禁止 TMR0 中断并清除 TMR0 中断标志位; 6, 设置 TMR0 工作模式,及分频比; 7, 设置 TMR0 初值 8, 开启 TMR0 中断 ★ 例:TMR0 定时设置程序 CLRB INT_EN,EN_T0 ;禁止 TMR0 中断 CLRB INT_FLAG,F_T0 ;清零 TMR0 中断请求标志位 CLRA OPTION ;设置 TMR0 时钟=Fcpu/2 CLR TMR0 ;初始化 TMR0 CLRB INT_FLAG, F_T0 ;清零 TMR0 中断请求标志位 SETB INT_EN,EN_T0 ;使能 TMR0 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN 注:每次 TMR0 溢出时 TMR0 的初值并不会被自动加载,故用户需在每次 TMR0 溢出时重新加 载 TMR0 初值;由于对 TMR0 进行写操作,TMR0 将会有一个 T0CLKS 时钟不递增,用户 要自己输入校正值来避开这个问题。
中微股份 CMS69P22 www.mcu.com.cn - 6 3 - 内部试用版 9. 定时计数器 TMR1
9.1 TMR1 概述
TMR1 由如下功能组成: ◆ 选择时钟频率 ◆ 8 位定时器/计数器 ◆ TMR1 控制寄存器(T1CON) ◆ 中断在 FF 到 00 时溢出 ◆ 外部时钟为边沿可选择 ◆ 三种不同工作模式 TMR1 结构图 TMR1有两个与定时/计数器有关的寄存器,TMR1和TMR1C。TMR1 寄存器有两个物理空间;写入TMR1会将初 始值装入到定时/计数器的预置寄存器中,而读TMR1则会取得定时/计数器的内容。TMR1C 是定时/计数器控 制寄存器,它可以定义定时/计数器的工作模式。 TM0、TM1 用来定义定时/计数器的工作模式。外部事件计数模式是用来记录外部事件的,其时钟来源为 外部RTCC引脚输入。 定时器模式是一个常用模式,其时钟来源为内部时钟。脉宽测量模式可以测量RTCC引脚高/低电平的宽度, 其时钟来源为内部时钟。无论是定时模式还是外部事件计数模式,一旦开始计数,定时/计数器会从寄存器 当前值向上计到0FFH。一旦发生溢出,定时/计数器会从预置寄存器中重新加载初值,并开始计数;同时置 位中断请求标志(F_T1;INT_FLAG 的第3位),位F_T1须用软件清零。 当计数器溢出时,会从定时/计数器的预置寄存器中重新加载初值,而中断的处理方式与其它两种模式一 样。要启动计数器,只要置位TON(TMR1C 的第4 位)。在脉宽测量模式下,TON 在测量结束后会被自动清除; 但在另外两种模式中,TON 只能由指令来清除。定时/计数器溢出可以做为唤醒信号。不管是什么模式,只 要写0 到EN_T1 位即可禁止定时/计数器中断服务。 在定时/计数器停止计数时,写数据到定时/计数器的预置寄存器中,同时会将该数据写入到定时/计数器。 但如果在定时/计数器工作时这么做,数据只能写入到预置寄存器中,直到发生溢出时才会将数据从预置寄 存器加载到定时/计数器寄存器。读取定时/计数器时,计数会被停止,以避免发生错误;计数停止会导致计 数错误,程序员必须注意到这一点。 数据总线 重载 初值 溢出 中断 8 位 定时/计数器 定时/计数 器预置寄存 器 TM0 TM1 RTCC TE TM0 TM1 FINT PSC2 ~ 8 位分频器 8-1 MUX 脉宽测量 模式控制 器 TON Fsys
中微股份 CMS69P22 www.mcu.com.cn - 6 4 - 内部试用版 在脉宽测量模式,TON 与TE 是1 时,只要RTCC引脚有一个上升沿信号(TE 是0 为下降沿信号),定时/ 计数器就会开始计数,直到RTCC脚电平恢复,同时TON 被清零。测量的结果会保存在寄存器中,直到有新的 测量开始。换句话说,一次只能测量一个脉冲宽度。重新置位TON后,可以继续测量。注意,在该模式下, 定时/计数器是跳变触发而不是电平触发。
9.2 TMR1 相关寄存器
16H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 T M R 1 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 X X X X X X X X 17H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 TMR1C TM1 TM0 未用 TON TE PSC2 PSC1 PSC0 读写 R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 1 0 0 0 BIT7、BIT6 TM1、TM0:TMR1 工作模式选择位 00:不工作 01:外部事件计数器 10:内部定时器 11:脉冲宽度测量模式 BIT4 TON:工作使能位 0:禁止 1:使能 BIT3 TE:计数/脉宽测量模式边缘选择 计数模式: 0:上升沿计数 1:下降沿计数 脉冲宽度测量模式: 0:下降沿开始,上升沿结束 1:上升沿开始,下降沿结束 BIT2 BIT1、BIT0 PSC2~PSC0:分频比选择 000: 1:1 001: 1:2 010: 1:4 011: 1:8 100: 1:16 101: 1:32 110: 1:64 111: 1:128
中微股份 CMS69P22 www.mcu.com.cn - 6 5 - 内部试用版
9.3 TMR1 的时间常数
9.3.1 TMR1 基本时间参数
PSC2~PSC0 TMR1 的输入时钟 T1CLK Fcpu=4MHz÷4 最大溢出间隔时间 TMR1 递增时间
000 Fcpu 256μS 1μS
001 Fcpu/2 512μS 2μS
010 Fcpu/4 1024μS 4μS
011 Fcpu/8 2048μS 8μS
100 Fcpu/16 4096μS 16μS
101 Fcpu/32 8192μS 32μS
110 Fcpu/64 16384μS 64μS
111 Fcpu/128 32768μS 128μS
9.3.2 TMR1 初值的计算方法
TMR1 初值的计算方法与 TMR0 初值的计算方法一样,这里不再赘述。
9.4 TMR1 的应用
9.4.1 TMR1 作定时器使用
TMR1 作内部定时器时,可以产生一个定时中断,设置 T1 定时器的操作流程如下: 9, 禁止 TMR1 定时器 10, 禁止 TMR1 中断并清除 TMR1 中断标志位; 11, 设置 TMR1 为定时器模式,及分频比; 12, 设置 TMR1 初值 13, 开启 TMR1 中断 ★ 例:TMR1 定时设置程序 CLRB TMR1C,TON ;禁止 TMR1 定时器工作 CLRB INT_EN,EN_T1 ;禁止 TMR1 中断 CLRB INT_FLAG, F_T1 ;清零 TMR1 中断请求标志位 LDIA B’10000000’ LD TMR1C,A ;设置 TMR1 为定时器模式,分频比 1:1 LDIA 06H LD TMR1,A ;设置 TMR1 初值 CLRB INT_FLAG, F_T1 ;清零 TMR1 中断请求标志位 SETB INT_EN,EN_T1 ;使能 TMR1 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN SETB TMR1C,TON ;使能 TMR1 定时器
中微股份 CMS69P22 www.mcu.com.cn - 6 6 - 内部试用版
9.4.2 TMR1 作计数器使用
通过设置 TMR1C 的 TM1、TM0 位可以使 TMR1 工作在外部事件计数模式,当 TMR1 被设置为外部事件计数模 式时,在外部计数器模式下 TMR1 会根据 RTCC 口的上升沿或则下降沿递增,在此种模式下分频比选项是不起 作用的。 设置 T1 计数器的操作流程如下: 14, 禁止 TMR1 计数器 15, 禁止 TMR1 中断并清除 TMR1 中断标志位; 16, 设置 TMR1 为计数器模式; 17, 设置 TMR1 初值 18, 开启 TMR1 中断 ★ 例:TMR1 定时设置程序(上升沿递增模式) CLRB TMR1C,TON ;禁止 TMR1 定时器工作; CLRB INT_EN,EN_T1 ;禁止 TMR1 中断; CLRB INT_FLAG,F_T1 ;清零 TMR1 中断请求标志位; LDIA B’01000000’ LD TMR1C,A ;设置 TMR1 为计数器模式; LDIA 06H LD TMR1,A ;设置 TMR1 初值; CLRB INT_FLAG,F_T1 ;清零 TMR1 中断请求标志位; SETB INT_EN,EN_T1 ;使能 TMR1 中断; SETB SYS_GEN,INT_GEN ;使能 INT_GEN; SETB TMR1C,TON ;使能 TMR1 定时器。 TMR1 作外部计数器时工作时序如下: RTCC TON TMR1=6 TMR1=7 TMR1=8 TMR1=9 TMR1=A TMR1 在作外部计数器时工作流程如下: 19, RTCC 口有方波信号输入 20, TMR1 在方波信号的上升沿或者下降沿递增 21, 当 TMR1 从 FF 加到 00 时产生中断请求信号 F_T1 22, 若中断使能,则响应 TMR1 中断 关于 TMR1 作计数器的下降沿递增模式,与上升沿一样,只是一个在下降沿递增、一个在上升沿递增。 这里不再赘述。
中微股份 CMS69P22 www.mcu.com.cn - 6 7 - 内部试用版
9.4.3 TMR1 的脉冲宽度测量模式
通过设置 TMR1C 的 TM1、TM0 位可以使 TMR1 工作在脉冲宽度测量模式,设置脉冲宽度测量模式的操作 流程如下: 23, 禁止 TMR1 24, 禁止 TMR1 中断并清除 TMR1 中断标志位; 25, 设置 TMR1 初值 26, 设置 TMR1 工为脉冲宽度测量模式; 27, 开启 TMR1 中断 E ★ 例:TMR1 脉冲宽度测量模式设置程序(下降沿开始,上升沿结束) CLRB TMR1C,TON ;禁止 TMR1; CLRB INT_EN,EN_T1 ;禁止 TMR1 中断; CLRB INT_FLAG,F_T1 ;清零 TMR1 中断请求标志位; LDIA B’11000000’ LD TMR1C,A ;设置 TMR1 为脉冲宽度测量模式; LDIA 00H LD TMR1,A ;设置 TMR1 初值; CLRB INT_FLAG,F_T1 ;清零 TMR1 中断请求标志位; SETB INT_EN,EN_T1 ;使能 TMR1 中断; SETB SYS_GEN,INT_GEN ;使能 INT_GEN; SETB TMR1C,TON ;使能 TMR1 定时器。
9.4.3.1 TMR1 作冲宽度测量模式(下降沿开始,上升沿结束)工作时序如下:
9.4.3.2 TMR1 在作脉冲宽度测量模式(上升沿开始,下降沿结束)工作流程如下:
28, 设置 TMR1 工作在脉冲宽度测量模式,且使能 TMR1; 29, 当 RTCC 口有下降沿 TMR1 开始计数,若没有则 TMR1 保持原来值; 30, TMR1 开始计数,若溢出则进入中断; 31, 当 RTCC 口有上升沿时,TMR1 停止,且自动清TON;若无一直计数,直到出现上升沿。 TMR1 开始递加 TMR1 停止递加 且自动清除 TON
中微股份 CMS69P22 www.mcu.com.cn - 6 8 - 内部试用版
9.4.3.3 RTCC 口脉冲宽度时间的计算方法
RTCC 口脉冲宽度计算公式如下: ★ 例:设置 TMR1 初值为 00、分频比 1:1、进入 T1 中断次数为 5、TMR1 停止时值为 100 RTCC 脉宽时间 =T1 中断间隔时间×T1 中断次数 +(TMR1 值-TMR1 初值) RTCC 脉宽时间 =T1 中断间隔时间×T1 中断次数 +(TMR1 值-TMR1 初值) =256μS ×5+(100-0) =1280μS+100μS =1380μS
中微股份 CMS69P22 www.mcu.com.cn - 6 9 - 内部试用版 10. 定时计数器 TMR2
10.1 TMR2 概述
TMR2 由如下功能组成: ◆ 选择时钟频率 ◆ 8 Bit 计数器(T2CNT),8Bit 比较器,8Bit 数据寄存器(T2DATA)和 T2DATA 缓冲器 ◆ TMR2 控制寄存器(T2CON) T2CON(bit4 和 bit5)用来选择 TMR2 的输入时钟频率。定时器 2 中断的使能位和标志位由 INT_EN.2 和 INT_FLAG.2 控制。在定时模式下,当 TMR2 计数器的值和 T2DATA Buffer 值相等时,将产生一个 TMR2 的匹 配信号来清除 T2 计数器的值和重载 T2DATA Buffer 的比较值,假如 T2 中断是使能的,那么也会同时产生中 断请求信号。如果 TMR2 中断禁能(INT_EN.2=0),匹配的信号不产生匹配的中断请求。时钟分配器不是 TMR2 的组成部分,且分配的时钟和定时器中断使能信号是同步的。所以,在第一个匹配时间间隔里是矛盾的。 ◆ TMR2 结构框图 T2OUT P1CL,1~0 相等 T2CON,0 /256 /4096 XIN 分 频 器 MUX T2CON,5~4 T2 计数器 比较器 T2DATA缓冲器 T2DATA T2CON,0 溢出置 F_T2 注:中断请求标志位 F_T2 必须由软件清除。
中微股份 CMS69P22 www.mcu.com.cn - 7 0 - 内部试用版 32, TMR2 时序图 T 2 D A T A 匹配 T 2 C N T T 2 C O N , 0 T 2 D A T A 缓冲器 中断请求 F _ T 2 T 2 O U T T2DATA改变 T2 停止 T2CONT,0=0 T2OUT 一直为 0
中微股份 CMS69P22 www.mcu.com.cn - 7 1 - 内部试用版
10.2 TMR2 相关的寄存器
有三个寄存器与 TMR2 相关,分别是数据存储器 T2DATA,计数器 T2CNT,控制寄存器 T2CON 18H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 T 2 C N T R/W R R R R R R R R 复位值 0 0 0 0 0 0 0 0 19H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 T2CON 未用 未用 T2C1 T2C0 未用 未用 未用 T2_CLR R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT5、BIT4 T2C1 、T2C0:时钟选择位 00:Fosc/4096 01:Fosc/256 10:Fosc/8 11:Fosc/4 BIT0 T2_CLR:工作使能位 0:禁止,T2CNT 清零 1:使能 T2CNT 从“0”开始计数 1AH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 T2DATA R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 1 1 1 1 1 1 1 1
中微股份 CMS69P22 www.mcu.com.cn - 7 2 - 内部试用版
10.3 TMR2 的时间常数
10.3.1 TMR2 基本时间参数
T2C1、T2C0 T2CNT 计数时钟 Fosc=4MHz 最大溢出间隔时间 最小溢出间隔时间
00 Fosc /4096 262114μS 1024μS
01 Fosc /256 16384μS 64μS
10 Fosc /8 512μS 2μS
11 Fosc /4 256μS 1μS
10.3.2 T2DATA 初值计算方法:
T2DATA 初值 =T2 溢出时间×时钟频率÷分频比-1 ★ 例:Fosc=4MHz、分频比 1:4、T2 溢出时间 100μS 时 T2DAT 的值 T2DATA 初值 =T2 溢出时间×时钟频率÷分频比-1 =100μS×4 MHz÷4-1 =99 =63H
10.4 TMR2 应用
TMR2 作计数器时,可以产生一个定时中断,设置 T2 计数器的操作流程如下: 33, 禁止 TMR2 定时器 34, 禁止 TMR2 中断并清除 TMR2 中断标志位; 35, 设置 TMR2 分频比; 36, 开启 TMR2 中断 37, 开始 TMR2 计数 ★ 例:TMR2 定时设置程序 CLRB T2CON,T2_CLR ;清零 T2CNT CLRB INT_EN,EN_T2 ;禁止 TMR2 中断 CLRB INT_FLAG,F_T2 ;清零 TMR2 中断请求标志位 LDIA 063H LD T2DATA,A ;设置 TMR2 目标值 LDIA B’00011000’ LD T2CON,A ;设置 TMR2 分频比 1:4 CLRB INT_FLAG, F_T2 ;清零 TMR2 中断请求标志位 SETB INT_EN,EN_T2 ;使能 TMR2 中断 SETB SYS_GEN,INT_GEN ;使能 INT_GEN SETB T2CON,T2_CLR ;T2CNT 开始计数
中微股份 CMS69P22 www.mcu.com.cn - 7 3 - 内部试用版
10.5 T2OUT 输出
当 T2 溢出时,I/O 口(P1,0)可以与其匹配输出,由 I/O 口控制寄存器 P1CL 控制,当 P1,0 设置为 T2OUT 口时,无论此时往 P1,0 I/O 寄存器写“1”,还是“0”;P1,0 都会匹配 T2 溢出输出。
10.5.1 T2OUT 的周期
T2OUT 的输出周期为 T2 溢出中断的两倍。计算公式如下: T2OUT 周期 =T2 溢出时间×2 10.5.2 T2OUT 基本时间参数 T2CON T2C1、T2C0 T2CNT 计数时钟 Fosc=4MHz T2OUT 最大输出周期 T2OUT 最小输出周期
00 Fosc /4096 524228μS 2048μS
01 Fosc /256 32768μS 128μS
10 Fosc /8 1024μS 4μS
11 Fosc /4 512μS 2μS
10.5.3 T2OUT 应用
在 P1,0 口输出 T2 溢出匹配信号的操作流程如下: 38, 禁止 TMR2 定时器 39, 禁止 TMR2 中断并清除 TMR2 中断标志位; 40, 设置 TMR2 分频比; 41, 设置 P1,0 口为 T2OUT 口 42, 开始 TMR2 计数 ★ 例:T2OUT 设置程序 CLRB T2CON,T2_CLR ;清零 T2CNT CLRB INT_EN,EN_T2 ;禁止 TMR2 中断 CLRB INT_FLAG,F_T2 ;清零 TMR2 中断请求标志位 LDIA 063H LD T2DATA,A ;设置 TMR2 目标值 LDIA B’00011000’ LD T2CON,A ;设置 TMR2 分频比 1:4 CLRB INT_FLAG, F_T2 ;清零 TMR2 中断请求标志位 LDIA B’10101011’ LD P1CL,A ;P1,0 设置为 T2OUT 口 SETB T2CON,T2_CLR ;T2CNT 开始计数
中微股份 CMS69P22 www.mcu.com.cn - 7 4 - 内部试用版 11. 模数转换(ADC)
11.1 ADC 概述
模数转换器(Analog-to-digital Converter,ADC )可以将模拟输入信号转换为 10 位二进制代码表示。 该模块使用模拟通道通过多路开关连接到一个采样保持电路,采样保持电路的输出与转换器的输入相连接, 转换器通过逐次逼近法产生 10 位的二进制结果,并将转换结果存入 ADDATA 寄存器中,并产生中断请求信号 F_AD。 ADC 由如下功能组成: ◆ 4 通道输入多路复用器 ◆ 10-bit 连续近似值寄存器 ◆ 输出寄存器组成(ADDATAH、ADDATAL) ◆ 控制寄存器(ADCON) ◆ 转换结束产生中断 ◆ ADC 结构框图 AD 时序图 通道设置 ADCON,7~4 转换完,置F_AD GND VDD 模拟比较器 AN0 AN1 AN2 AN3 MUX D/A 转换器 逐次逼近器 AD 转换结果 ADDATA 转换开始 ADCON,0 时钟选择 ADCON,2~1 转换结束 EOC
中微股份 CMS69P22 www.mcu.com.cn - 7 5 - 内部试用版 11.2 与 ADC 相关寄存器 有两个寄存器与 ADC 相关,分别是数据存储器 ADDATA,AD 控制寄存器 ADCON。 09H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ADDATAH R/W R R R R R R R R 复位值 X X X X X X X X 1BH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ADDATAL 未用 未用 未用 未用 未用 未用 复位值 X X 0 0 0 0 0 0 15H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 ADCON 通道选择位 EOC 时钟选择 CONV R/W R/W R/W R/W R/W R R/W R/W R/W 复位值 X X X X X X X X BIT7~BIT4 AD 通道选择位 0000: 选择 AN0 通道 0001: 选择 AN1 通道 0010: 选择 AN2 通道 0011: 选择 AN3 通道 其他: 无效 BIT3 EOC:结束标志 0:转换未完成 1:转换结束 BIT2、BIT1 AD 时钟选择位 00:Fcpu/16 01:Fcpu/8 10:Fcpu/4 11:Fcpu/2 BIT0 CONV:AD 转换开始信号 ADDATAH 和 ADDATAL 是A/D转换结果寄存器,是只读寄存器,当完成A/D 转换后可从ADDATAH 跟 ADDATAL 中 读取A/D转换结果。 ADCON 是A/D 转换控制寄存器,用来定义A/D转换时钟,模拟输入通道选择,A/D 转换开始控制和完成标志。 如果要进行A/D 转换要先定义好I/O 口的设置选择,转换的模拟通道,然后给CONV控制位一个上升沿信号和一个 下降沿信号:0→ 1→ 0, 完成A/D 转换后EOC位会被置1,若A/D 中断被允许,则会产生A/D转换中断。当CONV 标 志由0 置为1 时EOC也会清零。 注:A/D中断请求标志F_AD须由软件清除,为了确保A/D 转换顺利完成CONV 位应保持为0 直到EOC位变为1(A/D 转换完成信号)。
中微股份 CMS69P22 www.mcu.com.cn - 7 6 - 内部试用版
11.3 ADC 应用
11.3.1 用查询模式做 AD 转换流程 ①. A/D 转换使能,即ADC_EN(SYS_GEN.1)=1; ②. 设置对应I/O口为AD口; ③. 等待几十条指令时间; ④. 设置AD转换时钟ADCON[2:1],采样通道ADCON[7:4]; ⑤. 置CONV(ADCON[0])=1,触发AD转换; ⑥. 等待至少1个CLK的延时后,清CONV(ADCON[0])=0; ⑧. 读取AD数据ADDATAH[09H]、ADDATAL[1BH]; ⑨. 如果需要采样另外通道则转到①或②;否则结束AD转换,转到⑩; ⑩. ADC_EN(SYS_GEN.1)=0,关闭AD模块进入低功耗状态。 ★ 查询模式的AD(AN0)转换程序 AD_SEE_MODE: SETB SYS_GEN,ADC_EN ;开启 ADC 使能 LDIA B’XXXXXX11’ LD P0CL,A ;设置 P0,0 口为 AD 口 CALL DELY_TIME ;延时几十个指令周期 LDIA B’00000110’ LD ADCON,A ;选择 AN0 通道,AD 时钟为 Fosc/2 NOP SETB ADCON,CONV NOP NOP NOP CLRB ADCON,CONV ;开始 AD 转换 WAIT: SNZB ADCON,EOC ;等待 AD 转换结束 JP WAIT LD A,ADDATAH LD USER_DEFI NE_RAMH,A ;将结果存放到用户自定义寄存器 LD A,ADDATAL LD USER_DEFINE_RAML,A CLRB SYS_GEN,ADC_EN ;关断 ADC 模块 JP XXXX ;AD 转换结束转到其他程序 11.3.2 AD 中断模式流程 ①.A/D 转换使能,即ADC_EN(SYS_GEN.1)=1; ②.设置对应I/O口为AD口; ③.等待几十条指令时间; ④.设置AD转换时钟ADCON[2:1],采样通道ADCON[7:4]; ⑤.置CONV(ADCON[0])=1,触发AD转换; ⑥.开启AD中断EN_AD(INT_EN.5)=1; ⑦.等待至少1个CLK的延时后,清CONV(ADCON[0])=0; ⑧.等待AD中断产生; ⑨.读取AD数据ADDATAH跟ADDATAL;
中微股份 CMS69P22 www.mcu.com.cn - 7 7 - 内部试用版 ⑪.ADC_EN(SYS_GEN.1)=0,关闭AD模块进入低功耗状态,关闭AD中断。 ★ 例:用AD中断做AD转换 ORG 0000H JP START ;用户程序起始地址; ORG 0001H JP INT_SERVICE ;中断服务程序; ORG 0002H START: … ;用户初始化程序 MAIN: CALL ADC_SUB ;调用 AD 设置程序 JP MAIN INT_SERVICE: PUSH: ;中断服务程序入口,保存 ACC 及 FLAGS; ADCCH: SNZB INT_EN,EN_AD ;判断是否使能 ADC 中断 JP INT_EXIT SNZB INT_FLAG,F_AD ;检查有无 ADC 中断请求标志位 JP INT_EXIT INT_ADC: ;AD 中断处理程序 CLRB INT_FLAG,F_AD ;清零 AD 中断请求标志 CLRB FLAG,AD_EN ;清零设置 AD 标志 LD A,ADDATA LD USER_DEFINE_ RAM,A ;保存 AD 转换数值 CLRB SYS_GEN,ADC_EN ;关断 ADC 模块 INT_EXIT: POP: … ;中断服务程序出口,还原 ACC 及 FLAGS RETI ADC_SUB: SZB FLAG,AD_EN RET SETB SYS_GEN,ADC_EN ;开启 ADC 使能 LDIA B’XXXX11XX’ LD P0CL,A ;设置 P0,1 口为 AD 口 CALL DELY_TIME ;延时几十个指令周期 LDIA B’00010110’ LD ADCON,A ;选择 AN1 通道,AD 时钟为 Fosc/2 NOP SETB ADCON,CONV NOP CLRB INT_FLAG,F_AD SETB INT_EN,EN_AD CLRB ADCON,CONV ;开始 AD 转换 SETB FLAG,AD_EN RET
中微股份 CMS69P22 www.mcu.com.cn - 7 8 - 内部试用版 12. 内置电磁炉驱动模块 12.1 电磁炉驱动模块功能简介 CMS69P22 是专门为电磁炉应用而设计的一款 IC,其内部集成了电磁炉驱动模块,具有以下功能: ◆ 2 种触发模式 单次触发:在单次触发模式下,当使能 PPG 输出的时候,PPG 只输出一个 PPG_TMR 长的高电平。 连续触发:在连续触发模式下,当使能 PPG 输出的时候,PPG 首先输出一个 PPG_TMR 长的高电平,然后根据 同步信号的翻转而输出。 ◆ 内建同步信号检测比较器(COMP1) 高精度比较器,确保 IGBT 工作在最佳状态。 ◆ 内置 9 位 PPG(Programmable Pulse Generator)定时器 PPG 定时器的最小单位为 1/Fsys。例如,在8M 的振荡频率下,其最小单位为1/8M=0.125uS,最长输出时间 为 0.125uS*512=64uS。 ◆ 内置同步计数功能 内置 7 位同步计数器,用来检测同步翻转个数。 ◆ 内置 PPG 看门狗保护 当 PPG 连续输出时间超过大约 70uS 的时候,PPG 看门狗溢出,PPG 输出关闭。 ◆ 内置过压保护比较器(COMP2) 可通过程序设置比较器正端电压以及过压次数。当检测到过压时,可通过程序设置,降低其 PPG 导通时间 或者关闭输出。 ◆ 内置浪涌保护比较器(COMP4) 可通过程序设置比较器正端电压以及浪涌有效时间,当检测到浪涌时,芯片自动关闭输出,直到软件清掉浪 涌的标志位,才能重新打开。 ◆ 内置运放功能 可设置内部滤波,及内部接到 AD 口。 ◆ 比较器失调电压可调 可通过程序调节每个比较器的失调电压,以纠正芯片的个体差异。
中微股份 CMS69P22 www.mcu.com.cn - 7 9 - 内部试用版 12.2 可编程的脉冲发生器 PPG CMS69P22 内置 1 个 9 位的 PPG(Programmable Pulse Generator) 输出通道,其输出的最短时间为 1/Fsys, 最长为 1/Fsys*512。其时序如图: 由上图可知,PPG 时序控制主要由 PPG 定时器、同步比较器(COMP1)、过压比较器(COMP2)、浪涌比较 器(COMP4)以及 IGBT WDT 一起控制。 与 PPG 相关的芯片引脚: 管脚名称 IO 类型 管脚说明 引脚 PPG O PPG 输出口 PIN3 SYN- I 同步比较器负端输入 PIN20 SYN+ I 同步比较器正端输入 PIN19 GY I 过压比较器负端输入 PIN18 LY I 浪涌比较器负端输入 PIN1
中微股份 CMS69P22 www.mcu.com.cn - 8 0 - 内部试用版
12.2.1 PPG 定时器与同步比较器(COMP1)
PPG 定时器控制 PPG 输出的关断。它包含了 PPG 定时设置寄存器 PPG_TMRL8 与 PPG_TMRH1、PPG 触发寄存器、 PPG 触发缓冲寄存器 3 个部分。当 PPG 停止工作并且定时器加载使能的时候,芯片将 PPG 定时设置寄存器的值加 载给 PPG 触发缓冲寄存器,当 PPG 开始工作并输出高的时候。PPG 触发寄存器开始递增,并不停的与 PPG 触发缓 冲寄存器比较,当 PPG 触发寄存器大于等于 PPG 触发缓冲寄存器的时候,PPG 关闭输出,PPG 触发寄存器清零, PPG 缓冲寄存器重新加载,直至 PPG 下次打开,重新开始计数。PPG 触发寄存器的时钟单位为 1/Fsys。 同步比较器控制 PPG 输出的打开。PPG 的首次打开必须是由 IGBT_CON 寄存器(25H)的第 0 位从 0 至 1 的变 化产生,它输出 1 个定时周期后关断,必须是检测到同步比较器从 1 至 0 的翻转信号才能再次打开。 图 12.1.1 PPG 输出时序控制 12.2.2 过压、浪涌比较器(COMP2、COMP3、COMP4) CMS69P22 内置过压检测模块及浪涌检测模块。过压检测模块包括过压比较器(COMP2)、过压计数设置寄存器、 过压计数寄存器。过压比较器的负端从芯片第 18 脚输入,正端通过芯片内部分压输入。用户首先通过程序设置 比较器正端电压以及过压计数设置寄存器,当过压比较器输出从“1”至“0”变化时,过压计数寄存器自动加 1, 当过压计数寄存器大于等于过压计数设置寄存器的时候,芯片产生过压信号,PPG_FLAG(26H)的第 6 位 INT_GY 被置 1,中断标志寄存器 INT_FLAG 的第 7 位 INT_IGBT 被置 1,如果 IGBT 中断使能,则响应中断。当 INT_GY 为 1 的时候,PPG 将禁止输出,用户可以通过清零 GY_LY 的第 7 位(CLR_GY)来清除 INT_GY 标志位,使 PPG 继续输 过压检测还包括启动过压检测,启动过压指的是 PPG 输出高的时候过压检测口的电压高于设定值,一般情况 下,可以将该比较器正端电压设置成最高,以避免不必要的错误判断。 浪涌检测模块由浪涌比较器(COMP4)来控制,必须满足一下二个条件才能产生浪涌信号:1,加在浪涌比较器 负端的电压高于程序设定的正端电压;2,浪涌比较器负端电压高于正端电压的时间大于程序设定值。当浪涌信 号产生时,PPG_FLAG(26H)的第 5 位 INT_LY 被置 1,中断标志寄存器 INT_FLAG 的第 7 位 INT_IGBT 被置 1,如 果IGBT中断使能,则响应中断。当INT_LY为1的时候,PPG将禁止输出,用户可以通过清零GY_LY的第3位(CLR_LY) 来清除 INT_LY 标志位,使 PPG 继续输出。 PPG 工作 禁止 PPG 使能信号, IGBT_CON.0 从0→1 变化 PPG 定时 器溢出 同步比较器 从 1→0 变化 PPG 输出 PPG 开始工作, PPG 定时器递增
中微股份 CMS69P22 www.mcu.com.cn - 8 1 - 内部试用版 12.2.3 与 PPG 相关寄存器 以下寄存器与 PPG 工作相关: IGBT_CON(25H),PPG_FLAG(26H),PPG_TMRL8(27H),SYN_COUNTER(28H),COMP1C(2AH),COMP2C(2BH), COM3C(2CH),COMP4C(2DH),COMP_RES1(0EH),COMP_RES2(0FH),GY_LY(20H)。 25H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 IGBT_CON SYN_EN RELOAD_EN RESET_CNT EN_CNT TRI_ONE_PLUS IGBT_ON R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT5 SYN_EN:IGBT 同步使能位 0:同步比较器禁止 1:同步比较器使能(PPG 连续工作的时候务必置 1) BIT4 RELOAD_EN:IGBT 导通时间加载使能 0:允许加载 1:禁止加载 BIT3 RESET_CNT:同步计数复位 0:同步计数器复位清零 1:同步计数器正常工作 BIT2 EN_CNT:同步计数使能位 0:禁止同步计数 1:允许同步计数 BIT1 TRI_ONE_PLUS:IGBT 单次输出选择 0:连续输出 1:单次输出 BIT0 IGBT_ON:IGBT 模块总使能 0:IGBT 模块禁止 1:IGBT 模块使能 IGBT_CON 是电磁炉 IGBT 驱动控制寄存器,其第 0 位 IGBT_ON 是 PPG 工作的总使能位,只有当 IGBT_ON 为 1 的时候,PPG 才能正常工作,IGBT_ON 从 0 至 1 的变化会产生一个脉冲的 PPG 信号;第 1 位 TRI_ONE_PLUS 是 PPG 单次输出选择位,当其为 1 的时候,用户在使能 PPG 模块时,DRI_IGBT 只输出 1 个脉冲的高电平, 该功能一般是用来检锅,当其为 0 的时候,PPG 才能连续工作;第 2、3 位用来检测同步信号翻转次数;第 4 位是 PPG 定时器加载使能位,当其为 0 的时候,用户改变 PPG_TMRL 跟 PPG_TMRH1(PPG_FLAG.0)来改变 IGBT 导通时间,当其为 1 的时候,不管用户怎么改变 PPG_TMRL 跟 PPG_TMRH1 的值,IGBT 的导通时间不变, 要 注意的是,为了防止 PPG_TMR 在用户修改了 PPG_TMRL 跟 PPG_TMRH1 时数据未稳定就加载,或者只修改了其 中一个就加载,造成 DRI_IGBT 输出不正常,用户在修改 PPG 设置寄存器的时候,应该遵循:“禁止加载→修 改 PPG_TMRL 跟 PPG_TMRH1→允许加载”的顺序来操作;第 5 位是同步比较器使能位,当 PPG 连续工作的时 候,必须将改位置“1”。
中微股份 CMS69P22 www.mcu.com.cn - 8 2 - 内部试用版 26H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PPG_FLAG INT_SYN INT_GY INT_LY IGBT_WDT SYN_DELAY PPG_TMRH1 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 INT_SYN:同步中断标志位(比较器 1 中断) 0:没有同步中断 1:有同步中断 BIT6 INT_GY:过压中断标志位(比较器 2 中断) 0:没有过压中断 1:有过压中断 BIT5 INT_LY:浪涌中断标志位(比较器 4 中断) 0:没有浪涌中断 1:有浪涌中断 BIT4 IGBT_WDT:IGBT 看门狗溢出中断标志位 0:IGBT 看门狗没有溢出 1:IGBT 看门狗溢出 BIT3 SYN_DELAY_EN:同步延时使能 0:没有同步延时 1:有同步延时 BIT1-BIT2 SYN_DELAY:同步延时时间控制(8M 主频) 00:延时 0.5uS 00:延时 1uS 00:延时 1.5uS 00:延时 2uS BIT0 PPG_TMRH1:PPG 定时器最高位(第 9 位) 27H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PPG_TMRL R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 PPG_TMRL 跟 PPG_TMRH1(PPG_FLAG.0)共同组成了一个 9 位的定时器,控制 IGBT 导通的时间。 PPG_FLAG 的第 1 位至第 3 位表示同步比较器延时控制,该延时控制指的是芯片检测到同步信号后,延 时一段时间再输出 PPG 信号,其延时时间单位为 1 个指令时钟,即最长延时时间=7*1/Fosc*4。 IGBT_WDT、INT_LY、INT_GY 分别表示电磁炉工作工程中的 3 种故障。其中,IGBT_WDT 为芯片内置 IGBT 看门狗定时器,该定时器为一独立的 RC 振荡器,在芯片发生异常而导致 IGBT 输出时间过长的时候,IGBT_WDT 溢出,芯片强制关闭 PPG 输出,该时间典型值为 60us;INT_LY 为浪涌故障,该故障只有在芯片第 1 脚的电 压高于芯片内置的比较器正端电压的时候才能出现;INT_GY 为过压故障,该故障只有在芯片第 18 脚的电压 高于芯片内置比较器正端电压的时候才能出现。以上三种故障,任何一种故障出现时,芯片会立即强行关闭 DRI_IGBT 输出,同时,芯片响应中断请求,中断标志位 INT_FLAG的第 7 位 IGBT_EN 被置 1,用户可以以 IGBT_FLAG 的第 4、5、6 位来判断是哪种原因造成的保护。
中微股份 CMS69P22 www.mcu.com.cn - 8 3 - 内部试用版 28H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SYN_COUNTER R/W R R R R R R R R 复位值 0 0 0 0 0 0 0 0 SYN_COUNTER 是一个只读寄存器,该寄存器的作用是用来计 SYN-、SYN+输入口翻转的次数,要使其有效,则 IGBT_CON 的第 2 位 EN_CNT 必须置 1。 20H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 GY_LY CLR_GY GY_SLE CLR_LY LY_SLE R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 CLR_GY:同清过压中断标志位 0:清过压中断标志 1:过压检测正常工作 BIT4-BIT6 GY_SLE:过压的检测次数 000:1 次 001:2 次 010:4 次 011:8 次 100:16 次 101:32 次 110:64 次 111:128 次 BIT3 CLR_LY:清浪涌中断标志位 0:清浪涌中断标志 1:浪涌检测正常工作 BIT0-BIT2 LY_SLE:浪涌的检测脉冲 (T=1/Fosc) 000:2T 001:4T 010:8T 011:16T 100:32T 101:64T 110:128T 111:256T GY_LY 寄存器是过压跟浪涌检测设置寄存器。其 0-2 位表示芯片检测的浪涌时间长短,如果浪涌脉冲短 于所设定的时间,则芯片不做处理,只有当浪涌信号大于所设定的时间的时候,芯片才响应浪涌中断,此时 寄存器 INT_FLAG 的第 7 位 INT_IGBT 跟寄存器IGBT_FLAG 的第 5 位 INT_LY 将被置 1,用户可通过清零 GY_LY 的第 3 位,使 INT_LY 清零,从而使芯片重恢复工作。 GY_LY 的第 4-6 位表示芯片检测过压的次数,一般情况下,加在 IGBT 上的电压信号大约为 20-30KHZ, 当其峰值电压过压的次数大于所设定的值的时候,寄存器 INT_FLAG 的第 7 位 INT_IGBT 跟寄存器 IGBT_FLAG 的第 6 位 INT_GY 将被置 1,用户可通过清零 GY_LY 的第 7 位,使 INT_GY 清零,使芯片恢复工作。
中微股份 CMS69P22 www.mcu.com.cn - 8 4 - 内部试用版 0EH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP_RES1 过压比较器正端电压选择 浪涌比较器正端电压选择 R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT4-BIT7 过压比较器正端电压选择(VDD 为芯片电压) 0000:0.400VDD 0001:0.425VDD 0010:0.450VDD 0011:0.475VDD 0100:0.500VDD 0101:0.525VDD 0110:0.550VDD 0111:0.575VDD 1000:0.600VDD 1001:0.625VDD 1010:0.650VDD 1011:0.675VDD 1100:0.700VDD 1101:0.725VDD 1110:0.750VDD 1111:0.775VDD BIT0-BIT3 浪涌比较器正端电压选择(VDD 为芯片电压) 0000:0.400VDD 0001:0.425VDD 0010:0.450VDD 0011:0.475VDD 0100:0.500VDD 0101:0.525VDD 0110:0.550VDD 0111:0.575VDD 1000:0.600VDD 1001:0.625VDD 1010:0.650VDD 1011:0.675VDD 1100:0.700VDD 1101:0.725VDD 1110:0.750VDD 1111:0.775VDD
中微股份 CMS69P22 www.mcu.com.cn - 8 5 - 内部试用版 0EH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP_RES2 OPAAD OPACTL -- 过压比较器正端电压选择(启动过压) R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 运放输出是否内部接 AN3 0:内部不接 AN3 1:内部通过 10K 电阻接到 AN3 BIT6 运放正端选择 0:运放正端接 1K 的下拉电阻 1:运放正端直接接 GND BIT5 未用 BIT0-BIT4 比较器 3 正端电压选择(VDD 为芯片电压) 00000-11111:0.125VDD-0.4VDD COMP_RES2 是启动过压检测比较器控制寄存器,其第 0 位至第 4 位表示启动过压比较器正端电压选择,在设 置好同步比较器参数的情况下,可以将该值设定成最大,即“11111”,以避免同比比较器工作不正常。 2AH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP1C C1OUT C1C0FM C1CRS C1_ADJ R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 -- 0 0 1 0 0 0 0 BIT7 调节模式下比较器 1 结果输出 BIT6 比较器 1 工作模式: 0:正常工作模式 1:调节模式 BIT5 调节模式输入选择: 0:负端输入 1:正端输入 BIT0-BIT4 比较器 1 失调电压调节 COMP1C 是同步比较器(COMP1)失调电压调节寄存器。通过调节失调电压,可以降低由生产工艺等环节 造成的芯片个体之间测差异。比较器 1 失调电压调节流程为: ①.设置 COMP1C 为调节模式并给调节位赋值“00000”或“11111”; ②.记录 COMP1C 的第 7 位输出结果; ③.改变 C1_ADJ,将调节位加 1 或减 1; ④.读取 COMP1C 第 7 位,判断是否跟上次的不同,若相同则返回第 3 步; ⑤.若不同则该值就是 COMP1 的失调电压设定值 例:同步比较器失调电压调节程序: COMP_INIT: LDIA B’01011111’ ;设置 COMP1 进入调节模式 LD COMP1C,A ;调节位设成最高的时候输出为“0” COMP_LOOP: CALL DELAY ;延时几十个微秒
中微股份 CMS69P22 www.mcu.com.cn - 8 6 - 内部试用版 SZB COMP1C,7 ;判断调节输出位是否为“1” JP COMP_OK ;为 1 则调节完成 DECR COMP1C ;为 0 则使调节位减 1 LDIA 01FH ANDA COMP1C SZB FLAGS,Z ;判断调节位是否减到 0 JP COMP_ERR ;调节位减到 0 还没有输出 1,调节故障 JP COMP_LOOP COMP_OK: LDIA 01FH ;完成调节,进入正常工作模式 ANDR COMP1C JP XXXX 一般情况下,当 COMP1C 调节位设置成最高的时候,调节输出为“0”,设置成最低的时候,调节输出为 “1”,刚好“0”跟“1”变化的值就是它的失调电压设定值。如果发生像上面程序里面的调节故障,则可能 为程序延时不够或者硬件错误造成的。 2BH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP2C C2OUT C2C0FM C2CRS C2_ADJ R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 -- 0 0 1 0 0 0 0 BIT7 调节模式下比较器 1 结果输出 BIT6 比较器 2 工作模式: 0:正常工作模式 1:调节模式 BIT5 调节模式输入选择: 0:负端输入 1:正端输入 BIT0-BIT4 比较器 2 失调电压调节 比较器 2 的失调电压调节请参考比较器 1 的调节时序。 2CH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP3C C3OUT C3C0FM C3CRS C3_ADJ R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 -- 0 0 1 0 0 0 0 BIT7 调节模式下比较器 1 结果输出 BIT6 比较器 3 工作模式: 0:正常工作模式 1:调节模式 BIT5 调节模式输入选择: 0:负端输入 1:正端输入 BIT0-BIT4 比较器 3 失调电压调节 比较器 3 的失调电压调节请参考比较器 1 的调节时序。
中微股份 CMS69P22 www.mcu.com.cn - 8 7 - 内部试用版 2DH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP4C C4OUT C4C0FM C4CRS C4_ADJ R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 -- 0 0 1 0 0 0 0 BIT7 调节模式下比较器 1 结果输出 BIT6 比较器 4 工作模式: 0:正常工作模式 1:调节模式 BIT5 调节模式输入选择: 0:负端输入 1:正端输入 BIT0-BIT4 比较器 4 失调电压调节 比较器 4 的失调电压调节请参考比较器 1 的调节时序。
中微股份 CMS69P22 www.mcu.com.cn - 8 8 - 内部试用版
12.2.4 PPG 应用举例
12.2.4.1 用 PPG 模块做电磁炉检锅流程图 ①.清零同步计数; ②.设置PPG导通时间; ③.设置设置PPG工作模式为单次模式; ④.打开PPG模块; ⑤.等待几个毫秒; ⑥.读取同步计数器的值,以判断有没有锅; ★ 例:用PPG模块做电磁炉检锅 PAN_TEST: ;进入检锅程序 CLR IGBT_CON ;清零同步计数,关闭 PPG 模块 CLRB PPG_FLAG,0 ;设置 PPG 导通时间高位 LDIA 30H LD PPG_TMRL8,A ;设置 PPG 导通时间低位 LDIA 0EH LD IGBT_CON,A SETB IGBT_CON,0 ;使能 PPG 模块 CALL DELAY_2MS ;延时 2MS PAN_CHECK: LDIA 05H SUBA SYN_COUNTER ;根据同步次数判断有没有锅 SZB FLAGS,C JP PAN_NO LDIA 01H ;同步次数在 1-5 个之间认为有锅 SUBA SYN_COUNTER SNZB FLAGS,C JP PAN_NO PAN_HAVE: ;判断为有锅 JP XXXX PAN_NO: … ;判断为无锅 JP XXXX
中微股份 CMS69P22 www.mcu.com.cn - 8 9 - 内部试用版
12.2.4.2 PPG 模块故障判断流程图
①.设置过压、浪涌比较器的正端电压; ②.设置过压次数、浪涌时间; ③.打开故障中断; ④.使能PPG模块正常工作; ⑤.根据需要调节PPG导通时间; ⑥.等待故障中断; ⑦.判断哪个中断并做相应处理 ★ 例:PPG模块故障判断程序 GY_LY_SET: … ;过压、浪涌设置,每 20MS 进一次 LDIA 44H LD COMP_RES1,A ;设置过压、浪涌比较器正端电压 LDIA 1FH LD COMP_RES2,A ;设置启动比较器正端电压 CLR GY_LY ;过压、浪涌设置复位 LDIA 0B9H LD GY_LY,A ;设置过压次数、浪涌时间 INT_SET: … ;中断设置 LDIA 03H LD SYS_GEN,A ;中断、AD 总使能 LDIA 80H LD INT_EN,A ;IGBT 中断使能 INT_START: ;中断处理程序 PUSH: … ;保存 ACC 及 FLAGS SZB INT_FLAG,F_IGBT JP INT_IGBT ;判断是否 IGBT 中断 CLR INT_FLAG JP INT_BACK INT_IGBT: CLRB INT_FLAG,F_I GBT ;是 IGBT 故障中断,判断哪种故障 SZB PPG_FLAG,6 JP INT_GY INT_LY_WDT: … ;浪涌跟 IGBT WDT 故障 JP INT_BACK INT_GY: … ;过压故障 JP INT_BACK INT_BACK POP … RETI
中微股份 CMS69P22 www.mcu.com.cn - 9 0 - 内部试用版 12.3 运算放大器 12.3.1 运算放大器简介 CMS69P22 内置一运算放大器,其正端可以通过软件设置内部直接接地或者通过一个大约 1K 的下拉电阻接地,负 端通过芯片第 17 脚输入。运放输出端通过芯片第 16 脚输出,可通过程序设置是否内部接到 AN3。如图: 相关引脚说明 管脚名称 IO 类型 管脚说明 引脚 OPA_IN I 运放负端输入 PIN17 OPA_OUT O 运放输出 PIN16 AN3 I 运放可内部接至该 AD 口 PIN12
中微股份 CMS69P22 www.mcu.com.cn - 9 1 - 内部试用版 12.3.2 跟运放相关寄存器 有 2 个寄存器跟运放相关,分别是 OPAC(08H),COMP_RES2(0FH)。 08H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 OPAC LV_EN OPOUT OPOFM OPARS OPOF R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 -- 0 0 0 1 0 0 0 BIT7 滤波选择 0:内部滤波无效 1:内部滤波有效 BIT6 调节模式下结果输出(只读) BIT5 运放的工作模式: 0:正常工作模式 1:调节模式 BIT4 调节模式输入选择: 0:负端输入 1:正端输入 BIT0-BIT3 运放失调电压调节 0EH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 COMP_RES2 OPAAD OPACTL -- 过压比较器正端电压选择(启动过压) R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7 运放输出是否内部接 AN3 0:内部不接 AN3 1:内部通过 10K 电阻接到 AN3 BIT6 运放正端选择 0:运放正端接 1K 的下拉电阻 1:运放正端直接接 GND BIT5 未用 BIT0-BIT4 比较器 3 正端电压选择(VDD 为芯片电压) 00000-11111:0.125VDD-0.4VDD
中微股份 CMS69P22 www.mcu.com.cn - 9 2 - 内部试用版 12.3.3 运放失调电压 运放失调电压调节流程: ①.设置 OPOFM 为调节模式并给调节位赋值“0000”或“1111”; ②.记录 OPOUT 的输出结果; ③.改变 OPOF,直至 OPOUT 输出发生改变; ④.设置 OPOFM 为正常工作模式。 例:运放失调电压调节程序: OPA_INIT: LDIA B’01101111’ ;设置运放进入调节模式 LD OPAC,A ;调节位设成最高的时候输出为“0” OPA_LOOP: CALL DELAY ;延时几十个微秒 SZB OPAC,7 ;判断调节输出位是否为“1” JP OPA_OK ;为 1 则调节完成 DECR OPAC ;为 0 则使调节位减 1 LDIA 0FH ANDA OPAC SZB FLAGS,Z ;判断调节位是否减到 0 JP OPA_ERR ;调节位减到 0 还没有输出 1,调节故障 JP OPA_LOOP OPA_OK: LDIA 0FH ;完成调节,进入正常工作模式 ANDR OPAC SETB OPAC,6 ;使能内部滤波选择 JP XXXX 一般情况下,当 OPAC 调节位设置成最高的时候,调节输出为“0”,设置成最低的时候,调节输出为“1”, 刚好“0”跟“1”变化的值就是它的失调电压设定值。如果发生像上面程序里面的调节故障,则可能为程序 延时不够或者硬件错误造成的。
中微股份 CMS69P22 www.mcu.com.cn - 9 3 - 内部试用版 13. 8 位 PWM(PWM0) 13.1 8 位 PWM 概述 PWM8 由如下功能组成: ◆ 选择时钟频率 ◆ 8-bit 计数器(PWM8CON),6-bit 比较器,6-bit 数据存储器(PWM6DATA),和 6-bit 数据缓冲器。 ◆ 2-bit 扩展逻辑,2-bit 扩展寄存器和数据缓冲器。 ◆ 两种模式选择6+2/7+1 CMS69P22 的 8 位脉冲宽度调制器有两种工作模式,由 PWM8CON.3 位控制,PWM8CON.3=1 选择“7+1”模 式,PWM8CON.3=0 选择“6+2”模式。PWM8CON.2=1 为 6 位溢出时加载,即改变 PWM8 的数据存储器后会在下 一个波形输出时改变占空比,PWM8CON.2=0 时为 8 位溢出时加载,即改变 PWM8 的数据存储器后会在下一个 周期时改变占空比(也就是说当选择“6+2”模式时,PWM8 将为 4 个波形一个周期,此时不论你在哪一个波 形输出时改变 PWM8 的数据存储器都将在下一个周期才生效)。 所谓“6+2”模式就是指 PWM8DATA 的高 6 位(PWMDATA,7~2)用于控制 PWM8 的调制周期及在调试周期 内占空比,低 2 位(PWMDATA,1~0)用于控制扩展周期。 所谓“7+1”模式就是指 PWM8DATA 的高 7 位(PWMDATA,7~1)用于控制 PWM8 的调制周期及在调试周期 内占空比,低 1(PWMDATA,0)位用于控制扩展周期。 ◆ 8 位 PWM 框图 P0.6 Fosc P0CH,5~4 PWM8CON,3 PWM8CON,3 /64 M U X 分 频 器 PWM8CON,5~4 计数器 PWM8CON,0 比较器 缓冲器 7BIT 寄存器 6BIT 寄存器 1BIT 寄存器 2BIT 寄存器 扩展逻辑 PWM8_EN 计数器溢出 计数器
中微股份 CMS69P22 www.mcu.com.cn - 9 4 - 内部试用版 13.2 与 8 位 PWM 相关寄存器 有两个寄存器与PWM8有关,PWM8DATA(数据存储器)、PWM8CON(控制寄存器)。 1CH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PWM8DATA R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 1DH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PWM8CON CLO占空比选择 PWM8时钟选择 模式选择 加载选择 - PWM8_EN R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT5~BIT4 PWM8 时钟选择 00: PWM8 时钟为 Fosc/64 01: PWM8 时钟为 Fosc/8 10: PWM8 时钟为 Fosc/2 11: PWM8 时钟为 Fosc/1 BIT3 模式选择位 0:“6+2”模式 1:“7+1”模式 BIT2 加载选择位 0:数据缓冲在 8 位溢出时加载 1:数据缓冲在 6 位溢出时加载 BIT0 PWM8_EN:PWM8 使能 0:停止 1:工作
中微股份 CMS69P22 www.mcu.com.cn - 9 5 - 内部试用版 13.3 8 位 PWM 的周期 13.3.1 8 位 PWM 调制周期 8 位 PWM 调制周期由系统主频(Fosc)、PWM8 分频比、PWM8 模式决定,计算公式如下: PWM8 调制周期 =2 N ×PWM8 分频比÷FOSC 注:N=6 或者 7 由 PWM8 模式决定 ★ 例:Fosc=4MHz、分频比 1:2、“6+2”模式,时 PWM 调制周期 PWM8 调制周期 =2 N ×PWM8 分频比÷FOSC ×2÷4×10 =32×10 S =32μS ★ 例:Fosc=4MHz 时 PWM8 的调制周期表 PWM8CON BIT5、BIT4 PWM8 时钟 Fosc=4MHz “6+2”模式 “7+1”模式
00 Fosc /64 1024μS 2048μS
01 Fosc /8 128μS 256μS
10 Fosc /2 32μS 64μS
11 Fosc /1 16μS 32μS
13.3.2 8 位 PWM 输出周期 8 位 PWM 输出周期由 PWM8 模式确定,当选择“6+2”模式时,4 个调制周期为一个输出周期,当选择“7+1” 模式时 2 个调制周期为一个输出周期。 13.4 8 位 PWM 占空比算法 8 位 PWM 输出的占空比与 PWM8DATA 的数值相关,不同的模式 PWM 占空比算法不同,我们不妨把 PWM8DATA 的值分为两个部分: 一个为基本输出周期控制部分(DC),当选择“6+2”模式为 PWM8DATA 的高六位即 PWM8DATA,7~2;当选 择“7+1”模式为 PWM8DATA 的高 7 位即 PWM8DATA,7~1。 一个为额外输出周期控制部分(AC), 当选择“6+2”模式为 PWM8DATA 的低 2 位即 PWM8DATA,1~0;当 选择“7+1”模式为 PWM8DATA的最低位即 PWM8DATA,0。 那么 PWM8 的占空比就可用以下公式计算 PWM8 的占空比 = (PWM8 输出周期+PWM8 额外周期)÷PWM8 调制周期
中微股份 CMS69P22 www.mcu.com.cn - 9 6 - 内部试用版 参数 PWM8DTAT,1~0 AC(0~3) 占空比 调制周期数 I I﹤AC (DC+1)/64 (I=0~3) I≧AC DC/64 参数 PWM8DTAT,0 AC(0~1) 占空比 调制周期数 I I﹤AC (DC+1)/128 (I=0~1) I≧AC DC/128 ★ “6+2”模式下 PWM8 占空比输出 P W M 8 C L K 64 个 PWMCLK P W M 8 D A T A 0 0 0 0 0 1 0 0 B P W M 8 D A T A 0 0 0 0 0 1 0 1 B P W M 8 D A T A 0 0 0 0 0 1 1 0 B P W M 8 D A T A 0 0 0 0 0 1 1 1 B
中微股份 CMS69P22 www.mcu.com.cn - 9 7 - 内部试用版 ★“7+1”模式下 PWM8 占空比输出时序图 P W M 8 C L K 1 2 8 W M C L K P W M 8 D A T A 0 0 0 0 0 0 1 0 B P W M 8 D A T A 0 0 0 0 0 0 1 1 B 13.5 8 位 PWM 应用 PWM8 的应用设置需的操作流程如下: 43, 设置 PWM8 工作模式及时钟 44, 设置 PWM8DATA 45, P0,6 设置为 PWM8 输出口 46, PWM8 开始工作 ★ 例:PWM8 的设置程序 LDIA B’XX110000’ LD PWM8CON,A ;F PWM=FOSC、”6+2”模式 LDIA B’10000001’ LD PWM8DATA,A ;设置 PWM8 占空比 LDIA B’XXXX01XX’ LD P0CH,A ;P0,5 设置为 PWM 输出口 SETB PWM8CON,0 ;开启 PWM8
中微股份 CMS69P22 www.mcu.com.cn - 9 8 - 内部试用版 14. 10 位 PWM(PWM1) 14.1 10 位 PWM 概述 PWM10 由如下功能组成: ◆ 选择时钟频率 ◆ 10-bit 计数器(PWM10CON),8-bit 比较器,8-bit 数据存储器(PWM10DATA),和 8-bit 数据缓冲器。 ◆ 2-bit 扩展逻辑,2-bit 扩展寄存器和数据缓冲器。 ◆ 控制寄存器(PWM10CON) 计数器的高八位和 PWM10 数据存储器相比较(PWM10DATA)来确定 PWM10 的工作频率。为了更高的精度, 计数器的低 2 位可被用来调解“extended”周期。 ◆ PWM10 结构框图 当计数器的低 8 位和相关的数据寄存器(PWM10DATA)匹配时,PWM 输出低电平。如果 PWM10DATA 寄存器 的值不是 0,计数器的低 8-BITS 溢出将使 PWM 输出高电平。这样的话,写进相关寄存器的值就决定了模块 的基本工作周期。 计数器的高 2-BITS 值和 2-BITS 扩展数据寄存器(PWM10CON.7-6)的扩展设置比较。计数器值的低 2-BITS 被用来扩展 PWM 的输出工作周期。扩展值是一个在特殊周期的额外时钟周期(如下表)。 PWM10CON.7-6 扩展周期
00 None
10 1,2 11 1,2,3 P0,7 Fosc P0CH,7~6 /64 M U X 分 频 器 PWM10CON,5~4 计数器 PWM10CON,0 比较器 缓冲器 8BIT 寄存器 扩展 寄存器 扩展逻辑 PWM10_EN 计数器溢出 计数器
中微股份 CMS69P22 www.mcu.com.cn - 9 9 - 内部试用版 14.2 与 10 位 PWM 相关寄存器 有两个寄存器与PWM10有关,PWM10DATA(数据存储器)、PWM10CON(控制寄存器) 1EH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PWM10DATA R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 1FH BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PWM10CON 扩展周期选择 PWM10时钟选 择 未用 加载选择 - PWM10_EN R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7~BIT6 扩展周期选择 00: 无扩展周期 01: 扩展周期为 1 10: 扩展周期为 1、2 11: 扩展周期为 1、2、3 BIT5~BIT4 PWM10 时钟选择 00: PWM10 时钟为 Fosc/64 01: PWM10 时钟为 Fosc/8 10: PWM10 时钟为 Fosc/2 11: PWM10 时钟为 Fosc/1 BIT2 加载选择位 0:数据缓冲在 10 位溢出时加载 1:数据缓冲在 8 位溢出时加载 BIT0 PWM10_EN:PWM10 使能 0:停止 1:工作
中微股份 CMS69P22 www.mcu.com.cn - 1 0 0 - 内部试用版 14.3 10 位 PWM 调制周期 14.3.1 10 位 PWM 调制周期 10 位 PWM 调制周期由系统主频(Fosc)、PWM10 分频比,计算公式如下: PWM10 调制周期 =2 ×PWM10 分频比÷FOSC ★ 例:Fosc=4MHz、分频比 1:1、时 PWM 调制周期 PWM10 调制周期 =2 ×PWM10 分频比÷FOSC ×1÷4×10 =64×10 S =64μS ★ 例:Fosc=4MHz 时 PWM10 的调制周期表 PWM10CON BIT5、BIT4 PWM10 时钟 Fosc=4MHz
00 Fosc /64 4096μS
01 Fosc /8 256μS
10 Fosc /2 128μS
11 Fosc /1 64μS
14.3.2 10 位 PWM 输出周期 4 个调制周期为一个输出周期。 14.4 10 位 PWM 占空比算法 10 位 PWM 输出的占空比与 PWM10DATA(DC)及 PWM10CON,7~6(AC)的数值相关。 那么 PWM10 的占空比就可用以下公式计算 PWM10 的占空比 = (PWM10 输出周期+PWM10 额外周期)÷256 ★ 例: PWM10,占空比算法 参数 PWM10CON,7~6 AC(0~ 3) 占空比 调制周期数 I I﹤AC (DC+1)/256 (I=0~3) I≧AC DC/256
中微股份 CMS69P22 www.mcu.com.cn - 1 0 1 - 内部试用版 ◆ PWM10 占空比输出 P W M 1 0 C L K 256PWMCLK P W M 1 0 D A T A 0 0 0 0 0 0 0 1 B A C = 0 0 P W M 1 0 D A T A 0 0 0 0 0 0 0 1 B A C = 0 1 PWM10DATA 00000001B A C = 1 0 PWM10DATA 00000001B A C = 1 1 14.5 10 位 PWM 应用 PWM10 的应用设置需的操作流程如下: 47, 设置 PWM10 工作模式及时钟 48, 设置 PWM10DATA 49, P0,7 设置为 PWM10 输出口 50, PWM10 开始工作 ★ 例:PWM10 的设置程序 LDIA B’00110000’ LD PWM10CON,A ;F PWM=FOSC、”8+2”模式 LDIA B’10000001’ LD PWM10DATA,A ;设置 PWM10 占空比 LDIA B’XXXXXX01’ LD P0CH,A ;P0.4 设置为 PWM 输出口 SETB PWM10CON,0 ;开启 PWM10
中微股份 CMS69P22 www.mcu.com.cn - 1 0 2 - 内部试用版 15. 蜂鸣器输出(BUZZER)
15.1 BUZZER 概述
CMS69P22 的蜂鸣驱动器由 6-BIT 计数器,时钟驱动器,控制寄存器组成。它产生 50%的占空方波,其频 率覆盖一个较宽的范围。BUZZER 的输出频率有 BUZCON 寄存器的值控制。 ◆ BUZZER 结构框图 设置 P1,1 的控制寄存器,即将 P1CL 的 B3,B2 设为 01,可使蜂鸣输出功能处于使能状态,当蜂鸣输出使能时, 6-BIT 计数器被清零,PC,1 输出状态为 0,开始往上计数。如果计数器值和周期数据(BUZCON.5-0)相符,则 PC.1 输出状态被固定,计数器被清零。另外,6-BIT 计数器溢出也可使计数器清零,BZCON.5-0 决定输出频率。 BUZZER 输出时序图 B U Z D A T A 匹配 B U Z Z E R 计数器 BUZZER 数据改变 B U Z Z E R 缓冲器 B U Z Z E R 输 出 Fosc 6BIT 比较器 /16 /32 /64 分 频 器 M U X BUZCON,7~6 BUZCON,5~0 BUZZER DATA 缓冲器 BUZZER 计数器 P1CL,3~2 T Q R P1.1 BUZZER DISABLE BUZZER ENABLE
中微股份 CMS69P22 www.mcu.com.cn - 1 0 3 - 内部试用版 15.2 与 BUZZER 相关的寄存器 21H BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 BUZCON 时钟选择 BUZDATA R/W R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 0 0 0 0 0 BIT7~BIT6 时钟选择 00: BUZZER 时钟为 Fosc/8 01: BUZZER 时钟为 Fosc/16 10: BUZZER 时钟为 Fosc/32 11: BUZZER 时钟为 Fosc/64 BIT5~BIT0 BUZDATA:BUZ 输出周期数据
15.3 BUZZER 输出频率
15.3.1 BUZZER 输出频率计算方法
BUZZER 输出频率 =Fosc÷ [2×分频比×(BUZDATA+1)] ★ 例:Fosc=4MHz BUZD ATA=4 ,BUZZER 时钟为 Fosc/8,时 BUZZER 的输出频率 BUZZER 输出频率 =Fosc÷ [2×分频比×(BUZDATA+1)] =4×10 ÷[2×8×(4+1)] =5×10 =50KHz
15.3.2 BUZZER 输出频率表
BIT7、BIT6 BUZZER 计数时钟 Fosc=4MHz BUZZER 最小输出频率 BUZZER 最大输出频率 00 Fosc /8 3.91KHZ 250KHz 01 Fosc /16 1.95KHz 125KHz 10 Fosc /32 0.98KHz 62.5KHz 11 Fosc /64 0.49KHz 32.75KHz
15.4 BUZZER 应用
BUZZER 应用设置的操作流程如下: 51, 设置 BUZZER 频率 52, P1,1 设置为 BUZZER 输出口 ★ 例:BUZZER 的设置程序 LDIA B’00000001’ LD BUZCON,A ; 设置频率 LDIA B’01XXXXXX’ LD P0CL,A ; 将 P0.3 口置成蜂鸣器口 CALL DELY_TIME ;蜂鸣器口输出时间 LDIA B’01XXXXXX’ LD P0CL,A ;将 P0.3 口置成普通输出口以关闭蜂鸣器
中微股份 CMS69P22 www.mcu.com.cn - 1 0 4 - 内部试用版 16. 电气参数
16.1 DC 特性
16.2 AC 特性
符 号 参 数 测试条件 最 小 典 型 最 大 单 位VDD 条件 VDD 工作电压 - Fsys=8M(RC) 3.5 - 5.8 V - Fsys=4M(RC) 2.1 - 5.8 V - Fsys=8M(XT) 2.5 - 5.8 V - Fsys=4M(XT) 2.2 - 5.8 V - Fsys=INTRC 2.5 - 5.8 V Idd 工作电流 5V ADC 使能 - 3 - mA 3V ADC 使能 - 2 - mA Istb 静态电流 5V ---- 200 2000 uA 3V ---- 10 - 40 uA Vil 低电平输入电压 - ---- - - 0.3VDD V Vih 高电平输入电压 - ---- - - 0.7VDD V Voh 高电平输出电压 - 不带负载 0.9VDD - - V VoL 低电平输出电压 - 不带负载 - - 0.1VDD V VADI AD 口输入电压 - ---- 0 - VDD V VAD AD 模块工作电压 - ---- 2.7 - 5.8 V EAD AD 转换误差 - ---- - ±2 - - Rph 上拉电阻阻值 5V ---- - 35 - K 3V ---- - 65 - K Rpl 下拉电阻阻值 5V ---- - 45 - K 3V ---- - 100 - K 比较器精度 - ---- - 5 - mV VCOMPER 比较器工作电压 - ---- 0 - VDD-1 V IoL 输入口灌电流 5V VOl=0.3VDD - 60 - mA 3V VOl=0.3VDD - 25 - mA IoH 输入口拉电流 5V VOH=0.7VDD - 15 - mA 3V VOH=0.7VDD - 10 - mA 符 号 参 数 测试条件 最 小 典 型 最 大 单 位 VDD 条件 Fsys1 工作频率(RC) - --- 455 - 8000 KHZ - 2.2V-5.8V 455 - 4000 KHZ Fsys2 工作频率(XT) - --- 455 - 8000 KHZ - 2.8V-5.8V 455 - 4000 KHZ TWDT WDT 复位时间 5V --- - 24 - MS 3V --- - 52 - MS TAD AD 转换时间 5V --- - 80 - CLK 3V --- - 80 - CLK
中微股份 CMS69P22 www.mcu.com.cn - 1 0 5 - 内部试用版 16.3 外部 RC 振荡特性 16.3.1 外部 RC 参数 测试条件 VDD=5V 振荡频率(MHZ) 2.4K+22P 8M 3.9K+22P 6M 6.8K+22P 4M 15K+22P 2M 30K+22P 1M 16.3.2 外部 RC 电压特性 测试条件 振荡频率(MHZ) 2.0V 2.7M 2.2V 3.2M 2.4V 3.7M 2.6V 4.0M 2.8V 4.3M 3.0V 4.3M 3.2V 4.4M 3.4V 4.4M 3.6V 4.3M 3.8V 4.3M 4.0V 4.2M 4.2V 4.2M 4.4V 4.1M 4.6V 4.1M 4.8V 4.0M 5.0V 4.0M 5.2V 4.0M 5.4V 3.9M 5.6V 3.8M 5.8V 3.8M
中微股份 CMS69P22 www.mcu.com.cn - 1 0 6 - 内部试用版 16.4 内部 RC 振荡特性 16.4.1 内部 RC 振荡电压特性 测试条件 振荡频率(MHZ) 2.5V 8M 2.6V 8M 2.8V 8M 3.0V 8M 3.2V 8M 3.4V 8M 3.6V 8M 3.8V 8M 4.0V 8M 4.2V 8M 4.4V 8M 4.6V 8M 4.8V 8M 5.0V 8M 5.2V 8M 5.4V 8M 5.6V 8M 5.8V 8M 16.4.2 内部 RC 振荡温度特性 测试条件 -20℃ 25℃ 40℃ 60℃ 85℃ 振荡频率 8.1M 8M 8M 7.9M 7.8M
中微股份 CMS69P22 www.mcu.com.cn - 1 0 7 - 内部试用版 17. 指令 17.1 指令一览表 助记符 操 作 指令周期 标 志 控制类-4 NOP 空操作 1 None OPTION 装载 OPTION 寄存器 1 None STOP 进入休眠模式 1 TO,PD CLRWDT 清零看门狗计数器 1 TO,PD 数据传送-4 LD [R],A 将 ACC 内容传送到 R 1 NONE LD A,[R] 将 R 内容传送到 ACC 1 Z TESTZ R 将数据存储器内容传给数据存储器 1 Z LDIA i 立即数 I 送给 ACC 1 NONE 逻辑运算-16 CLRA 清零 ACC 1 Z SET [R] 置位数据存储器 R 1 NONE CLR [R] 清零数据存储器 R 1 Z ORA [R] R 与 ACC 内容做“或”运算,结果存入 ACC 1 Z ORR [R] R 与 ACC 内容做“或”运算,结果存入 R 1 Z ANDA [R] R 与 ACC 内容做“与”运算,结果存入 ACC 1 Z ANDR [R] R 与 ACC 内容做“与”运算,结果存入 R 1 Z XORA [R] R 与 ACC 内容做“异或”运算,结果存入 ACC 1 Z XORR [R] R 与 ACC 内容做“异或”运算,结果存入 R 1 Z SWAPA [R] R 寄存器内容的高低半字节转换,结果存入 ACC 1 NONE SWAPR [R] R 寄存器内容的高低半字节转换,结果存入 R 1 NONE COMA [R] R 寄存器内容取反,结果存入 ACC 1 Z COMR [R] R 寄存器内容取反,结果存入 R 1 Z XORIA i ACC 与立即数 I 做“异或”运算,结果存入 ACC 1 Z ANDIA i ACC 与立即数 I 做“与”运算,结果存入 ACC 1 Z ORIA i ACC 与立即数 I 做“或”运算,结果存入 ACC 1 Z 移位操作,8 RRCA [R] 数据存储器带进位右移一位,结果存入 ACC 1 C RRCR [R] 数据存储器带进位右移一位,结果存入 R 1 C RLCA [R] 数据存储器带进位左移一位,结果存入 ACC 1 C RLCR [R] 据存储器带进位数左移一位,结果存入 R 1 C RLA [R] 数据存储器不带进位左移一位,结果存入 ACC 1 NONE RLR [R] 数据存储器不带进位左移一位,结果存入 R 1 NONE RRA [R] 数据存储器不带进位右移一位,结果存入 ACC 1 NONE RRR [R] 数据存储器不带进位右移一位,结果存入 R 1 NONE 递增递减,4 INCA [R] 递增数据存储器 R,结果放入 ACC 1 Z INCR [R] 递增数据存储器 R,结果放入 R 1 Z DECA [R] 递减数据存储器 R,结果放入 ACC 1 Z DECR [R] 递减数据存储器 R,结果放入 R 1 Z
中微股份 CMS69P22 www.mcu.com.cn - 1 0 8 - 内部试用版 位操作,2 CLRB [R],b 将数据存储器 R 中某位清零 1 NONE SETB [R],b 将数据存储器 R 中某位置一 1 NONE 查表,2 TABLE [R] 读取 ROM 内容结果放入 TA BLE_DATAH 与 R 2 NONE TABLEA 读取 ROM 内容结果放入 TABL E_DATAH 与 ACC 2 NONE 数学运算,16 ADDA [R] ACC+[R]→ACC 1 C,DC,Z,OV ADDR [R] ACC+[R]→R 1 C,DC,Z,OV ADDCA [R] ACC+[R]+C→ACC 1 Z,C,DC,OV ADDCR [R] ACC+[R]+C→R 1 Z,C,DC,OV ADDIA i ACC+I→R 1 Z,C,DC,OV SUBA [R] [R]-ACC→ACC 1 C,DC,Z,OV SUBR [R] [R]-ACC→R 1 C,DC,Z,OV SUBCA [R] [R]-ACC-C→ACC 1 Z,C,DC,OV SUBCR [R] [R]-ACC-C→R 1 Z,C,DC,OV SUBIA i I-ACC→ACC 1 Z,C,DC,OV HSUBA [R] ACC-[R]→ACC 1 Z,C,DC,OV HSUBR [R] ACC-[R]-C→ACC 1 Z,C,DC,OV HSUBCA [R] ACC-[R]- C →ACC 1 Z,C,DC,OV HSUBCR [R] ACC-[R]- C →R 1 Z,C,DC,OV HSUBIA I ACC-I→ACC 1 Z,C,DC,OV DAA [R] 将加法运算中放入 ACC 的值调整为 10 进制数,并将结果 存入 R 1 C 无条件转移,5 RET 从子程序返回 2 NONE RET i 从子程序返回,并将立即数 I 存入 ACC 2 NONE RETI 从中断返回 2 NONE CALL ADDRESS 子程序调用 2 NONE JP ADDRESS 无条件跳转 2 NONE 条件转移,8 SZB [R],b 如果数据存储器 R 的 b 位为“0” ,则跳过下一条指令 1 or 2 NONE SNZB [R],b 如果数据存储器 R 的 b 位为“1”,则跳过下一条指令 1 or 2 NONE SZA [R] 数据存储器 R 送至 ACC,若内容为”0”, 则跳过下一条 指令 1 or 2 NONE SZR [R] 数据存储器 R 内容为”0”, 则跳过下一条指令 1 or 2 NONE SZINCA [R] 数据存储器 R 加 “1”,结果放入 ACC,若结果为”0”, 则 跳过下一条指令 1 or 2 NONE SZINCR[R] 数据存储器 R 加“1”,若结果为”0”, 则跳过下一条指 令 1 or 2 NONE SZDECA [R] 数据存储器 R 减 “1”,结果放入 ACC,若结果为”0”, 则 跳过下一条指令 1 or 2 NONE SZDECR [R] 数据存储器 R 减“1”,若结果为”0”, 则跳过下一条指 令 1 or 2 NONE
中微股份 CMS69P22 www.mcu.com.cn - 1 0 9 - 内部试用版 17.2 指令说明 ADDA [R] 指令说明: 操作: R 加 ACC,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 09H LD R0,A LDIA 077H ADDA R0 ADDCA [R] 指令说明: 操作: R 加 ACC 加 C 位,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 09H LD R0,A LDIA 077H ADDCA R0 ADDCR [R] 指令说明: 操作: R 加 ACC 加 C 位,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 09H LD R0,A LDIA 077H ADDCR R0 ADDIA i 指令说明: 操作: 立即数加 ACC,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 09H ADDIA 077H ADDR [R] 指令说明: 操作: R 加 ACC,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 09H
中微股份 CMS69P22 www.mcu.com.cn - 1 1 0 - 内部试用版 LD R0,A LDIA 077H ADDR R0 ANDA [R] 指令说明: 操作: R 与 ACC 进行逻辑与运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: LDIA 0FH ANDA R0 ANDIA i 指令说明: 操作: 立即数与 ACC 进行逻辑与运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: LDIA 0AH XORIA 0F0H ;结果为 ACC=00H ANDR [R] 指令说明: 操作: R 与 ACC 进行逻辑与运算,结果放入[R] 周期: 1 影响标志位:Z 举例: LDIA 0FH ANDR R0 ; R0 的高 4 位为 0 CALL add 指令说明: 操作: 调用子程序 周期: 2 影响标志位:无 举例: C A L L L O O P LOOP: . . . . R E T CLRA 指令说明: 操作: ACC=00H 周期: 1 影响标志位:Z 举例: CLRA
中微股份 CMS69P22 www.mcu.com.cn - 1 1 1 - 内部试用版 CLR [R] 指令说明: 操作: R=00H 周期: 1 影响标志位:Z 举例: C L R R 0 CLRB [R],b 指令说明: 操作: 清零[R]的第 x 位 周期: 1 影响标志位:无 举例: S E T R 0 CLRB R0,3 ;R0=0F7H CLRWDT 指令说明: 操作: 清零 WDT 周期: 1 影响标志位:TO,PD 举例: CLRWDT COMA [R] 指令说明: 操作: [R]取反,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 A H L D R 0 , A SWAPA R0 ;ACC=0F5H COMR [R] 指令说明: 操作: [R]取反,结果放入[R] 周期: 1 影响标志位:Z 举例: L D I A 0 A H L D R 0 , A SWAPR R0 ;R0=0F5H
中微股份 CMS69P22 www.mcu.com.cn - 1 1 2 - 内部试用版 DAA [R] 指令说明: 操作: 十进制调整,必须是 2 个十进制数的数相加结果放入 ACC 周期: 1 影响标志位:C 举例: LDIA 077H L D R 0 , A LDIA 080H D A A R 0 DECA [R] 指令说明: 操作: R 减 1,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 1 H L D R 0 , A DECA R0 ;R0=01H,ACC=00H,Z=1 DECR [R] 指令说明: 操作: R 减 1,结果放入[R] 周期: 1 影响标志位:Z 举例: L D I A 0 1 H L D R 0 , A DECR R0 ;R0=00H,Z=1 HSUBA [R] 指令说明: 操作: ACC 减 R,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 077H L D R 0 , A LDIA 080H HSUBA R0 HSUBR [R] 指令说明: 操作: ACC 减 R,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 077H
中微股份 CMS69P22 www.mcu.com.cn - 1 1 3 - 内部试用版 L D R 0 , A LDIA 080H HSUBR R0 HSUBCA [R] 指令说明: 操作: ACC 减 R 减 C 位,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 077H L D R 0 , A LDIA 080H HSUBCA R0 HSUBCR [R] 指令说明: 操作: ACC 减 R 减 C 位,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 077H L D R 0 , A LDIA 080H HSUBCR R0 INCA [R] 指令说明: 操作: R 加 1,结果放入 ACC 周期: 1 影响标志位:Z 举例: LDIA 0FFH L D R 0 , A INCA R0 ;R0=0FFH,ACC=00H,Z=1 INCR [R] 指令说明: 操作: R 加 1,结果放入[R] 周期: 1 影响标志位:Z 举例: LDIA 0FFH L D R 0 , A INCR R0 ;R0=00H,Z=1 JP add 指令说明: 操作: 跳转到 add 地址 周期: 2
中微股份 CMS69P22 www.mcu.com.cn - 1 1 4 - 内部试用版 影响标志位:无 举例: J P L O O P LOOP: . . . . LD A,[R] 指令说明: 操作: [R]A 周期: 1 影响标志位:Z 举例: LD A,R0 ;R0=0,则 Z=1 LD R1,A LD [R],A 指令说明: 操作: A[R] 周期: 1 影响标志位:无 举例: L D I A 0 5 H L D R 0 , A LDIA i 指令说明: 操作: 立即数[R] 周期: 1 影响标志位:无 举例: LDIA 0F0H NOP 指令说明: 操作: 空操作 周期: 1 影响标志位:无 举例: NOP NOP OPTION 指令说明: 操作: 写预分频器 周期: 1 影响标志位:无 举例: LDIA 00H OPTION ;预分频器给 TMR0 用,分频比为 1:2
中微股份 CMS69P22 www.mcu.com.cn - 1 1 5 - 内部试用版 ORIA i 操作: 立即数与 ACC 进行逻辑或运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 A H XORIA 0F0H ;ACC=0FAH ORA [R] 指令说明: 操作: R 与 ACC 进行逻辑或运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 F H O R A R 0 ORR [R] 指令说明: 操作: R 与 ACC 进行逻辑或运算,结果放入[R] 周期: 1 影响标志位:Z 举例: LDIA 0FFH ORR R0 ;R0=0FFH RET 指令说明: 操作: 从子程序中返回 周期: 2 影响标志位:无 举例: LOOP: . . . . R E T ; 返 回 到 调用此子程序处 RETI 指令说明: 操作: 中断返回 周期: 2 影响标志位:无 举例: LOOP: . . . . R E T I ; 返 回到进入中断子程序处 RET i 指令说明: 操作: 子程序返回,立即数放入 ACC
中微股份 CMS69P22 www.mcu.com.cn - 1 1 6 - 内部试用版 周期: 2 影响标志位:无 举例: LOOP: R E T 0 5 H ; 返回到调用子程序处 RLCA [R] 指令说明: 操作: [R]带 C 位左移一位,结果放入 ACC 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RLCA R0 ;ACC=15H RLCR [R] 指令说明: 操作: [R]带 C 位左移一位,结果放入[R] 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RLCA R0 ;R0=15H RLA [R] 指令说明: 操作: [R]左移一位,结果放入 ACC 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RLA R0 ;ACC=14H RLR [R] 指令说明: 操作: [R]左移一位,结果放入[R] 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RLR R0 ;R0=14H
中微股份 CMS69P22 www.mcu.com.cn - 1 1 7 - 内部试用版 RRCA [R] 指令说明: 操作: [R]带 C 位右移一位,结果放入 ACC 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RRCA R0 ;ACC=85H RRCR [R] 指令说明: 操作: [R]带 C 位右移一位,结果放入[R] 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RRCR R0 ;R0=85H RRA [R] 指令说明: 操作: [R]右移一位,结果放入 ACC 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RRA R0 ;ACC=05H RRR [R] 指令说明: 操作: [R]右移一位,结果放入[R] 周期: 1 影响标志位:C 举例: SETB FLAGS,C L D I A 0 A H L D R 0 , A RRR R0 ;R0=05H SET [R] 指令说明: 操作: R=0FFH
中微股份 CMS69P22 www.mcu.com.cn - 1 1 8 - 内部试用版 周期: 1 影响标志位:无 举例: S E T R 0 SETB [R],b 指令说明: 操作: 置 1[R]的第 x 位 周期: 1 影响标志位:无 举例: C L R R 0 SETB R0,3 ;R0=08H STOP 指令说明: 操作: 进入休眠状态 周期: 1 影响标志位:TO,PD 举例: STOP SUBIA i 指令说明: 操作: 立即数 i 减 ACC,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 077H SUBIA 080H SUBA [R] 指令说明: 操作: R 减 ACC,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 080H L D R 0 , A LDIA 077H S U B A R 0 SUBR [R] 指令说明: 操作: R 减 ACC,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 080H L D R 0 , A
中微股份 CMS69P22 www.mcu.com.cn - 1 1 9 - 内部试用版 LDIA 077H S U B R R 0 SUBCA [R] 指令说明: 操作: R 减 ACC 减 C 位,结果放入 ACC 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 080H L D R 0 , A LDIA 077H SUBCA R0 SUBCR [R] 指令说明: 操作: R 减 ACC 减 C 位,结果放入[R] 周期: 1 影响标志位:C,DC,Z,OV 举例: LDIA 080H L D R 0 , A LDIA 077H SUBCR R0 SWAPA [R] 指令说明: 操作: [R]高低 4 位交换,结果放入 ACC 周期: 1 影响标志位:无 举例: L D I A 0 F H L D R 0 , A SWAPA R0 ;ACC=0F0H SWAPR [R] 指令说明: 操作: [R]高低 4 位交换,结果放入[R] 周期: 1 影响标志位:无 举例: L D I A 0 F H L D R 0 , A SWAPR R0 ;R0=0F0H SZB [R],B 指令说明: 操作: [R]的第 x 位为 0 间跳,否则顺序执行 周期: 1 or 2 影响标志位:无 举例:
中微股份 CMS69P22 www.mcu.com.cn - 1 2 0 - 内部试用版 LDIA 080H L D R 0 , A S Z B R 0 , 3 J P L O O P . . . . LOOP: . . SNZB [R],B 指令说明: 操作: [R]的第 x 位为 1 间跳,否则顺序执行 周期: 1 or 2 影响标志位:无 举例: L D I A 0 8 0 H L D R 0 , A S N Z B R 0 , 7 J P L O O P . . . . LOOP: . . SZA [R] 指令说明: 操作: [R]为 0 间跳,否则顺序执行 周期: 1 or 2 影响标志位:无 举例: L D I A 0 8 0 H L D R 0 , A S Z A R 0 J P L O O P . . . . LOOP: . . SZR [R] 指令说明: 操作: [R]为 0 间跳,否则顺序执行 周期: 1 or 2 影响标志位:无 举例: L D I A 0 8 0 H L D R 0 , A S Z R R 0
中微股份 CMS69P22 www.mcu.com.cn - 1 2 1 - 内部试用版 JP LOOP . . . . LOOP: . . SZINCA [R] 指令说明: 操作: 1、R 加 1 结果放入 ACC 2、如果 ACC=00H,跳过下一条语句,否则顺序执行。 周期:1 or 2 影响标志位:无 举例: LOOP: SZINCA R0 ;R0+1 ACC JP LOOP1 ;ACC≠0,跳转到 LOOP1 C O N T I N U E : … ; A C C = 0 , 退 出循环, LOOP1: . . . . SZINCR [R] 指令说明: 操作: 1、R 加 1 结果放入[R] 2、如果[R]=00H,跳过下一条语句,否则顺序执行。 周期:1 or 2 影响标志位:无 举例: LOOP: SZINCR TIME ;R0+1 R0 JP LOOP ;R0≠0,继续递减 C O N T I N U E : … ; R 0 = 0 , 退 出 循环, SZDECA [R] 指令说明: 操作: 1、R 减 1 结果放入 ACC 2、如果 ACC=00H,跳过下一条语句,否则顺序执行。 周期:1 or 2 影响标志位:无 举例: LOOP: SZDECA R0 ;R0-1 ACC JP LOOP1 ;ACC≠0,跳转到 LOOP1 C O N T I N U E : … ; A C C = 0 , 退 出循环, LOOP1: . . . . SZDECR [R] 指令说明: 操作: 1、R 减 1 结果放入[R] 2、如果[R]=00H,跳过下一条语句,否则顺序执行。
中微股份 CMS69P22 www.mcu.com.cn - 1 2 2 - 内部试用版 周期:1 or 2 影响标志位:无 举例: LOOP: SZDECR TIME ;R0-1—>R0 JP LOOP ;R0≠0,继续递减 C O N T I N U E : … ; R 0 = 0 , 退 出 循环, TABLE [R] 指令说明: 操作: 查表指令,查表后数据的低 8 位放入[R] 周期: 2 影响标志位:无 举例: L D I A 0 1 H LD TABLE_SPH,A LDIA 015H LD TABLE_SPL,A T A B L E R 0 ; R 0 = 3 4 H LD A,TABLE_DATAH L D R 1 ; R 1 = 1 2 H . . . . ORG 0115H DW 1234H TABLEA 指令说明: 操作: 查表指令,查表后数据的低 8 位放入 ACC 周期: 2 影响标志位:无 举例: L D I A 0 1 H LD TABLE_SPH,A LDIA 015H LD TABLE_SPL,A T A B L E A ; A C C = 3 4 H L D R 0 , A LD A,TABLE_DATAH LD R1 ;R1=12H . . . . ORG 0115H DW 1234H TESTZ R 指令说明: 操作: R[R] 周期: 1 影响标志位:Z 举例: C L R R 0
中微股份 CMS69P22 www.mcu.com.cn - 1 2 3 - 内部试用版 TESTZ R0 ;R0=0,则 Z=1 XORIA i 指令说明: 操作: 立即数与 ACC 进行逻辑异或运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 A H XORIA 0FH ;ACC=05H XORA [R] 指令说明: 操作: R 与 ACC 进行逻辑异或运算,结果放入 ACC 周期: 1 影响标志位:Z 举例: L D I A 0 F H X O R A R 0 XORR [R] 指令说明: 操作: R 与 ACC 进行逻辑异或运算,结果放入[R] 周期: 1 影响标志位:Z 举例: L D I A 0 F H X O R R R 0 ; R 0 的 低 4 位 取 反