Cmsemicon
CMS89F73x5
CMS89F73x5
用户手册
增强型闪存 8 位
CMOS 单片机
V1.1
请注意以下有关CMS知识产权政策
*中微半导体公司已申请了专利,享有绝对的合法权益。与中微半导体公司MCU或其他产品有关的专利权并未
被同意授权使用,任何经由不当手段侵害中微半导体公司专利权的公司、组织或个人,中微半导体公司将采取
一切可能的法律行动,遏止侵权者不当的侵权行为,并追讨中微半导体公司因侵权行为所受的损失、或侵权者
所得的不法利益。
*中微的名称和标识都是中微半导体公司的注册商标。
*中微半导体公司保留对规格书中产品在可靠性、功能和设计方面的改进作进一步说明的权利。然而中微半导
体公司对于规格内容的使用不负责任。文中提到的应用其目的仅仅是用来做说明,中微半导体公司不保证和不
表示这些应用没有更深入的修改就能适用,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成
危害的地方。中微半导体公司产品不授权适用于救生、维生器件或系统中作为关键器件。中微半导体公司拥有
不事先通知而修改产品的权利,对于最新的信息,请参考我们的网站http://www.mcu.com.cn
www.mcu.com.cn
-1-
V1.1
Cmsemicon
CMS89F73x5
目录
1. 产品概述 ................................................................................................................................ 1
1.1
功能特性 ................................................................................................................................................................ 1
1.2
系统结构框图 ......................................................................................................................................................... 2
1.3
管脚分布 ................................................................................................................................................................ 3
1.3.1
CMS89F7365 引脚图...........................................................................................................................................3
1.3.2
CMS89F7385 引脚图...........................................................................................................................................3
1.4
系统配置寄存器 ...................................................................................................................................................... 5
1.5
在线串行编程 ......................................................................................................................................................... 6
2. 中央处理器(CPU) .............................................................................................................. 7
内存 ....................................................................................................................................................................... 7
2.1
2.1.1
程序内存 .............................................................................................................................................................7
2.1.1.1
复位向量(0000H) ....................................................................................................................................7
2.1.1.2
中断向量 .....................................................................................................................................................8
2.1.1.3
查表 ............................................................................................................................................................9
2.1.1.4
跳转表....................................................................................................................................................... 11
2.1.2
2.2
数据存储器 ........................................................................................................................................................ 12
寻址方式 ...............................................................................................................................................................17
2.2.1
直接寻址 ........................................................................................................................................................... 17
2.2.2
立即寻址 ........................................................................................................................................................... 17
2.2.3
间接寻址 ........................................................................................................................................................... 17
2.3
堆栈 ......................................................................................................................................................................18
2.4
工作寄存器(ACC)..............................................................................................................................................19
2.4.1
概述 .................................................................................................................................................................. 19
2.4.2
ACC 应用 .......................................................................................................................................................... 19
2.5
程序状态寄存器(STATUS) .................................................................................................................................20
2.6
预分频器(OPTION_REG) ..................................................................................................................................22
2.7
程序计数器(PC) ................................................................................................................................................24
2.8
看门狗计数器(WDT) ..........................................................................................................................................26
2.8.1
WDT 周期 ......................................................................................................................................................... 26
2.8.2
看门狗定时器控制寄存器 WDTCON ................................................................................................................... 26
3. 系统时钟 .............................................................................................................................. 27
3.1
概述 ......................................................................................................................................................................27
3.2
系统振荡器 ............................................................................................................................................................28
3.2.1
内部 RC 振荡..................................................................................................................................................... 28
3.2.2
外部 XT 振荡 ..................................................................................................................................................... 28
3.3
起振时间 ...............................................................................................................................................................28
3.4
振荡器控制寄存器..................................................................................................................................................29
4. 复位...................................................................................................................................... 30
4.1
上电复位 ...............................................................................................................................................................30
4.2
掉电复位 ...............................................................................................................................................................31
4.2.1
概述 .................................................................................................................................................................. 31
4.2.2
掉电复位的改进办法 .......................................................................................................................................... 32
www.mcu.com.cn
-2-
V1.1
Cmsemicon
4.3
CMS89F73x5
看门狗复位 ............................................................................................................................................................32
5. 休眠模式 .............................................................................................................................. 33
5.1
进入休眠模式 ........................................................................................................................................................33
5.2
从休眠状态唤醒 .....................................................................................................................................................33
5.3
使用中断唤醒 ........................................................................................................................................................33
5.4
休眠模式应用举例..................................................................................................................................................34
5.5
休眠模式唤醒时间..................................................................................................................................................34
6. I/O 端口 ................................................................................................................................ 35
6.1
I/O 口结构图 ..........................................................................................................................................................36
6.2
PORTA .................................................................................................................................................................38
6.2.1
PORTA 数据及方向控制..................................................................................................................................... 38
6.2.2
PORTA 上拉电阻 ............................................................................................................................................... 39
6.2.3
PORTA 模拟选择控制 ........................................................................................................................................ 39
6.3
PORTB .................................................................................................................................................................40
6.3.1
PORTB 数据及方向 ........................................................................................................................................... 40
6.3.2
PORTB 上拉电阻............................................................................................................................................... 41
6.3.3
PORTB 模拟选择控制 ........................................................................................................................................ 41
6.3.4
PORTB 电平变化中断 ........................................................................................................................................ 42
6.3.5
PORTB 下拉电阻............................................................................................................................................... 42
6.4
PORTC .................................................................................................................................................................43
6.4.1
PORTC 数据及方向 ........................................................................................................................................... 43
6.4.2
PORTC 上拉电阻 .............................................................................................................................................. 44
6.4.3
PORTC 模拟选择控制........................................................................................................................................ 44
6.5
PORTD .................................................................................................................................................................45
6.5.1
PORTD 数据及方向 ........................................................................................................................................... 45
6.5.2
PORTD 上拉电阻 .............................................................................................................................................. 46
6.6
I/O 使用.................................................................................................................................................................47
6.6.1
写 I/O 口............................................................................................................................................................ 47
6.6.2
读 I/O 口............................................................................................................................................................ 47
6.7
I/O 口使用注意事项................................................................................................................................................48
7. 中断...................................................................................................................................... 49
7.1
中断概述 ...............................................................................................................................................................49
7.2
中断控制寄存器 .....................................................................................................................................................50
7.2.1
中断控制寄存器 ................................................................................................................................................. 50
7.2.2
外设中断允许寄存器 .......................................................................................................................................... 51
7.2.3
外设中断请求寄存器 .......................................................................................................................................... 53
7.3
中断现场的保护方法 ..............................................................................................................................................55
7.4
中断的优先级,及多中断嵌套.................................................................................................................................55
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
www.mcu.com.cn
-3-
V1.1
Cmsemicon
CMS89F73x5
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
外部时钟源 ........................................................................................................................................................ 61
9.4
TIMER1 预分频器 ..................................................................................................................................................62
9.5
TIMER1 振荡器 .....................................................................................................................................................62
9.6
在异步计数器模式下的 TIMER1 工作原理 ...............................................................................................................62
9.6.1
异步计数器模式下对 TIMER1 的读写操作 ........................................................................................................... 62
9.7
TIMER1 门控.........................................................................................................................................................63
9.8
TIMER1 中断.........................................................................................................................................................63
9.9
休眠期间的 TIMER1 工作原理 ................................................................................................................................63
9.10
ECCP 捕捉/比较时基 .............................................................................................................................................63
9.11
ECCP 特殊事件触发器...........................................................................................................................................64
9.12
TIMER1 控制寄存器 ..............................................................................................................................................64
10. 定时计数器 TIMER2 ............................................................................................................. 65
10.1
TIMER2 概述.........................................................................................................................................................65
10.2
TIMER2 的工作原理 ..............................................................................................................................................66
10.3
TIMER2 相关的寄存器 ...........................................................................................................................................67
11. 模数转换(ADC) ............................................................................................................... 68
11.1
ADC 概述 ..............................................................................................................................................................68
11.2
ADC 配置 ..............................................................................................................................................................69
11.2.1 端口配置 ........................................................................................................................................................... 69
11.2.2 通道选择 ........................................................................................................................................................... 69
11.2.3 ADC 参考电压 ................................................................................................................................................... 69
11.2.4 转换时钟 ........................................................................................................................................................... 69
11.2.5 ADC 中断 .......................................................................................................................................................... 70
11.2.6 结果格式化 ........................................................................................................................................................ 70
11.3
ADC 工作原理 .......................................................................................................................................................71
11.3.1 启动转换 ........................................................................................................................................................... 71
11.3.2 完成转换 ........................................................................................................................................................... 71
11.3.3 终止转换 ........................................................................................................................................................... 71
11.3.4 ADC 在休眠模式下的工作原理 ........................................................................................................................... 71
11.3.5 A/D 转换步骤..................................................................................................................................................... 72
11.4
ADC 相关寄存器....................................................................................................................................................73
12. LCD/LED 驱动模块 .............................................................................................................. 76
12.1
LCD/LED 功能使能 ................................................................................................................................................76
12.2
LCD/LED 功能管脚设置 .........................................................................................................................................76
12.3
LCD/LED 功能 COM 口设置 ...................................................................................................................................77
12.4
LCD/LED 功能的 SEG 口设置 ................................................................................................................................77
www.mcu.com.cn
-4-
V1.1
Cmsemicon
CMS89F73x5
12.5
LED 功能的数据设置 .............................................................................................................................................78
12.6
LCD/LED 相关寄存器.............................................................................................................................................79
13. 捕捉/比较/PWM 模块(CCP1 和 CCP2) ............................................................................ 82
13.1
捕捉模式 ...............................................................................................................................................................83
13.1.1 CCP 引脚配置 ................................................................................................................................................... 83
13.1.2 TIMER1 模式选择 .............................................................................................................................................. 83
13.1.3 软件中断 ........................................................................................................................................................... 83
13.1.4 CCP 预分频器 ................................................................................................................................................... 84
13.2
比较模式 ...............................................................................................................................................................85
13.2.1 CCP 引脚配置 ................................................................................................................................................... 85
13.2.2 TIMER1 模式选择 .............................................................................................................................................. 85
13.2.3 软件中断模式 .................................................................................................................................................... 85
13.2.4 特殊事件触发信号.............................................................................................................................................. 86
13.3
PWM 模式 .............................................................................................................................................................87
13.3.1 PWM 周期 ......................................................................................................................................................... 89
13.3.2 PWM 占空比 ..................................................................................................................................................... 89
13.3.3 PWM 分辨率 ..................................................................................................................................................... 90
13.3.4 休眠模式下的操作.............................................................................................................................................. 90
13.3.5 系统时钟频率的改变 .......................................................................................................................................... 90
13.3.6 复位的影响 ........................................................................................................................................................ 90
13.3.7 设置 PWM 操作 ................................................................................................................................................. 90
14. 通用同步/异步收发器(USART0 和 USART1) .................................................................. 91
14.1
USART 异步模式 ...................................................................................................................................................93
14.1.1 USART 异步发生器 ........................................................................................................................................... 93
14.1.1.1
使能发送器 ............................................................................................................................................ 93
14.1.1.2
发送数据 ............................................................................................................................................... 93
14.1.1.3
发送中断标志 ........................................................................................................................................ 94
14.1.1.4
TSR 状态 .............................................................................................................................................. 94
14.1.1.5
发送 9 位字符 ........................................................................................................................................ 94
14.1.1.6
设置异步发送 ........................................................................................................................................ 95
14.1.2 USART 异步接收器 ........................................................................................................................................... 96
14.1.2.1
使能接收器 ............................................................................................................................................ 96
14.1.2.2
接收数据 ............................................................................................................................................... 96
14.1.2.3
接收中断 ............................................................................................................................................... 97
14.1.2.4
接收帧错误 ............................................................................................................................................ 97
14.1.2.5
接收溢出错误 ........................................................................................................................................ 97
14.1.2.6
接收 9 位字符 ........................................................................................................................................ 97
14.1.2.7
异步接收设置 ........................................................................................................................................ 98
14.2
异步操作时的时钟准确度 .......................................................................................................................................99
14.3
USART 相关寄存器 ...............................................................................................................................................99
14.4
USART 波特率发生器(BRG) ............................................................................................................................ 101
14.5
USART 同步模式 ................................................................................................................................................. 102
14.5.1 同步主控模式 .................................................................................................................................................. 102
14.5.1.1
主控时钟 ............................................................................................................................................. 102
14.5.1.2
时钟极性 ............................................................................................................................................. 102
www.mcu.com.cn
-5-
V1.1
Cmsemicon
CMS89F73x5
14.5.1.3
同步主控发送 ...................................................................................................................................... 102
14.5.1.4
同步主控发送设置................................................................................................................................ 103
14.5.1.5
同步主控接收 ...................................................................................................................................... 104
14.5.1.6
从时钟................................................................................................................................................. 104
14.5.1.7
接收溢出错误 ...................................................................................................................................... 104
14.5.1.8
接收 9 位字符 ...................................................................................................................................... 104
14.5.1.9
同步主控接收设置................................................................................................................................ 105
14.5.2 同步从动模式 .................................................................................................................................................. 106
14.5.2.1
USART 同步从动发送 .......................................................................................................................... 106
14.5.2.2
同步从动发送设置................................................................................................................................ 106
14.5.2.3
USART 同步从动接收 .......................................................................................................................... 106
14.5.2.4
同步从动接收设置................................................................................................................................ 106
15. 主控同步串行端口(MSSP)模块...................................................................................... 107
15.1
主控 SSP(MSSP)模块概述 .............................................................................................................................. 107
15.2
SPI 模式.............................................................................................................................................................. 107
15.2.1 SPI 相关寄存器 ............................................................................................................................................... 108
15.2.2 SPI 工作原理 ................................................................................................................................................... 110
15.2.3 使能 SPI I/O .................................................................................................................................................... 111
15.2.4 主控模式 ......................................................................................................................................................... 111
15.2.5 从动模式 ......................................................................................................................................................... 113
15.2.6 从动选择同步 .................................................................................................................................................. 113
15.2.7 休眠操作 ......................................................................................................................................................... 115
15.2.8 复位的影响 ...................................................................................................................................................... 115
15.3
I2C 模块 .............................................................................................................................................................. 116
15.3.1 相关寄存器说明 ............................................................................................................................................... 117
15.3.2 主控模式 ......................................................................................................................................................... 120
15.3.3 I2C 主控模式支持 ............................................................................................................................................. 120
15.3.3.1
I2C 主控模式操作 ................................................................................................................................. 121
15.3.4 波特率发生器 .................................................................................................................................................. 122
15.3.5 I2C 主控模式发送 ............................................................................................................................................. 123
15.3.5.1
BF 状态标志 ........................................................................................................................................ 123
15.3.5.2
WCOL 状态标志位 ............................................................................................................................... 123
15.3.5.3
ACKSTAT 状态标志 ............................................................................................................................. 123
15.3.6 I C 主控模式接收 ............................................................................................................................................. 124
2
15.3.6.1
BF 状态标志 ........................................................................................................................................ 124
15.3.6.2
WCOL 状态标志 .................................................................................................................................. 124
15.3.7 I C 主控模式启动条件时序 ............................................................................................................................... 126
2
15.3.7.1
WCOL 状态标志 .................................................................................................................................. 126
15.3.8 I C 主控模式重复启动条件时序 ........................................................................................................................ 127
2
15.3.8.1
WCOL 状态标志 .................................................................................................................................. 127
15.3.9 应答序列时序 .................................................................................................................................................. 128
15.3.9.1
WCOL 状态标志位 ............................................................................................................................... 128
15.3.10 停止条件序列 .................................................................................................................................................. 129
15.3.10.1
WCOL 状态标志 .................................................................................................................................. 129
15.3.11 时钟仲裁 ......................................................................................................................................................... 130
15.3.12 多主机模式 ...................................................................................................................................................... 130
www.mcu.com.cn
-6-
V1.1
Cmsemicon
CMS89F73x5
15.3.13 多主机通信、总线冲突与总线仲裁.................................................................................................................... 131
15.3.14 从动模式 ......................................................................................................................................................... 131
15.3.14.1
寻址 .................................................................................................................................................... 132
15.3.14.2
接收 .................................................................................................................................................... 132
15.3.14.3
发送 .................................................................................................................................................... 133
15.3.15 SSP 屏蔽寄存器 .............................................................................................................................................. 134
15.3.16 休眠模式下的操作............................................................................................................................................ 134
15.3.17 复位的影响 ...................................................................................................................................................... 134
16. 数据 EEPROM 和程序存储器控制...................................................................................... 135
16.1
概述 .................................................................................................................................................................... 135
16.2
相关寄存器 .......................................................................................................................................................... 136
16.2.1 EEADR 和 EEADRH 寄存器............................................................................................................................. 136
16.2.2 EECON1 和 EECON2 寄存器........................................................................................................................... 136
16.3
读数据 EEPROM ................................................................................................................................................. 138
16.4
写数据 EEPROM ................................................................................................................................................. 139
16.5
读程序存储器 ...................................................................................................................................................... 140
16.6
写程序存储器 ...................................................................................................................................................... 141
16.7
数据 EEPROM 操作注意事项 ............................................................................................................................... 142
16.7.1 写校验............................................................................................................................................................. 142
16.7.2 避免误写的保护 ............................................................................................................................................... 142
16.7.3 代码保护下的数据 EEPROM 操作 .................................................................................................................... 142
17. DIV 硬件除法器 .................................................................................................................. 143
17.1
硬件除法器概述 ................................................................................................................................................... 143
17.2
与硬件除法器相关的寄存器 .................................................................................................................................. 143
18. 触摸按键 ............................................................................................................................ 146
18.1
触摸按键模块概述................................................................................................................................................ 146
18.2
触摸模块使用注意事项......................................................................................................................................... 146
19. 电气参数 ............................................................................................................................ 147
19.1
极限参数 ............................................................................................................................................................. 147
19.2
直流电气特性 ...................................................................................................................................................... 147
19.3
ADC 电气特性 ..................................................................................................................................................... 148
19.4
上电复位特性 ...................................................................................................................................................... 148
19.5
交流电气特性 ...................................................................................................................................................... 148
20. 指令.................................................................................................................................... 149
20.1
指令一览表 .......................................................................................................................................................... 149
20.2
指令说明 ............................................................................................................................................................. 151
21. 封装.................................................................................................................................... 167
21.1
SOP20 ................................................................................................................................................................ 167
21.2
SOP28 ................................................................................................................................................................ 168
22. 版本修订说明 ..................................................................................................................... 169
www.mcu.com.cn
-7-
V1.1
Cmsemicon
CMS89F73x5
1. 产品概述
功能特性
1.1
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
内存
Flash:8Kx16
通用 RAM:256x8
内置触摸模块专用 RAM
8 级堆栈缓存器
简洁实用的指令系统(68 条指令)
查表功能
内置 WDT 定时器
内置低压侦测电路
中断源
3 个定时中断
RB 口电平变化中断
其它外设中断
定时器
8 位定时器 TIMER0,TIMER2
16 位定时器 TIMER1
捕捉、比较和 PWM 模块(CCP)
10 位 PWM 精度
2 路 PWM 可设置独立的周期和
占空比
可配置在 RB4/RB3 或 RC6/RC7
内置 64 字节数据 EEPROM
可重复擦写 100 万次
内置触摸按键模块
可配置成有外挂电容或无外挂
◆
工作电压范围: 3.3V~5.5V@16MHz
2.5V~5.5V@8MHz
◆
工作温度范围:-40℃~85℃
多种振荡方式
内部 RC 振荡:设计频率 8MHz/16MHz
外部 XT 振荡:最高 16MHz
指令周期(单指令或双指令)
内置 LED 驱动模块
最多可支持 11 段 8 位
COM 口有大电流驱动能力,可达 150mA
SEG 口电流可灵活配置为 2~30mA
内置 LCD1/2 Bias COM 驱动模块
最多可支持 8 个 COM 口
COM 口驱动电流可选
内置 MSSP 通信模块(SPI/ I2C)
I2C 支持主控和从动模式(7 位地址)
I2C 从动模式支持广播呼叫
SPI 支持主动/从动模式
内置 2 路 USART 通信模块
◆
◆
◆
◆
◆
◆
支持同步主从模式和异步全双工模式
串口 1 可配置在 RB4/RB3 或 RC6/RC7
高精度 12 位 ADC
内建高精度 1.2V 基准电压
±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
Touch
USART
PACKAGE
CMS89F7365
8Kx16
256x8
64x8
18
----
----
12Bitx16
16
2
SOP20
CMS89F7385
8Kx16
256x8
64x8
26
11segx8com
1/2Biasx8com
12Bitx24
16
2
SOP28
注:Flash----程序存储器
www.mcu.com.cn
Data EE----数据EEPROM
-1-
V1.1
Cmsemicon
1.2
CMS89F73x5
系统结构框图
8192×16
Program Memory
AD Converter
256×8
Data Memory
PC
TIMER0
Stack1
TIMER1
..
TIMER2
Addr Mux
Stack8
I/O PORT
Fsr Reg
Instruction Reg
CCP1/CCP2
LCD/LED
Instruction Decode
and Control
ACC
Mux
Device Reset Timer
MSSP
EEPROM
Power-on Reset
Touch
ALU
USART0
Timing Generation
Watch Dog Timer
USART1
DIV
OSC
www.mcu.com.cn
VDD,GND
-2-
V1.1
Cmsemicon
1.3
CMS89F73x5
管脚分布
1.3.1 CMS89F7365 引脚图
VDD
1
20
RB6/TK14/AN14/OSCI
GND
2
19
RB5/TK13/AN13/OSCO/T1CKI
CAP/AN15/RD2
3
18
RB4/TK12/AN12/TX1/CK1/CCP2/T1G
ICSPDAT/TX0/CK0/TK15/RD1
4
17
RB3/TK11/AN11/RX1/DT1/CCP1
ICSPCLK/RX0/DT0/RD0
5
16
RB2/TK10/AN10
AN0/TK0/RA0
6
15
RB1/TK9/AN9/INT
AN1/TK1/RA1
7
14
RB0/TK8/AN8
AN2/TK2/RA2
8
13
RA7/TK7/AN7
AN3/TK3/RA3
9
12
RA6/TK6/AN6
10
11
RA5/TK5/AN5
T0CKI/AN4/TK4/RA4
CMS89F7365
1.3.2 CMS89F7385 引脚图
VDD
1
28
RB6/TK14/AN14/OSCI
GND
2
27
RB5/TK13/AN13/OSCO/T1CKI
CAP/AN15/RD2
3
26
RB4/TK12/AN12/TX1/CK1/CCP2/T1G
ICSPDAT/TX0/CK0/TK15/RD1
4
25
RB3/TK11/AN11/RX1/DT1/CCP1
ICSPCLK/RX0/DT0/RD0
5
24
RB2/SEG10/TK10/AN10
TX1/CK1/SDI/SDA/AN16/CCP2/COM7/RC7
6
23
RB1/SEG9/TK9/AN9/INT
RX1/DT1/SCK/SCL/AN17/CCP1/COM6/RC6
7
22
RB0/SEG8/TK8/AN8
SDO/AN18/COM5/RC5
8
21
RA7/SEG7/TK7/AN7
SS/AN19/COM4/RC4
9
20
RA6/SEG6/TK6/AN6
AN20/COM3/RC3
10
19
RA5/SEG5/TK5/AN5
AN21/COM2/RC2
11
18
RA4/SEG4/TK4/AN4/T0CKI
AN22/COM1/RC1
12
17
RA3/SEG3/TK3/AN3
AN23/COM0/RC0
13
16
RA2/SEG2/TK2/AN2
AN0/TK0/SEG0/RA0
14
15
RA1/SEG1/TK1/AN1
CMS89F7385
注:
1) RB4 和 RB3 的串口功能与 RC6 和 RC7 的串口功能由 CONFIG 设置;
2)
RB4 和 RB3 的 CCP 功能与 RC6 和 RC7 的 CCP 功能由 CONFIG 设置。
www.mcu.com.cn
-3-
V1.1
Cmsemicon
CMS89F73x5
引脚说明:
管脚名称
IO 类型
管脚说明
VDD,GND
P
电源电压输入脚,接地脚
OSCIN/OSCOUT
P
晶振输入/输出引脚
RA0-RA7
I/O
可编程为输入脚,推挽输出脚,带上拉电阻功能
RB0-RB6
I/O
可编程为输入脚,推挽输出脚,带上拉电阻功能、下拉电阻功能,电平变化中断功能
RC0-RC7
I/O
可编程为输入脚,推挽输出脚,带上拉电阻功能
RD0-RD2
I/O
可编程为输入脚,推挽输出脚,带上拉电阻功能
ICSPCLK/ICSPDAT
I/O
编程时钟/数据脚
KEY0-KEY15
-
触摸按键输入脚
CAP
-
触摸按键基准电容引脚
AN0-AN23
I
12 位 ADC 输入脚
SEG0-SEG10
O
LED 驱动段输出
COM0-COM7
O
LED/LCD 驱动公共端
T0CKI
I
TIMER0 外部时钟输入脚
T1CKI
I
TIMER1 外部时钟输入脚
T1G
I
TIMER1 门控输入脚
CCP1
I/O
捕捉/比较/PWM1
CCP2
I/O
捕捉/比较/PWM2
SCK
I/O
SPI 时钟输入脚
SDI
I
SPI 数据输入脚
SDO
O
SPI 数据输出脚
SS
I
SPI 从动选择输入脚
SCL
I/O
I2C 时钟输入/输出脚
SDA
I/O
I2C 数据输入/输出脚
TX0/CK0
I/O
USART0 异步发送输出/同步时钟输入/输出脚
RX0/DT0
I/O
USART0 异步接收输入/同步数据输入/输出脚
TX1/CK1
I/O
USART1 异步发送输出/同步时钟输入/输出脚
RX1/DT1
I/O
USART1 异步接收输入/同步数据输入/输出脚
www.mcu.com.cn
-4-
V1.1
Cmsemicon
CMS89F73x5
系统配置寄存器
1.4
系统配置寄存器(CONFIG)是 MCU 初始条件的 FLASH 选项。它只能被 CMS 烧写器烧写,用户不能访
问及操作。它包含了以下内容:
1.
OSC(振荡方式选择)
◆
2.
3.
4.
5.
6.
7.
8.
INTRC
内部 RC 振荡
◆ XT
外部晶体振荡
INTRC_SEL(内部振荡频率选择)
◆
INTRC8M
FOSC 选择内部 8MHz RC 振荡
◆
INTRC16M
FOSC 选择内部 16MHz RC 振荡
WDT(看门狗选择)
◆
ENABLE
打开看门狗定时器
◆
DISABLE
关闭看门狗定时器
PROTECT(加密)
◆
DISABLE
FLASH 代码不加密
◆
ENABLE
FLASH 代码加密,加密后烧写仿真器读出来的值将不确定
LVR_SEL(低压侦测电压选择)
◆
2.5V
◆
3.3V
ICSPPORT_SEL(仿真口功能选择)
◆
ICSP
ICSPCLK、DAT 口一直保持为仿真口,所有功能均不能使用
◆
NORMAL
ICSPCLK、DAT 口为普通功能口
USART1_SEL(TX1/RX1)
(USART1 端口选择)
◆
RC7/RC6
选择 RC7 为 TX1 口,RC6 为 RX1 口,
◆
RB4/RB3
选择 RB4 为 TX1 口,RB3 为 RX1 口
CCP_SEL(CCP 端口选择)
◆
RC6/RC7
选择 RC6 为 CCP1 口,RC7 为 CCP2 口
◆
RB3/RB4
选择 RB3 为 CCP1 口,RB4 为 CCP2 口
www.mcu.com.cn
-5-
V1.1
Cmsemicon
CMS89F73x5
在线串行编程
1.5
可在最终应用电路中对单片机进行串行编程。编程可以简单地通过以下 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
-6-
V1.1
Cmsemicon
CMS89F73x5
2. 中央处理器(CPU)
内存
2.1
2.1.1 程序内存
CMS89F73x5 程序存储器空间
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
;程序结束
-7-
V1.1
Cmsemicon
2.1.1.2
CMS89F73x5
中断向量
中断向量地址为 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
;返回
-8-
V1.1
Cmsemicon
2.1.1.3
CMS89F73x5
查表
芯片具有查表功能,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
-9-
V1.1
Cmsemicon
CMS89F73x5
下面例子给出了如何在程序中调用表格。
…
;上接用户程序
;表格低位地址
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 地址表格内容
-10-
V1.1
Cmsemicon
2.1.1.4
CMS89F73x5
跳转表
跳转表能够实现多地址跳转功能。由于 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
0111H:
JP
LOOP1
;ACC+PCL
;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
00FDH:
JP
LOOP1
;ACC+PCL
;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
-11-
V1.1
Cmsemicon
CMS89F73x5
2.1.2 数据存储器
CMS89F73x5 数据存储器列表
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
ANSEL0
PCLATH
INTCON
PIR1
PIR2
TMR1L
TMR1H
T1CON
TMR2
T2CON
SSPBUF
SSPCON
CCPR1L
CCPR1H
CCP1CON
RCSTA0
TXREG0
RCREG0
CCPR2L
CCPR2H
CCP2CON
TXSTA0
SPBRG0
地址
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
地址
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
ANSEL1
PCLATH
INTCON
PIE1
PIE2
WPUD
OSCCON
WDTCON
SSPCON2
PR2
SSPADD
SSPSTAT
WPUB
IOCB
WPDB
SPBRG1
PWMCON
PWM1CYC
PWM2CYC
ADRESL
ADRESH
ADCON0
ADCON1
快速存储区
70H-7FH
INDF
TMR0
PCL
STATUS
FSR
RCSTA1
PORTB
WPUA
WPUC
ANSEL2
PCLATH
INTCON
EEDAT
EEADR
EEDATH
EEADRH
TABLE_SPH
TABLE_SPL
TABLE_DATAH
LEDCON0
LEDCON1
LEDADD
LEDDATA
SEGEN2
SEGEN1
SEGEN0
COMEN
EECON1
EECON2
TXREG1
RCREG1
TXSTA1
地址
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
---TRISB
DIVS1
DIVS0
DIVCON
PCLATH
INTCON
DIVE3/DIVQ3
DIVE2/DIVQ2
DIVE1/DIVQ1
DIVE0/DIVQ0
-------------------------------------------------
地址
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
----
16FH
170H
-17FH
快速存储区
70H-7FH
1EFH
1F0H
-1FFH
BANK3
数据存储器由 512×8 位组成,分为两个功能区间:特殊功能寄存器和通用数据存储器。数据存储器单元
大多数是可读/写的,但有些只读的。特殊功能寄存器地址为从 00H-1FH,80-9FH,100-11FH,180-19FH。
www.mcu.com.cn
-12-
V1.1
Cmsemicon
CMS89F73x5
CMS89F73x5 特殊功能寄存器汇总 Bank0
地址
名称
00H
INDF
寻址该单元会使用FSR的内容寻址数据存储器(不是物理寄存器)
xxxxxxxx
01H
TMR0
TIMER0数据寄存器
xxxxxxxx
02H
PCL
程序计数器低字节
00000000
03H
STATUS
04H
FSR
05H
PORTA
06H
PORTB
----
07H
PORTC
RC7
08H
PORTD
----
----
----
09H
ANSEL0
0AH
PCLATH
----
---
0BH
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
00000000
0CH
PIR1
----
ADIF
RC0IF
TX0IF
SSPIF
CCP1IF
TMR2IF
TMR1IF
-0000000
0DH
PIR2
----
----
----
EEIF
BCLIF
TX1IF
RC1IF
CCP2IF
---00000
0EH
TMR1L
16位TIMER1寄存器低字节的数据寄存器
xxxxxxxx
0FH
TMR1H
16位TIMER1寄存器高字节的数据寄存器
xxxxxxxx
10H
T1CON
11H
TMR2
12H
T2CON
13H
SSPBUF
14H
SSPCON
15H
CCPR1L
捕捉/比较/PWM寄存器1的低字节
16H
CCPR1H
捕捉/比较/PWM寄存器1的高字节
17H
CCP1CON
18H
RCSTA0
19H
TXREG0
USART0发送数据寄存器
00000000
1AH
RCREG0
USART0接收数据寄存器
00000000
1BH
CCPR2L
捕捉/比较/PWM寄存器2的低字节
xxxxxxxx
1CH
CCPR2H
捕捉/比较/PWM寄存器2的高字节
1DH
CCP2CON
1EH
TXSTA0
CSRC0
1FH
SPBRG0
BRG07
www.mcu.com.cn
Bit7
Bit6
IRP
Bit5
RP1
Bit4
Bit3
Bit2
Bit1
Bit0
RP0
TO
PD
Z
DC
C
RA5
RA4
RA3
RA2
RA1
RA0
xxxxxxxx
RB6
RB5
RB4
RB3
RB2
RB1
RB0
-xxxxxxx
RC6
RC5
RC4
RC3
RC2
RC1
RC0
xxxxxxxx
----
----
RD2
RD1
RD0
-----xxx
间接数据存储器地址指针
RA7
TMR1GE
----
00000000
程序计数器高5位的写缓冲器
---00000
T1CKPS1
T1CKPS0
T1OSCEN
T1SYNC
TMR1CS
TMR1ON
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
CKP
SSPM3
SSPM2
SSPM1
SSPM0
TIMER2模块寄存器
----
TOUTPS3
SSPOV
00000000
00000000
同步串行端口接收缓冲器/发送寄存器
WCOL
00011xxx
xxxxxxxx
RA6
模拟输入控制寄存器0
T1GINV
复位值
SSPEN
-0000000
xxxxxxxx
00000000
xxxxxxxx
xxxxxxxx
----
----
DC1B1
DC1B0
CCP1M3
CCP1M2
CCP1M1
CCP1M0
--000000
SPEN0
RX9EN0
SREN0
CREN0
RCIDL0
FERR0
OERR0
RX9D0
00000000
----
----
xxxxxxxx
DC2B1
DC2B0
CCP2M3
TX9EN0
TXEN0
SYNC0
BRG06
BRG05
BRG04
-13-
CCP2M2
CCP2M1
CCP2M0
--000000
SCKP0
----
BRG03
BRG02
TRMT0
TX9D0
00000-10
BRG01
BRG00
00000000
V1.1
Cmsemicon
CMS89F73x5
CMS89F73x5 特殊功能寄存器汇总 Bank1
地址
名称
80H
INDF
81H
OPTION_REG
82H
PCL
83H
STATUS
84H
FSR
85H
TRISA
86H
TRISB
----
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
87H
TRISC
TRISC7
TRISC6
TRISC5
TRISC4
TRISC3
TRISC2
88H
TRISD
----
----
----
----
----
TRISD2
TRISD1
89H
ANSEL1
8AH
PCLATH
----
8BH
INTCON
GIE
PEIE
T01E
INTE
RBIE
T0IF
INTF
RBIF
00000000
8CH
PIE1
----
ADIE
RC0IE
TX0IE
SSPIE
CCP1IE
TMR2IE
TMR1IE
-0000000
8DH
PIE2
----
----
----
EEIE
BCLIE
TX1IE
RC1IE
CCP2IE
-0000000
8EH
WPUD
----
----
----
----
----
WPUD2
WPUD1
WPUD0
-----000
8FH
OSCCON
----
IRCF2
IRCF1
IRCF0
----
----
----
SCS
-110---0
90H
WDTCON
----
----
----
----
----
----
----
SWDTEN
91H
SSPCON2
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
92H
PR2
TIMER2周期寄存器
93H
SSPADD
同步串行端口(I2C模式)地址寄存器
93H
SSPMSK
MSK7
MSK6
MSK5
MSK4
MSK3
MSK2
MSK1
MSK0
11111111
94H
SSPSTAT
SMP
CKE
D/A
P
S
R/W
UA
BF
00000000
95H
WPUB
----
WPUB6
WPUB5
WPUB4
WPUB3
WPUB2
WPUB1
WPUB0
-0000000
96H
IOCB
----
IOCB6
IOCB5
IOCB4
IOCB3
IOCB2
IOCB1
IOCB0
-0000000
97H
WPDB
98H
SPBRG1
99H
PWMCON
9AH
PWM1CYC
PWM1周期数据寄存器
00000000
9BH
PWM2CYC
PWM2周期数据寄存器
00000000
9CH
ADRESL
A/D结果寄存器的低字节
xxxxxxxx
9DH
ADRESH
A/D结果寄存器的高字节
9EH
ADCON0
ADCS1
ADCS0
CHS3
CHS2
CHS1
CHS0
GO/ DONE
ADON
9FH
ADCON1
ADFM
CHS4
----
----
----
----
----
----
www.mcu.com.cn
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
PS2
PS1
PS0
寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器)
RBPU
INTEDG
T0CS
T0SE
PSA
xxxxxxxx
程序计数器(PC)的低字节
IRP
RP1
TRISA6
11111011
00000000
RP0
TO
PD
Z
DC
C
TRISA5
TRISA4
TRISA3
TRISA2
TRISA1
TRISA0
11111111
TRISB1
TRISB0
-1111111
TRISC1
TRISC0
11111111
TRISD0
-----111
间接数据存储器地址指针
TRISA7
复位值
00011xxx
xxxxxxxx
模拟输入控制寄存器1
----
00000000
程序计数器高5位的写缓冲器
----
---00000
-------0
00000000
11111111
00000000
----
WPDB6
WPDB5
WPDB4
WPDB3
WPDB2
WPDB1
WPDB0
-0000000
BRG17
BRG16
BRG15
BRG14
BRG13
BRG12
BRG11
BRG10
00000000
----
CYC2EN
----
CYC1EN
CK2[1:0]
CK1[1:0]
-000-000
xxxxxxxx
-14-
00000000
00------
V1.1
Cmsemicon
CMS89F73x5
CMS89F73x5 特殊功能寄存器汇总 Bank2
地址
名称
100H
INDF
寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器)
xxxxxxxx
101H
TMR0
TIMER0模块寄存器
xxxxxxxx
102H
PCL
程序计数器(PC)的低字节
00000000
103H
STATUS
104H
FSR
105H
RCSTA1
106H
PORTB
----
RB6
RB5
RB4
RB3
RB2
RB1
RB0
107H
WPUA
WPUA7
WPUA6
WPUA5
WPUA4
WPUA3
WPUA2
WPUA1
WPUA0
00000000
108H
WPUC
WPUC7
WPUC6
WPUC5
WPUC4
WPUC3
WPUC2
WPUC1
WPUC0
00000000
109H
ANSEL2
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
LEDCON0
LCDEN
LEDEN
COMSEL1
COMSEL0
114H
LEDCON1
----
LCDF
SEGOUT1
SEGOUT0
115H
LEDADD
LEDCS
----
COMSEL2
116H
LEDDATA
LED数据寄存器
117H
SEGEN2
SEG口驱动电流控制寄存器
118H
SEGEN1
SEG口控制寄存器1
-----000
119H
SEGEN0
SEG口控制寄存器0
00000000
11AH
COMEN
COM口控制寄存器
00000000
11BH
EECON1
11CH
EECON2
EEPROM控制寄存器2(不是物理寄存器)
--------
11DH
TXREG1
USART1发送数据寄存器
00000000
11EH
RCREG1
USART1接收数据寄存器
11FH
TXSTA1
www.mcu.com.cn
Bit7
Bit6
IRP
RP1
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
RP0
TO
PD
Z
DC
C
SREN1
CREN1
RCIDL1
FERR1
OERR1
RX9D1
间接数据存储器地址指针
SPEN1
RX9EN1
EEPGD
CSRC1
----
00011xxx
xxxxxxxx
模拟输入控制寄存器2
----
复位值
---
00000000
-xxxxxxx
0
程序计数器高5位的写缓冲器
---00000
---xxxxx
LCDCLK3
LCDCLK2
LCDCLK1
LCDCLK0
----
00000000
-000----
LCDADD[4:0]
0-000000
00000000
----
TX9EN1
----
----
----
WRERR
----
WREN
----
WR
----
RD
0000----
0---x000
00000000
TXEN1
SYNC1
-15-
SCKP1
----
TRMT1
TX9D1
00000-10
V1.1
Cmsemicon
CMS89F73x5
CMS89F73x5 特殊功能寄存器汇总 Bank3
地址
名称
180H
INDF
181H
OPTION_REG
182H
PCL
183H
STATUS
184H
FSR
186H
TRISB
187H
DIVS1
除数高8位
00000000
188H
DIVS0
除数低8位
00000000
189H
DIVCON
DIVEN
CAL_END
----
18AH
PCLATH
----
----
----
18BH
INTCON
GIE
PEIE
T01E
18CH
DIVE3
被除数或商BIT[31:24]
00000000
18DH
DIVE2
被除数或商BIT[23:16]
00000000
18EH
DIVE1
被除数或商BIT15:8]
00000000
18FH
DIVE0
被除数或商BIT[7:0]
00000000
www.mcu.com.cn
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
PS2
PS1
PS0
寻址该地址单元会使用FSR的内容寻址数据存储器(不是物理寄存器)
RBPU
INTEDG
T0CS
T0SE
PSA
xxxxxxxx
程序计(PC)的低字节
IRP
RP1
TRISB6
11111011
00000000
RP0
TO
PD
Z
DC
C
TRISB5
TRISB4
TRISB73
TRISB2
TRISB1
TRISB0
间接数据存储器地址指针
----
复位值
00011xxx
xxxxxxxx
----
----
----
----
DIV_CLK
T01F
INTF
RBIF
程序计数器高5位的写缓冲器
INTE
-16-
RBIE
-1111111
01-----0
---00000
00000000
V1.1
Cmsemicon
2.2
CMS89F73x5
寻址方式
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
-17-
V1.1
Cmsemicon
2.3
CMS89F73x5
堆栈
芯片的堆栈缓存器共 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
-18-
V1.1
Cmsemicon
2.4
CMS89F73x5
工作寄存器(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
-19-
V1.1
Cmsemicon
2.5
CMS89F73x5
程序状态寄存器(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低位没有向高位进位。
进位/借位位;
结果的最高位发生了进位或没有发生借位;
结果的最高位没有发生进位或发生了借位。
-20-
V1.1
Cmsemicon
CMS89F73x5
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 的状态
影响 TO/PD 的事件表
www.mcu.com.cn
-21-
V1.1
Cmsemicon
2.6
CMS89F73x5
预分频器(OPTION_REG)
OPTION_REG 寄存器为可读写的寄存器,各个控制位用于配置:
◆ TIMER0/WDT 预分频器。
◆ TIMER0。
◆ PORTB 上拉电阻控制。
预分频器 OPTION_REG(81H)
81H
Bit7
Bit6
Bit5
Bit4
Bit3
OPTION_REG
RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
读写
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
复位值
1
1
1
1
1
0
1
1
Bit7
Bit6
Bit5
Bit4
RBPU:
1=
0=
INTEDG:
1=
0=
T0CS:
0=
1=
T0SE:
0=
1=
Bit3
PSA:
0=
1=
Bit2~Bit0
PS2~PS0:
Bit2
Bit1
Bit0
PORTB 上拉使能位。
禁止 PORTB 上拉。
由端口的各个锁存值使能 PORTB 上拉。
触发中断的边沿选择位。
INT 引脚上升沿触发中断。
INT 引脚下降沿触发中断。
TIMER0 时钟源选择位。
内部指令周期时钟(FSYS/4)
。
T0CKI 引脚上的跳变沿。
TIMER0 时钟源边沿选择位。
在 T0CKI 引脚信号从低电平跳变到高电平时递增。
在 T0CKI 引脚信号从高电平跳变到低电平时递增。
预分频器分配位。
预分频器分配给 TIMER0 模块。
预分频器分配给 WDT。
预分配参数配置位。
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0
0
1
0
1
0
1
0
1
TMR0 分频比
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
WDT 分频比
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
-22-
V1.1
Cmsemicon
CMS89F73x5
由 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
-23-
V1.1
Cmsemicon
2.7
CMS89F73x5
程序计数器(PC)
程序计数器(PC)控制程序内存 FLASH 中的指令执行顺序,它可以寻址整个 FLASH 的范围,取得指令
码后,程序计数器(PC)会自动加一,指向下一个指令码的地址。但如果执行跳转、条件跳转、向 PCL 赋值、
子程序调用、初始化复位、中断、中断返回、子程序返回等操作时,PC 会加载与指令相关的地址而不是下一
条指令的地址。
当遇到条件跳转指令且符合跳转条件时,当前指令执行过程中读取的下一条指令将会被丢弃,且会插入一
个空指令操作周期,随后才能取得正确的指令。反之,就会顺序执行下一条指令。
程序计数器(PC)是 13Bit 宽度,低 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;
12
8 7
0
PC
将PCL作为目标寄存器的指令
PCLATH[4:0]
ALU结果[7:0]
PCLATH
12
10
8 7
0
JP 或 CALL指令
PC
PCLATH[4:3]
操作码[10:0]
PCLATH
www.mcu.com.cn
-24-
V1.1
Cmsemicon
CMS89F73x5
下面范例程序给出了使用 JP 或 CALL 指令的注意事项。
ORG
00H
JP
ORG
LABEL1:
ORG
LABLE4:
ORG
LABLE5:
ORG
LABLE2:
LABEL1
目标地址 LABEL1 位于 300H 地址,当前 PCLATH 值为
00H,在同一个 2K 范围内,所以在执行 JP 指令前,不需
要改变 PCLATH 值
08H
PCLATH,A
LABEL2
目标地址 LABEL2 位于 900H 地址,当前 PCLATH 值为
00H,不在同一个 2K 范围内,所以在执行 JP 指令前,需
要先对 PCLATH 赋值
…
300H
LDIA
LD
JP
…
7FEH
NOP
NOP
NOP
LDIA
LD
08H
PCLATH,A
JP
LABLE5
;7FEH
;7FFH
;800H
目标地址 LABEL5 位于 880H 地址,当前 PCLATH 值为
00H(程序正常运行,
当 PC 从 7FFH 变为 800H 时,
PCLATH
值不会随着变化),不在同一个 2K 范围内,所以在执行 JP
指令前,需要先对 PCLATH 赋值
…
880H
NOP
RET
…
900H
NOP
ORG
LABLE3:
CALL
LABLE3
LDIA
LD
CALL
NOP
…
…
0E00H
00H
PCLATH,A
LABLE4
目标地址 LABEL3 位于 E00H 地址,当前 PCLATH 值为
08H,在同一个 2K 范围内,所以在执行 CALL 指令前,不
需要改变 PCLATH 值
目标地址 LABEL4 位于 7FEH 地址,当前 PCLATH 值为
08H,不在同一个 2K 范围内,所以在执行 CALL 指令前,
需要先对 PCLATH 赋值
NOP
RET
…
www.mcu.com.cn
-25-
V1.1
Cmsemicon
CMS89F73x5
看门狗计数器(WDT)
2.8
看门狗定时器(Watch Dog 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(90H)
90H
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
-26-
V1.1
Cmsemicon
CMS89F73x5
3. 系统时钟
概述
3.1
时钟信号从 OSCIN 引脚输入后(或者由内部振荡产生),在片内产生 4 个非重叠正交时钟信号,分别称作
Q1、Q2、Q3、Q4。在 IC 内部每个 Q1 使程序计数器(PC)增量加一,Q4 从程序存储单元中取出该指令,
并将其锁存在指令寄存器中。在下一个 Q1 到 Q4 之间对取出的指令进行译码和执行,也就是说 4 个时钟周期
才会执行一条指令。下图表示时钟与指令周期执行时序图。
一个指令周期含有 4 个 Q 周期,指令的执行和获取是采用流水线结构,取指占用一个指令周期,而译码和
执行占用另一个指令周期,但是由于流水线结构,从宏观上看,每条指令的有效执行时间是一个指令周期。如
果一条指令引起程序计数器地址发生改变(例如 JP)那么预取的指令操作码就无效,就需要两个指令周期来完
成该条指令,这就是对 PC 操作指令都占用两个时钟周期的原因。
Q1
Q3
Q2
Q4
Q1
Q2
Q3
Q4
Q1
Q2
Q3
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
-27-
V1.1
Cmsemicon
3.2
CMS89F73x5
系统振荡器
芯片有 2 种振荡方式,内部 RC 振荡和外部 XT 振荡。
3.2.1 内部 RC 振荡
芯片默认的振荡方式为内部 RC 振荡,其振荡频率为 8MHz 或 16MHz 可通过 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
455KHz
1MΩ
100pF~470pF
XT
2MHz
1MΩ
10pF~47pF
XT
4MHz
1MΩ
10pF~47pF
XT
8MHz
1MΩ
10pF~47pF
起振时间
起振时间(Reset Time)是指从芯片复位到芯片振荡稳定这段时间,其设计值约为 18ms。
注:无论芯片是电源上电复位,还是其它原因引起的复位,都会存在这个起振时间。
www.mcu.com.cn
-28-
V1.1
Cmsemicon
3.4
CMS89F73x5
振荡器控制寄存器
振荡器控制(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
Bit3~Bit1
Bit0
未用,读为 0。
IRCF:
111=
110=
101=
100=
011=
010=
001=
000=
未用。
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)。
系统时钟选择位。
内部振荡器用作系统时钟。
时钟源由CONFIG定义。
注:FOSC 为内部振荡器频率 8MHz;FSYS 为系统工作频率。
www.mcu.com.cn
-29-
V1.1
Cmsemicon
CMS89F73x5
4. 复位
芯片可用如下 3 种复位方式:
◆ 上电复位;
◆ 低电压复位;
◆ 正常工作下的看门狗溢出复位;
上述任意一种复位发生时,所有的系统寄存器将恢复默认状态,程序停止运行,同时程序计数器 PC 清零,
复位结束后程序从复位向量 0000H 开始运行。STATUS 的 TO 和 PD 标志位能够给出系统复位状态的信息,
(详
见 STATUS 的说明)
,用户可根据 PD 和 TO 的状态,控制程序运行路径。
任何一种复位情况都需要一定的响应时间,系统提供完善的复位流程以保证复位动作的顺利进行。
上电复位
4.1
上电复位与 LVR 操作密切相关。系统上电的过程呈逐渐上升的曲线形式,需要一定时间才能达到正常电平
值。下面给出上电复位的正常时序:
-
上电:系统检测到电源电压上升并等待其稳定;
-
系统初始化:所有的系统寄存器被置为初始值;
-
振荡器开始工作:振荡器开始提供系统时钟;
-
执行程序:上电结束,程序开始运行。
www.mcu.com.cn
-30-
V1.1
Cmsemicon
CMS89F73x5
掉电复位
4.2
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
-31-
V1.1
Cmsemicon
CMS89F73x5
4.2.2 掉电复位的改进办法
如何改进系统掉电复位性能,以下给出几点建议:
◆ 选择较高的 LVR 电压,有助于复位更可靠;
◆ 开启看门狗定时器;
◆ 降低系统的工作频率;
◆ 增大电压下降斜率。
看门狗定时器
看门狗定时器用于保证程序正常运行,当系统进入工作死区或者程序运行出错时,看门狗定时器会溢出,
系统复位。
降低系统的工作速度
系统工作频率越快,系统最低工作电压越高。从而增大了工作死区的范围,降低系统工作速度就可以降低
最低工作电压,从而有效的减小系统工作在死区电压的机率。
增大电压下降斜率
此方法可用于系统工作在 AC 供电的环境,一般 AC 供电系统,系统电压在掉电过程中下降很缓慢,这就
会造成芯片较长时间工作在死区电压,此时若系统重新上电,芯片工作状态可能出错,建议在芯片电源与地线
间加一个放电电阻,以便让 MCU 快速通过死区,进入复位区,避免芯片上电出错可能性。
看门狗复位
4.3
看门狗复位是系统的一种保护设置。在正常状态下,由程序将看门狗定时器清零。若出错,系统处于未知
状态,看门狗定时器溢出,此时系统复位。看门狗复位后,系统重启进入正常状态。
看门狗复位的时序如下:
-
看门狗定时器状态:系统检测看门狗定时器是否溢出,若溢出,则系统复位;
-
初始化:所有的系统寄存器被置为默认状态;
-
振荡器开始工作:振荡器开始提供系统时钟;
-
程序:复位结束,程序开始运行。
关于看门狗定时器的应用问题请参看 2.8WDT 应用章节。
www.mcu.com.cn
-32-
V1.1
Cmsemicon
CMS89F73x5
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
-33-
V1.1
Cmsemicon
5.4
CMS89F73x5
休眠模式应用举例
系统在进入休眠模式之前,若用户需要获得较小的休眠电流,请先确认所有 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
-34-
V1.1
Cmsemicon
CMS89F73x5
6. I/O 端口
芯片有四个 I/O 端口:PORTA、PORTB、PORTC、PORTD(最多 26 个 I/O)。可读写端口数据寄存器可
直接存取这些端口。
端口
PORTA
PORTB
PORTC
PORTD
位
管脚描述
I/O
0
施密特触发输入,推挽式输出,AN0,KEY0,LED 驱动 SEG 口
I/O
1
施密特触发输入,推挽式输出,AN1,KEY1,LED 驱动 SEG 口
I/O
2
施密特触发输入,推挽式输出,AN2,KEY2,LED 驱动 SEG 口
I/O
3
施密特触发输入,推挽式输出,AN3,KEY3,LED 驱动 SEG 口
I/O
4
施密特触发输入,推挽式输出,AN4,KEY4,LED 驱动 SEG 口,T0CKI
I/O
5
施密特触发输入,推挽式输出,AN5,KEY5,LED 驱动 SEG 口
I/O
6
施密特触发输入,推挽式输出,AN6,KEY6,LED 驱动 SEG 口
I/O
7
施密特触发输入,推挽式输出,AN7,KEY7,LED 驱动 SEG 口
I/O
0
施密特触发输入,推挽式输出,AN8,KEY8,LED 驱动 SEG 口
I/O
1
施密特触发输入,推挽式输出,AN9,KEY9,LED 驱动 SEG 口,外部中断输入
I/O
2
施密特触发输入,推挽式输出,AN10,KEY10,LED 驱动 SEG 口
I/O
3
施密特触发输入,推挽式输出,AN11,KEY11,CCP,RX1/DT1
I/O
4
施密特触发输入,推挽式输出,AN12,KEY12,CCP,TX1/CK1,T1G
I/O
5
施密特触发输入,推挽式输出,AN13,KEY13,T1CKI,OSCO
I/O
6
施密特触发输入,推挽式输出,AN14,KEY14,OSCI
I/O
0
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
1
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
2
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
3
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
4
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
5
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口
I/O
6
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口,CCP,RX1/DT1
I/O
7
施密特触发输入,推挽式输出,LCD/LED 驱动 COM 口,CCP,TX1/CK1
I/O
0
施密特触发输入,推挽式输出,编程时钟输入,RX0/DT0
I/O
1
施密特触发输入,推挽式输出,编程数据输入/输出,KEY15,TX0/CK0
I/O
2
施密特触发输入,推挽式输出,AN15,CAP
I/O
<表 6-1:端口配置总概>
www.mcu.com.cn
-35-
V1.1
Cmsemicon
6.1
I/O 口结构图
数据总线
写
WPUC
CMS89F73x5
D
Q
CK Q
数据总线
VDD
弱上拉
写
WPUA
Q
CK Q
VDD
弱上拉
读
WPUA
读
WPUC
D
D
Q
VDD
写
PORTC
D
写
PORTA
CK Q
Q
VDD
CK Q
I/O引脚
I/O引脚
D
D
写
TRIS
C
Q
CK Q
VSS
写
TRISA
Q
VSS
CK Q
读
TRISA
读
TRISC
读
PORTA
读
PORTC
到触摸按键模块
到LCD/LED模块
到LCD/LED模块
图 6-1:I/O 口结构图(1)
www.mcu.com.cn
-36-
V1.1
Cmsemicon
数据总线
写
WPUB
CMS89F73x5
D
Q
CK
VDD
弱上拉
Q
RBPU
读
WPUB
D
写
PORTB
Q
VDD
CK
Q
I/O引脚
D
写
TRISB
Q
CK
VSS
Q
读
TRISB
读
PORTB
D
写
IOCB
Q
Q
CK
D
EN
Q
Q
读
IOCB
Q3
D
EN
电平变化中断
读PORTB
到触摸按键模块
到A/D转换器
图 6-2:I/O 口结构图(2)
www.mcu.com.cn
-37-
V1.1
Cmsemicon
6.2
CMS89F73x5
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、ANSEL0 等。
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 引脚位;
当TRISAx=1时
1=
端口引脚电平>VIH;
0=
端口引脚电平VIH;
0=
端口引脚电平VIH;
0=
端口引脚电平VIH;
端口引脚电平05H)
2.
将 SYNC、SPEN 和 CSRC 位置 1 使能同步主控串行端口。
3.
确保将 CREN 和 SREN 位清零。
4.
如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 RCIE 位也置 1。
5.
如果需要接收 9 位字符,将 RX9EN 位置 1。
6.
将 SREN 位置 1,启动接收,或将 CREN 位置 1 使能连续接收。
7.
当字符接收完毕后,将 RCIF 中断标志位置 1。如果允许位 RCIE 置 1,还会产生一个中断。
8.
读 RCREG 寄存器获取接收到的 8 位数据。
9.
读 RCSTA 寄存器以获取第 9 个数据位(使能 9 位接收时),并判断接收过程中是否产生错误。
10. 如果产生溢出错误,清零 RCSTA 寄存器的 CREN 位或清零 SPEN 以复位 USART 来清除错误。
Bit0
RX/DT引脚
Bit1
Bit2
Bit3
Bit4
Bit5
Bit6
Bit7
TX/CK引脚 (SCKP=0)
TX/CK引脚(SCKP=1)
写入SREN位
SREN位
CREN位
‘0’
‘0’
RCIF位 (中断)
读RXREG
图 14-8:同步接收(主控模式,SREN)
注:时序图说明了 SREN=1 时的同步主控模式。
www.mcu.com.cn
-105-
V1.1
Cmsemicon
14.5.2
CMS89F73x5
同步从动模式
下列位用来将 USART 配置为同步从动操作:
⚫
SYNC=1
⚫
CSRC=0
⚫
SREN=0(用于发送)
;SREN=1(用于接收)
⚫
CREN=0(用于发送)
;CREN=1(用于接收)
⚫
SPEN=1
将 TXSTA 寄存器的 SYNC 位置 1,可将器件配置用于同步操作。将 TXSTA 寄存器的 CSRC 位置 1,将
器件配置为从动器件。将 RCSTA 寄存器的 SREN 和 CREN 位清零,以确保器件处于发送模式,否则器件将
被配置为接收模式。将 RCSTA 寄存器的 SPEN 位置 1,使能 USART。
14.5.2.1 USART 同步从动发送
同步主控和从动模式的工作原理是相同的(见章节“同步主控发送”
)
。
14.5.2.2 同步从动发送设置
1.
将 SYNC 和 SPEN 位置 1 并将 CSRC 位清零。
2.
将 CREN 和 SREN 位清零。
3.
如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 TXIE 位也置 1。
4.
如果需要发送 9 位数据,将 TX9EN 位置 1。
5.
将 TXEN 位置 1 使能发送。
6.
若选择发送 9 位数据,将最高位写入 TX9D 位。
7.
将低 8 位数据写入 TXREG 寄存器开始传输。
14.5.2.3 USART 同步从动接收
除了以下不同外,同步主控和从动模式的工作原理相同。
1.
CREN 位总是置 1,因此接收器不能进入空闲状态。
2.
SREN 位,在从动模式可为“任意值”。
14.5.2.4 同步从动接收设置
1.
将 SYNC 和 SPEN 位置 1 并将 CSRC 位清零。
2.
如果使用中断,将 INTCON 寄存器的 GIE 和 PEIE 位置 1,并将 PIE1 寄存器的 RCIE 位也置 1。
3.
如果需要接收 9 位字符,将 RX9EN 位置 1。
4.
将 CREN 位置 1,使能接收。
5.
当接收完成后,将 RCIF 位置 1。如果 RCIE 已置 1,还会产生一个中断。
6.
读 RCREG 寄存器,从接收 FIFO 缓冲器获取接收到的 8 个低数据位。
7.
如果使能 9 位模式,从 RCSTA 寄存器的 RX9D 位获取最高位。
如果产生溢出错误,清零 RCSTA 寄存器的 CREN 位或清零 SPEN 位以复位 USART 来清除错误。
www.mcu.com.cn
-106-
V1.1
Cmsemicon
CMS89F73x5
15. 主控同步串行端口(MSSP)模块
15.1 主控 SSP(MSSP)模块概述
主控同步串行端口(Master Synchronous Serial Port,MSSP)模块是用于同其他外设或单片机进行通信
的串行接口。这些外设器件可以是串行 EEPROM、移位寄存器、显示驱动器或 A/D 转换器等。
MSSP 模块有下列两种工作模式:
⚫
串行外设接口(SPI)
。
⚫
I2C。
-
全主控模式。
-
从动模式(支持广播地址呼叫)
。
I C 接口在硬件上支持下列模式:
2
⚫
主控模式。
⚫
多主机模式。
⚫
从动模式。
15.2 SPI 模式
SPI 模式允许同时同步发送和接收 8 位数据。SPI 支持 3 线模式和 4 线模式通信。
3 线模块下使用以下三个引脚:
⚫
串行数据输入(SDIO)——RC7/SDIO
⚫
串行时钟(SCK)——RC6/SCK
⚫
从动选择(SS)——RC4/SS
4 线模块下使用以下三个引脚:
⚫
串行数据输出(SDO)——RC5/SDO
⚫
串行数据输入(SDI)——RC7/SDI
⚫
串行时钟(SCK)——RC6/SCK
⚫
从动选择(SS)——RC4/SS
www.mcu.com.cn
-107-
V1.1
Cmsemicon
CMS89F73x5
SPI 相关寄存器
15.2.1
SSPSTAT:SSP 状态寄存器(94H)
94H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPSTAT
SMP
CKE
MODE
---
---
---
---
---
读写
R/W
R/W
R/W
---
---
---
---
---
复位值
0
0
0
---
---
---
---
---
Bit7
Bit 6
SMP:
SPI主控模式:
SPI从动模式:
CKE:
CKP=
CKP =
Bit5
MODE:
Bit4~Bit0
SPI模式下未用。
www.mcu.com.cn
采样位。
1 = 在数据输出时间的末尾采样输入数据;
0 = 在数据输出时间的中间采样输入数据。
当使用SPI的从动模式时,必须将SMP清零。
SPI时钟边沿选择位。
0
1= 在SCK引脚的上升沿发送数据;
0= 在SCK引脚的下降沿发送数据。
1
1 = 在SCK引脚的下降沿发送数据;
0 = 在SCK引脚的上升沿发送数据。
模式选择
1=3线模式 (当需要发送时,SDIO口TRIS位需清0;当需要接收时,SDIO口TRIS
需置1)
0=4线模式
-108-
V1.1
Cmsemicon
CMS89F73x5
SSPCON:SSP 控制寄存器(14H)
14H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPCON
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
读写
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
复位值
0
0
0
0
0
0
0
0
WCOL:
写冲突检测位。
Bit7
1=
Bit6
0=
SSPOV:
1=
0=
Bit5
Bit4
Bit3~Bit0
www.mcu.com.cn
SSPEN:
在发送/接收数据过程中,试图对SSPBUF寄存器进行写操作。
未发生冲突。
接收溢出指示位。
SSPBUF仍保持前一数据时,又收到一个新的字节。出现溢出时,SSPSR中的
数据会丢失。溢出只会在从动模式下发生。在从动模式中,即使仅发送数据,
用户也必须读SSPBUF以避免溢出。在主控模式中,溢出位不被置1,因为每次
接收或发送新数据,都要通过写SSPBUF寄存器来启动(该位必须由软件清零)。
没有溢出。
同步串行端口使能位。
1=
使能串行端口并将SCK、SDO、SDI和SS配置为串行端口引脚。
0=
禁止串行端口并将这些引脚配置为I/O端口引脚。
CKP:
时钟极性选择位。
1=
时钟空闲状态为高电平。
0=
时钟空闲状态为低电平。
SSPM:
同步串行端口模式选择位;
0000=
SPI主控模式,时钟= FSYS/4;
0001=
SPI主控模式,时钟= FSYS/16;
0010=
0011=
SPI主控模式,时钟= FSYS/64;
SPI主控模式,时钟= TMR2输出/2;
0100=
SPI从动模式,时钟= SCK引脚,使能SS引脚控制;
0101=
SPI从动模式,时钟= SCK引脚,禁止SS引脚控制,SS可用作I/O引脚;
0110=
保留;
0111=
保留;
1000=
1001=
I2C主控模式,时钟= FSYS/(4 * (SSPADD+1));
禁止装载功能;
1010=
保留;
1011=
保留;
1100=
保留;
1101=
保留;
1110=
I2C从动模式,7位地址,并允许起始位和停止位中断;
1111=
保留。
-109-
V1.1
Cmsemicon
15.2.2
CMS89F73x5
SPI 工作原理
当初始化 SPI 时,需要指定几个选项。可以通过对相应的控制位(SSPCON和 SSPSTAT)编
程来指定。这些控制位用于指定以下选项:
◆
◆
主控模式(SCK 作为时钟输出)
◆
从动模式(SCK 作为时钟输入)
时钟极性(SCK 的空闲状态)
◆
输入数据的采样相位(数据输出时间的中间或末尾)
◆
时钟速率(仅限主控模式)
◆
时钟边沿(在 SCK 的上升沿/下降沿输出数据)
◆
从动选择模式(仅限于从动模式)
内部数据总线
读
写
SSPBUF寄存器
SDI
SSPSR寄存器
移位时钟
bit0
SDO
SS
控制使能
边沿选择
SS
2
时钟选择
SMP:CKE
2
边沿选择
SSPM
4
(
TMR2 输出
)
2
预分频器
4,16,64
SCK
Tosc
SSPSR中的数据传输给TX/RX
TRIS位
图 15-1:在 SPI 模式下 MSSP 模块的框图
注:I/O 引脚具有对 VDD 和 VSS 的二极管保护。
MSSP 模块由一个发送/ 接收移位寄存器(SSPSR)和一个缓冲寄存器(SSPBUF)组成。SSPSR 将数
据移入和移出器件,最高有效位在前。SSPBUF 保存上次写入 SSPSR 的数据直到新接收到的数据就绪为止。
一旦 8 位数据接收完毕,该字节就被移入 SSPBUF 寄存器。然后,PIR1 寄存器的中断标志位 SSPIF 被置 1。
这种双重缓冲数据接收方式(SSPBUF)允许在读取刚接收的数据之前,就开始接收下一个字节。在数据发送
/ 接收期间,任何试图写 SSPBUF 寄存器的操作都会被忽略,并将 SPCON 寄存器的写冲突检测位 WCOL 置
1。此时用户必须用软件将 WCOL 位清零,否则无法判别下一次对 SSPBUF 的写操作是否成功完成。
当应用软件等待接收有效数据时,应在下一个要传输的数据字节写入 SSPBUF 之前,将 SSPBUF 中的前
一个数据读出。缓冲器满标志位 BF(SSPSTAT 寄存器)用于表示何时 SSPBUF 已经载入了接收到的数据(发
送完成)
。如果 SPI 仅仅作为发送器,则不必理会接收的数据。通常可用 MSSP 中断来判断发送或接收何时完
成。如果不使用中断来处理数据的收发,用软件查询方法同样可确保不会发生写冲突。
www.mcu.com.cn
-110-
V1.1
Cmsemicon
15.2.3
CMS89F73x5
使能 SPI I/O
要使能串行端口,SSPCON 寄存器的 MSSP 使能位 SSPEN 必须置 1。要复位或重新配置 SPI 模式,要
先将 SSPEN 位清零,重新初始化 SSPCON 寄存器,然后将 SSPEN 位置 1。这将把 SDI、SDO、SCK 和 SS
引脚配置为串行端口引脚。要将这些引脚用作串行端口,还必须将其数据方向位(在 TRIS 寄存器中)正确编
程,方法如下:
⚫
SDI 由 SPI 模块自动控制;
⚫
必须将 SDO 的 TRISC清零;
⚫
必须将 SCK(主控模式)的 TRISC位清零;
⚫
必须将 SCK(从动模式)的 TRISC位置 1;
⚫
必须将 SS 的 TRISC置 1。
对于任何不想要的串行端口功能,可通过将对应的数据方向(TRIS)寄存器设置为相反值来跳过。
15.2.4
主控模式
主器件控制 SCK,因此可以随时启动数据传输。主器件根据软件协议确定从器件应在何时广播数据。
在主控模式下,数据一旦写入 SSPBUF 寄存器就开始发送或接收。如果 SPI 仅作为接收器,则可以禁止
SDO 输出(将其编程设定为输入)
。SSPSR 寄存器按设置的时钟速率对 SDI 引脚上的信号进行连续移位输入。
每个字节接收完后,都会被当作普通的接收字节装入 SSPBUF 寄存器(相应的中断和状态位置 1)。这可以在
接收器应用中作为“线路活动监控(Line Activity Monitor)”模式,是很有用的。
可通过对 SSPCON 寄存器的 CKP 位进行相应的编程来选择时钟极性。图 15-2、图 15-3、图 15-4 和图
15-5 给出了 SPI 通信的波形图,其中 MSb 被首先发送。在主控模式下,SPI 时钟速率(比特率)可由用户编
程设定为下列速率之一:
⚫
FSYS/4(或 TCY)
⚫
FSYS/16(或 4.TCY)
⚫
FSYS/64(或 16.TCY)
⚫
TIMER2 输出/2
www.mcu.com.cn
-111-
V1.1
Cmsemicon
CMS89F73x5
图 15-2 为主控模式的波形图。当 SSPSTAT 寄存器的 CKE 位置 1 时,SDO 数据在 SCK 上出现时钟边沿
前就有效。图中所示输入采样的变化由 SSPSTAT 寄存器的 SMP 位的状态决定。图中指出了将接收到的数据
装入 SSPBUF 的时间。
写入SSPBUF
SCK(CKP=0 CKE=0)
SCK(CKP=1 CKE=0)
4种时钟
模式
SCK(CKP=0 CKE=1)
SCK(CKP=1 CKE=1)
SDO(CKE=0)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
SDO(CKE=1)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Bit0
SDI(SMP=0)
Bit7
Bit0
输入采样(SMP=0)
SDI(SMP=1)
Bit7
Bit0
输入采样(SMP=1)
SSPIF
在Q2↓后的Q4周期
SSPSR到SSPBUF
图 15-2:SPI 模式的波形(主控模式)
www.mcu.com.cn
-112-
V1.1
Cmsemicon
15.2.5
CMS89F73x5
从动模式
在从动模式下,当 SCK 引脚上出现外部时钟脉冲时,发送和接收数据。当最后一位数据被锁存后,PIR1
寄存器的 SSPIF 中断标志位置 1。
在从动模式下,时钟由 SCK 引脚上的外部时钟源提供。外部时钟必须满足电气规范中规定的高电平和低
电平的最短时间要求。
在休眠状态下,从器件仍可发送/ 接收数据。当收到一个字节时,器件从休眠状态被唤醒。
15.2.6
从动选择同步
SS 引脚允许器件工作在同步从动模式。SPI 必须工作在从动模式下,并使能 SS 引脚控制 SSPxCON1
= 04h)
。要使 SS 引脚用作输入引脚,不能将该引脚驱动为低电平。当 SS 引脚为低电平时,使能数据的发送
和接收,同时 SDO 引脚被驱动。当 SS 引脚为高电平时,即使是在数据的发送过程中,SDO 引脚也不再被驱
动,而是变成悬空输出。根据应用的需要,可外接上拉/ 下拉电阻。
当 SPI 模块复位后,位计数器被强制归 0。这可以通过强制将 SS 引脚拉为高电平或将 SSPEN 位清零来
实现。将 SDO 引脚和 SDI 引脚相连可以仿真双线制通信。当 SPI 需要作为接收器工作时,SDO 引脚可以被配
置为输入。这样就禁止了从 SDO 发送数据。因为 SDI 不会引起总线冲突,因而总是可以将其保留为输入(SDI
功能)
。
注:
1.
当 SPI 工作在从动模式下,并且 SS 引脚控制使能(SSPxCON1 = 0100)时,如果 SS 引脚置
为 VDD 电平,SPI 模块将被复位。
2.
如果在 CKE 置 1(SSPSTAT 寄存器)的从动模式下使用 SPI,则必须使能 SS 引脚控制。
SS
SCK(CKP=0 CKE=0)
SCK(CKP=1 CKE=0)
写入SSPBUF
SDO
SDI(SMP=0)
Bit7
Bit6
Bit7
Bit7
Bit7
Bit0
Bit0
输入采样(SMP=0)
SSPIF
在Q2↓后的
Q4周期
SSPSR到SSPBUF
图 15-3:从动同步波形
www.mcu.com.cn
-113-
V1.1
Cmsemicon
CMS89F73x5
SS可选
SCK(CKP=0 CKE=0)
SCK(CKP=1 CKE=0)
写入SSPBUF
SDO
Bit7
Bit5
Bit6
Bit3
Bit4
Bit1
Bit2
Bit0
SDI(SMP=0)
Bit0
Bit7
输入采样(SMP=0)
SSPIF
在Q2↓后的Q4周期
SSPSR到SSPBUF
图 15-4:SPI 模式波形(从动模式,CKE=0)
SS不可任选
SCK(CKP=0 CKE=1)
SCK(CKP=1 CKE=1)
写入SSPBUF
SDO
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SDI(SMP=0)
Bit0
Bit7
输入采样(SMP=0)
SSPIF
在Q2↓后的Q4周期
SSPSR到SSPBUF
图 15-5:SPI 模式波形(从动模式,CKE=1)
www.mcu.com.cn
-114-
V1.1
Cmsemicon
15.2.7
CMS89F73x5
休眠操作
在主控模式下,如果选择了休眠模式,所有模块的时钟都将停止,并且在器件被唤醒前,发送/接收将保持
此停滞状态。当器件返回到运行模式后,该模块将恢复发送和接收数据。
在从动模式下,SPI 发送/接收移位寄存器与器件异步工作。这可以使器件处于休眠模式下,而且数据仍可
被移入 SPI 发送/接收移位寄存器。当 8 位数据全部接收到后,MSSP 中断标志位将置 1,并且如果允许中断的
话,将唤醒器件。
15.2.8
复位的影响
复位会禁止 MSSP 模块并终止当前的传输。
www.mcu.com.cn
-115-
V1.1
Cmsemicon
CMS89F73x5
15.3 I2C 模块
MSSP 模块工作在 I2C 模式时,可以实现所有的主控和从动功能(包括广播呼叫支持),并且用硬件提供
起始位和停止位的中断来判断总线何时空闲(多主机功能)。
有两个引脚用于数据传输。它们是时钟引脚(SCL)——RC6/SCL 引脚,和数据引脚(SDA)——RC7/SDA
引脚。用户必须通过 TRISC位将这些引脚配置为输入或输出引脚。通过将 SSPCON 寄存器的 MSSP 使
能位 SSPEN 置 1,使能 MSSP 模块的功能。
内部数据
总线
读
写
SSPBUF寄存器
SCL
移位时钟
SSPSR寄存器
SDA
MSb
LSb
匹配检测
地址匹配
SSPMSK寄存器
SSPADD寄存器
起始位和停止位检测
置1和复位
S位和P位
(SSPSTAT寄存器)
图 15-6:MSSP 框图(I2C 模式)
注:I/O 引脚具有连接到 VDD 和 VSS 的保护二极管。
MSSP 模块具有 7 个用于 I2C 操作的寄存器。它们是:
◆ MSSP 控制寄存器 2(SSPCON2)
MSSP 控制寄存器 1(SSPCON)
◆ 串行接收/发送缓冲寄存器(SSPBUF)
MSSP 状态寄存器(SSPSTAT)
◆ MSSP 地址寄存器(SSPADD)
MSSP 移位寄存器(SSPSR):不能直接访问
MSSP 屏蔽寄存器(SSPMSK)
可使用 SSPCON 寄存器控制 I2C 的操作。可使用 SSPM模式选择位(SSPCON 寄存器)选择以下
◆
◆
◆
◆
I2C 模式之一:
◆
I2C 从动模式,7 位地址,允许起始位和停止位中断
◆
I2C 主控模式,时钟=FSYS/(4*(SSPADD+1))
如果已将 SCL 和 SDA 引脚编程为输入引脚(将相应的 TRIS 位置 1),选择任何 I2C 模式且 SSPEN 位置
1 将强制 SCL 和 SDA 引脚为漏极开路。
www.mcu.com.cn
-116-
V1.1
Cmsemicon
CMS89F73x5
相关寄存器说明
15.3.1
SSPSTAT:SSP 状态寄存器(94H)
94H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPSTAT
----
IDLE
D/A
P
S
R/W
----
BF
读写
----
R
R
R
R
R
----
R
复位值
----
1
0
0
0
0
----
0
Bit7
未用
I2C模式下无效
Bit6
IDLE
1=
主控模式空闲位
(仅主控模式有效,所有主控操作都可以通过该位来判断是否结束)
总线上没有主控操作
0=
总线上正在进行主控操作
Bit5
Bit4
Bit3
Bit2
D/A:
数据/地址位。
1=
表示最后接收或发送的字节是数据。
0=
表示最后接收或发送的字节是地址。
P:
停止位(禁止MSSP模块(SSPEN清零)时此位被清零)。
1=
表示最后检测到了停止位(复位时该位为0)。
0=
表示最后未检测到停止位。
S:
起始位(禁止MSSP模块(SSPEN 清零)时此位被清零)。
1=
表示最后检测到了起始位(复位时该位为0)。
0=
最后未检测到起始位。
R/W:
读/写位信息。
该位用来保存在最后一次地址匹配后的R/W位信息。该位仅在从地址匹配开始到下
一个起始位、停止位或非ACK位时有效。
在I2C从动模式下:
1= 读。
0= 写。
在I2C主控模式下:
1= 正在发送。
0= 不在进行发送。
此位与SEN、RSEN、PEN、RCEN或ACKEN做逻辑或运算的结果将指示MSSP是
否在空闲模式下。
Bit1
Bit0
未用
BF
缓冲器满状态位。
接收:
1= 接收完成,SSPBUF满。
0= 接收未完成,SSPBUF空。
发送:
1 = 数据正在发送(不包括ACK和停止位),SSPBUF满。
0 = 数据发送完成(不包括ACK和停止位),SSPBUF空。
www.mcu.com.cn
-117-
V1.1
Cmsemicon
CMS89F73x5
SSPCON:SSP 控制寄存器(14H)
14H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPCON
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
读写
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
WCOL:
主控模式:
写冲突检测位。
1= 在I2C不满足开始发送数据的条件下,试图对SSPBUF寄存器进行写操作。
0= 未发生冲突。
从动模式:
Bit6
Bit5
Bit4
Bit3~Bit0
www.mcu.com.cn
0=
SSPEN:
1=
0=
CKP:
在I2C从动模式下:
1= 正在发送前一个字时,又对SSPBUF寄存器进行写操作(必须由软件清零)。
0= 未发生冲突。
接收溢出指示位。(仅在从动接收模式下有限)
SSPBUF寄存器仍保持前一数据时,又接收到一个新的字节。在发送模式下
SSPOV位可为任意值(该位必须由软件清零)。
没有溢出。
同步串行端口使能位(必须正确配置这些引脚为输入或输出引脚)。
使能串行端口并将SDA和SCL引脚配置为串行端口引脚。
禁止串行端口并将这些引脚配置为I/O端口引脚。
时钟极性选择位。
SCK释放控制。
在I2C主控模式下:
SSPM:
0000=
0001=
0010=
0011=
0100=
0101=
0110=
0111=
1000=
1 = 使能时钟。
0 = 保持时钟线为低电平(时钟延长)(用于确保数据建立时间)。
在此模式下未使用。
同步串行端口模式选择位。
SPI主控模式,时钟= FSYS/4。
SPI主控模式,时钟= FSYS/16。
SPI主控模式,时钟= FSYS/64。
SPI主控模式,时钟= TMR2输出/2。
SPI从动模式,时钟= SCK引脚,使能SS引脚控制。
SPI从动模式,时钟= SCK引脚,禁止SS引脚控制,SS可用作I/O引脚。
保留。
保留。
I2C主控模式,时钟= FSYS/(4 * (SSPADD+1))。
SSPOV:
1=
1001=
1010=
1011=
1100=
禁止装载功能。
保留。
保留。
保留。
1101=
1110=
1111=
保留。
I2C从动模式,7位地址,并允许起始位和停止位中断。
保留。
-118-
V1.1
Cmsemicon
CMS89F73x5
SSPCON2: SSP 控制寄存器 2(91H)
91H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPCON2
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
读写
R/W
R/W
R
R/W
R/W
R/W
R/W
R/W
复位值
0
0
0
0
0
0
0
0
Bit7
Bit6
GCEN:
广播呼叫使能位(仅限I2C从动模式)。
1=
允许在SSPSR中接收到广播呼叫地址(0000h)时产生中断。
0=
禁止广播呼叫地址。
ACKSTAT:
应答状态位(仅限于I2C主控模式)。
在主控发送模式下:
1 = 未接收到来自从动器件的应答。
0 = 已接收到来自从动器件的应答。
Bit5
ACKDT:
在主控接收模式下:
应答数据位(仅限于I2C主控模式)。
用户在接收完成后发送的应答序列的值。
1 = 不应答。
0 = 应答。
Bit4
ACKEN:
应答序列使能位(仅限I2C主控模式)。
在主控接收模式下:
1 = 在SDA和SCL引脚启动应答序列,发送ACKDT数据位。由硬件自动清零。
0 = 应答序列空闲。
Bit3
Bit2
RCEN:
接收使能位(仅限I2C主控模式)。
1=
使能I2C接收模式。
0=
接收空闲。
PEN:
停止条件使能位(仅限于I2C主控模式)。
1 = 在SDA和SCL引脚启动停止条件。由硬件自动清零。
0 = 停止条件空闲。
Bit1
Bit0
RSEN:
重复启动条件使能位(仅限I2C主控模式)。
1=
在SDA和SCL引脚启动重复启动条件。由硬件自动清零。
0=
重复启动条件空闲。
SEN:
启动条件使能位。
在主控模式下:
1 = 在SDA和SCL引脚启动启动条件。由硬件自动清零。
0 = 启动条件空闲。
在从动模式下:
1 = 从发送和接收都会使能时钟延长(使能时钟延长)。
0 = 禁止时钟延长。
www.mcu.com.cn
-119-
V1.1
Cmsemicon
15.3.2
CMS89F73x5
主控模式
主控模式通过在检测到启动和停止条件时产生中断来工作。停止(P)位和起始(S)位在复位时或禁止
MSSP 模块时清零。当 P 位置 1 时,可以取得 I2C 总线的控制权;否则总线处于空闲状态,且 P 位和 S 位都
为零。
在主控模式中,SCL 线由 MSSP 硬件操纵,SDA 引脚必须被配置为输入(TRISC置 1)。下列事件会
使 MSSP 中断标志位 SSPIF 置 1(如果允许 MSSP 中断,则产生中断):
◆
启动条件
◆
停止条件
◆
数据传输字节已发送/已接收
◆
应答发送
◆
重复启动条件
15.3.3
I2C 主控模式支持
通过将 SSPCON 中相应的 SSPM 位置 1 或清零并将 SSPEN 位置 1 可使能主控模式。
一旦使能主控模式,
用户即可选择以下 6 项操作:
1.
在 SDA 和 SCL 上发出一个启动条件。
2.
在 SDA 和 SCL 上发出一个重复启动条件。
3.
写入 SSPBUF 寄存器,开始数据/ 地址的发送。
4.
在 SDA 和 SCL 上产生停止条件。
5.
将 I2C 端口配置为接收数据。
6.
在接收到数据字节后产生应答条件。
SSPM
SSPADD
内部数据总线
写
读
波特率
发生器
SSPBUF
SDA
SDA输入
移位时钟
SSPSR
Msb
起始位、停止位或
应答产生
Critl
时
钟
SCL
SCL输入
总线冲突
起始位检测
停止位检测
写冲突检测位
时钟仲裁
发送/接收结束时的状
态计数器
(
使
时
钟
源
处
于
等
检 待
测 状
态
)
时
钟
仲
裁
/WCOL
接
收
使
能
Lsb
置位/复位S、P和WCOL(SSPSTAT)
置位SSPIF和BCLIF
复位ACKSTAT和PEN(SSPCON2)
I/O引脚具有连接到VDD和VSS的保护二极管
图15-7:MSSP框图(I2CTM主控模式)
注:当配置为 I2C 主控模式时,MSSP 模块不允许事件排队。例如,在启动条件结束前,不允许用户发
出另一个启动条件并立即写 SSPBUF 寄存器以发起传输。这种情况下,将不会写入 SSPBUF,
WCOL 位将被置 1,这表明没有发生对 SSPBUF 的写操作。
www.mcu.com.cn
-120-
V1.1
Cmsemicon
CMS89F73x5
15.3.3.1 I C 主控模式操作
2
所有串行时钟脉冲和启动/ 停止条件均由主器件产生。停止条件或重复启动条件能结束传输。因为重复启
动条件也是下一次串行传输的开始,因此不会释放 I2C 总线。在主控发送器模式下,串行数据通过 SDA 输出,
而串行时钟由 SCL 输出。发送的第一个字节包括接收器件的地址(7 位)和读/ 写(R/W)位。在这种情况下,
R/W 位将是逻辑 0。串行数据每次发送 8 位。每发送一个字节,会收到一个应答位。启动和停止条件的输出表
明串行传输的开始和结束。
在主控接收模式下,发送的第一个字节包括发送器件的地址(7 位)和 R/W 位。在这种情况下,R/W 位
将是逻辑 1。因此,发送的第一个字节是一个 7 位从器件地址,后面跟 1 表示接收。串行数据通过 SDA 接收,
而串行时钟由 SCL 输出。每次接收 8 位串行数据。每接收到一个字节,都会发送一个应答位。启动和停止条
件分别表明发送的开始和结束。
在 I2C 模式下,
在 SPI 模式中使用的波特率发生器被用于将 SCL 时钟频率设置为 100KHz、
400KHz 或 1MHz。
波特率发生器的重载值位于 SSPADD 寄存器的低 7 位。当发生对 SSPBUF 的写操作时,波特率发生器将自动
开始计数。如果指定操作完成(即,发送的最后一个数据位后面跟着 ACK),内部时钟将自动停止计数,SCL
引脚将保持在其最后的状态。
下面是一个典型的发送事件序列:
-
用户通过将启动使能位 SEN(SSPCON2 寄存器)置 1 产生启动条件。
-
SSPIF 位置 1。在进行任何其他操作前,MSSP 模块将等待所需的启动时间。
-
用户将从器件地址装入 SSPBUF 进行发送。
-
地址从 SDA 引脚移出,直到发送完所有 8 位为止。
-
MSSP 模块移入来自从器件的 ACK 位,并将它的值写入 SSPCON2 寄存器的 ACKSTAT 位。
-
MSSP 模块在第 9 个时钟周期的末尾将 SSPIF 位置 1,产生一个中断。
-
用户将 8 位数据装入 SSPBUF。
-
数据从 SDA 引脚移出,直到发送完所有 8 位为止。
-
MSSP 模块移入来自从器件的 ACK 位,并将它的值写入 SSPCON2 寄存器的 ACKSTAT 位。
-
MSSP 模块在第 9 个时钟的末尾将 SSPIF 位置 1,产生一个中断。
-
用户通过将停止使能位(PEN)位(SSPCON2 寄存器)置 1 产生停止条件。
-
一旦停止条件完成,将产生一个中断。
www.mcu.com.cn
-121-
V1.1
Cmsemicon
CMS89F73x5
波特率发生器
15.3.4
在 I2C 主控模式下,波特率发生器的重载值位于 SSPADD 寄存器的低 7 位(图 14-8)。当装载了该值后,
波特率发生器将自动开始计数并递减至 0,然后停止直到下次重载为止。BRG 会在每个指令周期(TCY)中的
Q2 和 Q4 时钟周期上进行两次减计数。在 I2C 主控模式下,会自动重载 BRG。例如,在发生时钟仲裁时,BRG
将在 SCL 引脚采样到高电平时重载(图 15-9)
。
SSPM
SSPADD
SSPM
重载
重载控制
SCL
FOSC/4
BRG向下计数器
CLKOUT
图15-8:波特率发生器框图
SDA
DX
DX-1
允许SCL变为高电平
主器件试图将SCL拉高,但从器件
将SCL保持为低电平(时钟仲裁)
SCL
BRG在Q2和Q4周期进行
递减计数
BRG值
03h
02h
01h
00h(延时)
03h
02h
SCL采样为高电平,重载发生
BRG开始计数
BRG重载
图15-9:带有时钟仲裁的波特率发生器时序
www.mcu.com.cn
-122-
V1.1
Cmsemicon
15.3.5
CMS89F73x5
I C 主控模式发送
2
发送一个数据字节、一个 7 位地址,都可以直接通过写一个值到 SSPBUF 寄存器来实现。该操作将使缓
冲器满标志位 BF 置 1,并且波特率发生器开始计数,同时启动下一次发送。在 SCL 的下降沿有效后,地址/
数据的每一位将被移出至 SDA 引脚。在一个波特率发生器计满返回计数周期(TBRG)内,SCL 保持低电平。
数据应该在 SCL 释放为高电平前保持有效。当 SCL 引脚被释放为高电平时,它将在整个 TBRG 中保持高电平状
态。在此期间以及下一个 SCL 下降沿之后的一段时间内,SDA 引脚上的数据必须保持稳定。在第 8 位被移出
(第 8 个时钟周期的下降沿)之后,BF 标志位清零,同时主器件释放 SDA。
此时如果发生地址匹配或是数据被正确接收,被寻址的从器件将在第 9 位的时间以一个 ACK 位响应。ACK
的状态在第 9 个时钟周期的下降沿写入 ACKDT 位。
主器件接收到应答之后,应答状态位 ACKSTAT 会被清零;
如果未收到应答,则该位被置 1。第 9 个时钟之后,SSPIF 位会置 1,主控时钟(波特率发生器)暂停,直到
下一个数据字节装入 SSPBUF 为止,SCL 引脚保持低电平,SDA 保持不变。
在写 SSPBUF 之后,地址的每一位在 SCL 的下降沿被移出,直至地址的所有 7 位和 R/W 位都被移出为
止。在第 8 个时钟的下降沿,主器件将 SDA 引脚拉为高电平,以允许从器件发出应答响应。在第 9 个时钟的
下降沿,主器件通过采样 SDA 引脚来判断地址是否被从器件识别。ACK 位的状态被装入 ACKSTAT 状态位
(SSPCON2 寄存器)
。在发送地址的第 9 个时钟下降沿之后,SSPIF 置 1,BF 标志位清零,波特率发生器关
闭直到下一次写 SSPBUF,且 SCL 引脚保持低电平,允许 SDA 引脚悬空。
15.3.5.1 BF 状态标志
在发送模式下,BF 位(SSPSTAT 寄存器)在 CPU 写 SSPBUF 时置 1,在所有 8 位数据移出后清零。
15.3.5.2 WCOL 状态标志位
如果用户在发送过程中(即,SSPSR 仍在移出数据字节时)写 SSPBUF,则 WCOL 置 1 且缓冲器的内
容保持不变(未发生写操作)
。WCOL 必须由软件清零。
15.3.5.3 ACKSTAT 状态标志
在发送模式下,当从器件发送应答响应(ACK= 0)时,ACKSTAT 位(SSPCON2 寄存器)清零;当从器
件没有应答(ACK=1)时,该位置 1。从器件在识别出其地址(包括广播呼叫地址)或正确接收数据后,会发
送一个应答。
www.mcu.com.cn
-123-
V1.1
Cmsemicon
CMS89F73x5
I C 主控模式接收
2
15.3.6
通过编程接收使能位 RCEN(SSPCON2 寄存器)使能主控模式接收。波特率发生器开始计数,每次计满
返回时,SCL 引脚的状态都发生改变(由高变低或由低变高),且数据被移入 SSPSR。第 8 个时钟的下降沿之
后,接收使能标志位自动清零,SSPSR 的内容装入 SSPBUF,BF 标志位置 1,SSPIF 标志位置 1,波特率
发生器暂停计数,SCL 保持为低电平。此时 MSSP 处于空闲状态,等待下一条命令。当 CPU 读缓冲器时,BF
标志位将自动清零。通过将应答序列使能位 ACKEN (SSPCON2 寄存器)置 1,用户可以在接收结束后发送
应答位。
15.3.6.1 BF 状态标志
接收时,当将地址或数据字节从 SSPSR 装入 SSPBUF 时,BF 位置 1;在读 SSPBUF 寄存器时 BF 位清
零。
15.3.6.2 WCOL 状态标志
如果用户在接收过程中(即 SSPSR 仍在移入数据字节时)写 SSPBUF,则 WCOL 位置 1,缓冲器内容
不变(未发生写操作)
。
写SSPCON2(SEN=1)
启动条件开始
来自从器件,清零ACKSTAT位(SSPCON2)
SEN=0
R/W=0
向从器件发送地址
SDA
A7
A6
A5
A4
A3
A2
A1
6
7
SSPCON2中的ACKSTAT=1
发送数据
ACK=0
D7
D6
D5
D4
ACK
D3
D2
D1
D0
7
8
把7位地址和R/W写入SSPBUF
开始发送
SCL
S
1
2
3
4
5
8
1
9
2
3
4
5
6
9
P
当CPU响应SSPIF
时,SCL保持低电平
SSPIF
在MSSP中断服务程序中清零
用软件清零
用软件清零
BF
用软件写SSPBUF
写SSPBUF
SEN
启动条件之后,用硬件清零SEN
PEN
R/W
图15-10:I2CTM主控模式发送时序
www.mcu.com.cn
-124-
V1.1
Cmsemicon
此处写SSPBUF
开始发送
SDA
A7 A6
A5 A4
来自从器件的ACK,
SDA=ACKDT=0
来自从器件的ACK
向从器件发送地址
ACK D7 D6
D5
D4
D3
此处使PEN位=1
RCEN被自动清零
RCEN=1,开始下一次接收
RCEN被自动清零
接收来自从器件的数据
R/W=1
A3 A2 A1
ACKEN置1,启动应答序列,
SDA=ACKDT=1
写SSPCON2启动应答序列
SDA=ACKDT(SSPCON2)=0
通过对SSPCON2编程
(RCEN=1),将主器件
配置为接收器
写SSPCON2(SEN=1)
启动条件开始
SEN=0
CMS89F73x5
接收来自从器件的数据
D2
D1
D0
ACK
D7 D6
D5
D4
D3
D2 D1
D0
ACK
总线主器件
终止传输
不发送ACK
SCL
S
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
在CLK下降沿将数据移入
在接收结束时,将SSPIF中
断标志位置1
在应答结束时将SSPIF中断
标志位置1
7
8
9
P
在接收结束时
将SSPIF置1
在应答序列结束时将
SSPIF中断标志位置1
SSPIF
当CPU响应SSPIF时,
SDA=0,SCL=1
用软件清零
用软件清零
用软件清零
用软件清零
用软件
清零
将P位(SSPSTAT
和SSPIF位置1)
BF
最后一位移入SSPSR,其内
容不会被转移到SSPBUF中
ACKEN
图15-11:I2CTM主控模式接收时序(7位地址)
www.mcu.com.cn
-125-
V1.1
Cmsemicon
15.3.7
CMS89F73x5
I C 主控模式启动条件时序
2
要发起启动条件,用户应将 SSPCON2 寄存器的启动条件使能位 SEN 置 1。当 SDA 和 SCL 引脚都采样
为高电平时,波特率发生器重新装入 SSPADD的内容并开始计数。当波特率发生器发生超时(TBRG)时,
如果 SCL 和 SDA 都采样为高电平,则 SDA 引脚被驱动为低电平。当 SCL 为高电平时,将 SDA 驱动为低电
平就是启动条件,将使 S 位(SSPSTAT 寄存器)置 1。随后波特率发生器重新装入 SSPADD的内容并
恢复计数。当波特率发生器超时(TBRG)时,SSPCON2 寄存器的 SEN 位将自动被硬件清零。波特率发生器
暂停工作,SDA 线保持低电平,启动条件结束。
将S位(SSPSTAT)置1
此处写SEN位
完成起始位后,由
硬件将SEN位清零
并将SSPIF位置1
SDA=1,SCL=1
TBRG
TBRG
此处写SSPBUF
SDA
第1位
第2位
TBRG
SCL
TBRG
S
图15-12:第一个启动位时序
15.3.7.1 WCOL 状态标志
当启动序列进行时,如果用户写 SSPBUF,则 WCOL 被置 1,同时缓冲器内容不变(未发生写操作)
。
注:由于不允许事件排队,在启动条件结束之前,不能对 SSPCON2 的低 5 位进行写操作。
www.mcu.com.cn
-126-
V1.1
Cmsemicon
15.3.8
CMS89F73x5
I C 主控模式重复启动条件时序
2
将 RSEN 位(SSPCON2 寄存器)编程为高电平,并且 I2C 逻辑模块处于空闲状态时,就会产生重复启动
条件。当 RSEN 位置 1 时,SCL 引脚被拉为低电平。当 SCL 引脚采样为低电平时,波特率发生器装入
SSPADD的内容,并开始计数。在一个波特率发生器计数周期(TBRG)内 SDA 引脚被释放(其引脚电平
被拉高)
。当波特率发生器超时时,如果 SDA 采样为高电平,SCL 引脚将被拉高。当 SCL 引脚采样为高电平
时,波特率发生器将被重新装入 SSPADD的内容并开始计数。SDA 和 SCL 必须在一个计数周期 TBRG 内
采样为高电平。随后将 SDA 引脚拉为低电平(SDA = 0)并保持一个计数周期 TBRG,同时 SCL 为高电平。然
后 RSEN 位(SSPCON2 寄存器)将自动清零,波特率发生器不会重载,SDA 引脚保持低电平。一旦在 SDA
和 SCL 引脚上检测到启动条件,S 位(SSPSTAT 寄存器)将被置 1。直到波特率发生器超时后,SSPIF 位才
会置 1。
一旦 SSPIF 位被置 1,用户便可以将 7 位地址写入 SSPBUF,。当发送完第一个 8 位并接收到一个 ACK
后,用户可以发送 8 位数据。
S位(SSPSTAT)置1
启动完成时,由硬
件将RSEN位清零
并将SSPIF位置1
SDA=1,SCL=1
写入SSPCON2:
SDA=1,SCL不变
TBRG
TBRG
TBRG
第1位
SDA
此处写SSPBUF
第9个时钟的下降沿
发送结束
TBRG
SCL
TBRG
Sr=重复启动
图15-13:重复启动条件时序波形
15.3.8.1 WCOL 状态标志
当重复启动序列进行时,如果用户写 SSPBUF,则 WCOL 被置 1,同时缓冲器内容不变(未发生写操作)。
注:由于不允许事件排队,在重复启动条件结束之前,不能对SSPCON2的低5位进行写操作。
www.mcu.com.cn
-127-
V1.1
Cmsemicon
15.3.9
CMS89F73x5
应答序列时序
将应答序列使能位 ACKEN(SSPCON2 寄存器)置 1 即可使能应答序列。当该位被置 1 时,SCL 引脚被
拉低,应答数据位的内容出现在 SDA 引脚上。如果用户希望产生一个应答,则应该将 ACKDT 位清零;否则,
用户应该在应答序列开始前将 ACKDT 位置 1。然后波特率发生器进行一个计满返回周期(TBRG)的计数,随
后 SCL 引脚电平被拉高。当 SCL 引脚采样为高电平时(时钟仲裁),波特率发生器再进行一个 TBRG 周期的计
数。然后 SCL 引脚被拉低。在这之后,ACKEN 位自动清零,波特率发生器关闭,MSSP 模块进入空闲模式。
应答序列在此开始,
写SSPCON2
ACKEN=1,ACKDT=0
ACKEN自动清零
TBRG
SDA
D0
SCL
8
TBRG
ACK
9
SSPIF
在接收结束时,
将SSPIF置1
用软件清零
用软件清零
在应答序列结束
时将SSPIF置1
图 15-14:应答序列时序波形
注:TBRG=一个波特率发生器周期。
15.3.9.1 WCOL 状态标志位
如果用户在应答序列正在进行时写 SSPBUF,
WCOL 将被置 1 且缓冲器的内容保持不变(未发生写操作)。
www.mcu.com.cn
-128-
V1.1
Cmsemicon
15.3.10
CMS89F73x5
停止条件序列
在接收/发送结束时,通过置 1 停止序列的使能位,PEN(SSPCON2 寄存器),SDA 引脚将产生一个停止
位。在接收/发送结束时,SCL 引脚在第 9 个时钟的下降沿后保持低电平。当 PEN 位置 1 时,主控器件将 SDA
置为低电平。当 SDA 线采样为低电平时,波特率发生器被重新装入值并递减计数至 0。波特率发生器发生超时
时,SCL 引脚被拉到高电平,且一个 TBRG(波特率发生器计满回零)后,SDA 引脚被重新拉到高电平。当 SDA
引脚采样为高电平且 SCL 也是高电平时,P 位(SSPSTAT 寄存器)置 1。一个 TBRG 周期后,PEN 位清零且
SSPIF 位置 1。
15.3.10.1 WCOL 状态标志
如果用户在停止序列进行过程中试图写 SSPBUF,则 WCOL 位将置 1,缓冲器的内容不会改变(未发生
写操作)
。
采样到SDA为高电平后,SCL=1保
持一个TBRG,接着SDA=1保持一
个TBRG,P位(SSPSTAT)置1
写SSPCON2,PEN置1
PEN位(SSPCON2)被
硬件清零且SSPIF位被置1
第9个时钟周期的下降沿
SCLx
SDAx
TBRG
ACK
P
TBRG
TBRG
在时钟脉冲上升沿前拉
低SDA以建立停止条件
TBRG
TBRG后,SCL被拉高
图 15-15:停止条件接收或发送模式
注:TBRG=一个波特率发生器周期。
www.mcu.com.cn
-129-
V1.1
Cmsemicon
15.3.11
CMS89F73x5
时钟仲裁
如果在任何接收、发送或重复启动/ 停止条件期间,主器件拉高了 SCL 引脚(允许 SCL 引脚悬空为高电
平)
,就会发生时钟仲裁。如果允许 SCL 引脚悬空为高电平,波特率发生器(BRG)将暂停计数,直到实际采
样到 SCL 引脚为高电平为止。当 SCL 引脚采样为高电平时,波特率发生器中将被重新装入 SSPADD的
内容并开始计数。这可以保证当外部器件将时钟拉低时,SCL 始终保持至少一个 BRG 计满返回周期的高电平。
BRG溢出,释放SCL,如果SCL=1,使用
SSPADD装载BRG并使BRG开始计
数以测量高电平时间
发生BRG溢出,释放SCL,从动器件保持
SCL为低电平
SCL=1,BR开始计数时钟高电平的时间
SCL
SCL线在每个机器周期采样一次(TOSC*4)
使BRG保持等待状态直到SCL采样为高电平
SDA
TBRG
TBRG
TBRG
图 15-16:主控发送模式下的时钟仲裁时序
15.3.12
多主机模式
在多主机模式下,通过在检测到启动和停止条件时产生中断可以确定总线何时空闲。停止(P)位和启动
(S)位在复位时或禁止 MSSP 模块时清零。当 P 位置 1 时,可以取得 I2C 总线的控制权;否则总线处于空闲
状态,且 P 位和 S 位清零。当总线忙时,如果出现停止条件,则将产生中断(若允许 MSSP 中断)
。
在多主机模式下工作时,必须监视 SDA 线来进行仲裁,查看信号电平是否为期望的输出电平。此检查由
硬件完成,其结果放在 BCLIF 位。
在以下状态下仲裁可能失败:
◆
地址传输
◆
数据传输
◆
启动条件
◆
重复启动条件
◆
应答条件
www.mcu.com.cn
-130-
V1.1
Cmsemicon
15.3.13
CMS89F73x5
多主机通信、总线冲突与总线仲裁
多主机模式是通过总线仲裁来支持的。当主器件将地址/ 数据位输出到 SDA 引脚时,如果一个主器件通过
将 SDA 引脚悬空为高电平以在 SDA 上输出 1,而另一个主器件输出 0,就会发生总线仲裁。如果 SDA 引脚
上期望的数据是 1,而实际在 SDA 引脚上采样到的数据是 0,则发生了总线冲突。主器件将把总线冲突中断标
志位 BCLIF 置 1,并将 I2C 端口复位到空闲状态。
如果在发送过程中发生总线冲突,
则发送停止,BF 标志位清零,SDA 和 SCL 线被拉高,并且允许对 SSPBUF
进行写操作。当执行完总线冲突中断服务程序后,如果 I2C 总线空闲,用户可通过发出启动条件恢复通信。如
果在启动、重复启动、停止或应答条件的进行过程中发生总线冲突,则该条件被中止,SDA 和 SCL 线被拉高,
SSPCON2 寄存器中的对应控制位清零。当执行完总线冲突中断服务程序后,如果 I2C 总线空闲,用户可通过
发出启动条件恢复通信。主器件将继续监视 SDA 和 SCL 引脚。如果出现停止条件,SSPIF 位将被置 1。无论
发生总线冲突时发送的进度如何,写 SSPBUF 都会从第一个数据位开始发送数据。
在多主机模式下,通过在检测到启动和停止条件时产生中断可以确定总线何时空闲。P 位置 1 时,可以获
取 I2C 总线的控制权,否则总线空闲且 S 和 P 位清零。
图 15-17:发送和应答时的总线冲突时序
15.3.14
从动模式
在从动模式下,SCL 引脚和 SDA 引脚必须被配置为输入(TRISC置 1)
。需要时(如从发送器)MSSP
模块将用输出数据改写输入状态。
当地址匹配时或在地址匹配后传输的数据被接收时,硬件会自动产生一个应答(ACK)脉冲,并把当时
SSPSR 寄存器中接收到的数据装入 SSPBUF 寄存器。
只要满足下列条件之一,MSSP 模块就不会产生此 ACK 脉冲:
-
缓冲器满标志位 BF(SSPCON 寄存器)在接收到传输的数据前置 1。
-
在接收到传输的数据之前,溢出标志位 SSPOV(SSPCON 寄存器)已被置 1。
在这种情况下,SSPSR 寄存器的值不会载入 SSPBUF,但是 PIR1 寄存器的 SSPIF 位会置 1。BF 位是通
过读取 SSPBUF 寄存器清零的,而 SSPOV 位是通过软件清零的。
为确保正常工作,SCL 时钟输入必须满足最小高电平时间和最小低电平时间要求。
www.mcu.com.cn
-131-
V1.1
Cmsemicon
CMS89F73x5
15.3.14.1 寻址
一旦使能了 MSSP 模块,它就会等待启动条件产生。在启动条件出现后,8 位数据被移入 SSPSR 寄存器。
在时钟(SCL)线的上升沿采样所有的输入位。寄存器 SSPSR的值会和 SSPADD 寄存器的值比较,该
比较是在第 8 个时钟脉冲(SCL)的下降沿进行的。如果地址匹配,并且 BF 位和 SSPOV 位为零,会发生下
列事件:
⚫
SSPSR 寄存器的值被装入 SSPBUF 寄存器。
⚫
缓冲器满标志位 BF 置 1。
⚫
产生 ACK 脉冲。
⚫
在第 9 个 SCL 脉冲的下降沿,PIR1 寄存器的 MSSP 中断标志位 SSPIF 置 1(如果允许中断则产生
中断)
。
15.3.14.2 接收
当地址字节的 R/W 位清零并发生地址匹配时,SSPSTAT 寄存器的 R/W 位清零。接收到的地址被装入
SSPBUF 寄存器。
当存在地址字节溢出条件时,则不会产生应答脉冲(ACK)。溢出条件是指 BF 位(SSPSTAT 寄存器)置 1,
或者 SSPOV 位(SSPCON 寄存器)置 1。每个数据传输字节都会产生一个 MSSP 中断。必须用软件将 PIR1
寄存器的中断标志位 SSPIF 清零。SSPSTAT 寄存器用于确定该字节的状态。
www.mcu.com.cn
-132-
V1.1
Cmsemicon
CMS89F73x5
15.3.14.3 发送
当接收的地址字节的 R/W 位置 1 并发生地址匹配时,SSPSTAT 寄存器的 R/W 位置 1。接收到的地址被
装入 SSPBUF 寄存器。ACK 脉冲在第 9 位上发送,同时 SDA 引脚保持低电平。传输的数据必须装入 SSPBUF
寄存器,同时也被装入 SSPSR 寄存器。随后应通过将 CKP 位(SSPCON 寄存器)置 1 使能 SCL 引脚。在发
送另一个时钟脉冲前,主控器件必须监视 SCL 引脚。从动器件可以通过延长时钟,暂停与主控器件的数据传
输。8 个数据位在 SCL 输入的下降沿移出。这可确保在 SCL 为高电平期间 SDA 信号是有效的。
每个数据传输字节都会产生一个 MSSP 中断。SSPIF 标志位必须由软件清零,SSPSTAT 寄存器用于确定
字节的状态。SSPIF 位在第 9 个时钟脉冲的下降沿被置 1。来自主接收器的 ACK 脉冲将在 SCL 输入第 9 个脉
冲的上升沿锁存。如果 SDA 线为高电平(无 ACK),那么表示数据传输已完成。在这种情况下,如果从器件锁
存了 ACK,将复位从动逻辑(复位 SSPSTAT 寄存器),同时从器件监视下一个起始位的出现。如果 SDA 线为
低电平(ACK)
,则必须将接下去要发送的数据装入 SSPBUF 寄存器,这也将装载 SSPSR 寄存器。应将 CKP
置 1 使能 SCL。
不发送ACK
接收地址
SDA
SCL
S
A7 A6
A5
A4
A3 A2 A1
1
3
4
5
2
6
7
接收数据
接收数据
R/W=0
D7 D6
ACK
1
9
8
D5
D4
D3
D2
D1
D0
3
4
5
6
7
8
2
ACK D7 D6
9
1
2
无ACK
D5
D4
D3
D2 D1
D0
3
4
5
6
8
7
SSPIF
9
P
总线主控器件终止传输
由软件清零
由软件清零
BF
读SSPBUF寄存器
SSPOV
因为SSPBUF寄存器仍为满,所以SSPOV位置1
图 15-18:I2CTM 从动模式接收时序(7 位地址)
接收地址
SDA
SCL
S
A7
A6
A5
A4
A3
A2
A1
1
2
3
4
5
6
7
采样数据输入
ACK
8
R/W=0
NACK
发送数据
R/W=1
9
D7
D6
D5
1
3
2
SCL保持低电平
当CPU响应SSPIF时
D4
D3
D2 D1
D0
4
5
6
8
7
9
P
SSPIF
由软件清零
由软件清零
BF
SSPBUF要用软件写入
} 来自SSP中断服
务程序
CKP
写SSPBUF后置1
(SSPBUF的内容必须
在CKP位被置1前写入)
图 15-19:I2CTM 从动模式发送时序(7 位地址)
www.mcu.com.cn
-133-
V1.1
Cmsemicon
CMS89F73x5
SSP 屏蔽寄存器
15.3.15
在 I2C 从动模式下,SSP 屏蔽(SSPMSK)寄存器用于在地址比较操作下屏蔽 SSPSR 寄存器中的值。
SSPMSK 寄存器中某位为 0 会使 SSPSR 寄存器中相应的位成为“无关位”
。
此寄存器在任何复位条件发生时均复位为全 1,因此,在写入屏蔽值前,它对标准 SSP 操作没有影响。必
须在通过设置 SSPM位以选择 I2C 从动模式之前对此寄存器进行初始化。只有通过 SSPCON 的
SSPM位选择了适当的模式后才可访问此寄存器。
SSP 屏蔽寄存器在以下情况下有效:
-
7 位地址模式:与 A进行地址比较。
-
10 位地址模式:仅与 A进行地址比较。
SSP 屏蔽在接收到地址的第一个(高)字节期间无效。
SSPMSK:SSP 屏蔽寄存器(93H)
(1)
93H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SSPMSK
MSK7
MSK6
MSK5
MSK4
MSK3
MSK2
MSK1
MSK0(2)
读写
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
复位值
1
1
1
1
1
1
1
1
Bit7~Bit1
MSK:
Bit 0
屏蔽位。
1=
接收到的地址的Bit n 与SSPADD比较以检测I2C的地址匹配情况。
0=
接收到的地址的Bit n 不用于检测I2C的地址匹配情况。
未用。
注:
1. 当SSPCON位SSPM = 1001时,任何对SSPADDSFR地址的读或写操作都通过SSPMSK寄存
进行。
2.
在所有其他 SSP 模式下,此位无效。
15.3.16
休眠模式下的操作
在休眠模式下,I2C 模块无法使用。
15.3.17
复位的影响
复位会禁止 MSSP 模块并终止当前的传输。
www.mcu.com.cn
-134-
V1.1
Cmsemicon
CMS89F73x5
16. 数据 EEPROM 和程序存储器控制
16.1 概述
数据 EEPROM 和程序存储器在正常工作状态下(整个 VDD 范围内)是可读写的。这些存储器并不直接
映射到寄存器文件空间,而是通过特殊功能寄存器(SFR)对其进行间接寻址。共有 6 个 SFR 寄存器用于访
问这些存储器:
⚫
EECON1
⚫
EECON2
⚫
EEDAT
⚫
EEDATH
⚫
EEADR
⚫
EEADRH
访问数据 EEPROM 模块时,EEDAT 寄存器存放 8 位读写的数据,而 EEADR 寄存器存放被访问的 EEDAT
单元的地址。该系列中的器件具有 64 字节的数据 EEPROM,地址范围为 0h 到 03Fh。
访问器件的程序存储器时,EEDAT 和 EEDATH 寄存器形成一个双字节字用于保存要读/写的 16 位数据,
EEADR 和 EEADRH 寄存器组成一个双字节字用于保存待读取的 13 位程序存储器地址。
对于 CMS89F73x5,器件具有 8K 字的程序存储器,地址范围从 0000h 到 1FFFh,在所有地址范围内都
是可以读的,但是只有在 1000h-1FFFh 地址范围内是可以写的。
程序存储器允许以双字节字为单位读写。数据 EEPROM 允许字节读写。字节写操作可自动擦除目标单元
并写入新数据(在写入前擦除)
。
写入时间由片上定时器控制。写入和擦除电压是由片上电荷泵产生的,此电荷泵额定工作在器件的电压范
围内,用于进行字节或字操作。
当器件受代码保护时,CPU 仍可继续读写数据 EEPROM 和程序存储器。代码保护时,器件编程器将不再
能访问数据或程序存储器。
www.mcu.com.cn
-135-
V1.1
Cmsemicon
CMS89F73x5
16.2 相关寄存器
16.2.1
EEADR 和 EEADRH 寄存器
EEADR 和 EEADRH 寄存器能寻址最大 64 字节的数据 EEPROM 或最大 8K 字的程序存储器。
当选择程序地址值时,地址的高字节被写入 EEADRH 寄存器而低字节被写入 EEADR 寄存器。当选择数
据地址值时,只将地址的低字节写入 EEADR 寄存器。
16.2.2
EECON1 和 EECON2 寄存器
EECON1 是访问 EE 存储器的控制寄存器。
控制位 EEPGD 决定访问的是程序存储器还是数据 EEPROM。该位被清零时,和复位时一样,任何后续
操作都将针对数据 EEPROM 进行。该位置 1 时,任何后续操作都将针对程序存储器进行。
控制位 RD 和 WR 分别启动读和写。用软件只能将这些位置 1 而无法清零。在读或写操作完成后,由硬件
将它们清零。由于无法用软件将 WR 位清零,从而可避免意外地过早终止写操作。
-
当 WREN 置 1 时,允许对存储器执行写操作。上电时,WREN 位被清零。当正常的写入操作被 LVR
复位或 WDT 超时复位中断时,WRERR 位会置 1。在这些情况下,复位后用户可以检查 WRERR 位
并重写相应的单元。
-
当写操作完成时 PIR2 寄存器中的中断标志位 EEIF 被置 1。此标志位必须用软件清零。
EECON2 不是物理寄存器。读 EECON2 得到的是全 0。
EECON2 寄存器仅在执行写序列时使用。
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:
从存储器中读取或向存储器写入的数据低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:
指定存储器读/写操作的地址的低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
www.mcu.com.cn
EEDATH:
从存储器中读取或向存储器写入的数据高8位。
-136-
V1.1
Cmsemicon
CMS89F73x5
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~Bit5
未用,读为0
Bit4~Bit0
EEADRH:
指定存储器读/写操作的高5位地址。
EEPROM 控制寄存器 EECON1(11BH)
11BH
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
Bit6~Bit4
Bit3
Bit2
Bit1
Bit0
www.mcu.com.cn
EEPGD:
1=
0=
未用
WRERR:
1=
0=
WREN:
1=
0=
WR:
1=
0=
RD:
1=
0=
Bit1
Bit0
程序/数据EEPROM选择位;
操作程序存储器;
操作数据EEPROM。
EEPROM错误标志位;
写操作过早终止(正常工作期间的任何WDT复位或欠压复位);
写操作完成。
EEPROM写使能位;
允许写周期;
禁止写入存储器。
写控制位;
启动写周期(写操作一旦完成由硬件清零该位,用软件只能将WR位置1,但不能清零);
写周期完成。
读控制位;
启动存储器读操作(由硬件清零RD,用软件只能将RD位置1,但不能清零);
不启动存储器读操作。
-137-
V1.1
Cmsemicon
CMS89F73x5
16.3 读数据 EEPROM
要读取数据 EEPROM,用户必须将地址写入 EEADR 寄存器,清零 EECON1 寄存器的 EEPGD 控制位,
然后将控制位 RD 置 1。一旦设置好读控制位,数据 EEPROM 控制器将使用接下来的两个指令周期来读数据,
这会导致紧随“SETBEECON1,RD”指令后的两条指令被忽略。在紧接着的下一个周期 EEDAT 寄存器中就有
数据了。EEDAT 将保存此值直至下一次用户向该单元读取或写入数据时为止。
注:程序存储器读操作后的两条指令必须为 NOP。这可阻止用户在 RD 位置后的下一条指令执行双周期
指令。
例:读数据 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
-138-
;选择数据 EEPROM
;使能读信号
;这里读取数据,必须加 NOP 指令
V1.1
Cmsemicon
CMS89F73x5
16.4 写数据 EEPROM
要写数据 EEPROM,用户应首先将该单元的地址写入 EEADR 寄存器并将数据写入 EEDAT 寄存器。然后
用户必须按特定顺序开始写入每个字节。
如果没有完全按照下面的指令顺序(即首先将 55h 写入 EECON2,随后将 AAh 写入 EECON2,最后将
WR 位置 1)写每个字节,将不会启动写操作。在该代码段中应禁止中断。
此外,必须将 EECON1 中的 WREN 位置 1 以使能写操作。这种机制可防止由于代码执行错误(异常)
(即
程序跑飞)导致误写数据 EEPROM。在不需要写存储器时,用户应该始终保持 WREN 位清零。WREN 位不
能被硬件清零。
一个写周期启动后,将 WREN 位清零将不会影响此写周期。除非 WREN 位置 1,否则 WR 位将无法置 1。
写周期完成时,WR 位由硬件清零并且数据 EEPROM 写完成中断标志位(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
-139-
;将要写入的地址放入 EEADR 寄存器
;将要写入的数据放入 EEDAT 寄存器
;允许写操作
;关闭所有中断
;给 EECON2 写 55H
;给 EECON2 写 0AAH
;使能写信号
;判断写操作是否完成,
;写结束,关闭写使能位
V1.1
Cmsemicon
CMS89F73x5
16.5 读程序存储器
要读取程序存储器单元,
用户必须将地址的高位和低位分别写入 EEADRH 和 EEADR 寄存器,将 EECON1
寄存器的 EEPGD 位置 1,然后将控制位 RD 置 1。一旦设置好读控制位,数据 EEPROM 控制器将使用接下来
的两个指令周期来读数据,这会导致紧随“SETBEECON1,RD”指令后的两条指令被忽略。在紧接着的下一
个周期 EEDAT 和 EEDATH 寄存器中就有数据了,因此在随后的指令中将该数据读作两个字节。
EEDAT 和 EEDATH 寄存器将保存此值直至下一次用户向该单元读取或写入数据时为止。
注:程序存储器读操作后的两条指令必须为 NOP。这可阻止用户在 RD 位置 1 后的下一条指令执行双周
期指令。
例:读程序存储器
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
;保存读取的数据
-140-
;将要读取的地址高位放入 EEADRH 寄存器
;选择操作程序存储器
;允许读操作
V1.1
Cmsemicon
CMS89F73x5
16.6 写程序存储器
需要将系统配置寄存器中的 ROM_PROG 位设置为 ENABLE,才能写程序存储器。
程序存储器只能以每个字为单位写入。
要对程序存储器写入数据,必须首先将数据载入缓冲寄存器。这是通过将目标地址写入 EEADR 和
EEADRH 寄存器,再将数据写入 EEDAT 和 EEDATH 寄存器完成的。然后,执行如下事件序列:
1.
将 EECON1 寄存器的 EEPGD 控制位置 1。
2.
先后将 55h 和 AAh 写入 EECON2(编程序列)。
3.
将 EECON1 寄存器的 WR 控制位置 1,开始写操作。
执行了 SETBEECON1,WR 指令之后,处理器需要 2 个指令周期以设置擦除/写操作。用户必须在将 WR
位置 1 的指令后放置两条 NOP 指令。执行完写操作指令后,处理器会使内部操作暂停 2.5ms(典型值)时间。
因为时钟和外设仍继续工作,所以这并不是休眠模式。写周期结束后,处理器将从 EECON1 写指令后的第三
条指令恢复工作。
例:写程序存储器
LD
LD
LD
LD
LD
LD
LD
LD
SETB
SETB
CLRB
SZB
JP
A,ADDRL
EEADR,A
A,ADDRH
EEADRH,A
A,DATAL
EEDAT,A
A,DATAH
EEDATH,A
EECON1,EEPGD
EECON1,WREN
INTCON,GIE
INTCON,GIE
$-2
;写地址
LDIA
LD
LDIA
LD
SETB
NOP
NOP
055H
EECON2,A
0AAH
EECON2,A
EECON1,WR
;给 EECON2 寄存器写 55H 跟 0AAH
CLRB
SETB
SZB
JP
CLRB
EECON1,WREN
INTCON,GIE
EECON1,WR
$-1
EECON1,WREN
www.mcu.com.cn
;写数据
;允许操作 EEPROM
;使能写信号
;关闭中断
;确认中断关闭
;开始写程序存储器
;写缓冲需要延时
-141-
;打开中断
;判断写操作是否完成,写过程中 WREN 位必须保持 1
;写结束,关闭写使能位
V1.1
Cmsemicon
CMS89F73x5
16.7 数据 EEPROM 操作注意事项
16.7.1
写校验
根据具体的应用,好的编程习惯一般要求将写入数据 EEPROM/程序存储器的值对照期望值进行校验。
16.7.2
避免误写的保护
有些情况下,用户可能不希望向存储器中写入数据。为防止误写数据 EEPROM,芯片内嵌了各种保护机
制。上电时清零 WREN 位。而且,上电延时定时器(延迟时间为 18ms)会防止对数据 EEPROM 执行写操作。
启动写系列后,禁止操作 EEADR,EEADRH,EEDAT,EEDATH 寄存器和 EECON1 的 EEPGD 位,直
至 EECON1 的 WR 位为 0。
写操作的启动序列以及 WREN 位将共同防止在以下情况下发生误写操作:
⚫
欠压
⚫
电源毛刺
⚫
软件故障
16.7.3
代码保护下的数据 EEPROM 操作
通过烧录将配置字寄存器中的 EE_PROTECT 位设置 ENABLE,可以将数据 EEPROM 代码保护。
当数据 EEPROM 被代码保护时,只有 CPU 可以对数据 EEPROM 执行读/写操作。对数据 EEPROM 进行
代码保护的同时,建议用户也对程序存储器进行代码保护。这将防止有人通过在已有代码上写入零(这将作为
NOP 执行)
,来访问一个在未使用的程序存储器中编写的额外程序,以达到输出数据 EEPROM 内容的目的。
将程序存储器中未使用的地址单元编程为 0 有助于防止数据 EEPROM 的代码保护受到破坏。
www.mcu.com.cn
-142-
V1.1
Cmsemicon
CMS89F73x5
17. DIV 硬件除法器
17.1 硬件除法器概述
CMS89F73x5 系列单片机内置一个硬件除法器,32 位被除数,16 位除数,不带余数输出。
通过 DIVE3,DIVE2,DIVE1 和 DIVE0 寄存器设置被除数,这四个寄存器只能被写入,无法被读取。通
过 DIVS1 和 DIVS0 寄存器设置除数,这两个寄存器可读写。运算的商存入 DIVQ3,DIVQ2,DIVQ1 和 DIVQ0
寄存器中,这四个寄存器只能被读取,无法被写入,DIVEx 和 DIVQx 共用一个寄存器地址,使能 DIVEN,等
待 CAL_END 位为 1 后才能读取商。
17.2 与硬件除法器相关的寄存器
有 11 个寄存器与除法器模块相关,分别是 DIVCON,DIVE3,DIVE2,DIVE1,DIVE0,DIVS1,DIVS0,
DIVQ3,DIVQ2,DIVQ1 和 DIVQ0。
DIV 控制寄存器 DIVCON(189H)
189H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
DIVCON
DIVEN
CAL_END
—
—
—
—
—
DIV_CLK
R/W
R/W
R
—
—
—
—
—
R/W
复位值
0
1
—
—
—
—
—
0
Bit7
DIVEN:
0=
1=
CAL_END:
0=
1=
未用
DIV_CLK:
0:
1:
Bit6
Bit5~Bit1
Bit0
DIV 除法器使能位
禁止;
使能。
运算结束标志位
除法运算进行中;
除法运算尚未开始或已结束。
DIV 运算时钟分频选择位
FSYS/2;
FSYS/4;
除法器被除数寄存器 DIVE3 (18CH)
18CH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
W
W
W
W
W
W
W
W
复位值
0
0
0
0
0
0
0
0
DIVEH1
Bit7~Bit0
被除数 DIVE[32:24]
除法器被除数寄存器 DIVE2 (18DH)
18DH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
W
W
W
W
W
W
W
W
复位值
0
0
0
0
0
0
0
0
DIVEH0
Bit7~Bit0
www.mcu.com.cn
被除数 DIVE[23:16]
-143-
V1.1
Cmsemicon
CMS89F73x5
除法器被除数寄存器 DIVE1 (18EH)
18EH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
W
W
W
W
W
W
W
W
复位值
0
0
0
0
0
0
0
0
DIVEM
Bit7~Bit0
被除数 DIVE[15:8]
除法器被除数寄存器 DIVE0(18FH)
18FH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
W
W
W
W
W
W
W
W
复位值
0
0
0
0
0
0
0
0
DIVEL
Bit7~Bit0
被除数 DIVE[7:0]
除法器除数寄存器 DIVS1 (187H)
187H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
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
DIVSH
Bit7~Bit0
除数 DIVS[15:8]
除法器除数寄存器 DIVS0 (188H)
188H
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
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
DIVSL
Bit7~Bit0
除数 DIVS[7:0]
除法器商寄存器 DIVQ3 (18CH)
18CH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
R
R
R
R
R
R
R
R
复位值
0
0
0
0
0
0
0
0
DIVQH1
Bit7~Bit0
www.mcu.com.cn
商 DIVQ[32:24]
-144-
V1.1
Cmsemicon
CMS89F73x5
除法器商寄存器 DIVQ2(18DH)
18DH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
R
R
R
R
R
R
R
R
复位值
0
0
0
0
0
0
0
0
DIVQH0
Bit7~Bit0
商 DIVQ[23:16]
除法器商寄存器 DIVQ1(18EH)
18EH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
R
R
R
R
R
R
R
R
复位值
0
0
0
0
0
0
0
0
DIVQM
Bit7~Bit0
商 DIVQ[15:8]
除法器商寄存器 DIVQ0 (18FH)
18FH
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
R
R
R
R
R
R
R
R
复位值
0
0
0
0
0
0
0
0
DIVQL
Bit7~Bit0
www.mcu.com.cn
商 DIVQ[7:0]
-145-
V1.1
Cmsemicon
CMS89F73x5
18. 触摸按键
18.1 触摸按键模块概述
触摸检测模块是为实现人体触摸接口而设计的集成电路。可替代机械式轻触按键,实现防水防尘、密封隔
离、坚固美观的操作接口。
技术参数:
◆ 1-16 个按键可选
◆ 可配置成有外部电容或无外部电容模式
◆ 高抗干扰性能
18.2 触摸模块使用注意事项
◆ 触摸按键检测部分的地线应该单独连接成一个独立的地,再有一个点连接到整机的共地。
◆ 避免高压、大电流、高频操作的主板与触摸电路板上下重迭安置。如无法避免,应尽量远离高压大电
流的期间区域或在主板上加屏蔽。
◆ 感应盘到触摸芯片的连线尽量短和细,如果 PCB 工艺允许尽量采用 0.1mm 的线宽。
◆ 感应盘到触摸芯片的连线不要跨越强干扰、高频的信号线。
◆ 感应盘到触摸芯片的连线周围 0.5mm 不要走其它信号线。
www.mcu.com.cn
-146-
V1.1
Cmsemicon
CMS89F73x5
19. 电气参数
19.1 极限参数
电源供应电压………………………………………………………………….….………GND-0.3V~GND+6.0V
存储温度…………………………………………………………………….….…………………….-50℃~125℃
工作温度………………………………………………………………...………..……………………-40℃~85℃
端口输入电压………………………………………………………......…………………GND-0.3V~VDD+0.3V
所有端口最大灌电流…………………………………………………...…………………………………..200mA
所有端口最大拉电流………………………………………………………………………………………-150mA
注:如果器件工作条件超过上述“极限参数”,可能会对器件造成永久性损坏。上述值仅为运行条件极大值,
我们不建议器件在该规范规定的范围以外运行。器件长时间工作在极限值条件下,其稳定性会受到影
响。
19.2 直流电气特性
(VDD=5V,TA= 25℃,除非另有说明)
测试条件
符号
参数
VDD
工作电压
IDD
工作电流
ISTB
静态电流
VIL
低电平输入电压
----
VIH
高电平输入电压
----
0.7VDD
VOH
高电平输出电压
不带负载
0.9VDD
VOL
低电平输出电压
不带负载
VEEPROM
EEPROM 模块擦写电压
----
RPH
上拉电阻阻值
IOL1
VDD
条件
最小值
典型值
最大值
单位
FSYS=16MHz
3.3
5.5
V
FSYS=8MHz
2.5
5.5
V
5V
FSYS=8MHz
3
mA
3V
FSYS=8MHz
2
mA
5V
----
0.1
3V
----
0.1
5
μA
3
μA
0.3VDD
V
V
V
2.5
0.1VDD
V
5.5
V
5V
VO=0.5VDD
30
kΩ
3V
VO=0.5VDD
50
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
150
mA
3V
VOL=0.3VDD
70
mA
IOH2
输出口拉电流
(LED SEG 口最大电流)
5V
VOH=0.7VDD
-30
mA
3V
VOH=0.7VDD
-12
mA
VBG
www.mcu.com.cn
内部基准电压 1.2V
VDD=2.5~5.5V TA=25℃
VDD=2.5~5.5V
TA=-40~85℃
-147-
-1.5%
1.2
1.5%
V
-2.0%
1.2
2.0%
V
V1.1
Cmsemicon
CMS89F73x5
19.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
19.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.3V
VDD=2.5~5.5V
3.1
3.3
3.6
V
最小值
典型值
V/ms
19.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=2.5~5.5V
TA=25℃
-2%
8
+2%
MHz
VDD=4.5~5.5V
TA=-40~85℃
-2.5%
8
+2.5%
MHz
VDD=2.5~5.5V
TA=-40~85℃
-3.5%
8
+3.5%
MHz
VDD=4.5~5.5V
TA=25℃
-1.5%
16
+1.5%
MHz
VDD=3.3~5.5V
TA=25℃
-2%
16
+2%
MHz
VDD=4.5~5.5V
TA=-40~85℃
-2.5%
16
+2.5%
MHz
VDD=3.3~5.5V
TA=-40~85℃
-3.5%
16
+3.5%
MHz
-148-
V1.1
Cmsemicon
CMS89F73x5
20. 指令
20.1 指令一览表
助记符
操作
指令周期
标志
控制类-3
NOP
空操作
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
清零 ACC
1
Z
逻辑运算-16
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
DECR
[R]
递减数据存储器 R,结果放入 R
1
Z
移位操作-8
递增递减-4
www.mcu.com.cn
-149-
V1.1
Cmsemicon
助记符
CMS89F73x5
操作
指令周期
标志
位操作-2
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
查表-2
TABLE
TABLEA
数学运算-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→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]
1
Z,C,DC,OV
HSUBIA
i
ACC-[R]- C →R
ACC-i→ACC
1
Z,C,DC,OV
从子程序返回
2
NONE
从子程序返回,并将立即数 I 存入 ACC
2
NONE
从中断返回
2
NONE
无条件转移-5
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
条件转移-8
www.mcu.com.cn
-150-
V1.1
Cmsemicon
CMS89F73x5
20.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)
-151-
V1.1
Cmsemicon
ADDIA
i
操作:
将立即数 i 加 ACC,结果放入 ACC
周期:
1
影响标志位:
C,DC,Z,OV
CMS89F73x5
举例:
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 77H)=07H
ANDR
[R]
操作:
寄存器 R 和 ACC 进行逻辑与运算,结果放入 R
周期:
1
影响标志位:
Z
举例:
LDIA
0FH
;给 ACC 赋值 0FH
LD
R01,A
;将 ACC 的值(0FH)赋给寄存器 R01
LDIA
77H
;给 ACC 赋值 77H
ANDR
R01
;执行结果:R01=(0FH and 77H)=07H
ANDIA
i
操作:
将立即数 i 与 ACC 进行逻辑与运算,结果放入 ACC
周期:
1
影响标志位:
Z
举例:
LDIA
0FH
;给 ACC 赋值 0FH
ANDIA
77H
;执行结果:ACC =(0FH and 77H)=07H
LOOP
;调用名称定义为”LOOP”的子程序地址
CALL
add
操作:
调用子程序
周期:
2
影响标志位:
无
举例:
CALL
www.mcu.com.cn
-152-
V1.1
Cmsemicon
CMS89F73x5
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
-153-
V1.1
Cmsemicon
COMR
[R]
操作:
寄存器 R 取反,结果放入 R
周期:
1
影响标志位:
Z
CMS89F73x5
举例:
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
-154-
V1.1
Cmsemicon
HSUBR
[R]
操作:
ACC 减 R,结果放入 R
周期:
1
影响标志位:
C,DC,Z,OV
CMS89F73x5
举例:
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
HSUBCR
[R]
操作:
ACC 减 R 减 C,结果放入 R
周期:
1
影响标志位:
C,DC,Z,OV
;执行结果:ACC=(80H-77H-C)=09H(C=0)
ACC=(80H-77H-C)=08H(C=1)
举例:
LDIA
077H
;ACC 赋值 077H
LD
R01,A
;将 ACC 的值(077H)赋给寄存器 R01
LDIA
HSUBC
R
080H
R01
;ACC 赋值 080H
INCA
[R]
操作:
寄存器 R 自加 1,结果放入 ACC
周期:
1
影响标志位:
Z
;执行结果:R01=(80H-77H-C)=09H(C=0)
R01=(80H-77H-C)=08H(C=1)
举例:
LDIA
0AH
;ACC 赋值 0AH
LD
R01,A
;将 ACC 的值(0AH)赋给寄存器 R01
INCA
R01
;执行结果:ACC=(0AH+1)=0BH
www.mcu.com.cn
-155-
V1.1
Cmsemicon
INCR
[R]
操作:
寄存器 R 自加 1,结果放入 R
周期:
1
影响标志位:
Z
CMS89F73x5
举例:
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
-156-
V1.1
Cmsemicon
CMS89F73x5
NOP
操作:
空指令
周期:
1
影响标志位:
无
举例:
NOP
NOP
ORIA
i
操作:
立即数与 ACC 进行逻辑或操作,结果赋给 ACC
周期:
1
影响标志位:
Z
举例:
LDIA
0AH
;ACC 赋值 0AH
ORIA
030H
;执行结果:ACC =(0AH or 30H)=3AH
ORA
[R]
操作:
寄存器 R 跟 ACC 进行逻辑或运算,结果放入 ACC
周期:
1
影响标志位:
Z
举例:
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 30H)=3AH
www.mcu.com.cn
-157-
V1.1
Cmsemicon
CMS89F73x5
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
;操作结果:ACC=06H(C=0);
ACC=07H(C=1)
C=0
www.mcu.com.cn
-158-
V1.1
Cmsemicon
CMS89F73x5
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
;操作结果:ACC=01H(C=0);
ACC=081H(C=1);
C=1
www.mcu.com.cn
-159-
V1.1
Cmsemicon
CMS89F73x5
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
-160-
V1.1
Cmsemicon
CMS89F73x5
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
-161-
V1.1
Cmsemicon
CMS89F73x5
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
-162-
V1.1
Cmsemicon
CMS89F73x5
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
-163-
V1.1
Cmsemicon
CMS89F73x5
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
-164-
V1.1
Cmsemicon
CMS89F73x5
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
-165-
V1.1
Cmsemicon
CMS89F73x5
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
-166-
V1.1
Cmsemicon
CMS89F73x5
21. 封装
21.1 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
-
-167-
8°
V1.1
Cmsemicon
CMS89F73x5
21.2 SOP28
Millimeter
Symbol
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
-
-168-
8°
V1.1
Cmsemicon
CMS89F73x5
22. 版本修订说明
版本号
时间
修改内容
V1.0
2019 年 7 月
初始版本
V1.1
2019 年 10 月
更正 MSSP 模块部分描述
www.mcu.com.cn
-169-
V1.1