上海芯圣电子股份有限公司
Shanghai Holychip Electronic Co.,Ltd.
HC18P12xL
数据手册
20 引脚 8 位
AD 型 OTP 单片机
HC18P12xL
目录
1 产品简述 ........................................................................................................................................................... 5
1.1
1.2
1.3
1.4
特性 ............................................................................................................................................................ 5
系统框图 .................................................................................................................................................... 7
引脚图 ........................................................................................................................................................ 8
引脚电路 .................................................................................................................................................. 10
2 电性参数 ......................................................................................................................................................... 11
2.1 极限参数 ................................................................................................................................................... 11
2.2 直流特性 ................................................................................................................................................... 11
2.3 交流特性 ................................................................................................................................................... 12
2.4 电气特性曲线图 ....................................................................................................................................... 12
3 中央处理器(CPU) ..................................................................................................................................... 13
3.1 存储器 ...................................................................................................................................................... 13
3.2 寻址模式 .................................................................................................................................................. 25
3.3 堆栈 .......................................................................................................................................................... 26
4 复位 ................................................................................................................................................................. 27
4.1 概述 .......................................................................................................................................................... 27
4.2 上电复位 .................................................................................................................................................. 28
4.3 看门狗定时器复位 ................................................................................................................................... 28
4.4 欠压复位 .................................................................................................................................................. 29
4.5 外部复位 .................................................................................................................................................. 30
5 系统时钟 ......................................................................................................................................................... 33
5.1
5.2
5.3
5.4
概述 .......................................................................................................................................................... 33
时钟框图 .................................................................................................................................................. 33
系统高频时钟 .......................................................................................................................................... 34
系统低频时钟 .......................................................................................................................................... 35
6 系统工作模式 ................................................................................................................................................. 37
6.1 模式切换举例 ........................................................................................................................................... 38
6.2 高低频模式切换 ....................................................................................................................................... 39
6.3 唤醒时间 ................................................................................................................................................... 40
6.4 OSCCON 寄存器 ...................................................................................................................................... 40
7 中断源 ............................................................................................................................................................. 41
7.1 内核中断 .................................................................................................................................................. 42
7.2 外设中断 .................................................................................................................................................. 43
7.3 GIE 全局中断............................................................................................................................................ 46
7.4 中断保护 .................................................................................................................................................. 46
7.5 TIMER0 定时器中断 .................................................................................................................................. 47
7.6 INT0 外部中断 ......................................................................................................................................... 47
-2-
HC18P12xL
7.7 PORT 电平变化中断 ................................................................................................................................ 48
7.8 TIMER2 定时器中断 ................................................................................................................................. 49
7.9 TIMER1 中断 .............................................................................................................................................. 50
7.10 AD 中断 .................................................................................................................................................. 51
7.11 CCP 中断................................................................................................................................................. 51
7.12 PWM 中断............................................................................................................................................... 51
7.13 多中断操作 ............................................................................................................................................ 51
8 I/O 口................................................................................................................................................................ 53
8.1 I/O 口输入输出控制寄存器 ..................................................................................................................... 53
8.2 I/O 口上拉控制寄存器 ............................................................................................................................. 54
8.3 I/O 口下拉控制寄存器 ............................................................................................................................. 54
8.4 PORT 驱动控制寄存器 ............................................................................................................................ 55
8.5 I/O 口数据寄存器 ..................................................................................................................................... 56
8.6 管脚配置寄存器 ...................................................................................................................................... 56
9 定时器/计数器 ................................................................................................................................................ 57
9.1 看门狗定时器 .......................................................................................................................................... 57
9.2 TIMER0 定时器/计数器............................................................................................................................. 58
9.3 TIMER1 定时器/计数器............................................................................................................................. 61
9.4 TIMER2 定时器 .......................................................................................................................................... 63
9.5 CCP 模块................................................................................................................................................... 64
10 PWM 模块 ..................................................................................................................................................... 73
10.1 概述 ........................................................................................................................................................ 73
10.2 PWM 相关寄存器 ................................................................................................................................... 73
10.3 死区时间 ................................................................................................................................................ 76
11 模数转换 (ADC) .......................................................................................................................................... 78
11.1 ADC 概述 ................................................................................................................................................ 78
11.2 A/D 寄存器 ............................................................................................................................................. 78
11.3 A/D 控制寄存器 ..................................................................................................................................... 79
11.4 AD 转换时间 ........................................................................................................................................... 80
11.5 ADC 使用 ................................................................................................................................................ 82
12 软件 LCD 驱动 ............................................................................................................................................. 84
12.1 相关寄存器 ............................................................................................................................................ 84
12.2 软件 LCD 操作说明............................................................................................................................... 85
13 开发工具 ....................................................................................................................................................... 88
13.1 OTP 烧录器(PM18-4.0) ..................................................................................................................... 88
13.2 HC-IDE.................................................................................................................................................... 88
14 封装尺寸 ....................................................................................................................................................... 89
14.1 SOP8 ........................................................................................................................................................ 89
14.2 SOP16 ...................................................................................................................................................... 89
-3-
HC18P12xL
14.3 SOP20 ...................................................................................................................................................... 90
16 修改记录 ....................................................................................................................................................... 91
-4-
HC18P12xL
1 产品简述
HC18P12xL是一颗采用高速低功耗CMOS工艺设计开发的8位高性能精简指令单片机,内部有2K×16
位一次性编程ROM(OTP-ROM),256×8位的数据寄存器(RAM),3组双向I/O口,三个Timer定时器/计
数器,两个CCP模块。一个10通道的12位模数转换器,多个系统时钟,四种系统工作模式以及多个中断
源。这款单片机可以广泛应用于液晶梳子、电动车码表、移动电源等产品。
1.1 特性
CPU 特性
36条高性能精简指令
2K×16位的OTP程序存储器
256×8位的数据存储器
8级堆栈缓存器
2T/4T时钟模式
立即、直接和两组间接寻址模式
16位RDT查表
I/O 口
3组双向I/O口:PORTA,PORTB,PORTF
最多18个双向I/O口
所有端口4级驱动电流配置(除PORTB5)
最多18个可编程弱上拉/下拉口(PA、PB、
PF)
所有端口具有唤醒功能的电平变化中断
所有端口支持软件 1/2bias COM 口功能
三个 Timer 定时器/计时器
Timer0:带有8位预分频器的8位定时器/
计数器
Timer1:带有预分频器的16位定时器/计
数器
Timer2:带有8位周期寄存器的8位定时
器
两个CCP模块
16位捕捉、16位比较、最高10位PWM
1组可编程带死区控制的固定相位PWM
1*12bit
BOR复位系统
2.0V/2.4V/3.6V
模数转换器
12位转换分辨率
-5-
最多10个模拟输入通道(15个外部ADC
输入,1个内部1/4VDD检测)
内部参考电压(VDD、4V、3V、2V);外
部参考电压
双系统时钟
高频系统时钟
- 高频晶体振荡器:最高 20MHz
- 内部 RC 振荡器:高达 32Mhz
低频系统时钟
- 低频晶体振荡器: 32.768KHz
- 低频 RC 振荡器: 32K(5V 典型值)
系统工作模式
高频模式
低频模式
休眠模式
绿色模式
中断源
定时器中断:Timer0、Timer1和Timer2
INT0外部中断
所有IO电平变化中断
CCP1/CCP2中断
ADC中断
PWM中断
复位
上电复位(POR)
外部复位(MCLRB Reset)
欠压复位(BOR)
看门狗定时器复位(WDT Reset)
封装形式
20/16/8pin
HC18P12xL
选型表
产品型号
HC18P121L
HC18P122L
HC18P123L
ROM
2K*16
2K*16
2K*16
产品型号
HC18P121L
HC18P122L
HC18P123L
Voltage
2.4~5.5V
2.4~5.5V
2.4~5.5V
RAM
256*8
256*8
256*8
Freq
8MHz
8MHz
8MHz
LCD
Software
Software
Software
堆栈
8
8
8
AD
5+1
9+1
9+1
IO
6
14
18
EV Board
√
√
√
Timer
3
3
3
Programmer
PM18-4.0
PM18-4.0
PM18-4.0
PWM
2
4
4
INT
6
14
18
WDT
1
1
1
Demo Code
√
√
√
PKG
SOP8
SOP16
SOP20
使用注意事项:
1、 为保证系统的稳定性,建议在 VDD 和 GND 之间接一个电容(容值须等于或大于 0.1μF)。
2、 在系统对功耗要求较高时 ADC 推荐使用 2M 及以下采样时钟;
3、 为提高 ADC 检测精度,建议在 VDD 和 GND 之间并一个电容(104 电容即可)
。
4、 当使用 ADC 模块时,参考电压选择内部参考电压时,系统工作电压 VDD 必须高于 Vref+0.7V。
-6-
HC18P12xL
1.2 系统框图
程序存储器
程序存储器
ROM
ROM
2K×
16
4K×
14
PORTA0/RFC0/PGC
PORTA1/RFC1/PGD
PORTA2/RFC2/PCK
PORTA0/AN0/PGC
PORTA4/RFCOUT
PORTA1/AN1/PGD
PORTA2/AN2/PCK
PORTA5
PORTA4/AN4/VREF
PORTA6
PORTA3/RFCI
PORTA7
程序计数器
程序计数器
数据存储器
数据存储器
RAM
RAM
256×
88
128×
8级堆栈
8级堆栈
指令寄存器
指令寄存器
Addr
AddrMUX
MUX
FSR
FSR寄存器
寄存器
STATUS
STATUS
寄存器
寄存器
上电复位
上电复位
指令译码
指令译码
与控制
与控制
PORTC0/LOSCO
外部复位
外部复位
MUX
MUX
PORTB0/INT0
PORTB2
PORTB2/AN11/INT0
PORTB1
LOSCI/PORTB3/AN12/T1CKI/T0CKI
PORTB3
LOSCO/PORTB4/AN13
PORTB4/T1G
MCLRB/VPP/PORTB5
MCLRB/VPP/PORTB5
OSCO/PORTB6/AN14
OSCO/PORTB6
OSCI/CLKI/PORTB7/AN15
OSCI/CLKI/PORTB7
PORTC1/T0CKI/T1CKI/LOSCI
PORTC2/CCP1
PORTC4/COM0
PORTC5/COM1
PORTF0
PORTC6/COM2
PORTF1
PORTC7/COM3
PORTF2
PORTF3
PORTF4
PORTD0/SEG0
PORTF5
PORTD1/SEG1
PORTF6
PORTD2/SEG2
PORTF7
PORTD3/SEG3
PORTD4/SEG4
PORTD5/SEG5
PORTD6/SEG6
PORTD7/SEG7
欠压复位
欠压复位
时钟发生器
时钟发生器
PORTE0/SEG8
PORTE1/SEG9
PORTE2/SEG10
PORTE3/SEG11
PORTE4/SEG12
PORTE5/SEG13
PORTE6/SEG14
PORTE7/SEG15
ALU
ALU
WDT复位
WDT复位
WW寄存器
寄存器
OSCI,
OSCI,OSCO
OSCO
Timer0
LOSCI,
LOSCI,LOSCO
LOSCO
Timer1
CCP2
MCLRB
MCLRB
Timer1
PORTF0/SEG16
PORTF1/SEG17
PORTF2/SEG18
PORTF3/SEG19
PORTF4/SEG20
PORTF5/SEG21
PORTF6/SEG22
PORTF7/SEG23
VDD,
VDD,VSS
VSS
Timer2
Timer2
CCP1
PWM
RFC
ADC
LCD
-7-
HC18P12xL
1.3 引脚图
1.3.1 HC18P121L 引脚图
VSS
1
PORTA0/AN0/PWM0/PGC
2
HC18P121L
8
VDD
7
FLT/MCLRB/PORTB5/VPP
PORTA1/AN1/PWM01/PGD
3
6
PORTB2/AN11/INT0
PORTA4/AN4/VREF
4
5
PORTA2/AN2/PCK
1.3.2 HC18P122L 引脚图
PORTA2/AN2/PCK
1
16
PORTA1/AN1/PWM01/PGD
PORTA4/AN4/VREF
2
15
PORTA0/AN0/PWM0/PGC
PORTA6/AN6
3
14
VDD
PORTA7/AN7
4
13
FLT/MCLRB/PORTB5/VPP
PORTB2/AN11/INT0
5
12
PORTF0
PORTB1/AN10
6
11
PORTF1
PORTB0/AN9
7
10
PORTF2
VSS
8
9
PORTF3
HC18P122L
1.3.3 HC18P123L 引脚图
VSS
1
20
VDD
PORTF7
2
19
PORTB2/AN11/INT0
PORTF6
3
18
PORTB6/AN14/OSCO
FLT/MCLRB/PORTB5/VPP
4
17
PORTB7/AN15/OSCI
PORTF5
5
16
PORTA4/AN4/VREF
PORTF4
6
15
PORTA2/AN2/PCK
14
PORTA1/AN1/PWM01/PGD
HC18P123L
PORTF3
7
PORTF2
8
13
PORTA0/AN0/PWM0/PGC
PORTF1
9
12
PORTB3/AN12/LOSCI
PORTF0
10
11
PORTB4/AN13/LOSCO
1.4 引脚说明
SOP20
名称
类型
说明
-8-
HC18P12xL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
VSS
PORTF7
PORTF6
MCLRB
VPP
PORTB5
FLT
PORTF5
PORTF4
PORTF3
PORTF2
PORTF1
PORTF0
PORTB4
LOSCO
AN13
PORTB3
T0CKI
T1CKI
LOSCI
AN12
PORTA0
AN0
PWM0
PGC
PORTA1
AN1
PWM01
PGD
PORTA2
AN2
PCK
PORTA4
AN4
VREF
PORTB7
AN15
OSCI
CLKI
PORTB6
AN14
OSCO
PORTB2
AN11
INT0
VDD
P
I/O
I/O
I
P
I/O
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
O
AN
I/O
I
I
I
AN
I/O
AN
O
I
I/O
AN
O
I/O
I/O
AN
O
I/O
AN
AN
I/O
AN15
I
I
I/O
AN
O
I/O
AN
I
P
电源地
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
复位输入口,低电平有效
编程高压电源输入
输入/输出口,只能输出0,端口电平变化中断
PWM故障检测输入口
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
输入/输出口,带可编程上下拉, 端口电平变化中断
低频晶体振荡器输出口
AD通道13输入口
输入/输出口,带可编程上下拉, 端口电平变化中断
Timer0外部时钟输入口(施密特触发器)
Timer1外部时钟输入口(施密特触发器)
低频晶体振荡器输入口
AD通道12输入口
输入/输出口,带可编程上下拉, 端口电平变化中断
AD通道0输入口
12位PWM0输出口
编程时钟输入口
输入/输出口,带可编程上下拉, 端口电平变化中断
AD通道1输入口
与PWM0有固定相位关系的12位PWM输出
编程数据输入/输出口
输入/输出口,带可编程上下拉, 端口电平变化中断
AD通道2输入口
测试模式下内部RC输出口
输入/输出口,带可编程上下拉, 端口电平变化中断
AD通道4输入口
ADC参考电压输入口
输入/输出口,带可编程上下拉,端口电平变化中断
AD通道15输入口
高频晶体振荡器输入口
外部时钟输入口
输入/输出口,带可编程上下拉,端口电平变化中断
AD通道14输入口
高频晶体振荡器输输出口
输入/输出口,带可编程上下拉,端口电平变化中断
AD通道11输入口
INT0输入口
电源输入
-9-
HC18P12xL
注:
I = 输入
O = 输出
I/O = 输入/ 输出 P = 电源
AN = 模拟输入输出
1.4 引脚电路
图 1-1:PORTA[7:5][3:0]的等效电路
VDD
上
P
拉
WPUAx
数据锁存器
Q
D
数据总线
图1-2:PORTA4的等效电路
VDD
VDD
WPUA4
P 上拉
数据总线
I/O引脚
写I/O口
CK
TRIS锁存器
D
Q
写TRISA
CK
写I/O口
I/O引脚
CK
TRIS锁存器
D
Q
VSS
写TRISA4
ANSEL[8:
6][4:0]
CK
VSS
ANSEL2
读TRISA4
读TRISA
读I/O口
AN4
读I/O口
AN[8:6][4:0]
VREF
下拉
WPDAx
WPDA4
P 下拉
VSS
VSS
图1-3:PORTB[7:6][4:0]的等效电路
读I/O口
数据锁存器
D
Q
I/O引脚
I/O引脚
CK
ANSEL[
14:8]
TRIS锁存器
D
Q
写TRISBx
数据总线
VDD
P 上拉
WPUBx
写I/O口
图1-4:PORTB5口的等效电路
VDD
RBPUB
数据总线
MCLRB
VSS
MCLRB选择
CK
读TRISBx
读I/O口
AN[14:9]
WPDBx
VPP_ACT
下拉
图 1- 6:PORTF 口的等效电路
WPUD~Gx
P
数据总线
弱
上
拉
数据锁存器
D
Q
写I/O口
I/O引脚
CK
TRIS锁存器
D
写TRIS
VDD
数据锁存器
D
Q
Q
DISPEN & SEx
CK
读TRIS
读I/O口
WPDD~Gx
弱
下
拉
- 10 -
高压判别电路
HC18P12xL
2
电性参数
2.1 极限参数
储存温度…………………………………………………………………………………….……-50℃~125℃
工作温度…………………………………………………………………………………….…..…-40℃~85℃
电源供应电压………………………………………………………………………....….VSS-0.3V~VSS+6.0V
端口输入电压……………………………………………………………………….……VSS-0.3V~VDD+0.3V
2.2 直流特性
测试条件
符号
参数
VDD
工作电压
IDD1
工作电流
IDD2
工作电流
IDD3
工作电流
IDD4
工作电流
Isb4
静态电流
VIL1
VIH1
输入低电平
输入高电平
—
—
输入口
输入口
VIL2
输入低电平
—
VIH2
输入高电平
—
VBOR1
低电压复位 2.0V
—
VBOR2
低电压复位 2.4V
VBOR3
VDD
条件(常温 25℃)
最小值
典型值
最大值
单
位
—
Fsys = 8MHz,2T
2.4
—
5.5
V
—
Fsys = 16MHz,2T
3.6
—
5.5
V
3V
Fsys = 16MHz,4T,高频模式,
WDT 禁止,无负载
—
1.70
—
mA
—
3.00
—
mA
Fsys = 8MHz,4T,高频模式,
WDT 禁止,无负载
—
1.20
—
mA
—
2.20
—
mA
Fsys = 32KHz,4T,低频模式,
WDT 禁止,无负载
—
5.0
—
μA
—
15.0
—
μA
Fsys = 32KHz,4T,绿色模式,
WDT 禁止,无负载
—
2.0
—
μA
—
7.0
—
μA
—
—
1
μA
—
—
1
μA
VSS
—
0.5VDD
V
0.5VDD
—
VDD
V
施密特输入口
VSS
—
0.3VDD
V
施密特输入口
0.7VDD
—
VDD
V
—
—
2.0
—
V
—
—
—
2.4
—
V
低电压复位 3.6V
—
—
—
3.6
—
V
VLVD0
低电压标志
—
—
—
2.4
—
V
VLVD1
低电压标志
—
—
—
3.6
—
V
IOL1
(DRENxn=01)
5V
VOL=0.1VDD
—
10
—
mA
IOL2
(DRENxn=10)
5V
VOL=0.1VDD
—
25
—
mA
IOL3
(DRENxn=11)
5V
VOL=0. 1VDD
—
8
—
mA
IOL4
(DRENxn=00)
5V
VOL=0. 1VDD
—
50
—
mA
IOH1
(DRENxn=01)
5V
VOH= 0. 9VDD
8
—
mA
IOH2
(DRENxn=10)
5V
VOH=0.9VDD
—
10
—
mA
IOH3
(DRENxn=11)
5V
VOH=0.9VDD
—
4
—
mA
5V
3V
5V
3V
5V
3V
5V
3V
5V
休眠模式,WDT 禁止,无负载
- 11 -
HC18P12xL
IOH4
(DRENxn=00)
5V
VOH= 0.9VDD
—
16
—
mA
RPH
内部上拉电阻
5V
可编程上拉电阻
—
100
—
kΩ
RPD
内部下拉电阻
5V
可编程下拉电阻
—
100
—
kΩ
VAD
ADC 输入电压
—
—
VSS
—
VREF
V
DNL
差分非线性误差
5V
AD 时钟频率 2MHz
—
±1
—
LSB
INL
积分非线性误差
5V
AD 时钟频率 2MHz
—
±1
—
LSB
IADC
ADC 工作电流
—
0.3
—
mA
—
0.5
—
mA
最小值
典型值
最大值
单
位
3V
AD 时钟频率 2MHz
5V
2.3 交流特性
符号
参数
FRCH
测试条件
VDD
条件(常温 25℃)
高频内部 RC 振荡器
5V
—
—
32
—
MHz
FRCL
低频内部 RC 振荡器
5V
—
—
32
—
KHz
FOSH
外部高频晶振
—
3.0~5.5V
4
—
20
MHz
FOSL
外部低频晶振
—
2.4~5.5V
—
32.768
—
KHz
TVDD
VDD 上升时间
5V
—
—
—
100
ms
TBOR
欠压复位响应时间
5V
—
100
—
—
ns
TWDT
看门狗溢出时间
5V
使用预分频 1:1
—
18
—
ms
不使用预分频器
—
72
—
ms
TMCLRB
复位脉冲时间
5V
—
200
—
—
us
2.4 电气特性曲线图
- 12 -
HC18P12xL
3 中央处理器(CPU)
HC18P12xL CPU内核包括:
2T/4T 时钟模式
8 级堆栈
程序存储器
寻址方式
数据存储器
3.1 存储器
3.1.1 程序存储器(OTP-ROM)
HC18P12xL具有2K 16位的程序存储器,下图给出了程序存储器的映射。访问超出物理地址以外的
单元时,会导致返回到地址最低单元。
复位向量是0000h,中断向量是0004h。
ROM
PC[10:0]
13
1级堆栈
2级堆栈
.
.
.
8级堆栈
复位向量
0000h
0004h
中断向量
0005h
程序存储器
07FFh
3.1.1.1 复位向量(0000h)
复位向量为0000h
- 13 -
HC18P12xL
上电复位(POR=0,BOR=X,TO=1)
低电压复位(POR=1,BOR=0,TO=1)
看门狗复位(POR=1,BOR=1,TO=0)
外部复位(POR=1,BOR=1,TO=1)
发生上述任一种复位后,程序将从0000h处重新开始执行,系统寄存器也都将恢复为默认值。根据
PCON寄存器中的POR,BOR标志及STATUS 寄存器中的TO标志位的内容可以判断系统复位方式。下面
一段程序演示了如何定义ROM中的复位向量。
例:定义复位向量
ORG
0000H
;复位向量
GOTO
MAIN
;跳转到用户程序
...
ORG
400H
;用户程序起始
MAIN:
...
...
END
;用户程序结束
例:复位源判断
ORG
GOTO
...
0000H
RST_JUGE
BCF
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
...
...
BSF
...
BSF
...
CLRWDT
...
STATUS,RP0
PCON,POR
ISPOR
PCON,BOR
ISBOR
STATUS,TO
ISWDTR
RST_JUGE:
EXT_RST:
ISPOR:
ISBOR:
ISWDTR:
;Bank0
;POR标志为0,判定为上电复位
;POR=1,BOR=0,判定为低电压复位
;POR=1,BOR=1,TO=0,判定为WDT复位
;POR=1,BOR=1,TO=1,判定为外部复位
PCON,POR
;上电复位处理程序
PCON,BOR
;低电压复位处理程序
;TO标志置1,WDT复位处理程序
;其他程序,注意处理Bank
3.1.1.2 中断向量(0004h)
中断向量地址为0004h。一旦有中断响应,程序计数器PC的当前值就会存入堆栈缓存器并跳转到
0004H 开始执行中断服务程序。中断服务子程序中需要对相应状态寄存器进行适当的断点保护和恢复。
下面的示例程序说明了如何编写中断服务程序。
- 14 -
HC18P12xL
例:中断子程序的编写
Interrput_Sev:
BCF
MOVWF
SWAPF
MOVWF
MOVF
MOVWF
STATUS,RP0
W_TEMP
STATUS,W
STATUS_TEMP
PCLATH,W
PCLATH_TEMP
;切换至Bank0
;保护W寄存器
;保护STATUS寄存器
;保护PCLATH寄存器
BCF
BTFSC
GOTO
BTFSC
GOTO
...
...
STATUS,RP0
INTCON,INTF
ISR_INT
INTCON,T0IF
ISR_T0
BCF
MOVF
MOVWF
SWAPF
MOVWF
SWAPF
SWAPF
BSF
RETFIE
STATUS,RP0
PCLATH_TEMP ,W
PCLATH
;恢复PCLATH
STATUS_TEMP,W
STATUS
;恢复STATUS
W_TEMP,F
W_TEMP,W
;恢复W
STATUS,RP0
;退出中断
;发生INT0中断
;发生T0中断
Exit_Int:
对于编写中断服务程序,需要以下几个要点需注意:
1.
中断入口地址为 0x04,响应中断后,程序自动跳转到 0x04 开始执行;
2.
中断服务程序需首先对相应的寄存器进行保护;
3.
保存系统寄存器时注意 Bank,如示例代码中,分别定义一组 RAM 保存进入中断前 Bank 的状态;
4.
中断服务子程序返回前对保护的寄存器进行恢复,注意恢复顺序,对 W 必须使用 SWAPF;
5.
程序中使能两个以上的中断源时,程序需对发生中断的中断源进行判断,从而执行相应的服务程序。
6.
需要软件清零对应的中断标志;
7.
RETFIE 指令将自动使能 GIE,请勿在中断服务子程序中用其它指令使能 GIE,以免造成中断响应混乱。
3.1.1.3 查表
方式一:
利用 ADDWF PCL,F 和 RETLW 指令实现数据表,因为以 PCL 为目的操作数的运算将改变程序
指针(PC)值,其具体操作为 PC 的低 8 位为 ALU 的运算结果,PC 的高 5 位将从 PC 高位缓冲器 PCLATH
中获得。如下是数据表实现的一个例子。
例:数据查表
- 15 -
HC18P12xL
...
MOVLW
MOVWF
MOVF
CALL
...
HIGH TAB1
PCLATH
TABBUF,W
TAB1
ORG
100H
ADDWF
RETLW
RETLW
RETLW
...
RETLW
PCL,F
DATA0_TAB1
DATA1_TAB1
DATA2_TAB1
;表头运算
;W=0对应数据
;W=1对应数据
;W=2对应数据
DATAFE_TAB1
;W=0xFE对应数据
;获得数据表地址高8位(内部宏指令)
;表地址高位赋给PCLATH
;获得表数据偏移量,调用前赋值。
;调用数据表
TAB1:
对于数据查表的编程,需注意:
1.
数据表宽度:8 位;
2.
数据表无法直接跨页访问,单页可实现最大长度:255;
3.
当 PCL 与 W 的加运算有进位时,进位将被舍弃数据表溢出,将造成查表混乱;故表头尽量放在数据页前
端,以免数据表溢出;
4.
TABBUF 的值不得大于表长,否则将造成运行混乱。
例:跳转表
跳转表能够实现多地址跳转功能。
由于 PCL 和 W 的值相加即可得到新的 PCL,同时 PCH 从 PCLATH
中载入,因此,可以通过对 PCL 加上不同的 W 值来实现多地址跳转,可参考以下范例。
…
ORG
0100H
MOVLW
HIGH TAB2
;获得跳转表地址高位(内部宏指令)
MOVWF
PCLATH
MOVF
TABBUF,W
TAB2:
ADDWF
PCL,F
GOTO
LABLE0_TAB2 ;TABBUF=0,跳转 LABLE0_TAB2
GOTO
LABLE1_TAB2 ;以下类推
GOTO
LABLE2_TAB2
GOTO
LABLE3_TAB2
注:
如上跳转表,有 4 个跳转分支,TABBUF 的合法范围为 0x00~0x03。
方式二:
可以通过以下5个特殊功能寄存器对ROM区中的数据进行查找。
- 16 -
HC18P12xL
寄存器 PMADRH 指向 ROM 区数据地址的高字节(bit8~bit15),寄存器 PMADRL 指向 ROM 区数
据地址的低字节(bit0~bit7)。将 PMCON 寄存器的 RDON 位置 1 启动读操作,使用两条指令来读数据,
RDON 位置 1 后的二条指令被自动忽略,建议用户 RDON 位置 1 后的两条指令为 NOP。执行完读操作
后,所查找的数据保存在 PMDATH:PMDATL 寄存器。
例:查找ROM 地址为“TABLE”的值
BCF
STATUS,RP0
;BANK0
MOVF
TABLE _ADDR_H, W
MOVWF
PMADRH
;设置TABLE地址高字节
MOVF
TABLE _ADDR_L, W
MOVWF
PMADRL
;设置TABLE地址低字节
BSF
PMCON, RDON ;开始读
NOP
NOP
;等待两条指令
MOVF
PMDATL, W
MOVWF
TABLE _DATAL ;TABLE _DATAL= TABLE地址数据低字节
MOVF
PMDATH, W
MOVWF
TABLE _DATAH ;TABLE _DATAH= TABLE地址数据高字节
...
...
TABLE:
DW
1234H
;定义数据表(16 位)数据。
DW
F178H
DW
2123H
9Eh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PMCON
-
-
-
-
-
-
-
RDON
R/W
-
-
-
-
-
-
-
R/W
POR的值
-
-
-
-
-
-
-
0
bit 0 RDON:读控制位
0 =不启动ROM存储器读操作
1 =启动ROM读操作(由硬件清零RDON;软件只能将RDON位置1,但不能清零)
9Ah
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PMDATL
PMD7
PMD6
PMD5
PMD4
PMD3
PMD2
PMD1
PMD0
R/W
R/W
R/W
- R/W
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
x
x
x
x
x
9Bh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PMDATH
PMD15
PMD14
PMD13
PMD12
PMD11
PMD10
PMD9
PMD8
R/W
- R/W
- R/W
- R/W
R/W
R/W
R/W
R/W
R/W
- 17 -
HC18P12xL
POR的值
x
x
x
x
x
x
x
x
Bit 2
Bit 1
Bit 0
PMDx[15:0]:ROM存储器读操作后, PMADRH:PMADRL 指向地址的数据
9Ch
Bit 7
Bit 6
PMADRL
PMA7
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
x
x
x
x
x
9Dh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PMADRH
PMA15
PMA14
PMA13
PMA12
PMA11
PMA10
PMA9
PMA8
R/W
- R/W
- R/W
- R/W
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
x
x
x
x
x
PMA6
Bit 5
Bit 4
PMA5
PMA4
PMAx[15:0]:ROM存储器地址
- 18 -
Bit 3
PMA3
PMA2
PMA1
PMA0
HC18P12xL
3.1.2芯片配置选择表
HC18P12xL提供的配置字可以对多个系统模块做配置选择,详细配置选择见下面表格。系统还提供
了一个4 16bit的器件ID供用户存储校验或其他代码标识号。在程序运行过程中不能访问这些存储单元,
但可在编程烧录/校验时对它们进行读写。
编译选项
内容
高频系统时钟选
择(OSCHM)
高频晶体振荡器
高频晶体振荡器 OSCI/OSCO 作为高频晶体振荡器输入/输出口。
内部 RC 振荡器
内部 16M RC 振荡器。
低频系统时钟选
择(OSCLM)
功能说明
32K WDT 振荡器
内部 32K WDT 振荡器。
定时器 1 振荡器
低频晶体振荡器,32.768KHz,LOSCI/LOSCO 为低频晶体振荡器
输入/输出口。
高频内部 RC 振
荡器频率选择
(ROSC)
16MHz
内部高频 RC 振荡器频率配置为 16MHz。
8MHz
内部高频 RC 振荡器频率配置为 8MHz。
4MHz
内部高频 RC 振荡器频率配置为 4MHz。
2MHz
内部高频 RC 振荡器频率配置为 2MHz。
1MHz
内部高频 RC 振荡器频率配置为 1MHz。
500KHz
内部高频 RC 振荡器频率配置为 500KHz。
WDT 功能使能
(WDTEN)
使能 WDT 功能
使能看门狗定时器功能。
屏蔽 WDT 功能
屏蔽看门狗定时器功能。
外部复位使能
(MCLREN)
使能外部复位
使能外部复位引脚。
屏蔽,做输入
屏蔽外部复位引脚,外部复位引脚做输入功能。
加密使能位
(CP0)
加密
使能用户程序区 CODE 加密功能。
不加密
屏蔽用户程序区 CODE 加密功能。
启动时钟选择
(SPDS)
ADC 使能
高频系统时钟
系统选择高频系统时钟作为启动时钟。
低频系统时钟
系统选择低频系统时钟作为启动时钟。
打开 ADC 功能
使能 ADC 功能。
禁止 ADC 功能
禁止 ADC 功能。
PORSEL 选择
SMTENB
BORSEL
18ms
上电复位时间选择为 18ms。
4.5ms
上电复位时间选择为 4.5ms。
IO 口施密特使能
使能 IO 口施密特功能。
IO 口施密特禁止
禁止 IO 口施密特功能。
BOR3.6V
当系统电压低于 3.6V 时,系统复位。
BOR2.4V
当系统电压低于 2.4V 时,系统复位。
BOR2.0V
当系统电压低于 2.0V 时,系统复位。
时钟模式选择
(FCPUT)
4T
4T 模式,1 个指令周期有 4 个系统时钟周期组成。
2T
2T 模式,1 个指令周期有 2 个系统时钟周期组成。
选择芯片配置字注意事项:
1.
在系统允许的情况下,尽量选用较低系统时钟频率,有利于降低系统功耗和提升系统电磁兼容性;
2.
时钟模式选择为 2T 时,PWM 模块的最大分辨率降低到 9 位;
3.
强干扰情况下,建议开启 WDT 功能。
- 19 -
HC18P12xL
3.1.3 通用数据寄存器(RAM)
HC18P12xL共有256个通用寄存器(GPR)和91个特殊功能寄存器(SFR),分在2个存储区Bank0和
Bank1, RP0是存储区的选择位。
CORE Register 00-09h&200-209h
00h&200h
INDF0
01h&201h
INDF1
02h&202h
PCL
03h&203h
STATUS
04h&204h
FSR0L
05h&205h
FSR0H
06h&206h
FSR1L
07h&207h
FSR1H
08h&208h
PCLATH
09h&209h
INTCON
00h
200h
特殊功能
寄存器
特殊功能
寄存器
FFh
100h
2FFh
通用寄存器
256bytes
映射
100-1FFh
1FFh
BANK0
BANK1
3.1.4 特殊功能寄存器(SFR)
3.1.4.1特殊功能寄存器列表
地址
名称
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
复位初值
010h
TRISA
TRISA7
TRISA6
-
TRISA4
-
TRISA2
TRISA1
TRISA0
1111 1111
011h
TRISB
TRISB7
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
1111 1111
015h
TRISF
TRISF7
TRISF6
TRISF5
TRISF4
TRISF3
TRISF2
TRISF1
TRISF0
01Ch
PORTA
PORTA7
PORTA6
-
PORTA4
-
PORTA2
PORTA1
PORTA0
0000 0000
01Dh
PORTB
PORTB7
PORTB6
PORTB5
PORTB4
PORTB3
PORTB2
PORTB1
PORTB0
0000 0000
021h
PORTF
PORTF7
PORTF6
PORTF5
PORTF4
PORTF3
PORTF2
PORTF1
PORTF0
0000 0000
028h
WPUA
WPUA7
WPUA6
-
WPUA4
-
WPUA2
WPUA1
WPUA0
1111 1111
029h
WPUB
WPUB7
WPUB6
WPUB5
WPUB4
WPUB3
WPUB2
WPUB1
WPUB0
1111 1111
BANK0
- 20 -
1111 1111
HC18P12xL
地址
名称
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
02Dh
WPUF
WPUF7
WPUF6
WPUF5
WPUF4
WPUF3
WPUF2
WPUF1
WPUF0
1111 1111
034h
WPDA
WPDA7
WPDA6
-
WPDA4
-
WPDA2
WPDA1
WPDA0
1111 1111
035h
WPDB
WPDB7
WPDB6
WPDB5
WPDB4
WPDB3
WPDB2
WPDB1
WPDB0
1111 1111
039h
WPDF
WPDF7
WPDF6
WPDF5
WPDF4
WPDF3
WPDF2
WPDF1
WPDF0
1111 1111
040h
IOCA
IOCA7
IOCA6
-
IOCA4
-
IOCA2
IOCA1
IOCA0
0000 0000
041h
IOCB
IOCB7
IOCB6
IOCB5
IOCB4
IOCB3
IOCB2
IOCB1
IOCB0
0000 0000
045h
IOCF
IOCF7
IOCF6
IOCF5
IOCF4
IOCF3
IOCF2
IOCF1
IOCF0
0000 0000
04Ch
PORCTR
-
-
-
-
SPPCT1
SPPCT0
UAPCT1
UAPCT0
04Dh
DRENAL
DRENA7L
DRENA6L
-
DRENA4L
-
DRENA2L
DRENA1L
04Eh
DRENBL
DRENB7L
DRENB6L
DRENB5L
DRENB4L
DRENB3L
DRENB2L
DRENB1L
052h
DRENFL
DRENF7L
DRENF6L
DRENF5L
DRENF4L
DRENF3L
DRENF2L
DRENF1L
054h
PIR1
-
ADIF
-
-
-
CCP1IF
T2IF
T1IF
-0-- -000
055h
PIR2
-
-
PWM0IF
-
-
-
-
CCP2IF
--0- 00-0
056h
PIR3
-
-
-
RFIF
-
-
-
RAIF
---0 0000
058h
T1L
Timer1 计数寄存器低字节
XXXX XXXX
059h
T1H
Timer1 计数寄存器高字节
XXXX XXXX
05Ah
T1CON
05Bh
T0
Timer0 计数寄存器
XXXX XXXX
05Ch
T2
Timer2 计数寄存器
XXXX XXXX
05Dh
PR2
Timer 周期寄存器
0000 0000
05Eh
T2CON
05Fh
PR1L
060h
PR1CON
PWM1T1
PWM1T0
PWM2T1
PWM2T0
T1CKPS3
T1CKPS2
PWMPR1
PR1EN
0000 0000
070h
PIE1
-
ADIE
-
-
-
CCP1IE
T2IE
T1IE
0000 0000
071h
PIE2
-
-
PWM0IE
-
-
-
-
CCP2IE
--00 -000
072h
PIE3
-
-
-
RFIE
-
-
-
RAIE
---0 0000
078h
OPTION
RBPUB
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
0000 0000
079h
PCON
LVD2EN
LVD1EN
-
WDTENS
LVD2F
LVD1F
POR
BOR
00-1 qqqq
07Ah
OSCCON
T0OSCEN
-
-
-
-
-
HXEN
SCS
0--- --0q
080h
CCPR2L
CCP2 寄存器低字节
XXXX XXXX
081h
CCPR2H
CCP2 寄存器高字节
XXXX XXXX
082h
CCP2CON
083h
CCPR1L
CCP1 寄存器低字节
0000 0000
084h
CCPR1H
CCP1 寄存器高字节
0000 0000
085h
CCP1CON
-
-
DC1B1
DC1B0
CCP1M3
CCP1M2
CCP1M1
CCP1M0
--00 0000
08Ch
ANSELL
ANSEL7
ANSEL6
-
ANSEL4
ANSEL3
ANSEL2
ANSEL1
ANSEL0
1111 1111
T1CS1
-
T1CS0
T2CKPS3
T1CKPS1
T2CKPS2
T1CKPS0
T2CKPS1
T1OSCEN
T2CKPS0
T1SYNC
T2ON
DRENA0L
DRENB0L
DRENF0L
-
T1ON
-
-
Timer1 周期寄存器低字节
-
-
DC2B1
- 21 -
DC2B0
CCP2M3
复位初值
---- 0000
1111 1111
1111 1111
0000 0000
0000 00-0
-000 00-XXXX XXXX
CCP2M2
CCP2M1
CCP2M0
--00 0000
HC18P12xL
地址
名称
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
复位初值
08Dh
ANSELH
ANSEL15
ANSEL14
ANSEL13
ANSEL12
ANSEL11
ANSEL10
ANSEL9
ANSEL8
1111 1111
092h
ADRESL
ADC 结果寄存器低字节
0000000
093h
ADRESH
ADC 结果寄存器高字节
00000000
094h
ADCON0
VHS1
VHS0
CHS3
CHS2
CHS1
CHS0
ADON
ADEN
00000000
095h
ADCON1
ADFM
ADCS2
ADCS1
ADCS0
-
-
-
ADREF
0000---0
096h
ADCLK
-
-
-
-
-
ADCLK2
ADCLK1
ADCLK0
---- -000
09Ah
PMDATL
程序存储器读数据寄存器的低字节
0000 0000
09Bh
PMDATH
程序存储器读数据寄存器的高字节
0000 0000
09Ch
PMADRL
程序存储器读地址寄存器的低字节
0000 0000
09Dh
PMADRH
程序存储器读地址寄存器的高字节
0000 0000
09Eh
PMCON
-
-
-
-
-
-
0A0h
DRENAH
DRENA7H
DRENA6H
-
DRENA4H
-
DRENA2H
0A1h
DRENBH
DRENB7H
DRENB6H
DRENB5H
DRENB4H
DRENB3H
DRENB2H
0A5h
DRENFH
DRENF7H
DRENF6H
DRENF5H
DRENF4H
DRENF3H
DRENF2H
0B0h
RTRIM
RTRIM3
RTRIM2
-
RDON
---- ---0
DRENA0H
1111 1111
DRENB0H
1111 1111
DRENF1H
DRENF0H
0000 0000
RTRIM1
RTRIM0
---- --00
DRENA1H
DRENB1H
BANK1
258h
PWM0DT
DT0.7
DT0.6
DT0.5
DT0.4
DT0.3
DT0.2
DT0.1
DT0.0
0000 0000
259h
PWM0DL
PD0.7
PD0.6
PD0.5
PD0.4
PD0.3
PD0.2
PD0.1
PD0.0
0000 0000
25Ah
PWM0DH
-
-
-
-
PD0.11
PD0.10
PD0.9
PD0.8
0000 0000
25Bh
PWM0PL
PP0.7
PP0.6
PP0.5
PP0.4
PP0.3
PP0.2
PP0.1
PP0.0
0000 0000
25Ch
PWM0PH
-
-
-
-
PP0.11
PP0.10
PP0.9
PP0.8
0000 0000
25Dh
PWM0C
-
-
FLTS
FLTC
PWM0S1
PWM0S0
CK01
CK00
0000 0000
25Eh
PWMEN
-
EFLT
-
-
EPWM01
-
-
EPWM0
0000 0000
25Fh
FLTM
-
-
-
-
-
-
FLT0M1
FLT0M0
--00 0000
2B0h
LCDCON
LCDEN
RLCD1
RLCD0
FRAME
-
-
-
-
0000 ----
2B1h
COMAEN
-
-
-
COMAEN4
-
COMAEN2
COMAEN1
COMAEN0
0000 0000
2B2h
COMBEN
COMBEN7
COMBEN6
-
COMBEN4
COMBEN3
COMBEN2
-
-
00-0 0000
2B6h
COMFEN
COMFEN7
COMFEN6
COMFEN5
COMFEN4
COMFEN3
COMFEN2
COMFEN1
COMFEN0
0000 0000
注: x = 未知, u = 不变, q = 取值视条件而定, - = 未实现
3.1.4.2 累加器
8 位数据寄存器W用来执行ALU与数据存储器之间数据的传送操作。如果操作结果为零(Z)或有进
位产生(C或DC)
,程序状态寄存器STATUS中相应位会发生变化。
W 并不在RAM中,因此不可以用直接寻址和间接寻址模式对其进行读写。
例:W寄存器的读写操作
立即数写入W寄存器操作:
MOVLW
H’0FF’
;送十六进制数
MOVLW
D’10’
;送十进制数
MOVLW
B’11110000’ ;送二进制数
将W寄存器的数据写入数据寄存器BUF中:
- 22 -
HC18P12xL
MOVWF
BUF
将数据寄存器BUF中的数读入W寄存器:
MOVF
BUF,W
将W寄存器的数据与BUF中的数据加法运算后,结果存入BUF中:
ADDWF
BUF,F
3.1.4.3 INDFx寄存器
INDF0、INDF1 寄存器不是实际存在的寄存器,寻址 INDF0、INDF1 将实现间接寻址。
3.1.4.4 程序计数器
程序计数器(PC)为13位宽,低字节来自可读写的PCL寄存器,高字节(PC[12:8])不可读写,可通过
PCLATH 寄存器间接写入。
02h&202h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PCL
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
08h&208h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PCLATH
-
-
-
-
-
PCH10
PCH9
PCH8
R/W
-
-
-
-
-
R/W
R/W
R/W
POR的值
-
-
-
-
-
0
0
0
程序计数器顺序指令运行时,每个指令周期程序自动加1,以下三种情况将使程序计数器重新装载。
分支指令(GOTO/CALL):
10
8 7
0
PC
指令码
以PCL作为目的操作数的指令:
10
8
0
7
PC
2
0
ALU运算结果
PCLATH
子程序返回指令(RETURN/RETLW/RETFIE)
:
- 23 -
HC18P12xL
10
8 7
0
PC
0
10
堆栈栈顶(TOS)
3.1.4.5 STATUS寄存器
STATUS寄存器包含ALU的算术状态、复位状态和寄存器的存储区选择位。
03&203h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
STATUS
-
-
RP0
TO
PD
Z
DC
C
R/W
-
-
R/W
R
R
R/W
R/W
R/W
POR的值
-
-
0
1
1
x
x
x
bit 5 RP0:BANK选择位
1 = Bank1
0 = Bank0
bit 4 TO:超时位
1 = 上电、执行了CLRWDT指令或SLEEP指令
0 = 发生了WDT溢出
bit 3 PD:掉电位
1 = 上电或执行了CLRWDT指令
0 = 执行了SLEEP指令
bit 2 Z: 结果为零位
1 = 算术或逻辑运算的结果为零
0 = 算术或逻辑运算的结果不为零
bit 1 DC: 半进位/借位位
1 = 加法运算时低四位有进位/减法运算时没有向高四位借位
0 = 加法运算时低四位没有进位/减法运算时有向高四位借位
bit 0 C: 进位/借位位
1 = 加法运算时有进位/减法运算时没有借位发生/移位后移出逻辑1
0 = 加法运算时没有进位/减法运算时有借位发生/移位后移出逻辑0
3.1.4.6 PCON寄存器
079h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PCON
LVD2EN
LVD1EN
-
WDTENS
LVD2F
LVD1F
POR
BOR
R/W
R/W
R/W
-
R/W
R
R
R/W
R/W
POR的值
0
0
-
1
q
q
q
q
注: - = 未实现,q = 取值视条件而定
bit 7
LVD2EN:3.6V低电压检测使能位
1 = 使能3.6V低电压检测
0 = 禁止3.6V低电压检测
bit 6
LVD1EN:2.4V低电压检测使能位
- 24 -
HC18P12xL
1 = 使能2.4V低电压检测
0 = 禁止2.4V低电压检测
bit 4
WDTENS:看门狗软件使能位(需要配置字中使能WDT,该位使能时才有效)
1 = 软件使能看门狗
0 = 软件禁止看门狗
bit 3
LVD2F:3.6V低电压检测标志位
1 = 电压低于3.6V
0 = 电压高于3.6V
bit 2
LVD1F:2.4V低电压检测标志位
1 = 电压低于2.4V
0 = 电压高于2.4V
bit 1
POR:上电复位状态位
1 = 非上电复位
0 = 上电复位(需要软件置1)
bit 0
BOR:欠压复位状态位
1 = 未发生欠压复位
0 = 发生了欠压复位(需要软件置1)
注:
1、在芯片执行 SLEEP 指令前,软件关闭看门狗定时器,可以节省休眠或绿色模式下芯片功耗;
2、LVD2EN 和 LVD1EN 检测电平值仅作为设计参考,不能用作芯片工作电压值得精确检测。
3.2 寻址模式
HC18P12xL 共有三种寻址方式:立即寻址、直接寻址和间接寻址模式
3.2.1 立即寻址
立即数参与运算的寻址方式
例:立即寻址
ADDLW
06h
; W 的内容加 6,结果放入 W
OPTION
; W 的内容装入 OPTION
3.2.2 直接寻址
寄存器参与运算的寻址方式
例:直接寻址
MOVWF
3.2.3 间接寻址
由指针 FSR(FSRxL/FSRxH)指向的寄存器参与运算的寻址方式。INDFx 寄存器不是物理寄存
器,对 INDFx 寄存器操作可以实现间接寻址
例:利用间接寻址对 100h~1FFh,300h~3FFh 通用数据存储器进行清零
MOVLW
00h
;清零 0x100~0x1FF
MOVWF
FSR0L
MOVLW
0x01
- 25 -
HC18P12xL
NEXTBYTE:
MOVWF
FSR0H
; FSR 指向 100h 地址
CLRF
INDF0
;对 FSR 指向的数据存储器清零
INCFSZ
FSR,F
;FSR0L+1,指向下一个地址
;注意这里的边界值为欲操作 RAM 最大地址+ 1
;利用间接寻址,注意意外指向特殊寄存器的情况
GOTO
NEXTBYTE ;FSR0L 的值加一不溢出,循环清零下一个地
3.3 堆栈
HC18P12xL 具有一个 8 级深度的硬件堆栈。当执行 CALL 指令或由于中断导致程序跳转时,PC 值
会被压入堆栈;当执行 RETURN、RETLW 或 RETFIE 指令时,PC 值从堆栈弹出。
ROM
PC[11:0]
13
1级堆栈
2级堆栈
.
.
.
8级堆栈
复位向量
0000h
中断向量
0004h
0005h
程序存储器
0FFFh
注:
压栈级数请勿超过 8 级,超过 8 级压栈将导致堆栈溢出,溢出后堆栈指针循环,新的压栈将覆盖原堆栈内容。
- 26 -
HC18P12xL
4 复位
4.1 概述
HC18P12xL 共有四种复位方式:
上电复位(POR)
外部复位(MCLRB Reset)
欠压复位(BOR)
看门狗定时器复位(WDT Reset)
当上述任何一种复位产生时,系统进入复位状态,所有的特殊功能寄存器被初始化,程序停止运行,
同时程序计数器(PC)清零。经过上电延时定时器延时后,系统结束复位状态,程序从 0000h 地址开始
执行。STATUS 寄存器的 bit4(TO 位)及 PCON 寄存器的 bit0(BOR 位)、bit1(POR 位)显示系统复
位状态信息,可通过 3 个标志位判断复位来源,从而控制系统的运行路径。
复位电路示意图
POR_RST
上电复位
VDD
BOR_RST
欠压复位
MCLRB_RST
滤波器
S
SET
Q
系统复位
MCLRB
看门狗
定时器
上电延时
定时器
WDT_RST
R
CLR
Q
特殊功能寄存器复位状态
TO
POR
BOR
复位方式
说明
1
0
x
上电复位
电源上电。
u
u
0
欠压复位
电源电压低于BOR电压点。
u
u
u
外部复位
外部复位管脚低电平。
0
u
u
看门狗定时器复位
运行模式下,看门狗定时器溢出。
复位方式
STATUS寄存器
PCON寄存器
上电复位
0001 1xxx
00-1 qq00
正常工作模式下的外部复位
0001 1xxx
00-1 qq0u
休眠模式下的外部复位
0001 0uuu
00-1 qquu
欠压复位
0001 0uuu
00-1 qqu0
看门狗定时器复位
0000 1uuu
00-1 qquu
注: u = 不变, x = 未知, - = 未使用,q = 取值视条件而定
- 27 -
HC18P12xL
4.2 上电复位
系统上电过程中,VDD 达到系统正常工作电压之前,上电复位电路产生内部复位信号,可通过查
询 PCON 寄存器来判断是否发生上电复位。VDD 最大上升时间 TVDD 必须满足规格要求。任何一种复位
方式都需要一定的响应时间,系统提供完善的复位流程以保证复位动作的顺利进行。对于不同类型的振
荡器,完成复位所需要的时间也不同。因此,VDD 的上升速度和不同晶振的起振时间都不固定。RC 振
荡器的起振时间最短,晶体振荡器的起振时间则较长。在用户的使用过程中,应考虑系统对上电复位时
间的要求。
VDD
POR_RST
延时时间
系统复位
注:关于上电复位,请注意以下几点:
1、 VDD 上电必须从 0V 开始,若 VDD 有残留电压,POR_RST 信号无法稳定产生;
2、 VDD 上电斜率必须满足大于 500mV/ms,否则 POR_RST 信号可能无法产生;
3、 上电复位延时的复位延时时间在配置字里选择,两个档位(18ms/4.5ms)
。
4.3 看门狗定时器复位
在高频和低频模式下,看门狗定时器溢出会产生WDT复位;在绿色和休眠模式下,看门狗定时器溢
出将唤醒SLEEP并使其返回高频或低频模式,程序从SLEEP指令下一条开始执行。WDT定时器配置字和
WDTENS都为1时,才能使能看门狗定时器。
看门狗复位示意图:
看门狗
定时器
FF
00
01
WDT_RST
延时时间
系统复位
- 28 -
02
HC18P12xL
注:关于看门狗复位使用时,请注意以下几点:
1、 看门狗的使能逻辑:看门狗使能 = 看门狗配置字使能 & 看门狗软件使能(WDTENS=1);
2、 不能在中断程序中对看门狗进行清零,否则无法监控主程序跑飞情况;
3、 程序中应该只在主程序中有一次清看门狗的动作,这种架构能够最大限度的发挥看门狗的保护功能;
4、 看门狗复位的延时时间为 2.2ms/1.1ms;
5、 使用时注意:不论哪种方式复位后,看门狗软件使能位(WDTENS)的值为 1。
4.4 欠压复位
4.4.1 欠压复位的产生
当VDD电压下降到VBOR以下,且持续时间满足,系统产生欠压复位。
欠压复位示意图:
VDD
VBOR
BOR_RST
延时时间
系统复位
低电压复位(BOR)是单片机内置的掉电复位保护装置,当VDD 跌落并低于BOR 检测电压值时,
BOR被触发,系统复位。不同的单片机有不同的BOR 检测电平。因此采用BOR 依赖于系统要求和环境
状况。如果电源跌落剧烈,远低于BOR 触发点,BOR 能够起到保护作用,让系统正常复位;如果电源
电压跌落不是很剧烈,仅仅是接近BOR 触发点而造成的系统错误,则BOR 就不能起到保护作用让系统
复位。
为避免电源较大的抖动,HC18P12xL采取必要的电源抖动处理电路或其他保护电路,防止电源抖动
超过1.0V,导致芯片工作异常。
HC18P12xL通过配置字BOR编译选项控制选择低电压检测档位,请客户在使用时根据情况选择合适
的BOR电压。
BOR档位:BOR3.6V/2.4V/2.0V
4.4.2 工作死区
电压跌落可能会进入系统死区。系统死区意味着电源不能满足系统的最小工作电压要求。下图是一
个典型的掉电复位示意图。图中,VDD受到严重的干扰,电压值降得非常低。虚线以上区域系统正常工
作,在虚线以下的区域内,系统进入未知的工作状态,这个区域称作死区。当VDD跌至V1 时,系统仍
处于正常状态;当VDD跌至V2时,系统进入死区,系统工作在死区时,可能导致程序的运行紊乱;当电
压跌至V3,且低于BOR电压点,系统可正常复位,处于BOR电压点的时间过短,系统仍无法正常产生欠
压复位信号,可能导致程序的运行紊乱。
- 29 -
HC18P12xL
VDD
系统工作正常区域
V1
V2
系统工作死区
BOR电压点
V3
BOR复位区域
0V
4.4.3 工作死区与工作频率的关系
工作死区电压与工作速度相关,如下图示意了死区与工作频率的关系:
VDD
系统工作死区
系统复位区域
系统工作电压随工作频率的关系
Fcpu
4.4.4 死区防护
对于死区防护,有以下几点建议:
合理使用看门狗复位电路
降低系统的工作频率
合理采用外部复位电路(电压偏移复位电路、外部 IC 复位)
注:
二极管 RC 复位电路电压偏移复位电路、外部 IC 复位防止系统进入死区。
4.5 外部复位
当外部复位端口 MCLRB 输入一个持续时间超过 TMCLRB 的低电平时,产生外部复位。MCLRB 选择
配置字(编译选项)为 1,MCLRB 口为外部复位输入口。
外部复位示意图:
- 30 -
HC18P12xL
MCLRB
TMCLRB
MCLRB_RST
延时时间
系统复位
注:
TMCLRB 需大于 200μs(典型值)
;外部复位延时时间为 2.2ms/1.1ms。
4.5.1 外部 RC 复位电路
由电阻和电容组成的基本RC复位电路,它在系统上电的过程中能够为复位引脚提供一个缓慢上升的
复位信号。这个复位信号的上升速度低于VDD的上电速度,为系统提供合理的复位时序,当复位引脚检
测到高电平时,系统复位结束,进入正常工作状态。
如下图:
VDD
VDD
47kΩ
MCLRB
MCU
0.1uF
GND
4.5.2 二极管 RC 复位电路
在基本RC复位电路上增加一个二极管(DIODE),对于电源异常情况,二极管正向导通使电容快速
放电并与VDD保持一致,避免复位引脚持续高电平,系统无法正常复位。
VDD
VDD
DIODE
47kΩ
MCLRB
0.1uF
GND
- 31 -
MCU
HC18P12xL
4.5.3 电压偏置复位电路
电压偏置复位电路是一种简单的电压检测复位电路,调整电压检测点,可以解决系统死区问题。电
路中,R1和R2构成分压电路,当R1和R2的分压值高于三极管的开启电压时,三极管集电极输出高电平,
单片机正常工作;当R1和R2的分压值低于三极管的开启电压时,集电极输出低电平,MCU复位。
对于不同应用需求,选择适当的分压电阻。分压电阻R1和R2在电路中要耗电,此处的功耗必须计入
整个系统的功耗中。
VDD
VDD
R1
MCLRB
R2
2KΩ
GND
- 32 -
MCU
HC18P12xL
5
系统时钟
5.1 概述
HC18P12xL内带双时钟系统:高频时钟和低频时钟。高频时钟的时钟源由高频晶振或内部32MHz RC
振荡电路(IRC 32MHz)提供。低频时钟的时钟源则由低频晶振或内部低速RC振荡电路(RC 32KHz@5V)
提供。两种时钟都可作为系统时钟源Fosc。OSCCON寄存器的SCS位控制高频时钟和低频时钟之间切换。
高频模式:Fcpu = Fsys / N,N = 2或4,时钟模式选择决定N的值。
低频模式:Fcpu = Fsys / N,N = 2或4,时钟模式选择决定N的值。
5.2 时钟框图
OSCHM[1:0]
OSCI / PORTB7
OSCHM[1:0]
EN
HS
OSCO /PORTB6
SCS
ROSC[2:0]
高频系统时钟(HOSC)
16 M
8M
32MHz IHRC
分
频
器
4M
IRC
系统时钟
2M
1M
500K
LOSCI/PORTB3
T0OSCEN |T1OSCEN
LOSCO/PORTB4
32K低频晶体振荡器
低频系统时钟(LOSC)
32K ILRC
32K 低频RC振荡器
OSCLM[1:0]
WDT
计数时钟
OSCHM[1:0]:高速系统时钟选择配置字
OSCLM[1:0]:低速系统时钟选择配置字
ROSC[2:0]:高速内部RC振荡器频率选择配置字
Fosc:时钟源频率
Fsys:系统时钟频率
- 33 -
HC18P12xL
Fcpu:指令时钟频率
5.3 系统高频时钟
系统高频时钟有两种选择,通过OSCHM[1:0]高频系统时钟选择配置字来控制。
高频系统时钟选择配置字:
OSCHM[1:0]
说明
00
内部 RC 振荡器(IRC),OSCI/OSCO 作为普通 IO 口。
01
高频晶体振荡器(HS),OSCI/OSCO 作为高频晶体振荡器输入/输出口。
外部时钟输入,OSCI 作为外部时钟输入口,OSCO 作为外部时钟输出口。
5.3.1 内部高频 RC 振荡器
配置字OSCHM[1:0]和ROSC[2:0]控制单片机的内置RC高速时钟。OSCHM[1:0]若选择“00”,则内置
RC振荡器作为系统时钟源,OSCI/OSCO作为通用I/O口。
内置RC高频时钟有16M/8M/4M/2M/1M /500K六种选择。
高频内部RC振荡器频率选择配置字
说明
ROSC[2:0]
110
内部RC振荡器频率选择16MHz
101
内部RC振荡器频率选择8MHz
100
内部RC振荡器频率选择4MHz
011
内部RC振荡器频率选择2MHz
010
内部RC振荡器频率选择1MHz
001
内部RC振荡器频率选择500KHz
5.3.2 外部高频时钟
外部高频时钟,由配置字 OSCHM 控制具体模式的选择
高频晶体振荡器: 最高 20MHz
高频晶体振荡器的频率为1MHz~20MHz,推荐的典型值为4MHz、8MHz和16MHz,电容推荐值为
20pF。
OSCO
Crystal
OSCI
- 34 -
HC18P12xL
注:
OSCI 和 OSCO 引脚与振荡器和起振电容之间距离 10mm 以内。
5.4 系统低频时钟
高频时钟有两种选择,通过低频时钟选择配置字来选择。
低频晶体振荡器: 32.768KHz
低频 RC 振荡器: 32KHz(5V 典型值)
低频系统时钟选择配置字
说明
OSCLM[1:0]
00
低频 RC 振荡器,32KHz,LOSCI/LOSCO 作为输入/输出口
01
低频晶体振荡器,32.768KHz,LOSCI/LOSCO 作为低频晶体振荡器
输入/输出口
5.4.1 低频晶体振荡器
低频晶体振荡器的频率为32.768KHz,电容推荐值为20pF。
低频晶体振荡器电路
LOSCO
Crystal
LOSCI
系统工作在绿色模式下,可以使能低频晶体振荡器。
注:
外部高频晶振接 OSCO、OSCI 端口,外部低频晶振接 LOSCO、LOSCI 端口。
5.4.2 低频 RC 振荡器
系统低频时钟源也可采用RC振荡电路。低频内部RC振荡电路的输出频率受系统电压和环境温度的
影响较大,通常为5V时输出32KHz(典型值)。
输出频率与工作电压之间的关系如下图所示:
- 35 -
HC18P12xL
注:
低频时钟也用作看门狗定时器的时钟。
- 36 -
HC18P12xL
6
系统工作模式
HC18P12xL共有四种工作模式:
高频模式
低频模式
休眠模式
绿色模式
系统复位后,工作于高频模式还是低频模式,由系统配置字决定。程序运行过程中,可以通过设置
SCS 位使系统在高频和低频模式之间切换。
图6-1 系统工作模式转换:
绿色模式
复位或中断
T0
1
、 S=
令 T0 C
p指
ee 1 &
Sl N=
CE
OS
T0
OS Sle
CE ep指
N= 令
1& 、
T0
CS
=1
复位或中断
SCS清零
高频模式
低频模式
SCS置1
Sle
T0 ep指
OS 令
CE 、
N=
0
令、
p指 EN=0
e
e
Sl SC
O
T0
复位或中断
复位或中断
休眠模式
注:
1. 从休眠或绿色模式唤醒,中断使能的情况则进入相应中断,否则执行下一句。
2. 外部复位和 Timer2 中断不能唤醒休眠或绿色模式。
3. 进入休眠或绿色模式前,关闭 WDT 可降低功耗。
- 37 -
HC18P12xL
各种模式下振荡器模块及Timer0/Timer1的工作状态表
模块
高频模式
低频模式
绿色模式
休眠模式
高频振荡器
运行
由HXEN决定
由HXEN决定
关闭
低频振荡器
运行
运行
运行
关闭
Timer0
运行
运行
定时唤醒模式下运行
计数器模式下运行
Timer1
运行
运行
异步定时唤醒模式下运行
异步计数器模式下运行
6.1 模式切换举例
例:高频/低频模式切换到睡眠模式。
BCF
STATUS,RP0
BCF
OSCCON,T0OSCEN
SLEEP
;BANK0
例:高频模式切换到低频模式.
BCF
STATUS,RP0
BSF
OSCCON,SCS
;BANK0
;SCS = 1, 系统进入低频模式
例:从低频模式切换到高频模式。
BCF
STATUS,RP0
BCF
OSCCON,SCS
;BANK0
;SCS = 0, 系统进入高频模式
例:从高频/低频模式切换到绿色模式
; T0定时器定时唤醒
BCF
STATUS,RP0
MOVLW
0X05
MOVWF
OPTION
BSF
OPTION, T0CS
BSF
OSCCON, T0OSCEN
BSF
INTCON,T0IE
BSF
INTCON,GIE
CLRF
T0
SLEEP
;BANK0
;使能T0 定时器。
例:从高频/低频模式切换到绿色模式。
;T0定时器定时唤醒,OSCLM=01,低频晶体振荡器为32,768KHz,定时唤醒时间为0.5s。
BCF
STATUS,RP0
;BANK0
MOVLW
0X05
MOVWF
OPTION
BSF
OPTION,T0CS
BSF
OSCCON,T0OSCEN
BCF
OSCCON,T0IF
BSF
INTCON,T0IE
;使能T0 定时器。
BSF
INTCON,GIE
CLRF
T0
- 38 -
HC18P12xL
RTC_MODE:
SLEEP
BCF
BCF
…
GOTO
STATUS,RP0
INTCON,T0IF
;BANK0
;0.5s时间到
RTC_MODE
6.2 高低频模式切换
图6-2 高低频切换时序图一
HOSC
LOSC
SCS
FOSC
Tscs
高低速时钟切换(HXEN=0)
图6-3 高低频切换时序图二
HOSC
LOSC
SCS
FOSC
高低速时钟切换(HXEN=1)
时钟切换时间(Tscs)计算:
Tscs = 高频振荡器起振时间 + 高频振荡器稳定时间
不同类型高频振荡器的稳定时间表
振荡器类型
高频振荡器稳定时间
高频晶体振荡器
1024 Clock
外部/内部 RC 振荡器
16 Clock
- 39 -
HC18P12xL
6.3 唤醒时间
系统进入休眠模式后,系统时钟停止运行。外部中断把系统从休眠模式下唤醒时,系统需要等待振
荡器起振定时器(OST)定时结束,以使振荡电路进入稳定工作状态,等待的这一段时间称为唤醒时间。
唤醒时间结束后,系统进入高频或低频模式。
唤醒时间的计算如下:
唤醒时间 = 起振时间 + OST定时时间
同类型振荡器OST定时时间表
振荡器类型
OST 定时时间
高/低频晶体振荡器
1024 Clock
外/内部 RC 振荡器
16 Clock
低频 RC 振荡器
4 Clock
注:
系统进入绿色模式后,低频时钟正常运行。外部或内部中断将系统从绿色模式中唤醒不需要唤醒时间。
6.4 OSCCON 寄存器
07Ah
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OSCCON
T0OSCEN
-
-
-
-
-
HXEN
SCS
R/W
R/W
-
-
-
-
-
R/W
R/W
POR的值
0
-
-
-
-
-
0
q
注: x = 未知, - = 未实现, q = 取值视条件而定
bit 7 T0OSCEN:低频振荡器使能位
1 = 在低速或绿色模式下使能内部32K WDT振荡器
0 = 在低速或绿色模式下禁止内部32K WDT振荡器
bit 1 HXEN: 高频振荡器使能位
1 = 在低速或绿色模式下使能高频振荡器
0 = 在低速或绿色模式下禁止高频振荡器
bit 0 SCS: 高低频模式选择位
1 = 系统时钟选择为低频系统时钟
0 = 系统时钟选择为高频系统时钟
- 40 -
HC18P12xL
7
中断源
HC18P12xL中断源:
Timer0定时器中断
INT0外部中断
PORT口电平变化中断
Timer1定时器中断
Timer2定时器中断
CCP1中断
CCP2中断
AD中断
PWM中断
系统产生中断时,程序计数器(PC)值压入堆栈,程序跳转至0004h,进入中断服务程序。当程序
运行到RETFIE指令时,系统退出中断服务程序,程序计数器值出栈,系统执行PC+1地址对应的指令。
为避免误进入中断,在使能中断和退出中断服务程序之前,必须清除中断标志位。
图7-1 中断示意图
Timer0中断
PORTAX
TOIF
TOIE
INTF
外部中断
INTE
唤醒
RAIF
IOCAX
RAIE
PORTBX
到CPU的中断
RBIF
RBIE
电平变化中断IOCBX
PORTFX
RFIF
IOCFX
RFIE
Timer1中断
PWM中断
Timer2中断
CCP1中断
CCP2中断
T1IF
T1IE
PWMIF
PWMIE
T2IF
T2IE
PEIE
CCP1IF
CCP1IE
CCP2IF
CCP2IE
GIE
- 41 -
HC18P12xL
7.1 内核中断
使能内核中断必须将GIE和相应中断的使能位置1,使能PORTB电平变化中断还需要将相应端口配置
为输入并且IOCB的相应位置1。INT0外部中断和PORTB电平变化中断可以唤醒SLEEP,Timer0中断在计
数器模式和定时唤醒模式下可以唤醒SLEEP。
09h、209h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
x
注: x = 未知
bit 7 GIE: 全局中断使能位
1 = 使能所有未屏蔽的中断
0 = 禁止所有中断
bit 5 T0IE:Timer0溢出中断使能位
1 = 使能Timer0中断
0 = 禁止Timer0中断
bit 4 INTE: INT0外部中断使能位
1 = 使能INT0外部中断
0 = 禁止INT0外部中断
bit 3 RBIE:PORTB电平变化中断使能位
1 = 使能PORTB电平变化中断
0 = 禁止PORTB电平变化中断
bit 2 T0IF:Timer0溢出中断标志位,Timer0计数寄存器在FFh至00h时产生溢出信号
1 = Timer0计数寄存器溢出(必须由软件清0)
0 = Timer0计数寄存器未溢出
bit 1 INTF: INT0外部中断标志位
1 = 发生INT0外部中断(必须由软件清0)
0 = 未发生INT0外部中断
bit 0 RBIF:PORTB电平变化中断标志位
1 = PORTB[7:0]中至少有一个口的电平状态发生了改变(必须由软件清0)
0 = PORTB[7:0]电平状态没有变化
078h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OPTION
-
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
R/W
-
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
-
1
1
1
1
1
1
1
bit 6 INTEDG: 触发INT0外部中断的边沿选择位
1 = INT0引脚上升沿触发中断
0 = INT0引脚下降沿触发中断
- 42 -
HC18P12xL
7.2 外设中断
使能外设中断必须将GIE和PEIE置1,同时将相应中断的使能位置1。Timer1门控事件中断可以唤醒
SLEEP,Timer1中断在异步计数器模式和异步定时唤醒模式下可以唤醒SLEEP,CCPx中断在捕捉模式下
可以唤醒SLEEP。
09h、209h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
x
bit 7 GIE: 全局中断使能位
1 = 使能所有未屏蔽的中断
0 = 禁止所有中断
bit 6 PEIE: 外设中断使能位
1 = 使能所有未屏蔽的外设中断
0 = 禁止所有外设中断
070h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIE1
-
ADIE
-
-
-
CCP1IE
T2IE
T1IE
R/W
-
R/W
-
-
-
R/W
R/W
R/W
POR的值
-
0
-
-
-
0
0
0
bit 6 ADIE:ADC中断使能位
1 =使能ADC中断
0 =禁止ADC中断
bit 2 CCP1IE:CCP1中断使能位
1 = 使能CCP1中断
0 = 禁止CCP1中断
bit 1 T2IE:Timer2计数寄存器与PR2匹配中断使能位
1 = 使能Timer2匹配中断
0 = 禁止Timer2匹配中断
bit 0 T1IE:Timer1溢出中断使能位
1 = 使能Timer1溢出中断
0 = 禁止Timer1溢出中断
071h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIE2
-
-
PWM0IE
-
-
-
-
CCP2IE
R/W
-
-
R/W
-
-
-
-
R/W
POR的值
-
-
0
-
-
-
-
0
bit [5] PWM0IE:PWM0中断使能位
1 = 使能PWM0中断
0 = 禁止PWM0中断
bit 0 CCP2IE:CCP2中断使能位
1 = 使能CCP2中断
0 = 禁止CCP2中断
- 43 -
HC18P12xL
072h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIE3
-
-
-
RFIE -
-
-
-
RAIE
R/W
-
-
-
R/W
-
-
-
R/W
POR的值
-
-
-
0
-
-
-
0
Bit[4:0] RxIE: PORTx电平变化中断使能位(x=A/F)
1 = 使能PORTx电平变化中断
0 = 禁止PORTx电平变化中断
054h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIR1
-
ADIF
-
-
-
CCP1IF
T2IF
T1IF
R/W
-
R/W
-
-
-
R/W
R/W
R/W
POR的值
-
0
-
-
-
0
0
0
055h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIR2
-
-
PWM0IF
-
-
-
-
CCP2IF
R/W
-
-
R/W
-
-
-
-
R/W
POR的值
-
-
0
-
-
-
-
0
054h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PIR3
-
-
-
RFIF
-
-
-
RAIF
R/W
-
-
-
R/W
-
-
-
R/W
POR的值
-
-
-
0
-
-
-
0
bit 6 ADIF:AD中断标志位
1 =ADC转换已完成(必须由软件清0)
0 = ADC转换未完成或尚未开始
bit 2 CCP1IF:CCP1中断标志位
捕捉模式:
1 = 发生了捕捉事件(必须用软件清零)
0 = 未发生捕捉事件
比较模式:
1 = 发生了比较事件(必须用软件清零)
0 = 未发生比较事件
PWM 模式:
在此模式下未使用
bit 1 T2IF:Timer2计数寄存器与PR2匹配中断标志位
1 = Timer2发生匹配(必须用软件清零)
0 = Timer2未发生匹配
bit 0 T1IF:Timer1溢出中断标志位,Timer1计数寄存器在FFFFh至0000h时产生溢出信号
1 = Timer1计数寄存器溢出(必须由软件清0)
0 = Timer1计数寄存器未溢出
- 44 -
HC18P12xL
bit [5]
PWM0IF:PWM0中断标志位
1 = PWM0中断产生中断(必须由软件清0)
0 = PWM0中断未产生中断
bit 0 CCP2IF:CCP2中断标志位
捕捉模式:
1 = 发生了捕捉事件(必须用软件清零)
0 = 未发生捕捉事件
比较模式:
1 = 发生了比较事件(必须用软件清零)
0 = 未发生比较事件
PWM 模式:
在此模式下未使用
bit [4:0]
RxIF:PORTx电平变化中断标志位(x=A/C/ F)
1 = PORTx[7:0]中至少有一个口的电平状态发生了改变(必须由软件清0)
0 = PORTx[7:0]电平状态没有变化
- 45 -
HC18P12xL
7.3 GIE 全局中断
只有当全局中断控制位GIE置“1”的时候程序才能响应中断请求。一旦有中断发生,程序计数器入栈,
程序转至中断向量地址(ORG 0004H),堆栈层数加1。
例:设置全局中断控制位(GIE)
BSF
INTCON,GIE
;使能 GIE。
注:在所有中断中,GIE 都必须处于使能状态。
指
令
NIHAO
7.4 中断保护
有中断请求发生并被响应后,程序转至0004H执行中断服务程序。
中断服务程序开始执行时,需保存W寄存器、STATUS寄存器、PCLATH寄存器的内容;结束中断服
务程序时,恢复PCLATH寄存器、STATUS寄存器、W寄存器的数值,注意顺序。
注:
1.多 BANK 的 IC 中,为了使保存系统寄存器的 RAM 可以在所有 BANK 访问,建议将这些 RAM 指定在所有 BANK
均映射的地址,该 IC 为 0X40~0X7F。
2.在退出中断时,由于需要先恢复 STATUS,再使用 MOVF 指令恢复 W,可能会改变 STATUS,因此必须使用 SWAPF
指令恢复 W。注意在中断中共有两句 SWAPF 指令。
例:对W、PCLATH 和STATUS 进行入栈保护。
ORG
0000H
GOTO
START
ORG
0004H
GOTO
INT_SERVICE
ORG
0010H
START:
…
INT_SERVICE:
MOVWF
W_TEMP
SWAPF
STATUS,W
MOVWF
STATUS_TEMP
MOVF
PCLATH, W
MOVWF
PCLATH_TEMP
CLRF
STATUS
…
MOVF
PCLATH_TEM ,W
- 46 -
;保存 W。
;保存 STATUS。
;保存 PCLATH。
;切换到BANK0
HC18P12xL
MOVWF
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE
…
END
PCLATH
STATUS_TEMP,W
STATUS
W_TEMP,F
W_TEMP,W
;恢复PCLATH。
;恢复STATUS。
;恢复W。
;退出中断。
7.5 Timer0 定时器中断
T0 溢出时,无论 T0IE 处于何种状态,T0IF 都会置“1”。若 T0IE 和 T0IF 都置“1”,且 GIE 使能,
系统就会响应 TIMER0 的中断;若 T0IE = 0,则无论 T0IF 是否置“1”,系统都不会响应 TIMER0 中断。
7.6 INT0 外部中断
INT0 被触发,则无论INTE 处于何种状态,INTF 都会被置“1”。如果INTF=1 且INTE=1,GIE使
能,系统响应该中断;如果INTF=1 而INTE=0,系统并不会执行中断服务。在处理多中断时尤其需要注
意。
078h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OPTION
RBPUB
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
INTEDG: 触发INT0外部中断的边沿选择位
1 = INT0引脚上升沿触发中断
0 = INT0 引脚下降沿触发中断
例:INT0 中断请求设置,电平触发。
BSF
STATUS,RP0
BSF
OPTION,INTEG
BCF
STATUS,RP0
BCF
INTCON,INTF
BSF
INTCON,INTE
BSF
INTCON,GIE
例:INT0 中断。
ORG
0004H ;
GOTO
INT_SERVICE
INT_SERVICE:
…
BCF
STATUS,RP0
BTFSS
INTCON,INTF
GOTO
EXIT_INT
BCF
INTCON,INTF
…
bit 6
- 47 -
;BANK1
;INT0 置为上升沿触发。
;BANK0
;INT0 中断请求标志清零。
;使能INT0 中断。
;使能GIE。
;保存STATUS、W 和PCLATH。
;BANK0
;检测T0IF。
;T0IF = 0,退出中断。
;T0IF 清零。
;INT0 中断服务程序。
HC18P12xL
…
EXIT_INT:
…
RETFIE
;恢复STATUS、W和PCLATH。
;退出中断。
7.7 PORT 电平变化中断
PORTx电平变化中断时,则无论RBIE处于何种状态,RxIF都会被置“1”。如果RxIF=1 且RxIE=1,
GIE使能,系统响应该中断;如果RxIF=1 而RxIE=0,系统并不会执行中断服务。
电平变化中断必须将PORTx端口设为输入,并将寄存器IOCx对应位置“1”。
041h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
IOCB
IOCB7
IOCB6
-
IOCB4
IOCB3
IOCB2
IOCB1
IOCB0
R/W
R/W
R/W
-
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
-
0
0
0
0
0
Bit 2
Bit 1
Bit 0
IOCx1
IOCx0
IOCB[7:0]:PORTBx电平变化中断使能控制位。
0 = 该端口禁止电平变化中断;
1 = 该端口使能电平变化中断。
040h~045h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
IOCx
IOCx7
IOCx6
IOCx5
IOCx4
IOCx3
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
IOCx2
IOCx[7:0]:PORTxx电平变化中断使能控制位。
0 = 该端口禁止电平变化中断;
1 = 该端口使能电平变化中断。
x = A、F
注:
1.如要允许 PORTB 口电平变化中断必须将 IOCB 的对应端口的位置 1。
2.PORTB 电平变化中断中,在清零 RBIF 之前必须执行 PORTB 端口读操作。
例:PORTB1 电平变化中断请求设置。
MOVLW
0X02
BSF
STATUS,RP0
IORWF
TRISB,F
MOVLW
0X02
BCF
STATUS,RP0
IORWF
IOCB,F
MOVF
PORTB, W
BCF
INTCON,RBIF
BSF
INTCON,RBIE
BSF
INTCON,GIE
例:PORTB 中断。
ORG
0004H
- 48 -
;BANK1
;PORTB1 端口为输入。
;BANK0
;使能PORTB1 端口为电平变化中断。
;读PORTB 口。
; PROTB 中断请求标志清零。
;使能PROTB 中断。
;使能GIE。
HC18P12xL
GOTO
INT_SERVICE
INT_SERVICE:
…
BCF
BTFSS
GOTO
MOVF
BCF
…
…
STATUS,RP0
INTCON,RBIF
EXIT_INT
PORTB,W
INTCON,RBIF
;保存STATUS、W 和PCLATH。
;BANK0
;检测RBIF。
;RBIF = 0,退出中断。
;读PORTB 端口
; RBIF 清零。
; PORTB 电平变化中断服务程序。
EXIT_INT:
…
RETFIE
;恢复STATUS、W 和PCLATH。
;退出中断。
例:PORTB 中断唤醒SLEEP。
BCF
STATUS,RP0
MOVLW
0X02
IORWF
TRISB,F
MOVLW
0X02
BCF
STATUS,RP0
IORWF
IOCB,F
MOVF
PORTB,W
BCF
INTCON,RBIF
BSF
INTCON,RBIE
SLEEP
BCF
INTCON,RBIE
BCF
STATUS,RP0
MOVF
PORTB,W
…
;BANK0
;PORTB1 端口为输入。
;BANK0
;使能PORTB1 端口为电平变化中断。
;读PORTB 口。
;PROTB 中断请求标志清零。
;使能PROTB 中断。
;BANK0
;读PORTB 端口。
;其他程序。
注:
1.如要允许 PORTx 口电平变化中断必须将 IOCx 的对应端口的位置 1。
2.PORTx 电平变化中断中,在清零 RxIF 之前必须执行 PORTx 端口读操作。
7.8 Timer2 定时器中断
当T2的值和PR2的值相同时,TIMER2中断被触发,则无论T2IE 处于何种状态,T2IF 都会被置“1”。
如果T2IF=1 且T2IE=1,且PEIE、GIE均使能,系统响应该中断;如果T2IF=1 而T2IE=0,系统并不会
执行中断服务。
例:TIMER2 中断请求设置
BCF
STATUS,RP0
;BANK0
MOVLW
0XFF
- 49 -
HC18P12xL
MOVWF
MOVLW
MOVWF
CLRF
BSF
BSF
BSF
PR2
0X04
T2CON
T2
PIE1,T2IE
INTCON,GIE
T2CON,T2ON
;设置T2 周期。
;设置分频比。
;使能TIMER2 中断。
;使能TIMER2。
例:TIMER2 中断。
ORG
GOTO
T2INT_SERVICE:
…
BCF
BTFSS
GOTO
BCF
…
…
EXIT_INT:
…
RETFIE
0004H
T2INT_SERVICE
STATUS,RP0
PIR1,T2IF
EXIT_INT
PIR1,T2IF
;保存STATUS、W 和PCLATH。
;BANK0
;检测T2IF。
;T2IF = 0,退出中断。
;T2IF 清零。
;TIMER2 中断服务程序。
;恢复STATUS、W和PCLATH。
;退出中断。
7.9 Timer1 中断
T1溢出时,无论T1IE 处于何种状态,T1IF都会置“1”。若T1IE 和T1IF 都置“1”,且PEIE、GIE均
使能,系统就会响应TIMER1的中断;若T1IE = 0,则无论T1IF 是否置“1”,系统都不会响应TIMER1中断。
例:TIMER1工作于异步计数模式,并中断唤醒SLEEP
MOVLW
0XA4
BCF
STATUS,RP0
;BANK0
MOVWF
T1CON
;T1时钟源为T1CKI;分频比为1:4;异步计数器
模式
MOVLW
nnH
MOVWF
T1H
MOVLW
nnH
MOVWF
T1L
;Timer1赋初值
MOVLW
0XC0
MOVWF
INTCON
;使能外设中断
BCF
STATUS,RP0
;BANK0
BSF
PIE1,T1IE
BCF
STATUS,RP0
BCF
PIR1,T1IF
BSF
T1CON,T1ON
BSF
STATUS,RP0
- 50 -
HC18P12xL
BCF
SLEEP
OSCCON,T0OSCEN
;禁止低频晶体振荡器
;进入SLEEP
T1INT_SERVICE:
…
BCF
BTFSS
GOTO
BCF
…
…
;保存STATUS、W 和PCLATH。
; BANK0
;检测T1IF。
;T1IF = 0,退出中断。
;T1IF 清零。
;TIMER1 中断服务程序。
STATUS,RP0
PIR1,T1IF
EXIT_INT
PIR1,T1IF
EXIT_INT:
…
;恢复STATUS、W和PCLATH。
RETFIE
;退出中断。
7.10 AD 中断
当 ADC 完成,ADON 被硬件清零,无论 ADIE 处于何种状态,与此同时 ADIF 被置“1”。若 ADIE、
ADIF 为“1”,且 PEIE、GIE 均使能,系统就会相应 ADC 中断;若 ADIE = 0,则无论 ADIF 是否置“1”,
系统都不会响应 ADC 中断。
7.11 CCP 中断
当发生 CCPx 中断时,无论 CCPxIE 处于何种状态,CCPxIF 被置“1”。若 CCPxIE、CCPxIF 为“1”,
且 PEIE、GIE 均使能,系统就会相应 CCPx 中断;若 CCPxIE = 0,则无论 CCPxIF 是否置“1”,系统都
不会响应 CCPx 中断。
7.12 PWM 中断
当 PWM0 周期计数器溢出,无论 PWM0IE 处于何种状态,PWM0IF 都被置“1”。若 PWM0IE 为“1”,
且 PEIE、GIE 均使能,系统就会相应产生 PWM 中断。
7.13 多中断操作
在同一时刻,系统中可能出现多个中断请求。此时,用户必须根据系统的要求对各中断进行优先权
的设置。中断请求标志IF由中断事件触发,当IF处于有效值“1”时,系统并不一定会响应该中断。各中断
触发事件如下表所示:
中断
有效触发
T0IF
T0溢出
INTF
由INTEDG控制
RBIF
PORTB电平变化
RxIF
其他PORT口电平变化中断
T2IF
T2的值和PR2相同
PWM0IF
PWM0周期计数溢出中断
多个中断同时发生时,需要注意的是:首先,必须预先设定好各中断的优先权;其次,利用IE和IF 控
制系统是否响应该中断。在程序中,必须对中断控制位和中断请求标志进行检测。
例:多中断条件下检测中断请求。
- 51 -
HC18P12xL
ORG
GOTO
0004H ;
INT_SERVICE
INT_SERVICE:
…
BCF
BTFSS
GOTO
BTFSC
GOTO
STATUS,RP0
INTCON,INTE
INT0CHK
INTCON,INTF
INT0
BTFSS
GOTO
BTFSC
GOTO
INTCON,T0IE
INTT2CHK
INTCON,T0IF
INTT0
BCF
BTFSS
GOTO
BCF
BTFSC
GOTO
STATUS,RP0
PIE1,T2IE
INTRBCHK
STATUS,RP0
PIR1,T2IF
INTT2
;保存STATUS、W和PCLATH。
;检查是否有INT0 中断请求。
;BANK0
;检查是否使能INT0 中断。
;跳到下一个中断。
;检查是否有INT0 中断请求。
;进入INT0 中断。
;检查是否有T0 中断请求。
;检查是否使能T0 中断。
;跳到下一个中断。
;检查是否有T0 中断请求。
;进入T0 中断。
;检查是否有T2 中断请求。
;BANK0
;检查是否使能T2 中断。
;跳到下一个中断。
;BANK0
;检查是否有T2 中断请求。
;进入T2 中断。
BTFSS
GOTO
BTFSC
GOTO
INTCON,RBIE
INT_EXIT
INTCON,RBIF
INTRB
;检查是否使能PORTB 电平变化中断。
;跳到中断结束。
;检查是否有PORTB 电平变化中断请求。
;进入PORTB 电平变化中断。
INT0CHK:
INTT0CHK:
INTT2CHK:
INTRBCHK:
INTT2:
BCF
PIR1,T2IF
````````
GOTO INT_EXIT
;T2中断处理程序
…
;恢复STATUS、W和PCLATH。
INT_EXIT:
RETFIE
;退出中断。
- 52 -
HC18P12xL
8 I/O口
HC18P12xL共有七组双向端口:
PORTA口,
PORTB口,
PORTF口
8.1 I/O 口输入输出控制寄存器
010h
Bit 7
Bit 6
Bit 5
Bit 4
TRISA
TRISA7
TRISA6
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
011h
Bit 7
Bit 6
TRISB
TRISB7
R/W
Bit 3
Bit 2
Bit 1
Bit 0
TRISA2
TRISA1
TRISA0
R/W
R/W
R/W
R/W
1
1
1
1
1
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
015h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TRISF
TRISF7
TRISF6
TRISF5
TRISF4
TRISF3
TRISF2
TRISF1
TRISF0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
TRISA4
TRISx[7:0]:PORTx[7:0]的输入输出控制位
1 =输入状态
0 =输出状态
注:1. PORTB5 可设置为开漏输出。
08Ch
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ANSELL
ANSEL7
ANSEL6
-
ANSEL4
ANSEL3
ANSEL2
ANSEL1
ANSEL0
R/W
R/W
R/W
-
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
-
1
1
1
1
1
08Dh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ANSELH
ANSEL15
ANSEL14
ANSEL13
ANSEL12
ANSEL11
ANSEL10
ANSEL9
ANSEL8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
ANSEL[15:0]:A/D引脚数模控制位
1:模拟模式,作为模拟信号口,仅可作为AD通道的模拟输入。
0:数字模式,作为数字输入或输出口。
- 53 -
HC18P12xL
注: ANSEL 上电初始值为 B’xxx1 1111’,即作为模拟输入。无论是否应用到 AD,均需要在上电后,
对 IO 操作之前按需配置,否则 IO 口可能无法受控于对应的端口寄存器,状态将不确定。
ANSEL[4:0]对应 AN4~AN0(PA4~PA0)
,ANSEL[7:6]对应 AN7、AN6(PA7、PA6)
ANSEL[13:9]对应 AN13~AN9(PB4~PB0)
,ANSEL[15:14]对应 AN15、AN14(PB7、PB6)
8.2 I/O口上拉控制寄存器
028~02Dh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
WPUx
WPUx7
WPUx6
WPUx5
WPUx4
WPUx3
WPUx2
WPUx1
WPUx0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
x = A、B、F
WPUx[7:0]:PORTx[7:0]的上拉使能位
1 = 上拉禁止
0 = 上拉使能
078h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OPTION
RBPUB
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
bit 7 RBPUB:PORTB上拉使能位
1 = PORTB上拉由WPUB决定
0=
使能PORTB上拉(此时无论WPUB为何值PORTB都上拉)
注:1. 注意此处上拉控制寄存器逻辑,0 为使能,1 为禁止。
2.当端口设置为输出时,上拉/下拉默认关闭(硬件关闭)
8.3 I/O口下拉控制寄存器
034h~039h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
WPDx
WPDx7
WPDx6
WPDx5
WPDx4
WPDx3
WPDx2
WPDx1
WPDx0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
x = A、B、F
WPDx[7:0]:PORTx[7:0]的上拉使能位
1 = 下拉禁止
0 = 下拉使能
注:1. 注意此处下拉控制寄存器逻辑,0 为使能,1 为禁止;
2. 当端口设置为输出时,下拉无效;
3.当下拉打开时,上拉根据控制寄存器使能或禁止,即设置为输入时可同时打开上下拉。
- 54 -
HC18P12xL
8.4 PORT驱动控制寄存器
04Dh~04Fh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
DRENxL
DRENx7L
DRENx6L
DRENx5L
DRENx4L
DRENx3L
DRENx2L
DRENx1L
DRENx0L
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
0A0h~0A2h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
DRENxH
DRENx7H
DRENx6H
DRENx5H
DRENx4H
DRENx3H
DRENx2H
DRENx1H
DRENx0H
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
x=A/B
DRENxL[7:0]:DRENxL[7:0]的驱动控制位
DRENxH=0时:
0 = 源电流/灌电流(Level0)(IOH=0.9VDD 22mA@ 5V)(IOL=0.1VDD 85mA@ 5V)
1 =源电流/灌电流(Level1)(IOH=0.9VDD 8mA@ 5V)(IOL=0.1VDD10mA@ 5V)
DRENxH=1时:
0 = 源电流/灌电流(Level3)(IOH=0.9VDD10mA@ 5V)
(IOL=0.1VDD 25mA@ 5V)
1 = 源电流/灌电流(Level2)(IOH=0.9VDD 4mA@ 5V) IOL=0.1VDD 8mA@ 5V)
052h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
DRENFL
DRENF7L
DRENF6L
DRENF5L
DRENF4L
DRENF3L
DRENF2L
DRENF1L
DRENF0H
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
0A5h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
DRENFH
DRENF7H
DRENF6H
DRENF5H
DRENF4H
DRENF3H
DRENF2H
DRENF1H
DRENF0H
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
DRENFL[7:0]:DRENxL[7:0]的驱动控制位
DRENFH=0时:
0 = 源电流/灌电流(Level0)(IOH=0.9VDD 22mA@ 5V)(IOL=0.1VDD 85mA@ 5V)
1 = 源电流/灌电流(Level1)(IOH=0.9VDD 8mA@ 5V)(IOL=0.1VDD10mA@ 5V)
DRENFH=1时:
0 = 源电流/灌电流(Level3)(IOH=0.9VDD10mA@ 5V)
(IOL=0.1VDD 25mA@ 5V)
1 = 源电流/灌电流(Level2)(IOH=0.9VDD 4mA@ 5V) IOL=0.1VDD 8mA@ 5V)
- 55 -
HC18P12xL
8.5 I/O 口数据寄存器
01Ch
Bit 7
Bit 6
Bit 5
Bit 4
PORTA
PORTA7
PORTA6
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
01Dh
Bit 7
Bit 6
PORTB
PORTB7
R/W
Bit 3
Bit 2
Bit 1
Bit 0
PORTA2
PORTA1
PORTA0
R/W
R/W
R/W
R/W
x
x
x
x
x
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PORTB6
PORTB5
PORTB4
PORTB3
PORTB2
PORTB1
PORTB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
x
x
x
x
x
021h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PORTF
PORTF7
PORTF6
PORTF5
PORTF4
PORTF3
PORTF2
PORTF1
PORTF0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
x
x
x
x
x
x
x
x
PORTA4
8.6 管脚配置寄存器
04Ch
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PORCTR
-
-
-
CCPCT
-
-
Rev
Rev
R/W
-
-
-
R/W
-
-
R/W
R/W
POR的值
-
-
-
0
-
-
0
0
bit[1:0] Reset[1:0] 保留位 误操作
Bit[4]:CCPCT
CCP 管脚配置为
0 = CCP1/CCP2 管脚配置在 PORTB2/PORTB3(默认)
1 = CCP1/CCP2 管脚配置在 PORTA6/PORTA7
注:管脚复用功能优先级: CCP > IO。
- 56 -
HC18P12xL
9
定时器/计数器
9.1 看门狗定时器
HC18P12xL的看门狗定时器与Timer0定时器/计数器共用一个预分频器。当PSA为0时,看门狗定时器
每72ms(典型值)产生一个溢出信号;当PSA为1时,WDT溢出时间由预分频器OPTION[2:0]设置决定,
具体请参考第10章 Timer0定时器/计数器。
图9-1 看门狗定时器和预分频器框图
From Timer0
0
8位预分频器
M
U
X
看门狗
定时器
8
1
PS2:PS0
8选1MUX
PSA
4分频器
0
WDT配置字
1
To Timer0
MUX
WDT
溢出
PSA
WDTENS
079h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PCON
LVD2EN
LVD1EN
-
WDTENS
LVD2F
LVD1F
POR
BOR
R/W
R/W
R/W
-
R/W
R
R
R/W
R/W
POR的值
0
0
-
1
q
q
q
q
bit 4 WDTENS:硬件看门狗软件使能位(需配置字使能看门狗,否则该位无效)
1 = 软件使能硬件看门狗定时器
0 = 软件屏蔽硬件看门狗定时器
注:看门狗的使能逻辑 看门狗使能 = 芯片配置字使能(WDTEN) &
软件使能(WDTENS)
当系统处于休眠或绿色模式,看门狗定时器溢出将唤醒SLEEP并使其返回高频或低频模式,程序从SLEEP指令下一
条开始执行。
- 57 -
HC18P12xL
注:
1.
对看门狗清零之前,检查I/O 口的状态和RAM 的内容可增强程序的可靠性;
2.
不能在中断中对看门狗清零,否则无法侦测到主程序跑飞的状况;
3.
程序中应该只在主程序中有一次清看门狗的动作,这种架构能够最大限度的发挥看门狗的保护功能。
例:看门狗在主程序中的应用
MAIN:
BCF
STATUS,RP0
BSF
PCON,WDTENS
…
…
GOTO ERR
CLRWDT
…
CALL SUB1
CALL SUB2
…
GOTO MAIN
;BANK0
;软件使能WDT
;检查IO状态是否正确
;检查RAM是否正确
;检查IO/RAM出错,进入出错处理程序
;在整个程序中,仅有一条清狗指令
例:在休眠状态下,屏蔽看门狗功能,可以节省系统功耗
…
BCF
STATUS,RP0
;BANK0
BCF
PCON,WDTENS
;软件屏蔽看门狗功能
BCF
OSCCON,T0OSCEN ;禁止低频晶体振荡器
SLEEP
;进入休眠模式
BSF
PCON,WDTENS
;唤醒后,重新使能看门狗功能
…
例:对看门狗定时器操作,看门狗定时器使能和清零
BCF
STATUS,RP0
;BANK0
BSF
PCON,WDTENS
;使能看门狗
CLRWDT
;看门狗定时器清零
…
9.2 Timer0 定时器/计数器
Timer0 定时器/计数器模块具有如下功能:
8 位可编程定时器
外部事件计数器
绿色模式定时唤醒
图10-1 Timer0模块和预分频器(与WDT共享)框图
- 58 -
HC18P12xL
FCPU
数据总线
T0CKI
0
LOSC
M
U
X
0
M
U
X
8
M
U
X
1
0
T0寄存器
1
1
T0SE
PSA
T0CS
T0OSCEN
溢出时将T0IF
标志位置1
0
8位预分频器
M
U
X
看门狗
定时器
8
1
8选1MUX
PS2:PS0
PSA
0
WDT配置字
1
4分频器
MUX
注:T0CS、T0SE、PSA和PS2:PS0就是OPTION[5:0]
WDT
溢出
PSA
WDTENS
07Ah
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OSCCON
T0OSCEN
-
-
-
-
-
HXEN
SCS
R/W
R/W
-
-
-
-
-
R/W
R/W
POR的值
0
-
-
-
-
-
0
q
078h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OPTION
-
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
R/W
-
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
-
1
1
1
1
1
1
1
看门狗定时器与Timer0定时器/计数器共用一个预分频器,当PSA=1预分频器分配给WDT时,Timer0
在所选中时钟源的每个周期递增;当PSA=0预分频器分配给Timer0时,Timer0根据PS[2:0]值选择的预分
频时钟递增。
Timer0的预分频器不可寻址,当预分频器分配给Timer0时,对Timer0计数寄存器的写操作可以对预
分频器清0。
Timer0预分频比选择
PS[2:0]
Timer0预分频比
WDT预分频比
WDT溢出时间(典型值)
000
1:2
1:1
18ms
001
1:4
1:2
36 ms
010
1:8
1:4
72ms
011
1:16
1:8
144ms
100
1:32
1:16
288ms
101
1:64
1:32
576ms
- 59 -
HC18P12xL
110
1:128
1:64
1.152s
111
1:256
1:128
2.304s
Timer0 工作模式选择
T0CS
T0OSCEN
T0SE
0
x
x
Timer0工作状态
定时器模式,计数时钟 FCPU,
休眠和绿色模式下停止
1
0
计数器模式,计数时钟 T0CKI,上升沿计数
0
休眠模式下工作,溢出中断可唤醒 SLEEP
1
0
计数器模式,计数时钟 T0CKI,下降沿计数
1
休眠模式下工作,溢出中断可唤醒 SLEEP
1
1
定时唤醒模式,计数时钟LOSC,上升沿计数
0
绿色模式下工作,溢出中断可唤醒SLEEP
1
1
定时唤醒模式,计数时钟LOSC,下降沿计数
1
绿色模式下工作,溢出中断可唤醒SLEEP
注:
Timer0 工作模式的选择需符合上表描述,选择除上表以外情况可能会造成程序运行混乱,请谨慎操作
例:Timer0工作于定时器模式,计数时钟为Fcpu,T0计满到FF后溢出进入中断
MOVLW
0X01
BCF
STATUS,RP0
;BANK0
MOVWF
OPTION
;定时器模式,分频比为1:4
MOVLW
0X00
MOVWF
T0
;T0赋初值
BSF
INTCON,T0IE
BCF
INTCON,T0IF
BSF
INTCON,GIE
T0INT_SERVICE:
…
BCF
BTFSS
GOTO
BCF
…
…
EXIT_INT:
…
RETFIE
STATUS,RP0
INTCON,T0IF
EXIT_INT
INTCON,T0IF
;保存STATUS、W 和PCLATH。
;BANK0
;检测T0IF。
;T0IF = 0,退出中断。
;T0IF 清零。
;TIMER0 中断服务程序。
;恢复STATUS、W和PCLATH。
;退出中断。
- 60 -
HC18P12xL
9.3 Timer1 定时器/计数器
Timer1 定时器/计数器模块具有如下功能:
16 位可编程定时器
外部事件计数器,可编程选择同步、异步功能
绿色模式定时唤醒
图11-1Timer1模块框图
T1ON
T1IF
T1H
0
EN
T1L
1
T1CS[1:0]
T1SYNC
0
T1CKI
预分频器
1~256
10
LOSC
1
T1OSCEN
FOSC
01
FCPU
00
同步
T1CKPS[3:0]
9.3.1 Timer1 控制寄存器
05Ah
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
T1CON
T1CS1
T1CS0
T1CKPS1
T1CKPS0
T1OSCEN
T1SYNC
-
T1ON
R/W
R/W
R/W
R/W
R/W
R/W
R/W
-
R/W
POR的值
0
0
0
0
0
0
-
0
Timer1时钟源选择
时钟源
T1CS1
T1CS0
T1OSCEN
0
0
x
指令时钟(FCPU)
0
1
x
系统时钟(Fsys)
1
0
0
T1CKI引脚上的外部时钟
1
0
1
低频系统时钟
注:
Timer1 时钟源的选择需符合上表描述,选择除上表以外情况会造成程序运行不正常,请谨慎操作
Timer1输入时钟预分频比选择
T1CKPS[3:0]
Timer1 预分频比
0000
1:1
0001
1:2
- 61 -
HC18P12xL
0010
1:4
0011
1:8
0100
1:16
0101
1:32
0110
1:64
0111
1:128
1xxx
1:256
Timer1的预分频器不可寻址,可以通过对Timer1计数寄存器写操作将预分频器清0。
Timer1工作模式选择
T1ON
T1CS[1:0]
T1OSCEN
T1SYNC
Timer1工作模式
1
00
x
x
定时器模式,休眠和绿色模式下停止
1
01
x
x
定时器模式,休眠和绿色模式下停止
1
10
0
0
同步计数器模式,休眠模式下停止
1
10
0
1
异步计数器模式,休眠模式下工作,溢
出中断可唤醒SLEEP
1
10
1
0
同步定时唤醒模式,绿色模式下停止,
溢出中断不能唤醒SLEEP
1
10
1
1
异步定时唤醒模式,绿色模式下工作,
溢出中断可唤醒SLEEP
注:
1、T1 为 16 位计时器,在溢出中断重新赋值时应先 T1H,后 T1L,避免 T1L 在操作中的进位被覆盖;
清空时则应先 T1L 后 T1H,避免 T1L 进位意外进入 T1H 造成清空失败。
2、Timer1 工作于同步计数器模式和同步定时唤醒模式时,不能唤醒 SLEEP 或绿色模式
3、Timer1 工作模式的选择需符合上表描述,选择除上表以外情况可能会造成程序运行混乱,
请谨慎操作
- 62 -
HC18P12xL
9.4 Timer2 定时器
Timer2定时器具有8位预分频器和8位周期寄存器(PR2)
,Timer2定时器的输入时钟为指令时钟FCPU,
输入时钟通过预分频器产生Timer2计数时钟,当计数到与周期寄存器(PR2)的值相同时,在下一指令
周期产生Timer2溢出信号,可根据实际需要选择不同的预分频比及设置周期寄存器的值,产生不同溢出
时间。
图12-1 Timer2模块框图
FCPU
预分频器
1:1 1:2 … 256
定时器2
T2CKPS[3:0]
比较器
复位
溢出信号
T2IF
T2ON
周期寄存器
9.4.1 Timer2 控制寄存器
05Eh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
T2CON
-
T2CKPS3
T2CKPS2
T2CKPS1
T2CKPS0
T2ON
-
-
R/W
-
R/W
R/W
R/W
R/W
R/W
-
-
POR的值
-
0
0
0
0
0
-
-
bit 2 T2ON: Timer2模块使能位
1 = 使能Timer2模块
0 = 禁止Timer2模块
Timer2具有一个8位可编程预分频器,关闭Timer2模块和对Timer2计数寄存器或T2CON寄存器写操作
都将对预分频器清0。
T2CKPS[3:0]
Timer2 预分频比
0000
1:1
0001
1:2
0010
1:4
0011
1:8
0100
1:16
0101
1:32
0110
1:64
0111
1:128
1xxx
1:256
- 63 -
HC18P12xL
9.4.2 Timer 计数寄存器
05Ch
Bit 7
T2
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Timer2计数寄存器
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
9.4.3 Timer2 周期寄存器
05Dh
Bit 7
PR2
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Timer2周期寄存器
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
1
1
1
1
1
1
1
1
Timer2 定时器的输入时钟为指令时钟 FCPU,输入时钟通过预分频器产生 Timer2 计数信号,当计数
到与周期寄存器(PR2)的值相同时产生 Timer2 溢出信号。
Timer2 溢出时间 = (PR2 + 1)* 预分频比/Fcpu。
9.5 CCP 模块
HC18P12xL具有2个独立的CCP模块CCP1和CCP2,每个CCP模块具有三种模式:
捕捉
比较
PWM
CCP模块的时基由Timer1和Timer2提供。
CCP模块的时基
CCP模式
时钟源
捕捉
Timer1
比较
Timer1
PWM
Timer2/Timer1
082h、085h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
CCPxCON
-
-
DCxB1
DCxB0
CCPxM3
CCPxM2
CCPxM1
CCPxM0
R/W
-
-
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
-
-
0
0
0
0
0
0
bit 5~4 DCxB[1:0]:PWM占空比最低有效位
捕捉模式:未使用
比较模式:未使用
PWM模式:PWM占空比的低2位,高8位是CCPRxL寄存器
bit 3~0 CCPxM[3:0]:CCPx模式选择位
0000 = 捕捉/比较/PWM关闭(复位CCP模块)
0001 = 未使用(保留)
- 64 -
HC18P12xL
0010 = 比较模式,匹配时输出翻转电平(PIRx寄存器的CCPxIF位置1)
0011 = 未使用(保留)
0100 = 捕捉模式,每个下降沿
0101 = 捕捉模式,每个上升沿
0110 = 捕捉模式,每4个上升沿
0111 = 捕捉模式,每16个上升沿
1000 = 比较模式,匹配时输出高电平(PIRx寄存器的CCPxIF位置1)
1001 = 比较模式,匹配时输出低电平(PIRx寄存器的CCPxIF位置1)
1010 = 比较模式,匹配时仅产生软件中断(PIRx寄存器的CCPxIF位置1,CCPx引脚不受影响)
1011 = 比较模式,触发特殊事件(PIRx寄存器的CCPxIF位置1,Timer1计数寄存器复位, CCPx引脚不受影响。)
11xx = PWM模式
9.5.1 捕捉模式
在输入捕捉模式,适合用于测量引脚输入周期性方波信号的周期、频率和占空比等,也适合用于测
量引脚输入的非周期性矩形方波脉冲信号的宽度、到达时刻或消失时刻等参数。
当CCPx模块工作于捕捉模式时,一旦有下列事件在引脚CCPx上发生,CCPRx寄存器立即捕捉下这
一时刻的TMR1计数值:
每个下降沿
每个上升沿
每 4 个上升沿
每 16 个上升沿
CCPxCON寄存器的CCPxM[3:0]设置的是预分频器,关闭CCP模块或者CCP模块不在捕捉模式,预分
频计数器将会被清0。为避免错误中断,可在改变预分频比前通过清0 CCPxCON寄存器来关闭CCP模块。
在捕捉模式下,Timer1必须运行在定时器模式或同步计数器模式。
使用注意:
1、 在捕捉模式下,CCPx引脚必须由相应的方向控制器设定为输入方式。
2、 CCPxCON寄存器的CCPxM[3:0]设置的是预分频器,关闭CCP模块或者CCP模块不在捕捉模式,预分频计数
器将会被清零。为避免错误中断,可在改变预分频比前通过清零 CCPxCON寄存器来关闭CCP模块。如果
需要中途改变预分频器的分频比,建议使用以下程序片段:
BCF
STATUS,RP0
;BANK0
CLRF
CCPxCON
;关闭CCPx模块
MOVLW NEW_CAPT_PS
;选取新的分频比(1:1、1:4、1:16)
MOVWF CCPxCON
;赋予CCPxCON寄存器,并打开CCPx模块
3、 当一个捕捉事件发生后,硬件自动将CCPx的中断标志位CCPxIF置1,表示产生了一次CCPx捕捉中断。
CCPxIF位必须用软件重新清零。当CCPRx寄存器中的值还未被程序读取,而又发生了另一个新的捕捉事
件时,原先的值将被新的值覆盖掉。
4、在捕捉模式下,Timer1必须运行在定时器模式或同步计数器模式。
- 65 -
HC18P12xL
捕捉模式工作原理图
预分频器
÷1,4,16
将标志位CCPx1F置1
(PIRx寄存器)
CCPx
和
边沿检测
CCPRxH
CCPRxL
T1H
T1L
捕捉
使能
CCPxCON[3:0]
系统时钟(Fosc)
CCPx引脚上发生变化时,CCPRxH:CCPRxL捕捉Timer1计数寄存器的16位值,PIRx寄存器的中断标
志位CCPxIF被置1。如果在CCPRxH和CCPRxL寄存器的值被读出之前又发生另一次捕捉,那么原来的捕
捉值会被新捕捉值覆盖。
9.5.2 比较模式
输出比较模式,适用于从引脚上输出不同宽度的矩形正脉冲、负脉冲、延时驱动信号、可控硅驱动
信号、步进电机驱动信号等。
在比较模式下,CCPRxH:CCPRxL寄存器对成为了Timer1的周期寄存器,一旦Timer1计数寄存器对与
CCPRxH和CCPRxL寄存器对发生匹配, Timer1计数寄存器对在Timer1时钟的下一个上升沿复位, CCPx
模块根据CCPxM[3:0] 控制位的配置进行相应操作:
CCPx 引脚输出翻转电平
CCPx 引脚输出高电平
CCPx 引脚输出低电平
仅产生软件中断
产生特殊事件触发信号
所有比较模式都能产生CCP中断。
使用注意:
1、当选择产生特殊事件触发信号时,如果ADC被使能,则启动一次ADC转换(仅限于CCP1)。在
此模式下CCPx模块不会对CCPx引脚进行控制。
2、 在比较模式下,CCPx引脚必须由相应寄存器设定为输出模式,以便作为比较器的输出端使用。
3、应该注意的是,如果对控制寄存器CCPxCON进行重新赋值,将会迫使CCPx引脚输出一个默认的
低电平,而这并非是正常的比较输出结果。
4、在比较模式下,Timer1必须运行在定时器模式或同步计数器模式下。
- 66 -
HC18P12xL
图13-2
比较模式工作原理图
CCPxCON[3:0]
模式选择
将CCPxIF中断标志位置1
(PIRx)
CCPRxH
4
CCPx引脚
Q
S
R
TRIS
输出使能
输出
逻辑
CCPRxL
比较器
匹配
T1H
T1L
特殊事件触发信号
特殊事件触发信号将:
· 清零T1H和T1L寄存器。
· 不会将PIR1寄存器的中断标志位T1IF置1。
· 将ADON位置1以启动ADC转换(仅限CCP1)
9.5.3 PWM 模式
脉宽调制,PWM(pulse width modulation)输出工作模式,适用于从引脚上输出脉冲宽度随时可调的
PWM 信号。例如,实现直流电动机调速、简易 D/A 转换器、步进电机的变频控制等。
9.5.3.1 PWM不选择扩展
一、 PWM 时钟源为 Timer2
在PWM模式下,当Timer2计数寄存器中的值与PR2寄存器中的值发生匹配时,在下一个计数时钟Timer2计数寄存器
被清零,CCPx引脚被置1(如果PWM占空比为0%,CCPx引脚将不会被置1),PWM占空比值从CCPRxL锁存到CCPRxH
(在Timer2计数寄存器中的值与PR2寄存器中的值发生匹配前,占空比值不会被锁存到CCPRxH中)。
- 67 -
HC18P12xL
PWM模式工作原理图
CCPxCON[5:4]
占空比寄存器
CCPRxL
CCPRxH(2)
CCPx引脚
比较器
T1/T2寄存器
R
S
( 1)
扩展逻辑
TRIS
比较器
扩展Bit
PR2/PR1L
注
1: 8位定时器T2寄存器与2位指令时钟(FCPU)
或预分频器的2 位一起构成10位时基。
2: 在PWM模式下,CCPRxH是只读寄存器。
PWM波形图
周期
CCPx
T2
PR2
00
Q
01
PR2
CCPRxL:CCPxCON[5:4]
- 68 -
00
01
HC18P12xL
以下公式中,当芯片配置为 4T 模式时,n=1;当芯片配置为 2T 模式时,n=1/2
PWM 周期:
PWM 周期 = [(PR2) + 1] 4 n Tsys
(Timer2 预分频值)
注:
Tsys = 1/Fsys
PWM脉冲宽度:
脉冲宽度 = (CCPRxL:CCPxCON[5:4])
n
注:
Tsys (Timer2 预分频值)
Tsys = 1/Fsys
如果脉冲宽度值比周期长,则指定的PWM引脚将保持不变。
PWM占空比:
占空比 =
(CCPRxL:CCPxCON)
4(PR2 + 1)
当时钟模式选择配置字选择为2T时,PWM占空比由CCPRxL寄存器和CCPxCON寄存器的DCxB[1]位决定。
PWM分辨率:
分辨率 =
Log[ 4 (PR2 + 1)]
Log(2)
位
分辨率是PR2寄存器值的函数,当PR2为255时PWM最大分辨率为10位(时钟模式选择配置字选择为2T时,PWM最
大分辨率为9位)。
注:关于 PWM 模块的使用,需注意
1.
当 PWM:T2CON[1:0] = 0 时,PWM 输出波形恒为低电平,占空比为 0%;当 PWM:T2CON[1:0] >
4(PR2+1),PWM 输出波形恒为高电平,占空比为 100%
2.
当芯片配置为 2T 模式且 Timer2 的预分频比为 1:1 时,因需保持 PWM0(T2CON 的 BIT0 位)= 0,所以
以上公式计算出来的分辨率需减 1
PWM使用:
1. 设置相关TRISx位为1,禁止CCPx引脚输出
2. 设置PWM周期,输入PR2寄存器值
3. 设置CCPxCON寄存器,将CCP模块配置为PWM模式
4. 设置PWM占空比,输入CCPRxL寄存器和CCPxCON[5:4]寄存器值
5. 配置和启动Timer2
• 将PIR1寄存器的T2IF中断标志位清零
• 设置T2CON寄存器的T2CKPS位,选择Timer2预分频
- 69 -
HC18P12xL
• 将T2CON寄存器的T2ON置1,使能Timer2
6. 设置PWM输出
• 等待Timer2溢出,PIR1寄存器的T2IF位置1
• 将TRISB2或TRISB3位清零,让CCPx引脚输出
7.如何关闭PWM输出
• 将TRISB2或TRISB3(TRISA6或TRISA7)位置1,设引脚输入
• 设置CCPxCON寄存器的CCPxCON[3:0]设为0000,关PWM功能,CCPx用作I/O口
• 根据需要,设PB2或PB3(PA6或PA7)输出为高电平或者低电平
例:配置PWM输出38K驱动方波,采用4M/4T模式。
ORG
0000H
;复位向量
GOTO
MAIN
ORG
0004H
;中断
……
RETFIE
MAIN:
BCF
STATUS,RP0
;BANK0
BCF
PCON,WDTENS
;DISABLE WDT
CLRF
OPTION
;使用高频时钟
BSF
TRISB,2
;CCPx口设为输入
MOVLW
D'25'
MOVWF
PR2
;设置PR2为26US
MOVLW
MOVWF
MOVLW
MOVWF
H'0D'
CCPR1L
B'00001100'
CCP1CON
BCF
CLRF
BSF
BSF
PIR1,T2IF
T2CON
T2CON,T2ON
PIE1,T2IE
BTFSS
GOTO
BCF
BCF
BCF
PIR1,T2IF
$-1
PIR1,T2IF
PIE1,T2IE
TRISB,2
- 70 -
;占空比高8位
;选PWM模块,填写占空比低两位
;脉冲宽度13US
;分频比1:1
;开T2
;等待T2溢出
;清除中断标志
;打开PWM输出,配置完成,PB2将持续输出38K
HC18P12xL
二、 PWM2时钟源为Timer1
05Fh
Bit 7
Bit 6
Bit 5
PR1L
Timer1周期寄存器低字节
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR值
0
0
0
0
0
0
0
0
060h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PR1CO
N
PWM1T
1
PWM1T
0
PWM2T
1
PWM2T
0
T1CKPS
3
T1CKPS
2
PWMPR
1
PR1E
N
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR值
0
0
0
0
0
0
0
0
Bit0
PR1EN:Timer1可设周期使能位
1= Timer1为可设周期的8位Timer
0= Timer1为16位Timer
Bit1
PWMPR1:Timer1提供PWM时钟源使能位
1=CCP2的PWM的时钟源由8位可设周期的Timer1提供(当PR1EN有效时,该位可用)
0=CCP2的PWM的时钟源由Timer2提供
Bit[3-2] T1CKPS[3-2]:8位可设周期Timer1的分频比控制位的高两位
T1CKPS[3:0]
Timer1 预分频比
0000
1:1
0001
1:2
0010
1:4
0011
1:8
0100
1:16
0101
1:32
0110
1:64
0111
1:128
1xxx
1:256
使用注意:
将寄存器PR1CON[bit1~bit0]置1,使PWM2的时钟源选择位可设周期的8位Timer1,其他使用操作
可参考由Timer2提供时钟源的PWM2的使用。
9.5.3.2 PWM选择扩展
当PWM选择扩展周期时,4 个调制周期为一个输出周期,此时PWM最高可扩展到12位。也就是说
当选择扩展PWM模式时,PWM将为4个波形一个周期,此时不论你在哪一个波形输出时改变PWM的数
据存储器都将在下一个周期才生效。
- 71 -
HC18P12xL
扩展周期控制寄存器PR1CON
060h
PR1CO
N
R/W
POR值
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM1T
1
PWM1T
0
PWM2T
1
PWM2T
0
T1CKPS
3
T1CKPS
2
PWMPR
1
PR1E
N
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
Bit[5-4] PWM2T[1-0]:PWM2的扩展周期选择位
00: 无扩展周期
01: 扩展周期为1
10: 扩展周期为1、2
11: 扩展周期为1、2、3
Bit[7-6] PWM1T[1-0]:PWM1的扩展周期选择位
00: 无扩展周期
01: 扩展周期为1
10: 扩展周期为1、2
11: 扩展周期为1、2、3
PWM扩展示意如下:
- 72 -
HC18P12xL
10 PWM模块
10.1 概述
1 组带死区互补 PWM 或 1 路独立 PWM 输出
提供 PWM 周期溢出中断,但中断共用同一向量入口
输出极性可选择
提供出错侦测功能可紧急关闭 PWM 输出
PWM 工作时钟源可设定时钟分频比
PWM 可做定时器/计数器使用
HC18P12xL 集成了 1 个 12 位 PWM 模块。支持带死区控制 PWM 输出、提供 PWM 周期溢出中
断、输出极性可选择、出错侦测功能可紧急关闭 PWM 输出。通过控制相应的寄存器,PWM 模块可
以产生周期和占空比分别可调整的脉宽调制波形。
此外,
PWM 模块还提供了有固定相位关系的 PWM
输出。
如果 EFLT 置位,PWM 输出能有 FLT 引脚的输出信号变化自动关闭。
PWM 定时器为 PWM0 提供中断源,在每个 PWM 周期都会产生中断。有不同的控制位和标志
位。这样用户可以实现 PWM 周期中更改下一次循环的周期或占空比。
10.2 PWM 相关寄存器
25E
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWMEN
-
EFLT
-
-
EPWM01
-
-
EPWM0
R/W
-
R/W
-
-
R/W
-
-
R/W
POR的值
-
0
-
-
0
-
-
0
bit 6 EFLT:FLT引脚配置位
1 = PWM故障检测输入引脚
0 =普通I/O口或其他功能
bit 3 EPWM01:PWM01输出控制位
1 = PWM01输出允许
0 = PWM01 输出禁止,用作 I/O 功能
bit 0 EPWM0:PWM0输出控制位
1 = PWM0输出允许
0 = PWM0 输出禁止,用作 I/O 功能
当 PWMEN 清 0 后,PWM 输出立即关闭。
FLT 端口主要用于检测异常信号,快速关闭 PWM 输出,FLT 探测到故障后,由硬件执行使 PWM 输
出关闭,所以当故障发生后,它可以快速响应,使得 PWM 输出无效以保护连接 PWM 的大功率器件。
当使能 FLT 引脚故障检测功能后,端口禁止任何上下拉电阻功能。
如果 EFLT 位清零,则表示 FLT 端口对 PWM 定时器输出控制无效。
25Fh
Bit 7
Bit 6
Bit 5
- 73 -
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
HC18P12xL
FLTM
-
-
-
-
-
-
FLT0M1
R/W
-
-
-
-
-
-
R/W
R/W
POR的值
-
-
-
-
-
-
0
0
FLT0M1
输出故障时,PWM 口输出状态:
FLT0M[1:0]:PWM0 口 FLT 故障时后,端口输出状态
00 = PWM0 输出高电平;
01 = PWM00 输出高电平,PWM01 输出低电平;
10 = PWM00 输出低电平,PWM01 输出高电平;
11 = PWM0 输出低电平;
10.2.1 PWM0 控制寄存器
HC18P12xL 包含一个 12 位 PWM 模块。
PWM 模块可以产生周期和占空比分别可调的脉宽调制波形。
PWMC 寄存器用于控制 PWM 模块的时钟,
PWMPH/L 寄存器用于控制 PWM 输出波形的周期。
PWMDH/L
寄存器用于控制 PWM 模块输出波形的占空比。
在 PWM 输出允许器件可以修改这三个寄存器,但在下一个 PWM 周期修改才会起作用。
25Dh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0C
-
-
FLTS
FLTC
PWM0S1
PWM0S0
CK01
CK00
R/W
-
-
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
-
-
0
0
0
0
0
0
bit 5
FLTS:FLT状态位
1 =PWM输出关闭,硬件置1
0 = PWM 正常状态,软件清零
bit 4
FLTC:FLT引脚配置位
1 = FLT为高电平时,PWM输出关闭
0 = FLT为低电平时,PWM输出关闭
bit [3:2]
PWM0S[1:0]:PWM0和PWM01占空比输出模式选择位
11 = PWM0和PWM01均为低有效
10 = PWM0为低有效,PWM01为高有效
01 = PWM0为高有效,PWM01为低有效
00 = PWM0和PWM01均为高有效
Bit [1:0]
CK0[1:0]:PWM1输出控制位
11 = Fosc/16
10 = Fosc/8
01 = Fosc/4
00 = Fosc/2
注:Fosc = 32MHz
注意:
1、 PWM0C寄存器中的FLTS和FLTC位控制PWM0定时器,而寄存器中的PWM0S,CK0[1:0]只能影响
12位PWM定时器。
2、 PWM输出关闭时,PWM0和PWM01输出固定电平:
PWMxS[1:0] =00,PWMx和PWMx1均输出固定低电平;
PWMxS[1:0] =01,PWMx输出固定低电平,PWMx1输出固定高电平;
- 74 -
HC18P12xL
PWMxS[1:0] =10,PWMx输出固定高电平,PWMx1输出固定低电平;
PWMxS[1:0] =11,PWMx和PWMx1均输出固定高电平;
其中x=0
3、一旦检测到FLT引脚输入有效电平,PWM输出会立即关闭,但PWM内部计数器仍在继续运行。
这样方便在FLT引脚错误去除后继续PWM输出。
4、在FLT输入信号有效期间,FLTS位无法清除。只有当FLT输入信号消失后,才能软件清除FLTS状
态位,此时PWM恢复正常输出。
10.2.2 PWM0 周期寄存器
12 位 PWM 周期控制寄存器的高 4 位
25Ch
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0PH
-
-
-
-
PP0.11
PP0.10
PP0.9
PP0.8
R/W
-
-
-
-
R/W
R/W
R/W
R/W
POR的值
-
-
-
-
0
0
0
0
12 位 PWM 周期控制寄存器的低 8 位
25Bh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0PL
PP0.7
PP0.6
PP0.5
PP0.4
PP0.3
PP0.2
PP0.1
PP0.0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
PWM0输出周期=[ PWM0PH:PWM0PL]
PWM时钟源
当[PWM0PH:PWM0PL]=0x00时:
如果PWM0S[1:0] =00,不管PWM占空比为多少,PWM0输出低电平,PWM01输出低电平。
如果PWM0S[1:0] =01,不管PWM占空比为多少,PWM0输出低电平,PWM01输出高电平。
如果PWM0S[1:0] =10,不管PWM占空比为多少,PWM0输出高电平,PWM01输出低电平。
如果PWM0S[1:0] =11,不管PWM占空比为多少,PWM0输出高电平,PWM01输出高电平。
- 75 -
HC18P12xL
10.2.3 PWM0 占空比寄存器
12 位 PWM 脉宽控制寄存器的高 4 位
25Ah
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0DH
-
-
-
-
PD0.11
PD0.10
PD0.9
PD0.8
R/W
-
-
-
-
R/W
R/W
R/W
R/W
POR的值
-
-
-
-
0
0
0
0
12 位 PWM 脉宽控制寄存器的低 8 位
259h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0DL
PD0.7
PD0.6
PD0.5
PD0.4
PD0.3
PD0.2
PD0.1
PD0.0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
PWM输出占空比= [PWM0DH:PWM0DL] X PWM时钟源
当[PWM0PH:PWM0PL]≤[PWM0DLH:PWM0DL],
如果PWM0S[1:0] =00,PWM0输出高电平,PWM01输出低电平
如果PWM0S[1:0] =01,PWM0输出低电平,PWM01输出低电平
如果PWM0S[1:0] =10,PWM0输出高电平,PWM01输出高电平
如果PWM0S[1:0] =11,PWM0输出低电平,PWM01输出高电平
使用注意事项:
1、 选择PWM模块时钟源。
2、 设置PWM周期/占空比,先设置低位,再设置高位。注意,即使高位数值不变,也要重写一
次,否则,低位的修改无效。
3、 通过设置PWM控制寄存器(PWM0C)的PWM0Sx位选择PWM输出模式(高电平/低电平有
效)
。
4、 通过设置PWM控制寄存器(PWMEN)的EPWM0或EPWM01来允许PWM上桥或下桥输出。
5、 如果PWM周期或者占空比需要改变,操作流程如同步骤2和步骤3说明。修改后的重载计数
器的值在下一个周期开始有效。
6、 注意不要对PWM关键寄存器进行误操作。
10.3 死区时间
一般的,当没有插入死区时间时,PWM01 输出波形与 PWM0 输出波形成固定相位关系。当 PWM
控制寄存器中 EPWM01 位置 1 时,PWM01 的输出波形硬件自动产生。
注意:
1、 当 PWM0 被禁止,如果 PWM01 被允许,则 PWM01 仍然会有信号输出。
2、 如果 EFLT 置位,当 FLT 端口有效时,PWM01 和 PWM0 都输出固定电平:
如果PWM0S[1:0] =00,PWM0输出高电平,PWM01输出低电平
如果PWM0S[1:0] =01,PWM0输出低电平,PWM01输出低电平
如果PWM0S[1:0] =10,PWM0输出高电平,PWM01输出高电平
如果PWM0S[1:0] =11,PWM0输出低电平,PWM01输出高电平
- 76 -
HC18P12xL
HC18P12xL PWM 提供死区时间控制功能。通过写 PWM01 死区时间控制寄存器,
在 PWM0 和 PWM01
之间产生死区时间。PWM0 和 PWM01 的周期相同。
注意:
1、 修改死区时间前,应禁止 PWM 输出。
2、 在 PWM0 和 PWM01 为互补波形输出时,为了产生死区时间,请确保(PWM0 占空比寄
存器值 x 分频系数(2,4,8,16)>PWM01 的死区时间控制。否则,PWM01 当 PWM0S[1:0]=10
时输出高电平,PWM0S[1:0]=01 时输出低电平。
3、 PWMDT 寄存器用于控制死区时间,它的时基为振荡器时钟,而周期和占空比的时基由
T0CK0[1:0]控制,最小为 2 个振荡器时钟。
4、
PWM0 死区时间控制寄存器
258h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PWM0DT
DT07
DT06
DT05
DT04
DT03
DT02
DT01
DT00
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
PWM0(n=0,1,2)的死区时间为 PWM0DT x Tosc
注:Tosc = 1/Fosc = 1/32MHz
- 77 -
HC18P12xL
11 模数转换 (ADC)
11.1 ADC 概述
HC18P12xL具有一个12位转换分辨率的模数转换器,共有15个外部模拟输入通道,1个内部电池检测
通道。
ADC的等效电路:
ADREF-0
VREF+
VDD
4.0V
ADREF-1
AN0
0000
.
.
.
3.0V
2.0V
VHS[1:0]
.
AN4
.
内部1/4VDD
AN6
.
.
.
ADC
ADON
ADEN
.
12
ADRESH
ADRESL
1110
.
1111
AN115
CHS[3:0]
11.2 A/D 寄存器
08Ch
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ANSELL
ANSEL7
ANSEL6
-
ANSEL4
ANSEL3
ANSEL2
ANSEL1
ANSEL0
R/W
R/W
R/W
-
R/W
R/W
R/W
R/W
R/W
POR值
1
1
-
1
1
1
1
1
08Dh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ANSELH
ANSEL15
ANSEL14
ANSEL13
ANSEL12
ANSEL11
ANSEL10
ANSEL9
ANSEL8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR值
1
1
1
1
1
1
1
1
ANSEL[15:0]:A/D引脚数模控制位
1:模拟模式,作为模拟信号口,仅可作为AD通道的模拟输入。
0:数字模式,作为数字输入或输出口。
- 78 -
HC18P12xL
注:1、该寄存器上电初始值为 B’1111 1111’,即作为模拟输入。无论是否应用到 AD,均需要在上电后对 IO 操作
之前按需配置,否则 IO 口可能无法受控于对应的端口寄存器,状态将不确定。
2、ANSEL[2:0]对应 AN2~AN0(PA2~PA0)
,ANSEL4 对应 AN4(PA4)
,ANSEL[7:6]对应 AN7、AN6(PA7、PA6)
;
ANSEL[13:9]对应 AN13~AN11(PB4~PB2)
,ANSEL[15:14]对应 AN15、AN14(PB7、PB6)
。
11.3 A/D 控制寄存器
094h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ADCON0
VHS1
VHS0
CHS3
CHS2
CHS1
CHS0
ADON
ADEN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
095h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ADCON1
ADFM
ADCS2
ADCS1
ADCS0
-
-
-
ADREF
R/W
R/W
W
W
W
-
-
-
R/W
POR的值
0
0
0
0
-
-
-
0
096h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ADCLK
-
-
-
-
-
ADCLK2
ADCLK1
ADCLK0
R/W
-
-
-
-
-
R/W
R/W
R/W
POR的值
-
-
-
-
-
0
0
0
ADC模拟通道选择
CHS [3:0]
模拟通道
0000
AN0
0001
AN1
0010
AN2
0011
AN3
0100
AN4
0101
内部 1/4VDD(AN5)
0110
AN6
0111
AN7
1000
AN8
1001
AN9
1010
AN10
1011
AN11
1100
AN12
1101
AN13
1110
AN14
1111
AN15
ADC参考电压选择
- 79 -
HC18P12xL
ADREF
VHS[1:0]
参考电压
0
00
内部2.0V
0
01
内部3.0V
0
10
内部4.0V
0
11
内部VDD
1
xx
外部参考电压
ADC数据存放格式选择
ADFM
数据格式
0
ADRESH[7:0]:ADRESL[7:4]
1
ADRESH[1:0]:ADRESL[7:0]
注意:
1、AN5为内部1/4VDD输入通道,外部没有输入引脚。可作为电池系统的电池检测器;
2、ADC 所采集数据,当选择存格式为左对齐时,ADC 精度只能为 12 位,高 8 位存放在 ADRESH 寄存器中,
低 4 位存放在 ADRESL 寄存器高 4 位上。当选择存放格式为右对齐时,ADC 精度只能为 10 位,高 2 位存放在
ADRESH 的低 2 位上,低 8 位存放在 ADRESL 上。
11.4 AD 转换时间
ADC转换一位数据所需的时间定义为TAD,转换一次完整的12位数据需要14个TAD。为确保ADC
正确转换,必须满足适当的TAD时间。
模数转换TAD 周期
TAD 0 TAD1
TAD 2 TAD3
TAD4
TAD5 TAD 6
TAD7 TAD 8 TAD 9 TAD 10 TAD11TAD12 TAD13
ADC转换结果装入ADRESH/L寄存器
将ADON位置1
保持电容与模拟输入断开
转换开始
ADON位被清0
ADIF位被置1
保持电容与模拟输入相连接
保持电容与模拟输入相连接
ADC转换时间(TAD)与工作频率关系表
ADC 转换时间(TAD)
系统频率(Fsys):4MHz
ADC 时钟源
ADCS[2:0]
典型值
Fsys
000
4us
Fsys /2
001
8us
Fsys /4
010
16us
Fsys /8
011
32us
Fsys /16
100
64us
Fsys /32
101
128us
Fsys /64
110
256us
FRC
111
视 RC 的值而定
- 80 -
HC18P12xL
ADCLK软件配置表
ADCLK[2:0]:AD时钟选择位(在确定系统频率后,选择不同的AD时钟分频对应的频率。)
000:AD转换频率在4Mhz及以上
001:AD转换频率为1M
010:AD转换频率为2M
011/1XX:AD转换频率为1M以下
系统频率/AD时钟源选择对应的ADC时钟选择为对应关系如下表所示:
Fsys(系统频
率)
ADCS[2:0]
AD 分频
ADCLK
AD 时钟
011
000
100
010
101
001
11x
011/1 xx
010
000
011
010
100
001
101/11x
011/1 xx
010
010
011
001
1xx
011/1 xx
001
010
010
001
011/1xx
011/1xx
000
010
001
001
01x/1xx
011/1 xx
000
001
001/0xx/1xx
011/1 xx
xxx
011/1 xx
32M
16M
8M
4M
2M
1M
500K
软件配置ADC转换时钟使用注意说明:
1、
Fsys为系统时钟,Fosc为RC时钟,Fcpu为指令时钟。如用户在OPTION中选择4M/2T,对应Fosc=8M,Fsys=4M,
Fcpu=2M。
2、
为保证ADC转换精度,在不同ADC转换时钟下需配置不同的ADC转换时钟个数:
- 81 -
HC18P12xL
ADC转换时钟
说明
ADCLK( ADCLK [2:0])
当ADC转换时钟频率为2Mhz时,需将
2 Mhz
010
1 Mhz
001
ADCLK[2:0]配置成010
当ADC转换时钟频率为1Mhz时,需将
ADCLK[2:0]配置成001
当ADC转换时钟频率小于1 Mhz时,需将
<1 Mhz
ADCLK[2:0]配置成011/1xx(ADCLK[2:0]上电默认
011/1xx
为111)
3、
为了加快ADC转换速度,建议选用较快的时钟源(ADC转换时钟不能超过4MHz)。
11.5 ADC 使用
1. 配置端口:
设置 TRISA 寄存器禁止引脚输出
设置 ANSEL 寄存器配置引脚为模拟输入
2. 配置ADC模块:
选择 ADC 转换时钟,设置 ADCS[2:0]、ADCLK[2:0]
选择 ADC 参考电压,设置 ADREF、ADCON0
选择 ADC 输入通道,设置 CHS[3:0]
使能 ADC 模块,设置 ADEN
3. 配置ADC中断(可选):
清零 ADC 中断标志
使能 ADC 中断
使能外设中断
使能全局中断
4. 等待所需采集时间
5. 设置ADON为1 启动一次ADC转换
6. 通过以下方式之一等待ADC转换完成:
查询 ADON 位
等待 ADC 中断(已使能中断)
7. 读取ADC结果
8. 清零ADC中断标志(如果已使能中断则需要)
例:配置AD,结果保留在Bank0的NTCADHIGH、NTCADLOW中。
…
;其他程序
AD_TEST:
BCF
STATUS,RP0
;Bank0
BSF
TRISA,0
;设置AD口为输入
MOVLW
B'01010000'
;INNER REF Fsys/32 ADRESH[7:0]
ADRESL[7,6]
MOVWF
ADCON1
- 82 -
HC18P12xL
MOVLW
MOVWF
BCF
MOVLW
MOVWF
CLRF
BCF
BCF
BCF
BCF
BCF
NOP
NOP
BSF
CALL
BSF
AD_TEST_WAIT:
BTFSC
GOTO
MOVF
MOVWF
MOVF
MOVWF
B'00000011'
ADCLK
STATUS,RP0
B'00000001'
ANSELL
ANSELH
ADCON0,CHS2
ADCON0,CHS1
ADCON0,CHS0
ADCON0,VHS1
ADCON0,VHS0
;配置AD通道
;Bank0
;PA0作为模拟输入
;参考电压为内部VDD
;延时
ADCON0,ADEN
DELAY_1
ADCON0,ADON
;使能ADC
;延时,用户可自行完成
;开始一次转换
ADCON0,ADON
AD_TEST_WAIT
;等待转换完成
ADRESH,W
NTCADHIGH
ADRESL,W
NTCADLOW
;转换完成,保存结果
;LOAD THE AD HIGH 8 BITS TO W
;客户应用时注意BANK
;LOAD THE AD LOW 8 BITS TO W
注意:
1、使能ADEN后(不是使能ADON),系统必须延迟一定的时间(视外部输入信号而定)等待ADC电路稳定;
2、睡眠或绿色模式下,禁止ADC并将AD参考电压设为非内部VDD以降低功耗;
3、为保证ADC转换精度,芯片VDD电压应高于所选ADC内部参考电压(4V/3V/2V)0.7V以上。
- 83 -
HC18P12xL
12
软件LCD驱动
HC18P12xL 中内置软件 LCD 驱动,所有端口可通过 COMxEN[7:0]使能或关闭 COM 口功能。
12.1 相关寄存器
LCDCON
2B0h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
LCDCON
LCDEN
RLCD1
RLCD0
FRAM
-
-
-
-
R/W
R/W
R/W
R/W
R/W
-
-
-
-
POR的值
0
0
0
0
-
-
-
-
bit[7]:LCDEN :软件 LCD 模块使能控制位
0 = 禁止
1 = 使能
Bit[6:5]:RLCD[1:0]:软件 LCD 电阻选择位
00 = 600K
01 = 300K
10 = 100K
11 = 50K
Bit4: Frame0 或 Frame1 输出使能位
0 = Frame0
1 = Frame1
COM 口使能位
2B1h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
COMAEN
COMAEN7
COMAEN6
COMAEN5
COMAEN4
COMAEN3
COMAEN2
COMAEN1
COMAEN0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
2B2h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
COMBEN
COMBEN7
COMBEN6
-
COMBEN4
COMBEN3
COMBEN2
COMBEN1
COMBEN0
R/W
R/W
R/W
-
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
-
0
0
0
0
0
- 84 -
HC18P12xL
2B3h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
COMCEN
-
-
-
-
-
-
COMCEN1
COMCEN0
R/W
-
-
-
-
-
-
R/W
R/W
POR的值
-
-
-
-
-
-
0
0
2B6h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
COMFEN
COMAEN7
COMAEN6
COMAEN5
COMAEN4
COMAEN3
COMAEN2
COMAEN1
COMAEN0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
POR的值
0
0
0
0
0
0
0
0
Bit[7:0] COMxEN[7:0]COM 功能使能位
0 = 禁止对应 COMxENy 的 COM 功能,当 IO 使用
1 = 使能对应 COMxENy 的 COM 功能
说明:请根据实际需要选择适当个数 COM 功能。
12.2 软件 LCD 操作说明
1 设置LCD总使能,LCDEN=1;打开电阻分压电路;
2 设置驱动能力,选择不同的电阻分压ISEL[1:0];
3 对IO口使能COM,COMxEN=1,这是具体设置某个IO的状态,使能LCD的模拟通道;
4 SEG口设置为输出模式;
5 设定frame0=0,用于确定点亮和非点亮电平(如下图中后半周期)
6 设置定时开始,设置COM[3:0]=0001,设置SEG[19:0]=XXX,等待定时结束;
7 设置定时开始,设置COM[3:0]=0010,设置SEG[19:0]=XXX,等待定时结束;
8 设置定时开始,设置COM[3:0]=0100,设置SEG[19:0]=XXX,等待定时结束;
9 设置定时开始,设置COM[3:0]=1000,设置SEG[19:0]=XXX,等待定时结束;
10 设定frame0=1,用于确定点亮和非点亮电平(如下图中前半周期)
11 设置定时开始,设置COM[3:0]=0001,设置SEG[19:0]=XXX,等待定时结束;
12 设置定时开始,设置COM[3:0]=0010,设置SEG[19:0]=XXX,等待定时结束;
13 设置定时开始,设置COM[3:0]=0100,设置SEG[19:0]=XXX,等待定时结束;
14 设置定时开始,设置COM[3:0]=1000,设置SEG[19:0]=XXX,等待定时结束;
说明:COM[3:0] = PORTF[3:0]设定的相应数据寄存器为PORTF;SEG[19:0]同理。
- 85 -
HC18P12xL
Frame=1
Frame=0
VLCD
COM0
1/2VLCD
VSS
VLCD
COM1
1/2VLCD
VSS
VLCD
COM2
1/2VLCD
VSS
VLCD
COM3
1/2VLCD
VSS
VLCD
SEG0
1/2VLCD
VSS
VLCD
SEG1
1/2VLCD
VSS
- 86 -
HC18P12xL
16 指令表
Field
指令格式
描述
C
DC
Z
周期
MOVWF
F
F←W
-
-
-
1
MOVF
F, D
D←F(D =0 时为 W, D =1 时为 F)
-
-
√
1
MOVLW
k
W←k
-
-
-
1
ADDWF
F, D
D←W+F(D =0 时为 W, D =1 时为 F)
√
√
√
1
ADDLW
k
W←W+k
√
√
√
1
SUBWF
F, D
D←F-W(D =0 时为 W, D =1 时为 F)
√
√
√
1
SUBLW
k
W←k -W(D =0 时为 W, D =1 时为 F)
√
√
√
1
DAW
-
W 寄存器值进行 BCD 调整
√
√
-
1
INCF
F, D
D←F+1(D =0 时为 W, D =1 时为 F)
-
-
√
1
DECF
F, D
D←F-1(D =0 时为 W, D =1 时为 F)
-
-
√
1
ANDWF
F, D
D←W 与 F(D =0 时为 W, D =1 时为 F)
-
-
√
1
ANDLW
k
W←W 与 k
-
-
√
1
IORWF
F, D
D←W 或 F(D =0 时为 W, D =1 时为 F)
-
-
√
1
IORLW
k
W←W 或 k
-
-
√
1
XORWF
F, D
D←W 异或 F(D =0 时为 W, D =1 时为 F)
-
-
√
1
XORLW
k
W←W 异或 k
-
-
√
1
COMF
F, D
D←F 取反(D =0 时为 W, D =1 时为 F)
-
-
√
1
SWAPF
F, D
D[7:4,3:0]←F[3:0,7:4] (D =0 时为 W, D =1 时为 F)
-
-
-
1
RRF
F, D
D←F 带进位右移(D =0 时为 W, D =1 时为 F)
√
-
-
1
RLF
F, D
D←F 带进位左移(D =0 时为 W, D =1 时为 F)
√
-
-
1
处
CLRW
-
W←0
-
-
√
1
理
CLRF
F
F←0
-
-
√
1
CLRWDT
-
清零看门狗定时器,影响 TO,PD 位
-
-
-
1
BCF
F, d
F[d]←0(0≤d≤7)
-
-
-
1
BSF
F, d
F[d]←1(0≤d≤7)
-
-
-
1
INCFSZ
F, D
D←F+1(D =0 时为 W, D =1 时为 F),如果 D=0 则跳过下一句
-
-
-
1(2)
DECFSZ
F, D
D←F-1(D =0 时为 W, D =1 时为 F),如果 D=0 则跳过下一句
-
-
-
1(2)
分
BTFSC
F, d
如果 F[d]=0(0≤d≤7)则跳过下一句
-
-
-
1(2)
支
BTFSS
F, d
如果 F[d]=1(0≤d≤7)则跳过下一句
-
-
-
1(2)
GOTO
k
无条件跳转
-
-
-
2
CALL
k
调用子程序
-
-
-
2
RETURN
-
从子程序返回
-
-
-
2
RETFIE
-
从中断返回,并置位 GIE
-
-
-
2
RETLW
k
W←k, 带参数返回
-
-
-
2
NOP
-
空操作
-
-
-
1
SLEEP
-
进入待机模式,影响 TO,PD 位
-
-
-
1
移
动
算
术
逻
辑
其
他
- 87 -
HC18P12xL
13 开发工具
13.1 OTP 烧录器(PM18-4.0)
HC-PM18-4.0:支持HC18系列MCU大批量的脱机烧录
注:
详情请参考 HC-PM18 用户手册。如有更新请到网站下载最新资料。
http://www.holychip.cn
13.2 HC-IDE
Holychip 8位单片机的集成开发环境HC-IDE包括编译器。
HC-IDE:HC-IDE V3.0.x.x(支持汇编/C语言)
注:
1、 详情请参考 HC-IDE 用户手册。
2、 IDE 版本请关注芯圣官网:http://www.holychip.cn/
- 88 -
HC18P12xL
14 封装尺寸
14.1 SOP8
14.2 SOP16
- 89 -
HC18P12xL
14.3 SOP20
- 90 -
HC18P12xL
16 修改记录
版本
日期
描述
Ver1.00
2018-04
第一版
Ver1.01
2019-09
1、
修改 PWM 中描述错误,修改 ADC 中寄存器描述
2、
GP 寄存器中断入口程序调整及 RAM 映射修改;
3、
修改 IDE 中相关描述
4、
修改低频内部 RC 频率电压特性
5、
修改 AD 通道,将 AN5 和 AN3 的描述删掉
6、
OSCCON 寄存器添加 T0OSCEN 位的介绍
HOLYCHIP 公司保留对以下所有产品在可靠性、功能和设计方面的改进作进一步说明的权利。
HOLYCHIP 不承担由本手册所涉及的产品或电路的运用和使用所引起的任何责任,HOLYCHIP 的产品
不是专门设计来应用于外科植入、生命维持和任何 HOLYCHIP 产品产生的故障会对个体造成伤害甚至
死亡的领域。如果将 HOLYCHIP 的产品用于上述领域,即使这些是由 HOLYCHIP 在产品设计和制造上
的疏忽引起的,用户应赔偿所有费用、损失、合理的人身伤害或死亡所直接或间接所产生的律师费用,
并且用户保证 HOLYCHIP 及其雇员、子公司、分支机构和销售商与上述事宜无关。
芯圣电子
2019 年 9 月
- 91 -