MDTIC MK7A23P

MK7A23P
8Bit Microcontroller with ADC
(初稿)
概述
MK7A23P 是带 15 位(11bit+4bit)A/D 转换器的 RISC 高性能 8 位微控制器。它内部包含 2K 字节的一次
性可编程只读存储器、128 字节数据存储器、定时器/计数器、中断、LVR(低电压复位)、I/O 口、比较器
和 PWM 输出。
1. 基本特性
●
ROM:2K×16 bits
●
RAM:51×8 bits(特殊寄存器)+ 128×8 bits
●
中断结果:
(a) 外部中断(PA7~PA0)
(一般寄存器)
(b) 内部定时器/结果计数器中断(TM0~TM4,
●
椎栈:8 级
PWM1,PWM2)
●
一个指令周期由两个系统时钟组成
(c) ADC结束转换中断
●
复位模式:
(d) 比较器比较结果激活中断
●
●
(a) 上电复位
●
I/O 口:29 脚位
(b) 低电压复位
●
4 路比较器设置与 I/O 口分享脚位
(c) RESETB/PB2(如果设置成复位脚位)
●
PWM:两个通道带 8bit×8bit 精度
输入一个负脉冲
●
ADC:最多 15-bit 及 12 通道,至少 12-bit 精
(d) 看门狗定时器计数溢出复位
度。它可通过寄存器设置在转换模式或比较模式下
双时钟模式
工作
- 外部 RC 或晶振振荡器
●
- 内部 4MHz RC 振荡器
- A 口(PA7~PA0)脚位变化唤醒
定时器/计数器:5 个累加计数器
唤醒模式:
- WDT 溢出
- TM0:16-bit 定时器(up-counter)
- i_WDT 溢出
- TM1:8-bit,PWM1(period)& 定时器
●
500O:500KHZ 时钟输出(可调节)
- TM2:8-bit,PWM1(duty)& 定时器
●
CLO:系统时钟输出
- TM3:8-bit,PWM2(period)& 定时器
●
工作电压范围:2.2V ~ 5.5V
- TM4:8-bit,PWM2(duty)& 定时器
●
工作温度范围:-40℃~+85℃
- TO:PWM2 时钟/2 输出
●
看门狗定时器:芯片内 WTD 是基于一个内部
RC 振荡器(仅 WDT 使用)
。有 8 个周期可供
选择。使用者可通过使用预分频器来延长
WDT 溢出周期。
1
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
2. 图表
VDD
CPU
CORE
GND
ROM
2K x 16 bit
RESET
RESET
OSC1
PA0~7
PB0~7
PC0~7
PD0~5
RAM
128 Bytes
OSC
STACK
& PC
Clock &
Timer
I/O Port
Watchdog
Timer
A/D Converter
PWM output
OSC2
EXT_CLK
TO
PWM1
2
PWM2
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
3. 脚位定义 & 管脚分配
PD3/ADC11
PD2/ADC10
PD1/ADC9
PD0
PA2/ADC2/INT2/PWM2
PA1/ADC1/INT1
PA0/ADC0/INT0
VDD
VSS
OSC1/PB0
OSC2/PB1
RESETB/PB2
PB3/Vin3+
PB4/Vin3PB5/Vout3
PB6/Vout4
32
31
30
29
28
27
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PDIP 32
25
24
23
22
21
20
19
18
17
PD4
PD5
PA3/ADC3/INT3
PA4/ADC4/INT4
PA5/ADC5/INT5
PA6/ADC6/INT6/PWM1
PA7/ADC7/INT7
PC7/ADC8/CLO
PC6/Vin2+
PC5/Ext_clk/Vin2PC4/Vout2
PC3/Vout1
PC2/450O/Vin1PC1/TO/Vin1+
PC0/Vin4+
PB7/Vin4-
SOP32
3
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
VSS
OSC1/PB0
OSC2/PB1
RESETB/PB2
PC1/TO/Vin1+
PC2/450O/Vin1PC3/Vout1
PC4/Vout2
PC5/Ext_clk/Vin2PC6/Vin2+
20
19
18
17
16
15
14
13
12
11
1
2
3
4
5
6
7
8
9
10
VDD
PA0/ADC0/INT0
PA1/ADC1/INT1
PA2/ADC2/INT2/PWMG2
PA3/ADC3/INT3
PA4/ADC4/INT4
PA5/ADC5/INT5
PA6/ADC6/INT6/PWMG1
PA7/ADC7/INT7
PC7/ADC8/CLO
PDIP 20/SOP 20
PA0/ADC0/INT0
VDD
OSC1/PB0
OSC2/PB1
RESETB/PB2
VSS
PC7/ADC8/CLO
1
2
3
4
5
6
7
14
13
12
11
10
9
8
PA1/ADC1/INT1
PA2/ADC2/INT2/PWM2
PA3/ADC3/INT3
PA4/ADC4/INT4
PA5/ADC5/INT5
PA6/ADC6/INT6/PWM1
PA7/ADC7/INT7
SOP 14
4
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
4. 脚位说明
脚位名称
I/O
脚位类型
1. 双向I/O口(输入模式下会有上拉选项)
PA0/ADC0/INT0 ~
2. 脚位改变时唤醒(选择)
PA1/ADC1/INT1
PA3/ADC3/INT3 ~
说 明
I/O
A
PA5/ADC5/INT5,
3. 外部中断输入(选择)
4. A/D转换输入
PA7/ADC7/INT7
1. 双向I/O口(输入模式下会有上拉选项)
PA2/ADC2/INT2/PWM2
PA6/ADC6/INT6/PWM1
2. 脚位改变时唤醒(选择)
I/O
A
3. 外部中断输入(选择)
4. A/D转换输入
5. PWM1 & PWM2输出
OSC1/PB0
I, I/O
C
OSC2/PB1
O, I/O
C
RESETB/PB2
I
B
PB3/Vin3+
PB4/Vin3-
1. 双向I/O口(输入模式下会有上拉选项)
2. 振荡器输入
1. 双向I/O口(输入模式下会有上拉选项)
2. 振荡器输出
1. 输入口
2. 系统复位脚位
1. PB3~PB4是双向I/O口(输入模式下会有上拉选项)
I/O
A
2. 脚位与比较器3 Vin3+,Vin3-共享
在这个模式下上拉电阻器将会自动禁止
1. PB5是双向I/O口(输入模式下会有上拉选项)
PB5/Vout3
I/O
E
2. 脚位与比较器3 Vout3共享
在这个模式下上拉电阻器将会自动禁止
1. PB6是双向I/O口(输入模式下会有上拉选项)
PB6/Vout4
I/O
E
2. 脚位与比较器4 Vout4共享
在这个模式下上拉电阻器将会自动禁止
1. PB7是双向I/O口(输入模式下会有上拉选项)
PB7/Vin4-
I/O
A
2. 脚位与比较器4 Vout4-共享
在这个模式下上拉电阻器将会自动禁止
1. PC0是双向I/O口(输入模式下会有上拉选项)
PC0/Vin4+
I/O
A
2. 脚位与比较器4 Vout4+共享
在这个模式下上拉电阻器将会自动禁止
5
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
1. PC1~PC2是双向I/O口(输入模式下会有上拉选项)
2. 脚位与比较器1 Vin1+,Vin1-共享
PC1/TO/Vin1+
PC2/500O/Vin1-
3. 如果使用比较器功能,PC1~PC2将不能使用,Vin1+,
I/O
A
Vin1-是模拟输入,在这个模式下上拉电阻器将会自动禁
止
4. TO(PWM2中断/2)与PC1共享
5. 500O(500KHz时钟输出)与PC2共享
1. PC3是双向I/O口(输入模式下会有上拉选项)
PC3/Vout1
I/O
E
2. 脚位与比较器1 Vout1共享
在这个模式下上拉电阻器将会自动禁止
1. PC4是双向I/O口(输入模式下会有上拉选项)
PC4/Vout2
I/O
E
2. 脚位与比较器2 Vout2共享
在这个模式下上拉电阻器将会自动禁止
1. PC5~PC6是双向I/O口(输入模式下会有上拉选项)
PC5/EXT_CLK/Vin2PC6/Vin2+
2. 脚位与比较器2 Vin2+,Vin2-共享
I/O
A
3. 如果使用比较器功能,PC5~PC6将禁止,Vin2+,Vin2是模拟输入,在这个模式下上拉电阻器将会自动禁止
4. EXT_CLK(外部时钟输入)与PC5共享
1. 双向I/O口(输入模式下会有上拉选项)
PC7/ADC8/CLO
I/O
A
2. A/D转换器输入
3. CLO(系统时钟输出)与PC7共享
PD0
I/O
D
PD1/ADC9~PD3/ADC11
I/O
A
1. 双向I/O口(输入模式下会有上拉选项)
1. 双向I/O口(输入模式下会有上拉选项)
2. A/D转换器输入
D
1. 双向I/O口(输入模式下会有上拉选项)
PD4~PD5
I/O
VDD
P
电源输入
VSS
P
接地输入
6
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
脚位电路
VDD
Pull-high
enable
Long channel
VDD
Output disable
(input mode)
in
I/O
Data
Pin circuit Type B
Digital
input
Pin circuit Type D
VDD
Pull-high enable
Analog enable
Long channel
VDD
Analog enable
Output disable
(input mode)
I/O
Data
Digital input
Analog enable
Analog input
Pin circuit Type A
7
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
8
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
5. 存储器映象
MK7A23P 芯片带有两种存储器,分别是程序存储器(ROM)和数据存储器(RAM)
。程序存储器用于存储程
序、数据表及中断向量,它是连续的 2048×16bits,不需要转换到 bank。数据存储器是 179(51+128)×8bits,
它包括特殊功能寄存器和一般的数据存储器。
5.1 程序存储器(ROM)
指令和数据表存储在程序存储器内。程序存储器只能有一个中断向量存在,那意味着所有发生的中断都将跳
到相同的向量。程序会通过中断标记来判断是哪一种中断发生。程序计数器(PC)有 11bit,它能直接寻找
所有 1024×16bits 位置地址。查询数据表可以置于程序存储器的任何地方。
RESET 向量位于 000H,中断向量位于 004H。映象图如下所示:
RESET VECTOR
000H
INTERRUPT VECTOR
004H
PC (11bit)
STACK Level 1
STACK Level 2
STACK Level 3
STACK Level 4
STACK Level 5
STACK Level 6
STACK Level 7
STACK Level 8
7FFH
9
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
5.2 数据存储器(RAM)
全部的数据存储器集都是 179×8bits,它们包含两种寄存器组。一种是 128×8bits 的一般存储器,另一种是
51×8bits 的特殊寄存器。特殊寄存器的每一字节都用来存储控制数据和操作数据。
数据存储器映象如下所示:
00H
Special Purpose
Register
3FH
40H
General Purpose
RAM
BFH
5.2.1
特殊寄存器
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
CONFIG_L
RST_DEF
LV1
LV0
WDTE
CPRT
INRC
FOSC1
FOSC0
CONFIG_H
ADJ6
ADJ5
ADJ4
ADJ3
ADJ2
ADJ1
ADJ0
RTCEN
INDF
$00
A7
A6
A5
A4
A3
A2
A1
A0
PCL
$01
A7
A6
A5
A4
A3
A2
A1
A0
PCH
$02
--
--
--
--
--
A10
A9
A8
STATUS
$03
--
--
--
TO
PD
Z
DC
C
FSR
$04
D7
D6
D5
D4
D3
D2
D1
D0
I/O PAD & Control
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PA_DIR
$05
IOA7
IOA6
IOA5
IOA4
IOA3
CA2
IOA1
IOA0
PA_DAT
$06
DA7
DA6
DA5
DA4
DA3
DA2
DA1
DA0
PB_DIR
$07
IOB7
IOB6
IOB5
IOB4
IOB3
--
IOB1
IOB0
PB_DAT
$08
DB7
DB6
DB5
DB4
DB3
--
DB1
DB0
PC_DIR
$09
IOC7
IOC6
IOC5
IOC4
IOC3
IOC2
IOC1
IOC0
10
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
PC_DAT
$0A
DC7
DC6
DC5
DC4
DC3
DC2
DC1
DC0
PD_DIR
$0B
--
--
IOD5
IOD4
IOD3
IOD2
IOD1
IOD0
PD_DAT
$0C
--
--
DD5
DD4
DD3
DD2
DD1
DD0
Bit 3
Bit 2
Bit 1
Bit 0
PRE2
PRE1
PRE0
Timer 0: 16-bit Timer
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
SUR0 EDGE
TM0_CTL
$10
TM0_EN
WR_CNT
SUR1
TM0L_LA
$11
D7
D6
D5
D4
D3
D2
D1
D0
TM0H_LA
$12
D7
D6
D5
D4
D3
D2
D1
D0
TM0L_CNT
$13
D7
D6
D5
D4
D3
D2
D1
D0
TM0H_CNT
$14
D7
D6
D5
D4
D3
D2
D1
D0
Timer 1: 8-bit, PWM (period) & Timer
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM1_CTL1
$15
TM1_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
TM1_CTL2
$16
MOD
PWM1_OS
**
**
POS3
POS2
POS1
POS0
TM1_LA
$17
D7
D6
D5
D4
D3
D2
D1
D0
TM1_CNT
$18
D7
D6
D5
D4
D3
D2
D1
D0
Timer 2: 8-bit, PWM (duty) & Timer
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM2_CTL
$19
TM2_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
TM2_LA
$1A
D7
D6
D5
D4
D3
D2
D1
D0
TM2_CNT
$1B
D7
D6
D5
D4
D3
D2
D1
D0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Timer 3: 8 bit, PWM (period) & Timer
Name
Addr
TM3_CTL1
$1C
TM3_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
TM3_CTL2
$1D
MOD
PWM2_OS
**
**
POS3
POS2
POS1
POS0
TM3_LA
$1E
D7
D6
D5
D4
D3
D2
D1
D0
TM3_CNT
$1F
D7
D6
D5
D4
D3
D2
D1
D0
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Timer 4: 8 bit, PWM (duty) & Timer
Name
Addr
Bit 7
TM4_CTL
$20
TM4_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
TM4_LA
$21
D7
D6
D5
D4
D3
D2
D1
D0
TM4_CNT
$22
D7
D6
D5
D4
D3
D2
D1
D0
IRQ
11
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
Name
Addr Bit 7
Bit 6
IRQM
$25
INTM
IRQF
$26
IRQM_1
IRQF_1
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ADCM PAM TM4M
TM3M/PWM2M
TM2M TM1M/PWM1M TM0M
--
ADCF
TM3F/PWM2F
TM2F
TM1F/PWM1F
TM0F
$27
--
--
--
CMP4M
CMP3M
CMP2M
CMP1M
$28
--
--
--
CMP4F
CMP3F
CMP2F
CMP1F
Bit 1
Bit 0
CHSEL1
CHSEL0
PAF TM4F
---
ADC control
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
AD_CTL1
$29
EN
--
MODE
--
CHSEL3 CHSEL2
AD_CTL2
$2A
RSUT
--
--
--
--
--
CKSEL1
CKSEL0
AD_CTL3
$2B
--
--
--
--
PISEL3
PISEL2
PISEL1
PISEL0
AD_DATL
$2C
D7
D6
D5
D4
D3
D2
D1
D0
AD_DATH
$2D
--
D14
D13
D12
D11
D10
D9
D8
Other
Name
Addr
Bit 7
Bit 6
Bit 5
Bit 4
--
--
--
CMP_CTL
$2F
--
FREQ_CTL
$30
S500O
PA_PLU
$31
UA7
UA6
PB_PLU
$32
UB7
PC_PLU
$33
PD_PLU
500_PR1 500_PR0
Bit 3
Bit 2
Bit 1
Bit 0
CMP4_E CMP3_E CMP2_E CMP1_E
--
--
500O_E CLO_E
TO_E
UA5
UA4
UA3
UA2
UA1
UA0
UB6
UB5
UB4
UB3
--
UB1
UB0
UC7
UC6
UC5
UC4
UC3
UC2
UC1
UC0
$34
--
--
UD5
UD4
UD3
UD2
UD1
UD0
IO_CTL
$35
--
--
--
--
--
--
CK_FL
--
PA_INTE
$3A
EN7
EN6
EN5
EN4
EN3
EN2
EN1
EN0
WDT_CTL
$3D
WDTEN
i_WDT
i_STAB
--
--
PRE2
PRE1
PRE0
TAB_BNK
$3E
--
--
--
--
--
BNK2
BNK1
BNK0
SYS_CTL
$3F
CLKS
--
--
--
--
--
STPRC
STPOSC
< 注 > “—”:表示未使用
“**”
:表示 0(初始值=0)
5.2.2
结构寄存器
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
CONFIG_L
RST_DEF
LV1
LV0
WDTE
CPRT
INRC
FOSC1
FOSC0
-
Bit 15
Bit 14
Bit 13
Bit 12
Bit 11
Bit 10
Bit 9
Bit 8
CONFIG_H
ADJ6
ADJ5
ADJ4
ADJ3
ADJ2
ADJ1
ADJ0
EXT_CLK
●
Bit15~9(ADJ6~0)
:用于校准内部RC振荡器
●
Bit8(EXT_CLK)
:EXT_CLK 输入
12
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
1:EXT_CLK(PC5)脚位是定时器源输入 & PC5输入
0:EXT_CLK(PC5)脚位是普通I/O脚位
●
Bit7(RST_DEF)
:RESETB脚位定义
0:RESETB是普通输入脚位
1:RESETB是系统复位脚位
●
Bit6~5(LV1~0)
:设置低电压复位(LVR)的复位电压级别
Bit6
Bit5
LV1
LV0
0
0
4V
0
1
未执行
1
0
2.3V
1
1
未使用
检测电压
< 注 > 掉电电压会受到过程及温度的影响,因此列表中的电压会存在一些误差。
●
Bit4(WDTE)
:看门狗定时器使能/禁止
0:WDT 禁止
1:WDT 使能
●
Bit3(CPRT)
:ROM 密码保护位
0:开
1:关
●
Bit2~0(INRC,FOSC1~0)
:OSC类型及系统时钟选择
Bit2
Bit1
Bit0
INRC
FOSC1
FOSC0
0
0
0
LS (低速)
系统时钟 =32~200KHz
0
0
1
NS (常速)
系统时钟 =200K~10MHz
0
1
0
HS (高速)
系统时钟 =10~20MHz
0
1
1
1
0
0
LS & 内部 RC
1
0
1
NS & 内部 RC
1
1
0
HS & 内部 RC
1
1
1
内部 RC
OSC 类型
共振频率
双重 RC 时钟:
系统时钟 =32K ~ 10MHz
外部 RC & 内部 RC
1. 双重时钟模式 LS & 4MHz
2. 初始系统时钟 =4MHz
1. 双重时钟模式 NS & 4MHz
2. 初始系统时钟 =4MHz
1. 双重时钟模式 HS & 4MHz
2. 初始系统时钟 =4MHz
1. 系统时钟 =4MHz
2. OSC1 & OSC2 作为I/O口工作
13
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6. 功能描述
此芯片提供许多功能,包括定时器,WDT,PWM,ADC,中断,数据表位置,复位,程序计数器及 STATUS
寄存器。我们将会在下面详细描述。
6.1
I/O口
该芯片有 4 个 I/O 口用于数据输入及输出,使用者可用每个 I/O 口的不同功能来编程。A 口可通过选择寄存器
实现外部中断,ADC 模拟输入或 PWM 输出。B 口具有系统复位或外部 RC 振荡器输入功能。C 口带有 ADC
模拟输入,500KHZ 输出,系统时钟输出或 PWM 输出功能。D 口可作为 ADC 模拟输入。
6.1.1 Port A
A 口有 3 个寄存器可设置 8 个 I/O 口,分别是 PA_DIR,PA_DAT,PA_PLU。A 口的每一脚位都可做为外部中
断输入或一般 I/O 口。欲了解如何将这些脚位设置为外部中断,请参考章节 6.7。PA2(PWM2)、PA6(PWM1)
可设置为 PWM 输出。
A. PA_DIR($05H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PA_DIR
IOA7
IOA6
IOA5
IOA4
IOA3
IOA2
IOA1
IOA0
●
Bit7~0(IOA7~0)
:定义每一个脚位是输入口还是输出口
0:输出
1:输入
B. PA_DAT($06H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PA_DAT
DA7
DA6
DA5
DA4
DA3
DA2
DA1
DA0
●
Bit7~0(DA7~0)
:数据缓冲器
C. PA_PLU($31H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PA_PLU
UA7
UA6
UA5
UA4
UA3
UA2
UA1
UA0
●
Bit7~0(UA7~0)
:上拉使能/禁止
0:上拉禁止
1:上拉使能
6.1.2 B 口
B 口有 3 个寄存器可设置 7 个 I/O 口,分别是 PB_DIR,PB_DAT,PB_PLU。B 口的每一脚位都可设置为一般
I/O 口。当 B 口被设置为输入模式时,使用者可设置上拉。CONFIG_L 寄存器可设置 PB2(RESETB)为系统
复位(低电压复位)或纯输入脚位。通常情况下,PB0(OSC1)和 PB1(OSC2)是外部振荡器脚位,只有当
选择内部 RC 模式,PB0 和 PB1 才是一般 I/O 口。
A. PB_DIR($07H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
14
Bit 3
Bit 2
Bit 1
Bit 0
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
PB_DIR
●
IOB7
IOB6
IOB5
IOB4
IOB3
--
IOB1
IOB0
Bit7~0(IOB7~0)
:定义每一个脚位是输入口还是输出口
0:输出
1:输入
< 注 > Bit2:仅输入及在 CONFIG_L bit7 被设置为 RESET 或输入口。
B. PB_DAT($08H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PB_DAT
DB7
DB6
DB5
DB4
DB3
--
DB1
DB0
●
Bit7~0(DB7~0)
:数据缓冲器
C. PB_PLU($32H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PB_PLU
UB7
UB6
UB5
UB4
UB3
--
UB1
UB0
●
Bit7~0(UB7~0)
:上拉使能/禁止
0:上拉禁止
1:上拉使能
6.1.3 C 口
C 口有 3 个寄存器可设置 8 个 I/O 口,分别是 PC_DIR,PC_DAT,PC_PLU。PC5(Ext_clk)可被设置为外
部时钟输入。当 PC7~PC0 被设置为输入模式时,使用者可设置上拉。PC5 有多种功能,使用者应首先在
CONFIG_H bit8 定义它。
A. PC_DIR($09H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PC_DIR
IOC7
IOC6
IOC5
IOC4
IOC3
IOC2
IOC1
IOC0
●
Bit7~0:定义每一个脚位是输入口还是输出口
0:输出
1:输入
B. PC_DAT($0AH):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PC_DAT
DC7
DC6
DC5
DC4
DC3
DC2
DC1
DC0
●
Bit7~0(DC7~0)
:数据缓冲器
C. PC_PLU($33H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PC_PLU
UC7
UC6
UC5
UC4
UC3
UC2
UC1
UC0
●
Bit7~0(UC7~0)
:上拉使能/禁止
0:上拉禁止
1:上拉使能
15
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.1.4 D 口
D口有3个寄存器可设置6个I/O口,分别是PD_DIR,PD_DAT,PD_PLU。A口的每一脚位都可做为一般I/O口或
ADC模拟输入。
A. PD_DIR($0BH):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PD_DIR
--
--
IOD5
IOD4
IOD3
IOD2
IOD1
IOD0
●
Bit6~0(IOD6~0)
:定义每一个脚位是输入口还是输出口
0:输出
1:输入
B. PD_DAT($0CH):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PD_DAT
--
--
DD5
DD4
DD3
DD2
DD1
DD0
●
Bit7~0(DD7~0)
:数据缓冲器
C. PD_PLU($34H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PD_PLU
--
--
UD5
UD4
UD3
UD2
UD1
UD0
●
Bit7~0(UD7~0)
:上拉使能/禁止
0:上拉禁止
1:上拉使能
6.2
定时器/结果计数器(TM1,TM2,TM3)
MK7A23P提供5个累加定时器/计数器和1个看门狗定时器。通过设置每一个定时器控制寄存器,计数器的时钟源
可以是INRC,CRYSTAL,也可以是外部时钟。TM0是16位定时器,其它的是8位定时器。所有定时器带自动重
复下载功能,TM1/TM2和TM3/TM4组合后可实现PWM功能。寄存器详细设置及图表如下所示:
Latch Buffer
EXT_CLK
Crystal mode
OSC1 & 2
RC mode
OSC1 & 2
Timer reload
MUX
Prescaler
Counter latch
Counter Register
IRQ
Instruction read out
Clock Source Select
这些定时器带多种功能,可作为定时器,PWM输出波形使用。
16
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.2.1 TM0
TM1 是 16 位定时器/计数器,有 5 个寄存器设置他的属性。
A. TM0_CTL ($10H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM0_CTL
TM0_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
●
Bit7(TM0_EN)
:Timer0使能/禁止
0:TM0禁止
1:TM0使能
●
Bit6(WR_CNT)
:锁存器数据写到计数器寄存器使能/禁止
0:锁存器数据写到计数器寄存器禁止
1:锁存器数据写到计数器寄存器使能
< 注 > 此位只有在新定时器/计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当
定时器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次。
●
Bit5~4(SUR1~0)
:TM0时钟源选择位
Bit5
Bit4
SUR1
SUR0
0
0
EXT_CLK (PC5)
0
1
晶振模式 OSC1 或 EXT_RC(双重 RC 时钟模式)
1
0
RC 4MHZ 模式
1
1
未使用
TM0时钟源
< 注 > SUR1~0 定义 TM0 时钟源。
●
Bit3(EDGE)
:当定时器作为结果计数器使用时TM0时钟源边沿控制位
0:外部时钟从低电平到高电平时,定时器加1
1:外部时钟从高电平到低电平时,定时器加1
●
Bit2~0(PRE2~0)
:设置TM0预分频率
Bit2
Bit1
Bit0
PRE2
PRE1
PRE0
0
0
0
1:1
0
0
1
1:2
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
TMR0 预分频率
17
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
B. TM0L_LA/TM0H_LA and TM0L_CNT/TM0H_CNT Register ($11H, $12H, $13H, $14H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM0L_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM0H_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM0L_CNT
D7
D6
D5
D4
D3
D2
D1
D0
TM0H_CNT
D7
D6
D5
D4
D3
D2
D1
D0
< 注 1 > 请不要写 FFh 数据到 TM0L_LA & TM0H_LA 寄存器
< 注 2 > TM0L_CNT & TM0H_CNT 是只读寄存器
6.2.2 TM1(或 PWM1 period)
TM1 是 8 位定时器/计数器,有 4 个寄存器设置他的属性。TM1 可当作 PWM1 period 使用,与 TM2 一起实现
PWM1 波形。
A.TM1_CTL1 ($15H):
Register
TM1_CTL1
●
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM1_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
Bit7(TM1_EN)
:TM1(PWM1)使能/禁止
0:TM1禁止
1:TM1使能
●
Bit6(WR_CNT)
:锁存器数据写到计数器寄存器使能/禁止
0:锁存器数据写到计数器寄存器禁止
1:锁存器数据写到计数器寄存器使能
< 注 > 此位只有在新定时器/计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当
定时器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次。
●
●
Bit5~4(SUR1~0)
:TM1时钟源选择位
Bit5
Bit4
SUR1
SUR0
0
0
EXT_CLK (PC5)
0
1
晶振模式 OSC1 或 EXT_RC(双重 RC 时钟模式)
1
0
RC 4MHZ 模式
1
1
未使用
TM1/PWM1 时钟源
Bit3(EDGE)
:当定时器作为结果计数器使用时TM1时钟源边沿控制位
0:外部时钟从低电平到高电平时,定时器加1
1:外部时钟从高电平到低电平时,定时器加1
●
Bit2~0(PRE2~0)
:设置TM1预分频率
18
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
Bit2
Bit1
Bit0
PRE2
PRE1
PRE0
0
0
0
1:1
0
0
1
1:2
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM1_CTL2
MOD
PWM1_OS
**
**
POS3
POS2
POS1
POS0
TM1 预分频率
B.TM1_CTL2 ($16H):
●
Bit7(MOD)
:TM1可在不同模式下工作。定时器,PWM模式设置如下。
0:TM1在定时器模式下工作
1:TM1在PWM模式下工作
●
Bit6(PWM1_OS)
:设置PWM1输出比例初始状态
0:设置初始输出状态是高电平,当TM2定时器溢出时将变换为低电平
1:设置初始输出状态是低电平,当TM2定时器溢出时将变换为高电平
●
Bit3~0(POS3~0)
:PWM1输出脉冲设置(只有在TM1工作于PWM模式下时才被激活)
Bit3
Bit2
Bit1
Bit0
POS3
POS2
POS1
POS0
0
0
0
0
1:1
0
0
0
1
1:2
0
0
1
0
1:3
.
.
.
.
.
.
.
.
.
.
1
1
1
0
1:15
1
1
1
1
1:16
PWM1脉冲率
< 注 > 在 PWM 模式下,1:N 意味着经过 N 个 PWM1 脉冲后中断将发生
C. TM1_LA & TM1_CNT ($17H, 18H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM1_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM1_CNT
D7
D6
D5
D4
D3
D2
D1
D0
< 注 > TM1_CNT 寄存器是只读寄存器
19
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.2.3 TM2(或 PWM1 duty)
TM2 是 8 位定时器/计数器,有 3 个寄存器设置它的属性。TM2 可当作 PWM1 duty 使用,与 TM1 共同控制实
现 PWM1 波形。
A.TM2_CTL ($19H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM2_CTL
TM2_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
●
Bit7(TM2_EN)
:TM2使能位
0:TM2禁止
1:TM2使能
< 注 > 当 TM1_CTL2 被设置为 PWM 模式,此位将被自动抑制。TM2 就会成为 PWM1 波形的占空比计数器。
●
Bit6(WR_CNT)
:锁存器数据写到计数器寄存器使能/禁止
0:锁存器数据写到计数器寄存器禁止
1:锁存器数据写到计数器寄存器使能
< 注 > 此位只有在新定时器计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当定时
器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次。
●
●
Bit5~4(SUR1~0)
:TM2时钟源选择位
Bit5
Bit4
SUR1
SUR0
0
0
EXT_CLK (PC5)
0
1
晶振模式 OSC1 或 EXT_RC(双重 RC 模式)
1
0
RC 4MHZ 模式
1
1
未使用
TM2时钟源
Bit3(EDGE)
:当定时器作为结果计数器使用时TM2时钟源边沿控制位
0:外部时钟从低电平到高电平时,定时器加1
1:外部时钟从高电平到低电平时,定时器加1
●
Bit2~0(PRE2~0)
:预分频器分配脚位
Bit2
Bit1
Bit0
PRE2
PRE1
PRE0
0
0
0
1:1
0
0
1
1:2
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
TM2预分频率
20
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
B. TM2_LA & TM2_CNT ($1AH,1BH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM2_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM2_CNT
D7
D6
D5
D4
D3
D2
D1
D0
< 注 > TM2_CNT寄存器为只读寄存器
6.2.4 TM3(或 PWM2 period)
TM3 是 8 位定时器/计数器,有 4 个寄存器设置它的属性。TM3 可当作 PWM2 period 使用,与 TM4 共同控制
实现 PWM2 波形。
A.TM3_CTL1 ($1CH):
Register
TM3_CTL1
●
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM3_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
Bit7(TM3_EN)
:TM3(PWM2)使能/禁止
0:TM3禁止
1:TM3使能
●
Bit6(WR_CNT)
:锁存器数据写到计数器寄存器使能/禁止
0:锁存器数据写到计数器寄存器禁止
1:锁存器数据写到计数器寄存器使能
< 注 > 此位只有在新定时器计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当定时
器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次。
●
●
Bit5~4(SUR1~0)
:TM2时钟源选择位
Bit5
Bit4
SUR1
SUR0
0
0
EXT_CLK (PC5)
0
1
晶振模式 OSC1 或 EXT_RC(双重 RC 模式)
1
0
RC 4MHZ 模式
1
1
未使用
TM3/PWM2时钟源
Bit3(EDGE)
:当定时器作为结果计数器使用时TM3时钟源边沿控制位
0:外部时钟从低电平到高电平时,定时器加1
1:外部时钟从高电平到低电平时,定时器加1
●
Bit2~0(PRE2~0)
:设置TM3预分频率
Bit2
Bit1
Bit0
PRE2
PRE1
PRE0
0
0
0
1:1
0
0
1
1:2
TM3预分频率
21
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM3_CTL2
MOD
PWM2_OS
**
**
POS3
POS2
POS1
POS0
B.TM3_CTL2 ($1DH):
●
Bit7(MOD)
:TM3可在不同模式下工作。定时器,PWM模式设置如下。
0:TM3在定时器模式下工作
1:TM3在PWM模式下工作
●
Bit6(PWM2_OS)
:设置PWM2输出比例初始状态
0:设置初始输出状态是高电平,当TM4定时器溢出时将变换为低电平
1:设置初始输出状态是低电平,当TM4定时器溢出时将变换为高电平
< 注 > “**”bits 是为系统保留的,不能被设置为“1”
。
●
Bit3~0(POS3~0)
:PWM2输出脉冲设置(只有在TM3工作于PWM模式下时才被激活)
Bit3
Bit2
Bit1
Bit0
POS3
POS2
POS1
POS0
0
0
0
0
1:1
0
0
0
1
1:2
0
0
1
0
1:3
.
.
.
.
.
.
.
.
.
.
1
1
1
0
1:15
1
1
1
1
1:16
PWM2脉冲率
< 注 1 > 在 PWM 模式下,1:N 意味着经过 N 个 PWM2 脉冲后中断将发生
C. TM3_LA & TM3_CNT ($1EH, 1FH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM3_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM3_CNT
D7
D6
D5
D4
D3
D2
D1
D0
< 注 > TM3_CNT 寄存器是只读寄存器
22
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.2.5 TM4(或 PWM2 duty)
TM4 是 8 位定时器/计数器,有 3 个寄存器设置它的属性。TM4 可当作 PWM2 duty 使用,与 TM3 共同控制实
现 PWM2 波形。
A.TM4_CTL ($20H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM4_CTL
TM4_EN
WR_CNT
SUR1
SUR0
EDGE
PRE2
PRE1
PRE0
●
Bit7(TM4_EN)
:TM4使能位
0:TM4禁止
1:TM4使能
< 注 > 当 TM3_CTL2 被设置为 PWM 模式,此位将被自动抑制。TM4 就会成为 PWM2 波形的占空比计数器。
●
Bit6(WR_CNT)
:锁存器数据写到计数器寄存器使能/禁止
0:锁存器数据写到计数器寄存器禁止
1:锁存器数据写到计数器寄存器使能
< 注 > 此位只有在新定时器计数器数据的初始状态下被设置,才能让锁存器数据写到计数器寄存器。当定时
器溢出,锁存器数据会自动重复下载到计数器寄存器。使用者不需要再设置一次。
●
●
Bit5~4(SUR1~0)
:TM4时钟源选择位
Bit5
Bit4
SUR1
SUR0
0
0
EXT_CLK (PC5)
0
1
晶振模式 OSC1 或 EXT_RC(双重 RC 模式)
1
0
RC 4MHZ 模式
1
1
未使用
TM4时钟源
Bit3(EDGE)
:当定时器作为结果计数器使用时TM4时钟源边沿控制位
0:外部时钟从低电平到高电平时,定时器加1
1:外部时钟从高电平到低电平时,定时器加1
●
Bit2~0(PRE2~0)
:预分频器分配脚位
Bit2
Bit1
Bit0
PRE2
PRE1
PRE0
0
0
0
1:1
0
0
1
1:2
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
TM4预分频率
23
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
B. TM4_LA & TM4_CNT ($21H,$22H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TM4_LA
D7
D6
D5
D4
D3
D2
D1
D0
TM4_CNT
D7
D6
D5
D4
D3
D2
D1
D0
Bit 3
Bit 2
Bit 1
Bit 0
< 注 > TM4_CNT寄存器为只读寄存器
C. CMP_CTL ($2FH):
Register
Bit 7
Bit 6
Bit 5
Bit 4
CMP_CTL
--
--
--
--
●
CMP4_E CMP3_E CMP2_E CMP1_E
Bit3(CMP4_E)
:比较器4使能/禁止
0:CMP4禁止
1:CMP4使能
●
Bit2(CMP2_E)
:比较器2使能/禁止
0:CMP2禁止
1:CMP2使能
●
Bit1(CMP2_E)
:比较器2使能/禁止
0:CMP2禁止
1:CMP2使能
●
Bit0(CMP1_E)
:比较器1使能/禁止
0:CMP1禁止
1:CMP1使能
24
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.3
PWM(脉冲宽度调制)
PWM 波形由 TM2(period)和 TM3(duty)组合控制。通过设置寄存器,这两个定时器可用作一般定时器
或 PWM 波形计数器。设置步骤如下例所示。
6.3.1 PWM
如果定时器全为 PWM 使用,则他们都是 8 位可编程占空比和周期。当系统频率为 4MHz 时,每一个都能发
生脉冲,脉冲宽度从 0.5us 到 8,192ms。要设置定时器在 PWM 模式下工作,寄存器 TM1_CTL2($16)或
TM3_CTL2($1D)需设置为 1XX0XXXX(X 指不考虑)。请参考如下编程示例及定时图表:
<Example> 定时器作为PWM工作:
设置PWM period:
MOVLA
b01100001
MOVAM
TM1_CTL1
MOVLA
b10000000
MOVAM
TM1_CTL2
MOVLA
F0H
MOVAM
TM1_LA
; 设置clk_source=RC, prescale=2
; 设置period计数器数值(累计计数到FFH)
Set PWM duty:
; 设置 clk_source=OSC, prescale=4
MOVLA
b01010010
MOVAM
TM2_CTL
MOVLA
F8H
MOVAM
TM2_LA
BS
TM1_CTL1,b7 ; 开始PWM输出
MOVLA
82H
MOVAM
IRQM
CLR
IRQF
; 设置duty读数器数值(累计计数到FFH)
; 使能INTM & PWM1中断
; 清除中断标记
25
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
C.FREQ_CTL ($30H):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
FREQ_CTL
S500O
500_PR1
500_PR0
--
--
500O_E
CLO_E
TO_E
●
Bit7(S500O)
:为500KHz输出选择时钟源
0:设置500KHz时钟源=INRC(Init)
1:设置500KHz时钟源=OSC
●
Bit6,5(S500_PR1,S500_PR0)
:预分频分配位
Bit6
Bit5
500Khz预分频率
S500_PR1 S500_PR0
●
0
0
1:2
0
1
1:4
1
0
1:8
1
1
1:16
Bit2(500O_E)
:500khz输出使能(脚位与PC2共享)
0:设置此脚位为一般I/O脚位
1:设置些脚位为500KHZ输出
●
Bit1(CLO_E)
:系统时钟输出使能(脚位与PC7共享)
0:设置此脚位为一般I/O脚位
1:设置此脚位为系统时钟输出
●
Bit0(TO_E)
:定时器输出(TO)使能/禁止(脚位与PC1共享)
0:设置此脚位为PC1一般I/O脚位
1:设置此脚位为TO(定时器输出脚位,频率是TM3(PWM2)计数器频率/2)
< 注 > TO信号输出前,PC1必须设置为输出口。
26
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.4
WDT(看门狗定时器)
WDT是防止软体故障及跳过含有不可预知结果的未知页面的定时器。WDT时钟源是一个独立的内部RC振荡器。
此定时器会受温度、电压及不同产品批号的影响。
A.WDT_CTL ($3DH):
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
WDT_CTL
WDTEN
i_WDT
i_STAB
--
--
PRE 2
PRE 1
PRE0
●
Bit7(WDTEN)
:看门狗定时器使能位
0:WDT禁止
1:WDT使能
●
Bit6(i_WDT)
:i_WDT唤醒使能位
0:i_WDT禁止(初始值=禁止)
1:i_WDT使能
●
Bit5(i_STAB)
:i_STAB唤醒时间(在i_WDT模式)设置位
0:唤醒时间=10ms(初始值)
1:唤醒时间=5ms
●
Bit2~0(PRE2~0)
:设置预分频率。由于是RC OSC,所有的数据不是精确数据
Bit2
Bit1
Bit0
PRE2
PRE1
PRE1
0
0
0
20mS
0
0
1
40mS
0
1
0
80mS
0
1
1
160mS
1
0
0
320mS
1
0
1
640mS
1
1
0
1.28S
1
1
1
2.56S
WDT预分频率
27
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
i_WDT-Wakeup :
(Internal watch-dog timer
wake-up)
WDT-Wakeup :
(Watch-dog timer wake-up)
Set Config :
WDTE(bit4)=enable
Set Register :
WDT_CTL($3D)
bit7=enable(wdten),
bit6=enable(i_WDT),
Bit5=0(10ms), 1(5ms)
Set Config :
WDTE(bit4)=enable
Set Register:
WDT_CTL($3D)
bit7=enable(wdten),
bit6=disable(i_WDT)
novla
A0H
movam IRQM
bc
IRQF,5
.
.
SLEEP
NOP
.
.
.
SLEEP
NOP
Wait
(20ms*N sleep
time+20ms clk
stable time)
(N=1~128)
Wait
(20ms*N sleep
time+10ms(or 5ms)
clk stable time)
(N=1~128)
System Reset
Org 004H (IRQ vector)
bc
IRQF,5
IRETI
Next(sleep)instruction
NOP
.
* CLRWDT
.
.
start
clrwdt
movla
movam
.
.
.
System reset
*When wakeup must
CLRWDT, otherwise watchdog timer will keep operation
87h ; sleep time=2.56s,
wakeup time=20ms
WDT_CTL($3D)
start
clrwdt
movla
E7h ; sleep time=2.56s,
wakeup time=5ms(bit5=1)
movam
WDT_CTL($3D)
.
.
.
Sleep
nop
ORG
28
Sleep
nop
clrwdt
.
004H
bc
IRETI
IRQF,5
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.5
复位
以下列出了4种会引起复位的情况。掉电将会引起MK7A23P复位,检测电压依照CONFIG寄存器的bit6~bit5。这
样能在供电不足的环境下保护芯片,最后两种情况我们称之为热复位。不同的复位都会影响寄存器和数据存储器。
TO 和 PD 位用来决定复位的类型。
(1) 上电复位
(2) 低电压复位(LVR)
(3) RESETB脚位复位(输入一个负脉冲)
(4) WDT定时器溢出复位
System Clock
Power on reset
Synchronize with ripple counter
Low voltage reset
RESETB pin
Delay for setup time
RESET
Watchdog Timer
Internal specific RC
OSC
WDT
overflow
系统复位图表
< 注 > 看门狗设置时间为大约20ms,由于电源电压、进程及温度差异,在时间设置上会有一些偏差。调整
时间通过WDT_CTRL($3DH)设置。
不同复位条件下的默认值
Address
Name
Cold Reset
Warm Reset
N/A
Accumulator
xxxx xxxx
pppp pppp
00H
INDF
0000 0000
0000 0000
01H
PCL
0000 0000
0000 0000
02H
PCH
----
----
03H
STATUS
0001 1xxx
0001 1xxx
04H
FSR
Xxxx xxxx
Pppp pppp
05H
PA_DIR
1111 1111
1111 1111
06H
PA_DAT
Xxxx xxxx
Pppp pppp
07H
PB_DIR
1111 1x11
1111 1x11
08H
PB_DAT
Xxxx xxxx
pppp pxpp
29
-000
-000
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
09H
PC_DIR
1111 1111
1111 1111
0AH
PC_DAT
Xxxx xxxx
pppp ppxp
0BH
PD_DIR
XX11 1111
XX11 1111
0CH
PD_DAT
Xxxx xxxx
xxpp pppp
10H
TM0_CTL
0000 0000
0000 0000
11H
TM0L_LA (Don’t write FF)
0000 0000
0000 0000
12H
TM0H_LA (Don’t write FF)
0000 0000
0000 0000
13H
TM0L_DAT
(Read only)
1111 1111
1111 1111
14H
TM0H_ DAT
(Read only)
1111 1111
1111 1111
15H
TM1_CTL1
0000 0000
0000 0000
16H
TM1_CTL2
0000 0000
0000 0000
17H
TM1_LA (Don’t write FF)
0000 0000
0000 0000
18H
TM1_DAT (Read only)
1111 1111
1111 1111
19H
TM2_CTL
0000 0000
0000 0000
1AH
TM2_LA (Don’t write FF)
0000 0000
0000 0000
1BH
TM2_DAT (Read only)
1111 1111
1111 1111
1CH
TM3_CTL1
0000 0000
0000 0000
1DH
TM3_CTL2
0000 0000
0000 0000
1EH
TM3_LA (Don’t write FF)
0000 0000
0000 0000
1FH
TM3_DAT (Read only)
1111 1111
1111 1111
20H
TM4_CTL
0000 0000
0000 0000
21H
TM4_LA (Don’t write FF)
0000 0000
0000 0000
22H
TM4_DAT (Read only)
1111 1111
1111 1111
25H
IRQM
0000 0000
0000 0000
26H
IRQF
x000 0000
x000 0000
27H
IRQM_1
xxxx 0000
xxxx 0000
28H
IRQF_1
xxxx 0000
xxxx 0000
29H
AD_CTL1
0x0x 0000
0x0x 0000
2AH
AD_CTL2
0xxx xx00
0xxx xx00
2BH
AD_CTL3
xxxx 0000
xxxx 0000
2CH
AD_DATL
0000 0000
0000 0000
2DH
AD_DATH
X000 0000
X000 0000
2FH
CMP_CTL
xxxx 0000
xxxx 0000
30H
FREQ_CTL
000x x000
000x x000
30
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
31H
PA_PLU
0000 0000
0000 0000
32H
PB_PLU
0000 0000
0000 0000
33H
PC_PLU
0000 0000
0000 0000
34H
PD_PLU
Xx00 0000
Xx00 0000
35H
IO_CTL
Xxxx 0000
Xxxx 0000
3AH
PA_INTE
0000 0000
0000 0000
3DH
WDT_CTL
1xxx x111
1xxx x111
3EH
TAB_BNK
Xxxx x000
Xxxx x000
3FH
SYS_CTL
0xxx xx00
0xxx xx00
x:未知的; p:原来的数值; ?:依据条件的数值;-:不执行,清“0”
6.6
中断
MK7A23P提供7种外部中断(PA0~7)
,3种内部定时器/结果计数器中断和1种A/D转换器中断。IRQM和IRQF
寄存器用来控制或判断所有中断的请求状态。外部中断通过PA0~7的脚位变化触发,相关的中断请求标记
(PAF;IRQF的bit 5)将被设置。通过设置A/D转换器请求标记(ADCF;IRQF的bit 6)
,A/D转换器中断被初
始化,当结束A/D转换,中断发生。
IRQM用来使能/禁止中断,IRQF用来指出是哪一种中断发生。如果特殊IRQM不能先使能则硬体中断将不会发
生。但不管IRQM使能或禁止,IRQF都会有状态反应。例如,使用者使能TM1来开始计数,如果IRQM的bit 1
使能,当定时器溢出,硬体中断将会发生,IRQF的bit 1将被设置,与此同时,程序将跳到中断向量。使用者
应清除中断服务程序中的IRQF,否则中断将不会再次发生。另一种情况是如果IRQM的bit 1禁止,当定时器溢
出时,中断将不会产生,但IRQF的bit 1仍被设置。没有硬体中断发生,程序将不会跳到中断向量。
A. IRQM ($25H)
Register
Bit 7
Bit 6
Bit 5
IRQM
INTM
ADCM
PAM
●
Bit 4
Bit 3
Bit 2
TM4M TM3M/PWM2M TM2M
Bit 1
Bit 0
TM1M/PWM1M
TM0M
Bit7(INTM)
:球形使能位
0:禁止所有中断屏蔽
1:使能所有中断屏蔽
< 注 > 当中断正在进行时,INTM将会被设置为“0”以防止其他中断的发生。当中断完成后,IRETI指令将会设
置INTM为“1”。
●
Bit6(ADCM)
:ADC 结束转换(EOC)中断使能
0:禁止中断
1:使能中断
●
Bit5(PAM)
:PA 中断使能
31
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
0:禁止中断
1:使能中断
●
Bit4(TM4M)
:TM4 中断使能
0:禁止中断
1:使能中断
●
Bit3(TM3M/PWM2M)
:TM3/PWM2 中断使能
0:禁止中断
1:使能中断
●
Bit2(TM2M)
:TM2 中断使能
0:禁止中断
1:使能中断
●
Bit1(TM2M/PWM1M)
:TM1/PWM1 中断使能
0:禁止中断
1:使能中断
●
Bit0(TM0M)
:TM0 中断使能
0:禁止中断
1:使能中断
B. IRQF ($26H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
IRQF
--
ADCF
PAF
TM4F
TM3F/PWM2F
TM2F
TM1F/PWM1F
TM0F
●
Bit6(ADCF)
:ADC 结束转换中断请求标记
0:结束转换中断请求关
1:结束转换中断请求开
●
Bit5(PAF)
:PA0~7 中断请求标记
0:PA 中断请求关
1:PA 中断请求开
●
Bit4(TM4F)
:TM4 中断请求标记
0:TM4 中断请求关
1:TM4 中断请求开
●
Bit3(TM3F/PWM2F)
:TM3/PWM2 中断请求标记
0:TM3/PWM2 溢出中断请求关
1:TM3/PWM2 溢出中断请求开
●
Bit2(TM2F)
:TM3 中断请求标记
0:TM2 溢出中断请求关
1:TM2 溢出中断请求开
32
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
●
Bit1(TM1F/PWM1F)
:TM1/PWM1 中断标记
0:TM1/PWM1 溢出或 PWM1 中断请求关
1:TM1/PWM1 溢出或 PWM1 中断请求开
●
Bit0(TM0F)
:TM0 中断请求标记
0:TM0 溢出中断请求关
1:TM0 溢出中断请求开
C. IRQM_1 ($27H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
IRQM_1
--
--
--
--
CMP4M
CMP3M
●
Bit 1
CMP2M
Bit 0
CMP1M
Bit7:未使用
IRQM_1 通用掩膜使用 IRQM($25) bit7 (INTM)
<注> 当中断正在运行,INTM将复位到“0”以防止其他中断的发生。运行结束后,IRETI指令将自动设
置INTM为“1”。
●
Bit3(CMP4M)
:比较器 4 中断使能
0:禁止中断
1:使能中断
●
Bit2(CMP3M)
:比较器 3 中断使能
0:禁止中断
1:使能中断
●
Bit1(CMP2M)
:比较器 2 中断使能
0:禁止中断
1:使能中断
●
Bit0(CMP1M)
:比较器 1 中断使能
0:禁止中断
1:使能中断
D. IRQF_1 ($28H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
IRQF_1
--
--
--
--
CMP4F
CMP3F
CMP2F
CMP1F
●
Bit3(CMP4F)
:比较器 4 中断使能
0:比较器 4 中断请求关闭
1:比较器 4 中断请求打开
●
Bit2(CMP3F)
:比较器 3 中断使能
0:比较器 3 中断请求关闭
1:比较器 3 中断请求打开
33
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
●
Bit1(CMP2F)
:比较器 2 中断使能
0:比较器 2 中断请求关闭
1:比较器 2 中断请求打开
●
Bit0(CMP1F)
:比较器 1 中断使能
0:比较器 1 中断请求关闭
1:比较器 1 中断请求打开
6.6.1 外部中断/唤醒功能
A口(PA)提供外部中断和唤醒功能。当芯片不处于睡眠模式,PA输入信号将做为外部中断工作。当外部中断
发生,程序将会跳到004H(中断向量)
。如果芯片处于睡眠模式,PA输入信号将做为唤醒功能工作。当唤醒信
号输入,芯片将会让系统时钟首先工作,然后等待唤醒定时器(由WDT_CTL寄存器$3PH设置)溢出,再之后,
程序将跳到004H。以下流程图说明如何设置A口作为外部中断或唤醒功能工作。
34
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
MOVLA FFH
MOVAM PA_DIR
(Set Port A is input)
MOVLA A0H
MOVAM IRQM
(Set global & port A IRQ
enable)
BC IRQF,b5
(Clear port A IRQ flag)
MOV PA,a
(Read port A status)
MOVLA 01H
MOVAM Wake_up
(Set port A accept pin wake-up
or external interrupt)
Port A interrupt
is occurred
?
PC=103H
No
Yes
Interrupt Service Routine
(PC=100H)
Return from INT routine
PC=104H
MOV xx,a
图表:A端口唤醒和外部中断设置流程
35
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.7
ADC
MK7A22P提供12个通道和15-bits(11bit + 4bit)协议A/D转换器。A/D转换器包含5个寄存器,分别是AD_CTL1
(29H),AD_CTL2(2AH)
,AD_CTL3(2BH),AD_DATL(2DH)及AD_DATH(2EH)
。
A. AD_CTL1 ($29H)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
AD_CTL1
EN
--
MODE
--
CHSEL3
CHSEL2
CHSEL1
CHSEL0
●
Bit7(EN)
:ADC 使能位
0:ADC 禁止
1:ADC 使能
< 注 > 当结束转换,此位将会自动设置为“0”
●
Bit5(MODE)
:ADC 模式选择位
0:ADC 通道作为 A/D 转换工作
1:ADC 通道作为比较器工作
< 注 > (a)如果此位是“1”
,Vin 数据将会与 AD_DAT 作比较,结果被存储在 AD_CTL2 Bit7。如果此位是
“0”
,Vin 被转换成 15-bit 数位数据并保存在 AD_DAT 寄存器。
(b)Vin:ADC 通道的输入电压
●
Bit3~0(CHSEL3~0)
:ADC 输入通道选择位
Bit3
Bit2
Bit1
Bit0
CHSEL3
CHSEL2
CHSEL1
CHSEL0
0
0
0
0
Channel 0, PA0 pin
0
0
0
1
Channel 1, PA1 pin
0
0
1
0
Channel 2, PA2 pin
0
0
1
1
Channel 3, PA3 pin
0
1
0
0
Channel 4, PA4 pin
0
1
0
1
Channel 5, PA5 pin
0
1
1
0
Channel 6, PA6 pin
0
1
1
1
Channel 7, PA7 pin
1
0
0
0
Channel 8, PC7 pin
1
0
0
1
Channel 9, PD1 pin
1
0
1
0
Channel 10, PD2 pin
1
0
1
1
Channel 11, PD3 pin
36
Input channel
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
B. AD_CTL2 ($2AH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
AD_CTL2
RSUT
--
--
--
--
--
CKSEL1
CKSEL0
●
Bit7(RSUT)
:比较模式结果位
0:Vin < AD_DAT
1:Vin ≧ AD_DAT
●
Bit1~0(CKSEL1~0)
:ADC 转换时钟源选择位
Bit1
Bit0
CKSEL1
CKSEL0
0
0
系统时钟 X2
0
1
系统时钟 X8
1
0
系统时钟 X32
1
1
系统时钟 X128
转换时钟
< 注 > 转换时钟决定转换率和精度。如果选择的是快速转换时钟,那将减少精度。如果使用者想得到更精确
的 A/D 数据,推荐使用慢速。
C. AD_CTL3 ($2BH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
AD_CTL3
--
--
--
--
PISEL3
PISEL2
PISEL1
PISEL0
●
Bit3~0(PBSEL3~0)
:ADC 通道输入模式选择位,设置每个 Port 是模拟输入还是数字输入
Bit3
Bit2
Bit1
Bit0
PISEL3
PISEL2
PISEL1
PISEL0
0
0
0
0
所有 port 为数字输入
0
0
0
1
AN0
0
0
1
0
AN1
0
0
1
1
AN2
0
1
0
0
AN3
0
1
0
1
AN4
0
1
1
0
AN5
0
1
1
1
AN6
1
0
0
0
AN7
1
0
0
1
AN8
1
0
1
0
AN9
1
0
1
1
AN10
1
1
0
0
AN11
配置
< 注 > 最小化能耗,所有 I/O 脚在进入睡眠模式前都会被小心控制
37
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
D. AD_DATL (2CH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
AD_DATL
D7
D6
D5
D4
D3
D2
D1
D0
< 注 > 此寄存器有两种不同的用法,如果在比较模式下工作,这些数据将会与 ADC 通道输入电压相比较。在
ADC 模式下,寄存器存储 ADC 转换数据。
E.AD_DATH (2DH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
AD_DATH
--
D14
D13
D12
D11
D10
D9
D8
< 注 > 此寄存器有两种不同的用法,如果在比较模式下工作,这些数据将会与 ADC 通道输入电压相比较。在
ADC 模式下,寄存器存储 ADC 转换数据。
START
No
Bit 7 of AD_CTL1
=0?
Yes
NOP
NOP
……
NOP
* Wait 16 instruction cycles
Clear Bit 6 of IRQF
(Clear AD Flag)
Set AD Register
(AD_CTL1~3)
Bit 7 of AD_CTL1=1
(Start AD Covert)
No
Bit 6 of IRQF
=1?
(AD end of converting)
Yes
Read AD Data
图表:ADC设置流程
38
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.8
表格查询功能
MK7A23P提供表格查询功能。查询表格可以置于ROM空间的任何位置。TABRDL指令是读ROM表格的低字节。
TABRDH是读高字节。TAB_BNK寄存器用于定义表格位置(3+8=11bits-address bit,211=2Kbytes-data byte)
的高位(MSB)地址。
6.8.1 TAB_BNK ($3EH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TAB_BNK
--
--
--
--
--
BANK2
BANK1
BANK0
●
Bit2~0(BANK2~0)
:高字节表格位置选择位
Bit2
Bit1
Bit0
BANK2
BANK1
BANK0
0
0
0
000 XXXX XXXX 表格位置
0
0
1
001 XXXX XXXX 表格位置
0
1
0
010 XXXX XXXX 表格位置
.
.
.
.
1
1
1
111 XXXX XXXX 表格位置
BANK 选择
6.8.2 表格查询举例程序
以下程序是如何编程表格查询功能的例子,TABRDL和TABRDH的结果将会是55H和AAH(地址是0704H)
。
#DEFINE
TAB_BNK
3EH
; 定义地址,RAM 的 3EH 定义为 TAB_BNK
BUFA
EQU
43H
; 定义地址,RAM 的 43H 定义为 BUFA
(address)
ORG
0700H
; 程序从 ROM 的 0700H 开始
0700H
MOVLA
00H
; 保存 00H 到 A 寄存器
0701H
DW
1122H
; 存储 1122H 在 ROM 的 0701H
0702H
DW
3344H
; 存储 3344H 在 ROM 的 0702H
0703H
DW
6677H
; 存储 6677H 在 ROM 的 0703H
0704H
DW
55AAH
; 存储 55AAH 在 ROM 的 0704H
MOVLA
04H
; 保存 04H 到 A 寄存器(低位地址)
MOVAM
BUFA
; 保存 A 寄存器的数值到 BUFA
MOVLA
0FH
; 保存 0FH 到 A 寄存器(高位地址)
MOVAM
TAB_BNK
; 保存 A 寄存器的数值到 TAB_BNK
TABRDL
BUFA
; 查询 TAB_BNK 的低字节数值和 BUFA 指定地址,
保存到 A 寄存器
TABRDH
BUFA
; 查询 TAB_BNK 的高字节数值和 BUFA 指定地址,
保存到 A 寄存器
39
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
系统控制
6.9
MK7A23P提供Auto-Bank功能和双重时钟操作模式。Auto-bank的意思是当程序跳跃,系统将自动保存PC的高
字节,以防止进位溢出引起程序计数器错误。双重时钟模式有内部RC和外部晶振时钟源。使用者可以在同一时
间使用双重时钟。例如,内部RC(4MHz)常用作系统时钟源,外部晶振(32KHz)用作计数器时钟源。
6.10.1 SYS_CTL ($3FH)
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
SYS_CTL
CLKS
--
--
--
--
--
●
Bit 1
Bit 0
STPRC STPOSC
Bit7(CLKS)
:系统时钟源选择位,只有在双重时钟模式(内部RC 4MHz和晶振)或双重RC模式(内
部RC 4MHz和外部RC)下激活
双重时钟模式:
0:系统时钟是内部RC 4MHz
1:系统时钟是OSC(双重时钟模式)或外部RC(双重RC模式)
单时钟模式:
不使用
●
Bit1(STPRC)
:RC(内部RC 4MHz)振荡器控制位
双重时钟模式或双重RC模式:
0:4MHz RC振荡开
1:4MHz RC振荡关
其他模式:
不使用
< 注 > 在设置 RC 振荡关之前,首先将 CLKS 转换到 OSC 振荡
●
Bit0(STPOSC)
:OSC(晶振)振荡器控制位
双重时钟模式或双重RC模式:
0:外部OSC振荡开(双重时钟模式)或外部RC开(双重RC模式)
1:外部OSC振荡关(双重时钟模式)或外部RC开(双重RC模式)
其他模式:
不使用
< 注 > 在设置 OSC 振荡关之前,首先将 CLKS 转换到 RC 振荡
40
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.10
程序计数器 - PC
MK7A22P有一个11-bits程序计数器(PC)
,包含PCL(8-bits)和PCH(3bits)。PC习惯于被存储在程序通道内。
一旦使用者改变PCL的数值,程序将会跳到指示页面。
Ex1:PCH=01H,PCL=02H+10H=12H,程序将跳到PC=112H
Ex2:PCH=01H,PCL=F0H+30H=20H带进位1,程序将跳到PC=220H,但PCH仍旧是01H
< 注 > (a)当执行 IRET 和 IRETI,PCH 数据将不会被更新
(b)当执行 LGOTO,LCALL,JZ,JC 和 RET,PCH 将会在精确的操作后被更新
示例 1:
以下程序说明 PCL 和 PCH 如何在直接精确的操作下工作。
#DEFINE
PCL
01H
; 定义地址,RAM 的 01H 定义为 PCL
#DEFINE
PCH
02H
; 定义地址,RAM 的 02H 定义为 PCH
#DEFINE
ADMIN
41H
; 协助 PCL 操作
MOVLA
HIGH P1
; 保存 P1(1C6H)高字节地址到 A 寄存器
(address)
1C0H
; PC=1C0H,PCL=C0H,PCH=00H
1C1H
MOVAM
PCH
; 保存 A 寄存器到 PCH(为了避免 PCL 操作的跳跃
错误,首先存储真正的跳跃高字节地址到 PCH)
; PC=1C1H,PC =C1H,PCH=01H
1C2H
MOVLA
4BH
; 保存 4BH 到 A 寄存器(ADDAM PCL,M 的地址
是 1C5H,准备跳到 210H,PCL 增加 210H-1C5H
=4BH)
; PC=1C2H,PC =C2H,PCH=01H
1C3H
MOVAM
ADMIN
; 准备 PCL 操作
; PC=1C3H,PCL=C3H,PCH=01H
1C4H
DEC
ADMIN, a
; ADMIN–1(真正的跳跃发生在 1C6H,不在 1C5H,
因此 1C6H+(4BH-1H)=210H)
; PC=1C4H,PCL=C4H,PCH=01H
1C5H
ADD
PCL,M
; PCL 用 A 寄存器增加,结果存储在 PCL
; PC=1C5H,PCL=C5H,PCH=01H
P1:1C6H
; 跳到 0210H
NOP
; PC=1C6H,PCL=C6+4AH=10H 带进位 1,进位将
用 PCH 计数,PCH=01H,用途 PC 高字节地址将是
PCH+PCL’s 进位=02H。程序将跳到 PC=210H
210H
MOVLA
00H
; 用途功能部分
; PC=210H,PCL=10H,PCH=01H
41
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
示例2:
以下程序说明 PCL 和 PCH 如何在直接精确的操作下工作。
(address)
1C0H
MOVLA
03H
; 保存 03H 到 A 寄存器
; PC=1C0H,PCL=C0H,PCH=00H
1C1H
MOVAM
PCH
; 保存 A 寄存器到 PCH
; PC=1C1H,PCL=C1H,PCH=03H
1C2H
MOVLA
4BH
; 保存 4BH 到 A 寄存器
; PC=1C2H,PCL=C2H,PCH=03H
1C3H
MOVAM
ADMIN
; 准备 PCL 操作
; PC=1C3H,PCL=C3H,PCH=01H
1C4H
DEC
ADMIN, a
; ADMIN–1(真正的跳跃发生在 1C6H,不在 1C5H,
因此 1C6H+(4BH-1H)=210H)
; PC=1C4H,PCL =C4H,PCH=03H
1C5H
ADD
PCL,M
; PCL 用 A 寄存器增加,结果存储在 PCL
; PC=1C5H,PCL=C5H,PCH=03H
1C6H
; 跳到 410H
NOP
; PC=1C6H,PCL=C6+4AH=10H 带进位 1,进位将
用 PCH 计数,PCH=03H,用途 PC 高字节地址将是
PCH+PCL’s 进位=04H。程序将跳到 PC=410H
410H
MOVLA
00H
; 用途功能部分
; PC=410H,PCL=10H,PCH=03H
示例 3:
以下程序说明 PCL 和 PCH 如何通过 A 寄存器工作。
(address)
018H
MOVLA
02H
; 保存 02H 到 A 寄存器
019H
MOVAM
PCH
; 保存 A 寄存器到 PCH(用途地址是 200H,因此存
储“02H”到 PCH)
01AH
MOVLA
00H
; 保存 00H 到 A 寄存器
01CH
MOVAM
PCL
; 保存 A 寄存器到 PCL(用途地址是 200H,因此存
储“00H”到 PCL)
01DH
NOP
200H
MOVLA
; 跳到 200H
00H
; 用途功能部分
42
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
6.11
STATUS寄存器
STATUS寄存器是一个包含零标记(Z)
,进位标记(C)
,四位进位标记(DC),掉电标记( PD ),看门狗定
时器溢出标记( TO )的8位寄存器,它用于记录状态信息。
Register
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
STATUS
--
--
--
TO
PD
Z
DC
C
●
Bit4( TO )
:定时器溢出标记位
●
Bit3( PD )
:掉电标记位
说
明
TO
PD
0
0
在睡眠模式中 WDT 定时器溢出
0
1
在普通模式中 WDT 定时器溢出
1
0
在睡眠模式中给 RESETB 输入一个“低电平”
1
1
上电复位
Unchanged
●
Unchanged 在普通模式中给 RESETB 输入一个“低电平”
Bit2(Z)
:零标记位
0:逻辑操作结果不是0
1:逻辑操作结果是0
● Bit1(DC)
:四位进位与四位借位标记位
加指令:
0:无四位进位发生
1:四位进位发生
减指令:
●
0:四位借位发生
1:无四位借位发生
Bit0(C)
:进位与借位标记位
加指令:
0:无进位发生
1:从 MSB 进位发生
减指令:
0:从MSB借位发生
1:无借位发生
43
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
7. 指令集
JUMP INSTRUCTION
LCALL I
LGOTO I
Call subroutine. However, LCALL can
addressing 16K address
Go branch to any address
2
None
01ii iiii iiii iiii
2
None
00ii iiii iiii iiii
1
1
1
1
1
1
1
1
Z
Z
Z
Z
Z
Z
Z
Z
1010 1000 MMMM MMMM
1010 1001 MMMM MMMM
1111 1000 iiii iiii
1010 0100 MMMM MMMM
1010 0101 MMMM MMMM
1011 1110 MMMM MMMM
1011 1111 MMMM MMMM
1111 0010 iiii iiii
1
None
1110 0000 MMMM MMMM
1
None
1110 0001 MMMM MMMM
1
C
1110 0010 MMMM MMMM
1
C
1110 0011 MMMM MMMM
1
None
1110 0100 MMMM MMMM
1
None
1110 0101 MMMM MMMM
1
None
1110 0110 MMMM MMMM
1
None
1110 0111 MMMM MMMM
LOGIC
AND M, a
AND M, m
ANDLA I
COM M, a
COM M, m
IOR M, a
IOR M, m
IORLA l
(M).(acc) → (acc)
(M).(acc) → (M)
Immediate.(acc) → (acc)
~(M) → (acc)
~(M) → (M)
(M) or (acc) → (acc)
(M) or (acc) → (M)
Immediate or (acc) → (acc)
Rotate left from m to acc
RL M, a
m[6:0] → acc[7:1]
m[7] → acc[0]
Rotate left from m to itself
RL M, m
m[6:0] → m[7:1]
m[7] → m[0]
Rotate left from m to acc
RLC M, a
m[7] → c
m[6:0] → acc[7:1]
c → acc[0]
Rotate left from m to itself
RLC M, m
m[7] → c
m[6:0] → m[7:1]
c → m[0]
Shift left from m to acc
SL0 M, a
m[6:0] → acc[7:1]
0 → acc[0]
Rotate left from m to itself
SL0 M, m
m[6:0] → m[7:1]
0 → m[0]
Shift left from m to acc
SL1 M, a
m[6:0] → acc[7:1]
1 → acc[0]
SL1 M, m
Rotate left from m to itself
44
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
m[6:0] → m[7:1]
1 → m[0]
Rotate right from m to acc
RR M, a
0 → acc[7]
1
None
1110 1000 MMMM MMMM
1
None
1110 1001 MMMM MMMM
1
C
1110 1010 MMMM MMMM
1
C
1110 1011 MMMM MMMM
1
None
1110 1100 MMMM MMMM
1
None
1110 1101 MMMM MMMM
1
None
1110 1110 MMMM MMMM
1
None
1110 1111 MMMM MMMM
1
None
1011 1100 MMMM MMMM
1
1
1
1
None
Z
Z
Z
1011 1101 MMMM MMMM
1011 0110 MMMM MMMM
1011 0111 MMMM MMMM
1111 1001 iiii iiii
C, DC, Z
C, DC, Z
C, DC, Z
C, DC, Z
1010 1010 MMMM MMMM
1010 1011 MMMM MMMM
1011 1010 MMMM MMMM
1011 1011 MMMM MMMM
m[7:1] → acc[6:0]
Rotate right from m to itself
RR M, m
M[0] → m[7]
m[7:1] → m[6:0]
Rotate right from m to acc
RRC M, a
m[0] → c,
c → acc[7]
m[7:1] → acc[6:0]
Rotate right from m to itself
RRC M, m
m[0] → c,
c → m[7]
m[7:1] → m[6:0]
Rotate right from m to acc
SR0 M, a
0 → acc[7]
m[7:1] → acc[6:0]
Rotate right from m to itself
SR0 M, m
0 → m[7]
m[7:1] → m[6:0]
Rotate right from m to acc
SR1 M, a
1 → acc[7]
m[7:1] → acc[6:0]
Rotate right from m to itself
SR1 M, m
1 → m[7]
SWAP M, m
XOR M, a
XOR M, m
XORLA l
m[7:1] → m[6:0]
m[7:4] → acc[3:0]
m[3:0] → acc[7:4]
m[7:4] ←→ m[3:0]
(M) xor (acc) → (acc)
(M) xor (acc) → (M)
Immediate xor (acc) → (acc)
ADD M, a
ADD M, m
ADDC M,a
ADDC M,m
MATHEMATICS
(M)+(acc) → (acc)
1
(M)+(acc) → (M)
1
(M)+(acc) + (carry) → (acc)
1
(M)+(acc) + (carry) → (M)
1
SWAP M, a
45
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
ADDLA I
BC M, bn
BS M, bn
CLRA
CLR M
TABRDL M
TABRDH M
DAA M, a
DAA M, m
DAS
M, a
DAS
M, m
Immediate + (acc) → (acc)
Clear bit n of (M)
Set bit n of (M)
Clear accumulator
Clear memory M
Read low byte ROM table to (acc)
ROM table address={TB_BNK,index
of M }
Read high byte ROM table to (acc)
ROM table address={TB_BNK,index
of M }
Decimal Adjust M to ACC
If ACC[3:0] > 9 or DC=1
Then
ACC[3:0] ← ACC[3:0]+6,
DC1=~DC
else
ACC[3:0] ← ACC[3:0],
DC1=0
If ACC[7:4]+DC1 > 9 or C=1
Then
ACC[7:4] ← ACC[7:4]+6+DC1,
C=1
else
ACC[7:4] ← ACC[7:4]+DC1,
C=C
Decimal Adjust M to memory
If ACC[3:0] > 9 or DC=1
Then
M[3:0] ← ACC[3:0]+6,
DC1=~DC
else
M[3:0] ← ACC[3:0], DC1=0
If ACC[7:4]+DC1 > 9 or C=1
Then
M[7:4] ← ACC[7:4]+6+DC1,
C=1
else M[7:4] ← ACC[7:4]+DC1,
C=C
Decimal Adjust M to ACC
If ACC[3:0] > 9 or DC=0
Then
ACC[3:0] ← ACC[3:0]-6,
DC1=DC
Else
ACC[3:0] ← ACC[3:0], DC1=0
If ACC[7:4] - DC1 > 9 or C=0
Then
ACC[7:4] ← ACC[7:4]-6-DC1,
C=0
else
ACC[7:4] ← ACC[7:4]-DC1,
C=~C
Decimal Adjust M to memory
46
1
1
1
1
1
C, DC, Z
None
None
Z
Z
1111 1010 MMMM MMMM
1001 1bbb MMMM MMMM
1001 0bbb MMMM MMMM
1010 0010 0000 0000
1010 0011 MMMM MMMM
2
None
1101 1000 MMMM MMMM
2
None
1101 1001 MMMM MMMM
1
C
1101 0110 MMMM MMMM
1
C
1101 0111 MMMM MMMM
1
C
1101 1110 MMMM MMMM
1
C
1101 1111 MMMM MMMM
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
DEC M, a
DEC M, m
INC M, a
INC M, m
MOVAM m
MOV M, a
If ACC[3:0] > 9 or DC=0
Then
M[3:0] ← ACC[3:0]-6,
DC1=DC
else
M[3:0] ← ACC[3:0], DC1=0
If ACC[7:4]-DC1 > 9 or C=0
Then
M[7:4] ← ACC[7:4]-6-DC1,
C=1
else M[7:4] ← ACC[7:4]-DC1,
C=C
(M) - 1 → (acc)
(M) - 1 → (M)
(M) + 1 → (acc)
(M) + 1 → (M)
(acc) → (M)
(M) → (acc)
1
1
1
1
1
1
Z
Z
Z
Z
None
Z
1010 1100 MMMM MMMM
1010 1101 MMMM MMMM
1011 0000 MMMM MMMM
1011 0001 MMMM MMMM
1010 0001 MMMM MMMM
1010 0110 MMMM MMMM
MOV M, m
MOV2 M, a
(M) → (M)
(M) → (acc)
1
1
Z
None
1010 0111 MMMM MMMM
1111 0110 MMMM MMMM
MOV2 M, m
(M) → (M)
1
None
1111 0111 MMMM MMMM
MOVLA l
Immediate data → acc
1
None
1111 0000 iiii iiii
SUBLA I
(immediate data)-(Acc)→(Acc)
1
C, DC, Z
1111 0100 iiii iiii
SUB M, m
(M)–(acc) → (M)
1
C, DC, Z
1011 0101 MMMM MMMM
SUB M, a
(M) –(acc) → (acc)
1
C, DC, Z
1011 0100 MMMM MMMM
No operation
1
None
1111 1111 1111 1111
Clear watch-dog register
1
TO , PD
1111 1111 1111 0000
RET
Return (for lcall instruction )
2
None
1111 1111 1111 0001
IRETI
Return and enable INTM( for IRQ )
2
None
1111 1111 1111 0010
IRET
Return ( for IRQ )
2
None
1111 1111 1111 0011
Enter sleep (saving) mode
1
TO , PD
1111 1111 1111 0100
OTHER OPERATION
NOP
CLRWDT
SLEEP
CONDITION OPERATION
BTSC M, bn
If (bit n of (M))=0, skip next instruction 1 or 2
None
1000 1bbb MMMM MMMM
BTSS M, bn
If (bit n of (M))=1, skip next instruction 1 or 2
None
1000 0bbb MMMM MMMM
DECSZ M, a
(M) - 1 →(acc), skip if (acc) = 0
1 or 2
None
1010 1110 MMMM MMMM
DECSZ M, m
(M) - 1 → (M), skip if (M) = 0
1 or 2
None
1010 1111 MMMM MMMM
INCSZ M, a
(M) + 1 →(acc), skip if (acc) = 0
1 or 2
None
1011 0010 MMMM MMMM
INCSZ M, m
(M) + 1 → (M), skip if (M) = 0
1 or 2
None
1011 0011 MMMM MMMM
TMSS
If (acc) =0, skip next instruction
1 or 2
None
1011 1000 XXXX XXXX
TMSC M
If (M) = 0, skip next instruction
1 or 2
None
1011 1001 MMMM MMMM
47
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
8. 电气特性
8.1 绝对最大额定值
电源电压 …… Vss-0.3V to Vss+5.5V
输入电压 …… Vss-0.3V to VDD+0.3V
存储温度 …… –40℃ to 125℃
工作温度 ……–40℃ to 85℃
< 注 > 这里仅强调额定值,超出“绝对最大额定值”指定的范围会对芯片造成严重伤害。在其他条件下(规
格书列出的除外),此芯片的功能操作并不意味长期暴露在极端条件下会影响芯片的可靠性。
8.2
直流电特性
48
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
Symbol
Test Conditions
Parameter
VDD
VDD
IDD1
IDD2
IDD3
IDD4
IDD5
Operating Voltage
---
Operating Current
3.3V
(Crystal OSC)
5V
Operating Current
3.3V
(Crystal OSC)
5V
Operating Current
3.3V
(RC OSC)
5V
Operating Current
(Crystal OSC)
Operating Current
(Crystal OSC)
5V
5V
5.5
fsys =8MHZ
2.5
5.5
fsys =12MHZ
3.3
5.5
ADC disable .
ADC disable
No Load , fsys =12MHZ
ADC disable
Standby Current
3V
IOL
I/O Port Sink
Current
RPH
Pull-high Resistance
VAD
A/D input Voltage
RAD
Resolution
DNL
A/D Differential Non- Linear
INL
A/D Integral Non- Linear
5V
3
mA
4.2
mA
2
Vdd
V
I/O Port
0.8
V
WDT disable
1
WDT enable
6
WDT disable
1
WDT enable
2
Vin=VDD, VSS
5.5V
5.5V
mA
1.4
No Load , fsys =8MHZ
5V
Current
0.8
ADC disable .
5V
mA
1.7
No Load , fsys =4MHZ
Input Low Voltage
V
μA
0.8
ADC disable
VIL
IOH
Unit
26
No Load , fsys =4MHZ
I/O Port
I/O Port Driving
10
No Load , fsys =32KHZ
5V
Input LeakageCurrent
Max.
2.0
Input High Voltage
IIL
Typ.
fsys =4MHZ
VIH
ISTB
Min.
Conditions
1
Voh=5V
9.9
Voh=4.5V
17.6
Voh=4V
24.8
Vol=0.5V
24.5
Vol=0.75V
35.3
Vol=1V
43.8
μA
μA
mA
mA
3V
80
100
120
KΩ
5V
30
50
70
KΩ
--
0
VDD
V
15
Bits
--
4
LSB
--
6
LSB
49
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
IADc
VOSV
VCI
8.3
A/D Operating Current
Comparator Input Offset
Voltage
Comparator Input Voltage
Range
3.3V
200
5V
700
uA
--
-30
--
30
mV
--
0.2
--
VDD-0.7
V
交流电特性
Symbol
Parameter
Test Conditions
Conditions
VDD
Min
Typ
Max
5V
32
200
3V
32
200
5V
0.2
10
3V
0.2
10
5V
10
20
5V
3.4
4
4.6
2.2V
3.4
4
4.6
Unit
fsys1
System Clock
LS Crystal mode
fsys2
System Clock
NS Crystal mode
fsys3
System Clock
HS Crystal mode
fsys4
System Clock
Twdt
Watchdog Timer
Trht
Reset Hold Time
TAD
A/D clock period
TADC
A/D Conversion Time
34
tAD
TADCS
A/D Sampling Time
8
tAD
F TAD
F TADC
F RAD
TCOMP
RC mode
5V
3V
5V
3V
System-clk=4MHZ,
mode)
Clksel=01(4MHZ/8)
A/D Conversion Time
Resolution (Fast mode)
Comparator Response
Time
50
Mhz
Mhz
mS
20
mS
us
2
us
50
(Fast mode)
Mhz
20
3
A/D clock period(Fast
Khz
us
8
MSB
3
us
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
8.4
外部 RC 表格
R value(R2)
C valus(C4)
RC Frequency
R connect to (VDD, OSC1)
4.9M
0.1u (need)
32KHZ
The capacitor is need for stabile frequency
250K
0.1u (suggest)
455KHZ
116K
0.1u (suggest)
1MHZ
60K
0.1u (suggest)
2MHZ
32K
0.1u (suggest)
4MHZ
18K
0.1u (suggest)
8MHZ
14K
0.1u (suggest)
10MHZ
51
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
8.5
不同模式下的振荡器电路
C3
VDD
OSC2
RESETB
OSC1
R1
C2
C1
Crystal mode
VDD
OSC 2
R2
R1
RESETB
OSC 1
C4
C1
RC mode
Crystal mode
LP mode
NT mode
HS mode
Crystal
C2
C3
32 Khz
20~100P
20~100P
455 Khz
100P
100P
455 Khz
100P
100P
1 Mhz
20~100P
20~100P
2 Mhz
20~100P
20~100P
4 Mhz
20~100P
20~100P
8 Mhz
20~50P
20~50P
10 Mhz
20~50P
20~50P
12 Mhz
20~50P
20~50P
16 Mhz
20~50P
20~50P
20 Mhz
20~50P
20~50P
52
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
8.6
Internal RC Electrical Characteristics
(Ta= -40°C ~ 85°C , VDD=2.2V ~ 5.5V , VSS=0V)
Voltage
2.2V ~ 5.5V
Temperature
-40°C
25°C
85°C
Internal RC
4.6MHZ
4MHZ
3.4MHZ
5.0
4.5
4.0
3.5
3.0
-40
-20
0
20
40
60
80 85
Temperature (°C)
53
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
LVR (V)
8.7
54
2009/2/26 Rev.06
MK7A23P
8Bit Microcontroller with ADC
55
2009/2/26 Rev.06