0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
CMS89F23A5B

CMS89F23A5B

  • 厂商:

    CMSEMICON(中微)

  • 封装:

    -

  • 描述:

    CMS89F23A5B

  • 数据手册
  • 价格&库存
CMS89F23A5B 数据手册
Cmsemicon CMS89F23x5B CMS89F23x5B 用户手册 增强型闪存 8 位 CMOS 单片机 V1.4 请注意以下有关CMS知识产权政策 *中微半导体公司已申请了专利,享有绝对的合法权益。与中微半导体公司MCU或其他产品有关的专利权并未 被同意授权使用,任何经由不当手段侵害中微半导体公司专利权的公司、组织或个人,中微半导体公司将采取 一切可能的法律行动,遏止侵权者不当的侵权行为,并追讨中微半导体公司因侵权行为所受的损失、或侵权者 所得的不法利益。 *中微的名称和标识都是中微半导体公司的注册商标。 *中微半导体公司保留对规格书中产品在可靠性、功能和设计方面的改进作进一步说明的权利。然而中微半导 体公司对于规格内容的使用不负责任。文中提到的应用其目的仅仅是用来做说明,中微半导体公司不保证和不 表示这些应用没有更深入的修改就能适用,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成 危害的地方。中微半导体公司产品不授权适用于救生、维生器件或系统中作为关键器件。中微半导体公司拥有 不事先通知而修改产品的权利,对于最新的信息,请参考我们的网站http://www.mcu.com.cn www.mcu.com.cn -1- V1.4 Cmsemicon CMS89F23x5B 目录 1. 产品概述 .............................................................................................................................. 1 1.1 功能特性 ........................................................................................................................................................................ 1 1.2 系统结构框图 ................................................................................................................................................................. 2 1.3 管脚分布 ........................................................................................................................................................................ 3 1.3.1 CMS89F2335B 引脚图 ...............................................................................................................................................3 1.3.2 CMS89F2365B 引脚图 ...............................................................................................................................................4 1.3.3 CMS89F2385B 引脚图 ...............................................................................................................................................5 1.3.4 CMS89F2385B1 引脚图 .............................................................................................................................................6 1.3.5 CMS89F23A5B 引脚图...............................................................................................................................................7 1.4 系统配置寄存器 ............................................................................................................................................................. 8 1.5 在线串行编程 ................................................................................................................................................................. 9 2. 中央处理器(CPU) .......................................................................................................... 10 2.1 内存 ............................................................................................................................................................................. 10 2.1.1 程序内存 ...................................................................................................................................................................10 2.1.2 数据存储器 ...............................................................................................................................................................15 2.2 寻址方式 ...................................................................................................................................................................... 20 2.2.1 直接寻址 ...................................................................................................................................................................20 2.2.2 立即寻址 ...................................................................................................................................................................20 2.2.3 间接寻址 ...................................................................................................................................................................20 2.3 堆栈 ............................................................................................................................................................................. 21 2.4 工作寄存器(ACC) .................................................................................................................................................... 22 2.4.1 概述 ..........................................................................................................................................................................22 2.4.2 ACC 应用 .................................................................................................................................................................22 2.5 程序状态寄存器(STATUS) ...................................................................................................................................... 23 2.6 预分频器(OPTION_REG)........................................................................................................................................ 25 2.7 程序计数器(PC) ...................................................................................................................................................... 27 2.8 看门狗计数器(WDT) ............................................................................................................................................... 28 2.8.1 WDT 周期 .................................................................................................................................................................28 2.8.2 看门狗定时器控制寄存器 WDTCON .........................................................................................................................28 3. 系统时钟 ............................................................................................................................ 29 3.1 概述 ............................................................................................................................................................................. 29 3.2 系统振荡器 .................................................................................................................................................................. 30 3.2.1 内部 RC 振荡 ............................................................................................................................................................30 3.2.2 外部 XT 振荡 ............................................................................................................................................................30 3.3 起振时间 ...................................................................................................................................................................... 30 3.4 振荡器控制寄存器........................................................................................................................................................ 31 4. 复位 ................................................................................................................................... 32 4.1 上电复位 ...................................................................................................................................................................... 32 4.2 掉电复位 ...................................................................................................................................................................... 33 www.mcu.com.cn -2- V1.4 Cmsemicon CMS89F23x5B 4.2.1 概述 ..........................................................................................................................................................................33 4.2.2 掉电复位的改进办法 .................................................................................................................................................34 4.3 看门狗复位 .................................................................................................................................................................. 34 5. 休眠模式 ............................................................................................................................ 35 5.1 进入休眠模式 ............................................................................................................................................................... 35 5.2 从休眠状态唤醒 ........................................................................................................................................................... 35 5.3 使用中断唤醒 ............................................................................................................................................................... 35 5.4 休眠模式应用举例........................................................................................................................................................ 36 5.5 休眠模式唤醒时间........................................................................................................................................................ 36 6. I/O 端口 ............................................................................................................................. 37 6.1 I/O 口结构图 ................................................................................................................................................................ 38 6.2 PORTA ........................................................................................................................................................................ 40 6.2.1 PORTA 数据及方向控制 ...........................................................................................................................................40 6.2.2 PORTA 上拉电阻......................................................................................................................................................41 6.2.3 6.3 PORTA 下拉电阻......................................................................................................................................................41 PORTB ........................................................................................................................................................................ 42 6.3.1 PORTB 数据及方向 ..................................................................................................................................................42 6.3.2 PORTB 上拉电阻......................................................................................................................................................43 6.3.3 PORTB 下拉电阻......................................................................................................................................................43 6.3.4 PORTB 电平变化中断 ..............................................................................................................................................44 6.4 PORTC ........................................................................................................................................................................ 45 6.4.1 PORTC 数据及方向 ..................................................................................................................................................45 6.4.2 PORTC 上拉电阻 .....................................................................................................................................................46 6.4.3 PORTC 下拉电阻 .....................................................................................................................................................46 6.5 PORTD ........................................................................................................................................................................ 47 6.5.1 PORTD 数据及方向 ..................................................................................................................................................47 6.5.2 PORTD 上拉电阻 .....................................................................................................................................................48 6.5.3 6.6 PORTD 下拉电阻 .....................................................................................................................................................48 I/O 使用 ....................................................................................................................................................................... 49 6.6.1 写 I/O 口 ...................................................................................................................................................................49 6.6.2 读 I/O 口 ...................................................................................................................................................................49 6.7 I/O 口使用注意事项...................................................................................................................................................... 50 7. 中断 ................................................................................................................................... 51 7.1 中断概述 ...................................................................................................................................................................... 51 7.2 中断控制寄存器 ........................................................................................................................................................... 52 7.2.1 中断控制寄存器 ........................................................................................................................................................52 7.2.2 外设中断允许寄存器 .................................................................................................................................................53 7.2.3 外设中断请求寄存器 .................................................................................................................................................54 7.3 中断现场的保护方法 .................................................................................................................................................... 55 7.4 中断的优先级,及多中断嵌套 ...................................................................................................................................... 55 www.mcu.com.cn -3- V1.4 Cmsemicon CMS89F23x5B 8. 定时计数器 TIMER0 ........................................................................................................... 56 8.1 定时计数器 TIMER0 概述 ............................................................................................................................................ 56 8.2 TIMER0 的工作原理 .................................................................................................................................................... 57 8.2.1 8 位定时器模式 .........................................................................................................................................................57 8.2.2 8 位计数器模式 .........................................................................................................................................................57 8.2.3 软件可编程预分频器 .................................................................................................................................................57 8.2.4 在 TIMER0 和 WDT 模块间切换预分频器 .................................................................................................................57 8.2.5 TIMER0 中断 ............................................................................................................................................................58 8.3 与 TIMER0 相关寄存器 ................................................................................................................................................ 59 9. 定时计数器 TIMER1 ........................................................................................................... 60 9.1 TIMER1 概述 ............................................................................................................................................................... 60 9.2 TIMER1 的工作原理 .................................................................................................................................................... 61 9.3 时钟源选择 .................................................................................................................................................................. 61 9.3.1 内部时钟源 ...............................................................................................................................................................61 9.3.2 外部时钟源 ...............................................................................................................................................................62 9.4 TIMER1 预分频器 ........................................................................................................................................................ 63 9.5 TIMER1 振荡器 ........................................................................................................................................................... 63 9.6 在异步计数器模式下的 TIMER1 工作原理 ................................................................................................................... 63 9.6.1 异步计数器模式下对 TIMER1 的读写操作 ................................................................................................................63 9.7 TIMER1 门控 ............................................................................................................................................................... 64 9.8 TIMER1 中断 ............................................................................................................................................................... 64 9.9 休眠期间的 TIMER1 工作原理 ..................................................................................................................................... 64 9.10 TIMER1 控制寄存器 .................................................................................................................................................... 65 10. 定时计数器 TIMER2 ........................................................................................................... 66 10.1 TIMER2 概述 ............................................................................................................................................................... 66 10.2 TIMER2 的工作原理 .................................................................................................................................................... 67 10.3 TIMER2 相关的寄存器 ................................................................................................................................................. 68 11. 模数转换(ADC) ............................................................................................................. 69 11.1 ADC 概述..................................................................................................................................................................... 69 11.2 ADC 配置..................................................................................................................................................................... 70 11.2.1 端口配置 ...................................................................................................................................................................70 11.2.2 通道选择 ...................................................................................................................................................................70 11.2.3 ADC 参考电压 ..........................................................................................................................................................70 11.2.4 转换时钟 ...................................................................................................................................................................70 11.2.5 ADC 中断 .................................................................................................................................................................71 11.2.6 结果格式化 ...............................................................................................................................................................71 11.3 ADC 工作原理 ............................................................................................................................................................. 72 11.3.1 启动转换 ...................................................................................................................................................................72 11.3.2 完成转换 ...................................................................................................................................................................72 11.3.3 终止转换 ...................................................................................................................................................................72 11.3.4 ADC 在休眠模式下的工作原理 .................................................................................................................................72 www.mcu.com.cn -4- V1.4 Cmsemicon CMS89F23x5B 11.3.5 A/D 转换步骤 ............................................................................................................................................................73 11.4 ADC 相关寄存器 .......................................................................................................................................................... 74 12. LCD/LED 驱动模块 ............................................................................................................ 77 12.1 LCD/LED 功能使能 ...................................................................................................................................................... 77 12.2 LCD/LED 功能管脚设置 ............................................................................................................................................... 77 12.3 LED 功能 COM 口设置 ................................................................................................................................................ 78 12.4 LED 功能的 SEG 口设置.............................................................................................................................................. 78 12.5 LED 功能的数据设置 ................................................................................................................................................... 78 12.6 LCD/LED 相关寄存器 .................................................................................................................................................. 80 13. PWM 模块(PWM0 和 PWM1) ........................................................................................ 84 13.1 PWM 寄存器 ................................................................................................................................................................ 84 13.2 PWM 模式 ................................................................................................................................................................... 85 13.2.1 PWM 周期 ................................................................................................................................................................86 13.2.2 PWM 占空比 .............................................................................................................................................................86 13.2.3 PWM 分辨率 .............................................................................................................................................................87 13.2.4 休眠模式下的操作 ....................................................................................................................................................87 13.2.5 系统时钟频率的改变 .................................................................................................................................................87 13.2.6 复位的影响 ...............................................................................................................................................................87 13.2.7 设置 PWM 操作 ........................................................................................................................................................87 14. 通用同步/异步收发器(USART0 和 USART1) ................................................................. 88 14.1 USARTX 异步模式 ....................................................................................................................................................... 90 14.1.1 USARTx 异步发生器 ................................................................................................................................................90 14.1.2 USARTx 异步接收器 ................................................................................................................................................93 14.2 异步操作时的时钟准确度 ............................................................................................................................................. 96 14.3 USARTX 波特率发生器(BRG) ................................................................................................................................. 99 14.4 USARTX 同步模式 ..................................................................................................................................................... 101 14.4.1 同步主控模式..........................................................................................................................................................101 14.4.2 同步从动模式..........................................................................................................................................................105 15. 数据 EEPROM 存储器和程序存储器控制 ......................................................................... 106 15.1 概述 ........................................................................................................................................................................... 106 15.2 相关寄存器 ................................................................................................................................................................ 107 15.2.1 EEADR 和 EEADRH 寄存器 ...................................................................................................................................107 15.2.2 EECON1 和 EECON2 寄存器 .................................................................................................................................107 15.3 读数据 EEPROM 存储器 ........................................................................................................................................... 109 15.4 写数据 EEPROM 存储器 ........................................................................................................................................... 110 15.5 读程序存储器 ............................................................................................................................................................. 111 15.6 数据 EEPROM 操作注意事项 .................................................................................................................................... 112 15.6.1 写校验 ....................................................................................................................................................................112 15.6.2 避免误写的保护 ......................................................................................................................................................112 www.mcu.com.cn -5- V1.4 Cmsemicon CMS89F23x5B 16. 电气参数 .......................................................................................................................... 113 16.1 极限参数 .................................................................................................................................................................... 113 16.2 直流电气特性 ............................................................................................................................................................. 114 16.3 ADC 电气特性 ........................................................................................................................................................... 115 16.4 上电复位特性 ............................................................................................................................................................. 115 16.5 交流电气特性 ............................................................................................................................................................. 116 17. 指令 ................................................................................................................................. 117 17.1 指令一览表 ................................................................................................................................................................ 117 17.2 指令说明 .................................................................................................................................................................... 119 18. 封装 ................................................................................................................................. 135 18.1 SOP16 ....................................................................................................................................................................... 135 18.2 SOP20 ....................................................................................................................................................................... 136 18.3 SOP28 ....................................................................................................................................................................... 137 18.4 LQFP32 ..................................................................................................................................................................... 138 19. 版本修订说明 ................................................................................................................... 139 www.mcu.com.cn -6- V1.4 Cmsemicon CMS89F23x5B 1. 产品概述 1.1 功能特性 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ 内存 Flash: 8Kx16 通用 RAM:344x8 ◆ 工作电压范围: 3.0V~5.5V@8MHz 2.5V~5.5V@4MHz ◆ 8 级堆栈缓存器 简洁实用的指令系统(68 条指令) 查表功能 内置 WDT 定时器 内置低压侦测电路 中断源 3 个定时中断 RB 口电平变化中断 其它外设中断 定时器 8 位定时器 TIMER0,TIMER2 16 位定时器 TIMER1 PWM 模块 10 位 PWM 精度 ◆ 工作温度范围:-40℃~85℃ 多种振荡方式 内部 RC 振荡:设计频率 8MHz 外部 XT 振荡:最高 8MHz 指令周期(单指令或双指令) 内置 LED 驱动模块 最多可支持 16 段 8 位或 8 段 16 位 COM 口有大电流驱动能力,可达 120mA SEG 口电流可灵活配置为 2~30mA 内置 LCD1/2 Bias COM 驱动模块 所有 I/O 口都可作为 1/2 Bias COM 输出 COM 口驱动电流可选 内置两路 USART 通信模块 支持同步主从模式和异步全双工模式 USART1 可配置在 RA0/RA1 或 RC4/RC5 或 RD1/RD2 内置 64 字节数据 EEPROM 可重复擦写 100 万次 高精度 12 位 ADC 内建高精度 0.6V/1.2V 基准电压 - ◆ ◆ ◆ ◆ 2 路输出,可配置在 RC2/RC3 或 RB2/RB3 或 RB4/RB3 口 2 路 PWM 共用周期(与 TIMER2 相关),独立占空比 ◆ ◆ ±1.5% @VDD=2.5V~5.5V TA=25℃ ±2% @VDD=2.5V~5.5V TA=-40℃~85℃ 型号说明 PRODUCT Flash RAM Data EE I/O LED LCD ADC USART PACKAGE CMS89F2335B 8Kx16 344x8 64x8 14 ---- 1/2Bias 12Bitx14 2 SOP16 CMS89F2365B 8Kx16 344x8 64x8 18 1/2Bias 12Bitx18 2 SOP20 CMS89F2385B 8Kx16 344x8 64x8 26 1/2Bias 12Bitx26 2 SOP28 CMS89F2385B1 8Kx16 344x8 64x8 26 1/2Bias 12Bitx26 2 SOP28 CMS89F23A5B 8Kx16 344x8 64x8 30 8SEGx8COM 8SEGx12COM 14SEGx6COM 8SEGx12COM 14SEGx6COM 16SEGx8COM 8SEGx16COM 1/2Bias 12Bitx30 2 LQFP32 注:Flash----程序存储器 www.mcu.com.cn Data EE----数据EEPROM -1- V1.4 Cmsemicon 1.2 CMS89F23x5B 系统结构框图 8192×16 Program Memory AD Converter 344×8 Data Memory PC TIMER0 Stack1 TIMER1 .. TIMER2 Addr Mux Stack8 I/O PORT Fsr Reg Instruction Reg PWM0/PWM1 LCD/LED Instruction Decode and Control ACC Mux Device Reset Timer USART0 USART1 Power-on Reset EEPROM ALU Timing Generation Watch Dog Timer OSC VDD,GND www.mcu.com.cn -2- V1.4 Cmsemicon 1.3 CMS89F23x5B 管脚分布 1.3.1 CMS89F2335B 引脚图 GND 1 16 VDD INT/[TX1/CK1]/AN20/RC4 2 15 RC1/AN17/[RX0/DT0]/[TX0/CK0]/ICSPDAT [RX1/DT1]/AN21/RC5 3 14 RC0/AN16/[TX0/CK0]/[RX0/DT0]/ICSPCLK [TX1/CK1]/AN0/RA0 4 13 RB4/AN12/[PWM0] [RX1/DT1]/AN1/RA1 5 12 RB3/AN11/[PWM1] AN2/RA2 6 11 RB2/AN10/[PWM0] T1CKI/OSCOUT/AN6/RA6 7 10 RB1/AN9 OSCIN/AN7/RA7 8 9 RB0/AN8 CMS89F2335B CMS89F2335B 引脚说明: 管脚名称 IO 类型 管脚说明 VDD,GND P 电源电压输入脚,接地脚 OSCIN/OSCOUT P 晶振输入/输出引脚 RA0-RA2,RA6,RA7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RB0-RB4 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能、电平变化中断功能 RC0,RC1,RC4,RC5 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 ICSPCLK/ICSPDAT AN0-AN2,AN6-AN12, AN16,AN17,AN20,AN21AN29 T1CKI I/O 编程时钟/数据脚 I 12 位 ADC 输入脚 I TIMER1 外部时钟输入脚 INT I 外部中断输入 PWM0 I/O PWM0 输出,可配置在不同 I/O 口 PWM1 I/O PWM1 输出,可配置在不同 I/O 口 TX0/CK0 I/O USART0 异步发送/同步时钟口,可配置在不同 I/O 口 RX0/DT0 I/O USART0 异步接收/同步数据口,可配置在不同 I/O 口 TX1/CK1 I/O USART1 异步发送/同步时钟口,可配置在不同 I/O 口 RX1/DT1 I/O USART1 异步接收/同步数据口,可配置在不同 I/O 口 www.mcu.com.cn -3- V1.4 Cmsemicon CMS89F23x5B 1.3.2 CMS89F2365B 引脚图 GND 1 20 VDD ICSPCLK/[RX0/DT0]/[TX0/CK0]/AN16/RC0 2 19 RB7/AN15/COM7 ICSPDAT/[TX0/CK0]/[RX0/DT0]/AN17/RC1 3 18 RB6/AN14/COM6 [TX1/CK1]/SEG0/AN0/RA0 4 17 RB5/AN13/COM5/T1G [RX1/DT1]/SEG1/AN1/RA1 5 16 RB4/AN12/COM4/[PWM0] SEG2/AN2/RA2 6 15 RB3/AN11/COM3/[PWM1] SEG3/AN3/RA3 7 14 RB2/AN10/COM2/[PWM0] T0CKI/SEG4/AN4/RA4 8 13 RB1/AN9/COM1 T1CKI/OSCOUT/SEG6/AN6/RA6 9 12 RB0/AN8/COM0 10 11 RA5/AN5/SEG5 OSCIN/SEG7/AN7/RA7 CMS89F2365B CMS89F2365B 引脚说明: 管脚名称 IO 类型 管脚说明 VDD,GND P 电源电压输入脚,接地脚 OSCIN/OSCOUT P 晶振输入/输出引脚 RA0-RA7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RB0-RB7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能、电平变化中断功能 RC0-RC1 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 ICSPCLK/ICSPDAT I/O 编程时钟/数据脚 AN0-AN17 I 12 位 ADC 输入脚 SEG0-SEG7 O LED 驱动段输出 COM0-COM7 O LED 驱动公共端 T0CKI I TIMER0 外部时钟输入脚 T1CKI I TIMER1 外部时钟输入脚 T1G I TIMER1 门控输入脚 PWM0 I/O PWM0 输出,可配置在不同 I/O 口 PWM1 I/O PWM1 输出,可配置在不同 I/O 口 TX0/CK0 I/O USART0 异步发送/同步时钟口,可配置在不同 I/O 口 RX0/DT0 I/O USART0 异步接收/同步数据口,可配置在不同 I/O 口 TX1/CK1 I/O USART1 异步发送/同步时钟口,可配置在不同 I/O 口 RX1/DT1 I/O USART1 异步接收/同步数据口,可配置在不同 I/O 口 www.mcu.com.cn -4- V1.4 Cmsemicon CMS89F23x5B 1.3.3 CMS89F2385B 引脚图 ICSPCLK/[RX0/DT0]/[TX0/CK0]/AN16/RC0 1 28 VDD ICSPDAT/[TX0/CK0]/[RX0/DT0]/AN17/RC1 2 27 GND [PWM0]/AN18/RC2 3 26 RB5/AN13/COM5/T1G [PWM1]/AN19/RC3 4 25 RB4/AN12/COM4/[PWM0] INT/[TX1/CK1]/AN20/RC4 5 24 RB3/AN11/COM3/[PWM1] [RX1/DT1]/AN21/RC5 6 23 RB2/AN10/COM2/[PWM0] [TX1/CK1]/SEG0/AN0/RA0 7 22 RB1/AN9/COM1 [RX1/DT1]/SEG1/AN1/RA1 8 21 RB0/AN8/COM0 SEG2/AN2/RA2 9 20 RD5/AN27/SEG13/COM13 SEG3/AN3/RA3 10 19 RD4/AN26/SEG12/COM12 T0CKI/SEG4/AN4/RA4 11 18 RD3/AN25/SEG11/COM11 SEG5/AN5/RA5 12 17 RD2/AN24/SEG10/COM10/[RX1/DT1] T1CKI/OSCOUT/SEG6/AN6/RA6 13 16 RD1/AN23/SEG9/COM9/[TX1/CK1] OSCIN/SEG7/AN7/RA7 14 15 RD0/AN22/SEG8/COM8 CMS89F2385B CMS89F2385B 引脚说明: 管脚名称 IO 类型 管脚说明 VDD,GND P 电源电压输入脚,接地脚 OSCIN/OSCOUT P 晶振输入/输出引脚 RA0-RA7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RB0-RB5 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能、电平变化中断功能 RC0-RC5 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RD0-RD5 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 ICSPCLK/ICSPDAT I/O 编程时钟/数据脚 AN0-AN13,AN16-AN27 I 12 位 ADC 输入脚 SEG0-SEG7 O LED 驱动段输出 COM0-COM5 COM8-COM13 SEG8-SEG13 T0CKI O LED 驱动公共端 O 可配置成 LED 驱动段输出或公共端 I TIMER0 外部时钟输入脚 T1CKI I TIMER1 外部时钟输入脚 T1G I TIMER1 门控输入脚 INT I 外部中断输入 PWM0 I/O PWM0 输出,可配置在不同 I/O 口 PWM1 I/O PWM1 输出,可配置在不同 I/O 口 TX0/CK0 I/O USART0 异步发送/同步时钟口,可配置在不同 I/O 口 RX0/DT0 I/O USART0 异步接收/同步数据口,可配置在不同 I/O 口 TX1/CK1 I/O USART1 异步发送/同步时钟口,可配置在不同 I/O 口 RX1/DT1 I/O USART1 异步接收/同步数据口,可配置在不同 I/O 口 www.mcu.com.cn -5- V1.4 Cmsemicon CMS89F23x5B 1.3.4 CMS89F2385B1 引脚图 T0CKI/SEG4/AN4/RA4 1 28 RA1/AN1/SEG1/RX1/DT1 SEG5/AN5/RA5 2 27 RA0/AN0/SEG0/TX1/CK1 T1CKI/OSCOUT/SEG6/AN6/RA6 3 26 RC4/AN20/TX1/CK1/INT OSCIN/SEG7/AN7/RA7 4 25 RC3/AN19/PWM1 COM8/SEG8/AN22/RD0 5 24 RC2/AN18/PWM0 TX1/CK1/COM9/SEG9/AN23/RD1 6 23 RC1/AN17/TX0/CK0/RX0/DT0/ICSPDAT RX1/DT1/COM10/SEG10/AN24/RD2 7 22 RC0/AN16/TX0/CK0/RX0/DT0/ICSPCLK COM11/SEG11/AN25/RD3 8 21 VDD COM12/SEG12/AN26/RD4 9 20 GND COM13/SEG13/AN27/RD5 10 19 RB6/AN14/COM6 COM14/SEG14/AN28/RD6 11 18 RB5/AN13/COM5/T1G COM15/SEG15/AN29/RD7 12 17 RB4/AN12/COM4/PWM0 COM0/AN8/RB0 13 16 RB3/AN11/COM3/PWM1 COM1/AN9/RB1 14 15 RB2/AN10/COM2/PWM0 CMS89F2385B1 CMS89F2385B1 引脚说明: 管脚名称 IO 类型 管脚说明 VDD,GND P 电源电压输入脚,接地脚 OSCIN/OSCOUT P 晶振输入/输出引脚 RA0,RA1,RA4-RA7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RB0-RB6 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能、电平变化中断功能 RC0-RC4 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RD0-RD7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 ICSPCLK/ICSPDAT AN0-AN1,AN4-AN14, AN16-AN20,AN22-AN29 SEG0-SEG1, SEG4-SEG7 COM0-COM6 COM8-COM15 SEG8-SEG15 T0CKI I/O 编程时钟/数据脚 I 12 位 ADC 输入脚 O LED 驱动段输出 O LED 驱动公共端 O 可配置成 LED 驱动段输出或公共端 I TIMER0 外部时钟输入脚 T1CKI I TIMER1 外部时钟输入脚 T1G I TIMER1 门控输入脚 INT I 外部中断输入 PWM0 I/O PWM0 输出,可配置在不同 I/O 口 PWM1 I/O PWM1 输出,可配置在不同 I/O 口 TX0/CK0 I/O USART0 异步发送/同步时钟口,可配置在不同 I/O 口 RX0/DT0 I/O USART0 异步接收/同步数据口,可配置在不同 I/O 口 TX1/CK1 I/O USART1 异步发送/同步时钟口,可配置在不同 I/O 口 RX1/DT1 I/O USART1 异步接收/同步数据口,可配置在不同 I/O 口 www.mcu.com.cn -6- V1.4 Cmsemicon CMS89F23x5B 32 31 30 29 28 27 26 25 RB7/AN15/COM7 RB6/AN14/COM6 RB5/AN13/COM5/T1G RB4/AN12/COM4/[PWM0] RB3/AN11/COM3/[PWM1] RB2/AN10/COM2/[PWM0] RB1/AN9/COM1 RB0/AN8/COM0 1.3.5 CMS89F23A5B 引脚图 1 2 3 4 5 6 7 8 CMS89F23A5B 24 23 22 21 20 19 18 17 RD7/AN29/SEG15/COM15 RD6/AN28/SEG14/COM14 RD5/AN27/SEG13/COM13 RD4/AN26/SEG12/COM12 RD3/AN25/SEG11/COM11 RD2/AN24/SEG10/COM10/[RX1/DT1] RD1/AN23/SEG9/COM9/[TX1/CK1] RD0/AN22/SEG8/COM8 [TX1/CK1]/SEG0/AN0/RA0 [RX1/DT1]/SEG1/AN1/RA1 SEG2/AN2/RA2 SEG3/AN3/RA3 T0CKI/SEG4/AN4/RA4 SEG5/AN5/RA5 T1CKI/OSCOUT/SEG6/AN6/RA6 OSCIN/SEG7/AN7/RA7 9 10 11 12 13 14 15 16 VDD GND ICSPCLK/[RX0/DT0]/[TX0/CK0]/AN16/RC0 ICSPDAT/[TX0/CK0]/[RX0/DT0]/AN17/RC1 [PWM0]/AN18/RC2 [PWM1]/AN19/RC3 INT/[TX1/CK1]/AN20/RC4 [RX1/DT1]/AN21/RC5 CMS89F23A5B 引脚说明: 管脚名称 IO 类型 管脚说明 VDD,GND P 电源电压输入脚,接地脚 OSCIN/OSCOUT P 晶振输入/输出引脚 RA0-RA7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RB0-RB7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能、电平变化中断功能 RC0-RC5 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 RD0-RD7 I/O 可编程为输入脚,推挽输出脚,带上拉、下拉电阻功能 ICSPCLK/ICSPDAT I/O 编程时钟/数据脚 AN0-AN29 I 12 位 ADC 输入脚 SEG0-SEG7 O LED 驱动段输出 COM0-COM7 COM8-COM13 SEG8-SEG13 T0CKI O LED 驱动公共端 O 可配置成 LED 驱动段输出或公共端 I TIMER0 外部时钟输入脚 T1CKI I TIMER1 外部时钟输入脚 T1G I TIMER1 门控输入脚 INT I 外部中断输入 PWM0 I/O PWM0 输出,可配置在不同 I/O 口 PWM1 I/O PWM1 输出,可配置在不同 I/O 口 TX0/CK0 I/O USART0 异步发送/同步时钟口,可配置在不同 I/O 口 RX0/DT0 I/O USART0 异步接收/同步数据口,可配置在不同 I/O 口 TX1/CK1 I/O USART1 异步发送/同步时钟口,可配置在不同 I/O 口 RX1/DT1 I/O USART1 异步接收/同步数据口,可配置在不同 I/O 口 www.mcu.com.cn -7- V1.4 Cmsemicon 1.4 CMS89F23x5B 系统配置寄存器 系统配置寄存器(CONFIG)是 MCU 初始条件的 FLASH 选项。它只能被 CMS 烧写器烧写,用户不能通 过程序访问及操作。它包含了以下内容: 1. 2. 3. 4. 5. 6. 7. 8. OSC(振荡方式选择) ◆ INTRC 内部 RC 振荡 ◆ XT 外部晶体振荡 WDT(看门狗选择) ◆ ENABLE 打开看门狗定时器 ◆ DISABLE 关闭看门狗定时器 PROTECT(加密) ◆ DISABLE Flash 代码不加密 ◆ ENABLE Flash 代码加密,加密后烧写/仿真器读出来的值将不确定 LVR_SEL(低压侦测电压选择) ◆ 2.5V ◆ 3.0V PWM0_SEL(当选择 RB 口为 PWM 输出时,PWM0 位置可通过此选项选择) ◆ RB4 选择 RB4 为 PWM0 输出口 ◆ RB2 选择 RB2 为 PWM0 输出口 USART0_SEL(TX/RX) (USART0 端口选择) ◆ RC0/RC1 选择 RC0 为 TX0 口,RC1 为 RX0 口 ◆ RC1/RC0 选择 RC1 为 TX0 口,RC0 为 RX0 口 USART1_SEL(TX/RX) (USART1 端口选择) ◆ RA0/RA1 选择 RA0 为 TX1 口,RA1 为 RX1 口 ◆ RC4/RC5 选择 RC4 为 TX1 口,RC5 为 RX1 口 ◆ RD1/RD2 选择 RD1 为 TX1 口,RD2 为 RX1 口 ICSPPORT_SEL(仿真口功能选择) ◆ ICSP ICSPCLK、DAT 口一直保持为仿真口,所有功能均不能使用 ◆ NORMAL ICSPCLK、DAT 口为普通功能口 www.mcu.com.cn -8- V1.4 Cmsemicon 1.5 CMS89F23x5B 在线串行编程 可在最终应用电路中对单片机进行串行编程。编程可以简单地通过以下 4 根线完成:  电源线  接地线  数据线  时钟线 这使用户可使用未编程的器件制造电路板,而仅在产品交付前才对单片机进行编程。从而可以将最新版本 的固件或者定制固件烧写到单片机中。 至正常连接(如接VDD、GND或者驱动LED、三极管等) R1 R2 仿真器/烧录器信号 CMS MCU VDD VDD GND GND DAT ICSPDAT CLK ICSPCLK 图 1-1:典型的在线串行编程连接方法 上图中,R1、R2 为电气隔离器件,常以电阻代替,其阻值如下:R1≥4.7K、R2≥4.7K。 www.mcu.com.cn -9- V1.4 Cmsemicon CMS89F23x5B 2. 中央处理器(CPU) 2.1 内存 2.1.1 程序内存 CMS89F23x5B 程序存储器空间 FLASH:8K 0000H 复位向量 程序开始,跳转至用户程序 中断向量 中断入口,用户中断程序 0001H 0002H 0003H 0004H ... 用户程序区 ... ... 1FFDH 1FFEH 1FFFH 2.1.1.1 跳转至复位向量0000H 程序结束 复位向量(0000H) 单片机具有一个字长的系统复位向量(0000H)。具有以下 3 种复位方式:  上电复位  看门狗复位  低压复位(LVR) 发生上述任一种复位后, 程序将从 0000H 处重新开始执行,系统寄存器也都将恢复为默认值。根据 STATUS 寄存器中的 PD 和 TO 标志位的内容可以判断系统复位方式。下面一段程序演示了如何定义 FLASH 中的复位 向量。 例:定义复位向量 ORG 0000H JP START ORG 0010H ;系统复位向量 ;用户程序起始 START: „ ;用户程序 „ END www.mcu.com.cn ;程序结束 -10- V1.4 Cmsemicon 2.1.1.2 CMS89F23x5B 中断向量 中断向量地址为 0004H。一旦有中断响应,程序计数器 PC 的当前值就会存入堆栈缓存器并跳转到 0004H 开始执行中断服务程序。所有中断都会进入 0004H 这个中断向量,具体执行哪个中断将由用户根据中 断请求标志位寄存器的位决定。下面的示例程序说明了如何编写中断服务程序。 例:定义中断向量,中断程序放在用户程序之后 ORG 0000H JP START ;系统复位向量 ORG 0004H ;用户程序起始 CALL PUSH ;保存 ACC 跟 STATUS INT_START: „ ;用户中断程序 „ INT_BACK: CALL ;返回 ACC 跟 STATUS POP RETI ;中断返回 „ ;用户程序 START: „ END ;程序结束 注:由于单片机并未提供专门的出栈、压栈指令,故用户需自己保护中断现场。 例:中断入口保护现场 PUSH: LD ACC_BAK,A ;保存 ACC 至自定义寄存器 ACC_BAK SWAPA STATUS ;状态寄存器 STATUS 高低半字节互换 LD STATUS_BAK,A ;保存至自定义寄存器 STATUS_BAK ;返回 RET 例:中断出口恢复现场 POP: SWAPA STATUS_BAK ;将保存至 STATUS_BAK 的数据高低半字节互换给 ACC LD STATUS,A ;将 ACC 的值给状态寄存器 STATUS SWAPR ACC_BAK ;将保存至 ACC_BAK 的数据高低半字节互换 SWAPA ACC_BAK ;将保存至 ACC_BAK 的数据高低半字节互换给 ACC RET www.mcu.com.cn ;返回 -11- V1.4 Cmsemicon 2.1.1.3 CMS89F23x5B 查表 芯片具有查表功能,FLASH 空间的任何地址都可做为查表使用。 相关指令:  TABLE [R] 把表格内容的低字节送给寄存器 R,高字节送到寄存器 TABLE_DATAH。  TABLEA 把表格内容的低字节送给累加器 ACC,高字节送到寄存器 TABLE_DATAH。 相关寄存器:  TABLE_SPH(110H) 可读写寄存器,用来指明表格高 5 位地址。  TABLE_SPL(111H) 可读写寄存器,用来指明表格低 8 位地址。  TABLE_DATAH(112H) 只读寄存器,存放表格高字节内容。 注:在查表之前要先把表格地址写入 TABLE_SPH 和 TABLE_SPL 中。如果主程序和中断服务程序都用 到查表指令,主程序中的 TABLE_SPH 的值可能会因为中断中执行的查表指令而发生变化,产生错 误。也就是说要避免在主程序和中断服务程序中都使用查表指令。但如果必须这样做的话,我们可 以在查表指令前先将中断禁止,在查表结束后再开放中断,以避免发生错误。 提供表格高 5 位地址给 TABLE_SPH 提供表格低 8 位地址给 TABLE_SPL 表格 13 位地址(TABLE_SPH+TABLE_SPL) 调表格指令(TABLEA 或 TABLE [R]) 高 8 位数据给 TABLE_DATAH 低 8 位数据给 ACC(TABLEA)或 R(TABLE [R]) 图2-1:表格调用的流程图 www.mcu.com.cn -12- V1.4 Cmsemicon CMS89F23x5B 下面例子给出了如何在程序中调用表格。 „ ;上接用户程序 LDIA 02H LD TABLE_SPL,A ;表格低位地址 LDIA 06H LD TABLE_SPH,A TABLE R01 ;表格指令,将表格低 8 位(56H)给自定义寄存器 R01 LD A,TABLE_DATAH ;将查表结果的高 8 位(34H)给累加器 ACC LD R02,A ;将 ACC 值(34H)给自定义寄存器 R02 ;表格高位地址 „ www.mcu.com.cn ;用户程序 ORG 0600H ;表格起始地址 DW 1234H ;0600H 地址表格内容 DW 2345H ;0601H 地址表格内容 DW 3456H ;0602H 地址表格内容 DW 0000H ;0603H 地址表格内容 -13- V1.4 Cmsemicon 2.1.1.4 CMS89F23x5B 跳转表 跳转表能够实现多地址跳转功能。由于 PCL 和 ACC 的值相加即可得到新的 PCL,因此,可以通过对 PCL 加上不同的 ACC 值来实现多地址跳转。ACC 值若为 n,PCL+ACC 即表示当前地址加 n,执行完当前指令后 PCL 值还会自加 1,可参考以下范例。如果 PCL+ACC 后发生溢出,PC 不会自动进位,故编写程序时应注意。 这样,用户就可以通过修改 ACC 的值轻松实现多地址的跳转。 PCLATH 为 PC 高位缓冲寄存器,对 PCL 操作时,必须先对 PCLATH 进行赋值。 例:正确的多地址跳转程序示例 FLASH 地址 LDIA 01H LD PCLATH,A ;必须对 PCLATH 进行赋值 … 0110H: ADDR PCL ;ACC+PCL 0111H: JP LOOP1 ;ACC=0,跳转至 LOOP1 0112H: JP LOOP2 ;ACC=1,跳转至 LOOP2 0113H: JP LOOP3 ;ACC=2,跳转至 LOOP3 0114H: JP LOOP4 ;ACC=3,跳转至 LOOP4 0115H: JP LOOP5 ;ACC=4,跳转至 LOOP5 0116H: JP LOOP6 ;ACC=5,跳转至 LOOP6 例:错误的多地址跳转程序示例 FLASH 地址 CLR PCLATH … 00FCH: ADDR PCL ;ACC+PCL 00FDH: JP LOOP1 ;ACC=0,跳转至 LOOP1 00FEH: JP LOOP2 ;ACC=1,跳转至 LOOP2 00FFH: JP LOOP3 ;ACC=2,跳转至 LOOP3 0100H: JP LOOP4 ;ACC=3,跳转至 0000H 地址 0101H: JP LOOP5 ;ACC=4,跳转至 0001H 地址 0102H: JP LOOP6 ;ACC=5,跳转至 0002H 地址 注:由于 PCL 溢出不会自动向高位进位,故在利用 PCL 作多地址跳转时,需要注意该段程序一定不能 放在 FLASH 空间的分页处。 www.mcu.com.cn -14- V1.4 Cmsemicon CMS89F23x5B 2.1.2 数据存储器 CMS89F23x5B 数据存储器列表 INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PCLATH INTCON PIR1 TMR1L TMR1H T1CON TMR2 T2CON BAUDCTL1 RCREG1 RCSTA1 RCSTA0 TXREG0 RCREG0 CCPR0L CCPR1L PWMCON ADRESH ADCON0 地址 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 1AH 1BH 1CH 1DH 1EH 1FH 20H OSCCON OSCTUNE PR2 WPUB IOCB TXSTA1 TXSTA0 SPBRG0 SPBRGH0 SPBRG1 SPBRGH1 TXREG1 ADRESL ADCON1 地址 80H 81H 82H 83H 84H 85H 86H 87H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 90H 91H 92H 93H 94H 95H 96H 97H 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH A0H 通用寄存器 80 字节 通用寄存器 96 字节 6FH 70H -7FH BANK0 INDF OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD WPDA PCLATH INTCON PIE1 快速存储区 70H-7FH INDF TMR0 PCL STATUS FSR WDTCON PORTB WPDB WPDC WPDD PCLATH INTCON EEDAT EEADR EEDATH EEADRH TABLE_SPH TABLE_SPL TABLE_DATAH LCDCON3 LCDCON 地址 100H 101H 102H 103H 104H 105H 106H 107H 108H 109H 10AH 10BH 10CH 10DH 10EH 10FH 110H 111H 112H 113H 114H 115H 116H 117H 118H 119H 11AH 11BH 11CH 11DH 11EH 11FH 120H 通用寄存器 80 字节 EFH F0H -FFH BANK1 快速存储区 70H-7FH BANK2 INDF OPTION_REG PCL STATUS FSR WPUD TRISB BAUDCTL0 PCLATH INTCON EECON1 EECON2 WPUA WPUC LCDCON0 LCDCON1 LEDADD LEDDATA SEGEN2 SEGEN1 SEGEN0 LCDCON2 通用寄存器 8 字节 地址 180H 181H 182H 183H 184H 185H 186H 187H 188H 189H 18AH 18BH 18CH 18DH 18EH 18FH 190H 191H 192H 193H 194H 195H 196H 197H 198H 199H 19AH 19BH 19CH 19DH 19EH 19FH 1A0H 通用寄存器 80 字节 16FH 170H -17FH 快速存储区 70H-7FH 1EFH 1F0H -1FFH BANK3 数据存储器由 512×8 位组成,分为两个功能区间:特殊功能寄存器和通用数据存储器。数据存储器单元 大多数是可读/写的,但有些只读的。特殊功能寄存器地址为从 00H-1FH,80-9FH,100-11FH,180-197H。 www.mcu.com.cn -15- V1.4 Cmsemicon CMS89F23x5B CMS89F23x5B 特殊功能寄存器汇总 Bank0 地址 名称 00H INDF 寻址该单元会使用FSR的内容寻址数据存储器(不是物理寄存器) xxxxxxxx 01H TMR0 TIMER0数据寄存器 xxxxxxxx 02H PCL 程序计数器低字节 00000000 03H STATUS 04H FSR 05H PORTA RA7 RA6 06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 07H PORTC ---- ---- RC5 RC4 RC3 RC2 08H PORTD RD7 RD6 RD5 RD4 RD3 RD2 0AH PCLATH ---- --- ---- 0BH INTCON GIE PEIE T0IE INTE RBIE 0CH PIR1 RC1IF TX1IF RC0IF TX0IF EEIF 0EH TMR1L 16位TIMER1寄存器低字节的数据寄存器 xxxxxxxx 0FH TMR1H 16位TIMER1寄存器高字节的数据寄存器 xxxxxxxx 10H T1CON 11H TMR2 12H T2CON ---- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -0000000 15H BAUDCTL1 ---- RCIDL1 ---- SCKP1 BRG16EN1 ---- ---- ---- 01-00-00 16H RCREG1 17H RCSTA1 SPEN1 RX9EN1 SREN1 CREN1 ---- FERR1 OERR1 RX9D1 00000000 18H RCSTA0 SPEN0 RX9EN0 SREN0 CREN0 ---- FERR0 OERR0 RX9D0 00000000 19H TXREG0 USART0发送数据寄存器 00000000 1AH RCREG0 USART0接收数据寄存器 00000000 1BH CCPR0L PWM0占空比高8位 xxxxxxxx 1CH CCPR1L PWM1占空比高8位 1DH PWMCON 1EH ADRESH 1FH ADCON0 www.mcu.com.cn Bit7 IRP Bit6 RP1 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RP0 TO PD Z DC C RA5 RA4 RA3 RA2 RA1 RA0 xxxxxxxx RB1 RB0 xxxxxxxx RC1 RC0 --xxxxxx RD1 RD0 xxxxxxxx T0IF INTF RBIF 00000000 ADIF TMR2IF TMR1IF 00000000 间接数据存储器地址指针 T1GINV TMR1GE T1CKPS1 程序计数器高5位的写缓冲器 T1CKPS0 T0OSCEN ---00000 T1SYNC TMR1CS TMR1ON 00000000 xxxxxxxx PWM0D ---- PWMSEL PWM1EN PWM0EN A/D结果寄存器的高字节 ADCS0 00000000 00000000 USART1接收数据寄存器 ADCS1 00011xxx xxxxxxxx TIMER2模块寄存器 PWM1D 复位值 0000-000 xxxxxxxx CHS3 CHS2 -16- CHS1 CHS0 GO/ DONE ADON 00000000 V1.4 Cmsemicon CMS89F23x5B CMS89F23x5B 特殊功能寄存器汇总 Bank1 地址 名称 80H INDF 81H OPTION_REG 82H PCL 83H STATUS 84H FSR 85H TRISA TRISA7 TRISA6 86H TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 87H TRISC ---- ---- TRISC5 TRISC4 TRISC3 TRISC2 88H TRISD TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 89H WPDA WPDA7 WPDA6 WPDA5 WPDA4 WPDA3 WPDA2 8AH PCLATH ---- ---- ---- 8BH INTCON 8CH PIE1 8FH OSCCON 90H OSCTUNE 92H PR2 95H WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 00000000 96H IOCB IOCB7 IOCB6 IOCB5 IOCB4 IOCB3 IOCB2 IOCB1 IOCB0 00000000 97H TXSTA1 CSRC1 TX9EN1 TXEN1 SYNC1 ---- BRGHEN1 TRMT1 TX9D1 00000010 98H TXSTA0 CSRC0 TX9EN0 TXEN0 SYNC0 ---- BRGHEN0 TRMT0 TX9D0 00000010 99H SPBRG0 USART0波特率低8位寄存器 00000000 9AH SPBRGH0 USART0波特率高8位寄存器 00000000 9BH SPBRG1 USART1波特率低8位寄存器 00000000 9CH SPBRGH1 USART1波特率高8位寄存器 00000000 9DH TXREG1 USART1发送数据寄存器 00000000 9EH ADRESL A/D结果寄存器的低字节 9FH ADCON1 www.mcu.com.cn Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 PS2 PS1 PS0 寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器) ---- INTEDG T0CS T0SE PSA xxxxxxxx 程序计数器(PC)的低字节 IRP RP1 复位值 -1111011 00000000 RP0 TO PD Z DC C TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 11111111 TRISB1 TRISB0 11111111 TRISC1 TRISC0 --111111 TRISD1 TRISD0 11111111 WPDA1 WPDA0 00000000 间接数据存储器地址指针 00011xxx xxxxxxxx 程序计数器高5位的写缓冲器 ---00000 GIE PEIE T01E INTE RBIE T0IF INTF RBIF 00000000 RC1IE TX1IE RC0IE TX0IE EEIE ADIE TMR2IE TMR1IE 00000000 ---- IRCF2 IRCF1 IRCF0 ---- ---- ---- SCS -110---0 ---- TUN6 TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 -0000000 TIMER2周期寄存器 ADFM CHS4 11111111 xxxxxxxx ---- ---- -17- ---- ---- ---- ---- 00------ V1.4 Cmsemicon CMS89F23x5B CMS89F23x5B 特殊功能寄存器汇总 Bank2 地址 名称 100H INDF 寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器) xxxxxxxx 101H TMR0 TIMER0模块寄存器 xxxxxxxx 102H PCL 程序计数器(PC)的低字节 00000000 103H STATUS 104H FSR 105H WDTCON 106H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxxxxxx 107H WPDB WPDB7 WPDB6 WPDB5 WPDB4 WPDB3 WPDB2 WPDB1 WPDB0 00000000 108H WPDC ---- ---- WPDC5 WPDC4 WPDC3 WPDC2 WPDC1 WPDC0 00000000 109H WPDD WPDD7 WPDD6 WPDD5 WPDD4 WPDD3 WPDD2 WPDD1 WPDD0 00000000 10AH PCLATH ---- ---- --- 10BH INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 00000000 10CH EEDAT EEDAT7 EEDAT6 EEDAT5 EEDAT4 EEDAT3 EEDAT2 EEDAT1 EEDAT0 xxxxxxxx 10DH EEADR EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 00000000 10EH EEDATH EEDATH7 EEDATH6 EEDATH5 EEDATH4 EEDATH3 EEDATH2 EEDATH1 EEDATH0 xxxxxxxx 10FH EEADRH ---- ---- ---- EEADRH4 EEADRH3 EEADRH2 EEADRH1 EEADRH0 ---00000 110H TABLE_SPH ---- ---- ---- 表格高5位指针 111H TABLE_SPL 表格低位指针 xxxxxxxx 112H TABLE_DATAH 表格高位数据 xxxxxxxx 113H LCDCON3 COM29EN COM28EN COM27EN COM26EN COM25EN COM24EN COM23EN COM22EN 00000000 114H LCDCON LCDEN LEDEN ---- ---- LCDCLK3 LCDCLK2 LCDCLK1 LCDCLK0 00000000 www.mcu.com.cn Bit7 IRP Bit6 RP1 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RP0 TO PD Z DC C ---- ---- ---- ---- ---- SWDTEN 间接数据存储器地址指针 ---- ---- 复位值 00011xxx xxxxxxxx 程序计数器高5位的写缓冲器 -18- -------0 ---00000 ---xxxxx V1.4 Cmsemicon CMS89F23x5B CMS89F23x5B 特殊功能寄存器汇总 Bank3 地址 名称 180H INDF 181H OPTION_REG 182H PCL 183H STATUS 184H FSR 185H WPUD WPUD7 186H TRISB 187H BAUDCTL0 18AH PCLATH ---- ---- ---- 18BH INTCON GIE PEIE T01E INTE 18CH EECON1 EEPGD ---- ---- 18DH EECON2 18EH WPUA WPUA7 WPUA6 18FH WPUC ---- Bit7 Bit6 Bit5 Bit3 Bit2 Bit1 Bit0 PS2 PS1 PS0 寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器) ---- INTEDG T0CS T0SE PSA IRP RP1 复位值 xxxxxxxx 程序计(PC)的低字节 -1111011 00000000 RP0 TO PD Z DC C WPUD6 WPUD5 WPUD4 WPUD3 WPUD2 WPUD1 WPUD0 00000000 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 11111111 ---- RCIDL0 ---- SCKP0 BRG16EN0 ---- ---- ---- 01-00-00 RBIE T01F INTF RBIF ---- WRERR WREN WR RD WPUA5 WPUA4 WPUA3 WPUA2 WPUA1 WPUA0 00000000 ---- WPUC5 WPUC4 WPUC3 WPUC2 WPUC1 WPUC0 --000000 COM6EN COM5EN COM4EN COM3EN COM2EN COM1EN COM0EN 00000000 COM14EN COM13EN COM12EN COM11EN COM10EN COM9EN COM8EN 00000000 间接数据存储器地址指针 程序计数器高5位的写缓冲器 ---00000 EEPROM控制寄存器2(不是物理寄存器) 190H LCDCON0 191H LCDCON1 COM15EN 192H LEDADD 193H LEDDATA LED数据寄存器 194H SEGEN2 SEGDRI[3:0] 195H SEGEN1 SEG15EN SEG14EN SEG13EN 196H SEGEN0 SEG7EN SEG6EN 197H LCDCON2 LEDCS 00011xxx xxxxxxxx COM7EN www.mcu.com.cn Bit4 SEGOUT[1:0] 00000000 0---x000 -------- C16S8 LEDADD[3:0] 00000000 00000000 LCDISEL[1:0] ---- ---- ---- ---- 0000----- SEG12EN SEG11EN SEG10EN SEG9EN SEG8EN 00000000 SEG5EN SEG4EN SEG3EN SEG2EN SEG1EN SEG0EN 00000000 COM21EN COM20EN COM19EN COM18EN COM17EN COM16EN 00000000 -19- V1.4 Cmsemicon 2.2 CMS89F23x5B 寻址方式 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 间接寻址 数据存储器能被直接或间接寻址。通过 INDF 寄存器可间接寻址,INDF 不是物理寄存器。当对 INDF 进行 存取时,它会根据 FSR 寄存器内的值(低 8 位)和 STATUS 寄存器的 IRP 位(第 9 位)作为地址,并指向该 地址的寄存器,因此在设置了 FSR 寄存器和 STATUS 寄存器的 IRP 位后,就可把 INDF 寄存器当作目的寄存 器来存取。间接读取 INDF(FSR=0)将产生 00H。间接写入 INDF 寄存器,将导致一个空操作。以下例子说 明了程序中间接寻址的用法。 例:FSR 及 INDF 的应用 LDIA 30H LD FSR,A ;间接寻址指针指向 30H CLRB STATUS,IRP ;指针第 9 位清零 CLR INDF ;清零 INDF 实际是清零 FSR 指向的 30H 地址 RAM 例:间接寻址清 RAM(20H-7FH)举例: LDIA 1FH LD FSR,A CLRB STATUS,IRP INCR FSR ;地址加 1,初始地址为 30H CLR INDF ;清零 FSR 所指向的地址 LDIA 7FH SUBA FSR SNZB STATUS,C JP LOOP ;间接寻址指针指向 1FH LOOP: www.mcu.com.cn ;一直清零至 FSR 地址为 7FH -20- V1.4 Cmsemicon 2.3 CMS89F23x5B 堆栈 芯片的堆栈缓存器共 8 层,堆栈缓存器既不是数据存储器的一部分,也不是程序内存的一部分,且既不能 被读出,也不能被写入。对它的操作通过堆栈指针(SP)来实现,堆栈指针(SP)也不能读出或写入,当系 统复位后堆栈指针会指向堆栈顶部。当发生子程序调用及中断时的程序计数器(PC)值被压入堆栈缓存器,当 从中断或子程序返回时将数值返回给程序计数器(PC),下图说明其工作原理。 RET CALL SP7 RETI 中断 SP6 SP5 SP4 SP-1 SP+1 SP3 SP2 SP1 SP0 图 2-2:堆栈缓存器工作原理 堆栈缓存器的使用将遵循一个原则“先进后出” 。 注:堆栈缓存器只有 8 层,如果堆栈已满,并且发生不可屏蔽的中断,那么只有中断标志位会被记录下来, 而中断响应则会被抑制,直到堆栈指针发生递减,中断才会被响应,这个功能可以防止中断使堆栈溢 出,同样如果堆栈已满,并且发生子程序调用,那么堆栈将会发生溢出,首先进入堆栈的内容将会丢 失,只有最后 8 个返回地址被保留,故用户在写程序时应注意此点,以免发生程序走飞。 www.mcu.com.cn -21- V1.4 Cmsemicon 2.4 CMS89F23x5B 工作寄存器(ACC) 2.4.1 概述 ALU 是 8Bit 宽的算术逻辑单元,MCU 所有的数学、逻辑运算均通过它来完成。它可以对数据进行加、减、 移位及逻辑运算;ALU 也控制状态位(STATUS 状态寄存器中),用来表示运算结果的状态。 ACC 寄存器是一个 8-Bit 的寄存器,ALU 的运算结果可以存放在此,它并不属于数据存储器的一部分而是 位于 CPU 中供 ALU 在运算中使用,因此不能被寻址,只能通过所提供的指令来使用。 2.4.2 ACC 应用 例:用 ACC 做数据传送 LD A,R01 ;将寄存器 R01 的值赋给 ACC LD R02,A ;将 ACC 的值赋给寄存器 R02 例:用 ACC 做立即寻址目标操作数 LDIA 30H ;给 ACC 赋值 30H ANDIA 30H ;将当前 ACC 的值跟立即数 30H 进行“与”操作,结果放入 ACC XORIA 30H ;将当前 ACC 的值跟立即数 30H 进行“异或”操作,结果放入 ACC 例:用 ACC 做双操作数指令的第一操作数 HSUBA R01 ;ACC-R01,结果放入 ACC HSUBR R01 ;ACC-R01,结果放入 R01 例:用 ACC 做双操作数指令的第二操作数 SUBA R01 ;R01-ACC,结果放入 ACC SUBR R01 ; R01-ACC,结果放入 R01 www.mcu.com.cn -22- V1.4 Cmsemicon 2.5 CMS89F23x5B 程序状态寄存器(STATUS) STATUS 寄存器如下表所示,包含:  ALU 的算术状态。  复位状态。  数据存储器(GPR 和 SFR)的存储区选择位。 与其他寄存器一样,STATUS 寄存器可以是任何指令的目标寄存器。如果一条影响 Z、DC 或 C 位的指令 以 STATUS 寄存器作为目标寄存器,则不能写这 3 个状态位。这些位根据器件逻辑被置 1 或清零。而且也不能 写 TO 和 PD 位。因此将 STATUS 作为目标寄存器的指令可能无法得到预期的结果。 例如,CLRSTATUS 会清零高 3 位,并将 Z 位置 1。这样 STATUS 的值将为 000u u1uu(其中 u=不变)。 因此,建议仅使用 CLRB、SETB、SWAPA、SWAPR 指令来改变 STATUS 寄存器,因为这些指令不会影响任 何状态位。 程序状态寄存器 STATUS(03H) 03H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 STATUS IRP RP1 RP0 TO PD Z DC C 读写 R/W R/W R/W R/W R/W R/W R/W R/W 复位值 0 0 0 1 1 X X X Bit7 Bit6~Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 www.mcu.com.cn IRP: 1= 0= RP[1:0]: 00: 01: 10: 11: TO: 1= 0= PD: 1= 0= Z: 1= 0= DC: 1= 0= C: 1= 0= 寄存器存储器选择位(用于间接寻址); Bank2和Bank3(100h-1FFh); Bank0和Bank1(00h-FFh)。 存储区选择位; 选择Bank 0; 选择Bank 1; 选择Bank 2; 选择Bank 3。 超时位; 上电或执行了CLRWDT指令或STOP指令; 发生了WDT超时。 掉电位; 上电或执行了CLRWDT指令; 执行了STOP指令。 结果为零位; 算术或逻辑运算的结果为零; 算术或逻辑运算的结果不为零。 半进位/借位位; 发生了结果的第4低位向高位进位; 结果的第4低位没有向高位进位。 进位/借位位; 结果的最高位发生了进位或没有发生借位; 结果的最高位没有发生进位或发生了借位。 -23- V1.4 Cmsemicon CMS89F23x5B TO 和 PD 标志位可反映出芯片复位的原因,下面列出影响 TO、PD 的事件及各种复位后 TO、PD 的状态。 事件 TO PD TO PD 复位原因 电源上电 1 1 0 0 WDT 溢出唤醒休眠 MCU WDT 溢出 0 X 0 1 WDT 溢出非休眠态 STOP 指令 1 0 1 1 电源上电 CLRWDT 指令 1 1 休眠 1 0 复位后 TO/PD 的状态 影响 PD、TO 的事件表 www.mcu.com.cn -24- V1.4 Cmsemicon 2.6 CMS89F23x5B 预分频器(OPTION_REG) OPTION_REG 寄存器是可读写的寄存器,各个控制位用于配置:  TIMER0/WDT 预分频器。  TIMER0。 预分频器 OPTION_REG(81H) 81H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OPTION_REG --- INTEDG T0CS T0SE PSA PS2 PS1 PS0 读写 --- R/W R/W R/W R/W R/W R/W R/W 复位值 --- 1 1 1 1 0 1 1 Bit7 Bit6 Bit5 未用。 INTEDG: 1= 0= T0CS: 0= 1= Bit4 T0SE: 0= 1= Bit3 PSA: 0= 1= Bit2~Bit0 PS2~PS0: 触发中断的边沿选择位。 INT 引脚上升沿触发中断。 INT 引脚下降沿触发中断。 TIMER0 时钟源选择位。 内部指令周期时钟(FSYS/4)。 T0CKI 引脚上的跳变沿。 TIMER0 时钟源边沿选择位。 在 T0CKI 引脚信号从低电平跳变到高电平时递增。 在 T0CKI 引脚信号从高电平跳变到低电平时递增。 预分频器分配位。 预分频器分配给 TIMER0 模块。 预分频器分配给 WDT。 预分配参数配置位。 PS2 PS1 PS0 TMR0 分频比 WDT 分频比 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 预分频寄存器实际上是一个 8 位的计数器,用于监视寄存器 WDT 时,是作为一个后分频器;用于定时器/ 计数器时,作为一个预分频器,通常统称作预分频器。在片内只有一个物理的分频器,只能用于 WDT 或 TIMER0, 两者不能同时使用。也就是说,若用于 TIMER0,WDT 就不能使用预分频器,反之亦然。 当用于 WDT 时,CLRWDT 指令将同时对预分频器和 WDT 定时器清零。 当用于 TIMER0 时,有关写入 TIMER0 的所有指令(如:CLR TMR0,SETB TMR0,1 等)都会对预分频 器清零。 www.mcu.com.cn -25- V1.4 Cmsemicon CMS89F23x5B 由 TIMER0 还是 WDT 使用预分频器,完全由软件控制。它可以动态改变。为了避免出现不该有的芯片复 位,当从 TIMER0 换为 WDT 使用时,应该执行以下指令。 ;关中断总使能位,避免在执行以下特定时序时 进入中断程序 CLRB INTCON,GIE LDIA B’00000111’ ORR OPTION_REG,A ;预分频器设置为最大值 CLR TMR0 ;TMR0 清零 SETB OPTION_REG,PSA ;设置预分频器分配给 WDT ;WDT 清零 CLRWDT LDIA B’xxxx1xxx’ ;设置新的预分频器 LD OPTION_REG,A ;WDT 清零 CLRWDT SETB INTCON,GIE ;若程序需要用到中断,此处重新打开总使能位 将预分频器从分配给 WDT 切换为分配给 TIMER0 模块,应该执行以下指令 ;WDT 清零 CLRWDT LDIA B’00xx0xxx’ ;设置新的预分频器 LD OPTION_REG,A 注:要使 TIMER0 获取 1:1 的预分频比配置,可通过将选项寄存器的 PSA 位置 1 将预分频器分配给 WDT。 www.mcu.com.cn -26- V1.4 Cmsemicon 2.7 CMS89F23x5B 程序计数器(PC) 程序计数器(PC)控制程序内存 FLASH 中的指令执行顺序,它可以寻址整个 FLASH 的范围,取得指令 码后,程序计数器(PC)会自动加一,指向下一个指令码的地址。但如果执行跳转、条件跳转、向 PCL 赋值、 子程序调用、初始化复位、中断、中断返回、子程序返回等操作时,PC 会加载与指令相关的地址而不是下一 条指令的地址。 当遇到条件跳转指令且符合跳转条件时,当前指令执行过程中读取的下一条指令将会被丢弃,且会插入一 个空指令操作周期,随后才能取得正确的指令。反之,就会顺序执行下一条指令。 程序计数器(PC)是 13-Bit 宽度,低 8 位通过 PCL(02H)寄存器用户可以访问,高 5 位用户不能访问。 可容纳 8K×16Bit 程序地址。对 PCL 赋值将会产生一个短跳转动作,跳转范围为当前页的 256 个地址。 注:当程序员在利用 PCL 作短跳转时,要先对 PC 高位缓冲寄存器 PCLATH 进行赋值。 下面给出几种特殊情况的 PC 值。 复位时 PC=0000; 中断时 PC=0004(原来的 PC+1 会被自动压入堆栈); CALL 时 PC=程序指定地址(原来的 PC+1 会被自动压入堆栈); RET、RETI、RET i 时 PC=堆栈出来的值; 操作 PCL 时 PC[12:8]不变,PC[7:0]=用户指定的值; JP 时 PC=程序指定的值; 其它指令 PC=PC+1; www.mcu.com.cn -27- V1.4 Cmsemicon 2.8 CMS89F23x5B 看门狗计数器(WDT) 看门狗定时器(Watchdog Timer)是一个片内自振式的 RC 振荡定时器,无需任何外围组件,即使芯片的 主时钟停止工作,WDT 也能保持计时。WDT 计时溢出将产生复位。 2.8.1 WDT 周期 WDT 与 TIMER0 共用 8 位预分频器。芯片复位后,WDT 溢出周期为 144ms,假如你需要改变的 WDT 周 期,可以设置 OPTION_REG 寄存器。WDT 的溢出周期将受到环境温度、电源电压等参数影响。 “CLRWDT”和“STOP”指令将清除 WDT 定时器以及预分频器里的计数值(当预分频器分配给 WDT 时)。WDT 一般用来防止系统失控,或者可以说是用来防止单片机程序失控。在正常情况下,WDT 应该在其 溢出前被“CLRWDT”指令清零,以防止产生复位。如果程序由于某种干扰而失控,那么不能在 WDT 溢出前 执行“CLRWDT”指令,就会使 WDT 溢出而产生复位。使系统重启而不至于失去控制。若是 WDT 溢出产生 的复位,则状态寄存器(STATUS)的“TO”位会被清零,用户可根据此位来判断复位是否是 WDT 溢出所造 成的。 注: 1. 若使用 WDT 功能,一定要在程序的某些地方放置“CLRWDT”指令,以保证在 WDT 溢出前能被清 零。否则会使芯片不停的复位,造成系统无法正常工作。 2. 不能在中断程序中对 WDT 进行清零,否则无法侦测到主程序“跑飞”的情况。 3. 程序中应在主程序中有一次清 WDT 的操作,尽量不要在多个分支中清零 WDT,这种架构能最大限度 发挥看门狗计数器的保护功能。 4. 不同芯片的看门狗计数器溢出时间有一定差异,所以设置清 WDT 时间时,应与 WDT 的溢出时间有较 大的冗余,以避免出现不必要的 WDT 复位。 2.8.2 看门狗定时器控制寄存器 WDTCON 看门狗定时器控制寄存器 WDTCON(105H) 105H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 WDTCON --- --- --- --- --- --- --- SWDTEN R/W --- --- --- --- --- --- --- R/W 复位值 --- --- --- --- --- --- --- 0 Bit7~Bit1 Bit0 未用,读为 0。 SWDTEN: 1= 0= 软件使能或禁止看门狗定时器位。 使能 WDT。 禁止 WDT(复位值)。 注:如果 CONFIG 中 WDT 配置位为 1,则 WDT 始终被使能,而与 SWDTEN 控制位的状态无关。如果 CONFIG 中 WDT 配置位为 0,则可以使用 SWDTEN 控制位使能或禁止 WDT。 www.mcu.com.cn -28- V1.4 Cmsemicon CMS89F23x5B 3. 系统时钟 3.1 概述 时钟信号从 OSCIN 引脚输入后(或者由内部振荡产生),在片内产生 4 个非重叠正交时钟信号,分别称作 Q1、Q2、Q3、Q4。在 IC 内部每个 Q1 使程序计数器(PC)增量加一,Q4 从程序存储单元中取出该指令, 并将其锁存在指令寄存器中。在下一个 Q1 到 Q4 之间对取出的指令进行译码和执行,也就是说 4 个时钟周期 才会执行一条指令。下图表示时钟与指令周期执行时序图。 一个指令周期含有 4 个 Q 周期,指令的执行和获取是采用流水线结构,取指占用一个指令周期,而译码和 执行占用另一个指令周期,但是由于流水线结构,从宏观上看,每条指令的有效执行时间是一个指令周期。如 果一条指令引起程序计数器地址发生改变(例如 JP)那么预取的指令操作码就无效,就需要两个指令周期来完 成该条指令,这就是对 PC 操作指令都占用两个时钟周期的原因。 Q1 Q2 Q3 Q4 Q1 Q3 Q2 Q4 Q1 Q3 Q2 Q4 CLK Q1 Q2 Q3 Q4 PC PC+1 PC+2 取址 PC 取址 PC+1 执行指令 PC-1 执行指令 PC 取址 PC+2 执行指令 PC+1 图 3-1:时钟与指令周期时序图 下面列出系统工作频率与指令速度的关系: 系统工作频率(FSYS) www.mcu.com.cn 双指令周期 单指令周期 1MHz 8μs 4μs 2MHz 4μs 2μs 4MHz 2μs 1μs 8MHz 1μs 500ns -29- V1.4 Cmsemicon 3.2 CMS89F23x5B 系统振荡器 芯片有 2 种振荡方式,内部 RC 振荡和外部 XT 振荡。 3.2.1 内部 RC 振荡 芯片默认的振荡方式为内部 RC 振荡,其振荡频率为 8MHz,可通过 OSCCON 寄存器设置芯片工作频率。 当选择内部 RC 作为芯片的振荡器时,芯片的 OSCIN 和 OSCOUT 可以作为普通的 I/O 口。 3.2.2 外部 XT 振荡 在烧录时将 CONFIG 选项中的 OSC 选择成 XT,芯片工作在外部 XT 振荡模式下,此时内部 RC 振荡停止 工作,OSCIN 和 OSCOUT 作为振荡口。 (1) C1 OSCIN XTAL (2) 休眠 RF 到内部 逻辑电路 OSCOUT (1) C2 图 3-2:典型的 XT 振荡方式 建议参数: 3.3 类型 频率 建议值 RF 建议值 C1~C2 XT 2MHz 1MΩ 10pF~47pF XT 4MHz 1MΩ 10pF~47pF XT 8MHz 1MΩ 10pF~47pF 起振时间 起振时间(Reset Time)是指从芯片复位到芯片振荡稳定这段时间,其设计值约为 18ms。 注:无论芯片是电源上电复位,还是其它原因引起的复位,都会存在这个起振时间。 www.mcu.com.cn -30- V1.4 Cmsemicon 3.4 CMS89F23x5B 振荡器控制寄存器 振荡器控制(OSCCON)寄存器控制系统时钟和频率选择,振荡器调节寄存器 OSCTUNE 可以用软件调 节内部振荡频率。 振荡器控制寄存器 OSCCON(8FH) 8FH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OSCCON --- IRCF2 IRCF1 IRCF0 --- --- --- SCS R/W --- R/W R/W R/W --- --- --- R/W 复位值 --- 1 1 0 --- --- --- 0 Bit7 Bit6~Bit4 未用,读为 0。 IRCF: 111= 110= 101= 100= 011= 010= 001= 000= Bit3~Bit1 Bit0 未用。 SCS: 1= 0= 内部振荡器分频选择位。 FSYS = FOSC /1 FSYS = FOSC /2(默认) FSYS = FOSC /4 FSYS = FOSC /8 FSYS = FOSC /16 FSYS = FOSC /32 FSYS = FOSC /64 FSYS = 32kHz(LFINTOSC)。 (注:当系统配置寄存器里把振荡方式选为 XT 振荡时,IRCF 位不能设置为 000) 系统时钟选择位。 内部振荡器用作系统时钟。 时钟源由CONFIG定义。 注: 1) FOSC 为内部振荡器频率 8MHz;FSYS 为系统工作频率。 2) 当系统配置寄存器里把振荡方式选为 XT 振荡时,IRCF 位不能设置为 000。 振荡器调节寄存器 OSCTUNE(90H) 90H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OSCTUNE --- TUN6 TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 R/W --- R/W R/W R/W R/W R/W R/W R/W 复位值 --- 0 0 0 0 0 0 0 Bit7 未用。 Bit6~Bit0 TUN: 0111111= 频率调节位。 最高频率。 0111110= . . . 0000001= www.mcu.com.cn 0000000= 振荡器模块以厂家校准后的频率运行。 1111111= . . . 1000000= 最低频率。 -31- V1.4 Cmsemicon CMS89F23x5B 4. 复位 芯片可用如下 3 种复位方式:  上电复位;  LVR 复位;  正常工作下的看门狗溢出复位。 上述任意一种复位发生时,所有的系统寄存器将恢复默认状态,程序停止运行,同时程序计数器 PC 清零, 复位结束后程序从复位向量 0000H 开始运行。STATUS 的 TO 和 PD 标志位能够给出系统复位状态的信息, (详 见 STATUS 的说明),用户可根据 PD 和 TO 的状态,控制程序运行路径。 任何一种复位情况都需要一定的响应时间,系统提供完善的复位流程以保证复位动作的顺利进行。 4.1 上电复位 上电复位与 LVR 操作密切相关。系统上电的过程呈逐渐上升的曲线形式,需要一定时间才能达到正常电平 值。下面给出上电复位的正常时序: - 上电:系统检测到电源电压上升并等待其稳定; - 系统初始化:所有的系统寄存器被置为初始值; - 振荡器开始工作:振荡器开始提供系统时钟; - 执行程序:上电结束,程序开始运行。 www.mcu.com.cn -32- V1.4 Cmsemicon 4.2 CMS89F23x5B 掉电复位 4.2.1 概述 掉电复位针对外部因素引起的系统电压跌落情形(例如,干扰或外部负载的变化)。电压跌落可能会进入 系统死区,系统死区意味着电源不能满足系统的最小工作电压要求。 VDD 系统正常工作区域 V1 V2 V3 LVR检测电压 系统工作出错区域 图4-1:掉电复位示意图 上图是一个典型的掉电复位示意图。图中,VDD 受到严重的干扰,电压值降的非常低。虚线以上区域系统 正常工作,在虚线以下的区域内,系统进入未知的工作状态,这个区域称作死区。当 VDD 跌至 V1 时,系统仍 处于正常状态;当 VDD 跌至 V2 和 V3 时,系统进入死区,则容易导致出错。 以下情况系统可能进入死区:  DC 运用中: - DC 运用中一般都采用电池供电,当电池电压过低或单片机驱动负载时,系统电压可能跌落并进 入死区。这时,电源不会进一步下降到 LVD 检测电压,因此系统维持在死区。  AC 运用中: - 系统采用 AC 供电时,DC 电压值受 AC 电源中的噪声影响。当外部负载过高,如驱动马达时, 负载动作产生的干扰也影响到 DC 电源。VDD 若由于受到干扰而跌落至最低工作电压以下时,则 系统将有可能进入不稳定工作状态。 - 在 AC 运用中,系统上、下电时间都较长。其中,上电时序保护使得系统正常上电,但下电过程 却和 DC 运用中情形类似,AC 电源关断后,VDD 电压在缓慢下降的过程中易进入死区。 如上图所示,系统正常工作电压区域一般高于系统复位电压,同时复位电压由低电压检测(LVR)电平决 定。当系统执行速度提高时,系统最低工作电压也相应提高,但由于系统复位电压是固定的,因此在系统最低 工作电压与系统复位电压之间就会出现一个电压区域,系统不能正常工作,也不会复位,这个区域即为死区。 www.mcu.com.cn -33- V1.4 Cmsemicon CMS89F23x5B 4.2.2 掉电复位的改进办法 如何改进系统掉电复位性能,以下给出几点建议:  选择较高的 LVR 电压,有助于复位更可靠;  开启看门狗定时器;  降低系统的工作频率;  增大电压下降斜率。 看门狗定时器 看门狗定时器用于保证程序正常运行,当系统进入工作死区或者程序运行出错时,看门狗定时器会溢出, 系统复位。 降低系统的工作速度 系统工作频率越快,系统最低工作电压越高。从而增大了工作死区的范围,降低系统工作速度就可以降低 最低工作电压,从而有效的减小系统工作在死区电压的几率。 增大电压下降斜率 此方法可用于系统工作在 AC 供电的环境,一般 AC 供电系统,系统电压在掉电过程中下降很缓慢,这就 会造成芯片较长时间工作在死区电压,此时若系统重新上电,芯片工作状态可能出错,建议在芯片电源与地线 间加一个放电电阻,以便让 MCU 快速通过死区,进入复位区,避免芯片上电出错可能性。 4.3 看门狗复位 看门狗复位是系统的一种保护设置。在正常状态下,由程序将看门狗定时器清零。若出错,系统处于未知 状态,看门狗定时器溢出,此时系统复位。看门狗复位后,系统重启进入正常状态。 看门狗复位的时序如下: - 看门狗定时器状态:系统检测看门狗定时器是否溢出,若溢出,则系统复位; - 初始化:所有的系统寄存器被置为默认状态; - 振荡器开始工作:振荡器开始提供系统时钟; - 程序:复位结束,程序开始运行。 关于看门狗定时器的应用问题请参看 2.8WDT 应用章节。 www.mcu.com.cn -34- V1.4 Cmsemicon CMS89F23x5B 5. 休眠模式 5.1 进入休眠模式 执行 STOP 指令可进入休眠模式。如果 WDT 使能,那么:  WDT 将被清零并继续运行。  STATUS 寄存器中的 PD 位被清零。  TO 位被置 1。  关闭振荡器驱动器。  I/O 端口保持执行 STOP 指令之前的状态(驱动为高电平、低电平或高阻态)。 在休眠模式下,为了尽量降低电流消耗,所有 I/O 引脚都应该保持为 VDD 或 GND,没有外部电路从 I/O 引脚消耗电流。为了避免输入引脚悬空而引入开关电流,应在外部将高阻输入的 I/O 引脚拉为高电平或低电平。 为了将电流消耗降至最低,还应考虑芯片内部上拉电阻的影响。 5.2 从休眠状态唤醒 可以通过下列任一事件将器件从休眠状态唤醒: 1. 看门狗定时器唤醒(WDT 强制使能) 。 2. PORTB 电平变化中断或外设中断。 上述两种事件被认为是程序执行的延续,STATUS 寄存器中的 TO 和 PD 位用于确定器件复位的原因。PD 位在上电时被置 1,而在执行 STOP 指令时被清零。TO 位在发生 WDT 唤醒时被清零。 当执行 STOP 指令时,下一条指令(PC+1)被预先取出。如果希望通过中断事件唤醒器件,则必须将相 应的中断允许位置 1(允许)。唤醒与 GIE 位的状态无关。如果 GIE 位被清零(禁止),器件将继续执行 STOP 指令之后的指令。如果 GIE 位被置 1(允许),器件执行 STOP 指令之后的指令,然后跳转到中断地址(0004h) 处执行代码。如果不想执行 STOP 指令之后的指令,用户应该在 STOP 指令后面放置一条 NOP 指令。器件从 休眠状态唤醒时,WDT 都将被清零,而与唤醒的原因无关。 5.3 使用中断唤醒 当禁止全局中断(GIE 被清零)时,并且有任一中断源将其中断允许位和中断标志位置 1,将会发生下列 事件之一: - 如果在执行 STOP 指令之前产生了中断,那么 STOP 指令将被作为一条 NOP 指令执行。因此,WDT 及其预分频器和后分频器(如果使能)将不会被清零,并且 TO 位将不会被置 1,同时 PD 也不会被 清零。 - 如果在执行 STOP 指令期间或之后产生了中断,那么器件将被立即从休眠模式唤醒。STOP 指令将在 唤醒之前执行完毕。因此,WDT 及其预分频器和后分频器(如果使能)将被清零,并且 TO 位将被置 1,同时 PD 也将被清零。即使在执行 STOP 指令之前检查到标志位为 0,它也可能在 STOP 指令执 行完毕之前被置 1。要确定是否执行了 STOP 指令,可以测试 PD 位。如果 PD 位置 1,则说明 STOP 指令被作为一条 NOP 指令执行了。在执行 STOP 指令之前,必须先执行一条 CLRWDT 指令,来确 保将 WDT 清零。 www.mcu.com.cn -35- V1.4 Cmsemicon 5.4 CMS89F23x5B 休眠模式应用举例 系统在进入休眠模式之前,若用户需要获得较小的休眠电流,请先确认所有 I/O 的状态,若用户方案中存 在悬空的 I/O 口,把所有悬空口都设置为输出口,确保每一个 I/O 都有一个固定的状态,以避免 I/O 为输入状 态时,口线电平处于不定态而增大休眠电流;关断 AD 等其它外设模块;根据实际方案的功能需求可禁止 WDT 功能来减小休眠电流。 例:进入休眠的处理程序 SLEEP_MODE: CLR INTCON LDIA B’00000000’ LD TRISA,A LD TRISB,A LD TRISC,A LD TRISE,A „ 5.5 ;关断中断使能 ;所有 I/O 设置为输出口 ;关闭其它功能 LDIA 0A5H LD SP_FLAG,A ;置休眠状态记忆寄存器(用户自定义) CLRWDT ;清零 WDT STOP ;执行 STOP 指令 休眠模式唤醒时间 当 MCU 从休眠态被唤醒时,需要等待一个振荡稳定时间(Reset Time),这个时间在内部高速振荡模式下 为 1024 个 TSYS 时钟周期,在内部低速振荡模式下为 8 个 TSYS 时钟周期,在晶振模式下为 2048 个 FSYS 时钟。 具体关系如下表所示。 系统主频时钟源 系统时钟分频选择(IRCF) 休眠唤醒等待时间 TWAIT FSYS=FOSC TWAIT=1024*1/FOSC FSYS= FOSC /2 TWAIT=1024*2/FOSC … … FSYS= FOSC /64 TWAIT=1024*64/FOSC 内部低速 RC 振荡(FLFINTOSC) ---- TWAIT=8/FLFINTOSC XT 振荡(FXT) ---- TWAIT=2048/FXT 内部高速 RC 振荡(FOSC) www.mcu.com.cn -36- V1.4 Cmsemicon CMS89F23x5B 6. I/O 端口 芯片有 4 个 I/O 端口:PORTA、PORTB、PORTC、PORTD(最多 30 个 I/O)。可读写端口数据寄存器, 可直接存取这些端口。 端口 PROTA PORTB PORTC PORTD 位 管脚描述 I/O 0 1 施密特触发输入,推挽式输出,AN0,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 施密特触发输入,推挽式输出,AN1,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 2 施密特触发输入,推挽式输出,AN2,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 3 施密特触发输入,推挽式输出,AN3,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 4 施密特触发输入,推挽式输出,AN4,TMR0 时钟输入,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 5 施密特触发输入,推挽式输出,AN5,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 6 施密特触发输入,推挽式输出,AN6,OSCOUT,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 7 施密特触发输入,推挽式输出,AN7,OSCIN,LED 驱动 SEG 口,LCD 驱动 COM 口 I/O 0 施密特触发输入,推挽式输出,AN8,LCD 驱动 COM 口 I/O 1 施密特触发输入,推挽式输出,AN9,LCD 驱动 COM 口 I/O 2 施密特触发输入,推挽式输出,AN10,LCD 驱动 COM 口 I/O 3 施密特触发输入,推挽式输出,AN11,LCD 驱动 COM 口 I/O 4 施密特触发输入,推挽式输出,AN12,LCD 驱动 COM 口 I/O 5 施密特触发输入,推挽式输出,AN13,LCD 驱动 COM 口 I/O 6 施密特触发输入,推挽式输出,AN14,LCD 驱动 COM 口 I/O 7 施密特触发输入,推挽式输出,AN15,LCD 驱动 COM 口 I/O 0 施密特触发输入,推挽式输出,编程时钟输入,AN16,LCD 驱动 COM 口 I/O 1 施密特触发输入,推挽式输出,编程数据输入/输出,AN17,LCD 驱动 COM 口 I/O 2 施密特触发输入,推挽式输出,AN18,LCD 驱动 COM 口 I/O 3 施密特触发输入,推挽式输出,AN19,LCD 驱动 COM 口 I/O 4 施密特触发输入,推挽式输出,AN20,LCD 驱动 COM 口 I/O 5 施密特触发输入,推挽式输出,AN21,LCD 驱动 COM 口 I/O 0 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN22,LCD 驱动 COM 口 I/O 1 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN23,LCD 驱动 COM 口 I/O 2 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN24,LCD 驱动 COM 口 I/O 3 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN25,LCD 驱动 COM 口 I/O 4 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN26,LCD 驱动 COM 口 I/O 5 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN27,LCD 驱动 COM 口 I/O 6 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN28,LCD 驱动 COM 口 I/O 7 施密特触发输入,推挽式输出,LED 驱动 SEG 口,AN29,LCD 驱动 COM 口 I/O <表 6-1:端口配置总概> www.mcu.com.cn -37- V1.4 Cmsemicon 6.1 CMS89F23x5B I/O 口结构图 数据总线 写 WPUx D Q VDD 弱上拉 CK Q 读 WPUx D Q VDD 写 PORTx CK Q I/O引脚 D 写 TRISx Q VSS CK Q 读 TRISx 读 PORTx D 写 WPDx 弱下拉 Q CK Q 到A/D转换器 LCD模块 图 6-1:I/O 口结构图—PORTA/C/D www.mcu.com.cn -38- V1.4 Cmsemicon 数据总线 写 WPUB CMS89F23x5B D CK Q VDD 弱上拉 Q 读 WPUB D 写 PORTB Q VDD CK Q I/O引脚 D 写 TRISB CK Q VSS Q 读 TRISB 读 PORTB D 写 IOCB CK Q Q D EN Q Q 读 IOCB Q3 D EN 电平变化中断 读PORTB D 写 WPDB 弱下拉 Q CK Q 到A/D转换器 LCD模块 图 6-2:I/O 口结构图--PORTB www.mcu.com.cn -39- V1.4 Cmsemicon 6.2 CMS89F23x5B PORTA 6.2.1 PORTA 数据及方向控制 PORTA 是 8Bit 宽的双向端口。它所对应的数据方向寄存器是 TRISA。将 TRISA 的一个位置 1(=1)可以 将相应的引脚配置为输入。清零 TRISA 的一个位(=0)可将相应的 PORTA 引脚配置为输出。 读 PORTA 寄存器读的是引脚的状态而写该寄存器将会写入端口锁存器。所有写操作都是读-修改-写操 作。因此,写一个端口就意味着先读该端口的引脚电平,修改读到的值,然后再将改好的值写入端口数据锁存 器。即使在 PORTA 引脚用作模拟输入时,TRISA 寄存器仍然控制 PORTA 引脚的方向。当将 PORTA 引脚用 作模拟输入时,用户必须确保 TRISA 寄存器中的位保持为置 1 状态。 与 PORTA 口相关寄存器有 PORTA、TRISA、WPUA、WPDA 等。 PORTA 数据寄存器 PORTA(05H) 05H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 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~Bit0 PORTA: PORTAI/O 引脚位; 1= 端口引脚电平>VIH; 0= 端口引脚电平VIH。 0= 端口引脚电平VIH。 0= 端口引脚电平VIH。 0= 端口引脚电平05H) 2. 将 SYNCx、SPENx 和 CSRCx 位置 1 使能同步主控串行端口。 3. 确保将 CRENx 和 SRENx 位清零。 4. 如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 RCxIE 位也置 1。 5. 如果需要接收 9 位字符,将 RX9ENx 位置 1。 6. 将 SRENx 位置 1,启动接收,或将 CRENx 位置 1 使能连续接收。 7. 当字符接收完毕后,将 RCxIF 中断标志位置 1。如果允许位 RCxIE 置 1,还会产生一个中断。 8. 读 RCREGx 寄存器获取接收到的 8 位数据。 9. 读 RCSTAx 寄存器以获取第 9 个数据位(使能 9 位接收时),并判断接收过程中是否产生错误。 10. 如果产生溢出错误,清零 RCSTAx 寄存器的 CRENx 位或清零 SPENx 以复位 USARTx 来清除错误。 RXx/DTx引脚 Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 TXx/CKx引脚 (SCKPx=0) TXx/CKx引脚 (SCKPx=1) 写入SRENx位 SRENx位 CRENx位 0 RCxIF位 读RXREGx 图 14-8:同步接收(主控模式,SREN) 注:时序图说明了 SRENx=1 和 BRGHENx=0 时的同步主控模式。 www.mcu.com.cn -104- V1.4 Cmsemicon 14.4.2 CMS89F23x5B 同步从动模式 下列位用来将 USARTx 配置为同步从动操作:  SYNCx=1  CSRCx=0  SRENx=0(用于发送);SRENx=1(用于接收)  CRENx=0(用于发送);CRENx=1(用于接收)  SPENx=1 将 TXSTAx 寄存器的 SYNCx 位置 1,可将器件配置用于同步操作。将 TXSTAx 寄存器的 CSRCx 位置 1, 将器件配置为从动器件。将 RCSTAx 寄存器的 SRENx 和 CRENx 位清零,以确保器件处于发送模式,否则器 件将被配置为接收模式。将 RCSTAx 寄存器的 SPENx 位置 1,使能 USARTx。 14.4.2.1 USART 同步从动发送 同步主控和从动模式的工作原理是相同的(见章节“同步主控发送”) 。 14.4.2.2 同步从动发送设置 1. 将 SYNCx 和 SPENx 位置 1 并将 CSRCx 位清零。 2. 将 CRENx 和 SRENx 位清零。 3. 如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 TXxIE 位也置 1。 4. 如果需要发送 9 位数据,将 TX9ENx 位置 1。 5. 将 TXENx 位置 1 使能发送。 6. 若选择发送 9 位数据,将最高位写入 TX9Dx 位。 7. 将低 8 位数据写入 TXREGx 寄存器开始传输。 14.4.2.3 USART 同步从动接收 除了以下不同外,同步主控和从动模式的工作原理相同。 1. CRENx 位总是置 1,因此接收器不能进入空闲状态。 2. SRENx 位,在从动模式可为“任意值”。 14.4.2.4 同步从动接收设置 1. 将 SYNCx 和 SPENx 位置 1 并将 CSRCx 位清零。 2. 如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 RCxIE 位也置 1。 3. 如果需要接收 9 位字符,将 RX9ENx 位置 1。 4. 将 CRENx 位置 1,使能接收。 5. 当接收完成后,将 RCxIF 位置 1。如果 RCxIE 已置 1,还会产生一个中断。 6. 读 RCREGx 寄存器,从接收 FIFO 缓冲器获取接收到的 8 个低数据位。 7. 如果使能 9 位模式,从 RCSTAx 寄存器的 RX9Dx 位获取最高位。 8. 如果产生溢出错误,清零 RCSTAx 寄存器的 CRENx 位或清零 SPENx 位以复位 USARTx 来清除错误。 www.mcu.com.cn -105- V1.4 Cmsemicon CMS89F23x5B 15. 数据 EEPROM 存储器和程序存储器控制 15.1 概述 器件具有 8K 字的程序 EEPROM,地址范围从 000h 到 1FFFh,在所有地址范围内是可读的;64 字节的 数据 EEPROM 存储器,地址范围为 0h 到 3Fh,在所有地址范围内都是可以读写的。 这些存储器并不直接映射到寄存器文件空间,而是通过特殊功能寄存器(SFR)对其进行间接寻址。共有 6 个 SFR 寄存器用于访问这些存储器:  EECON1  EECON2  EEDAT  EEDATH  EEADR  EEADRH 当与数据 EEPROM 存储器模块接口时,EEDAT 寄存器存放 8 位读写的数据,而 EEADR 寄存器存放被访 问的 EEDAT 单元的地址。 访问器件的程序存储器时,EEDAT 和 EEDATH 寄存器形成一个双字节字用于保存要读的 16 位数据, EEADR 和 EEADRH 寄存器组成一个双字节字用于保存待读取的 13 位 EEPROM 单元地址。 程序存储器允许以字为单位读取。数据 EEPROM 存储器允许字节读写。字节写操作可自动擦除目标单元 并写入新数据(在写入前擦除)。 写入时间由片上定时器控制。写入和擦除电压是由片上电荷泵产生的,此电荷泵额定工作在器件的电压范 围内,用于进行字节或字操作。 www.mcu.com.cn -106- V1.4 Cmsemicon CMS89F23x5B 15.2 相关寄存器 15.2.1 EEADR 和 EEADRH 寄存器 EEADR 和 EEADRH 寄存器能寻址最大 64 字节的数据 EEPROM 存储器或最大 8K 字的程序 EEPROM。 当选择程序地址值时,地址的高字节被写入 EEADRH 寄存器而低字节被写入 EEADR 寄存器。当选择数 据地址值时,只将地址的低字节写入 EEADR 寄存器。 15.2.2 EECON1 和 EECON2 寄存器 EECON1 是访问 EE 存储器的控制寄存器。 控制位 EEPGD 决定访问的是程序存储器还是数据 EEPROM 存储器。该位被清零时,和复位时一样,任 何后续操作都将针对数据 EEPROM 存储器进行。该位置 1 时,任何后续操作都将针对程序存储器进行。程序 存储器是只读的。 控制位 RD 和 WR 分别启动读和写。用软件只能将这些位置 1 而无法清零。在读或写操作完成后,由硬件 将它们清零。由于无法用软件将 WR 位清零,从而可避免意外地过早终止写操作。 当 WREN 置 1 时,允许对数据 EEPROM 存储器执行写操作。上电时,WREN 位被清零。当正常的写入 操作被 LVR 复位或 WDT 超时复位中断时,WRERR 位会置 1。在这些情况下,复位后用户可以检查 WRERR 位并重写相应的单元。 当写操作完成时 PIR2 寄存器中的中断标志位 EEIF 被置 1。此标志位必须用软件清零。 EECON2 不是物理寄存器。读 EECON2 得到的是全 0。 EECON2 寄存器仅在执行数据 EEPROM 存储器写序列时使用。 EEPROM 数据寄存器 EEDAT(10CH) 10CH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EEDAT EEDAT7 EEDAT6 EEDAT5 EEDAT4 EEDAT3 EEDAT2 EEDAT1 EEDAT0 读写 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~Bit0 EEDAT: 要从数据EEPROM存储器中读取或向数据EEPROM存储器写入的数据的低8位,或者要 从程序存储器中读取的数据的低8位。 EEPROM 地址寄存器 EEADR(10DH) 10DH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EEADR EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 读写 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~Bit0 EEADR: 指定EEPROM读/写操作的地址的低8位,或程序存储器读操作的地址的低8位。 EEPROM 数据寄存器 EEDATH(10EH) 10EH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EEDATH EEDATH7 EEDATH6 EEDATH5 EEDATH4 EEDATH3 EEDATH2 EEDATH1 EEDATH0 读写 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~Bit0 EEDATH: www.mcu.com.cn 从程序存储器读出的数据的高8位。 -107- V1.4 Cmsemicon CMS89F23x5B EEPROM 地址寄存器 EEADRH(10FH) 10FH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EEADRH — — — EEADRH4 EEADRH3 EEADRH2 EEADRH1 EEADRH0 读写 — — — R/W R/W R/W R/W R/W 复位值 — — — 0 0 0 0 0 Bit7~Bit4 未用,读为0。 Bit3~Bit0 EEADRH: 指定存储器读/写操作的高5位地址。 EEPROM 控制寄存器 EECON1(18CH) 18CH Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 EECON1 EEPGD — — — WRERR WREN WR RD 读写 R/W — — — R/W R/W R/W R/W 复位值 0 — — — X 0 0 0 Bit7 EEPGD: 访问程序存储器; 0= 访问数据EEPROM存储器。 未用。 Bit3 WRERR: Bit2 Bit1 Bit0 www.mcu.com.cn 数据EEPROM错误标志位; 1= 写操作过早终止(正常工作期间的任何WDT复位或欠压复位); 0= 写操作完成。 WREN: Bit0 程序/数据EEPROM存储器选择位 1= Bit6~Bit4 Bit1 EEPROM写使能位; 1= 允许写周期; 0= 禁止周期。 WR: 写控制位; 1= 启动写周期(写操作一旦完成由硬件清零该位,用软件只能将WR位置1,但不能清零); 0= 写周期完成。 RD: 读控制位; 1= 启动存储器读操作(由硬件清零RD,用软件只能将RD位置1,但不能清零); 0= 不启动存储器读操作。 -108- V1.4 Cmsemicon CMS89F23x5B 15.3 读数据 EEPROM 存储器 要读取数据 EEPROM 存储器单元,用户必须将地址写入 EEADR 寄存器,清零 EECON1 寄存器的 EEPGD 控制位,然后将控制位 RD 置 1。一旦设置好读控制位,数据 EEPROM 存储器控制器将使用第二个指令周期 来读数据。这会导致紧随"SETBEECON1,RD"指令的第二条指令被忽略(1)。在紧接下来的一个时钟周期,数据 EEPROM 存储器相应地址的值会被锁存到 EEDAT 寄存器中,用户可在随后的指令中读取这两个寄存器。 EEDAT 将保存此值直至下一次用户向该单元读取或写入数据时为止。 注:程序存储器读操作后的两条指令必须为 NOP。这可阻止用户在 RD 位置 1 后的下一条指令执行双周 期指令。 例:读数据 EEPROM 存储器 LD LD CLRB SETB NOP NOP LD www.mcu.com.cn A,EE_ADD EEADR,A EECON1,EEPGD EECON1,RD ;将要读取的地址放入 EEADR 寄存器 A,EEDAT ;读取数据到 ACC ;选择数据 EEPROM 存储器 ;使能读信号 ;这里读取数据,必须加 NOP 指令 -109- V1.4 Cmsemicon CMS89F23x5B 15.4 写数据 EEPROM 存储器 要写数据 EEPROM 存储单元,用户应首先将该单元的地址写入 EEADR 寄存器并将数据写入 EEDAT 寄 存器。然后用户必须按特定顺序开始写入每个字节。 如果没有完全按照下面的指令顺序(即首先将 55h 写入 EECON2,随后将 AAh 写入 EECON2,最后将 WR 位置 1)写每个字节,将不会启动写操作。在该代码段中应禁止中断。 此外,必须将 EECON1 中的 WREN 位置 1 以使能写操作。这种机制可防止由于代码执行错误(异常) (即 程序跑飞)导致误写数据 EEPROM。在不更新数据 EEPROM 时,用户应该始终保持 WREN 位清零。WREN 位不能被硬件清零。 一个写过程启动后,将 WREN 位清零将不会影响此写周期。除非 WREN 位置 1,否则 WR 位将无法置 1。 写周期完成时,WR 位由硬件清零并且 EE 写完成中断标志位(EEIF)置 1。用户可以允许此中断或查询此位。 EEIF 必须用软件清零。 例:写数据 EEPROM 存储器 LD LD LD LD CLRB SETB CLRB SZB JP LDIA LD LDIA LD SETB SETB SZB JP CLRB www.mcu.com.cn A,EE_ADD EEADR,A A,EE_DATA EEDAT,A EECON1,EEPGD EECON1,WREN INTCON,GIE INTCON,GIE $-2 055H EECON2,A 0AAH EECON2,A EECON1,WR INTCON,GIE EECON1,WR $-1 EECON1,WREN ;将要写入的地址放入 EEADR 寄存器 ;将要写入的数据放入 EEDAT 寄存器 ;允许写操作 ;关闭所有中断 ;给 EECON2 写 55H ;给 EECON2 写 0AAH ;使能写信号 ;判断写操作是否完成, ;写结束,关闭写使能位 -110- V1.4 Cmsemicon CMS89F23x5B 15.5 读程序存储器 要读取程序存储器单元, 用户必须将地址的高位和低位分别写入 EEADR 和 EEADRH 寄存器,将 EECON1 寄存器的 EEPGD 位置 1,然后将控制位 RD 置 1。一旦设置好读控制位,程序存储器控制器将使用第二个指 令周期来读数据。这会导致紧随“SETBEECON1,RD”指令的第二条指令被忽略。在紧接下来的一个时钟周 期,程序存储器相应地址的值会被锁存到 EEDAT 和 EEDATH 寄存器中,用户可在随后的指令中读取这两个寄 存器。EEDAT 和 EEDATH 寄存器将保存此值直至下一次用户向该单元读取或写入数据时为止。 注: 1. 程序存储器读操作后的两条指令必须为 NOP。这可阻止用户在 RD 位置 1 后的下一条指令执行双周 期指令。 2. 当 EEPGD=1 时如果 WR 位置 1,它会立即复位为 0,而不执行任何操作。 例:读闪存程序存储器 LDIA LD LDIA LD SETB SETB NOP NOP LD LD LD LD www.mcu.com.cn EE_ADDL EEADR,A EE_ADDH EEADRH,A EECON1,EEPGD EECON1,RD ;将要读取的地址放入 EEADR 寄存器 A,EEDAT EE_DATL,A A,EEDATH EE_DATH,A ;保存读取的数据 -111- ;将要读取的地址高位放入 EEADRH 寄存器 ;选择操作程序存储器 ;允许读操作 V1.4 Cmsemicon CMS89F23x5B 15.6 数据 EEPROM 操作注意事项 15.6.1 写校验 根据具体的应用,好的编程习惯一般要求将写入数据 EEPROM 存储器/程序存储器的值对照期望值进行校 验。 15.6.2 避免误写的保护 有些情况下,用户可能不希望向数据 EEPROM 存储器写入数据。为防止误写数据 EEPROM 存储器,芯 片内嵌了各种保护机制。上电时清零 WREN 位。而且,上电延时定时器(延迟时间为 18ms)会防止对数据 EEPROM 执行写操作。 写操作的启动序列以及 WREN 位将共同防止在以下情况下发生误写操作:  欠压  电源毛刺  软件故障 www.mcu.com.cn -112- V1.4 Cmsemicon CMS89F23x5B 16. 电气参数 16.1 极限参数 电源供应电压………………………………………………………………….….………GND-0.3V~GND+6.0V 存储温度…………………………………………………………………….….…………………….-50℃~125℃ 工作温度………………………………………………………………...………..……………………-40℃~85℃ 端口输入电压………………………………………………………......…………………GND-0.3V~VDD+0.3V 所有端口最大灌电流…………………………………………………...…………………………………..200mA 所有端口最大拉电流………………………………………………………………………………………-150mA 注:如果器件工作条件超过上述“极限参数”,可能会对器件造成永久性损坏。上述值仅为运行条件极 大值,我们不建议器件在该规范规定的范围以外运行。器件长时间工作在极限值条件下,其稳定性 会受到影响。 www.mcu.com.cn -113- V1.4 Cmsemicon CMS89F23x5B 16.2 直流电气特性 (VDD=5V,TA= 25℃,除非另有说明) 符号 参数 VDD 工作电压 IDD 工作电流 ISTB 静态电流 测试条件 VDD 条件 最小值 典型值 最大值 单位 FSYS=8MHz 3.0 5.5 V FSYS=4MHz 2.5 5.5 V 5V FSYS=8MHz 3 mA 3V FSYS=8MHz 2 5V ---- 0.1 5 μA 3V ---- 0.1 3 μA 0.3VDD V mA VIL 低电平输入电压 ---- VIH 高电平输入电压 ---- 0.7VDD V VOH 高电平输出电压 不带负载 0.9VDD V VOL 低电平输出电压 不带负载 VEEPROM EEPROM 模块擦写电压 ---- RPH 上拉电阻阻值 RPL 下拉电阻阻值 IOL1 3.3 0.1VDD V 5.5 V 5V VO=0.5VDD 30 kΩ 3V VO=0.5VDD 50 kΩ 5V VO=0.5VDD 30 kΩ 3V VO=0.5VDD 52 kΩ 输出口灌电流 (普通 I/O 口) 5V VOL=0.3VDD 60 mA 3V VOL=0.3VDD 25 mA IOH1 输出口拉电流 (普通 I/O 口) 5V VOH=0.7VDD -20 mA 3V VOH=0.7VDD -9 mA IOL2 输出口灌电流 (LED COM 口) 5V VOL=0.3VDD 120 mA 3V VOL=0.3VDD 50 mA 输出口拉电流 (LED SEG 口最大电流) 5V VOH=0.7VDD -30 mA 3V VOH=0.7VDD -12 mA IOH2 VBG1 VBG2 VDD=2.5~5.5V TA=25℃ VDD=2.5~5.5V TA=-40~85℃ -1.5% 0.6 1.5% V 内部基准电压 0.6V -2.0% 0.6 2.0% V -1.5% 1.2 1.5% V 内部基准电压 1.2V VDD=2.5~5.5V TA=25℃ VDD=2.5~5.5V TA=-40~85℃ -2.0% 1.2 2.0% V www.mcu.com.cn -114- V1.4 Cmsemicon CMS89F23x5B 16.3 ADC 电气特性 (TA= 25℃,除非另有说明) 符号 参数 VADC ADC 工作电压 测试条件 最小值 FADC=500kHz 2.7 典型值 最大值 单位 5.5 V VADC=5V,FADC=500kHz 500 uA VADC =3V,FADC=500kHz 200 uA VADC V IADC ADC 转换电流 VADI ADC 输入电压 VADC=5V,FADC=250kHz DNL 微分非线性误差 VADC=5V,FADC=250kHz ±3 LSB INL 积分非线性误差 VADC=5V,FADC=250kHz ±4 LSB TADC ADC 转换时间 - 49 TADCCLK 0 16.4 上电复位特性 (TA= 25℃,除非另有说明) 符号 参数 测试条件 最小值 典型值 最大值 单位 tVDD VDD 上升速率 - 0.05 VLVR1 LVR 设定电压=2.5V VDD=2.0~5.5V 2.2 2.5 2.8 V VLVR2 LVR 设定电压=3.0V VDD=2.5~5.5V 2.7 3.0 3.3 V V/ms LVR 温度特性曲线 LVR温度特性 3.5 3.3 电压(V) 3.1 2.9 2.5V 2.7 3.0V 2.5 2.3 -40 -20 0 20 40 60 80 温度(℃ ) www.mcu.com.cn -115- V1.4 Cmsemicon CMS89F23x5B 16.5 交流电气特性 (TA=25℃,除非另有说明) 符号 测试条件 参数 TWDT WDT 复位时间 TEEPROM EEPROM 编程时间 FRC www.mcu.com.cn 内振频率稳定性 最小值 典型值 最大值 单位 VDD 条件 5V - 18 ms 3V - 36 ms 5V FOSC=8MHz 2.5 ms 3V FOSC=8MHz 2.5 ms VDD=4.5~5.5V TA=25℃ -1.5% 8 +1.5% MHz VDD=3.5~5.5V TA=25℃ -2% 8 +2% MHz VDD=4.5~5.5V TA=-40~85℃ -2.5% 8 +2.5% MHz VDD=3.5~5.5V TA=-40~85℃ -3.5% 8 +3.5% MHz -116- V1.4 Cmsemicon CMS89F23x5B 17. 指令 17.1 指令一览表 助记符 操作 指令周期 标志 控制类 NOP 空操作 1 None STOP 进入休眠模式 1 TO,PD CLRWDT 清零看门狗计数器 1 TO,PD 数据传送 LD [R],A 将 ACC 内容传送到 R 1 NONE LD A,[R] 将 R 内容传送到 ACC 1 Z TESTZ [R] 将数据存储器内容传给数据存储器 1 Z LDIA i 立即数 i 送给 ACC 1 NONE 清零 ACC 1 Z 逻辑运算 CLRA 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 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 INCA [R] 递增数据存储器 R,结果放入 ACC 1 Z INCR [R] 递增数据存储器 R,结果放入 R 1 Z DECA [R] 递减数据存储器 R,结果放入 ACC 1 Z 移位操作 递增递减 www.mcu.com.cn -117- V1.4 Cmsemicon 助记符 CMS89F23x5B 操作 指令周期 标志 [R] 递减数据存储器 R,结果放入 R 1 Z CLRB [R],b 将数据存储器 R 中某位清零 1 NONE SETB [R],b 将数据存储器 R 中某位置一 1 NONE [R] 读取 FLASH 内容结果放入 TABLE_DATAH 与 R 2 NONE 读取 FLASH 内容结果放入 TABLE_DATAH 与 ACC 2 NONE DECR 位操作 查表 TABLE TABLEA 数学运算 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→ACC 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]→R 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 从子程序返回 2 NONE 从子程序返回,并将立即数 I 存入 ACC 2 NONE 从中断返回 2 NONE 无条件转移 RET RET i RETI CALL ADD 子程序调用 2 NONE JP ADD 无条件跳转 2 NONE 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”,结果放入 R,若结果为“0”,则跳过下一条指令 1 or 2 NONE SZDECA [R] 数据存储器 R 减“1”,结果放入 ACC,若结果为“0”,则跳过下一条指令 1 or 2 NONE SZDECR [R] 数据存储器 R 减“1”,结果放入 R,若结果为“0”,则跳过下一条指令 1 or 2 NONE 条件转移 www.mcu.com.cn -118- V1.4 Cmsemicon CMS89F23x5B 17.2 指令说明 ADDA [R] 操作: 将 R 加 ACC,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 09H ;给 ACC 赋值 09H LD R01,A ;将 ACC 的值(09H)赋给自定义寄存器 R01 LDIA 077H ;给 ACC 赋值 77H ADDA R01 ;执行结果:ACC=09H + 77H =80H ADDR [R] 操作: 将 R 加 ACC,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 09H ;给 ACC 赋值 09H LD R01,A ;将 ACC 的值(09H)赋给自定义寄存器 R01 LDIA 077H ;给 ACC 赋值 77H ADDR R01 ;执行结果:R01=09H + 77H =80H ADDCA [R] 操作: 将 R 加 ACC 加 C 位,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 09H ;给 ACC 赋值 09H LD R01,A ;将 ACC 的值(09H)赋给自定义寄存器 R01 LDIA ADDCA 077H R01 ;给 ACC 赋值 77H ADDCR [R] 操作: 将 R 加 ACC 加 C 位,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV ;执行结果:ACC= 09H + 77H + C=80H (C=0) ACC= 09H + 77H + C=81H (C=1) 举例: LDIA 09H ;给 ACC 赋值 09H LD R01,A ;将 ACC 的值(09H)赋给自定义寄存器 R01 LDIA ADDCR 077H R01 ;给 ACC 赋值 77H www.mcu.com.cn ;执行结果:R01 = 09H + 77H + C=80H (C=0) R01 = 09H + 77H + C=81H (C=1) -119- V1.4 Cmsemicon ADDIA i 操作: 将立即数 i 加 ACC,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV CMS89F23x5B 举例: LDIA 09H ;给 ACC 赋值 09H ADDIA 077H ;执行结果:ACC = ACC(09H) + i(77H)=80H ANDA [R] 操作: 寄存器 R 和 ACC 进行逻辑与运算,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0FH ;给 ACC 赋值 0FH LD R01,A ;将 ACC 的值(0FH)赋给寄存器 R01 LDIA 77H ;给 ACC 赋值 77H ANDA R01 ;执行结果:ACC=(0FH and ANDR [R] 操作: 寄存器 R 和 ACC 进行逻辑与运算,结果放入 R 周期: 1 影响标志位: Z 77H)=07H 举例: LDIA 0FH ;给 ACC 赋值 0FH LD R01,A ;将 ACC 的值(0FH)赋给寄存器 R01 LDIA 77H ;给 ACC 赋值 77H ANDR R01 ;执行结果:R01=(0FH and ANDIA i 操作: 将立即数 i 与 ACC 进行逻辑与运算,结果放入 ACC 周期: 1 影响标志位: Z 77H)=07H 举例: LDIA 0FH ;给 ACC 赋值 0FH ANDIA 77H ;执行结果:ACC =(0FH and LOOP ;调用名称定义为”LOOP”的子程序地址 CALL add 操作: 调用子程序 周期: 2 影响标志位: 无 77H)=07H 举例: CALL www.mcu.com.cn -120- V1.4 Cmsemicon CMS89F23x5B CLRA 操作: ACC 清零 周期: 1 影响标志位: Z 举例: CLRA CLR [R] 操作: 寄存器 R 清零 周期: 1 影响标志位: Z ;执行结果:ACC=0 举例: CLR R01 CLRB [R],b 操作: 寄存器 R 的第 b 位清零 周期: 1 影响标志位: 无 ;执行结果:R01=0 举例: CLRB R01,3 ;执行结果:R01 的第 3 位为零 CLRWDT 操作: 清零看门狗计数器 周期: 1 影响标志位: TO,PD 举例: CLRWDT ;看门狗计数器清零 COMA [R] 操作: 寄存器 R 取反,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 COMA R01 ;执行结果:ACC=0F5H www.mcu.com.cn -121- V1.4 Cmsemicon COMR [R] 操作: 寄存器 R 取反,结果放入 R 周期: 1 影响标志位: Z CMS89F23x5B 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 COMR R01 ;执行结果:R01=0F5H DECA [R] 操作: 寄存器 R 自减 1,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 DECA R01 ;执行结果:ACC=(0AH-1)=09H DECR [R] 操作: 寄存器 R 自减 1,结果放入 R 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 DECR R01 ;执行结果:R01=(0AH-1)=09H HSUBA [R] 操作: ACC 减 R,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 077H ;ACC 赋值 077H LD R01,A ;将 ACC 的值(077H)赋给寄存器 R01 LDIA 080H ;ACC 赋值 080H HSUBA R01 ;执行结果:ACC=(80H-77H)=09H www.mcu.com.cn -122- V1.4 Cmsemicon HSUBR [R] 操作: ACC 减 R,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV CMS89F23x5B 举例: LDIA 077H ;ACC 赋值 077H LD R01,A ;将 ACC 的值(077H)赋给寄存器 R01 LDIA 080H ;ACC 赋值 080H HSUBR R01 ;执行结果:R01=(80H-77H)=09H HSUBCA [R] 操作: ACC 减 R 减 C ,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 077H ;ACC 赋值 077H LD R01,A ;将 ACC 的值(077H)赋给寄存器 R01 LDIA HSUBCA 080H R01 ;ACC 赋值 080H ;执行结果:ACC=(80H-77H- C )=08H(C=0) ACC=(80H-77H- C )=09H(C=1) HSUBCR [R] 操作: ACC 减 R 减 C ,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 077H ;ACC 赋值 077H LD R01,A ;将 ACC 的值(077H)赋给寄存器 R01 LDIA HSUBCR 080H R01 ;ACC 赋值 080H ;执行结果:R01=(80H-77H- C )=08H(C=0) R01=(80H-77H- C )=09H(C=1) INCA [R] 操作: 寄存器 R 自加 1,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 INCA R01 ;执行结果:ACC=(0AH+1)=0BH www.mcu.com.cn -123- V1.4 Cmsemicon INCR [R] 操作: 寄存器 R 自加 1,结果放入 R 周期: 1 影响标志位: Z CMS89F23x5B 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;将 ACC 的值(0AH)赋给寄存器 R01 INCR R01 ;执行结果:R01=(0AH+1)=0BH JP add 操作: 跳转到 add 地址 周期: 2 影响标志位: 无 举例: JP LOOP LD A,[R] 操作: 将 R 的值赋给 ACC 周期: 1 影响标志位: Z ;跳转至名称定义为”LOOP”的子程序地址 举例: LD A,R01 ;将寄存器 R0 的值赋给 ACC LD R02,A ;将 ACC 的值赋给寄存器 R02,实现了数据从 R01→R02 的移动 LD [R],A 操作: 将 ACC 的值赋给 R 周期: 1 影响标志位: 无 举例: LDIA 09H ;给 ACC 赋值 09H LD R01,A ;执行结果:R01=09H LDIA i 操作: 立即数 i 赋给 ACC 周期: 1 影响标志位: 无 举例: LDIA www.mcu.com.cn 0AH ;ACC 赋值 0AH -124- V1.4 Cmsemicon CMS89F23x5B NOP 操作: 空指令 周期: 1 影响标志位: 无 举例: NOP NOP ORIA i 操作: 立即数与 ACC 进行逻辑或操作,结果赋给 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH ORIA 030H ;执行结果:ACC =(0AH or ORA [R] 操作: 寄存器 R 跟 ACC 进行逻辑或运算,结果放入 ACC 周期: 1 影响标志位: Z 30H)=3AH 举例: LDIA 0AH ;给 ACC 赋值 0AH LD R01,A ;将 ACC(0AH)赋给寄存器 R01 LDIA 30H ;给 ACC 赋值 30H ORA R01 ;执行结果:ACC=(0AH or ORR [R] 操作: 寄存器 R 跟 ACC 进行逻辑或运算,结果放入 R 周期: 1 影响标志位: Z 30H)=3AH 举例: LDIA 0AH ;给 ACC 赋值 0AH LD R01,A ;将 ACC(0AH)赋给寄存器 R01 LDIA 30H ;给 ACC 赋值 30H ORR R01 ;执行结果:R01=(0AH or www.mcu.com.cn -125- 30H)=3AH V1.4 Cmsemicon CMS89F23x5B RET 操作: 从子程序返回 周期: 2 影响标志位: 无 举例: CALL LOOP ;调用子程序 LOOP NOP ;RET 指令返回后将执行这条语句 … ;其它程序 … ;子程序 RET ;子程序返回 LOOP: RET i 操作: 从子程序带参数返回,参数放入 ACC 周期: 2 影响标志位: 无 举例: CALL LOOP ;调用子程序 LOOP NOP ;RET 指令返回后将执行这条语句 … ;其它程序 … ;子程序 LOOP: RET 35H ;子程序返回,ACC=35H RETI 操作: 中断返回 周期: 2 影响标志位: 无 举例: INT_START ;中断程序入口 … ;中断处理程序 RETI ;中断返回 RLCA [R] 操作: 寄存器 R 带 C 循环左移一位,结果放入 ACC 周期: 1 影响标志位: C 举例: LDIA 03H ;ACC 赋值 03H LD RLCA R01,A R01 ;ACC 值赋给 R01,R01=03H www.mcu.com.cn ;操作结果:ACC=06H(C=0); ACC=07H(C=1) C=0 -126- V1.4 Cmsemicon CMS89F23x5B RLCR [R] 操作: 寄存器 R 带 C 循环左移一位,结果放入 R 周期: 1 影响标志位: C 举例: LDIA 03H ;ACC 赋值 03H LD RLCR R01,A R01 ;ACC 值赋给 R01,R01=03H ;操作结果:R01=06H(C=0); R01=07H(C=1); C=0 RLA [R] 操作: 寄存器 R 不带 C 循环左移一位,结果放入 ACC 周期: 1 影响标志位: 无 举例: LDIA 03H ;ACC 赋值 03H LD R01,A ;ACC 值赋给 R01,R01=03H RLA R01 ;操作结果:ACC=06H RLR [R] 操作: 寄存器 R 不带 C 循环左移一位,结果放入 R 周期: 1 影响标志位: 无 举例: LDIA 03H ;ACC 赋值 03H LD R01,A ;ACC 值赋给 R01,R01=03H RLR R01 ;操作结果:R01=06H RRCA [R] 操作: 寄存器 R 带 C 循环右移一位,结果放入 ACC 周期: 1 影响标志位: C 举例: LDIA 03H ;ACC 赋值 03H LD RRCA R01,A R01 ;ACC 值赋给 R01,R01=03H www.mcu.com.cn ;操作结果:ACC=01H(C=0); ACC=081H(C=1); C=1 -127- V1.4 Cmsemicon CMS89F23x5B RRCR [R] 操作: 寄存器 R 带 C 循环右移一位,结果放入 R 周期: 1 影响标志位: C 举例: LDIA 03H ;ACC 赋值 03H LD RRCR R01,A R01 ;ACC 值赋给 R01,R01=03H ;操作结果:R01=01H(C=0); R01=81H(C=1); C=1 RRA [R] 操作: 寄存器 R 不带 C 循环右移一位,结果放入 ACC 周期: 1 影响标志位: 无 举例: LDIA 03H ;ACC 赋值 03H LD R01,A ;ACC 值赋给 R01,R01=03H RRA R01 ;操作结果:ACC=81H RRR [R] 操作: 寄存器 R 不带 C 循环右移一位,结果放入 R 周期: 1 影响标志位: 无 举例: LDIA 03H ;ACC 赋值 03H LD R01,A ;ACC 值赋给 R01,R01=03H RRR R01 ;操作结果:R01=81H SET [R] 操作: 寄存器 R 所有位置 1 周期: 1 影响标志位: 无 举例: SET R01 SETB [R],b 操作: 寄存器 R 的第 b 位置 1 周期: 1 影响标志位: 无 ;操作结果:R01=0FFH 举例: CLR R01 ;R01=0 SETB R01,3 ;操作结果:R01=08H www.mcu.com.cn -128- V1.4 Cmsemicon CMS89F23x5B STOP 操作: 进入休眠状态 周期: 1 影响标志位: TO,PD 举例: ;芯片进入省电模式,CPU、振荡器停止工作,IO 口保持原来状态 STOP SUBIA i 操作: 立即数 i 减 ACC,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 077H ;ACC 赋值 77H SUBIA 80H ;操作结果:ACC=80H-77H=09H SUBA [R] 操作: 寄存器 R 减 ACC,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 080H ;ACC 赋值 80H LD R01,A ;ACC 的值赋给 R01,R01=80H LDIA 77H ;ACC 赋值 77H SUBA R01 ;操作结果:ACC=80H-77H=09H SUBR [R] 操作: 寄存器 R 减 ACC,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 080H ;ACC 赋值 80H LD R01,A ;ACC 的值赋给 R01,R01=80H LDIA 77H ;ACC 赋值 77H SUBR R01 ;操作结果:R01=80H-77H=09H www.mcu.com.cn -129- V1.4 Cmsemicon CMS89F23x5B SUBCA [R] 操作: 寄存器 R 减 ACC 减 C,结果放入 ACC 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 080H ;ACC 赋值 80H LD R01,A ;ACC 的值赋给 R01,R01=80H LDIA SUBCA 77H R01 ;ACC 赋值 77H ;操作结果:ACC=80H-77H-C=09H(C=0); ACC=80H-77H-C=08H(C=1); SUBCR [R] 操作: 寄存器 R 减 ACC 减 C,结果放入 R 周期: 1 影响标志位: C,DC,Z,OV 举例: LDIA 080H ;ACC 赋值 80H LD R01,A ;ACC 的值赋给 R01,R01=80H LDIA SUBCR 77H R01 ;ACC 赋值 77H ;操作结果:R01=80H-77H-C=09H(C=0) R01=80H-77H-C=08H(C=1) SWAPA [R] 操作: 寄存器 R 高低半字节交换,结果放入 ACC 周期: 1 影响标志位: 无 举例: LDIA 035H ;ACC 赋值 35H LD R01,A ;ACC 的值赋给 R01,R01=35H SWAPA R01 ;操作结果:ACC=53H SWAPR [R] 操作: 寄存器 R 高低半字节交换,结果放入 R 周期: 1 影响标志位: 无 举例: LDIA 035H ;ACC 赋值 35H LD R01,A ;ACC 的值赋给 R01,R01=35H SWAPR R01 ;操作结果:R01=53H www.mcu.com.cn -130- V1.4 Cmsemicon CMS89F23x5B SZB [R],b 操作: 判断寄存器 R 的第 b 位,为 0 间跳,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZB R01,3 ;判断寄存器 R01 的第 3 位 JP LOOP ;R01 的第 3 位为 1 才执行这条语句,跳转至 LOOP JP LOOP1 ;R01 的第 3 位为 0 时间跳,执行这条语句,跳转至 LOOP1 SNZB [R],b 操作: 判断寄存器 R 的第 b 位,为 1 间跳,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SNZB R01,3 ;判断寄存器 R01 的第 3 位 JP LOOP ;R01 的第 3 位为 0 才执行这条语句,跳转至 LOOP JP LOOP1 ;R01 的第 3 位为 1 时间跳,执行这条语句,跳转至 LOOP1 SZA [R] 操作: 将寄存器 R 的值赋给 ACC,若 R 为 0 则间跳,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZA R01 ;R01→ACC JP LOOP ;R01 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ;R01 为 0 时间跳,执行这条语句,跳转至 LOOP1 SZR [R] 操作: 将寄存器 R 的值赋给 R,若 R 为 0 则间跳,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZR R01 ;R01→R01 JP LOOP ;R01 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ;R01 为 0 时间跳执行这条语句,跳转至 LOOP1 www.mcu.com.cn -131- V1.4 Cmsemicon CMS89F23x5B SZINCA [R] 操作: 将寄存器 R 自加 1,结果放入 ACC,若结果为 0,则跳过下一条语句,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZINCA R01 ;R01+1→ACC JP LOOP ;ACC 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ;ACC 为 0 时执行这条语句,跳转至 LOOP1 SZINCR [R] 操作: 将寄存器 R 自加 1,结果放入 R,若结果为 0,则跳过下一条语句,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZINCR R01 ;R01+1→R01 JP LOOP ; R01 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ; R01 为 0 时执行这条语句,跳转至 LOOP1 SZDECA [R] 操作: 将寄存器 R 自减 1,结果放入 ACC,若结果为 0,则跳过下一条语句,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZDECA R01 ;R01-1→ACC JP LOOP ;ACC 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ;ACC 为 0 时执行这条语句,跳转至 LOOP1 SZDECR [R] 操作: 将寄存器 R 自减 1,结果放入 R,若结果为 0,则跳过下一条语句,否则顺序执行 周期: 1 or 2 影响标志位: 无 举例: SZDECR R01 ;R01-1→R01 JP LOOP ; R01 不为 0 时执行这条语句,跳转至 LOOP JP LOOP1 ; R01 为 0 时执行这条语句,跳转至 LOOP1 www.mcu.com.cn -132- V1.4 Cmsemicon CMS89F23x5B TABLE [R] 操作: 查表,查表结果低 8 位放入 R,高位放入专用寄存器 TABLE_DATAH 周期: 2 影响标志位: 无 举例: LDIA 01H ;ACC 赋值 01H LD TABLE_SPH,A ;ACC 值赋给表格高位地址,TABLE_SPH=1 LDIA 015H ;ACC 赋值 15H LD TABLE_SPL,A ;ACC 值赋给表格地位地址,TABLE_SPL=15H TABLE R01 ;查表 0115H 地址,操作结果:TABLE_DATAH=12H,R01=34H … ORG 0115H DW 1234H TABLEA 操作: 查表,查表结果低 8 位放入 ACC,高位放入专用寄存器 TABLE_DATAH 周期: 2 影响标志位: 无 举例: LDIA 01H ;ACC 赋值 01H LD TABLE_SPH,A ;ACC 值赋给表格高位地址,TABLE_SPH=1 LDIA 015H ;ACC 赋值 15H LD TABLE_SPL,A ;ACC 值赋给表格地位地址,TABLE_SPL=15H ;查表 0115H 地址,操作结果:TABLE_DATAH=12H,ACC=34H TABLEA … ORG 0115H DW 1234H TESTZ [R] 操作: 将 R 的值赋给 R,用以影响 Z 标志位 周期: 1 影响标志位: Z 举例: TESTZ R0 ;将寄存器 R0 的值赋给 R0,用于影响 Z 标志位 SZB STATUS,Z ;判断 Z 标志位,为 0 间跳 JP Add1 ;当寄存器 R0 为 0 的时候跳转至地址 Add1 JP Add2 ;当寄存器 R0 不为 0 的时候跳转至地址 Add2 www.mcu.com.cn -133- V1.4 Cmsemicon CMS89F23x5B XORIA i 操作: 立即数与 ACC 进行逻辑异或运算,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH XORIA 0FH ;执行结果:ACC=05H XORA [R] 操作: 寄存器 R 与 ACC 进行逻辑异或运算,结果放入 ACC 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;ACC 值赋给 R01,R01=0AH LDIA 0FH ;ACC 赋值 0FH XORA R01 ;执行结果:ACC=05H XORR [R] 操作: 寄存器 R 与 ACC 进行逻辑异或运算,结果放入 R 周期: 1 影响标志位: Z 举例: LDIA 0AH ;ACC 赋值 0AH LD R01,A ;ACC 值赋给 R01,R01=0AH LDIA 0FH ;ACC 赋值 0FH XORR R01 ;执行结果:R01=05H www.mcu.com.cn -134- V1.4 Cmsemicon CMS89F23x5B 18. 封装 18.1 SOP16 Millimeter Symbol Min Nom Max A - - 1.75 A1 1.10 - 0.225 A2 1.30 1.40 1.50 A3 0.60 0.65 0.70 b 0.39 - 0.47 b1 0.38 0.41 0.44 c 0.20 - 0.24 c1 0.19 0.20 0.21 D 9.80 9.90 10.00 E 5.80 6.00 6.20 E1 3.80 3.90 4.00 e 1.27BSC h 0.25 - 0.50 L 0.5 - 0.80 L1 θ www.mcu.com.cn 1.05REF 0 - -135- 8° V1.4 Cmsemicon CMS89F23x5B 18.2 SOP20 Millimeter Symbol Min Nom Max A - - 2.65 A1 1.10 - 0.30 A2 2.25 2.30 2.35 A3 0.97 1.02 1.07 b 0.35 - 0.43 b1 0.34 0.37 0.40 c 0.25 - 0.29 c1 0.24 0.25 0.26 D 12.70 12.80 12.90 E 10.10 10.30 10.50 E1 7.40 7.50 7.60 e L 1.27BSC 0.70 - L1 θ www.mcu.com.cn 1.00 1.40REF 0 - -136- 8° V1.4 Cmsemicon CMS89F23x5B 18.3 SOP28 Symbol Millimeter Min Nom Max A - - 2.65 A1 0.10 - 0.30 A2 2.25 2.30 2.35 A3 0.97 1.02 1.07 b 0.39 - 0.47 b1 0.38 0.41 0.44 c 0.25 - 0.29 c1 0.24 0.25 0.26 D 17.90 18.00 18.10 E 10.10 10.30 10.50 E1 7.40 7.50 7.60 e L 1.27BSC 0.70 - L1 θ www.mcu.com.cn 1.00 1.40REF 0 - -137- 8° V1.4 Cmsemicon CMS89F23x5B 18.4 LQFP32 Symbol Millimeter Min Nom Max A - - 1.60 A1 0.05 - 0.25 A2 1.35 1.40 1.45 A3 0.59 0.64 0.69 b 0.33 - 0.41 b1 0.32 0.35 0.38 c 0.13 - 0.17 c1 0.12 0.13 0.14 D 8.80 9.00 9.20 D1 6.90 7.00 7.10 E 8.80 9.00 9.20 E1 6.90 7.00 7.10 eB 8.10 - 8.25 e L 0.80BSC 0.40 - L1 θ www.mcu.com.cn 0.65 1.00REF 0° - -138- 7° V1.4 Cmsemicon CMS89F23x5B 19. 版本修订说明 版本号 时间 修改内容 V1.0 2018 年 7 月 初始版本 V1.1 2018 年 8 月 更正部分文字描述错误 1. 每个芯片型号增加管脚说明 2. USART0 寄存器名称后面加 0 3. RCSTAx 寄存器的 RC9 位改为 RC9ENx,TXSTA 寄存器的 V1.2 2018 年 8 月 TX9 位改为 TX9ENx 4. BAUDCTLx 寄存器 BRG16 位改为 BRG16ENx,TXSTA 寄 存器 BRGH 位改为 BRGHENx 5. 修改 USART 模块章节里面相关控制位的名称 V1.3 2018 年 12 月 V1.4 2019 年 6 月 www.mcu.com.cn 1. 添加 CMS89F2385B1 引脚图及相关说明 2. 更正 PIE1/PIR1 寄存器中与 USART 相关的位定义 1. 增加 OSCCON 寄存器 IRCF 写 000 的注意事项 2. 修改 LED 模块寄存器的一些注意事项 -139- V1.4
CMS89F23A5B 价格&库存

很抱歉,暂时无法提供与“CMS89F23A5B”相匹配的价格&库存,您可以联系我们找货

免费人工找货