SN8P2604
8-Bit Micro-Controller
SN8P2604
用户手册
S
O
Nii
S
O
SONIX 公司保留对以下所有产品在可靠性、功能和设计方面的改进做进一步说明的权利。SONIX 不承担由本手
册所涉及的产品或电路的运用和使用所引起的任何责任。SONIX 的产品不是专门设计应用于外科植入、生命维持和
任何 SONIX 产品的故障会对个体造成伤害甚至死亡的领域。如果将 SONIX 的产品应用于上述领域,即使这些是由
SONIX 在产品设计和制造上的疏忽引起的,用户也应赔偿所有费用、损失、合理的人身伤害或死亡所直接或间接产
生的律师费用,并且用户保证 SONIX 及其雇员、子公司、分支机构和销售商与上述事宜无关。
N
X 88
X
位
位
单
单
片
片
机
机
SONiX TECHNOLOGY CO., LTD Preliminary Version 0.2
SN8P2604
8-Bit Micro-Controller
修改记录
版本 日期 说明
VER 0.1
VER 0.2
VER 0.3
VER0.4
VER0.5
2004 年 1 月 第一版
2004 年 4 月 1. 增加应用注意事项章节。
2. 调整了特性的说明。
3. 调整了 “SN8P1604A 移植到 SN8P2604”表。
4. 在指令表中调整了 PUSH/POP 的说明。
5. 在 SSOP28 封装型号中调整了外围尺寸。
6. 更改了唤醒时间的公式。
2004 年 7 月 1. ORG 8 处的第一条指令必须是“JMP”或“NOP”。
2. 把寄存器 Y, Z, H, L, R 的复位值由 00H 改为未知。
3. 操作环境温度中封装型号的后面插入“D”表示温度范围为 -40℃~ +80℃。
4. 调整了部分电气特性: ViL, ViH, Ilekg, Rup, IoH。
5. 在 “应用注意事项 ”中增加 “开发工具版本”。
6. 把 “转接座 ”的名字改为 “OTP 烧录引脚 ”并调整了部分内容。
7. 删除了 “编程模板 ”。
2004 年 7 月 更改了指令周期中参数“S”的有关说明。
2004 年 7 月 1. 删除了 TC0 定时/计数器的说明并更改了烧录信息。
2. 更改了绿色模式的说明。
SONiX TECHNOLOGY CO., LTD Page 2 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
目 录
修改记录 .................................................................................................................................................................2
1
1
1
产品简介 ........................................................................................................................................................6
1.1 特性 ...........................................................................................................................................................6
1.2 系统时钟框图 .............................................................................................................................................8
1.3 引脚配置 ....................................................................................................................................................8
1.4 引脚说明 ....................................................................................................................................................9
1.5 引脚电路图 ................................................................................................................................................9
2
2
2
中央处理器(CPU).........................................................................................................................................10
2.1 内存 .........................................................................................................................................................10
2.1.1 程序存储器 (ROM) .................................................................................................................................. 10
2.1.1.1 复位向量地址( 000H) ........................................................................................................................... 10
2.1.1.2 中断向量地址( 0008H) ......................................................................................................................... 11
2.1.1.3 查表功能 ..................................................................................................................................................12
2.1.1.4 跳转表 ...................................................................................................................................................... 14
2.1.1.5 CHECKSUM 计算 ................................................................................................................................... 15
2.1.2 编译选项表( Code Option) ................................................................................................................. 16
2.1.3 数据存储器 (RAM) ..................................................................................................................................16
2.1.4 系统寄存器 ............................................................................................................................................. 17
2.1.4.1 系统寄存器列表 ....................................................................................................................................... 17
2.1.4.2 系统寄存器的位地址配置表 ...................................................................................................................... 18
2.1.4.3 累加器( ACC) ....................................................................................................................................... 19
2.1.4.4 程序状态寄存器( PFLAG) ..................................................................................................................... 20
2.1.4.5 程序计数器( PC) ................................................................................................................................... 21
2.1.4.6 H, L 寄存器 ..............................................................................................................................................23
2.1.4.7 Y, Z 寄存器 ..............................................................................................................................................24
2.1.4.8 R 寄存器 ..................................................................................................................................................24
2.2 寻址模式 ..................................................................................................................................................25
2.2.1 立即寻址模式 ......................................................................................................................................... 25
2.2.2 直接寻址模式 ......................................................................................................................................... 25
2.2.3 间接寻址模式 ......................................................................................................................................... 25
2.3 堆栈操作 ..................................................................................................................................................26
2.3.1 概述 ........................................................................................................................................................26
2.3.2 堆栈指针寄存器 ......................................................................................................................................27
2.3.3 堆栈操作举例 ......................................................................................................................................... 28
3
3
3
复位…… ......................................................................................................................................................29
3.1 概述 .........................................................................................................................................................29
3.2 上电复位 ..................................................................................................................................................29
3.3 外部复位 ..................................................................................................................................................30
3.3.1 外部复位电路 ......................................................................................................................................... 30
3.4 看门狗复位 ..............................................................................................................................................31
3.5 低电压侦测( LVD) ................................................................................................................................31
4
4
4
系统时钟 ......................................................................................................................................................32
4.1 概述 .........................................................................................................................................................32
4.2 时钟框图 ..................................................................................................................................................32
4.3 OSCM 寄存器 ..........................................................................................................................................33
4.4 系统高速时钟 ...........................................................................................................................................34
4.4.1 外部高速时钟 ......................................................................................................................................... 34
4.4.1.1 晶体振荡器 ............................................................................................................................................... 34
4.4.1.2 RC 振荡器 ................................................................................................................................................ 34
4.4.1.3 外部时钟输入 ........................................................................................................................................... 34
4.4.2 系统低速时钟 ......................................................................................................................................... 35
4.4.3 振荡器频率测试 ......................................................................................................................................35
5
5
5
系统操作模式 ...............................................................................................................................................36
5.1 概述 .........................................................................................................................................................36
5.2 系统模式转换 ...........................................................................................................................................37
5.2.1 系统模式转换 ......................................................................................................................................... 38
5.3 唤醒时间 ..................................................................................................................................................39
5.3.1 概述 ........................................................................................................................................................39
SONiX TECHNOLOGY CO., LTD Page 3 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
5.3.2 唤醒时间 ................................................................................................................................................39
5.3.3 P1W 唤醒控制寄存器 .............................................................................................................................39
6
6
6
中断…… ......................................................................................................................................................40
6.1 概述 .........................................................................................................................................................40
6.2 INTEN 中断使能寄存器 ...........................................................................................................................41
6.3 INTRQ 中断请求寄存器 ...........................................................................................................................41
6.4 中断操作举例 ...........................................................................................................................................42
6.4.1 总中断操作 ............................................................................................................................................. 42
6.4.2 PUSH, POP 程序 ................................................................................................................................... 42
6.4.3 INT0(P0.0)中断 ......................................................................................................................................43
6.4.4 INT1(P0.1)中断操作 ...............................................................................................................................44
6.4.5 T0 中断操作 ........................................................................................................................................... 45
6.4.6 TC1 中断操作 .........................................................................................................................................46
6.4.7 多个中断操作 ......................................................................................................................................... 47
7
7
7
I/O 端口 ........................................................................................................................................................48
7.1 I/O 端口模式 ............................................................................................................................................48
7.2 I/O 上拉电阻寄存器 .................................................................................................................................49
7.3 I/O 漏极开路寄存器 .................................................................................................................................50
7.4 I/O 口数据寄存器 .....................................................................................................................................51
8
8
8
定时器… ......................................................................................................................................................52
8.1 看门狗定时器 ...........................................................................................................................................52
8.2 定时器 T0.................................................................................................................................................53
8.2.1 概述 ........................................................................................................................................................53
8.2.2 T0M 模式寄存器 .....................................................................................................................................53
8.2.3 T0C 计数寄存器 .....................................................................................................................................54
8.2.4 T0 操作流程 ........................................................................................................................................... 55
8.3 定时/计数器 TC1......................................................................................................................................56
8.3.1 概述 ........................................................................................................................................................56
8.3.2 TC1M 模式寄存器 ..................................................................................................................................56
8.3.3 TC1C 计数寄存器 ..................................................................................................................................57
8.3.4 TC1C 溢出时间 ......................................................................................................................................58
8.3.5 TC1R 自动装载寄存器 ........................................................................................................................... 58
8.3.6 TC1 操作流程 .........................................................................................................................................59
9
9
9
指令表…. .....................................................................................................................................................65
1
0
1
0
1
0
电气特性 ......................................................................................................................................................66
10.1 极限参数 ..................................................................................................................................................66
10.2 电气特性 ..................................................................................................................................................66
1
1
1
1
1
1
应用注意事项 ...............................................................................................................................................67
11.1 开发工具版本 ...........................................................................................................................................67
11.1.1 ICE(在线仿真器 ) ....................................................................................................................................67
11.1.2 OTP 烧录器 ............................................................................................................................................ 67
11.1.3 SN8IDE..................................................................................................................................................67
11.2 编译选项 (CODE OPTION).......................................................................................................................68
11.2.1 FCPU 编译选项 ......................................................................................................................................68
11.2.2 NOISE FILTER 编译选项 .......................................................................................................................68
11.2.3 WATCHDOG .........................................................................................................................................68
11.3 中断向量 (ORG 8).....................................................................................................................................69
11.4 指令 .........................................................................................................................................................70
11.4.1 B0MOV M, I ...........................................................................................................................................70
11.4.2 B0XCH A, M ..........................................................................................................................................70
11.5 S8KD-2 ICE 仿真 .....................................................................................................................................71
11.5.1 ICE_MODE ............................................................................................................................................ 71
11.5.2 指令周期 ................................................................................................................................................ 72
11.5.3 系统时钟 ................................................................................................................................................ 74
11.5.4 看门狗定时器 .........................................................................................................................................75
11.5.5 P0 仿真 ..................................................................................................................................................76
11.5.5.1 @P00_MODE, @P01_MODE .................................................................................................................76
11.5.5.2 @P00_OUT, @P01_OUT ....................................................................................................................... 76
11.5.5.3 PEDGE .................................................................................................................................................... 77
SONiX TECHNOLOGY CO., LTD Page 4 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
11.5.6 PWM 占空比 ..........................................................................................................................................78
11.5.7 其它宏指令 .............................................................................................................................................79
1
2
1
2
1
2
OTP 烧录引脚 ..............................................................................................................................................80
12.1 EASY WRITER 转接板的引脚配置 ..............................................................................................................80
12.2 WRITER V3.0 和 WRITER V2.5 转接板的引脚配置 ....................................................................................80
12.3 SN8P2604 烧录引脚分配表 .....................................................................................................................81
1
3
1
3
1
3
封装…… ......................................................................................................................................................82
13.1 SK-DIP 28 PIN.........................................................................................................................................82
13.2 SOP 28 PIN .............................................................................................................................................83
13.3 SSOP 20 PIN...........................................................................................................................................84
SONiX TECHNOLOGY CO., LTD Page 5 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
1
1
1
产品简介
1.1 特性
存储器配置
OTP ROM: 4K * 16 bits.
RAM:128 * 8 bits.
8 层堆栈缓存器
I/O 引脚配置
双向输入输出:P0, P1, P2, P5
漏极开路引脚:P1.0, P1.1
具有唤醒功能的引脚:P0, P1 的电平变换
内部上拉电阻:P0, P1, P2, P5
外部中断输入:P0.0 ,P0.1
外部中断:P0.0 由 PEDGE 控制,P0.1 由下降沿触发。 外部高速时钟:晶体,最大 16 MHz
功能强大的指令集
每个指令周期为一个时钟周期(1T)
大多数指令的执行时间均为一个指令周期
JMP 指令可直接寻址整个 ROM 区
CALL 指令可直接寻址整个 ROM 区
查表功能( MOVC)可直接寻址整个 ROM 区
SK-DIP 28
SOP 28
SSOP 28
) 特性比较表
芯片型号
SN8P1604A 4K*16 128 8 V 22 - V 10 SK-DIP28/SOP28
SN8P2604 4K*16 128 8 V V 24 V V 11 SK-DIP28/SOP28/SSOP28
ROM RAM
定时器 PWM
堆栈
T0 TC1
绿色模式
I/O
4 个中断源
2 个内部中断源: T0, TC1.
2 个外部中断源: INT0, INT1.
2 个 8 位定时 /计数器
T0:基本定时器
TC1:自动装载定时器 /PWM1/Buzzer 输出
内置看门狗定时器
系统时钟和操作模式
外部高速时钟:RC ,最大 10 MHz
内部低速时钟:RC,16KHz(3V),32KHz(5V)
普通模式:高低速时钟同时运行
低速模式:仅低速时钟运行
睡眠模式:高低速时钟均停止
绿色模式:由定时器 T0 周期性唤醒
封装(支持的芯片格式)
Buzzer
唤醒功能引脚 封装
SONiX TECHNOLOGY CO., LTD Page 6 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
) SN8P1604A 升级到 SN8P2604
项目 SN8P2604 SN8P1604A
DAA
PUSH/POP
B0MOV M, I
B0XCH A, M
R0M 的 ORG8 处的有效指令 JMP 或 NOP 无限制
AC 抗干扰能力 很好(添加了 1 个 47uF 的旁路电容) 一般
运算能力 (16Mhz Crystal) 最大 16 MIPS 最大 4 MIPS
M 的地址不能是 80h~FFh
PWM 分辨率: 8/6/5/4 位
高速 PWM
High Clock = 16MHz
8 位分辨率时高达 31.25K
4 位分辨率时高达 500K
定时器
I/O 引脚的数目
可编程漏极开路输出
内置上拉电阻 引脚配置(利用寄存器 PnUR) 端口配置(利用寄存器 PUR)
绿色模式 有(T0 定时器)
由寄存器 PEDGE 控制:
P0.0 中断触发沿
P00G[1:0]:(位 4 和位 3)
00=保留, 01=上升沿,
10=下降沿, 11=改变电平
P0.1 中断触发边沿
P0.0 唤醒功能
P0.1 唤醒功能
P1 唤醒功能 改变电平
唤醒时间 1/Fosc * 4096 (sec) + X’tal 稳定时间 1/Fosc * 2048 (sec) + X’tal 稳定时间
施密特触发输入 所有输入引脚 P0.0,P0.1,RST,XIN
看门狗定时器时钟源 仅内部低速 RC 时钟 内部低速 RC 时钟和外部高速时钟
看门狗清零
待机电流
LVD
1.8V,一直处于使能状态 1.8V,一直处于使能状态
注:电平变化触发指上升沿和下降沿触发。
I 不能是 0E6h 和 0E7h
不可用 可用
可用 不可用
-
-
PWM 分辨率:只 8 位
在 16MHz 等于 7.8125K
T0/TC1 TC1
24 (P0.2) 22
P1.0/P1.1 -
-
由寄存器 PEDGE 控制:
PEDGEN(位 7):
0=下降沿, 1=由 P00G[1:0]定义
P00G[1:0]:(位 4 和位 3)
00=保留, 01=下降沿
10=上升沿, 11=改变电平
下降沿 P0.1 无中断功能
由寄存器 PEDGE 控制:
PEDGEN(位 7):
电平变化
0=下降沿, 1=由 P00G[1:0]定义
P00G[1:0]:(位 4 和位 3)
00=保留, 01=下降沿
10=上升沿, 11=改变电平
由寄存器 PEDGE 控制:
电平变化
PEDGEN(位 7):
0=低电平唤醒, 1=改变电平
由寄存器 PEDGE 控制:
PEDGEN(位 7):
0=低电平唤醒, 1=改变电平
MOV A, #0x5A
B0MOV WDTR, A
1uA/5V 10uA/5V
B0BSET FWDRST
SONiX TECHNOLOGY CO., LTD Page 7 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
1.2 系统时钟框图
SN8P2604
SN8P2604
PC
PO R T 0
PORT 0
FLAGS
FLAGS
POR T 1
PORT 1
PC
IR
IR
ALU
ALU
AC C
ACC
INT E RRU PT
INTERRUPT
CONT R O L
CONTROL
R
R
O
O
M
M
SYSTEM REGISTER
SYSTEM REGISTER
POR T 2
PORT 2
H-OSC
H-OSC
TIMING GENERATOR
TIMING GENERATOR
RAM
RAM
Internal
Internal
Low
Low
RC
RC
T I M E R & COU N T E R
TIMER & COUNTER
POR
POR
Watch
Watch
Dog
Dog
POR T 5
PORT 5
PWM
PWM
PWM & BUZZER
PWM & BUZZER
1.3 引脚配置
SN8P2604K (SK-DIP 28 pins)
SN8P2604S (SOP 28 pins)
SN8P2604X (SSOP 28 pins)
P5.3/BZ1/PWM1 9 20 P2.2
P0.1/INT1 1 U 28 RST/VPP/P0.2
VDD 2 27 XIN
P5.4 3 26 XOUT/Fcpu
VSS 4 25 P2.7
P0.0/INT0 5 24 P2.6
P5.0 6 23 P2.5
P5.1 7 22 P2.4
P5.2 8 21 P2.3
P1.0 10 19 P2.1
P1.1 11 18 P2.0
P1.2 12 17 P1.7
P1.3 13 16 P1.6
P1.4 14 15 P1.5
SN8P2604K
SN8P2604S
SN8P2604X
SONiX TECHNOLOGY CO., LTD Page 8 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
1.4 引脚说明
引脚名称 类型 说明
VDD, VSS P
P0.2/RST/VPP I, P
XIN I
XOUT/Fcpu I/O
P0.0/INT0 I/O
P0.1/INT1 I/O
P1.0~P1.1 I/O
P1.2~P1.7 I/O
P2.0~P2.7 I/O
P5.0~P5.2, P5.4 I/O
P5.3/BZ1/PWM1 I/O
数字电路的电源输入引脚
P0.2:禁止外部复位功能时为单向输入引脚(施密特结构)/无内置上拉电阻。
RST:系统复位输入引脚,施密特结构,低电平触发,通常保持高电平。
VPP: OTP ROM 编程引脚。
选择外部振荡器 (晶体或 RC)时为振荡器输入引脚。
XOUT:选择外部晶体振荡器时为振荡器输出引脚
Fcpu:使能外部 RC 模式时为信号输出引脚。
P0.0:双向输入输出引脚,施密特结构(输入模式下)。内置上拉电阻。
INT0 触发引脚(施密特结构)
P0.1:双向输入输出引脚,施密特结构(输入模式下)。内置上拉电阻。
INT1 触发引脚(施密特结构)
TC1 事件计数器时钟输入引脚。
P1.0, P1.1:双向输入输出引脚/漏极开路引脚/施密特结构(输入模式下)/内置
上拉电阻。
P1.2~P1.7:双向输入输出引脚/施密特结构(输入模式下)/内置上拉电阻。
双向输入输出引脚 /施密特结构(输入模式下) /内置上拉电阻。
P5:双向输入输出引脚/施密特结构(输入模式下)/内置上拉电阻。
P5.3:双向输入输出引脚/施密特结构(输入模式下)/内置上拉电阻。
TC1 /2 :Buzzer 或 PWM 信号输出引脚。
1.5 引脚电路图
Port 0, 1, 2, 5 structure:
Port 1.0, P1.1 structure:
Pin
Pin Pin
PnM, PnUR
PnM, PnUR
Pin
Pin
Pull-Up
Pull-Up
PnM, PnUR
PnM, PnUR
Pull-Up
Pull-Up
PnM
PnM PnM
Output
Output
Latch
Latch
Ou t p ut
Output
La t c h
Latch
PnM
PnM PnM
PnM
PnM PnM
PnM
PnM PnM
Int. bus
Int. bus
Int. bus
Int. bus
Open-Drain
P1OC
P1OC P1OC
Open-Drain
Port 0.2 structure:
Int. bus
Pin
Pin Pin
Ext. Rst Code Option
Ext. Rst Code Option
Int. bus
Int. Rst
Int. Rst
SONiX TECHNOLOGY CO., LTD Page 9 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2
2
2
中央处理器 (CPU)
2.1 内存
2.1.1 程序存储器 (ROM)
) 4K words ROM
0000H
0001H 跳转到用户程序
0002H 跳转到用户程序
0003H
0004H
0005H
0006H
0007H
0008H
0009H 用户程序区
.
.
000FH
0010H
0011H
.
.
.
.
.
0FFBH
0FFCH
0FFDH
0FFEH
0FFFH
ROM
复位向量 程序开始
通用存储区
跳转到用户程序
保留区
中断向量 中断入口地址
通用存储区
保留区
程序结束
2.1.1.1 复位向量地址(000H )
one-word 的复位向量地址用来执行系统复位。
) 上电复位 (NT0=1, NPD=0)
) 看门狗复位 (NT0=0, NPD=0)
) 外部复位 (NT0=1, NPD=1)
上电复位或看门狗计数器溢出复位后,系统从地址 0000H 开始重新执行程序,所有的系统寄存器恢复为默认值。
下面的例子给出了如何在程序存储器里定义复位向量。
 例: 定义复位向量
ORG 0 ; 0000H
JMP START ; 跳转到用户程序区
. ; 0004H ~ 0007H 保留
ORG 10H
START: ; 0010H,
. ; 用户程序
.
ENDP ; 程序结束
SONiX TECHNOLOGY CO., LTD Page 10 Preliminary Version 0.3
用户程序的起始位置
SN8P2604
8-Bit Micro-Controller
2.1.1.2 中断向量地址(0008H )
一旦有中断响应,程序计数器(PC )的值就会存入堆栈缓冲器中并跳转至 0008H 处执行中断服务程序。用户使
用时必须自行定义中断向量,在 ROM 的地址 8 (ORG 8 )处的指令必须为 JMP 或 NOP 。下面的例子给出了如何在
程序中定义中断向量。
注: “PUSH”, “POP”指令保存和恢复 ACC 和 PFLAG,除了 PFLAG 的复位标志( NT0, NPD)
注: ROM 地址 8 处的指令必须为 “JMP”或 “NOP”。
 例 1:定义中断向量,主程序位于中断服务程序后面。
OR
JMP START ;
. ; 0004H ~ 0007H 保留
OR
NOP
B0XC
PUS
.
POP ; 恢复工作寄存器
B0XC
RETI ; 中断返回
START: ;
. ; 用户程序
.
JMP STAR
ENDP ; 程序结束
 例 2:定义中断向量,中断服务程序位于主程序后面。
ORG 0 ; 0000H
JMP START ;
. ; 0004H ~ 0007H 保留
ORG 08
JMP MY_IRQ ; 0008H,
ORG 10H
START: ; 0010H,
. ; 用户程序
.
JMP START ; 用户程序结束
MY_IRQ: ;
B0XCH A, ACCBUF ; B0XCH 指令不会影响标志位 C ,Z
PUSH ; 保存工作寄存器
.
POP ; 恢复工作寄存器
B0XCH A, ACCBUF
RETI ; 中断返回
ENDP ; 程序结束
注:从上面的程序中很容易得出 SONIX 的主要编程规则,有以下几点:
1.地址 0000H 处的 “JMP”指令使程序从头开始执行。
2.0004H~0007H 区域由系统保留,用户必须跳过 0004H~0007H。我们强烈建议用户在对 ROM 区作 CHECKSUM
时要跳过该区域,详见下面的 Checksum 计算章节。
0 ; 0000
A, ACCBU
A, ACCBU
; 中断服务程序
; 保存工作寄存器
; 用户程序结束
跳转到用户程序
; B0XCH 不会影响到 C, Z
用户程序起始地址
跳转到用户程序
.
跳转到中断服务程序
用户程序起始地址
中断服务程序的起始地址
SONiX TECHNOLOGY CO., LTD Page 11 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.1.3 查表功能
在 ROM 的查表功能程序中, Y寄存器指向数据 ROM 地址的高 8 位,Z 寄存器指向低 8 位地址,执行 MOVC
后,数据的低字节存入累加器 ACC 中,而数据的高字节存入 R 寄存器中。
 例:查找位于 “table1”的 ROM 数据 .
B0MOV Y, #TABLE1$M ; 取得表格地址高字节
B0MOV Z, #TABLE1$L ; 取得表格地址低字节
MOVC ; 查表 , R = 00H, ACC = 35H
; 索引地址加 1
INCMS Z ; Z+1
JMP
INCMS
NOP ;
;
: MOVC ; 查表, R = 51H, ACC = 05H.
. . ;
TABLE1: DW 0035H ; 定义表格数据
DW 5105H ; “
DW 2012H ; “
注意:当 Z 寄存器从 0XFFH 增至 0X00H 跨越边界时,Y 寄存器不会自动增加。所以,用户必须非常小心
处理这种情况,避免查表错误。如果 Z 寄存器发生溢出,Y 寄存器必须增 1 。下面给出的宏指令 INC_YZ
提供了解决此问题的方法。
 例:宏指令 INC_YZ
INC
YZ MACRO
INCMS Z ; Z+1
JMP
INCMS Y ; Y+1
NOP ; Y 无溢出
:
ENDM
 例:通过宏指令 “INC_YZ” 调整上例。
B0MOV Y, #TABLE1$M ; 取得表格地址高字节
B0MOV Z, #TABLE1$L ; 取得表格地址低字节
MOVC ; 查表,R=00H,
INC
: MOVC ; 查表,R=51H, ACC=05H
…
TABLE1: DW 0035H ; 定义一个字(16 位)的数据
DW 5105H
DW 2012H
…
YZ ; 索引地址加 1
F ; 无进位
; Z 溢出 (FFH Æ 00)则, Æ Y=Y+1
F ; Z 无溢出
CC=35H
SONiX TECHNOLOGY CO., LTD Page 12 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
另一种方式的查表是通过累加器来增加间接寄存器 Y 和 Z ,但要注意是否有进位发生。
 例 : 执行指令 B0ADD/ADD 增加 Y、 Z
B0MOV Y, #TABLE1$M ; 取得表格地址高字节
B0MOV Z, #TABLE1$L ; 取得表格地址低字节
B0MOV A, BUF ; Z = Z + BUF.
B0ADD Z, A
B0BTS1 FC ; 检查进位表示 C
JMP GETDATA ; FC = 0
INCMS
NOP
GETDATA: ;
MOVC ; 查表,若 BUF = 0,结果是 0x0035
; 若 BUF = 1,结果是 0x5105
; 若 BUF = 2, 结果是 0x2012
TABLE1: DW 0035H ; 定义一个 WORD 的表格数据
DW 5105H ; “
DW 2012H ; “
; FC = 1. Y+1.
注:“B0MOV M, I” 指令不支持“I=0xE6” 和“I=0xE7” ,在查表功能中,用户必须检查 Y , Z 的值,不能是 “0xE6”
和“0xE7” 。在表格的开始设置 ROM 的地址,避开“0xE6” 和“0xE7” 。
 例:通过 ORG 指令设置 TABLE1 的开始地址以避开 “0xE6” 和 “0xE7” 。
B0MOV Y, #TABLE1$M
B0MOV Z, #TABLE1$L
GETDATA: ;
MOVC
…
TABLE1: DW 0035H
DW 5105H ; “
DW 2012H ; “
…
B0MOV A, BUF ; Z = Z + BUF.
B0ADD Z, A
B0BTS1 FC
JMP GETDATA ; FC = 0
INCMS Y ; FC = 1. Y+1.
NOP
ORG 0x0100
; 取得表格的高字节
; 取得表格的低字节
; 检查进位标志
; 查表,若 BUF = 0,数据为 0x0035
; 若 BUF = 1,数据为 0x5105
; 若 BUF = 2,数据为 0x2012
; 设置 TABLE1 的开始地址是 0x0100.
; 定义一个 word( 16 位)的表格数据
SONiX TECHNOLOGY CO., LTD Page 13 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.1.4 跳转表
跳转表操作可以完成多个地址跳转功能,将程序计数器的低字节 PCL 与累加器 ACC 相加从而得到一个指向新的
跳转地址的程序计数器值,这种方法可以方便多个任务的处理。
 例:跳转表
ORG 0X0100 ; 跳转表最好放在 ROM 的边界位置
B0ADD PCL,
JMP
JMP
JMP
JMP
SONIX 提供了一条宏指令以保证安全的跳转表操作,这条宏指令会检查 ROM 的边界,并自动将跳转表移动到
正确的位置。但宏指令会占用 ROM 的存储空间。
JMP_A MACRO VAL
IF
JMP
ORG
ENDIF
ENDM
DD PCL,
; PCL = PCL + ACC,但 PCH 不会改变
0POINT ; ACC = 0, 跳转到 A0POINT
1POINT ; ACC = 1, 跳转到 A1POINT
2POINT ; ACC = 2, 跳转到 A2POINT
3POINT ; ACC = 3, 跳转到 A3POINT
$+1) !& 0XFF00) !!= (($+(VAL)) !& 0XFF00
0XFF
0XFF
注: “VAL”为跳转列表的个数
 例: “@JMP_A” 在 SONIX 的宏文件中称为 “MACRO3.H”.
B0MOV
JMP
JMP
JMP
JMP
JMP
如果跳转表格的位置是从 00FFH 到 0100H,那么宏指令 “@JMP_A”将使跳转表格从 0100h 开始。
 例: “@JMP_A”操作。
; 程序编译前
ROM address
B0MOV
0X00FD JMP
0X00FE JMP
0X00FF JMP
0X0100 JMP
0X0101 JMP
; 程序编译后
ROM address
B0MOV A, BUF0 ; “BUF0” 的值为 0-4
@JMP_A 5 ; 要跳转的总的地址数是 5.
0X0100 JMP A0POINT ; ACC = 0, 跳转到 A0POINT
0X0101 JMP A1POINT ; ACC = 1, 跳转到 A1POINT
0X0102 JMP A2POINT ; ACC = 2, 跳转到 A2POINT
0X0103 JMP A3POINT ; ACC = 3, 跳转到 A3POINT
0X0104 JMP A4POINT ; ACC = 4, 跳转到 A4POINT
JMP_A 5 ; 要跳转的总的地址数是 5.
JMP_A 5 ; 要跳转的总的地址数是 5.
, BUF0 ; “BUF0” 的值为 0~4
0POINT ; ACC = 0, 跳转到 A0POINT
1POINT ; ACC = 1, 跳转到 A1POINT
2POINT ; ACC = 2, 跳转到 A2POINT
3POINT ; ACC = 3, 跳转到 A3POINT
4POINT ; ACC = 4, 跳转到 A4POINT
, BUF0 ; “BUF0” 的值为 0-4
0POINT ; ACC = 0, 跳转到 A0POINT
1POINT ; ACC = 1, 跳转到 A1POINT
2POINT ; ACC = 2, 跳转到 A2POINT
3POINT ; ACC = 3, 跳转到 A3POINT
4POINT ; ACC = 4, 跳转到 A4POINT
SONiX TECHNOLOGY CO., LTD Page 14 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.1.5 CHECKSUM 计算
ROM 中的 0004H~0007H 和最后的一个地址是系统保留区,用户应该在计算 Checksum 时跳过这一区域。
 例:下面的程序给出了在计算 Checksum 时如何跳过保留区。
MOV A,#END_USER_CODE$L
B0MOV END_ADDR1,A
MOV A,#END_USER_CODE$M
B0MOV END_ADDR2,A
CLR Y
CLR Z
@@:
CALL YZ_CHECK
MOVC ;
B0BSET FC ;
ADD DATA1,A ;
MOV A,R
ADC DATA2,A ;
JMP END_CHECK
AAA:
INCMS Z ; Z=Z+1
JMP @B ;
JMP Y_ADD_1 ;
END_CHECK:
MOV A,END_ADDR1
CMPRS A,Z
JMP AAA ;
MOV A,END_ADDR2
CMPRS A,Y ;
JMP AAA
JMP CHECKSUM_END
YZ_CHECK:
MOV A,#04H
CMPRS A,Z ;
RET
MOV A,#00H
CMPRS A,Y ;
RET ;
INCMS Z ;
INCMS Z
INCMS Z
INCMS Z
RET ;
Y_ADD_1:
INCMS Y
NOP
JMP @B ;
CHECKSUM_END:
……….
……….
END_USER_CODE: ;
; 保存地址的低字节
; 保存地址的高字节
; 清 Y 寄存器
; 清 Z 寄存器
; 调用函数,判断是否到 0004H 保留区
; 跳转到判断代码结束的函数
; 判断是否计算到代码结束位置
; 不是则继续计算
; 是则结束计算
; 检查是否到 0004H 位置
; 不是 0004H 则返回继续计算
; 递增 Y,继续计算
SONiX TECHNOLOGY CO., LTD Page 15 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.2 编译选项表(Code Option )
编译选项 内容 功能说明
High_Clk
Watch_Dog
Fcpu
Reset_Pin
Security
Noise_Filter
注:
RC
32K X’tal
12M X’tal
4M X’tal
Always_On
Enable
Disable
Fosc/1
Fosc/2
Fosc/4
Fosc/8
Reset
P02
Enable
Disable
Enable
Disable
1. 在高干扰环境下,强烈建议使能“Noise Filter”选项,并使看门狗选择“Always_On”选项。使能
“Noise_Filter”后就会限制 Fcpu = Fosc/4 ~ Fosc/8.
2. 如果用户选择看门狗为“Always_On”,编译器会自动使能看门狗功能。
3. Fcpu 编译选项仅对高速时钟有效。在 slow 模式下, Fcpu=Fosc/4(Fosc 为内部低速时钟 )。
外部振荡器采用廉价 RC 振荡电路,XOUT 为 Fcpu 输出引脚。(P1.2)
外部振荡器采用低功耗振荡器(如 32.768KHz)
外部振荡器采用高频晶体振荡器(如 12MHz)
外部振荡器采用一般晶体振荡器(如 4MHz)
看门狗定时器在省电模式和绿色模式下仍然处于使能状态。
使能看门狗定时器功能,看门狗定时器在省电模式和绿色模式下被禁止。
禁止看门狗定时器功能
指令周期为 1 个振荡器时钟。
指令周期为 2 个振荡器时钟。
指令周期为 4 个振荡器时钟。
指令周期为 8 个振荡器时钟。
使能外部复位引脚功能
P0.2 作为单向输入端,没有上拉电阻
允许 ROM 程序代码加密
禁止 ROM 程序代码加密
使能噪音滤除功能,Fcpu=Fosc/4~Fosc/8.
禁止噪音滤除功能,Fcpu=Fosc/1~Fosc/8.
2.1.3 数据存储器(RAM)
) 128 X 8-bit RAM
Address RAM
000h
“
“
“
“
“
BANK 0
07Fh
080h
“
“
“
“
“
0FFh
通用寄存器区
系统寄存器区
BANK 0 结束区
Bank 0 的 80h~FFh 是系统寄存器区
共 128 bytes.
SONiX TECHNOLOGY CO., LTD Page 16 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4 系统寄存器
2.1.4.1 系统寄存器列表
0 1 2 3 4 5 6 7 8 9 A B C D E F
L H R Z Y - PFLAG - - - - - - - - -
8
- - - - - - - - - - - - - - - -
9
- - - - - - - - - - - - - - - -
A
- - - - - - - - P0M - - - - -
B
P1W P1M P2M - - P5M - - INTRQ INTEN OSCM - WDTR TC1R PCL PCH
C
P0 P1 P2 - - P5 - - T0M T0C - - TC1M TC1C TC1R STKP
D
P0UR P1UR P2UR - - P5UR @HL @YZ - P1OC - - - - - -
E
STK7L STK7H STK6L STK6H STK5L STK5H STK4L STK4H STK3L STK3H STK2L STK2H STK1L STK1H STK0L STK0H
F
说明:
PFLAG = ROM 页和特殊标志寄存器 R = 工作寄存器和 ROM 查表数据缓存器
H, L = 工作寄存器,@HL 和 ROM 寻址寄存器 Y, Z = 工作寄存器,@YZ 和 ROM 寻址寄存器
P1W = P1 口唤醒功能寄存器 PEDGE = P0.0 模式控制寄存器
PnM = Pn 口输入/输出模式控制寄存器 Pn = Pn 口数据缓存器
P1OC = P1 口开漏控制寄存器 PnUR = Pn 口上拉电阻控制寄存器
INTRQ = 中断请求寄存器 INTEN = 中断使能寄存器
OSCM = 振荡模式寄存器 PCH, PCL = 程序计数器
T0M = T0 模式寄存器 T0C = T0 计数寄存器
TC1M = TC1 模式寄存器 TC1C = TC1 计数寄存器
TC1R =
STKP = 堆栈指针 STK0~STK7 = 堆栈
@YZ = 间接寻址寄存器 @HL = 间接寻址寄存器
TC1 自动装载数据缓存器 WDTR = 看门狗清零寄存器
- PEDGE
SONiX TECHNOLOGY CO., LTD Page 17 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.2 系统寄存器的位地址配置表
地址 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 R/W 备注
080H LBIT7 LBIT6 LBIT5 LBIT4 LBIT3 LBIT2 LBIT1 LBIT0 R/W L
081H HBIT7 HBIT6 HBIT5 HBIT4 HBIT3 HBIT2 HBIT1 HBIT0 R/W H
082H RBIT7 RBIT6 RBIT5 RBIT4 RBIT3 RBIT2 RBIT1 RBIT0 R/W R
083H ZBIT7 ZBIT6 ZBIT5 ZBIT4 ZBIT3 ZBIT2 ZBIT1 ZBIT0 R/W Z
084H YBIT7 YBIT6 YBIT5 YBIT4 YBIT3 YBIT2 YBIT1 YBIT0 R/W Y
086H NT0 NPD C DC Z R/W PFLAG
0B8H P01M P00M R/W P0M
0BFH P00G1 P00G0 R/W PEDGE
0C0H P17W P16W P15W P14W P13W P12W P11W P10W W P1W
0C1H P17M P16M P15M P14M P13M P12M P11M P10M R/W P1M
0C2H P27M P26M P25M P24M P23M P22M P21M P20M R/W P2M
0C5H P54M P53M P52M P51M P50M R/W P5M
0C8H TC1IRQ T0IRQ P01IRQ P00IRQ R/W INTRQ
0C9H TC1IEN T0IEN P01IEN P00IEN R/W INTEN
0CAH CPUM1 CPUM0 CLKMD STPHX R/W OSCM
0CCH WDTR7 WDTR6 WDTR5 WDTR4 WDTR3 WDTR2 WDTR1 WDTR0 W WDTR
0CEH PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 R/W PCL
0CFH PC11 PC10 PC9 PC8 R/W PCH
0D0H P02 P01 P00 R/W P0
0D1H P17 P16 P15 P14 P13 P12 P11 P10 R/W P1
0D2H P27 P26 P25 P24 P23 P22 P21 P20 R/W P2
0D5H P54 P53 P52 P51 P50 R/W P5
0D8H T0ENB T0rate2 T0rate1 T0rate0 R/W T0M
0D9H T0C7 T0C6 T0C5 T0C4 T0C3 T0C2 T0C1 T0C0 R/W T0C
0DCH TC1ENB TC1rate2 TC1rate1 TC1rate0 TC1CKS ALOAD1 TC1OUT PWM1OUT R/W TC1M
0DDH TC1C7 TC1C6 TC1C5 TC1C4 TC1C3 TC1C2 TC1C1 TC1C0 R/W TC1C
0DEH TC1R7 TC1R6 TC1R5 TC1R4 TC1R3 TC1R2 TC1R1 TC1R0 W TC1R
0DFH GIE STKPB2 STKPB1 STKPB0 R/W STKP
0E0H P01R P00R W P0UR
0E1H P17R P16R P15R P14R P13R P12R P11R P10R W P1UR
0E2H P27R P26R P25R P24R P23R P22R P21R P20R W P2UR
0E5H P54R P53R P52R P51R P50R W P5UR
0E6H @HL7 @ HL 6 @ HL5 @ HL4 @ HL3 @ HL2 @ HL1 @ HL0 R/W @ HL
0E7H @YZ7 @YZ6 @YZ5 @YZ4 @YZ3 @YZ2 @YZ1 @YZ0 R/W @YZ
0E9H P11OC P10OC W P1OC
0F0H S7PC7 S7PC6 S7PC5 S7PC4 S7PC3 S7PC2 S7PC1 S7PC0 R/W STK7L
0F1H - - - - S7PC11 S7PC10 S7PC9 S7PC8 R/W STK7H
0F2H S6PC7 S6PC6 S6PC5 S6PC4 S6PC3 S6PC2 S6PC1 S6PC0 R/W STK6L
0F3H - - - - S6PC11 S6PC10 S6PC9 S6PC8 R/W STK6H
0F4H S5PC7 S5PC6 S5PC5 S5PC4 S5PC3 S5PC2 S5PC1 S5PC0 R/W STK5L
0F5H - - - - S5PC11 S5PC10 S5PC9 S5PC8 R/W STK5H
0F6H S4PC7 S4PC6 S4PC5 S4PC4 S4PC3 S4PC2 S4PC1 S4PC0 R/W STK4L
0F7H - - - - S4PC11 S4PC10 S4PC9 S4PC8 R/W STK4H
0F8H S3PC7 S3PC6 S3PC5 S3PC4 S3PC3 S3PC2 S3PC1 S3PC0 R/W STK3L
0F9H - S3PC11 S3PC10 S3PC9 S3PC8 R/W STK3H
0FAH S2PC7 S2PC6 S2PC5 S2PC4 S2PC3 S2PC2 S2PC1 S2PC0 R/W STK2L
0FBH - S2PC11 S2PC10 S2PC9 S2PC8 R/W STK2H
0FCH S1PC7 S1PC6 S1PC5 S1PC4 S1PC3 S1PC2 S1PC1 S1PC0 R/W STK1L
0FDH - S1PC11 S1PC10 S1PC9 S1PC8 R/W STK1H
0FEH S0PC7 S0PC6 S0PC5 S0PC4 S0PC3 S0PC2 S0PC1 S0PC0 R/W STK0L
0FFH - S0PC11 S0PC10 S0PC9 S0PC8 R/W STK0H
注:
1. 有些位元要固定放入 “0”或 “1 ”(如上表中所示),以免系统出错。
2. 所有寄存器的名称在 SN8ASM 编译器是默认的。
3. 寄存器中各位的名称已在 SN8ASM 编译器中以 “F”为前缀定义过。
4. 指令 “B0BSET”, “B0BCLR”, “BSET”, “BCLR” 仅对 “R/W” 寄存器有效。
5. 详细细节请查阅 “系统寄存器参照表 ”。
SONiX TECHNOLOGY CO., LTD Page 18 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.3 累加器(ACC )
累加器 ACC 是一个 8 位专用数据寄存器,用来进行算术逻辑运算或数据存储器之间数据的传送和处理。如果对
ACC 的操作结果为零(Z )或者有进位产生( C 或 DC ),那么这些标志将会影响 PFLAG 寄存器。
由于 ACC 不在数据存储器(RAM )中,所以在立即寻找模式下不能通过执行“B0MOV” 指令访问 ACC 。
 例:读 /写 ACC 中的数据
; 把
CC 中的数据送到 BUF 中
MOV BUF,
; 给
CC 送立即数
MOV
; 把 BUF 的数据送给
MOV
中断响应时,系统不会自动保存 ACC 和 PFLAG ,所以如果中断发生,必须将 ACC 和 PFLAG 寄存器值存储在
其它的存储器中,“PUSH” 和“POP” 指令在缓存器中保存和恢复 ACC 和 PFLAG 的值。
 例:保护 ACC 和工作寄存器
INT
SERVICE:
PUSH ; 保存
.
.
POP ; 恢复
RETI ; 中断返回
CC
, #0FH
, BUF
CC 和 PFLAG
CC 和 PFLAG
SONiX TECHNOLOGY CO., LTD Page 19 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.4 程序状态寄存器( PFLAG)
PFLAG 包括复位标志,进位标志(C ),辅助进位标志( DC )和零标志( Z ),如果操作结果为 0 或是有进位、
借位发生,就存入 PFLAG 寄存器中。
086H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PFLAG NT0 NPD - - - C DC Z
读/ 写 R/W R/W - - - R/W R/W R/W
复位后 - - - - - 0 0 0
) 复位标志
NT0 NPD 复位状态
0 0 看门狗超时复位
0 1 保留
1 0 由 LVD 复位
1 1 由外部复位引脚复位
) 进位标志
C = 1:执行算术加法后有进位发生,执行算术减法后没有借位或移位指令后移出逻辑“1”
C = 0:执行算术加法后没有进位发生,执行算术减法后有借位或移位指令后移出逻辑“0”
) 辅助进位标志
DC = 1:执行算术加法操作产生由低字节向高字节的进位或执行算术减法操作没有从高字节借位
DC = 0:执行算术加法操作没有产生由低字节向高字节的进位或执行算术减法操作从高字节借位
) 零标志
Z=1:指令执行后,运算结果为零
Z=0:指令执行后,运算结果非零
SONiX TECHNOLOGY CO., LTD Page 20 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.5 程序计数器(PC )
程序计数器 PC 是一个 12 位专用二进制计数器,分为 4 位的高字节和 8 位的低字节,PC 指向下一条将要执行
的指令的地址 ,一般的,在程序执行过程中,PC 会随着指令的执行自动加 1。
此外,执行程序调用(CALL )和跳转(JMP )指令时,下一条将要执行的指令地址会被装入 PC 的 0 ~11 位。
Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
PC - - - - PC11 PC10 PC9 PC8 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
复位后 - - - - 0 0 0 0 0 0 0 0 0 0 0 0
PCH PCL
) 单地址跳转
单地址跳转功能共有 9 条指令: CMPRS、INCS、INCMS、DECS、DECMS、BTS0、BTS1、B0BTS0 和 B0BTS1 ,
如果运算的结果符合跳转条件,则程序计数器加 2 ,会跳过当前指令的下一条指令。
如果位测试结果符合跳转条件,那么 PC 将加 2 ,跳过当前指令的下一条指令:
B0BTS1 FC ; 如果 C=1 则跳过下一条指令
JMP C0STEP ; 否则跳转到 C0STEP.
.
C0STEP: NOP
B0MOV
B0BTS0 FZ ; 如果 Z=0,则跳过下一条指令
JMP C1STEP ; 否则跳到 C1STEP.
.
C1STEP: NOP
如果 ACC 与立即数或存储器中的内容相等,那么 PC 将加 2 ,跳过下一条指令
CMPRS
JMP C0STEP ; 否则跳到 C0STEP.
.
C0STEP: NOP
, BUF0 ; 把 BUF0 的值赋给 ACC.
, #12H ; 如果 ACC = 12H. 则跳过下一条指令
如果增加 1 后的结果是从 0xffh 到 0x00h, 那么 PC 将加 2,跳过下一条指令
INCS:
INCS BUF0
JMP C0STEP ; 如果
…
C0STEP: NOP
INCMS:
INCMS BUF0
JMP C0STEP ; 如果 BUF0 不为 0 则跳到 C0STEP
…
C0STEP: NOP
如果减小 1 后的结果是从 0x01h 到 0x00h, 那么 PC 将加 2,跳过下一条指令
DECS:
DECS BUF0
JMP C0STEP ; 如果
…
C0STEP: NOP
DECMS:
DECMS BUF0
JMP C0STEP ; 如果 BUF0 不为 0 则跳到 C0STEP
…
C0STEP: NOP
CC 不为 0 则跳到 C0STEP
CC 不为 0 则跳到 C0STEP
SONiX TECHNOLOGY CO., LTD Page 21 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
) 多地址跳转
用户可以通过 JMP 和“ ADD PCL,A ”指令实现多地址跳转。 “ADD PCL, A”执行后若有进位发生,进位标志
并不会影响 PCH 寄存器。
 例: 如果 PC = 0323H (PCH = 03H 、 PCL = 23H)
; PC = 0323H
MOV A, #28H
B0MOV PCL, A ; 跳转到 0328H
. .
. .
; PC = 0328H . .
MOV A, #00H
B0MOV PCL, A ; 跳转到 0300H
 例: 如果 PC = 0323H (PCH = 03H 、 PCL = 23H)
; PC = 0323H
B0ADD PCL, A ; PCL = PCL + ACC, PCH 的值不会改变.
JMP A0POINT ; ACC = 0, 跳转到 A0POINT
JMP A1POINT ; ACC = 1, 跳转到 A1POINT
JMP A2POINT ; ACC = 2, 跳转到 A2POINT
JMP A3POINT ; ACC = 3, 跳转到 A3POINT
. . ;
只有 “ADD M, A” , “ADC M, A” 和 “B0ADD M, A” 支持 PCL 溢出和 PCH=PCH+1 ,其它的指令均不支持。
SONiX TECHNOLOGY CO., LTD Page 22 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.6 H, L 寄存器
8 位系统专用寄存器 H 和 L 主要用作工作寄存器和间接寻址 RAM 数据。数据寄存器@HL 位于 RAM bank_0 的
E6H 单元, H 和 L 寄存器的内容决定了被访问的 RAM 单元的地址,可通过累加器 ACC 对此单元进行读/写。 H寄
存器的低 4 位决定了单元所在的 RAM 页,L 寄存器给出该单元在某 RAM 页中的具体地址。H 寄存器的高 4 位在间
接寻址中无意义。
H 初始值=0000 0000
081H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
H HBIT7 HBIT6 HBIT5 HBIT4 HBIT3 HBIT2 HBIT1 HBIT0
读/ 写 R/W R/W R/W R/W R/W R/W R/W R/W
复位后 X X X X X X X X
L 初始值=0000 0000
080H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
L LBIT7 LBIT6 LBIT5 LBIT4 LBIT3 LBIT2 LBIT1 LBIT0
读/ 写 R/W R/W R/W R/W R/W R/W R/W R/W
复位后 X X X X X X X X
 例:间接寻址读取 RAM bank_0 的 20H 单元数据。
B0MOV H, #00H ; 把 BANK0 的 RAM 高 8 位地址送到 H 寄存器
B0MOV L, #20H ; 把 BANK0 的 RAM 低 8 位地址送到 L 寄存器
B0MOV A, @HL ; 读上面地址对应储存器的值到 ACC
 例:用 @HL 对 RAM bank 0 进行清零
CLR H ; 清零(Bank0)
MOV A, #07FH
B0MOV L, A ; L = 7FH,数据存储器的低地址
CLR_HL_BUF:
CLR @HL ; 清零
DECMS L ; L 递减 1, L = 0 子程序结束
JMP CLR_HL_BUF ; 不为零继续清零
CLR @HL
END_CLR: ; 结束通用区所有存储器的清零程序
. .
SONiX TECHNOLOGY CO., LTD Page 23 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.1.4.7 Y, Z 寄存器
z 通用工作寄存器
z 通过寄存器 @YZ 用作访问 RAM 的数据指针
z 通过 MOVC 查表指令,可访问 ROM 中的数据
084H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Y YBIT7 YBIT6 YBIT5 YBIT4 YBIT3 YBIT2 YBIT1 YBIT0
读/ 写 R/W R/W R/W R/W R/W R/W R/W R/W
复位后 X X X X X X X X
083H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Z ZBIT7 ZBIT6 ZBIT5 ZBIT4 ZBIT3 ZBIT2 ZBIT1 ZBIT0
读/ 写 R/W R/W R/W R/W R/W R/W R/W R/W
复位后 X X X X X X X X
 例:间接寻址模式访问 RAM bank 0 中 025H 单元。
B0MOV Y, #00H ; 用 Y 确定 BANK0
B0MOV Z, #25H ; 用 Z 确定 RAM 中的位置
B0MOV A, @YZ ; 25H 的数据放到 ACC 中
 例:用寄存器 @YZ 将数据存储器中 bank 0 的通用数据存储器清零
B0MOV Y, #0 ; Y = 0, bank 0
B0MOV Z, #07FH ; Y = 7FH, 数据存储区的最大地址
CLR_YZ_BUF:
CLR @YZ ; @YZ =0
DECMS Z ;
JMP CLR_YZ_BUF ;
CLR @YZ
END_CLR: ; 完成对 BANK0 中的数据的清零
.
2.1.4.8 R 寄存器
R 寄存器是一个 8 位缓存器,有两个主要功能:
z 工作寄存器
z 存放 ROM 查表的高字节数据
( MOVC 指令执行完后,指定的 ROM 地址中数据的高 8 位将存放在 R 寄存器中,低 8 位存放在 ACC 中)
082H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R RBIT7 RBIT6 RBIT5 RBIT4 RBIT3 RBIT2 RBIT1 RBIT0
读/ 写 R/W R/W R/W R/W R/W R/W R/W R/W
复位后 X X X X X X X X
注:请参考使用 R 寄存器的查表功能“ 查表说明” 。
SONiX TECHNOLOGY CO., LTD Page 24 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.2 寻址模式
2.2.1 立即寻址模式
将一个立即数送入累加器或指定的 RAM 单元。
 例:把立即数 12H 送入 ACC 。
MOV A, #12H ;立即数 12H 存入 ACC
 例:把立即数 12H 送入 R 寄存器。
B0MOV R, #12H ; 立即数 12H 存入 R 寄存器
注:在立即数寻找模式下,特殊的 RAM 必须是 0x80~0x87 工作寄存器。
2.2.2 直接寻址模式
通过单元地址访问存储器就是直接寻找。
 例:把 RAM 中的 0x12 送入 ACC 。
B0MOV A, 12H ; bank 0 中 12H 的数据送入 ACC
 例:从 ACC 中把 0x12 移入 RAM 中。
B0MOV 12H, A ; 把 bank0 中的 12H 从 ACC 中取出并保存在 RAM 中
2.2.3 间接寻址模式
通过数据指针寄存器(H/L ,Y/Z )访问存储器。
 例:利用 @HL 寄存器间接寻址。
B0MOV H, #0 ; 清 H,指向 bank 0.
B0MOV L, #12H ; 送入一个立即数 12H 到 L 寄存器。
B0MOV A, @YZ ; 用数据指针@HL 取得相应存储器中的数据 012H 中的数据送给 ACC
 例:利用 @YZ 寄存器间接寻址。
B0MOV Y, #0 ; 清 Y,指向 bank 0.
B0MOV Z, #12H ; 送入一个立即数 12H 到 Z 寄存器。
B0MOV A, @YZ ; 用数据指针@YZ 取得相应存储器中的数据 012H 中的数据送给 ACC
SONiX TECHNOLOGY CO., LTD Page 25 Preliminary Version 0.3
SN8P2604
8-Bit Micro-Controller
2.3 堆栈操作
2.3.1 概述
SN8P2604 共有 8 层堆栈。堆栈缓存器 STKnH 和 STKnL 在中断现场保护和恢复时用来存放程序计数器 PC 的
数据。堆栈指针 STKP 指示当前栈顶位置以便保护和恢复数据。
PCL
PCH
PCH PCH
PCL PCL
STKP + 1
STKP + 1
RET /
RETI
STKP - 1
STKP - 1 STKP - 1
CALL /
interrupt
Stack Level
STKP = 7
STKP = 6
STKP = 5
STKP = 4
STKP = 3
STKP = 2
STKP = 1
STKP = 0
Stack Buffer High Byte
STKP STKP
STK7H
STK6H
STK5H
STK4H
STK3H
STK2H
STK1H
STK0H
Stack Buffer Low Byte
STK7L
STK6L
STK5L
STKP STKP
STK4L
STK3L
STK2L
STK1L
STK0L
SONiX TECHNOLOGY CO., LTD Page 26 Preliminary Version 0.3