STC — 8051单片机全球第一品牌,全球最大的8051单片机设计公司
官方网站:www.STCMCU.com
www.GXWMCU.com
STC15F2K60S2系列单片机器件手册
---超���������
强抗干扰,����
无法解密
---采用STC第八代加密技术
---不需要外部晶振和外部复位的单片机
���
---可省掉外部EEPROM,利用IAP技术
���
---ISP/IAP,在线编程,无需编程器/仿真器
---���
大容量2K字节SRAM
---双串口,两个独立串口
---高速10位A/D转换器,8通道
---1个时钟/机器周期8051
---高速,高可靠
---超低功耗,超低价
---超����������
强抗静电������
,超强抗干扰
d
e
t
i
im
L
STC15F2K08S2
STC15L2K08S2
STC15F2K16S2
STC15L2K16S2
STC15F2K24S2
STC15L2K24S2
STC15F2K32S2
STC15L2K32S2
STC15F2K40S2
STC15L2K40S2
STC15F2K48S2
STC15L2K48S2
STC15F2K56S2
STC15L2K56S2
STC15F2K60S2
STC15L2K60S2
IAP15F2K61S2—本身就是仿真器—IAP15L2K61S2
C
T
S
U
C
M
采用STC第八代加密技术,现悬赏
10万元人民币请专家帮忙查找加密有无漏洞
STC-ISP:最方便的在线升级软件,无需专用编程器,无需专用仿真器
STC——8051单片机全球第一品牌,全球最大的8051单片机设计公司
请同行不要再抄袭我们的规格、设计和管脚排列,再抄袭就很无。。。
全部中国本土独立自主知识产权,请全体中国人民支持,您的支持是中国本土
力量前进的�����
有力保证.
封装后,全部175℃八小时高温烘烤,高品质制造保证
技术支持网站:www.STCMCU.com www.GXWMCU.com
Update date: 2014/2/23
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
研发顾问QQ:800003751
TM
STC micro
超强抗干扰,无法解密
8051单片机全球第一品牌,全球最大的8051单片机设计公司
全部中国大陆本土独立自主知识产权;品质保证:TSMC上海制造
宏 晶 科 技
www.STCMCU.com
官方网站:
www.GXWMCU.com
南通 Tel: 0513-5501 2928 5501 2929
深圳 Tel: 0755-8294 8411 8294 8412
STC15F2K60S2系列1T 8051单片机,2K字节SRAM,超高速双串口,高速A/D
不需外部晶振的单片机
不需外部复位的单片机
61K
Gnd
4
5组8位
微处理器
P1
超低功耗,超低价
并行端口
P0/P1
高速(0-35M),高可靠
P2/P3/P4
P3
超强抗干扰,无法解密
+
P5.4 / P5.5
P4
A/D
PWM可当D/A使用
高速10位8路
提升的是性能
降低的是成本
最多6个定时器
所有封装
S 普通 CCP 掉
大
A/D
LQFP44/PDIP40
P 定时器 PCA 电
内部 内部
容
标准 8路
LQFP32
I 计数器 PWM 唤
低压 复位
量
外部 (3路 D
SOP28/SKDIP28
S 串 仅 T0-T2 可当 醒
检测 (可 看
中断 PWM P EEP
(现此系列未生产
R 行 有 外部 外部 专
中断 选复 门
支持 可当 T ROM
PLCC44和SOP32封装)
A 口 主 管脚 中断 用
并可 位门 狗
掉电 3路 R
部分封装
M
机 也能 并可 定
掉电 槛电
唤醒 D/A
价格(RMB ¥)
字
唤醒 压)
模 掉电 掉电 时
使用)
SOP28
SKDIP28
LQFP32 PDIP40 LQFP44
节
式 唤醒 唤醒 器
STC15F2K60S2系列�����������
单片机选型价格一览表�
,另有STC15L系列(工作电压2.4V-3.6V)
特别提醒:3路CCP/PCA/PWM还可当3路定时器使用
2K 2 有 3
3-ch 有 5 10位 2 53K 有 8级 有 ¥3.8
¥4.0
¥3.9
¥4.5
¥4.0
3-ch 有 5 10位 2 45K 有 8级 有 ¥4.0
¥4.2
¥4.1
¥4.7
¥4.2
2K 2 有 3
3-ch 有 5 10位 2 37K 有 8级 有 ¥4.2
¥4.4
¥4.3
¥4.9
¥4.4
2K 2 有 3
3-ch 有 5 10位 2 29K 有 8级 有 ¥4.3
¥4.5
¥4.4
¥5.0
¥4.5
2K 2 有 3
3-ch 有 5 10位 2 21K 有 8级 有 ¥4.4
¥4.6
¥4.5
¥5.1
¥4.6
2K 2 有 3
2K 2 有 3
3-ch 有 5 10位 2 13K 有 8级 有 ¥4.4
¥4.6
¥4.5
¥5.1
¥4.6
3-ch 有 5 10位 2 5K 有 8级 有 ¥4.4
¥4.6
¥4.5
¥5.1
¥4.6
2K 2 有 3
3-ch 有 5 10位 2 1K 有 8级 有 ¥4.8
¥5.0
¥4.9
¥5.5
¥5.0
2K 2 有 3
¥4.8
¥5.0
¥4.9
¥5.5
¥5.0
2K 2 有 3
3-ch 有 5 10位 2 IAP 有 8级 有
用户可将用户程序区的程序Flash当EEPROM使用
IRC15F2K63S2
使用内部24MHz 5.5-3.8 63.5K 2K 2 有
时钟或外部晶振
3
IAP15F2K61S 5.5-3.8 61K 2K 1 有
3
3-ch 有
-
5
有
5
STC15F408AD 5.5-3.8 8K 512 1 有 T0 / T2 3-ch 有
5
IAP15F413AD 5.5-3.8 13K 512 1 有 T0 / T2 3-ch 有
5
¥5.5
¥5.0
用户可将用户程序区的
程序Flash当EEPROM使用
¥4.5
¥4.0
10位 2 IAP 有 固定 有
-
2 IAP 有 8级 有
用户可将用户程序区的程序Flash当EEPROM使用
10位 1 5K
有 8级 有 ¥2.8
¥3.0
10位 1 IAP 有 8级 有
¥3.0
¥3.2
¥2.9
¥3.1
-
-
P3.3/INT1/RSTOUT_LOW
7
P3.2/INT0
6
P3.1/T2
5
P3.0/INT4/T2CLKO
SOP-8/DIP-8
每片单片机具有全球唯一
身份证号码(ID号),
SS_2/ECI_3/A12/P2.4
CCP0_3/A13/P2.5
无法解密,加密坚不可摧
CCP1_3/A14/P2.6
提供客制化IC设计服务
P5
最多42个I/O
3路CCP/PCA/PWM
高频PWM: 6位/7位/8位
P2
CCP1_3/P2.6
CCP2_3/P2.7
RxD2/CCP1/ADC0/P1.0
TxD2/CCP0/ADC1/P1.1
ECI/SS/ADC2P1.2
MOSI/ADC3/P1.3
MISO/ADC4/P1.4
SCLK/ADC5/P1.5
XTLA2/RxD_3/ADC6/P1.6
XTLA1/TxD_3/ADC7/P1.7
MCLKO/RST/P5.4
Vcc
P5.5
Gnd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
P2.3/A11/MOSI_2
P2.2/A10/MISO_2
P2.1/A9/SCLK_2
P2.0/A8/RSTOUT_LOW
P4.4/RD
P4.3/SCLK_3
P4.2/WR
P4.1/MISO_3
P3.7/INT3/TxD_2/CCP2/CCP2_2
P3.6/INT2/RxD_2/CCP1_2
P3.5/T1/T0CLKO/CCP0_2
INT3/T0CLKO/P3.5
3
2
8
CCP2_3/A15/P2.7
ALE/P4.5
RxD2_2/P4.6
AD0/P0.0
P2.5/CCP0_3
AD1/P0.1
P2.4/ECI_3/SS_2 AD2/P0.2
AD3/P0.3
P2.3/MOSI_2
AD4/P0.4
P2.2/MISO_2
34
35
36
37
38
39
40
41
42
43
44
P2.1/SCLK_2
P2.0/RSTOUT_LOW
P3.7/INT3/TxD_2/CCP2/CCP2_2
P3.6/INT2/RxD_2/CCP1_2
P3.5/T1/T0CLKO/CCP0_2
P3.4/T0/T1CLKO/ECI_2
P3.3/INT1
P3.2/INT0
P3.1/TxD/T2
P3.0/RxD/INT4/T2CLKO
LQFP44
42个I/O
Vcc
STC 单片机在线编程ISP/仿真线路
AD0/P0.0
AD1/P0.1
AD2/P0.2
AD3/P0.3
AD4/P0.4
AD5/P0.5
AD6/P0.6
AD7/P0.7
RxD2/CCP1/ADC0/P1.0
TxD2/CCP0/ADC1/P1.1
ECI/SS/ADC2/P1.2
MOSI/ADC3/P1.3
MISO/ADC4/P1.4
SCLK/ADC5/P1.5
XTAL2/RxD_3/ADC6/P1.6
XTAL1/TxD_3/ADC7/P1.7
SS_3/MCLKO/RST/P5.4
Vcc
C2
C1
P5.5
0.1μF
47μF
Gnd
1
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
封装形式:
LQFP44(强烈推荐)
PDIP40(正常生产但
不推荐)
LQFP32(推荐)
SOP28(强烈推荐)
SKDIP28(正常生产)
33
32
31
30
29
28
27
26
25
24
23
1
PDIP40 38个I/O
8K
16K
24K
32K
40K
48K
56K
60K
INT2/INT3/INT4
仅可下降沿中断
MCLKO/INT2/T0/RST/P3.4
INT0/INT1
Vcc
上升沿/下降沿中断均可
26个I/O
SOP28 / SKDIP28
本身就是仿真器
超高速双串口(UART)
分时复用可当5组使用
Flash
工作 程序
电压 存储
(V) 器
(byte)
大批量现货
供应中
STC15F2K08S2 5.5-3.8
STC15F2K16S2 5.5-3.8
STC15F2K24S2 5.5-3.8
STC15F2K32S2 5.5-3.8
STC15F2K40S2 5.5-3.8
STC15F2K48S2 5.5-3.8
STC15F2K56S2 5.5-3.8
STC15F2K60S2 5.5-3.8
IAP15F2K61S2
5.5-3.8
监控程序
内置高精准时钟(5~35MHz 任意设置)
内置高可靠复位电路(8级复位门槛电压可设置)
掉电模式:C
;地址送入R0
;C=1(读) C=0(写)
;回应ACK
;等待停止信号
;发送IDATA数据
;接收ACK
;等待停止信号
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
363
STC15F2K60S2系列单片机指南
;---------------------------;等待起始信号
;---------------------------I2C_WAITSTART:
JNB
SCL,
JB
SDA,
JB
SCL,
RET
;---------------------------;等待结束信号
;---------------------------I2C_WAITSTOP:
JNB
SCL,
JNB
SDA,
RET
;---------------------------;发送ACK/NAK信号
;---------------------------I2C_TXACK:
MOV SDA,
JNB
SCL,
JB
SCL,
SETB SDA
RET
技术支持网站:www.GXWMCU.com
$
$
$
;等待时钟->高
;等待数据线下降沿
;等待时钟->低
$
$
;等待时钟->高
;等待数据线上升沿
;---------------------------;接收一字节数据
;---------------------------I2C_RXBYTE:
MOV R7,
RXNEXT:
JNB
SCL,
MOV C,
RLC
A
JB
SCL,
DJNZ R7,
RET
364
U
C
M
L
;送ACK数据
;等待时钟->高
;等待时钟->低
;发送完成
$
SDA
$
;准备读数据
;等待时钟->高
;读取ACK信号
;等待时钟->低
#8
;8位计数
$
SDA
$
RXNEXT
南通国芯微电子有限公司
研发顾问Tel:13922805190
d
e
t
i
im
C
$
$
C
T
S
;---------------------------;接收ACK/NAK信号
;---------------------------I2C_RXACK:
SETB SDA
JNB
SCL,
MOV C,
JB
SCL,
RET
临时技术支持Tel:13922829991
;等待时钟->高
;读取数据口
;保存数据
;等待时钟->低
;收下一位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
;---------------------------;发送一字节数据
;---------------------------I2C_TXBYTE:
MOV R7,
#8
TXNEXT:
RLC
A
MOV SDA,
C
JNB
SCL,
$
JB
SCL,
$
DJNZ R7,
TXNEXT
RET
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
;8位计数
;移出数据位
;数据送数据口
;等待时钟->高
;等待时钟->低
;送下一位
;---------------------------
d
e
t
i
im
END
C
T
S
南通国芯微电子有限公司
U
C
M
总机:0513-5501 2928 / 2929 / 2966
L
传真:0513-5501 2969 / 2956 / 2947
365
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
第5章 指令系统
5.1 寻址方式
寻址方式是每一种计算机的指令集中不可缺少的部分。寻址方式规定了数据的来源和目
的地。对不同的程序指令,来源和目的地的规定也会不同。在STC单片机中的寻址方式可概括
为:
•
•
•
•
•
•
•
立即寻址
直接寻址
间接寻址
寄存器寻址
相对寻址
变址寻址
位寻址
5.1.1 立即寻址
d
e
t
i
im
L
立即寻址也称立即数,它是在指令操作数中直接给出参加运算的操作数,其指令格式如
下:
如:MOV A,
#70H
U
C
M
这条指令的功能是将立即数70H传送到累加器A中
C
T
S
5.1.2 直接寻址
在直接寻址方式中,指令操作数域给出的是参加运算操作数地址。直接寻址方式只能用来
表示特殊功能寄存器、内部数据寄存器和位地址空间。其中特殊功能寄存器和位地址空间只能
用直接寻址方式访问。
如:ANL 70H,
#48H
表示70H单元中的数与立即数48H相“与”,结果存放在70H单元中。其中70H为直接地
址,表示内部数据存储器RAM中的一个单元。
5.1.3 间接寻址
间接寻址采用R0或R1前添加“@”符号来表示。例如,假设R1中的数据是40H,内部数据存
储器40H单元所包含的数据为55H,那么如下指令:
MOV
A,
@R1
把数据55H传送到累加器。
366
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
5.1.4 寄存器寻址
寄存器寻址是对选定的工作寄存器R7~R0、累加器A、通用寄存器B、地址寄存器和进位C
中的数进行操作。其中寄存器R7~R0由指令码的低3位表示,ACC、B、DPTR及进位位C隐含在指
令码中。因此,寄存器寻址也包含一种隐含寻址方式。
寄存器工作区的选择由程序状态字寄存器PSW中的RS1、RS0来决定。指令操作数指定的寄
存器均指当前工作区中的寄存器。
如:INC
R0
;(R0)+1 → R0
5.1.5 相对寻址
相对寻址是将程序计数器PC中的当前值与指令第二字节给出的数相加,其结果作为转移指
令的转移地址。转移地址也称为转移目的地址,PC中的当前值称为基地址,指令第二字节给出
的数称为偏移量。由于目的地址是相对于PC中的基地址而言,所以这种寻址方式称为相对寻
址。偏移量为带符号的数,所能表示的范围为+127 ~ –128。这种寻址方式主要用于转移指令。
如:JC
80H
;C=1 跳转
d
e
t
i
im
L
表示若进位位�������������������������������������
C������������������������������������
为�����������������������������������
0����������������������������������
,则程序计数器���������������������������
PC�������������������������
中的内容不改变,即不转移。若进位位��������
C�������
为������
1�����
,则以��
PC
中的当前值为基地址,加上偏移量�����������������������
80H��������������������
后所得到的结果作为该转移指令的目的地址。
5.1.6 变址寻址
C
T
S
U
C
M
在变址寻址方式中,指令操作数指定一个存放变址基值的变址寄存器。变址寻址时,偏
移量与变址基值相加,其结果作为操作数的地址。变址寄存器有程序计数器PC和地址寄存器
DPTR.
如:MOVC A,
@A+DPTR
表示累加器A为偏移量寄存器,其内容与地址寄存器DPTR中的内容相加,其结果作为操作
数的地址,取出该单元中的数送入累加器A。
5.1.7 位寻址
位寻址是指对一些内部数据存储器RAM和特殊功能寄存器进行位操作时的寻址。在进行位
操作时,借助于进位位C作为位操作累加器,指令操作数直接给出该位的地址,然后根据操作
码的性质对该位进行位操作。位地址与字节直接寻址中的字节地址形式完全一样,主要由操作
码加以区分,使用时应注意。
如:MOV C,
南通国芯微电子有限公司
20H
;片内位单元位操作型指令
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
367
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
5.2 完整指令集对照表(与传统8051对照)
——共111条指令,每条指令的详细执行时间
----与普通8051指令代码完全兼容,但执行的时间效率大幅提升
----其中INC DPTR和MUL AB指令的执行速度大幅提升24倍
----共有22条指令,一个时钟就可以执行完成,平均速度快8~12倍
如果按功能分类,STC15系列单片机指令系统可分为:
1.算术操作类指令;
2.逻辑操作类指令;
3.数据传送类指令;
4.布尔变量操作类指令;
5.控制转移类指令。
按功能分类的指令系统表如下表所示。
指令执行速度效率提升总结(�������
新15系列)�
:
d
e
t
i
im
L
指令系统共包括111条指令,其中:
执行速度快24倍的
共2条
执行速度快12倍的
共28条
执行速度快8倍的
共19条
执行速度快6倍的
共40条
执行速度快4.8倍的
共8条
执行速度快4倍的
共14条
根据对指令的使用频率分析统计,STC15系列 1T 的8051单片机比普通的8051单片机在同样的工
作频率下运行速度提升了8~12倍。
C
T
S
U
C
M
指令执行时钟数统计(供参考)(�������
新15系列)�
:
指令系统共包括111条指令,其中:
1个时钟就可执行完成的指令
共22条
2个时钟就可执行完成的指令
共37条
3个时钟就可执行完成的指令
共31条
4个时钟就可执行完成的指令
共12条
5个时钟就可执行完成的指令
共8条
6个时钟就可执行完成的指令
共1条
STC15系列将111条指令全部执行完一遍所需的时钟为283个时钟,而传统8051单片机将111条指
令全部执行一遍要1944个时钟。可见与传统8051相比较,STC新15系列的指令执行速度大幅提
升,平均速度快8~12倍。
368
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
现STC15系列单片机采用STC-Y5超高速CPU内核,在相同的时钟频率下,速度又比STC早期
的1T系列单片机(如STC12系列/STC11系列/STC10系列)的速度快20%.
算术操作类指令
助记符
ADD
A,Rn
ADD
A,direct
ADD
A,@Ri
字 传统8051
效率
STC15系列单片机所需时钟
节 单片机
(采用STC-Y5超高速 1T 8051 内核) 提升
数 所需时钟
功能说明
寄存器内容加到累加器 1
直接地址单元中的数据
2
加到累加器
间接RAM中的数据加到累
1
加器
12
1
12倍
12
2
6倍
12
2
6倍
ADD
A,#data
立即������
数加到���
累加器
2
12
2
6倍
ADDC
A,Rn
1
12
1
12倍
ADDC
A,direct
2
12
2
6倍
ADDC
A,@Ri
1
12
2
6倍
ADDC
A,#data
寄存器带进位加到累加器
直接地址单元的内容带进位
加到累加器
间接RAM内容带进位加到累
加器
立即数带进位加到累加器
2
12
6倍
SUBB
A,Rn
1
12
6倍
SUBB
A,direct
2
12
2
6倍
SUBB
A,@Ri
1
12
2
6倍
SUBB
A,#data
累加器带借位减寄存器内�
容
累加器带借位减直接地址单
元的内�
容
累加器带借位减间接RAM中
的内�
容
累加器带借位减立即�
数
2
1
2
12
2
6倍
INC
A
累加器加1
1
12
INC
Rn
寄存器加1
1
12
INC
direct
直接地址单元加1
2
12
INC
@Ri
间接RAM单元加1
1
12
DEC
DEC
DEC
DEC
INC
MUL
DIV
DA
A
Rn
direct
@Ri
DPTR
AB
AB
A
累加器减1
寄存器减1
直接地址单元减1
间接RAM单元减1
地址寄存器DPTR加1
A乘以B
A���
除��
以B
累加器十进制调�
整
1
1
2
1
1
1
1
1
12
12
12
12
24
48
48
12
1
2
3
3
1
2
3
3
12倍
6倍
4倍
4倍
12倍
6倍
4倍
4倍
南通国芯微电子有限公司
C
T
S
M
CU
总机:0513-5501 2928 / 2929 / 2966
d
e
t
i
im
L
1
24倍
2
6
3
24倍
8倍
4倍
传真:0513-5501 2969 / 2956 / 2947
369
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
逻辑操作类指令
助记符
字 传统8051
效率
STC15系列单片机所需时钟
节 单片机
(采用STC-Y5超高速 1T 8051 内核) 提升
数 所需时钟
功能说明
ANL
A,Rn
累加器与寄存器相“与”
1
12
1
12倍
ANL
A,direct
累加器与直接地址单元相“与”
2
12
2
6倍
ANL
A,@Ri
累加器与间接RAM单元相“与”
1
12
2
6倍
ANL
A,#data
累加器与立即数相“与”
2
12
2
6倍
ANL
direct, A
直接地址单元与累加器相“与”
2
12
3
4倍
ANL
direct,#data
直接地址单元与立即数相“与”
3
24
3
8倍
ORL
A, Rn
累加器与寄存器相“或”
1
12
1
12倍
ORL
A,direct
累加器与直接地址单元相“或”
2
12
2
6倍
ORL
A, @Ri
累加器与间接RAM单元相“或”
1
12
2
6倍
ORL
A,# data
累加器与�������
立即数����
相“或”
2
12
ORL
direct, A
直接地址单元��������
与累加器相“或”
2
12
ORL
direct, #data
直接地址单元与立即数相“或”
3
24
XRL
A, Rn
累加器与寄存器相“异或”
1
12
XRL
A, direct
累加器与直接地址单元相“异或” 2
12
XRL
A, @Ri
累加器与间接RAM单元相“异或”
1
12
XRL
A, # data
累加器与立即数相“异或”
2
12
XRL
direct, A
XRL
direct,#data
CLR
A
CU
M
直接地址单元与累加器相“异或” 2
d
e
t
i
im
L
2
6倍
3
4倍
3
8倍
1
12倍
2
6倍
2
6倍
2
6倍
12
3
4倍
直接地址单元与立即数相“异或” 3
24
3
8倍
累加器清“ 0”
12
1
12倍
C
T
S
1
累加器求�
反
1
12
1
12倍
累加器循环左�
移
1
12
1
12倍
CPL
A
RL
A
RLC
A
累加器带进位位循环左�
移
1
12
1
12倍
RR
A
累加器循环右�
移
1
12
1
12倍
RRC
A
累加器带进位位循环右�
移
1
12
1
12倍
SWAP
A
累加器��������
内高低�����
半字节交�
换
1
12
1
12倍
370
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
数据传送类指令
MOV
A, Rn
寄存器内容送入累加器
字 传统8051 STC15系列单片机所需时钟
效率
(采用STC-Y5
节 单片机
提升
数 所需时钟
超高速 1T 8051 内核)
1
12
1
12倍
MOV
A, direct
直接地址单元中的数据送入累加器
2
12
2
MOV
A, @Ri
间接RAM中的数据送入累加器
1
12
2
MOV
A, #data
立即������
数�����
送入累加器
2
12
MOV
Rn, A
累加器内容送入寄存器
1
12
MOV
Rn, direct
直接地址单元中的数据送入寄存器
2
24
2
1
3
MOV
Rn, #data
立即数送入寄存器
2
12
2
MOV
direct, A
累加器内容送入直接地址单元
2
12
MOV
direct, Rn
寄存器内容送入直接地址单元
2
24
MOV
direct, direct
直接地址单元中的数据送入另一个直接地址单元
3
24
MOV
direct, @Ri
间接RAM中的数据送入直接地址单元
2
24
2
2
3
3
MOV
direct, #data
立即数送入直接地址单元
3
24
3
MOV
@Ri, A
累加器内容送间接RAM单元
1
12
MOV
@Ri, direct
直接地址单元数据送入间接RAM单元
2
24
MOV
@Ri, #data
12
MOVC
立即数送入间接RAM单元
DPTR,#data16 16位立即数送入����
3
数据指针
A, @A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1
2
3
2
MOVC
A, @A+PC
助记符
MOV
功能说明
24
3
24
5
1
24
4
6倍
6倍
6倍
12倍
8倍
6倍
6倍
12倍
8倍
8倍
8倍
6倍
8倍
6倍
8倍
4.8倍
6倍
1
24
3
8倍
1
24
4
8倍
1
24
2
12倍
1
24
3
8倍
1
24
5xN+2
*Note1
Li
2
U
C
M
以PC为基地址变址寻址单元中的数据送入累加器
d
e
t
i
m
PUSH
direct
将����������������������
逻辑上在������������������
片�����������������
外����������������
、物理上在�����������
片内���������
的��������
扩展RAM���
(��
8位
地址)��������������
的内容�����������
送入累加器A�����
中,读操作
将��������������������
累加器A����������������
的内容�������������
送������������
入�����������
逻辑上在�������
片外、物理上在
片内�����������������
的����������������
扩展RAM(8位地址)�����
中,写操作
将����������������������
逻辑上在������������������
片外、物理上在�����������
片内���������
的��������
扩展RAM���
(��
16
位地址)��������������
的内容�����������
送����������
入���������
累加器A�����
中,读操作
将��������������������
累加器A����������������
的内容�������������
送������������
入�����������
逻辑上在�������
片外、物理上在
片内������������������
的�����������������
扩展RAM(16位地址)�����
中,写操作
将����������������������
逻辑上在������������������
片�����������������
外����������������
、物理上也在����������
片���������
外的�������
扩展RAM��
(�8
位地址)��������������
的内容�����������
送入累加器A�����
中,读操作
将��������������������
累加器A����������������
的内容�������������
送������������
入�����������
逻辑上在�������
片外、物理上也
在�������������������
片������������������
外的����������������
扩展RAM(8位地址)�����
中,写操作
将�����������������
逻辑上在�������������
片外、物理上也在�����
片����
外的��
扩展
RAM���������������������
(��������������������
16位地址)��������������
的内容�����������
送����������
入���������
累加器A�����
中,读操作
将��������������������
累加器A����������������
的内容�������������
送������������
入�����������
逻辑上在�������
片外、物理上也
在��������������������
片�������������������
外的�����������������
扩展RAM(16位地址)�����
中,写操作
直接地址单元中的数据压入堆栈
2
24
POP
direct
栈底数据弹出送入������
直接地址单元
2
24
XCH
A, Rn
寄存器与累加器交换
1
12
XCH
A,direct
直接地址单元与累加器交换
2
12
XCH
A, @Ri
间接RAM与累加器交换
1
12
XCHD
A, @Ri
间接RAM的低���������
半字节������
与累加器交换
1
12
MOVX A, @Ri
MOVX @Ri, A
MOVX A, @DPTR
MOVX @DPTR, A
MOVX A, @Ri
MOVX @Ri, A
MOVX A, @DPTR
MOVX @DPTR, A
C
T
S
当EXRTS[1:0] = [0,0]时,表中N=1;
当EXRTS[1:0] = [0,1]时,表中N=2;
当EXRTS[1:0] = [1,0]时,表中N=4;
当EXRTS[1:0] = [1,1]时,表中N=8.
南通国芯微电子有限公司
1
24
1
24
1
24
N的取值见下列说明
5×N+3
N的取值见下列说明
5×N+1
N的取值见下列说明
5×N+2
N的取值见下列说明
3
2
2
3
3
3
*Note1
*Note1
*Note1
8倍
12倍
6倍
4倍
4倍
4倍
EXRTS[1:0]为寄存器BUS_SPEED中的B1,B0位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
371
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
布尔变量操作类指令
助记符
CLR
CLR
SETB
SETB
CPL
CPL
C
bit
C
bit
C
bit
ANL
C, bit
ANL
C, /bit
ORL
C, bit
ORL
C, /bit
MOV
MOV
JC
JNC
JB
JNB
C, bit
bit, C
rel
rel
bit, rel
bit, rel
JBC
bit, rel
372
功能说明
清零进位位
清0直接地址位
置1进位位
置1直接地址位
进位位求反
直接地址位求反
进位位和直接地址位相
“与”
进位位和直接地址位的反码
相“与”
进位位和直接地址位相
“或”
进位位和直接地址位的反码
相“或”
直接地址位送入进位�
位
进位位送入直接地址位
进位位为1则转移
进位位为0则转移
直接地址位为1则转移
直接地址位为0则转移
直接地址位为1则转移,该位
清0
C
T
S
南通国芯微电子有限公司
字 传统8051
STC15系列单片机所需时钟
节 单片机
(采用STC-Y5超高速 1T 8051 内核)
数 所需时钟
1
12
1
2
12
3
1
12
1
2
12
3
1
12
1
2
12
3
12倍
4倍
12倍
4倍
12倍
4倍
2
24
2
12倍
2
24
2
12倍
2
24
2
12倍
2
24
2
12倍
2
2
2
2
3
3
12
24
24
24
24
24
2
3
3
3
5
5
12倍
8倍
8倍
8倍
4.8倍
4.8倍
3
24
5
4.8倍
U
C
M
Li
d
e
t
i
m
总机:0513-5501 2928 / 2929 / 2966
效率
提升
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
控制转移类指令
ACALL addr11
字 传统8051
STC15系列单片机所需时钟
效率
节 单片机
(采用STC-Y5超高速 1T 8051 内核) 提升
数 所需时钟
24
4
6倍
绝对(短)调用子程�
序 2
LCALL addr16
长调用子程�
序
3
24
4
6倍
RET
子程序返�
回
1
24
4
6倍
助记符
功能说明
中断返�
回
1
24
4
6倍
AJMP
addr11
绝对(短)转�
移
2
24
3
8倍
LJMP
addr16
长转移
3
24
4
6倍
SJMP
re1
相对转移
2
24
3
8倍
JMP
@A+DPTR
相对于DPTR的间接转�
移 1
24
5
4.8倍
JZ
re1
累加器为零转�
移
2
24
JNZ
re1
2
24
3
24
3
24
3
RETI
CJNE
CJNE
CJNE
CJNE
DJNZ
DJNZ
NOP
累加器非零转�
移
累加器与直接地址单元
A,direct,re1
比较,不相等则转�
移
累加器与立即数比较,
A,#data,re1
不相等则转�
移
寄存器与立即数比较,
Rn,#data,re1
不相等则转�
移
间接RAM单元与立即数
@Ri,#data,re1
比较,不相等则转�
移
Rn,re1
寄存器减1,非零转�
移
直接地址单元减1,非
direct,re1
零转�
移
空操作
C
T
S
d
e
t
i
m
4
6倍
4
6倍
5
4.8倍
4
6倍
24
4
6倍
3
24
5
4.8倍
2
24
4
6倍
3
24
5
4.8倍
1
12
1
12倍
U
C
M
Li
本次指令系统总结更新于2011-10-17日止
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
373
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
5.3 传统8051单片机指令定义详解(中文&English)
5.3.1 传统8051单片机指令定义详解
ACALL addr 11
功能: 绝对调用
说明: ACALL指令实现无条件调用位于addr11参数所表示地址的子例程。在执行该指令时,
首先将PC的值增加2,即使得PC指向ACALL的下一条指令,然后把16位PC的低8位和
高8位依次压入栈,同时把栈指针两次加1。然后,把当前PC值的高5位�
、ACALL指
令第1字节的7~5位和第2字节组合起来,得到一个16 位目的地址,该地址即为即将调
用的子例程的入口地址。要求该子例程的起始地址必须与紧随ACALL之后的指令处
于同1个2KB的程序存储页中。ACALL指令在执行时不会改变各个标志位。
d
e
t
i
im
举例: SP的初始值为07H,标号SUBRTN位于程序存储器的0345H地址处,如
果执行位于地址0123H处的指令:
ACALL SUBRTN
U
C
M
L
那么SP变为09H,内部RAM地址08H和09H单元的内容分别为25H和01H,PC值变为
0345H。
指令长度(字节): 2
执行周期: 2
C
T
S
二进制编码: a10 a9 a8 1
0 0 1 0
a7 a6 a5 a4
a3 a2 a1 a0
注意:a10 a9 a8是11位目标地址addr11的A10~A8位,a7 a6 a5 a4 a3 a2 a1 a0是addr11的A7~A0位。
操作: ACALL
(PC)��
←��������
�������
(PC)+ 2
(SP)���������
←��������
(SP) + 1
((sP)) ��
←����
���
(PC7-0)
(SP)���������
←��������
(SP) + 1
((SP))����
←���
(PC15-8)
(PC10-0)��
←� 页码地址
374
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ADD A,
功能: 加法
说明:
ADD指令可用于完成把src-byte所表示的源操作数和累加器A的当前值相加。并
将结果置于累加器A中。根据运算结果,若第7位有进位则置进位标志为1,否则清
零;若第3位有进位则置辅助进位标志为1,否则清零。如果是无符号整数相加则进位
置位,显示当前运算结果发生溢出。
如果第6位有进位生成而第7位没有,或第7位有进位生成而第6位没有,则置OV
为1,否则OV被清零。在进行有符号整数的相加运算的时候,OV置位表示两个正整
数之和为一负数,或是两个负整数之和为一正数。
本类指令的源操作数可接受4种寻址方式:寄存器寻址、直接寻址、寄存器间接
寻址和立即寻址。
d
e
t
i
im
举例: 假设累加器A中的数据为0C3H(000011B),R0的值为0AAH(10101010B)。执行如下指
令:
ADD
A, R0
L
累加器A中的结果为6DH(01101101B),辅助进位标志AC被清零,进位标志C和溢出
标志OV被置1。
ADD
U
C
M
A, Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
C
T
S
0 0
1
0
1 r r r
操作: ADD
(A)�����������
←����������
(A) + (Rn)
ADD A, direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 1 0
0 1 0 1
direct address
操作: ADD
(A)���������������
←��������������
(A) + (direct)
ADD A, @Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
1
0
0 1 1 i
操作: ADD
(A)�������������
←������������
(A) + ((Ri))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
375
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ADD A, #data
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 1 0
0 1 0 0
immediate data
操作: ADD
(A)�������
←������
(A) + �����
#data
ADDC A,
功能: 带进位的加法。
说明:
执行ADDC指令时,把src-byte所代表的源操作数连同进位标志一起加到累加器
A上,并将结果置于累加器A中。根据运算结果,若在第7位有进位生成,则将进位标
志置1,否则清零;若在第3位有进位生成,则置辅助进位标志为1,否则清零。如果
是无符号数整数相加,进位的置位显示当前运算结果发生溢出。
d
e
t
i
im
如果第6位有进位生成而第7位没有,或第7位有进位生成而第6位没有,则将OV
置1,否则将OV清零。在进行有符号整数相加运算的时候,OV置位,表示两个正整
数之和为一负数,或是两个负整数之和为一正数。
U
C
M
L
本类指令的源操作数允许4种寻址方式:寄存器寻址、直接寻址、寄存器间接寻
址和立即寻址。
举例: 假设累加器A中的数据为0C3H(11000011B),R0的值为0AAH(10101010B),进位标志
为1,执行如下指令:
C
T
S
ADDC A,R0
累加器A中的结果为6EH(01101110B),辅助进位标志AC被清零,进位标志C和溢出标
志OV被置1。
ADDC A, Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
1
1
1 r r r
操作: ADDC
(A)�����������������
←����������������
(A) + (C) + (Rn)
ADDC A,direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 1 1
0 1 0 1
direct address
操作: ADDC
(A)���������������������
←��������������������
(A) + (C) + (direct)
376
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ADDC A, @Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
1
1
0 1 1 i
操作: ADDC
(A)�������������������
←������������������
(A) + (C) + ((Ri))
ADDC A, #data
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 1 1
0 1 0 0
immediate data
操作: ADDC
(A)�������������
←������������
(A) + (C) + �����
#data
AJMP addr 11
功能: 绝对跳转
U
C
M
d
e
t
i
im
L
说明: AJMP指令用于将程序转到相应的目的地址去执行,该地址在程序执行过程之中产
生,由PC值(两次递增之后)的高5位、操作码的7~5位和指令的第2字
节连接形成。要求跳转的目的地址和AJMP指令的后一条指令的第1字节位于同一
2KB的程序存储页内。
C
T
S
举例: 假设标号JMPADR位于程序存储器的0123H,指令
AJMP JMPADR
位于0345H,执行完该指令后PC值变为0123H。
指令长度(字节): 2
执行周期: 2
二进制编码: a10 a9 a8 0
0 0 0 1
a7 a6 a5 a4
a3 a2 a1 a0
注意:目的地址的A10-A8=a10~a8,A7-A0=a7~a0
操作: AJMP
(PC)��
←��������
�������
(PC)+ 2
(PC10-0)��
←� page
����� �������
address
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
377
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ANL ,
功能: 对字节变量进行逻辑与运算
说明:
ANL指令将由和所指定的两个字节变量逐位进行逻辑与运
算,并将运算结果存放在所指定的目的操作数中。该指令的执行不会影响
标志位。
两个操作数组合起来允许6种寻址模式。当目的操作数为累加器时,源操作数允
许寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。当目的操作数是直接地址
时,源操作数可以是累加器或立即数。
注意:当该指令用于修改输出端口时,读入的原始数据来自于输出数据的锁存
器而非输入引脚。
举例:
如果累加器的内容为0C3H(11000011B),寄存器0的内容为55H(010101011B),那
么指令:
ANL A,R0
d
e
t
i
im
执行结果是累加器的内容变为41H(01000001H)。
L
当目的操作数是可直接寻址的数据时,ANL指令可用来把任何RAM单元或者
硬件寄存器中的某些位清零。屏蔽字节将决定哪些位将被清零。屏蔽字节可能是常
数,也可能是累加器在计算过程中产生。如下指令:
U
C
M
ANL Pl, #01110011B
将端口1的位7、位3和位2清零。
ANL A, Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
C
T
S
0 1
0
1
1 r r r
操作: ANL
(A)�����
←����
(A) ∧ (Rn)
ANL A, direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0 1 0 1
0 1 0 1
direct address
操作: ANL
(A)�����
←����
(A) ∧ (direct)
ANL A, @Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0 1
0
1
0 1 1 i
操作: ANL
(A)�����
←����
(A) ∧ ((Ri))
378
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ANL A, #data
指令长度(字节): 2
执行周期: 1
二进制编码:
0 1 0 1
0 1 0 0
immediate data
操作: ANL
(A)�����
←����
(A) ∧ #data
ANL direct, A
指令长度(字节): 2
执行周期: 1
二进制编码:
0 1 0 1
0 0 1 0
direct address
操作: ANL
(direct)����������
←���������
(direct) ∧ (A)
d
e
t
i
im
ANL direct, #data
指令长度(字节): 3
执行周期: 2
二进制编码:
0 1 0 1
0 0 1 1
direct address
U
C
M
L
immediate data
操作: ANL
(direct)����������
←���������
(direct) ∧ #data
ANL C ,
C
T
S
功能: 对位变量进行逻辑与运算
说明:
如果src-bit表示的布尔变量为逻辑0,清零进位标志位;否则,保持进位标志的
当前状态不变。在汇编语言程序中,操作数前面的“/”符号表示在计算时需要先对
被寻址位取反,然后才作为源操作数,但源操作数本身不会改变。该指令在执行时不
会影响其他各个标志位。
源操作数只能采取直接寻址方式。
举例: 下面的指令序列当且仅当P1.0=1、ACC.7=1和OV=0时,将进位标志C置1:
MOV C, P1.0
;LOAD CARRY WITH INPUT PIN STATE
ANL C, ACC.7
;AND CARRY WITH ACCUM. BIT.7
ANL C, /OV
;AND WITH INVERSE OF OVERFLOW FLAG
ANL C, bit
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 0 0
0 0 1 0
bit address
操作: ANL
(C) ��
← ����
����
(C) ∧ (bit)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
379
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ANL C, /bit
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 1 1
0 0 0 0
bit address
操作: ANL
(C)�����
←����
(C) ∧ (bit)
CJNE , , rel
功能: 若两个操作数不相等则转移
说明:
CJNE首先比较两个操作数的大小,如果二者不等则程序转移。目标地址由位于
CJNE指令最后1个字节的有符号偏移量和PC的当前值(紧邻CJNE的下一条指令的地
址)相加而成。如果目标操作数作为一个无符号整数,其值小于源操作数对应的无符
号整数,那么将进位标志置1,否则将进位标志清零。但操作数本身不会受到影响。
d
e
t
i
im
和组合起来,允许4种寻址模式。累加器A可以与任何可直
接寻址的数据或立即数进行比较,任何间接寻址的RAM单元或当前工作寄存器都可
以和立即常数进行比较。
L
举例: 设累加器A中值为34H,R7包含的数据为56H。如下指令序列:
CJNE
R7,#60H, NOT-EQ
;
...
NOT_EQ:
JC
;
...
C
T
S
CU
......
M
; R7 = 60H.
REQ_LOW
; IF R7 < 60H.
.....
; R7 > 60H.
的第1条指令将进位标志置1,程序跳转到标号NOT_EQ处。接下去,通过测试进位标
志,可以确定R7是大于60H还是小于60H。
假设端口1的数据也是34H,那么如下指令:
WAIT: CJNE A,P1,WAIT
清除进位标志并继续往下执行,因为此时累加器的值也为34H,即和P1口的数据相
等。(如果Pl端口的数据是其他的值,那么程序在此不停地循环,直到P1端口的数据
变成34H为止。)
CJNE A, direct, rel
指令长度(字节): 3
执行周期: 2
二进制编码:
1 0 1 1
0 1 0 1
direct address
rel. address
←���������
��������
(PC) + 3
操作: (PC) ��
IF (A) < > (direct)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (A) < (direct)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
380
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
CJNE A, #data, rel
指令长度(字节): 3
执行周期: 2
二进制编码:
1 0 1 1
0 1 0 1
immediata data
rel. address
←���������
��������
(PC) + 3
操作: (PC) ��
IF (A) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (A) < (data)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
d
e
t
i
im
CJNE Rn, #data, rel
指令长度(字节): 3
执行周期: 2
二进制编码:
1 0 1 1
U
C
M
1 r r r
L
immediata data
rel. address
←���������
��������
(PC) + 3
操作: (PC) ��
IF (Rn) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (Rn) < (data)
THEN
(C) ←��
�� 1�
ELSE
(C) ←��
�� 0�
C
T
S
CJNE @Ri,#data,rel
指令长度(字节): 3
执行周期: 2
二进制编码:
1 0 1 1
0 1 1 i
immediate data
rel. address
←���������
��������
(PC) + 3
操作: (PC) ��
IF ((Ri)) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF ((Ri)) < (data)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
381
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
CLR A
功能: 清除累加器
说明: 该指令用于将累加器A的所有位清零,不影响标志位�
。
举例: 假设累加器A的内容为5CH(01011100B),那么指令:
CLR A
执行后,累加器的值变为00H(00000000B)。
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1 1 0
0 1 0 0
操作: CLR
(A)��
←��
�0
CLR bit
功能: 清零指定的位
U
C
M
d
e
t
i
im
L
说明: 将bit所代表的位清零,没有标志位会受到影响。CLR可用于进位标志C或者所有可直
接寻址的位。
举例: 假设端口1的数据为5DH(01011101B),那么指令
C
T
S
CLR
P1.2
执行后,Pl端口被设置为59H(01011001B)。
CLR C
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1
0
0
0 0 1 1
操作: CLR
(C) ←��
�� �0
CLR bit
指令长度(字节): 2
执行周期: 1
二进制编码:
1 1 0 0
0 0 1 0
bit address
操作: CLR
(bit) ← �
�� 0�
382
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
CPL A
功能: 累加器A求反
说明: 将累加器A的每一位都取反,即原来为1的位变为0,原来为0的位变为1。该指令不影
响标志位�
。
举例: 设累加器A的内容为5CH(01011100B),那么指令
CPL
A
执行后,累加器的内容变成0A3H(10100011B)。
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1 1 1
0 1 0 0
操作: CPL
(A)��
←� (A)
d
e
t
i
im
CPL bit
功能: 将bit所表示的位求反
说明:
L
将bit变量所代表的位取反,即原来位为1的变为0,原来为0的变为1。没有标志
位会受到影响。CPL可用于进位标志C或者所有可直接寻址的位。
U
C
M
注意:如果该指令被用来修改输出端口的状态,那么bit所代表的数据是端口锁
存器中的数据,而不是从引脚上输入的当前状态。
C
T
S
举例: 设P1端口的数据为5BH(01011011B),那么指令
CPL
P1.1
CPL
P1.2
执行完后,Pl端口被设置为5DH(01011101B)。
CPL C
指令长度(字节): 1
执行周期: 1
二进制编码:
1 0
1
1
0 0 1 1
操作: CPL
(C) ��
←� (C)
CPL bit
指令长度(字节): 2
执行周期: 1
二进制编码:
1 0 1 1
0 0 1 0
bit address
操作: CPL
(bit) ←
�� (bit)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
383
STC15F2K60S2系列单片机指南
DA
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
A
功能: 在加法运算之后,对累加器A进行十进制调整
说明:
DA指令对累加器A中存放的由此前的加法运算产生的8位数据进行调整(ADD或
ADDC指令可以用来实现两个压缩BCD码的加法),生成两个4位的数字。
如果累加器的低4位(位3~位0)大于9 (xxxx1010~xxxx 1111),或者加法运算
后,辅助进位标志AC为1,那么DA指令将把6加到累加器上,以在低4位生成正确的
BCD数字。若加6后,低4位向上有进位,且高4位都为1,进位则会一直向前传递,以
致最后进位标志被置1;但在其他情况下进位标志并不会被清零,进位标志会保持原
来的值。
如果进位标志为1,或者高4位的值超过9 (1010xxxx~1111xxxx),那么DA指令将
把6加到高4位,在高4位生成正确的BCD数字,但不清除标志位。若高4位有进位输
出,则置进位标志为1,否则,不改变进位标志。进位标志的状态指明了原来的两
个BCD数据之和是否大于99,因而DA指令使得CPU可以精确地进行十进制的加法运
算。注意,OV标志不会受影响。
d
e
t
i
im
DA指令的以上操作在一个指令周期内完成。实际上,根据累加器A和机器状态
字PSW中的不同内容,DA把00H、06H、60H、66H加到累加器A上,从而实现十进制
转换。
U
C
M
L
注意:如果前面没有进行加法运算,不能直接用DA指令把累加器A中的十六进
制数据转换为BCD数,此外,如果先前执行的是减法运算,DA指令也不会有所预期
的效果。
举例:
C
T
S
如果累加器中的内容为56H(01010110B),表示十进制数56的BCD码,寄存器3
的内容为67H(01100111B),表示十进制数67的BCD码。进位标志为1,则指令
ADDC A,R3
DA
A
先执行标准的补码二进制加法,累加器A的值变为0BEH,进位标志和辅助进位标志被
清零。
接着,DA执行十进制调整,将累加器A的内容变为24H(00100100B),表示十
进制数24的BCD码,也就是56、67及进位标志之和的后两位数字。DA指令会把进位
标志置位1,这表示在进行十进制加法时,发生了溢出。56、67以及1的和为124。
把BCD格式的变量加上0lH或99H,可以实现加1或者减1。假设累加器的初始值
为30H(表示十进制数30),指令序列
ADD
A,
DA
A
#99H
将把进位C置为1,累加器A的数据变为29H,因为30+99=129。加法和的低位数据可
以看作减法运算的结果,即30-1=29。
384
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1
0 1
0 1 0
0
操作: DA
-contents of Accumulator are BCD
IF [[(A3-0) > 9] V [(AC) = 1]]
THEN(A3-0) ��
←���
��
(A3-0) + 6
AND
IF [[(A7-4) > 9] V [(C) = 1]]
THEN (A7-4) ��
←���
��
(A7-4) + 6
DEC byte
功能: 把BYTE所代表的操作数减1
说明:
d
e
t
i
im
BYTE所代表的变量被减去l。如果原来的值为00H,那么减去1后,变成0FFH。
没有标志位会受到影响。该指令支持4种操作数寻址方式:累加器寻址、寄存器寻
址、直接寻址和寄存器间接寻址。
L
注意:当DEC指令用于修改输出端口的状态时,BYTE所代表的数据是从端口输
出数据锁存器中获取的,而不是从引脚上读取的输入状态。
U
C
M
举例: 假设寄存器0的内容为7FH(01111111B),内部RAM的7EH和7FH单元的内容分别为
00H和40H。则指令
C
T
S
DEC
@R0
DEC
R0
DEC
@R0
执行后,寄存器0的内容变成7EH,内部RAM的7EH和7FH单元的内容分别变为0FFH
和3FH。
DEC A
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
0
1
0 1 0 0
操作: DEC
(A)�����
←����
(A) -1
DEC
Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0 0 1
1 r r r
操作: DEC
(Rn)������
←�����
(Rn) ��- �1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
385
STC15F2K60S2系列单片机指南
DEC
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 0 1
0 1 0 1
direct address
操作: DEC
(direct)����������
←���������
(direct) -1
DEC
@Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0 0 1
0 1 1 i
操作: DEC
((Ri))��������
←�������
((Ri)) ��- �1
DIV AB
功能: 除法
说明:
U
C
M
d
e
t
i
im
L
DIV指令把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,并将
商置于累加器A中,余数置于寄存器B中。进位标志C和溢出标志OV被清零。
例�������
外������
:如果寄存器B的初始值为00H(即除数为0),那么执行DIV指令后,累加
器A和寄存器B中的值是不确定的,且溢出标志OV将被置位。但在任何情况下,进位
标志C都会被清零。
C
T
S
举例: 假设累加器的值为251 (0FBH或11111011B),寄存器B的值为18 (12H或
00010010B)。则指令
DIV
AB
执行后,累加器的值变成13 (0DH或00001101B),寄存器B的值变成17 (11H或
0001000B),正好符合251=13×18+17。进位和溢出标志都被清零。
指令长度(字节): 1
执行周期: 4
二进制编码:
1 0
0
0
0 1 0 0
操作: DIV
(A)15-8
(A)/(B)
(B)7-0 ←��������
386
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
DJNZ ,
功能: 减1,若非0则跳转
说明:
DJNZ指令首先将第1个操作数所代表的变量减1,如果结果不为0,则转移到
第2个操作数所指定的地址处去执行。如果第1个操作数的值为00H,则减1后变为
0FFH。该指令不影响标志位。跳转目标地址的计算:首先将PC值加2(即指向下一
条指令的首字节),然后将第2操作数表示的有符号的相对偏移量加到PC上去即可。
byte所代表的操作数可采用寄存器寻址或直接寻址。
注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端
口输出数据锁存器中获取的,而不是直接读取引脚。
举例:
假设内部RAM的40H、50H和60H单元分别存放着01H、70H和15H,则指令
DJNZ
40H, LABEL_1
DJNZ
50H, LABEL_2
DJNZ
60H, LABEL_3
d
e
t
i
im
执行之后,程序将跳转到标号LABEL2处执行,且相应的3个RAM单元的内容变成
00H、6FH和15H。之所以第1个跳转没被执行,是因为减1后其结果为0,不满足跳转
条件。
U
C
M
L
使用DJNZ指令可以方便地在程序中实现指定次数的循环,此外用一条指令就可
以在程序中实现中等长度的时间延迟(2~512个机器周期)。指令序列
C
T
S
MOV
TOOOLE:
R2,#8
CPL
P1.7
DJNZ
R2, TOOGLE
将使得P1.7的电平翻转8次,从而在P1.7产生4个脉冲,每个脉冲将持续3个机器周
期,其中2个为DJNZ指令的执行时间,1个为CPL指令的执行时间。
DJNZ
Rn,rel
指令长度(字节): 2
执行周期: 2
二进制编码:
1 1 0 1
1 r r r
rel. address
操作: DJNZ
(PC) ��
← ��������
��������
(PC) + 2
(Rn) ��
← �����
�����
(Rn) ��– �1
IF (Rn) > 0 or (Rn) < 0
THEN
(PC) ��
←�������
������
(PC)+ ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
387
STC15F2K60S2系列单片机指南
DJNZ
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
direct, rel
指令长度(字节): 3
执行周期: 2
二进制编码:
1 1 0 1
0 1 0 1
direct address
rel. address
操作: DJNZ
(PC) ��
←���������
��������
(PC) + 2
(direct) ←����������
�� ���������
(direct) ��– �1
IF (direct) > 0 or (direct) < 0
THEN
(PC) ��
← �������
�������
(PC) + ���
rel
INC
功能: 加1
说明:
d
e
t
i
im
INC指令将所代表的数据加1。如果原来的值为FFH,则加1后变为00H,
该指令步影响标志位。支持3种寻址模式:寄存器寻址、直接寻址、寄存器间接寻
址。
L
注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端
口输出数据锁存器中获取的,而不是直接读的引脚。
U
C
M
举例: 假设寄存器0的内容为7EH(0111110B),内部RAM的7E单元和7F单元分别存放着0FFH
和40H,则指令序列
C
T
S
INC
@R0
INC
R0
INC
@R0
执行完毕后,寄存器0的内容变为7FH,而内部RAM的7EH和7FH单元的内容分别变
成00H和41H。
INC
A
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
0
0
0 1 0 0
操作: INC
(A) ��
← (A)+1
�����
INC Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0
0
0
1 r r r
操作: INC
(Rn) ← (Rn)+1
�� ������
388
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
INC
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0 0 0 0
0 1 0 1
direct address
操作: INC
(direct)����������
←���������
(direct) + 1
INC
@Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0 0 0 0
0 1 1 i
操作: INC
((Ri))�����������
←����������
((Ri)) + 1
INC
DPTR
功能: 数据指针加1
说明:
U
C
M
d
e
t
i
im
L
该指令实现将DPTR加1功能。需要注意的是,这是16位的递增指令,低位字节
DPL从FFH增加1之后变为00H,同时进位到高位字节DPH。该操作不影响标志位。
该指令是唯一1条16位寄存器递增指令。
C
T
S
举例: 假设寄存器DPH和DPL的内容分别为12H和0FEH,则指令序列
INC
DPTR
INC
DPTR
INC
DPTR
执行完毕后,DPH和DPL变成13H和01H
指令长度(字节): 1
执行周期: 2
二进制编码:
1 0
1
0
0 0 1 1
操作: INC
(DPTR) ��
← (DPTR)+1
��������
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
389
STC15F2K60S2系列单片机指南
JB
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
bit, rel
功能: 若位数据为1则跳转
说明: 如果bit代表的位数据为1,则跳转到rel所指定的地址处去执行;否则,继续执行下
一条指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向下一条指
令的首字节地址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到
PC上去,新的PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数
值,而且该操作不会影响标志位。
举例: 假设端口1的输入数据为11001010B,累加器的值为56H(01010110B)。则指令
JB
P1.2, LABEL1
JB
ACC.2, LABEL2
将导致程序转到标号LABEL2处去执行
指令长度(字节): 3
执行周期: 2
二进制编码:
0 0 1 0
0 0 0 0
操作: JB
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 1
THEN
(PC) ��
←��������
�������
(PC) + ���
rel
JBC
bit, rel
d
e
t
i
im
bit address
U
C
M
rel. address
L
功能: 若位数据为1则跳转并将其清零
说明:
C
T
S
如果bit代表的位数据为1,则将其清零并跳转到rel所指定的地址处去执行。如果
bit代表的位数据为0,则继续执行下一条指令。跳转的目标地址按照如下方式计算:
先增加PC的值,使其指向下一条指令的首字节地址,然后把rel所代表的有符号的相
对偏移量(指令的第3个字节)加到PC上去,新的PC值即为目标地址,而且该操作不
会影响标志位。
注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端
口输出数据锁存器中获取的,而不是直接读取引脚。
举例: 假设累加器的内容为56H(01010110B),则指令序列
JBC ACC.3, LABEL1
JBC
ACC.2, LABEL2
将导致程序转到标号LABEL2处去执行,且累加器的内容变为52H(01010010B)。
指令长度(字节): 3
执行周期: 2
二进制编码:
0 0 0 1
0 0 0 0
bit address
rel. address
操作: JBC
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 1
THEN
(bit) ← 0
�� �
(PC) ��
←��������
�������
(PC) + ���
rel
390
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
JC
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
rel
功能: 若进位标志为1,则跳转
说明: 如果进位标志为1,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的
指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向紧接JC指令的
下一条指令的首地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)
加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。
举例: 假设进位标志此时为0,则指令序列
JC
LABEL1
CPL C
JC
LABEL2
执行完毕后,进位标志变成1,并导致程序跳转到标号LABEL2处去执行。
指令长度(字节): 2
执行周期: 2
二进制编码:
0 1 0 0
0 0 0 0
操作: JC
(PC) ��
← �������
�������
(PC)+ 2
IF (C) = 1
THEN
(PC) ��
←��������
�������
(PC) + ���
rel
U
C
M
JMP @A+DPTR
功能: 间接跳转。
C
T
S
d
e
t
i
im
rel. address
L
说明: 把累加器A中的8位无符号数据和16位的数据指针的值相加,其和作为下一条将要执
行的指令的地址,传送给程序计数器PC。执行16位的加法时,低字节DPL的进位会
传到高字节DPH。累加器A和数据指针DPTR 的内容都不会发生变化。不影响任何标
志位。
举例: 假设累加器A中的值是偶数(从0到6)。下面的指令序列将使得程序跳转到位于跳转
表JMP_TBL 的4条AJMP指令中的某一条去执行:
MOV
DPTR, #JMP_TBL
JMP
@A+DPTR
JMP-TBL:
AJMP
LABEL0
AJMP
LABEL1
AJMP
LABEL2
AJMP
LABEL3
如果开始执行上述指令序列时,累加器A中的值为04H,那么程序最终会跳转到标号
LABEL2处去执行。
注意:AJMP是一个2字节指令,因而在跳转表中,各个跳转指令的入口地址依次相
差2个字节。
指令长度(字节): 1
执行周期: 2
二进制编码:
0 1 1 1
0 0 1 1
操作: JMP
(PC) ��
← ������������
������������
(A) + (DPTR)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
391
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
JNB bit, rel
功能: 如果bit所代表的位不为1则跳转。
说明: 如果bit所表示的位为0,则转移到rel所代表的地址去执行;否则,继续执行下一条
指令。跳转的目标地址如此计算:先增加PC的值,使其指向下一条指令的首字节地
址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到PC上去,新的
PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数值,而且该操
作不会影响标志位。
举例: 假设端口1的输入数据为110010108,累加器的值为56H(01010110B)。则指令序列
JNB
P1.3, LABEL1
JNB
ACC.3, LABEL2
执行后将导致程序转到标号LABEL2处去执行。
指令长度(字节): 3
执行周期: 2
二进制编码:
0 0 1 1
0 0 0 0
操作: JNB
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
JNC
C
T
S
rel
d
e
t
i
im
bit address
U
C
M
rel. address
L
功能: 若进位标志非1则跳转
说明: 如果进位标志为0,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的
指令。跳转的目标地址按照如下方式计算:先增加PC的值加2,使其指向紧接JNC指
令的下一条指令的地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字
节)加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。
举例: 假设进位标志此时为1,则指令序列
JNC LABEL1
CPL C
JNC LABEL2
执行完毕后,进位标志变成0,并导致程序跳转到标号LABEL2处去执行。
指令长度(字节): 2
执行周期: 2
二进制编码:
0 1 0 1
0 0 0 0
rel. address
操作: JNC
(PC) ��
← �������
�������
(PC)+ 2
IF (C) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
392
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
JNZ
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
rel
功能: 如果累加器的内容非0则跳转
说明: 如果累加器A的任何一位为1,那么程序跳转到rel所代表的地址处去执行,如果各个
位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增
加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新
的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。
举例: 设累加器的初始值为00H,则指令序列
JNZ
INC
JNZ
LABEL1
A
LAEEL2
执行完毕后,累加器的内容变成01H,且程序将跳转到标号LABEL2处去执行。
指令长度(字节): 2
执行周期: 2
二进制编码:
0 1 1 1
0 0 0 0
操作: JNZ
(PC) ��
← �������
�������
(PC)+ 2
IF (A) ≠ 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
JZ
C
T
S
rel
d
e
t
i
im
rel. address
U
C
M
L
功能: 若累加器的内容为0则跳转
说明: 如果累加器A的任何一位为0,那么程序跳转到rel所代表的地址处去执行,如果各个
位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增
加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新
的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。
举例: 设累加器的初始值为01H,则指令序列
JZ
DEC
JZ
LABEL1
A
LAEEL2
执行完毕后,累加器的内容变成00H,且程序将跳转到标号LABEL2处去执行。
指令长度(字节): 2
执行周期: 2
二进制编码:
0 1 1 0
0 0 0 0
rel. address
操作: JZ
(PC) ��
← �������
�������
(PC)+ 2
IF (A) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
393
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
LCALL addr16
功能: 长调用
说明: LCALL用于调用addr16所指地址处的子例程。首先将PC的值增加3,使得PC指向紧随
LCALL的下一条指令的地址,然后把16位PC的低8位和高8位依次压入栈(低位字节
在先),同时把栈指针加2。然后再把LCALL指令的第2字节和第3字节的数据分别装
入PC的高位字节DPH和低位字节DPL,程序从新的PC所对应的地址处开始执行。因
而子例程可以位于64KB程序存储空间的任何地址处。该操作不影响标志位。
举例: 栈指针的初始值为07H,标号SUBRTN被分配的程序存储器地址为1234H。则执行如
下位于地址0123H的指令后,
LCALL SUBRTN
栈指针变成09H,内部RAM的08H和09H单元的内容分别为26H和01H,且PC的当前
值为1234H。
d
e
t
i
im
指令长度(字节): 3
执行周期: 2
二进制编码:
0 0 0 1
0 0 1 0
操作: LCALL
(PC) ��
←���������
��������
(PC) + 3
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←����
���
(PC7-0)
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←����
���
(PC15-8)
(PC) ��
←� ����
addr15-0
U
C
M
C
T
S
L
addr15-addr8
addr7-addr0
LJMP addr16
功能: 长跳转
说明: LJMP使得CPU无条件跳转到addr16所指的地址处执行程序。把该指令的第2字节和第
3字节分别装入程序计数器PC的高位字节DPH和低位字节DPL。程序从新PC值对应的
地址处开始执行。该16位目标地址可位于64KB程序存储空间的任何地址处。该操作
不影响标志位。
举例: 假设标号JMPADR被分配的程序存储器地址为1234H。则位于地址1234H的指令
LJMP JMPADR
执行完毕后,PC的当前值变为1234H。
指令长度(字节): 3
执行周期: 2
二进制编码:
0 0 0 0
0 0 1 0
addr15-addr8
addr7-addr0
操作: LJMP
(PC) ��
←� ����
addr15-0
394
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOV ,
功能: 传送字节变量
说明:
将第2操作数代表字节变量的内容复制到第1操作数所代表的存储单元中去。该
指令不会改变源操作数,也不会影响其他寄存器和标志位。
MOV指令是迄今为止使用最灵活的指令,源操作数和目的操作数组合起来,寻
址方式可达15种。
举例: 假设内部RAM的30H单元的内容为40H,而40H单元的内容为10H。端口1 的数据为
11001010B(0CAH)。则指令序列
MOV
MOV
MOV
MOV
MOV
MOV
R0, #30H
A, @R0
R1, A
B, @Rl
@Rl, Pl
P2, P1
;R0< = 30H
;A < = 40H
;R1 < = 40H
;B < = 10H
;RAM (40H) < = 0CAH
;P2 #0CAH
d
e
t
i
im
L
执行完毕后,寄存器0的内容为30H,累加器和寄存器1的内容都为40H,寄存器B的
内容为10H,RAM中40H单元和P2口的内容均为0CAH。
MOV A,Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
C
T
S
1 1
1
U
C
M
0
1 r r r
1 1 1 0
0 1 0 1
操作: MOV
(A) ��
←�����
����
(Rn)
*MOV A,direct
指令长度(字节): 2
执行周期: 1
二进制编码:
direct address
操作: MOV
(A)��
←���������
��������
(direct)
注意:MOV A, ACC是无效指令。
MOV A,@Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1
1
0
0 1 1 i
操作: MOV
(A) ��
←�������
������
((Ri))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
395
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOV A,#data
指令长度(字节): 2
执行周期: 1
二进制编码:
0 1 1 1
0 1 0 0
immediate data
操作: MOV
←� �����
#data
(A)��
MOV Rn, A
指令长度(字节): 1
执行周期: 1
二进制编码:
1 1 1 1
1 r r r
操作: MOV
(Rn)����
←���
(A)
d
e
t
i
im
MOV Rn,direct
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 1 0
操作: MOV
(Rn)���������
←��������
(direct)
MOV Rn,#data
指令长度(字节): 2
执行周期: 1
二进制编码:
C
T
S
0 1 1 1
L
1 r r r
direct addr.
1 r r r
immediate data
0 1 0 1
direct address
1 r r r
direct address
U
C
M
操作: MOV
(Rn) ←�
�� �����
#data
MOV direct, A
指令长度(字节): 2
执行周期: 1
二进制编码:
1 1 1 1
操作: MOV
(direct) ←����
�� ���
(A)
MOV direct, Rn
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 0 0
操作: MOV
(direct) ←�����
�� ����
(Rn)
396
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOV direct, direct
指令长度(字节): 3
执行周期: 2
二进制编码:
1 0 0 0
0 1 0 1
dir.addr. (src)
操作: MOV
(direct)��
←���������
��������
(direct)
MOV direct, @Ri
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 0 0
0 1 1 i
direct addr.
操作: MOV
(direct)�������
←������
((Ri))
d
e
t
i
im
MOV direct,#data
指令长度(字节): 3
执行周期: 2
二进制编码:
0 1 1 1
操作: MOV
(direct) ← �����
�� �����
#data
MOV @Ri, A
指令长度(字节): 1
执行周期: 1
二进制编码:
U
C
M
0 1 0 1
C
T
S
1 1 1 1
direct address
L
0 1 1 i
操作: MOV
((Ri)) ←����
�� (A)
���
MOV @Ri, direct
指令长度(字节): 2
执行周期: 2
二进制编码:
1 0 1 0
0 1 1 i
direct addr.
0 1 1 i
immediate data
操作: MOV
((Ri)) ←���������
�� (direct)
��������
MOV @Ri, #data
指令长度(字节): 2
执行周期: 1
二进制编码:
0 1 1 1
操作: MOV
((Ri)) ←�
�� �����
#data
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
397
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOV ,
功能: 传送位变量
说明:
将代表的布尔变量复制到所指定的数据单元中去,两个操作数
必须有一个是进位标志,而另外一个是可直接寻址的位。本指令不影响其他寄存器和
标志位。
举例: 假设进位标志C的初值为1,端口P2中的数据是11000101B,端口1的数据被设置为
35H(00110101B)。则指令序列
MOV
MOV
MOV
P1.3, C
C, P3.3
P1.2, C
执行后,进位标志被清零,端口1的数据变为39H(00111001B)。
MOV C,bit
指令长度(字节): 2
执行周期: 1
二进制编码:
1
0
1
0
0
0
1
0
操作: MOV
(C) ��
←������
�����
(bit)
U
C
M
MOV bit,C
指令长度(字节): 2
执行周期: 2
二进制编码:
C
T
S
1
0
0
1
0
0
1
d
e
t
i
im
bit address
0
L
bit address
操作: MOV
(bit)��
←����
(C)
���
MOV DPTR , #data 16
功能: 将16位的常数存放到数据指针
说明:
该指令将16位常数传递给数据指针DPTR。16位的常数包含在指令的第2字节和
第3字节中。其中DPH中存放的是#data16的高字节,而DPL中存放的是#data16的低字
节。不影响标志位。
该指令是唯一一条能一次性移动���������
16�������
位数据的指令。
举例: 指令:
MOV
DPTR, #1234H
将立即数1234H装入数据指针寄存器中。DPH的值为12H,DPL的值为34H。
指令长度(字节): 3
执行周期: 2
二进制编码: 1 0 0
1
0
0
0
0
immediate data 15-8
操作: MOV
(DPTR) ��
←� �����
#data15-0
DPH DPL ← #data
�� �����15-8 #data7-0
398
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOVC A , @A+
功能: 把程序存储器中的代码字节数据(常数数据)转送至累加器A
说明: MOVC指令将程序存储器中的代码字节或常数字节传送到累加器A。被传送的数据字
节的地址是由累加器中的无符号8位数据和16位基址寄存器(DPTR或PC)的数值相
加产生的。如果以PC为基址寄存器,则在累加器内容加到PC之前,PC需要先增加到
指向紧邻MOVC之后的语句的地址;如果是以DPTR为基址寄存器,则没有此问题。
在执行16位的加法时,低8位产生的进位会传递给高8位。本指令不影响标志位。
举例:
假设累加器A的值处于0~4之间,如下子例程将累加器A中的值转换为用DB伪指
令(定义字节)定义的4个值之一。
REL-PC:
INC
A
MOVC A, @A+PC
RET
DB
66H
DB
77H
DB
88H
DB
99H
U
C
M
d
e
t
i
im
L
如果在调用该子例程之前累加器的值为01H,执行完该子例程后,累加器的值
变为77H。MOVC指令之前的INC A指令是为了在查表时越过RET而设置的。如果
MOVC和表格之间被多个代码字节所隔开,那么为了正确地读取表格,必须将相应
的字节数预先加到累加器A上。
C
T
S
MOVC A,@A+DPTR
指令长度(字节): 1
执行周期: 2
二进制编码:
1 0
0
1
0 0 1 1
操作: MOVC
(A) ��
←�������������
������������
((A)+(DPTR))
MOVC A,@A+PC
指令长度(字节): 1
执行周期: 2
二进制编码:
1 0 0 0
0 0 1 1
操作: MOVC
(PC) ��
← (PC)+1
������
(A) ��
←�����������
����������
((A)+(PC))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
399
STC15F2K60S2系列单片机指南
MOVX
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
,
功能: 外部传送
说明:
MOVX指令用于在累加器和外部数据存储器之间传递数据。因此在传送指令
MOV后附加了X。MOVX又分为两种类型,它们之间的区别在于访问外部数据RAM
的间接地址是8位的还是16位的。
对于第1种类型,当前工作寄存器组的R0和R1提供8位地址到复用端口P0。对于
外部I/O扩展译码或者较小的RAM阵列,8位的地址已经够用。若要访问较大的RAM
阵列,可在端口引脚上输出高位的地址信号。此时可在MOVX指令之前添加输出指
令,对这些端口引脚施加控制。
对于第2种类型,通过数据指针DPTR产生16位的地址。当P2端口的输出缓冲器
发送DPH的内容时,P2的特殊功能寄存器保持原来的数据。在访问规模较大的数据
阵列时,这种方式更为有效和快捷,因为不需要额外指令来配置输出端口。
d
e
t
i
im
在某些情况下,可以混合使用两种类型的MOVX指令。在访问大容量的RAM
空间时,既可以用数据指针DP在P2端口上输出地址的高位字节,也可以先用某条
指令,把地址的高位字节从P2端口上输出,再使用通过R0或Rl间址寻址的MOVX指
令。
举例:
U
C
M
L
假设有一个分时复用地址/数据线的外部RAM存储器,容量为256B(如�
:Inte1的
8155 RAM / I/O / TIMER),该存储器被连接到8051的端口P0上,端口P3被用于提供
外部RAM所需的控制信号。端口Pl和P2用作通用输入/输出端口。R0和Rl中的数据分
别为12H和34H,外部RAM的34H单元存储的数据为56H,则下面的指令序列:
C
T
S
MOVX
MOVX
A, @R1
@R0, A
将数据56H复制到累加器A以及外部RAM的12H单元中。
MOVX A,@Ri
指令长度(字节): 1
执行周期: 2
二进制编码:
1 1
1
0
0 0 1 i
操作: MOVX
(A) ��
←�������
������
((Ri))
MOVX A,@DPTR
指令长度(字节): 1
执行周期: 2
二进制编码:
1 1 1 0
0 0 0 0
操作: MOVX
(A) ��
←���������
��������
((DPTR))
400
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
MOVX
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
@Ri, A
指令长度(字节): 1
执行周期: 2
二进制编码:
1 1 1 1
0 0 1 i
操作: MOVX
((Ri))��
←����
(A)
���
MOVX
@DPTR, A
指令长度(字节): 1
执行周期: 2
二进制编码:
1 1 1 1
0 0 0 0
d
e
t
i
im
操作: MOVX
(DPTR)����
←���
(A)
MUL AB
U
C
M
功能: 乘法
L
说明: 该指令可用于实现累加器和寄存器B中的无符号8位整数的乘法。所产生的16位乘积
的低8位存放在累加器中,而高8位存放在寄存器B中。若乘积大于255(0FFH),则置
位溢出标志;否则清零标志位。在执行该指令时,进位标志总是被清零。
C
T
S
举例: 假设累加器A的初始值为80(50H),寄存器B的初始值为160 (0A0H),则指令�
:
MUL AB
求得乘积12 800 (3200H),所以寄存器B的值变成32H (00110010B),累加器被清零,
溢出标志被置位,进位标志被清零。
指令长度(字节): 1
执行周期: 4
二进制编码:
1
0
1
0
0
1
0
0
操作: MUL
(A)×(B)
(A)7-0 ←��������
(B)15-8
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
401
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
NOP
功能: 空操作
说明: 执行本指令后,将继续执行随后的指令。除了PC外,其他寄存器和标志位都不会有
变化。
举例: 假设期望在端口P2的第7号引脚上输出一个长时间的低电平脉冲,该脉冲持续5个机
器周期(精确)。若是仅使用SETB和CLR指令序列,生成的脉冲只能持续1个机器周
期。因而需要设法增加4个额外的机器周期。可以按照如下方式来实现所要求的功能
(假设中断没有被启用):
CLR
NOP
NOP
NOP
NOP
SETB
P2.7
指令长度(字节): 1
执行周期: 1
二进制编码:
0
0
d
e
t
i
im
P2.7
0
0
操作: NOP
(PC)+1
(PC) ←�������
C
T
S
ORL ,
0
0
0
0
U
C
M
L
功能: 两个字节变量的逻辑或运算
说明:
ORL指令将由和所指定的两个字节变量进行逐位逻辑或运
算,结果存放在所代表的数据单元中。该操作不影响标志位。
两个操作数组合起来,支持6种寻址方式。当目的操作数是累加器A时,源操作
数可以采用寄存器寻址、直接寻址、寄存器间接寻址或者立即寻址。当目的操作数
采用直接寻址方式时,源操作数可以是累加器或立即数。
注意:如果该指令被用来修改输出引脚上的状态,那么所代表的数
据是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。
举例:
假设累加器A中数据为0C3H (11000011B),寄存器R0中的数据为55H(01010101) ,
则指令�
:
ORL
A, R0
执行后,累加器的内容变成0D7H(11010111B)。当目的操作数是直接寻址数据字节
时,ORL指令可用来把任何RAM单元或者硬件寄存器中的各个位设置为1。究竟哪
些位会被置1由屏蔽字节决定,屏蔽字节既可以是包含在指令中的常数,也可以是
累加器A在运行过程中实时计算出的数值。执行指令�
:
ORL
P1, #00110010B
之后,把1口的第5、4、1位置1。
402
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ORL A,Rn
指令长度(字节): 1
执行周期: 1
二进制编码:
0
1
0
0
1
r
r
r
1
0
1
操作: ORL
(A) ��
←����
���
(A)∨(Rn)
ORL A,direct
指令长度(字节): 2
执行周期: 1
二进制编码:
0
1
0
0
0
direct address
操作: ORL
(A)��
←����
���
(A)∨(direct)
d
e
t
i
im
ORL A,@Ri
指令长度(字节): 1
执行周期: 1
二进制编码:
0
1
0
0
0
1
1
i
1
0
0
U
C
M
操作: ORL
(A)��
←����
���
(A)∨((Ri))
ORL A,#data
指令长度(字节): 2
执行周期: 1
二进制编码:
C
T
S
0
1
0
0
0
L
immediate data
操作: ORL
(A)��
←����
���
(A)∨ #data
ORL direct, A
指令长度(字节): 2
执行周期: 1
二进制编码:
0
1
0
0
0
0
1
0
direct address
1
direct address
操作: ORL
(direct)��
←���������
��������
(direct)∨(A)
ORL direct, #data
指令长度(字节): 3
执行周期: 2
二进制编码:
0
1
0
0
0
0
1
immediate data
操作: ORL
(direct) ←���������
�� ��������
(direct)∨#data
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
403
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
ORL
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
C,
功能: 位变量的逻辑或运算
说明: 如果所表示的位变量为1,则置位进位标志;否则,保持进位标志的当前状
态不变。在汇编语言中,位于源操作数之前的“/”表示将源操作数取反后使用,但
源操作数本身不发生变化。在执行本指令时,不影响其他标志位。
举例: 当执行如下指令序列时,当且仅当P1.0=1或ACC.7=1或OV=0时,置位进位标志C:
MOV
ORL
ORL
C, P1.0
C, ACC.7
C, /OV
;LOAD CARRY WITH INPUT PIN P10
;OR CARRY WITH THE ACC.BIT 7
;OR CARRY WITH THE INVERSE OF OV
ORL C, bit
指令长度(字节): 2
执行周期: 2
二进制编码:
0
1
1
1
0
0
1
0
ORL C, /bit
指令长度(字节): 2
执行周期: 2
二进制编码:
1
0
1
0
0
0
操作: ORL
(C) ��
←����
���
(C)∨(bit)
POP direct
C
T
S
U
C
M
0
0
d
e
t
i
im
bit address
操作: ORL
(C) ��
←����
���
(C)∨(bit)
L
bit address
功能: 出栈
说明: 读取栈指针所指定的内部RAM单元的内容,栈指针减1。然后,将读到的内容传送到
由direct所指示的存储单元(直接寻址方式)中去。该操作不影响标志位。
举例:
设栈指针的初值为32H,内部RAM的30H~32H单元的数据分别为20H、23H和
:
01H。则执行指令�
POP DPH
POP DPL
之后,栈指针的值变成30H,数据指针变为0123H。此时指令
POP SP
将把栈指针变为20H 。
注意:在这种特殊情况下,在写入出栈数据(20H)之前,栈指针先减小到
2FH,然后再随着20H的写入,变成20H。
指令长度(字节): 2
执行周期: 2
二进制编码: 1 1 0 1
0
0
0
0
direct address
操作: POP
((SP))
(direct) ←�������
(SP) ��
←������
�����
(SP) ��- �1
404
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
PUSH direct
功能: 压栈
说明: 栈指针首先加1,然后将direct所表示的变量内容复制到由栈指针指定的内部RAM存
储单元中去。该操作不影响标志位。
举例: 设在进入中断服务程序时栈指针的值为09H,数据指针DPTR的值为0123H。则执行如
下指令序列
PUSH
PUSH
DPL
DPH
之后,栈指针变为0BH,并把数据23H和01H分别存入内部RAM的0AH和0BH存储单
元之中。
指令长度(字节): 2
执行周期: 2
二进制编码: 1 1 0 0
0
0
0
操作: PUSH
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←���������
��������
(direct)
RET
0
U
C
M
C
T
S
功能: 从子例程返回
d
e
t
i
im
direct address
L
说明: 执行RET指令时,首先将PC值的高位字节和低位字节从栈中弹出,栈指针减2。然
后,程序从形成的PC值所对应的地址处开始执行,一般情况下,该指令和ACALL或
LCALL配合使用。改指令的执行不影响标志位。
举例: 设栈指针的初值为0BH,内部RAM的0AH和0BH存储单元中的数据分别为23H和
01H。则指令:
RET
执行后,栈指针变为09H。程序将从0123H地址处继续执行。
指令长度(字节): 1
执行周期: 2
二进制编码: 0 0 1 0
0
0
1
0
操作: RET
(PC15-8) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
(PC7-0) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
405
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RETI
功能: 中断返回
说明: 执行该指令时,首先从栈中弹出PC值的高位和低位字节,然后恢复中断启用,准备
接受同优先级的其他中断,栈指针减2。其他寄存器不受影响。但程序状态字PSW
不会自动恢复到中断前的状态。程序将继续从新产生的PC值所对应的地址处开始执
行,一般情况下是此次中断入口的下一条指令。在执行RETI指令时,如果有一个优
先级较低的或同优先级的其他中断在等待处理,那么在处理这些等待中的中断之前需
要执行1条指令。
举例: 设栈指针的初值为0BH,结束在地址0123H处的指令执行结束期间产生中断,内部
RAM的0AH和0BH单元的内容分别为23H和01H。则指令�
:
RETI
d
e
t
i
im
执行完毕后,栈指针变成09H,中断返回后程序继续从0123H地址开始执行。
指令长度(字节): 1
执行周期: 2
二进制编码: 0 0 1 1
0
0
1
0
U
C
M
操作: RETI
(PC15-8) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
(PC7-0) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
C
T
S
L
RL A
功能: 将累加器A中的数据位循环左移
说明: 将累加器中的8位数据均左移1位,其中位7移动到位0。该指令的执行不影响标志位。
举例: 设累加器的内容为0C5H(11000101B),则指令
RL
A
执行后,累加器的内容变成8BH(10001011B),且标志位不受影响。
指令长度(字节): 1
执行周期: 1
二进制编码: 0 0 1 0
0
0
1
1
操作: RL
(An+1) ��
←�����������
����������
(An) n ��
= ���
0-6
(A0) ��
←�����
����
(A7)
406
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
RLC A
功能: 带进位循环左移
说明: 累加器的8位数据和进位标志一起循环左移1位。其中位7移入进位标志,进位标志的
初始状态值移到位0。该指令不影响其他标志位。
举例: 假设累加器A的值为0C5H(11000101B),则指令
RLC
A
执行后,将把累加器A的数据变为8BH(10001011B),进位标志被置位。
指令长度(字节): 1
执行周期: 1
二进制编码:
0
0
1 1
操作: RLC
←���
��
(An)
(An+1) ��
(A0) ←����
�� (C)
���
(C) ←���
�� (A
��7)
0
0
1
1
d
e
t
i
im
n = 0-6
U
C
M
RR A
L
功能: 将累加器的数据位循环右移
C
T
S
说明: 将累加器的8个数据位均右移1位,位0将被移到位7,即循环右移,该指
令不影响标志位。
举例: 设累加器的内容为0C5H(11000101B),则指令
RR
A
执行后累加器的内容变成0E2H(11100010B),标志位不受影响。
指令长度(字节): 1
执行周期: 1
二进制编码: 0 0 0 0
操作: RR
�� (A
��n+1)
(An) ←���
�� (A
��0)
(A7) ←���
南通国芯微电子有限公司
0
0
1
1
n=0-6
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
407
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RRC A
功能: 带进位循环右移
说明: 累加器的8位数据和进位标志一起循环右移1位。其中位0移入进位标志,进位标志的
初始状态值移到位7。该指令不影响其他标志位。
举例: 假设累加器的值为0C5H(11000101B),进位标志为0,则指令
RRC
A
执行后,将把累加器的数据变为62H(01100010B),进位标志被置位。
指令长度(字节): 1
执行周期: 1
二进制编码:
0
0
0 1
0
操作: RRC
�� ��
(An)
(An+1) ←���
←����
���
(C)
(A7) ��
(C) ��
←���
��
(A0)
SETB
0
1
1
d
e
t
i
im
n = 0-6
U
C
M
功能: 置位
L
说明: SETB指令可将相应的位置1,其操作对象可以是进位标志或其他可直接寻址的位。
该指令不影响其他标志位。
C
T
S
举例: 设进位标志被清零,端口1的输出状态为34H(00110100B),则指令
SETB
C
SETB
P1.0
执行后,进位标志变为1,端口1的输出状态变成35H(00110101B)。
SETB
C
指令长度(字节): 1
执行周期: 1
二进制编码:
1
1
0 1
0
0
1
1
0
0
0
1
0
操作: SETB
(C) ��
←��
�1
SETB
bit
指令长度(字节): 2
执行周期: 1
二进制编码:
1
1
1
bit address
操作: SETB
(bit) ←��
�� 1�
408
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
SJMP rel
功能: 短跳转
说明: 程序无条件跳转到rel所示的地址去执行。目标地址按如下方法计算:首先PC值加2,
然后将指令第2字节(即rel)所表示的有符号偏移量加到PC上,得到的新PC值即短
跳转的目标地址。所以,跳转的范围是当前指令(即SJMP)地址的前128字节和后
127字节。
举例: 设标号RELADR对应的指令地址位于程序存储器的0123H地址,则指令:
SJMP
RELADR
汇编后位于0100H。当执行完该指令后,PC值变成0123H。
注意:在上例中,紧接SJMP的下一条指令的地址是0102H,因此,跳转的偏移
量为0123H-0102H=21H。另外,如果SJMP的偏移量是0FEH,那么构成只有1条指
令的无限循环。
指令长度(字节): 2
执行周期: 2
二进制编码:
1
0
0 0
0
操作: SJMP
←�������
������
(PC)+2
(PC) ��
(PC) ��
←���������
��������
(PC)+rel
SUBB A,
C
T
S
功能: 带借位的减法
说明:
0
0
0
rel. address
U
C
M
d
e
t
i
im
L
SUBB指令从累加器中减去所代表的字节变量的数值及进位标志,减
法运算的结果置于累加器中。如果执行减法时第7位需要借位,SUBB将会置位进位
标志(表示借位);否则,清零进位标志。(如果在执行SUBB指令前,进位标志
C已经被置位,这意味着在前面进行多精度的减法运算时,产生了借位。因而在执
行本条指令时,必须把进位连同源操作数一起从累加器中减去。)如果在进行减法
运算的时候,第3位处向上有借位,那么辅助进位标志AC会被置位;如果第6位有借
位;而第7位没有,或是第7位有借位,而第6位没有, 则溢出标志OV被置位。
当进行有符号整数减法运算时,若OV置位,则表示在正数减负数的过程中产生
了负数;或者,在负数减正数的过程中产生了正数。
源操作数支持的寻址方式:寄存器寻址、直接寻址、寄存器间接寻址和立即数
寻址。
举例:
设累加器中的数据为0C9H(11001001B)。寄存器R2的值为54H(01010100B),进
位标志C被置位。则如下指令:
SUBB
A, R2
执行后,累加器的数据变为74H(01110100B),进位标志C和辅助进位标志AC被清
零,溢出标志C被置位。
注意:0C9H减去54H应该是75H,但在上面的计算中,由于在SUBB指令执行
前,进位标志C已经被置位,因而最终结果还需要减去进位标志,得到74H。因此,
如果在进行单精度或者多精度减法运算前,进位标志C的状态未知,那么应改采用
CLR C 指令把进位标志C清零。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
409
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
SUBB A, Rn
指令长度(字节): 1
执行周期: 1
二进制编码: 1 0 0 1
1 r r r
操作: SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ����
(Rn)
SUBB A, direct
指令长度(字节): 2
执行周期: 1
二进制编码: 1 0 0
1
0
1
0
1
direct address
操作: SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ��������
(direct)
d
e
t
i
im
SUBB A, @Ri
指令长度(字节): 1
执行周期: 1
二进制编码: 1 0 0
1
0
1
1
i
操作: SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ������
((Ri))
U
C
M
SUBB A, #data
指令长度(字节): 2
执行周期: 1
二进制编码: 1 0 0
C
T
S
1
0
1
0
0
L
immediate data
操作: SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- �����
#data
SWAP A
功能: 交换累加器的高低半字节
说明: SWAP指令把累加器的低4位(位3~位0)和高4位(位7~位4)数据进行交换。实际上
SWAP指令也可视为4位的循环指令。该指令不影响标志位。
举例: 设累加器的内容为0C5H(11000101B),则指令
SWAP
A
执行后,累加器的内容变成5CH(01011100B)。
指令长度(字节): 1
执行周期: 1
二进制编码:
1
1
0 0
操作: SWAP
(A3-0)
410
南通国芯微电子有限公司
0
1
0
0
(A7-4)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
XCH A,
功能: 交换累加器和字节变量的内容
说明: XCH指令将所指定的字节变量的内容装载到累加器,同时将累加器的旧内容
写入所指定的字节变量。指令中的源操作数和目的操作数允许的寻址方式:寄
存器寻址、直接寻址和寄存器间接寻址。
举例: 设R0的内容为地址20H,累加器的值为3FH (00111111B)。内部RAM的20H单元的内
容为75H (01110101B)。则指令
XCH
A, @R0
执行后,内部RAM的20H单元的数据变为3FH (00111111B),累加器的内容变为
75H(01110101B)。
XCH A, Rn
指令长度(字节): 1
执行周期: 1
二进制编码: 1 1 0 0
操作: XCH
(A)
1 r r r
(Rn)
XCH A, direct
指令长度(字节): 2
执行周期: 1
二进制编码: 1 1 0 0
C
T
S
操作: XCH
(A)
U
C
M
0 1 0 1
d
e
t
i
im
L
direct address
(direct)
XCH A, @Ri
指令长度(字节): 1
执行周期: 1
二进制编码: 1 1 0 0
操作: XCH
(A)
南通国芯微电子有限公司
0 1 1
i
((Ri))
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
411
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
XCHD A, @Ri
功能: 交换累加器和@Ri对应单元中的数据的低4位
说明: XCHD指令将累加器内容的低半字节(位0~3,一般是十六进制数或BCD码)和间接
寻址的内部RAM单元的数据进行交换,各自的高半字(位7~4)节不受影响。另外,
该指令不影响标志位。
举例: 设R0保存了地址20H,累加器的内容为36H (00110110B)。内部RAM的20H单元存储
的数据为75H (011110101B)。则指令:
XCHD
A, @R0
执行后,内部RAM 20H单元的内容变成76H (01110110B),累加器的内容变为
35H(00110101B)。
指令长度(字节): 1
执行周期: 1
二进制编码: 1 1 0 1
操作: XCHD
(A3-0)
(Ri3-0)
XRL ,
C
T
S
功能: 字节变量的逻辑异或
说明:
d
e
t
i
im
0 1 1 i
U
C
M
L
XRL指令将和所代表的字节变量逐位进行逻辑异或运算,
结果保存在所代表的字节变量里。该指令不影响标志位。
两个操作数组合起来共支持6种寻址方式:当目的操作数为累加器时,源操作数
可以采用寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址;当目的操作数是
可直接寻址的数据时,源操作数可以是累加器或者立即数。
注意:如果该指令被用来修改输出引脚上的状态,那么dest-byte所代表的数据就
是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。
举例:
如果累加器和寄存器0的内容分别为0C3H (11000011B)和0AAH(10101010B),则
指令�
:
XRL
A, R0
执行后,累加器的内容变成69H (01101001B)。
当目的操作数是可直接寻址字节数据时,该指令可把任何RAM单元或者寄存器
中的各个位取反。具体哪些位会被取反,在运行过程当中确定。指令�
:
XRL
P1, #00110001B
执行后,P1口的位5、4、0被取反。
412
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
XRL A, Rn
操作: XRL
(A) ��
← (A)�
����
≮
指令长度(字节): 1
执行周期: 1
二进制编码: 0 1 1 0
1 r r r
(Rn)
XRL A, direct
指令长度(字节): 2
执行周期: 1
0 1 1 0
操作: XRL
(A) ��
← (A)�
����
0 1 0 1
≮
二进制编码:
direct address
(direct)
d
e
t
i
im
XRL A, @Ri
指令长度(字节): 1
执行周期: 1
0 1
1
操作: XRL
(A) ��
← (A)�
����
0
≮
二进制编码:
0 1 1 i
((Ri))
XRL A, #data
执行周期: 1
二进制编码:
C
T
S
0 1
1
操作: XRL
(A) ��
← (A)�
����
0
≮
指令长度(字节): 2
U
C
M
0 1 0 0
L
immediate data
#data
XRL direct, A
指令长度(字节): 2
执行周期: 1
0 1
1
0
0 0 1 0
操作: XRL
(direct) ← (direct)�
�� ���������
≮
二进制编码:
direct address
(A)
XRL direct, #data
指令长度(字节): 3
执行周期: 2
0 1
1
0
0 0 1 1
操作: XRL
(direct) ← (direct)�
�� ���������
南通国芯微电子有限公司
≮
二进制编码:
direct address
immediate data
# data
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
413
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
5.3.2 Instruction Definitions of Traditional 8051 MCU
ACALL addr 11
Function:
Description:
Example:
Absolute Call
ACALL unconditionally calls a subroutine located at the indicated address.The instruction
increments the PC twice to obtain the address of the following instruction, then pushes the
16-bit result onto the stack (low-order byte first) and increments the Stack Pointer twice.
The destination address is obtained by suceesively concatenating the five high-order bits of
the incremented PC opcode bits 7-5,and the second byte of the instruction. The subroutine
called must therefore start within the same 2K block of the program memory as the first byte
of the instruction following ACALL. No flags are affected.
Initially SP equals 07H. The label “SUBRTN” is at program memory location 0345H. After
executingthe instruction,
ACALL SUBRTN
d
e
t
i
im
at location 0123H, SP will contain 09H, internal RAM locations 08H and 09H will contain
25H and 01H, respectively, and the PC will contain 0345H.
Bytes:
Cycles:
Encoding:
Operation:
2
2
a10 a9 a8 1
U
C
M
0 0 1 0
a7 a6 a5 a4
L
a3 a2 a1 a0
ACALL
(PC)��
←��������
�������
(PC)+ 2
(SP)���������
←��������
(SP) + 1
((SP)) ��
←����
���
(PC7-0)
(SP)���������
←��������
(SP) + 1
((SP))����
←���
(PC15-8)
(PC10-0)��
←� page
����� �������
address
C
T
S
ADD A,
Function:
Description:
Add
ADD adds the byte variable indicated to the Accumulator, leaving the result in the
Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carryout from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag
indicates an overflow occured.
OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit
6; otherwise OV is cleared. When adding signed integers, OV indicates a negative number
produced as the sum of two positive operands, or a positive sum from two negative operands.
Example:
Four source operand addressing modes are allowed: register,direct register-indirect, or
immediate.
The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B). The
instruction,
ADD A,R0
will leave 6DH (01101101B) in the Accumulator with the AC flag cleared and both the carry
flag and OV set to 1.
414
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ADD A,Rn
Bytes:
Cycles:
1
1
Encoding:
Operation:
0 0
1
0
1 r r r
ADD
(A)�����������
←����������
(A) + (Rn)
ADD A,direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 0 1 0
0 1 0 1
direct address
ADD
(A)���������������
←��������������
(A) + (direct)
d
e
t
i
im
ADD A,@Ri
Bytes:
1
Cycles:
1
Encoding:
Operation:
0 0
1
0
0 1 1 i
ADD
(A)�������������
←������������
(A) + ((Ri))
ADD A,#data
Bytes:
Cycles:
Encoding:
Operation:
2
1
C
T
S
0 0 1 0
U
C
M
0 1 0 0
L
immediate data
ADD
(A)�������
←������
(A) + �����
#data
ADDC A,
Function:
Description:
Example:
Add with Carry
ADDC simultaneously adds the byte variable indicated, the Carry flag and the Accumulator,
leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively,
if there is a carry-out from bit 7 or bit 3, and cleared otherwise. When adding unsigned
integers, the carry flag indicates an overflow occured.
OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not
out of bit 6; otherwise OV is cleared. When adding signed integers, OV indicates a negative
number produced as the sum of two positive operands or a positive sum from two negative
operands.
Four source operand addressing modes are allowed: register, direct, register-indirect, or
immediate.
The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B) with the
Carry. The instruction,
ADDC A,R0
will leave 6EH (01101101B) in the Accumulator with the AC flag cleared and both the carry
flag and OV set to 1.
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
415
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ADDC A,Rn
Bytes:
Cycles:
1
1
Encoding:
Operation:
0 0
1
1
1 r r r
ADDC
(A)�����������������
←����������������
(A) + (C) + (Rn)
ADDC A,direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 0 1 1
0 1 0 1
direct address
ADDC
(A)���������������������
←��������������������
(A) + (C) + (direct)
d
e
t
i
im
ADDC A,@Ri
Bytes:
1
Cycles:
1
Encoding:
Operation:
0 0
1
1
0 1 1 i
U
C
M
ADDC
(A)�������������������
←������������������
(A) + (C) + ((Ri))
ADDC A,#data
Bytes:
2
Cycles:
1
Encoding:
Operation:
C
T
S
0 0 1 1
0 1 0 0
L
immediate data
ADDC
(A)�������������
←������������
(A) + (C) + �����
#data
AJMP addr 11
Function:
Description:
Example:
Bytes:
Cycles:
Encoding:
Operation:
416
Absolute Jump
AJMP transfers program execution to the indicated address, which is formed at run-time by
concatenating the high-order five bits of the PC (after incrementing the PC twice), opcode
bits 7-5, and the second byte of the instruction. The destination must therefore be within the
same 2K block of program memory as the first byte of the instruction following AJMP.
The label “JMPADR” is at program memory location 0123H. The instruction,
AJMP JMPADR
is at location 0345H and will load the PC with 0123H.
2
2
a10 a9 a8 0
0 0 0 1
a7 a6 a5 a4
a3 a2 a1 a0
AJMP
(PC)��
←��������
�������
(PC)+ 2
(PC10-0)��
←� �����
page �������
address
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ANL ,
Function:
Description:
Logical-AND for byte variables
ANL performs the bitwise logical-AND operation between the variables indicated and stores
the results in the destination variable. No flags are affected.
The two operands allow six addressing mode combinations. When the destination is the
Accumulator, the source can use register, direct, register-indirect, or immediate addressing;
when the destination is a direct address, the source can be the Accumulator or immediate
data.
Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch not the input pins.
Example:
If the Accumulator holds 0C3H(11000011B) and register 0 holds 55H (01010101B) then the
instruction,
ANL A,R0
d
e
t
i
im
will leave 41H (01000001B) in the Accumulator.
When the destination is a directly addressed byte, this instruction will clear combinations of
bits in any RAM location or hardware register. The mask byte determining the pattern of bits
to be cleared would either be a constant contained in the instruction or a value computed in
the Accumulator at run-time. The instruction,
ANL Pl, #01110011B
U
C
M
L
will clear bits 7, 3, and 2 of output port 1.
ANL A,Rn
Bytes:
Cycles:
1
1
Encoding:
Operation:
C
T
S
0 1
0
1
1 r r r
ANL
(A)�����
←����
(A) ∧ (Rn)
ANL A,direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 1 0 1
0 1 0 1
direct address
ANL
(A)�����
←����
(A) ∧ (direct)
ANL A,@Ri
Bytes:
1
Cycles:
1
Encoding:
Operation:
0 1
0
1
0 1 1 i
ANL
(A)�����
←����
(A) ∧ ((Ri))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
417
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ANL A,#data
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 1 0 1
0 1 0 0
immediate data
ANL
(A)�����
←����
(A) ∧ #data
ANL direct,A
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 1 0 1
0 0 1 0
direct address
ANL
(direct)����������
←���������
(direct) ∧ (A)
d
e
t
i
im
ANL direct,#data
Bytes:
3
Cycles:
2
Encoding:
Operation:
0 1 0 1
U
C
M
0 0 1 1
immediate data
ANL
(direct)����������
←���������
(direct) ∧ #data
C
T
S
ANL C ,
Function:
Description:
L
direct address
Logical-AND for bit variables
If the Boolean value of the source bit is a logical 0 then clear the carry flag; otherwise
leave the carry flag in its current state. A slash (“ / ”) preceding the operand in the assembly
language indicates that the logical complement of the addressed bit is used as the source
value, but the source bit itself is not affceted. No other flsgs are affected.
Only direct addressing is allowed for the source operand.
Example:
Set the carry flag if, and only if, P1.0 = 1, ACC. 7 = 1, and OV = 0:
MOV C, P1.0
;LOAD CARRY WITH INPUT PIN STATE
ANL C, ACC.7
;AND CARRY WITH ACCUM. BIT.7
ANL C, /OV
;AND WITH INVERSE OF OVERFLOW FLAG
ANL C,bit
Bytes:
2
Cycles:
2
Encoding:
Operation:
418
1 0 0 0
0 0 1 0
bit address
ANL
(C) ��
← ����
����
(C) ∧ (bit)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ANL C, /bit
Bytes:
2
Cycles:
2
Encoding:
1 0 1 1
Operation:
ANL
(C)�����
←����
(C) ∧ (bit)
0 0 0 0
bit address
CJNE , , rel
Function:
Description:
Compare and Jump if Not Equal
CJNE compares the magnitudes of the first two operands, and branches if their values are not
equal. The branch destination is computed by adding the signed relative-displacement in the
last instruction byte to the PC, after incrementing the PC to the start of the next instruction.
The carry flag is set if the unsigned integer value of is less than the unsigned
integer value of ; otherwise, the carry is cleared. Neither operand is affected.
d
e
t
i
im
The first two operands allow four addressing mode combinations: the Accumulator may
be compared with any directly addressed byte or immediate data, and any indirect RAM
location or working register can be compared with an immediate constant.
Example:
L
The Accumulator contains 34H. Register 7 contains 56H. The first instruction in the sequence
CJNE
...
JC
...
;
NOT_EQ:
;
C
T
S
U
C
M
R7,#60H, NOT-EQ
......
REQ_LOW
.....
; R7 = 60H.
; IF R7 < 60H.
; R7 > 60H.
sets the carry flag and branches to the instruction at label NOT-EQ. By testing the carry flag,
this instruction determines whether R7 is greater or less than 60H.
If the data being presented to Port 1 is also 34H, then the instruction,
WAIT: CJNE A,P1,WAIT
clears the carry flag and continues with the next instruction in sequence, since the
Accumulator does equal the data read from P1. (If some other value was being input on Pl,
the program will loop at this point until the P1 data changes to 34H.)
CJNE A,direct,rel
Bytes: 3
Cycles: 2
Encoding:
Operation:
1 0 1 1
0 1 0 1
direct address
rel. address
(PC) ��
←���������
��������
(PC) + 3
IF (A) < > (direct)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (A) < (direct)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
419
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
CJNE A,#data,rel
Bytes:
3
Cycles:
2
Encoding:
Operation:
1 0 1 1
0 1 0 1
immediata data
rel. address
(PC) ��
←���������
��������
(PC) + 3
IF (A) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (A) < (data)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
d
e
t
i
im
CJNE Rn,#data,rel
Bytes:
3
Cycles:
2
Encoding:
Operation:
1 0 1 1
1 r r r
U
C
M
(PC) ��
←���������
��������
(PC) + 3
IF (Rn) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF (Rn) < (data)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
C
T
S
L
immediata data
rel. address
CJNE @Ri,#data,rel
Bytes:
3
Cycles:
2
Encoding:
Operation:
420
1 0 1 1
0 1 1 i
immediate data
rel. address
(PC) ��
←���������
��������
(PC) + 3
IF ((Ri)) < > (data)
THEN
(PC) ��
←��������
�������
(PC) + relative offset
IF ((Ri)) < (data)
THEN
(C) ��
←��
�1
ELSE
(C) ��
←��
�0
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
CLR A
Function:
Description:
Example:
Clear Accumulator
The Aecunmlator is cleared (all bits set on zero). No flags are affected.
The Accumulator contains 5CH (01011100B). The instruction,
CLR A
will leave the Accumulator set to 00H (00000000B).
Bytes:
Cycles:
1
1
Encoding:
Operation:
1 1 1 0
0 1 0 0
CLR
(A)��
←��
�0
CLR bit
Function:
Description:
Example:
d
e
t
i
im
Clear bit
The indicated bit is cleared (reset to zero). No other flags are affected. CLR can operate on
the carry flag or any directly addressable bit.
L
Port 1 has previously been written with 5DH (01011101B). The instruction,
CLR
P1.2
U
C
M
will leave the port set to 59H (01011001B).
CLR C
Bytes:
Cycles:
1
1
C
T
S
Encoding:
1 1
Operation:
CLR
(C) ��
←��
�0
0
0
0 0 1 1
CLR bit
Bytes:
2
Cycles:
1
Encoding:
Operation:
1 1 0 0
0 0 1 0
bit address
CLR
(bit) ← �
�� 0�
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
421
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
CPL A
Function:
Description:
Example:
Complement Accumulator
Each bit of the Accumulator is logically complemented (one’s complement). Bits which
previously contained a one are changed to a zero and vice-versa. No flags are affected.
The Accumulator contains 5CH(01011100B). The instruction,
CPL
A
will leave the Accumulator set to 0A3H (101000011B).
Bytes:
Cycles:
1
1
Encoding:
Operation:
1 1 1 1
0 1 0 0
CPL
(A)��
←� (A)
d
e
t
i
im
CPL bit
Function:
Description:
Example:
Complement bit
The bit variable specified is complemented. A bit which had been a one is changed to zero
and vice-versa. No other flags are affected. CLR can operate on the carry or any directly
addressable bit.
U
C
M
L
Note:When this instruction is used to modify an output pin, the value used as the original
data will be read from the output data latch, not the input pin.
Port 1 has previously been written with 5BH(01011011B). The instruction,
C
T
S
CPL
P1.1
CPL
P1.2
will leave the port set to 5DH(01011101B).
CPL C
Bytes:
Cycles:
1
1
Encoding:
Operation:
1 0
1
1
0 0 1 1
CPL
(C) ��
←� (C)
CPL bit
Bytes:
2
Cycles:
1
Encoding:
Operation:
1 0 1 1
0 0 1 0
bit address
CPL
(bit) ←
�� (bit)
422
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
DA
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
A
Function:
Description:
Decimal-adjust Accumulator for Addition
DA A adjusts the eight-bit value in the Accumulator resulting from the earlier addition of
two variables (each in packed-BCD format), producing two four-bit digits.Any ADD or
ADDC instruction may have been used to perform the addition.
If Accumulator bits 3-0 are greater than nine (xxxx1010-xxxx1111), or if the AC flag is one,
six is added to the Accumulator producing the proper BCD digit in the low-order nibble.
This internal addition would set the carry flag if a carry-out of the low-order four-bit field
propagated through all high-order bits, but it would not clear the carry flag otherwise.
If the carry flag is now set or if the four high-order bits now exceed nine(1010xxxx111xxxx), these high-order bits are incremented by six, producing the proper BCD digit
in the high-order nibble. Again, this would set the carry flag if there was a carry-out of the
high-order bits, but wouldn’t clear the carry. The carry flag thus indicates if the sum of
the original two BCD variables is greater than 100, allowing multiple precision decimal
addition. OV is not affected.
d
e
t
i
im
All of this occurs during the one instruction cycle. Essentially, this instruction performs the
decimal conversion by adding 00H, 06H, 60H, or 66H to the Accumulator, depending on
initial Accumulator and PSW conditions.
U
C
M
L
Note: DA A cannot simply convert a hexadecimal number in the Accumulator to BCD
notation, nor does DA A apply to decimal subtraction.
Example:
The Accumulator holds the value 56H(01010110B) representing the packed BCD digits of
the decimal number 56. Register 3 contains the value 67H (01100111B) representing the
packed BCD digits of the decimal number 67.The carry flag is set. The instruction sequence.
C
T
S
ADDC A,R3
DA
A
will first perform a standard twos-complement binary addition, resulting in the value 0BEH
(10111110) in the Accumulator. The carry and auxiliary carry flags will be cleared.
The Decimal Adjust instruction will then alter the Accumulator to the value 24H
(00100100B), indicating the packed BCD digits of the decimal number 24, the low-order
two digits of the decimal sum of 56,67, and the carry-in. The carry flag will be set by the
Decimal Adjust instruction, indicating that a decimal overflow occurred. The true sum 56,
67, and 1 is 124.
BCD variables can be incremented or decremented by adding 01H or 99H. If the Accumulator initially holds 30H (representing the digits of 30 decimal), then the instruction sequence,
ADD
DA
A,#99H
A
will leave the carry set and 29H in the Accumulator, since 30+99=129. The low-order byte
of the sum can be interpreted to mean 30 – 1 = 29.
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
423
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
Bytes: 1
Cycles: 1
Encoding:
1 1
0 1
0 1 0
0
Operation: DA
-contents of Accumulator are BCD
IF [[(A3-0) > 9] V [(AC) = 1]]
←���
��
(A3-0) + 6
THEN(A3-0) ��
AND
IF [[(A7-4) > 9] V [(C) = 1]]
THEN (A7-4) ��
←���
��
(A7-4) + 6
DEC byte
Function:
Description:
Example:
Decrement
The variable indicated is decremented by 1. An original value of 00H will underflow to
0FFH.
No flags are affected. Four operand addressing modes are allowed: accumulator, register,
direct, or register-indirect.
Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch, not the input pins.
U
C
M
d
e
t
i
im
L
Register 0 contains 7FH (01111111B). Internal RAM locations 7EH and 7FH contain 00H
and 40H, respectively. The instruction sequence,
DEC
@R0
C
T
S
DEC
R0
DEC
@R0
will leave register 0 set to 7EH and internal RAM locations 7EH and 7FH set to 0FFH and
3FH.
DEC A
Bytes:
Cycles:
1
1
Encoding:
Operation:
DEC
424
0 0
0
1
0 1 0 0
DEC
(A)�����
←����
(A) -1
Rn
Bytes:
1
Cycles:
1
Encoding:
0 0 0 1
Operation:
DEC
(Rn)������
←�����
(Rn) ��- �1
南通国芯微电子有限公司
1 r r r
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
DEC
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
direct
Bytes:
Cycles:
2
1
Encoding:
Operation:
DEC
官方网站:www.STCMCU.com
0 0 0 1
0 1 0 1
direct address
DEC
(direct)����������
←���������
(direct) -1
@Ri
Bytes:
1
Cycles:
1
Encoding:
0 0 0 1
Operation:
DEC
((Ri))��������
←�������
((Ri)) ��- �1
0 1 1 i
d
e
t
i
im
DIV AB
Function:
Description:
Divide
DIV AB divides the unsigned eight-bit integer in the Accumulator by the unsigned eight-bit
integer in register B. The Accumulator receives the integer part of the quotient; register B
receives the integer remainder. The carry and OV flags will be cleared.
U
C
M
L
Exception: if B had originally contained 00H, the values returned in the Accumulator and
B-register will be undefined and the overflow flag will be set. The carry flag is cleared in any
case.
Example:
C
T
S
The Accumulator contains 251(OFBH or 11111011B) and B contains 18(12H or 00010010B).
The instruction,
DIV
Bytes:
Cycles:
Encoding:
Operation:
AB
will leave 13 in the Accumulator (0DH or 00001101B) and the value 17 (11H or 00010010B)
in B, since 251 = (13×18) + 17. Carry and OV will both be cleared.
1
4
1 0
0
0
0 1 0 0
DIV
(A)15-8
(A)/(B)
(B)7-0 ←��������
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
425
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
DJNZ ,
Function:
Description:
Decrement and Jump if Not Zero
DJNZ decrements the location indicated by 1, and branches to the address indicated by the
second operand if the resulting value is not zero. An original value of 00H will underflow to
0FFH. No flags are afected. The branch destination would be computed by adding the signed
relative-displacement value in the last instruction byte to the PC, after incrementing the PC
to the first byte of the following instruction.
The location decremented may be a register or directly addressed byte.
Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch, not the input pins.
Example:
Internal RAM locations 40H, 50H, and 60H contain the values 01H, 70H, and 15H,
respectively. The instruction sequence,
DJNZ
DJNZ
DJNZ
40H, LABEL_1
50H, LABEL_2
60H, LABEL_3
d
e
t
i
im
will cause a jump to the instruction at label LABEL_2 with the values 00H, 6FH, and 15H in
the three RAM locations. The first jump was not taken because the result was zero.
L
This instruction provides a simple way of executing a program loop a given number of times,
or for adding a moderate time delay (from 2 to 512 machine cycles) with a single instruction
The instruction sequence,
TOOOLE:
MOV
CPL
DJNZ
C
T
S
U
C
M
R2,#8
P1.7
R2, TOOGLE
will toggle P1.7 eight times, causing four output pulses to appear at bit 7 of output Port 1.
Each pulse will last three machine cycles; two for DJNZ and one to alter the pin.
DJNZ
Rn,rel
Bytes:
Cycles:
2
2
Encoding:
Operation:
DJNZ
1 r r r
rel. address
DJNZ
(PC) ��
← ��������
��������
(PC) + 2
(Rn) ��
← �����
�����
(Rn) ��– �1
IF (Rn) > 0 or (Rn) < 0
THEN
(PC) ��
←�������
������
(PC)+ ���
rel
direct, rel
Bytes: 3
Cycles:
Encoding:
426
1 1 0 1
2
1 1 0 1
南通国芯微电子有限公司
0 1 0 1
direct address
总机:0513-5501 2928 / 2929 / 2966
rel. address
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
Operation:
INC
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
DJNZ
(PC) ��
←���������
��������
(PC) + 2
(direct) ←����������
�� ���������
(direct) ��– �1
IF (direct) > 0 or (direct) < 0
THEN
(PC) ��
← �������
�������
(PC) + ���
rel
Function:
Description:
Increment
INC increments the indicated variable by 1. An original value of 0FFH will overflow to
00H.No flags are affected. Three addressing modes are allowed: register, direct, or registerindirect.
Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch, not the input pins.
Example:
d
e
t
i
im
Register 0 contains 7EH (011111110B). Internal RAM locations 7EH and 7FH contain 0FFH
and 40H, respectively. The instruction sequence,
INC
INC
INC
@R0
R0
@R0
U
C
M
L
will leave register 0 set to 7FH and internal RAM locations 7EH and 7FH holding
(respectively) 00H and 41H.
INC
Bytes:
Cycles:
1
1
Encoding:
Operation:
INC
0 0
0
0
0 1 0 0
INC
(A) ��
← (A)+1
�����
Rn
Bytes:
1
Cycles:
1
Encoding:
Operation:
INC
C
T
S
A
direct
Bytes:
Cycles:
0 0
0
1 r r r
INC
(Rn) ��
← (Rn)+1
������
2
1
Encoding:
Operation:
0
0 0 0 0
0 1 0 1
direct address
INC
(direct)����������
←���������
(direct) + 1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
427
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
INC
Bytes:
1
Cycles:
1
Operation:
0 0 0 0
Example:
Bytes:
Cycles:
INC
((Ri))�����������
←����������
((Ri)) + 1
Increment Data Pointer
Increment the 16-bit data pointer by 1. A 16-bit increment (modulo 216) is performed; an
overflow of the low-order byte of the data pointer (DPL) from 0FFH to 00H will increment
the high-order-byte (DPH). No flags are affected.
This is the only 16-bit register which can be incremented.
Operation:
1
2
1 0
Example:
Bytes:
Cycles:
Encoding:
Operation:
1
0
C
T
S
U
C
M
L
0 0 1 1
INC
(DPTR) ��
← (DPTR)+1
��������
bit, rel
Function:
Description:
d
e
t
i
im
Register DPH and DPL contains 12H and 0FEH,respectively. The instruction sequence,
INC DPTR
INC DPTR
INC DPTR
will change DPH and DPL to 13H and 01H.
Encoding:
428
0 1 1 i
DPTR
Function:
Description:
JB
研发顾问Tel:13922805190
@Ri
Encoding:
INC
临时技术支持Tel:13922829991
Jump if Bit set
If the indicated bit is a one, jump to the address indicated; otherwise proceed with the next
instruction. The branch destination is computed by adding the signed relative-displacement
in the third instruction byte to the PC, after incrementing the PC to the first byte of the next
instruction. The bit tested is not modified. No flags are affected.
The data present at input port 1 is 11001010B. The Accumulator holds 56 (01010110B). The
instruction sequence,
JB
P1.2, LABEL1
JB ACC.2, LABEL2
will cause program execution to branch to the instruction at label LABEL2.
3
2
0 0 1 0
0 0 0 0
bit address
rel. address
JB
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 1
THEN
(PC) ��
←��������
�������
(PC) + ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
JBC
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
bit, rel
Function:
Description:
Example:
Jump if Bit is set and Clear bit
If the indicated bit is one,branch to the address indicated;otherwise proceed with the next
instruction.The bit wili not be cleared if it is already a zero. The branch destination is
computed by adding the signed relative-displacement in the third instruction byte to the PC,
after incrementing the PC to the first byte of the next instruction. No flags are affected.
Note: When this instruction is used to test an output pin, the value used as the original data
will be read from the output data latch, not the input pin.
The Accumulator holds 56H (01010110B). The instruction sequence,
JBC
JBC
Bytes:
Cycles:
Operation:
0 0 0 1
Example:
C
T
S
U
C
M
rel. address
L
The carry flag is cleared. The instruction sequence,
LABEL1
C
LABEL2s
will set the carry and cause program execution to continue at the instruction identified by the
label LABEL2.
2
2
Encoding:
Operation:
d
e
t
i
im
bit address
Jump if Carry is set
If the carry flag is set, branch to the address indicated; otherwise proceed with the next
instruction. The branch destination is computed by adding the signed relative-displacement in
the second instruction byte to the PC, after incrementing the PC twice.No flags are affected.
JC
CPL
JC
Bytes:
Cycles:
0 0 0 0
JBC
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 1
THEN
(bit) ← 0
�� �
(PC) ��
←��������
�������
(PC) + ���
rel
rel
Function:
Description:
ACC.3, LABEL1
ACC.2, LABEL2
will cause program execution to continue at the instruction identified by the label LABEL2,
with the Accumulator modified to 52H (01010010B).
3
2
Encoding:
JC
官方网站:www.STCMCU.com
0 1 0 0
0 0 0 0
rel. address
JC
(PC) ��
← �������
�������
(PC)+ 2
IF (C) = 1
THEN
(PC) ��
←��������
�������
(PC) + ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
429
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
JMP @A+DPTR
Function:
Description:
Example:
Jump indirect
Add the eight-bit unsigned contents of the Accumulator with the sixteen-bit data pointer,
and load the resulting sum to the program counter. This will be the address for subsequent
instruction fetches. Sixteen-bit addition is performed (modulo 216): a carry-out from the loworder eight bits propagates through the higher-order bits. Neither the Accumulator nor the
Data Pointer is altered. No flags are affected.
An even number from 0 to 6 is in the Accumulator. The following sequence of instructions
will branch to one of four AJMP instructions in a jump table starting at JMP_TBL:
JMP-TBL:
MOV
JMP
AJMP
AJMP
AJMP
AJMP
DPTR, #JMP_TBL
@A+DPTR
LABEL0
LABEL1
LABEL2
LABEL3
d
e
t
i
im
If the Accumulator equals 04H when starting this sequence, execution will jump to label
LABEL2. Remember that AJMP is a two-byte instruction, so the jump instructions start at
every other address.
Bytes:
Cycles:
1
2
Encoding:
Operation:
0 1 1 1
Function:
Description:
Example:
0 0 1 1
JMP
(PC) ��
← ������������
������������
(A) + (DPTR)
C
T
S
JNB bit, rel
U
C
M
L
Jump if Bit is not set
If the indicated bit is a zero, branch to the indicated address; otherwise proceed with the next
instruction. The branch destination is computed by adding the signed relative-displacement
in the third instruction byte to the PC, after incrementing the PC to the first byte of the next
instruction. The bit tested is not modified. No flags are affected.
The data present at input port 1 is 11001010B. The Accumulator holds 56H (01010110B).
The instruction sequence,
JNB
JNB
P1.3, LABEL1
ACC.3, LABEL2
will cause program execution to continue at the instruction at label LABEL2
Bytes:
Cycles:
Encoding:
Operation:
430
3
2
0 0 1 1
0 0 0 0
bit address
rel. address
JNB
(PC) ��
← �������
�������
(PC)+ 3
IF (bit) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
JNC
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
rel
Function:
Description:
Example:
Jump if Carry not set
If the carry flag is a zero, branch to the address indicated; otherwise proceed with the next
instruction. The branch destination is computed by adding the signed relative-displacement
in the second instruction byte to the PC, after incrementing the PC twice to point to the next
instruction. The carry flag is not modified
The carry flag is set. The instruction sequence,
JNC LABEL1
CPL C
JNC LABEL2
will clear the carry and cause program execution to continue at the instruction identified by
the label LABEL2.
Bytes:
Cycles:
2
2
Encoding:
Operation:
JNZ
0 1 0 1
Description:
Example:
C
T
S
d
e
t
i
im
rel. address
JNC
(PC) ��
← �������
�������
(PC)+ 2
IF (C) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
rel
Function:
0 0 0 0
U
C
M
L
Jump if Accumulator Not Zero
If any bit of the Accumulator is a one, branch to the indicated address; otherwise proceed
with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The
Accumulator is not modified. No flags are affected.
The Accumulator originally holds 00H. The instruction sequence,
JNZ
INC
JNZ
LABEL1
A
LAEEL2
will set the Accumulator to 01H and continue at label LABEL2.
Bytes:
Cycles:
2
2
Encoding:
Operation:
0 1 1 1
0 0 0 0
rel. address
JNZ
(PC) ��
← �������
�������
(PC)+ 2
IF (A) ≠ 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
431
STC15F2K60S2系列单片机指南
JZ
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
rel
Function:
Description:
Example:
Bytes:
Cycles:
Jump if Accumulator Zero
If all bits of the Accumulator are zero, branch to the address indicated; otherwise proceed
with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The
Accumulator is not modified. No flags are affected.
The Accumulator originally contains 01H. The instruction sequence,
JZ LABEL1
DEC A
JZ LAEEL2
will change the Accumulator to 00H and cause program execution to continue at the
instruction identified by the label LABEL2.
2
2
Encoding:
Operation:
0 1 1 0
0 0 0 0
JZ
(PC) ��
← �������
�������
(PC)+ 2
IF (A) = 0
THEN (PC) ��
←��������
�������
(PC) + ���
rel
U
C
M
LCALL addr16
Function:
Description:
Example:
d
e
t
i
im
rel. address
L
Long call
LCALL calls a subroutine loated at the indicated address. The instruction adds three to the
program counter to generate the address of the next instruction and then pushes the 16-bit
result onto the stack (low byte first), incrementing the Stack Pointer by two. The high-order
and low-order bytes of the PC are then loaded, respectively, with the second and third bytes
of the LCALL instruction. Program execution continues with the instruction at this address.
The subroutine may therefore begin anywhere in the full 64K-byte program memory address
space. No flags are affected.
C
T
S
Initially the Stack Pointer equals 07H. The label “SUT2N” is assigned to program memory
location 1234H. After executing the instruction,
LCALL SUT2N
Bytes:
Cycles:
Encoding:
Operation:
432
at location 0123H, the Stack Pointer will contain 09H, internal RAM locations 08H and 09H
will contain 26H and 01H, and the PC will contain 1234H.
3
2
0 0 0 1
0 0 1 0
addr15-addr8
addr7-addr0
LCALL
(PC) ��
←���������
��������
(PC) + 3
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←����
���
(PC7-0)
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←����
���
(PC15-8)
(PC) ��
←� ����
addr15-0
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
LJMP addr16
Function:
Description:
Example:
Long Jump
LJMP causes an unconditional branch to the indicated address, by loading the high-order
and low-order bytes of the PC (respectively) with the second and third instruction bytes. The
destination may therefore be anywhere in the full 64K program memory address space. No
flags are affected.
The label “JMPADR” is assigned to the instruction at program memory location 1234H. The
instruction,
LJMP JMPADR
at location 0123H will load the program counter with 1234H.
Bytes:
Cycles:
3
2
Encoding:
0 0 0 0
Operation:
LJMP
(PC) ��
←� ����
addr15-0
0 0 1 0
MOV ,
Function:
Description:
d
e
t
i
im
addr15-addr8
U
C
M
addr7-addr0
L
Move byte variable
The byte variable indicated by the second operand is copied into the location specified by the
first operand. The source byte is not affected. No other register or flag is affected.
C
T
S
This is by far the most flexible operation. Fifteen combinations of source and destination
addressing modes are allowed.
Example:
Internal RAM location 30H holds 40H. The value of RAM location 40H is 10H. The data
present at input port 1 is 11001010B (0CAH).
MOV
R0, #30H ;R0< = 30H
MOV
A, @R0
;A < = 40H
MOV
R1, A
;R1 < = 40H
MOV
B, @Rl
;B < = 10H
MOV
@Rl, Pl
;RAM (40H) < = 0CAH
MOV
P2, P1
;P2 #0CAH
leaves the value 30H in register 0,40H in both the Accumulator and register 1,10H in register
B, and 0CAH(11001010B) both in RAM location 40H and output on port 2.
MOV A,Rn
Bytes:
Cycles:
1
1
Encoding:
Operation:
1 1
1
0
1 r r r
MOV
(A) ��
←�����
����
(Rn)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
433
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
*MOV A,direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
1 1 1 0
0 1 0 1
direct address
MOV
(A)��
←���������
��������
(direct)
*MOV A, ACC is not a valid instruction
MOV A,@Ri
Bytes:
1
Cycles:
1
Encoding:
Operation:
1 1
1
0
0 1 1 i
MOV
(A) ��
←�������
������
((Ri))
d
e
t
i
im
MOV A,#data
Bytes:
2
Cycles:
1
Encoding:
0 1 1 1
Operation:
MOV
(A)��
←� �����
#data
MOV Rn, A
Bytes:
1
Cycles:
1
Encoding:
Operation:
C
T
S
1 1 1 1
U
C
M
0 1 0 0
immediate data
L
1 r r r
MOV
(Rn)����
←���
(A)
MOV Rn,direct
Bytes:
2
Cycles:
2
Encoding:
Operation:
1 0 1 0
1 r r r
direct addr.
1 r r r
immediate data
MOV
(Rn)���������
←��������
(direct)
MOV Rn,#data
Bytes:
2
Cycles:
1
Encoding:
Operation:
434
0 1 1 1
MOV
(Rn) ��
←� �����
#data
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOV direct, A
Bytes:
2
Cycles:
1
Encoding:
1 1 1 1
Operation:
MOV
(direct) ←����
�� ���
(A)
0 1 0 1
direct address
1 r r r
direct address
MOV direct, Rn
Bytes:
2
Cycles:
2
Encoding:
1 0 0 0
Operation:
MOV
(direct) ←�����
�� ����
(Rn)
d
e
t
i
im
MOV direct, direct
Bytes:
3
Cycles:
2
Encoding:
Operation:
1 0 0 0
0 1 0 1
MOV
(direct)��
←���������
��������
(direct)
MOV direct, @Ri
Bytes:
2
Cycles:
2
C
T
S
Encoding:
1 0 0 0
Operation:
MOV
(direct)�������
←������
((Ri))
dir.addr. (src)
U
C
M
0 1 1 i
L
direct addr.
MOV direct,#data
Bytes:
3
Cycles:
2
Encoding:
Operation:
0 1 1 1
0 1 0 1
direct address
MOV
(direct) ← �����
�� �����
#data
MOV @Ri, A
Bytes:
1
Cycles:
1
Encoding:
1 1 1 1
Operation:
MOV
((Ri)) ←����
�� (A)
���
南通国芯微电子有限公司
0 1 1 i
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
435
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOV @Ri, direct
Bytes:
2
Cycles:
2
Encoding:
1 0 1 0
0 1 1 i
direct addr.
0 1 1 i
immediate data
Operation:
MOV
((Ri)) ←���������
�� (direct)
��������
MOV @Ri, #data
Bytes:
2
Cycles:
1
Encoding:
0 1 1 1
Operation:
MOV
((Ri)) ←�
�� �����
#data
d
e
t
i
im
MOV ,
Function:
Description:
Example:
Move bit data
The Boolean variable indicated by the second operand is copied into the location specified by
the first operand. One of the operands must be the carry flag; the other may be any directly
addressable bit. No other register or flag is affected.
U
C
M
L
The carry flag is originally set. The data present at input Port 3 is 11000101B. The data
previously written to output Port 1 is 35H (00110101B).
C
T
S
MOV
MOV
MOV
P1.3, C
C, P3.3
P1.2, C
will leave the carry cleared and change Port 1 to 39H (00111001B).
MOV C,bit
Bytes:
Cycles:
2
1
Encoding:
Operation:
1
0
1
0
0
0
1
0
bit address
1
0
0
1
0
bit address
MOV
(C) ��
←������
�����
(bit)
MOV bit,C
Bytes:
2
Cycles:
2
Encoding:
Operation:
436
1
0
0
MOV
(bit)��
←����
(C)
���
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOV DPTR , #data 16
Function:
Description:
Example:
Bytes:
Cycles:
Encoding:
Operation:
Load Data Pointer with a 16-bit constant
The Data Pointer is loaded with the 16-bit constant indicated.The 16-bit constant is loaded
into the second and third bytes of the instruction. The second byte (DPH) is the high-order
byte, while the third byte (DPL) holds the low-order byte. No flags are affected.
This is the only instruction which moves 16 bits of data at once.
The instruction,
MOV DPTR, #1234H
will load the value 1234H into the Data Pointer: DPH will hold 12H and DPL will hold 34H.
3
2
1
0
0
1
0
0
0
0
immediate data 15-8
MOV
(DPTR) ��
←� �����
#data15-0
DPH DPL ← #data
�� �����15-8 #data7-0
MOVC A , @A+
Function:
Description:
Example:
d
e
t
i
im
L
Move Code byte
The MOVC instructions load the Accumulator with a code byte, or constant from program
memory. The address of the byte fetched is the sum of the original unsigned eight-bit.
Accumulator contents and the contents of a sixteen-bit base register, which may be either
the Data Pointer or the PC. In the latter case, the PC is incremented to the address of the
following instruction before being added with the Accumulator; otherwise the base register
is not altered. Sixteen-bit addition is performed so a carry-out from the low-order eight bits
may propagate through higher-order bits. No flags are affected.
C
T
S
U
C
M
A value between 0 and 3 is in the Accumulator. The following instructions will translate the
value in the Accumulator to one of four values defimed by the DB (define byte) directive.
REL-PC: INC
A
MOVC A, @A+PC
RET
DB
66H
DB
77H
DB
88H
DB
99H
If the subroutine is called with the Accumulator equal to 01H, it will return with 77H in the
Accumulator. The INC A before the MOVC instruction is needed to “get around” the RET
instruction above the table. If several bytes of code separated the MOVC from the table, the
corresponding number would be added to the Accumulator instead.
MOVC A,@A+DPTR
Bytes: 1
Cycles: 2
Encoding:
Operation:
1 0
0
1
0 0 1 1
MOVC
(A) ��
←�������������
������������
((A)+(DPTR))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
437
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOVC A,@A+PC
Bytes:
1
Cycles:
2
Encoding:
Operation:
MOVX
1 0 0 0
0 0 1 1
MOVC
(PC) ��
← (PC)+1
������
(A) ��
←�����������
����������
((A)+(PC))
,
Function:
Description:
Move External
The MOVX instructions transfer data between the Accumulator and a byte of external data
memory, hence the “X” appended to MOV. There are two types of instructions, differing in
whether they provide an eight-bit or sixteen-bit indirect address to the external data RAM.
d
e
t
i
im
In the first type, the contents of R0 or R1 in the current register bank provide an eight-bit
address multiplexed with data on P0. Eight bits are sufficient for external I/O expansion
decoding or for a relatively small RAM array. For somewhat larger arrays, any output port
pins can be used to output higher-order address bits. These pins would be controlled by an
output instruction preceding the MOVX.
U
C
M
L
In the second type of MOVX instruction, the Data Pointer generates a sixteen-bit address.
P2 outputs the high-order eight address bits (the contents of DPH) while P0 multiplexes the
low-order eight bits (DPL) with data. The P2 Special Function Register retains its previous
contents while the P2 output buffers are emitting the contents of DPH. This form is faster and
more efficient when accessing very large data arrays (up to 64K bytes), since no additional
instructions are needed to set up the output ports.
C
T
S
It is possible in some situations to mix the two MOVX types. A large RAM array with its
high-order address lines driven by P2 can be addressed via the Data Pointer, or with code to
output high-order address bits to P2 followed by a MOVX instruction using R0 or R1.
Example:
An external 256 byte RAM using multiplexed address/data lines (e.g., an Intel 8155 RAM/
I/O/Timer) is connected to the 8051 Port 0. Port 3 provides control lines for the external
RAM. Ports 1 and 2 are used for normal I/O. Registers 0 and 1 contain 12H and 34H.
Location 34H of the external RAM holds the value 56H. The instruction sequence,
MOVX
MOVX
A, @R1
@R0, A
copies the value 56H into both the Accumulator and external RAM location 12H.
MOVX A,@Ri
Bytes:
Cycles:
Encoding:
Operation:
438
1
2
1 1
1
0
0 0 1 i
MOVX
(A) ��
←�������
������
((Ri))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOVX A,@DPTR
Bytes:
1
Cycles:
2
Encoding:
1 1 1 0
Operation:
MOVX
(A) ��
←���������
��������
((DPTR))
MOVX
0 0 0 0
@Ri, A
Bytes:
1
Cycles:
2
Encoding:
1 1 1 1
Operation:
MOVX
((Ri))��
←����
(A)
���
MOVX
0 0 1 i
d
e
t
i
im
@DPTR, A
Bytes:
1
Cycles:
2
Encoding:
Operation:
1 1 1 1
MOVX
(DPTR)����
←���
(A)
C
T
S
MUL AB
Function:
Description:
Example:
U
C
M
0 0 0 0
L
Multiply
MUL AB multiplies the unsigned eight-bit integers in the Accumulator and register B. The
low-order byte of the sixteen-bit product is left in the Accumulator, and the high-order byte
in B. If the product is greater than 255 (0FFH) the overflow flag is set; otherwise it is cleared.
The carry flag is always cleared
Originally the Accumulator holds the value 80 (50H). Register B holds the value 160
(0A0H). The instruction,
MUL AB
will give the product 12,800 (3200H), so B is changed to 32H (00110010B) and the
Accumulator is cleared. The overflow flag is set, carry is cleared.
Bytes:
Cycles:
Encoding:
Operation:
1
4
1
0
1
0
0
1
0
0
MUL
(A)7-0 ←��������
(A)×(B)
(B)15-8
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
439
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
NOP
Function:
Description:
Example:
No Operation
Execution continues at the following instruction. Other than the PC, no registers or flags are
affected.
It is desired to produce a low-going output pulse on bit 7 of Port 2 lasting exactly 5 cycles. A
simple SETB/CLR sequence would generate a one-cycle pulse, so four additional cycles
must be inserted. This may be done (assuming no interrupts are enabled) with the instruction
sequence.
CLR
NOP
NOP
NOP
NOP
SETB
Bytes:
Cycles:
Encoding:
Operation:
P2.7
P2.7
0
0
0
0
NOP
(PC)+1
(PC) ←�������
ORL ,
Function:
Description:
d
e
t
i
im
1
1
0
0
0
0
U
C
M
L
Logical-OR for byte variables
C
T
S
ORL performs the bitwise logical-OR operation between the indicated variables, storing the
results in the destination byte. No flags are affected.
The two operands allow six addressing mode combinations. When the destination is the
Accumulator, the source can use register, direct, register-indirect, or immediate addressing;
when the destination is a direct address, the source can be the Accumulator or immediate
data.
Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch, not the input pins.
Example:
If the Accumulator holds 0C3H (11000011B) and R0 holds 55H (01010101B) then the
instruction,
ORL
A, R0
will leave the Accumulator holding the value 0D7H (11010111B).
When the destination is a directly addressed byte, the instruction can set combinations of bits
in any RAM location or hardware register. The pattern of bits to be set is determined by a
mask byte, which may be either a constant data value in the instruction or a variable
computed in the Accumulator at run-time.The instruction,
ORL
P1, #00110010B
will set bits 5,4, and 1of output Port 1.
440
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ORL A,Rn
Bytes:
Cycles:
1
1
Encoding:
Operation:
0
1
0
0
1
r
r
r
1
0
1
ORL
(A) ��
←����
���
(A)∨(Rn)
ORL A,direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
0
1
0
0
0
direct address
ORL
(A)��
←����
���
(A)∨(direct)
d
e
t
i
im
ORL A,@Ri
Bytes:
Cycles:
1
1
Encoding:
Operation:
0
0
0
0
1
1
1
0
ORL
(A)��
←����
���
(A)∨((Ri))
ORL A,#data
Bytes:
2
Cycles:
1
Encoding:
Operation:
1
0
C
T
S
1
0
0
0
i
U
C
M
0
L
immediate data
ORL
(A)��
←����
���
(A)∨ #data
ORL direct, A
Bytes:
2
Cycles:
1
Encoding:
Operation:
0
1
0
0
0
0
1
0
direct address
1
direct address
ORL
(direct)��
←���������
��������
(direct)∨(A)
ORL direct, #data
Bytes:
3
Cycles:
2
Encoding:
Operation:
0
1
0
0
0
0
1
immediate data
ORL
(direct) ←���������
�� ��������
(direct)∨#data
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
441
STC15F2K60S2系列单片机指南
ORL
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
C,
Function:
Description:
Example:
ORL C, bit
Bytes:
Cycles:
Logical-OR for bit variables
Set the carry flag if the Boolean value is a logical 1; leave the carry in its current state
otherwise. A slash (“ / ”) preceding the operand in the assembly language indicates that the
logical complement of the addressed bit is used as the source value, but the source bit itself is
not affected. No other flags are affected.
Set the carry flag if and only if P1.0 = 1, ACC. 7 = 1, or OV = 0:
MOV
C, P1.0
;LOAD CARRY WITH INPUT PIN P1.0
ORL
C, ACC.7
;OR CARRY WITH THE ACC.BIT 7
ORL
C, /OV
;OR CARRY WITH THE INVERSE OF OV
2
2
Encoding:
Operation:
0
2
Cycles:
2
Encoding:
Operation:
POP direct
Function:
Description:
Example:
Bytes:
Cycles:
Encoding:
Operation:
1
1
1
0
0
1
0
1
0
1
0
0
0
ORL
(C) ��
←����
���
(C)∨(bit)
C
T
S
U
C
M
0
0
d
e
t
i
im
bit address
ORL
(C) ��
←����
���
(C)∨(bit)
ORL C, /bit
Bytes:
442
技术支持网站:www.GXWMCU.com
L
bit address
Pop from stack
The contents of the internal RAM location addressed by the Stack Pointer is read, and the
Stack Pointer is decremented by one. The value read is then transferred to the directly
addressed byte indicated. No flags are affected.
The Stack Pointer originally contains the value 32H, and internal RAM locations 30H
through 32H contain the values 20H, 23H, and 01H, respectively. The instruction sequence,
POP DPH
POP DPL
will leave the Stack Pointer equal to the value 30H and the Data Pointer set to 0123H. At this
point the instruction,
POP SP
will leave the Stack Pointer set to 20H. Note that in this special case the Stack Pointer was
decremented to 2FH before being loaded with the value popped (20H).
2
2
1
1
0 1
0
0
0
0
direct address
POP
(direct) ←�������
((SP))
(SP) ��
←������
�����
(SP) ��- �1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
PUSH direct
Function:
Description:
Example:
Push onto stack
The Stack Pointer is incremented by one. The contents of the indicated variableis then copied
into the internal RAM location addressed by the Stack Pointer. Otherwise no flags are
affected.
On entering interrupt routine the Stack Pointer contains 09H. The Data Pointer holds the
value 0123H. The instruction sequence,
PUSH
PUSH
DPL
DPH
will leave the Stack Pointer set to 0BH and store 23H and 01H in internal RAM locations
0AH and 0BH, respectively.
Bytes:
2
Cycles:
Encoding:
2
Operation:
1
1
0 0
0
0
0
PUSH
(SP) ��
←���������
��������
(SP) + 1
((SP)) ��
←���������
��������
(direct)
RET
Function:
Return from subroutine
C
T
S
0
d
e
t
i
im
direct address
U
C
M
L
Description:
RET pops the high-and low-order bytes of the PC successively from the stack, decrementing
the Stack Pointer by two. Program execution continues at the resulting address, generally the
instruction immediately following an ACALL or LCALL. No flags are affected.
Example:
The Stack Pointer originally contains the value 0BH. Internal RAM locations 0AH and 0BH
contain the values 23H and 01H, respectively. The instruction,
RET
will leave the Stack Pointer equal to the value 09H. Program execution will continue at
location 0123H.
Bytes:
Cycles:
Encoding:
Operation:
1
2
0
0
1 0
0
0
1
0
RET
(PC15-8) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
(PC7-0) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
443
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RETI
Function:
Description:
Example:
Return from interrupt
RETI pops the high- and low-order bytes of the PC successively from the stack, and restores
the interrupt logic to accept additional interrupts at the same priority level as the one just
processed. The Stack Pointer is left decremented by two. No other registers are affected; the
PSW is not automatically restored to its pre-interrupt status. Program execution continues at
the resulting address, which is generally the instruction immediately after the point at which
the interrupt request was detected. If a lower- or same-level interrupt had been pending when
the RETI instruction is executed, that one instruction will be executed before the pending
interrupt is processed.
The Stack Pointer originally contains the value 0BH. An interrupt was detected during the
instruction ending at location 0122H. Internal RAM locations 0AH and 0BH contain the
values 23H and 01H, respectively. The instruction,
RETI
d
e
t
i
im
will leave the Stack Pointer equal to 09H and return program execution to location 0123H.
Bytes:
Cycles:
Encoding:
Operation:
1
2
0
Function:
Example:
1 1
0
0
1
0
U
C
M
RETI
(PC15-8) ��
←�������
������
((SP))
(SP) ��
←��������
�������
(SP) -1
←�������
������
((SP))
(PC7-0) ��
(SP) ��
←��������
�������
(SP) -1
C
T
S
RL A
Description:
0
L
Rotate Accumulator Left
The eight bits in the Accumulator are rotated one bit to the left. Bit 7 is rotated into the bit 0
position. No flags are affected.
The Accumulator holds the value 0C5H (11000101B). The instruction,
RL
A
leaves the Accumulator holding the value 8BH (10001011B) with the carry unaffected.
Bytes:
Cycles:
Encoding:
Operation:
444
1
1
0
0
1 0
RL
(An+1) ��
←���
��
(An)
�� (A
��7)
(A0) ←���
南通国芯微电子有限公司
0
0
1
1
n = 0-6
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
RLC A
Function:
Description:
Example:
Bytes:
Cycles:
Rotate Accumulator Left through the Carry flag
The eight bits in the Accumulator and the carry flag are together rotated one bit to the left. Bit
7 moves into the carry flag; the original state of the carry flag moves into the bit 0 position.
No other flags are affected.
The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction,
RLC A
leaves the Accumulator holding the value 8BH (10001011B) with the carry set.
1
1
Encoding:
Operation:
0
0
1 1
0
RLC
(An+1) ��
←���
��
(An)
←����
���
(C)
(A0) ��
(C) ��
←���
��
(A7)
0
1
1
n = 0-6
d
e
t
i
im
RR A
Function:
Description:
Example:
Bytes:
Cycles:
Encoding:
Operation:
Rotate Accumulator Right
L
The eight bits in the Accumulator are rotated one bit to the right. Bit 0 is rotated into the bit 7
position. No flags are affected.
The Accumulator holds the value 0C5H (11000101B). The instruction,
RR A
leaves the Accumulator holding the value 0E2H (11100010B) with the carry unaffected.
1
1
0
U
C
M
C
T
S
0
0 0
RR
(An) ��
←���
��
(An+1)
←���
��
(A0)
(A7) ��
0
0
1
1
n=0-6
RRC A
Function:
Description:
Example:
Bytes:
Cycles:
Rotate Accumulator Right through the Carry flag
The eight bits in the Accumulator and the carry flag are together rotated one bit to the right.
Bit 0 moves into the carry flag; the original value of the carry flag moves into the bit 7
position.No other flags are affected.
The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction,
RRC A
leaves the Accumulator holding the value 62H (01100010B) with the carry set.
1
1
Encoding:
Operation:
0
0
0 1
RRC
(An+1) ��
←���
��
(An)
(A7) ��
←����
���
(C)
(C) ��
←���
��
(A0)
南通国芯微电子有限公司
0
0
1
1
n = 0-6
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
445
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
SETB
Function:
Example:
C
Bytes:
Cycles:
Set bit
SETB sets the indicated bit to one. SETB can operate on the carry flag or any directly
addressable bit. No other flags are affected
The carry flag is cleared. Output Port 1 has been written with the value 34H (00110100B).
The instructions,
SETB
C
SETB
P1.0
will leave the carry flag set to 1 and change the data output on Port 1 to 35H (00110101B).
1
1
Encoding:
Operation:
SETB
1
2
Cycles:
1
Encoding:
0 1
0
0
1
1
0
1
0
0
SETB
(bit) ←��
�� 1�
C
T
S
SJMP rel
Function:
1
1
1
d
e
t
i
im
SETB
(C) ��
←��
�1
bit
Bytes:
Operation:
U
C
M
1
0
L
bit address
Short Jump
Description:
Program control branches unconditionally to the address indicated. The branch destination is
computed by adding the signed displacement in the second instruction byte to the PC, after
incrementing the PC twice. Therefore, the range of destinations allowed is from 128bytes
preceding this instruction to 127 bytes following it.
Example:
The label “RELADR” is assigned to an instruction at program memory location 0123H. The
instruction,
SJMP RELADR
will assemble into location 0100H. After the instruction is executed, the PC will contain the
value 0123H.
(Note: Under the above conditions the instruction following SJMP will be at 102H.Therefore,
the displacement byte of the instruction will be the relative offset (0123H - 0102H) = 21H.
Put another way, an SJMP with a displacement of 0FEH would be an one-instruction infinite
loop).
Bytes:
2
Cycles:
2
Encoding:
Operation:
446
研发顾问Tel:13922805190
Description:
SETB
临时技术支持Tel:13922829991
1
0
0 0
0
0
0
0
rel. address
SJMP
(PC) ��
←�������
������
(PC)+2
(PC) ��
←���������
��������
(PC)+rel
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
SUBB A,
Function:
Description:
Subtract with borrow
SUBB subtracts the indicated variable and the carry flag together from the Accumulator,
leaving the result in the Accumulator. SUBB sets the carry (borrow)flag if a borrow is needed
for bit 7, and clears C otherwise.(If C was set before executing a SUBB instruction, this
indicates that a borrow was needed for the previous step in a multiple precision subtraction,
so the carry is subtracted from the Accumulator along with the source operand).AC is set if a
borrow is needed for bit 3, and cleared otherwise. OV is set if a borrow is needed into bit 6,
but not into bit 7, or into bit 7, but not bit 6.
When subtracting signed integers OV indicates a negative number produced when a negative
value is subtracted from a positive value, or a positive result when a positive number is
subtracted from a negative number.
The source operand allows four addressing modes: register, direct, register-indirect, or
immediate.
Example:
d
e
t
i
im
The Accumulator holds 0C9H (11001001B), register 2 holds 54H (01010100B), and the
carry flag is set. The instruction,
SUBB
A, R2
L
will leave the value 74H (01110100B) in the accumulator, with the carry flag and AC cleared
but OV set.
U
C
M
Notice that 0C9H minus 54H is 75H. The difference between this and the above result is due
to the carry (borrow) flag being set before the operation. If the state of the carry is not known
before starting a single or multiple-precision subtraction, it should be explicitly cleared by a
CLR C instruction.
SUBB A, Rn
Bytes:
Cycles:
Encoding:
Operation:
C
T
S
1
1
1 0
0
1
1 r r r
SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ����
(Rn)
SUBB A, direct
Bytes: 2
Cycles: 1
Encoding:
1 0 0 1 0 1 0 1
Operation: SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ��������
(direct)
direct address
SUBB A, @Ri
Bytes:
Cycles:
Encoding:
Operation:
1
1
1
0
0
1
0
1
1
i
SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- ������
((Ri))
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
447
STC15F2K60S2系列单片机指南
SUBB A, #data
Bytes:
Cycles:
Encoding:
Operation:
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2
1
1
0
0
1
0
1
0
0
immediate data
SUBB
(A) ��
←�����
����
(A) ��- ����
(C) ��- �����
#data
SWAP A
Function:
Description:
Example:
Swap nibbles within the Accumulator
SWAP A interchanges the low- and high-order nibbles (four-bit fields) of the Accumulator
(bits 3-0 and bits 7-4). The operation can also be thought of as a four-bit rotate instruction.
No flags are affected.
The Accumulator holds the value 0C5H (11000101B). The instruction,
SWAP
Bytes:
Cycles:
A
d
e
t
i
im
leaves the Accumulator holding the value 5CH (01011100B).
1
1
Encoding:
1
Operation:
SWAP
(A3-0)
1
0 0
0
1
0
0
U
C
M
(A7-4)
XCH A,
C
T
S
L
Function:
Description:
Exchange Accumulator with byte variable
XCH loads the Accumulator with the contents of the indicated variable, at the same time
writing the original Accumulator contents to the indicated variable. The source/destination
operand can use register, direct, or register-indirect addressing.
Example:
R0 contains the address 20H. The Accumulator holds the value 3FH (00111111B). Internal
RAM location 20H holds the value 75H (01110101B). The instruction,
XCH
A, @R0
will leave RAM location 20H holding the values 3FH (00111111B) and 75H (01110101B) in
the accumulator.
XCH A, Rn
Bytes:
Cycles:
Encoding:
Operation:
XCH A, direct
Bytes:
Cycles:
Encoding:
Operation:
448
1
1
1 1
XCH
(A)
0
0
1 r r r
(Rn)
2
1
1 1 0 0
XCH
(A)
0 1 0 1
direct address
(direct)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
XCH A, @Ri
Bytes:
Cycles:
Encoding:
Operation:
1
1
1 1 0 0
XCH
(A)
0 1 1
i
((Ri))
XCHD A, @Ri
Function:
Description:
Example:
Exchange Digit
XCHD exchanges the low-order nibble of the Accumulator (bits 3-0), generally representing
a hexadecimal or BCD digit, with that of the internal RAM location indirectly addressed by
the specified register. The high-order nibbles (bits 7-4) of each register are not affected. No
flags are affected.
R0 contains the address 20H. The Accumulator holds the value 36H (00110110B). Internal
RAM location 20H holds the value 75H (01110101B). The instruction,
XCHD
Bytes:
Cycles:
Encoding:
Operation:
d
e
t
i
im
A, @R0
will leave RAM location 20H holding the value 76H (01110110B) and 35H (00110101B) in
the accumulator.
1
1
1 1 0 1
XCHD
(A3-0)
0 1 1 i
C
T
S
(Ri3-0)
U
C
M
L
XRL ,
Function:
Description:
Logical Exclusive-OR for byte variables
XRL performs the bitwise logical Exclusive-OR operation between the indicated variables,
storing the results in the destination. No flags are affected.
The two operands allow six addressing mode combinations.When the destination is the
Accumulator, the source can use register, direct, register-indirect, or immediate addressing;
when the destination is a direct address,the source can be the Accumulator or immediate data.
(Note: When this instruction is used to modify an output port, the value used as the original
port data will be read from the output data latch, not the input pins.)
Example:
If the Accumulator holds 0C3H (11000011B) and register 0 holds 0AAH (10101010B) then
the instruction,
XRL
A, R0
will leave the Accumulator holding the vatue 69H (01101001B).
When the destination is a directly addressed byte, this instruction can complement combinnation of bits in any RAM location or hardware register. The pattern of bits to be complemented
is then determined by a mask byte, either a constant contained in the instruction or a variable
computed in the Accumulator at run-time. The instruction,
XRL
P1, #00110001B
will complement bits 5,4 and 0 of outpue Port 1.
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
449
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
XRL A, Rn
Bytes:
Cycles:
Encoding:
Operation:
1
1
0 1
1
0
XRL
(A) ��
← (A)�
����
1 r r r
(Rn)
XRL A, direct
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 1 1 0
0 1 0 1
XRL
(A) ��
← (A)�
����
direct address
(direct)
d
e
t
i
im
XRL A, @Ri
Bytes:
1
Cycles:
1
Encoding:
Operation:
0 1
1
0
XRL
(A) ��
← (A)�
����
0 1 1 i
((Ri))
XRL A, #data
Bytes:
2
Cycles:
1
Encoding:
Operation:
C
T
S
0 1
1
0
XRL
(A) ��
← (A)�
����
U
C
M
0 1 0 0
L
immediate data
#data
XRL direct, A
Bytes:
2
Cycles:
1
Encoding:
Operation:
0 1
1
0
0 0 1 0
XRL
(direct) ← (direct)�
�� ���������
direct address
(A)
XRL direct, #data
Bytes:
3
Cycles:
2
Encoding:
Operation:
450
0 1
1
0
0 0 1 1
XRL
(direct) ← (direct)�
�� ���������
南通国芯微电子有限公司
direct address
immediate data
# data
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
第6章 中断系统
中断系统是为使CPU具有对外界����������������
紧急��������������
事件的�����������
实时���������
处理能力而设置的。
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的
工作,转而去处理这个紧急事件���������������������������
,��������������������������
处理完以后,再回到原来被中断的地方,继续原来的工作,
这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断
源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服
务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排
队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响
应������������
优先����������
级别最高的中断请求。
当CPU正在处理一个中断源请求的时候(执行相应的����������������
中断��������������
服务程序),发生了另外一个优
先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的�������������
服务�����������
程序,转而去处理优先级
更高的中断请求源,处理完以后,再回到原低级中断������������������
服务����������������
程序,这样的过程称为中断嵌套。这
样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
d
e
t
i
im
L
STC15W4K60S4系列单片机提供了19个中断请求源,它们分别是:外部中断0(INT0)、定
时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中
U
C
M
断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时
器T2中断、外部中断4(INT4)、串口3中断、串口4中断、定时器3中断、定时器4中断以及比较
器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断、外部中断4(INT4)、串口
3中断、串口4中断、定时器3中断、定时器4中断及比较器中断固定是最低优先级中断外,其
它的中断都具有2个中断优先级,可实现2级中断服务程序嵌套。用户可以用关总中断允许位
(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使CPU
响应相应的中断申请;每一个中断源可以用软件独立地控制为开中断或关中断状态;部分中断
的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级
的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序
来决定系统先响应哪个中断。
C
T
S
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
451
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.1 STC15系列单片机的中断请求源
STC15全系列的中断请求源的类型如下表所示。
单片机型号 STC15F101W STC15F408AD STC15W201S STC15W408AS STC15W408S STC15W1K16S STC15F2K60S2 STC15W4K60S4
系列
系列
系列
系列
系列
系列
系列
系列
中断源类型
外部中断0 (INT0)
定时器0中断
外部中断1 (INT1)
定时器1中断
串口1中断
A/D转换中断
低压检测(LVD)中断
CCP/PWM/PCA中断
串口2中断
SPI中断
外部中断2 (INT2)
外部中断3 (INT3)
定时器2中断
外部中断4 (INT4)
串口3中断
串口4中断
定时器3中断
定时器4中断
比较器中断
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
CU
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
d
e
t
i
im
L
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
M
上表中√表示对应的系列有相应的中断源。
C
T
S
√
√
√
√
√
√
6.1.1 STC15F101W系列单片机的中断请求源
STC15F101W系列单片机提供了8个中断请求源,它们分别是:外部中断0(INT0)、定时器
0中断、外部中断1(INT1)、低压检测(LVD)中断、外部中断2(INT2)、外部中断3(INT3)、定时
器2中断以及外部中断4(INT4)。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断及外部
中断4(INT4)固定是最低优先级中断外,其它的中断都具有两个中断优先级。
6.1.2 STC15F408AD系列单片机的中断请求源
STC15F408AD系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时
器0中断、外部中断1(INT1)、串口中断、A/D转换中断、低压检测(LVD)中断、CCP/PWM/PCA
中断、SPI中断、外部中断2(INT2)、外部中断3(INT3),定时器2中断以及外部中断4(INT4)。
除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断及外部中断4(INT4)固定是最低优先级
中断外,其它的中断都具有两个中断优先级。
6.1.3 STC15W201S系列单片机的中断请求源
STC15W201S系列单片机提供了10个中断请求源,它们分别是:外部中断0(INT0)、定时
器0中断、外部中断1(INT1)、串口中断、低压检测(LVD)中断、外部中断2(INT2)、外部中断
3(INT3)、定时器2中断、外部中断4(INT4)以及比较器中断。除外部中断2(INT2)、外部中断
3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优先级中断外,其它的中
断都具有两个中断优先级。
452
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.1.4 STC15W408AS系列单片机的中断请求源
STC15W408AS系列单片机提供了13个中断请求源,它们分别是:外部中断0(INT0)、定时
器0中断、外部中断1(INT1)、串口中断、A/D转换中断、低压检测(LVD)中断、CCP/PWM/PCA
中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比
较器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较
器中断固定是最低优先级中断外,其它的中断都具有2个中断优先级。
6.1.5 STC15W408S系列单片机的中断请求源
STC15W408S系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时
器0中断、外部中断1(INT1)、定时器1中断、串口中断、低压检测(LVD)中断、SPI中断、外部
中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断。除外部中
断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优
先级中断外,其它的中断都具有两个中断优先级。
L
6.1.6 STC15W1K16S系列单片机的中断请求源
U
C
M
d
e
t
i
im
STC15W1K16S系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时
器0中断、外部中断1(INT1)、定时器1中断、串口中断、低压检测(LVD)中断、SPI中断、外部
中断2(INT2)、外部中断3(INT3),定时器2中断、外部中断4(INT4)及比较器中断。除外部中
断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优
先级中断外,其它的中断都具有2个中断优先级,可实现2级中断服务程序嵌套。
C
T
S
6.1.7 STC15F2K60S2系列单片机的中断请求源
STC15F2K60S2系列单片机提供了14个中断请求源,它们分别是:外部中断0(INT0)、定
时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中
断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3),定时
器2中断以及外部中断4(INT4)。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断及外部
中断4(INT4)固定是最低优先级中断外,其它的中断都具有2个中断优先级,可实现2级中断服
务程序嵌套。
6.1.8 STC15W4K60S4系列单片机的中断请求源
STC15W4K60S4系列单片机提供了20个中断请求源,它们分别是:外部中断0(INT0)、定
时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中
断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时
器2中断、PWM中断、外部中断4(INT4)、串口3中断、串口4中断、定时器3中断、定时器4中
断及比较器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4
)、串口3中断、串口4中断、定时器3中断、定时器4中断及比较器中断固定是最低优先级中断
外,其它的中断都具有2个中断优先级。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
453
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
6.2 中断结构图
中断允许控
制寄存器
上升沿和
下降沿均
可中断
IE, INT_CLKO, IE2
TCON.0/IT0=0
EX0
EA
临时技术支持Tel:13922829991
中断优先级
控制寄存器
最低优先级中断
IP, IP2
最高优先级中断
PX0
0
IE0
INT0
1
TCON.0/IT0=1
PT0
ET0
研发顾问Tel:13922805190
注意:当定时器/计数器0工作在不可屏蔽中断的16位
自动重装载模式时,其优先级是所有中断中最高的,
而且不受总中断允许位EA控制。
high
0
Timer0 / TF0
1
TCON.2/IT1=0
PX1
EX1
INT1
0
IE1
1
TCON.2/IT1=1
PT1
ET1
0
Timer1 / TF1
1
LVDF
C
T
S
PWMIF2/PWMIF3/PWMIF4/
PWMIF5/PWMIF6/PWMIF7
串口2/S2 S2RI
S2TI
0
1
ADC_FLAG
CF
ECF
CCF0
ECCF0
CCF1
ECCF1
d
e
t
i
im
PS
ES
串口1/S1 RI
TI
PADC
EADC
CU
PLVD
ELVD
M
EPWMnPI ||
EPWMnNI
L
PPCA
PPWM
0
1
0
1
0
1
0
1
ES2
PS2
0
ESPI
PSPI
0
1
SPIF
1
EX2
INT2
EX3
INT3
无中断优先级控制位,
中断优先级固定为0级
无中断优先级控制位,
中断优先级固定为0级
EX4
无中断优先级控制位,
中断优先级固定为0级
无中断优先级控制位,
中断优先级固定为0级
无中断优先级控制位,
中断优先级固定为0级
INT4
ES3
ES4
ET3
T3
ET4
T4
PIE||NIE
比较器 CMPIF(CMPIF_p||CMPIF_n)
无中断优先级控制位,
中断优先级固定为0级
ET2
T2
串口3/S3 S3RI
S3TI
串口4/S4 S4RI
S4TI
中断
查询
次序
无中断优先级控制位,
中断优先级固定为0级
无中断优先级控制位,
中断优先级固定为0级
无中断优先级控制位,
中断优先级固定为0级
low
EA: Global Enable,总中断允许位
454
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
外部中断0(INT0)和外部中断1(INT1)既可上升沿触发,又可下降沿触发。请求两个外部中
断的标志位是位于寄存器TCON中的IE0/TCON.1和IE1/TCON.3。当外部中断服务程序被响应
后,中断标志位IE0和IE1会自动被清0。TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外
部中断0和1是上升沿触发还是下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探
测到上升沿或下降沿后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探
测下降沿后才可产生外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉
电模式唤醒。
定时器0和1的中断请求标志位是TF0和TF1。当定时器寄存器THx/TLx(x = 0,1)溢出时,溢
出标志位TFx(x = 0,1)会被置位,如果定时器0/1的中断被打开,则定时器中断发生。当单片机
转去执行该定时器中断时,定时器的溢出标志位TFx(x = 0,1)会被硬件清除。
外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中
断2~4的中断请求标志位被隐藏起来了,对用户不可见。当相应的中断服务程序被响应后或
d
e
t
i
im
EXn=0(n=2,3,4),这些中断请求标志位会立即自动地被清0。外部中断2(INT2)、外部中断3(
INT3)及外部中断4(INT4)也可以用于将单片机从掉电模式唤醒。
L
定时器2的中断请求标志位被隐藏起来了,对用户不可见。当相应的中断服务程序被响应
后或ET2=0,该中断请求标志位会立即自动地被清0。
U
C
M
定时器3和定时器4的中断请求标志位同样被隐藏起来了,对用户不可见。当相应的中断服
务程序被响应后或ET3=0 / ET4=0,该中断请求标志位会立即自动地被清0。
C
T
S
当串行口1发送或接收完成时,相应的中断请求标志位TI或RI就会被置位,如果串口1中断
被打开,向CPU请求中断,单片机转去执行该串口1中断。中断响应后,TI或RI需由软件清零。
当串行口2发送或接收完成时,相应的中断请求标志位S2TI或S2RI就会被置位,如果串口2
中断被打开,向CPU请求中断,则单片机转去执行该串口2中断。中断响应后,S2TI或S2RI需由
软件清零。
当串行口3发送或接收完成时,相应的中断请求标志位S3TI或S3RI就会被置位,如果串口3
中断被打开,向CPU请求中断,则单片机转去执行该串口3中断。中断响应后,S3TI或S3RI需由
软件清零。
当串行口4发送或接收完成时,相应的中断请求标志位S4TI或S4RI就会被置位,如果串口4
中断被打开,向CPU请求中断,则单片机转去执行该串口4中断。中断响应后,S4TI或S4RI需由
软件清零。
A/D转换的中断是由ADC_FLAG/ADC_CONTR.4请求产生的。该位需用软件清除。
低压检测(LVD)中断是由LVDF/PCON.5请求产生的。该位也需用软件清除。
当同步串行口SPI传输完成时,SPIF/SPCTL.7被置位,如果SPI中断被打开,则向CPU请求
中断,单片机转去执行该SPI中断。中断响应完成后,SPIF需通过软件向其写入“1”清零。
比较器中断标志位CMPIF=(CMPIF_p || CMPIF_n),其中CMPIF_p是内建的标志比较器上升
沿中断的寄存器,CMPIF_n是内建的标志比较器下降沿中断的寄存器;当CPU 去读取 CMPIF
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
455
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
的数值时会读到 (CMPIF_p || CMPIF_n);当CPU 对CMPIF写“0”后CMPIF_p及CMPIF_n会被
自动设置为“0”。因此,当比较器的比较结果由LOW变成HIGH时,那么内建的标志比较器
上升沿中断的寄存器CMPIF_p会被设置成1,即比较器中断标志位CMPIF也会被设置成1,如
果比较器上升沿中断已被允许,即PIE(CMPCR1.5)已被设置成1,则向CPU请求中断,单片机
转去执行该比较器上升中断;同理,当比较器的比较结果由HIGH变成LOW时,那么内建的标
志比较器下降沿中断的寄存器CMPIF_n会被设置成1,即比较器中断标志位CMPIF也会被设置
成1,如果比较器下降沿中断已被允许,即NIE(CMPCR1.4)已被设置成1,则向CPU请求中断,
单片机转去执行该比较器下降中断。中断响应完成后,比较器中断标志位CMPIF不会自动被清
零,用户需通过软件向其写入“0”清零它。
各个中断触发行为总结如下表所示:
中断触发表
中断源
INT0
(外部中断0)
Timer 0
INT1
(外部中断1)
Timer1
UART1
ADC
LVD
UART2
定时器0溢出
U
C
M
定时器1溢出
发送或接受完成
C
T
S
A/D转换完成
电源电压下降到低于LVD检测电压
串口2发送或接受完成
INT2
下降沿
INT3
INT4
(外部中断4)
UART3
UART4
Timer3
Timer4
Comparator
(比较器)
L
(IT1 = 1): 下降沿; (IT1 = 0): 上升沿和下降沿均可
SPI数据传输完成
(外部中断3)
Timer2
456
(IT0 = 1): 下降沿; (IT0 = 0): 上升沿和下降沿均可
SPI
(外部中断2)
d
e
t
i
im
触发行为
下降沿
定时器2溢出
下降沿
串口3发送或接受完成
串口4发送或接受完成
定时器3溢出
定时器4溢出
比较器比较结果由LOW变成HIHG或由HIGH变成LOW
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.3 中断向量入口地址/查询次序/优先级/请求标志/允许位表
中断向量入口地址/查询次序/优先级/请求标志位/允许位
中断源
中断向 相同优先级内 中断优先级 优先级0 优先级1
中断请求标志位
设置
(最低) (最高)
量地址 的查询次序
INT0
(外部中断 0)
0003H
Timer 0
000BH
INT1
(外部中断1)
0 (highest)
中断允许
控制位
PX0
0
1
IE0
EX0/EA
1
PT0
0
1
TF0
ET0/EA
0013H
2
PX1
0
1
IE1
EX1/EA
Timer1
S1(UART1)
001BH
0023B
3
4
PT1
PS
0
0
1
1
TF1
RI+TI
ET1/EA
ES/EA
ADC
002BH
5
PADC
0
1
ADC_FLAG
EADC/EA
LVD
0033H
6
PLVD
0
1
LVDF
CF+CCF0+CCF1
+CCF2
(ECF+ECCF0+ECCF1
+ECCF2)/EA
CCP/PCA/PWM 003BH
7
PPCA
0
1
S2(UART2)
0043H
8
PS2
0
1
SPI
004BH
9
PSPI
0
1
INT2
(外部中断2)
0053H
10
INT3
(外部中断3)
005BH
11
Timer 2
0063H
PWM
006BH
System Reserved 0073H
System Reserved 007BH
C
T
S
12
13
U
C
M
0
0
0
0
0
0
PPWM
0
d
e
t
i
im
L
ELVD/EA
S2RI+S2TI
ES2/EA
SPIF
ESPI/EA
EX2/EA
EX3/EA
ET2/EA
1
EPWMnPI||EPWMnNI/
PWMIF2/3/4/5/6/7
EA
14
15
INT4
(外部中断4)
0083H
16
0
0
S3(UART3)
008BH
17
0
0
S3RI+S3TI
ES3/EA
S4(UART4)
0093H
18
0
0
S4RI+S4TI
ES4/EA
Timer 3
009BH
19
0
0
ET3/EA
Timer 4
00A3H
20
0
0
ET4/EA
EX4/EA
PIE/EA
Comparator
(比较器)
00ABH
南通国芯微电子有限公司
21(lowest)
0
0
总机:0513-5501 2928 / 2929 / 2966
CMPIF_p
(比较器上升沿
中断允许位)
CMPIF_n
(比较器下降沿
中断允许位)
CMPIF
NIE/EA
传真:0513-5501 2969 / 2956 / 2947
457
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.4 在Keil C中如何声明中断函数
如果使用C语言编程,中断查询次序号就是中断号,例如:
458
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
Int0_Routine(void)
Timer0_Rountine(void)
Int1_Routine(void)
Timer1_Rountine(void)
UART1_Routine(void)
ADC_Routine(void)
LVD_Routine(void)
PCA_Routine(void)
UART2_Routine(void)
SPI_Routine(void)
Int2_Routine(void)
Int3_Routine(void)
Timer2_Routine(void)
PWM_Routine(void)
Int4_Routine(void)
S3_Routine(void)
S4_Routine(void)
Timer3_Routine(void)
Timer4_Routine(void)
Comparator_Routine(void)
C
T
S
南通国芯微电子有限公司
interrupt 0;
interrupt 1;
interrupt 2;
interrupt 3;
interrupt 4;
interrupt 5;
interrupt 6;
interrupt 7;
interrupt 8;
interrupt 9;
interrupt 10;
interrupt 11;
interrupt 12;
interrupt 12;
interrupt 16;
interrupt 17;
interrupt 18;
interrupt 19;
interrupt 20;
interrupt 21;
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.5 中断寄存器
符号
描述
位地址及符号
地址 MSB
IE
Interrupt Enable
A8H
IE2
Interrupt Enable 2
AFH
INT_CLKO 外部中断允许和时钟输
8FH
AUXR2
出寄存器
IP
Interrupt Priority Low B8H
EA
LSB
ELVD EADC
-
ET4
-
EX4
PPCA
ET3
EX3
PLVD
复位值
ES
ET1
EX1
ET0
EX0
0000 0000B
ES4
ES3
ET2
ESPI
ES2
x000 0000B
T2CLKO T1CLKO T0CLKO x000 x000B
EX2
-
PADC
PS
PT1
-
PT0
PX0
0000 0000B
PPWM PSPI
PS2
xxxx xx00B
PX1
TCON
SCON
S2CON
2rd Interrupt Priority
Low register
Timer Control register
Serial Control
Serial 2/ UART2 Control
S3CON
串口3控制寄存器
ACH S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 0000,0000
S4CON
串口4控制寄存器
T4和T3的控制
寄存器
Power Control register
84H S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 0000,0000
0000
D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
0000B
PD
IDL 0011 0000B
87H SMOD SMOD0 LVDF POF GF1 GF0
BCH
CDH
D8H
D9H
DAH
-
ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000 0000B
DBH
-
ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000 0000B
DCH
-
ECOM2 CAPP2 CAPN2 MAT2 TOG2 PWM2 ECCF2 x000 0000B
AUXR
ADC control register
SPI Status register
PCA Control Register
PCA Mode Register
PCA Module 0 Mode
Register
PCA Module 1 Mode
Register
PCA Module 2 Mode
Register
辅助寄存器
CMPCR1
比较器控制寄存器1
E6H
PWMIF
PWM中断标志寄存器
DFH
IP2
T4T3M
PCON
ADC_CONTR
SPSTAT
CCON
CMOD
CCAPM0
CCAPM1
CCAPM2
C
T
S
南通国芯微电子有限公司
B5H
-
-
-
-
88H
98H
9AH
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
0000 0000B
SM0/FE
SM1
SM2
REN
TB8
RB8
TI
RI
0000 0000B
S2SM0
-
S2SM2 S2REN S2TB8 S2RB8 S2TI
U
C
M
8EH
d
e
t
i
im
L
ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1
SPIF WCOL
S2RI 0000 0000B
-
-
-
CF
CR
-
-
-
CIDL
-
-
-
CPS2
T0x12 T1x12 UART_M0x6 T2R T2_C/T
CMPEN CMPIF
PIE
-
-
-
0000 0000B
00xx xxxxB
CCF2 CCF1 CCF0 00xx x000B
CPS1
CPS0
ECF
T2x12 EXTRAM S1ST2
NIE PIS NIS
CMPOE
0xxx 0000B
0000 0001B
CMPRES 0000 0000B
PWMIF7 PWMIF6 PWMIF5 PWMIF4 PWMIF3 PWMIF2
总机:0513-5501 2928 / 2929 / 2966
CHIS0
0000 0000B
传真:0513-5501 2969 / 2956 / 2947
459
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
上表中列出了与STC15F2K60S2系列单片机中断相关的所有寄存器,下面逐一地对这些寄
存器进行介绍。
1. 中断允许寄存器IE、IE2和INT_CLKO
STC15F2K60S2系列单片机CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断,
是由内部的中断允许寄存器IE(IE为特殊功能寄存器,它的字节地址为A8H)控制的,其格式
如下:
IE : 中断允许寄存器 (可位寻址)
SFR name
IE
Address
A8H
bit
name
B7
EA
B6
ELVD
B5
EADC
B4
ES
B3
ET1
B2
EX1
B1
ET0
B0
EX0
EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
d
e
t
i
im
ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。
L
EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。
ES :
串行口1中断允许位,ES=1,允许串行口1中断,ES=0,禁止串行口1中断。
U
C
M
ET1 : 定时/计数器T1的溢出中断允许位,ET1=1,允许T1中断,ET1=0,禁止T1中断。
EX1 : 外部中断1中断允许位,EX1=1,允许外部中断1中断,EX1=0,禁止外部中断1中断。
C
T
S
ET0 : T0的溢出中断允许位,ET0=1允许T0中断,ET0=0禁止T0中断。
EX0 : 外部中断0中断允许位,EX0=1允许中断,EX0=0禁止中断。
IE2 : 中断允许寄存器 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
ET4=1,允许定时器4产生中断;
ET4=0,禁止定时器4产生中断
ET3:定时器3的中断允许位。
ET3=1,允许定时器3产生中断;
ET3=0,禁止定时器3产生中断
ES4 : 串行口4中断允许位。
ES4=1,允许串行口4中断;
ES4=0,禁止串行口4中断
ES3 : 串行口3中断允许位。
ES3=1,允许串行口3中断;
ES3=0,禁止串行口3中断。。
460
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ET2:定时器2的中断允许位。
ET2=1,允许定时器2产生中断;
ET2=0,禁止定时器2产生中断
ESPI:SPI中断允许位。
ESPI=1,允许SPI中断;
ESPI=0,禁止SPI中断。
ES2 : 串行口2中断允许位。
ES2=1,允许串行口2中断;
ES2=0,禁止串行口2中断。
d
e
t
i
im
INT_CLKO (AUXR2)是STC15系列单片机新增寄存器,地址是8FH,INT_CLKO (AUXR2)
格式如下:
L
INT_CLKO (AUXR2) : 外部中断允许和时钟输出寄存器
SFR name Address bit
INT_CLKO
8FH name
(AUXR2)
B7
-
C
T
S
B6
B5
M
CU
B4
EX4 EX3 EX2
B3
-
B2
B1
B0
T2CLKO T1CLKO T0CLKO
EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只
能下降沿触发。
EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也
只能下降沿触发。
EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同
样只能下降沿触发。
T2CLKO, T1CLKO,T0CLKO与中断无关,在此不作介绍。
STC15系列单片机复位以后,IE、IE2和INT_CLKO(AUXR2)被清0,由用户程序置“1”或清
“0”IE、IE2和INT_CLKO (AUXR2)的相应位,实现允许或禁止各中断源的中断申请,若使某
一个中断源允许中断必须同时使CPU开放中断。更新IE的内容可由位操作指令来实现(SETB
BIT;CLR BIT),也可用字节操作指令实现(即MOV IE,#DATA,ANL IE,#DATA;ORL
IE,#DATA;MOV IE,A等)。更新IE2和INT_CLKO(不可位寻址)的内容只可用字节操作指
令(即MOV IE2, #DATA或MOV INT_CLKO, #DATA)来解决。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
461
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 中断优先级控制寄存器IP、IP2
传统8051单片机具有两个中断优先级,即高优先级和低优先级,可以实现两级中断嵌套。
STC15系列单片机通过设置特殊功能寄存器(IP和IP2)中的相应位,可将部分中断设有2个中断
优先级,除外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)外,所有中断请求源可编
程为2个优先级中断。一个正在执行的低优先级中断能被高优先级中断所中断,但不能被另一
个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指
令才能响应新的中断申请。以上所述可归纳为下面两条基本规则:
⒈ 低优先级中断可被高优先级中断所中断,反之不能。
⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断
STC15系列单片机的片内各优先级控制寄存器的格式如下:
IP : 中断优先级控制寄存器 (可位寻址)
SFR name Address bit
B7
IP
B8H
name PPCA
B6
PLVD
B5
PADC
B4
PS
B3
PT1
B2
PX1
d
e
t
i
im
PPCA:
PLVD:
PADC:
PS:
PCA中断优先级控制位。
当PPCA=0时,PCA中断为最低优先级中断(优先级0)
当PPCA=1时,PCA中断为最高优先级中断(优先级1)
低压检测中断优先级控制位。
当PLVD=0时,低压检测中断为最低优先级中断(优先级0)
当PLVD=1时,低压检测中断为最高优先级中断(优先级1)
A/D转换中断优先级控制位。
当PADC=0时,A/D转换中断为最低优先级中断(优先级0)
当PADC=1时,A/D转换中断为最高优先级中断(优先级1)
串口1中断优先级控制位。
当PS=0时,串口1中断为最低优先级中断(优先级0)
当PS=1时,串口1中断为最高优先级中断(优先级1)
PT1:
PX1:
定时器1中断优先级控制位。
当PT1=0时,定时器1中断为最低优先级中断(优先级0)
当PT1=1时,定时器1中断为最高优先级中断(优先级1)
外部中断1优先级控制位。
当PX1=0时,外部中断1为最低优先级中断(优先级0)
当PX1=1时,外部中断1为最高优先级中断(优先级1)
PT0:
定时器0中断优先级控制位。
当PT0=0时,定时器0中断为最低优先级中断(优先级0)
当PT0=1时,定时器0中断为最高优先级中断(优先级1)
PX0:
外部中断0优先级控制位。
当PX0=0时,外部中断0为最低优先级中断(优先级0)
当PX0=1时,外部中断0为最高优先级中断(优先级1)
462
C
T
S
南通国芯微电子有限公司
U
C
M
B1
PT0
B0
PX0
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
IP2 : 中断优先级控制寄存器 (不可位寻址)
SFR name
IP2
Address
B5H
bit
name
B7
-
B6
-
B5
-
B4
-
B3
-
B2
-
B1
PSPI
B0
PS2
PSPI: SPI中断优先级控制位。
当PSPI=0时,SPI中断为最低优先级中断(优先级0)
当PSPI=1时,SPI中断为最高优先级中断(优先级1)
PS2: 串口2中断优先级控制位。
当PS2=0时,串口2中断为最低优先级中断(优先级0)
当PS2=1时,串口2中断为最高优先级中断(优先级1)
中断优先级控制寄存器IP和IP2的各位都由可用户程序置“1”和清“0”。但IP寄存器可
位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IP2寄存器的内容只能用字节
操作指令来更新。STC15系列单片机复位后IP和IP2均为00H,各个中断源均为低优先级中断。
3. 定时器/计数器控制寄存器TCON
U
C
M
d
e
t
i
im
L
TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求
中断源等,TCON格式如下:
TCON : 定时器/计数器中断控制寄存器 (可位寻址)
SFR name
TCON
C
T
S
Address
88H
bit
name
B7
TF1
B6
TR1
B5
TF0
B4
TR0
B3
IE1
B2
IT1
B1
IE0
B0
IT0
TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置
“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由
查询软件清“0”)。
TR1: 定时器1的运行控制位。
TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置
“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询
软件清0)。
TR0: 定时器0的运行控制位。
IE1:外部中断1(INT1/P3.3)中断请求标志。IE1=1,外部中断向CPU请求中断,当CPU响应
该中断时由硬件清“0”IE1。
IT1:外部中断1中断源类型选择位。IT1=0,INT1/P3.3引脚上的上升沿或下降沿信号均可触发
外部中断1。IT1=1,外部中断1为下降沿触发方式。
IE0:外部中断0(INT0/P3.2)中断请求标志。IE0=1,外部中断0向CPU请求中断,当CPU响
应外部中断时,由硬件清“0”IE0。
IT0:外部中断0中断源类型选择位。IT0=0,INT0/P3.2引脚上的上升沿或下降沿均可触发外部
中断0。IT0=1,外部中断0为下降沿触发方式。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
463
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
4. 串行口1控制寄存器SCON
SCON为串行口控制寄存器,SCON格式如下:
SCON : 串行口控制寄存器 (可位寻址)
SFR name
SCON
RI:
Address
98H
bit
name
B7
SM0/FE
B6
SM1
B5
SM2
B4
REN
B3
TB8
B2
RB8
B1
TI
B0
RI
串行口1接收中断标志。若串行口1允许接收且以方式0工作,则每当接收到第8位数据时
置1;若以方式1、2、3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口以
方式2或方式3工作且SM2=1时,则仅当接收到的第9位数据RB8为1后,同时还要接收到停
止位的中间时置1。RI为1表示串行口1正向CPU申请中断(接收中断),RI必须由用户的中
断服务程序清零。
TI: 串行口1发送中断标志。串行口1以方式0发送时,每当发送完8位数据,由硬件置1;若以
方式1、方式2或方式3发送时,在发送停止位的开始时置1。TI=1表示串行口1正在向CPU
申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务程序
时并不将TI清零,TI必须由用户在中断服务程序中清零。
SCON寄存器的其他位与中断无关,在此不作介绍。
U
C
M
d
e
t
i
im
L
5. 串行口2控制寄存器S2CON
S2CON为串行口2控制寄存器,S2CON格式如下:
C
T
S
S2CON : 串行口2控制寄存器 (不可位寻址)
SFR name Address
bit
B7
S2CON
9AH
name S2SM0
B6
-
B5
B4
B3
B2
B1
B0
S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI
S2RI: 串行口2接收中断标志。若串行口2允许接收且以方式0工作,则每当接收到第8位数据时
置1;若以方式1、2、3工作且S2SM2=0时,则每当接收到停止位的中间时置1;当串行口
2以方式2或方式3工作且S2SM2=1时,则仅当接收到的第9位数据S2RB8为1后,同时还要
接收到停止位的中间时置1。S2RI为1表示串行口2正向CPU申请中断(接收中断),S2RI必
须由用户的中断服务程序清零。
S2TI:串行口2发送中断标志。串行口2以方式0发送时,每当发送完8位数据,由硬件置1;若
以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S2TI=1表示串行口2正在
向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务
程序时并不将S2TI清零,S2TI必须由用户在中断服务程序中清零。
S2CON寄存器的其他位与中断无关,在此不作介绍。
464
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6. 串行口3控制寄存器S3CON
S3CON为串行口3控制寄存器,S3CON格式如下:
S3CON : 串行口3控制寄存器 (不可位寻址)
SFR name Address
bit
B7
B6
B5
B4
B3
B2
B1
B0
S3CON
ACH
name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI
S3RI: 串行口3接收中断标志。若串行口3允许接收且以方式0工作,则每当接收到第8位数据时
置1;若以方式1、2、3工作且S3SM2=0时,则每当接收到停止位的中间时置1;当串行口
3以方式2或方式3工作且S3SM2=1时,则仅当接收到的第9位数据S3RB8为1后,同时还要
接收到停止位的中间时置1。S3RI为1表示串行口3正向CPU申请中断(接收中断),S3RI必
须由用户的中断服务程序清零。
S3TI:串行口3发送中断标志。串行口3以方式0发送时,每当发送完8位数据,由硬件置1;若
以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S3TI=1表示串行口3正在
向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务
程序时并不将S3TI清零,S3TI必须由用户在中断服务程序中清零。
S3CON寄存器的其他位与中断无关,在此不作介绍。
7. 串行口4控制寄存器S4CON
U
C
M
d
e
t
i
im
L
S4CON为串行口4控制寄存器,S4CON格式如下:
C
T
S
S4CON : 串行口4控制寄存器 (不可位寻址)
SFR name Address
bit
B7
B6
B5
B4
B3
B2
B1
B0
S4CON
84H
name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI
S4RI: 串行口4接收中断标志。若串行口4允许接收且以方式0工作,则每当接收到第8位数据时
置1;若以方式1、2、3工作且S4SM2=0时,则每当接收到停止位的中间时置1;当串行口
4以方式2或方式3工作且S4SM2=1时,则仅当接收到的第9位数据S4RB8为1后,同时还要
接收到停止位的中间时置1。S4RI为1表示串行口4正向CPU申请中断(接收中断),S4RI必
须由用户的中断服务程序清零。
S4TI:串行口4发送中断标志。串行口4以方式0发送时,每当发送完8位数据,由硬件置1;若
以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S4TI=1表示串行口4正在
向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务
程序时并不将S4TI清零,S4TI必须由用户在中断服务程序中清零。
S4CON寄存器的其他位与中断无关,在此不作介绍。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
465
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8. 低压检测中断相关寄存器:电源控制寄存器PCON
PCON为电源控制寄存器,PCON格式如下:
PCON : 电源控制寄存器
SFR name Address
PCON
87H
bit
B7
B6
B5
B4
B3
B2
B1
B0
name
SMOD
SMOD0
LVDF
POF
GF1
GF0
PD
IDL
LVDF : 低压检测标志位,同时也是低压检测中断请求标志位。
在正常工作和空闲工作状态时,如果内部工作电压Vcc低于低压检测门槛电压,该位自
动置1,与低压检测中断是否被允许无关。即在内部工作电压Vcc低于低压检测门槛电
压时,不管有没有允许低压检测中断,该位都自动为1。该位要用软件清0,清0后,如
内部工作电压Vcc继续低于低压检测门槛电压,该位又被自动设置为1。
在进入掉电工作状态前,如果低压检测电路未被允许可产生中断,则在进入掉电模式
后,该低压检测电路不工作以降低功耗。如果被允许可产生低压检测中断,则在进入
掉电模式后,该低压检测电路继续工作,在内部工作电压Vcc低于低压检测门槛电压
后,产生低压检测中断,可将MCU从掉电状态唤醒。
d
e
t
i
im
电源控制寄存器PCON中的其他位与低压检测中断无关,在此不作介绍。
L
在中断允许寄存器IE中,低压检测中断相应的允许位是ELVD/IE.6
IE : 中断允许寄存器 (可位寻址)
SFR name
IE
Address
A8H
bit
name
C
T
S
B7
EA
U
C
M
B6
ELVD
B5
EADC
B4
ES
B3
ET1
B2
EX1
B1
ET0
B0
EX0
EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。
9. A/D转换控制寄存器ADC_CONTR
ADC_CONTR为A/D转换控制寄存器,ADC_CONTR格式如下:
ADC_CONTR : A/D转换控制寄存器
SFR name
ADC_CONTR
Address
bit
BCH
name
B7
B6
B5
B4
B3
B2
B1
ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1
B0
CHS0
ADC_POWER : ADC电源控制位。当ADC_POWER=0时,关闭ADC电源;
当ADC_PWOER=1时,打开ADC电源。
ADC_FLAG: ADC转换结束标志位,可用于请求A/D转换的中断。当A/D转换完成后,
ADC_FLAG=1, 要用软件清0。不管是A/D转换完成后由该位申请产生中
断,还是由软件查询该标志位A/D转换是否结束,当A/D转换完成后,
ADC_FLAG=1,一定要软件清0。
ADC_START: ADC转换启动控制位,设置为“1”时,开始转换,转换结束后为0。
A/D转换控制寄存器ADC_CONTR中的其他位与中断无关,在此不作介绍。
466
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
在中断允许寄存器IE中,A/D转换器的中断允许位是EADC/IE.5
IE : 中断允许寄存器 (可位寻址)
SFR name
IE
Address
A8H
bit
name
B7
EA
B6
ELVD
B5
EADC
B4
ES
B3
ET1
B2
EX1
B1
ET0
B0
EX0
EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。
10. 比较器控制寄存器1:CMPCR1
比较器控制寄存器1的格式如下:
CMPCR1 : 比较器控制寄存器1
SFR name
CMPCR1
Address
E6H
bit
name
B7
B6
CMPEN CMPIF
B5
B4
PIE
NIE
Li
PIS
CMPEN:比较器模块使能位
CMPEN=1,使能比较器模块;
CMPEN=0,禁用比较器模块, 比较器的电源关闭。
U
C
M
d
e
t
i
m
B3
B2
B1
B0
NIS
CMPOE
CMPRES
CMPIF:��������
比较器中断标志位(Interrupt Flag)
在 CMPEN为1的情况下:
当比较器的比较结果由LOW变成HIGH时, 若是PIE被设置成1, 那么内建的某一个
叫做CMPIF_p的寄存器会被设置成1;
当比较器的比较结果由HIGH变成LOW时, 若是NIE被设置成1, 那么内建的某一个
叫做CMPIF_n的寄存器会被设置成1;
当CPU 去读取 CMPIF 的数值时, 会读到 (CMPIF_p || CMPIF_n);
当CPU对CMPIF写0后, CMPIF_p 以及 CMPIF_n 都会被清除为0 .
而中断产生的条件是 [ (EA==1) && (((PIE==1)&&(CMPIF_p==1)) || ((NIE==1)&&(CM
PIF_n==1))) ]
CPU接受中断后, 并不会自动清除此CMPIF标志, 用户必须用软件写”0”去清除它。
C
T
S
PIE: 比较器上升沿中断使能位( Pos-edge Interrupt Enabling)
PIE = 1,������
使能比较器由LOW变HIGH的事件 设定CMPIF_p产生中断�
;
PIE = 0,������
禁用比较器由LOW变HIGH的事件 设定CMPIF_p产生中断�
。
NIE: 比较器下降沿中断使能位 ( Neg-edge Interrupt Enabling)
NIE = 1,������
使能比较器由HIGH变LOW的事件 设定CMPIF_n产生中断�
;
NIE = 0,������
禁用比较器由HIGH变LOW的事件 设定CMPIF_n产生中断�
。
比较器控制寄存器1—CMPCR1 的其他位与中断无关,在此不作介绍。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
467
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.6 中断优先级
除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断、外部中断4(INT4)、串口3中
断、串口4中断、定时器T3中断、定时器T4中断及比较器中断外,STC15W4K60S4系列单片
机的所有的中断都具有2个中断优先级。�����������������������
一个正在执行的低优先级中断能被高优先级中断所中
断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程
序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基本规则:
⒈ 低优先级中断可被高优先级中断所中断,反之不能。
⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不能被它的同级中断所中断。
当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次
序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC15W4K60S4系列单片
机各中断优先查询次序如下:
中断源
0.
INT0
1.
Timer 0
2.
INT1
3.
Timer 1
4.
UART1
5. ADC interrupt
6.
LVD
7.
PCA
8.
UART2
9.
SPI
10.
INT2
11.
INT3
12.
Timer 2
13.
14.
15.
16.
INT4
17.
UART3
18.
UART4
19.
Timer 3
20.
Timer 4
21.
Comparator
C
T
S
查询次序
d
e
t
i
im
(highest)
U
C
M
L
(lowest)
注意:当定时器/计数器0工作在不可屏蔽中断的16位自动重装载模式时,如果此时定时器/计
数器0中断被允许了(只需置位ET0即可,不需置位EA,工作在不可屏蔽中断的16位自动重装载模
式下的定时器/计数器0中断与EA无关),则该中断优先级是所有中断中最高的,任何一个中断
都不能打断它,而且该中断被打开后它不仅不受EA控制也不再受ET0控制了。
468
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
如果使用C 语言编程,中断查询次序号就是中断号,例如:
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
Int0_Routine(void)
Timer0_Rountine(void)
Int1_Routine(void)
Timer1_Rountine(void)
UART1_Routine(void)
ADC_Routine(void)
LVD_Routine(void)
PCA_Routine(void)
UART2_Routine(void)
SPI_Routine(void)
Int2_Routine(void)
Int3_Routine(void)
Timer2_Routine(void)
Int4_Routine(void)
S3_Routine(void)
S4_Routine(void)
Timer3_Routine(void)
Timer4_Routine(void)
Comparator_Routine(void)
C
T
S
南通国芯微电子有限公司
interrupt 0;
interrupt 1;
interrupt 2;
interrupt 3;
interrupt 4;
interrupt 5;
interrupt 6;
interrupt 7;
interrupt 8;
interrupt 9;
interrupt 10;
interrupt 11;
interrupt 12;
interrupt 16;
interrupt 17;
interrupt 18;
interrupt 19;
interrupt 20;
interrupt 21;
U
C
M
总机:0513-5501 2928 / 2929 / 2966
d
e
t
i
im
L
传真:0513-5501 2969 / 2956 / 2947
469
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.7 中断处理
当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作:
1. 当前正被执行的指令全部执行完毕;
2. PC值被压入栈;
3. 现场保护;
4. 阻止同级别其他中断;
5. 将中断向量地址装载到程序计数器PC;
6. 执行相应的中断服务程序。
中断服务程序ISR完成和该中断相应的一些操作。中断服务程序ISR以RETI(中断返回)指令
结束,将PC值从栈中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。
当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是该中断源相对应的
中断服务程序的起始地址。各中断源服务程序的入口地址(即中断向量)为:
C
T
S
470
南通国芯微电子有限公司
d
e
t
i
im
中断源
中断向量
External Interrupt 0
Timer 0
External Interrupt 1
Timer 1
S1(UART1)
ADC interrupt
LVD
PCA
S2(UART2)
SPI
External Interrupt 2
External Interrupt 3
Timer 2
/
/
/
External Interrupt 4
S3(UART3)
S4(UART4)
Timer 3
Timer 4
Comparator
0003H
000BH
0013H
001BH
0023H
002BH
0033H
003BH
0043H
004BH
0053H
005BH
0063H
006BH
0073H
007BH
0083H
008BH
0093H
009BH
00A3H
00ABH
U
C
M
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
当“转去执行中断”时,引起外部中断INT0/INT1/INT2/INT3/INT4请求标志位和定时器/计数
器0、定时器/计数器1的中断请求标志位将被硬件自动清零,其它中断的中断请求标志位需软
件清"0"。由于中断向量入口地址位于程序存储器的开始部分,所以主程序的第1条指令通常为
跳转指令,越过中断向量区(LJMP MAIN)。
注意:不能用RET指令代替RETI指令
RET指令虽然也能控制PC返回到原来中断的地方,但RET指令没有清零中断优先级状态触
发器的功能,中断控制系统会认为中断仍在进行,其后果是与此同级或低级的中断请求将不被
响应。
若用户在中断服务程序中进行了入栈操作,则在RETI指令执行前应进行相应的出栈操
作,即在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点。
6.8 中断嵌套
d
e
t
i
im
L
U
C
M
C
T
S
中断优先级高的中断请求可以中断CPU正在处理的优先级更低的中断服务程序,待完成了
中断优先权高的中断服务程序后,再继续被打断的更低的中断服务程序。这就是中断嵌套。下
图描述了主程序和中断服务程序运行示意图。
主
程
序
断点
继
续
执
行
主
程
序
南通国芯微电子有限公司
求
低级
中断
程序
求
请
断
中
级
低
应
响
返
回
主
程
序
断点
继
续
执
行
请
断
中
高
级
中
断
服
务
程
序
级
高
应
响
返
回
低
级
中
断
程
序
RETI
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
471
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.9 外部中断
外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,上升沿或下降沿均可触发方式
和仅下降沿触发方式。
TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是上升沿和下降沿均可触
发还是仅下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探测到上升沿或下降沿
后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探测下降沿后才可产生
外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉电模式唤醒。
外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中断
2~4的中断请求标志位被隐藏起来了,对用户不可见,故也无需用户清"0"。当相应的中断服
务程序被响应后或中断允许位EXn (n=2,3,4)被清零后,这些中断请求标志位会立即自动地被清
0。这些中断请求标志位也可以通过软件禁止相应的中断允许控制位将其清“0”(特殊应用)。
d
e
t
i
im
外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)也可以用于将单片机从掉电模式唤
醒。
L
由于系统每个时钟对外部中断引脚采样1次,所以为了确保被检测到,输入信号应该至少
维持2个时钟。如果外部中断是仅下降沿触发,要求必须在相应的引脚维持高电平至少1个时
钟,而且低电平也要持续至少一个时钟,才能确保该下降沿被CPU检测到。同样,如果外部中
断是上升沿、下降沿均可触发,则要求必须在相应的引脚维持低电平或高电平至少1个时钟,
而且高电平或低电平也要持续至少一个时钟,这样才能确保CPU能够检测到该上升沿或下降
沿。
C
T
S
U
C
M
STC15系列单片机的3路CCP/PCA/PWM还再可实现3个外部中断(支持上升沿/下降沿中断)
472
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10 中断的测试程序(C和汇编)
6.10.1 外部中断0(INT0)的测试程序
6.10.1.1 外部中断INT0(上升沿+下降沿)的测试程序(C和汇编)
1.C程序:
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
U
C
M
#include "reg51.h"
#include "intrins.h"
C
T
S
//----------------------------------------------bit
sbit
FLAG;
P10
=
P1^0;
L
//1:上升沿中断 0:下降沿中断
//----------------------------------------//外部中断服务程序
void exint0() interrupt 0
{
P10
=
!P10;
FLAG =
INT0;
}
//----------------------------------------------void main()
{
INT0 =
1;
IT0
=
0;
EX0
=
1;
EA
=
1;
d
e
t
i
im
//INT0中断入口
//将测试口取反
//保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿)
//设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT0中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
473
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751----------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
FLAG BIT 20H.0
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXINT0
//----------------------------------------
MAIN:
C
T
S
d
e
t
i
im
//1:上升沿中断 0:下降沿中断
//复位入口
U
C
M
L
//INT0中断入口
ORG 0100H
MOV SP,
CLR
SETB
SETB
SJMP
IT0
EX0
EA
$
#3FH
//设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT0中断
//----------------------------------------//外部中断服务程序
EXINT0:
CPL P1.0
PUSH PSW
MOV C,
INT0
MOV FLAG, C
POP PSW
RETI
;----------------------------------------
474
//将测试口取反
//读取INT0口的状态
//保存, INT0=0(下降沿); INT0=1(上升沿)
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.1.2 外部中断INT0(下降沿)的测试程序(C和汇编)
1.C程序:
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
U
C
M
//----------------------------------------------sbit
P10
=
P1^0;
C
T
S
//----------------------------------------//外部中断服务程序
void exint0() interrupt 0
{
P10
=
!P10;
}
L
//INT0中断入口
//将测试口取反
//----------------------------------------------void main()
{
INT0
IT0
EX0
EA
=
=
=
=
1;
1;
1;
1;
//设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT0中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
475
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXINT0
//----------------------------------------
MAIN:
C
T
S
ORG 0100H
MOV SP,
SETB
SETB
SETB
SJMP
d
e
t
i
im
//复位入口
//INT0中断入口
U
C
M
L
#3FH
IT0
EX0
EA
$
//设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT0中断
//----------------------------------------//外部中断服务程序
EXINT0:
CPL
RETI
P1.0
//将测试口取反
;----------------------------------------
476
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.2 外部中断1(INT1)的测试程序
6.10.2.1 外部中断INT1(上升沿+下降沿)的测试程序(C和汇编)
1.C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------bit
sbit
FLAG;
P10
=
C
T
S
P1^0;
//----------------------------------------//外部中断服务程序
void exint1() interrupt 2
{
P10
=
!P10;
FLAG =
INT1;
}
//----------------------------------------------void main()
{
INT1 =
1;
IT1
=
0;
EX1
=
1;
EA
=
1;
U
C
M
d
e
t
i
im
L
//1:上升沿中断 0:下降沿中断
//INT1中断入口
//将测试口取反
//保存INT1口的状态, INT1=0(下降沿); INT1=1(上升沿)
//设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT1中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
477
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
FLAG
BIT
20H.0
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP EXINT1
C
T
S
CLR
SETB
SETB
SJMP
IT1
EX1
EA
$
//复位入口
U
C
M
L
//INT1中断入口
//----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#3FH
d
e
t
i
im
//1:上升沿中断 0:下降沿中断
//设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT1中断
//----------------------------------------//外部中断服务程序
EXINT1:
CPL P1.0
PUSH PSW
MOV C,
INT1
MOV FLAG, C
POP PSW
RETI
;----------------------------------------
END
478
南通国芯微电子有限公司
//将测试口取反
//读取INT1口的状态
//保存, INT1=0(下降沿); INT0=1(上升沿)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.2.2 外部中断INT1(下降沿)的测试程序(C和汇编)
1.C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
U
C
M
//----------------------------------------------sbit
P10
=
P1^0;
C
T
S
//----------------------------------------//外部中断服务程序
void exint1() interrupt 2
{
P10
=
!P10;
}
L
//INT1中断入口
//将测试口取反
//----------------------------------------------void main()
{
INT1
IT1
EX1
EA
=
=
=
=
1;
1;
1;
1;
//设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT1中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
479
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP EXINT1
//----------------------------------------
MAIN:
C
T
S
ORG 0100H
MOV SP,
SETB
SETB
SETB
SJMP
d
e
t
i
im
//复位入口
//INT1中断入口
U
C
M
L
#3FH
IT1
EX1
EA
$
//设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
//使能INT1中断
//----------------------------------------//外部中断服务程序
EXINT1:
CPL
RETI
P1.0
//将测试口取反
;----------------------------------------
480
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.3 外部中断2(INT2)(下降沿中断)的测试程序(C和汇编)
1.C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- -------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
INT_CLKO
P10
=
=
P1^0;
0x8f;
C
T
S
U
C
M
//----------------------------------------------//外部中断服务程序
void exint2() interrupt 10
{
P10
=
!P10;
//
INT_CLKO
&=
0xEF;
//
INT_CLKO
|=
0x10;
}
void main()
{
INT_CLKO
EA
=
|=
1;
0x10;
L
//外部中断与时钟输出控制寄存器
//INT2中断入口
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
//(EX2 = 1)使能INT2中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
481
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- -------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
d
e
t
i
im
INT_CLKO DATA 08FH
//外部中断与时钟输出控制寄存器
//----------------------------------------
ORG 0000H
LJMP MAIN
U
C
M
ORG 0053H
LJMP EXINT2
//----------------------------------------
MAIN:
C
T
S
ORG 0100H
MOV SP,
ORL
SETB EA
L
//复位入口
//INT2中断入口
#3FH
INT_CLKO,
#10H
//(EX2 = 1)使能INT2中断
SJMP $
//----------------------------------------//外部中断服务程序
EXINT2:
CPL
P1.0
//
ANL INT_CLKO,
#0EFH
//
ORL INT_CLKO,
#10H
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
RETI
;----------------------------------------
END
482
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.4 外部中断3(INT3)(下降沿中断)的测试程序(C和汇编)
1.C程序:
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- ---------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) -------------------------------*/
/* --- 研发顾问QQ:800003751----------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
INT_CLKO
P10
=
=
P1^0;
C
T
S
0x8f;
U
C
M
//外部中断与时钟输出控制寄存器
//----------------------------------------------//外部中断服务程序
void exint3() interrupt 11
{
P10
=
!P10;
//INT3中断入口
//将测试口取反
//
INT_CLKO
&=
0xDF;
//
INT_CLKO
|=
0x20;
}
void main()
{
INT_CLKO
EA
=
|=
1;
0x20;
L
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
//(EX3 = 1)使能INT3中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
483
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*-------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- ----------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) --------------------------------*/
/* --- 研发顾问QQ:800003751-----------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ------------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
INT_CLKO DATA 08FH
//----------------------------------------
ORG 0000H
LJMP MAIN
C
T
S
ORG 0100H
MOV SP,
ORL
SETB EA
SJMP $
L
//复位入口
U
C
M
ORG 005BH
LJMP EXINT3
//----------------------------------------
MAIN:
d
e
t
i
im
//外部中断与时钟输出控制寄存器
//INT3中断入口
#3FH
INT_CLKO,
#20H
//(EX3 = 1)使能INT3中断
//----------------------------------------//外部中断服务程序
EXINT3:
CPL
P1.0
//
ANL INT_CLKO,
#0DFH
//
ORL INT_CLKO,
#20H
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
RETI
;----------------------------------------
484
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.5 外部中断4(INT4)(下降沿中断)的测试程序(C和汇编)
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- --------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) ------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
INT_CLKO
P10
=
=
P1^0;
C
T
S
0x8f;
U
C
M
//----------------------------------------------//外部中断服务程序
void exint4() interrupt 16
{
P10
=
!P10;
//
INT_CLKO
&=
0xBF;
//
INT_CLKO
|=
0x40;
}
void main()
{
INT_CLKO
EA
=
|=
1;
0x40;
L
//外部中断与时钟输出控制寄存器
//INT4中断入口
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
//(EX4 = 1)使能INT4中断
while (1);
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
485
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2.汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- --------------------------------------------------------*/
/* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) ------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
INT_CLKO
DATA 08FH
//----------------------------------------
ORG 0000H
LJMP MAIN
C
T
S
L
//复位入口
U
C
M
ORG 0083H
LJMP EXINT4
//----------------------------------------
MAIN:
d
e
t
i
im
//外部中断与时钟输出控制寄存器
//INT4中断入口
ORG 0100H
MOV SP,
ORL
SETB EA
#3FH
INT_CLKO,
#40H
//(EX4 = 1)使能INT4中断
SJMP $
//----------------------------------------//外部中断服务程序
EXINT4:
CPL
P1.0
//
ANL
INT_CLKO,
#0BFH
//
ORL INT_CLKO,
#40H
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
RETI
;----------------------------------------
486
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.6 T0扩展为外部下降沿中断的测试程序(C和汇编)
——利用T0的外部计数方式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
AUXR =
P10
=
C
T
S
0x8e;
P1^0;
U
C
M
//----------------------------------------------//定时器0中断服务程序
void t0int() interrupt 1
{
P10
=
!P10;
}
void main()
{
AUXR
TMOD
TH0 =
TR0
ET0
EA
while (1);
=
0x80;
=
0x04;
TL0 = 0xff;
=
1;
=
1;
=
d
e
t
i
im
L
//辅助寄存器
//中断入口
//将测试口取反
//定时器0为1T模式
//设置定时器0为16位自动重装载外部记数模式
//设置定时器0初始值
//定时器0开始工作
//开定时器0中断
1;
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
487
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR
DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
L
//复位入口
ORG 000BH
LJMP T0INT
//-----------------------------------------
//中断入口
MAIN:
ORG 0100H
C
T
S
U
C
M
MOV SP,
#3FH
MOV
MOV
MOV
MOV
MOV
SETB
SETB
#80H
#04H
#0FFH
A
A
SETB EA
SJMP $
AUXR,
TMOD,
A,
TL0,
TH0,
TR0
ET0
d
e
t
i
im
//辅助寄存器
//定时器0为1T模式
//设置定时器0为16位自动重装载外部记数模式
//设置定时器0初始值
//定时器0开始工作
//开定时器0中断
//----------------------------------------//定时器0中断服务程序
T0INT:
CPL P1.0
RETI
;----------------------------------------
488
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.7 T1扩展为外部下降沿中断的测试程序(C和汇编)
——利用T1的外部计数方式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
U
C
M
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
AUXR =
P10
=
C
T
S
0x8e;
P1^0;
//----------------------------------------------//定时器1中断服务程序
void t1int() interrupt 3
{
P10
=
!P10;
}
void main()
{
AUXR =
TMOD =
TH1 = TL1 =
TR1
=
ET1
=
EA
while (1);
=
0x40;
0x40;
0xff;
1;
1;
d
e
t
i
im
L
//辅助寄存器
//中断入口
//将测试口取反
//定时器1为1T模式
//设置定时器1为16位自动重装载外部记数模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
1;
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
489
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR
DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1INT
//----------------------------------------
MAIN:
C
T
S
ORG 0100H
MOV SP,
#3FH
MOV
MOV
MOV
MOV
MOV
SETB
SETB
#40H
#40H
#0FFH
A
A
SETB EA
SJMP $
AUXR,
TMOD,
A,
TL1,
TH1,
TR1
ET1
d
e
t
i
im
//辅助寄存器
//复位入口
U
C
M
L
//中断入口
//定时器1为1T模式
//设置定时器1为16位自动重装载外部记数模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
//----------------------------------------//定时器1中断服务程序
T1INT:
CPL P1.0
RETI
;----------------------------------------
490
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
6.10.8 T2扩展为外部下降沿中断的测试程序(C和汇编)
——利用T2的外部计数方式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
U
C
M
//----------------------------------------------sfr
IE2
=
0xaf;
sfr
AUXR =
0x8e;
sfr
T2H
=
0xD6;
sfr
T2L =
0xD7;
C
T
S
d
e
t
i
im
L
//中断使能寄存器2
//辅助寄存器
//定时器2高8位
//定时器2低8位
sbit P10 = P1^0;
//----------------------------------------------//定时器2中断服务程序
void t2int() interrupt 12
{
P10
=
!P10;
//
IE2
&=
~0x04;
//
IE2
|=
0x04;
}
void main()
{
AUXR |=
南通国芯微电子有限公司
0x04;
//中断入口
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
//定时器2为1T模式
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
491
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
AUXR
|= 0x08;
T2H = T2L = 0xff;
AUXR
|= 0x10;
IE2
|=
0x04;
EA
=
1;
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//T2_C/T=1, T2(P3.1)引脚为时钟源
//初始化计时值
//定时器2开始计时
//开定时器2中断
while (1);
}
d
e
t
i
im
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
L
//假定测试芯片的工作频率为18.432MHz
IE2
DATA
AUXR DATA
T2H
DATA
T2L
DATA
0AFH
08EH
0D6H
0D7H
//中断使能寄存器2
//辅助寄存器
//定时器2高8位
//定时器2低8位
//----------------------------------------
ORG 0000H
LJMP MAIN
//复位入口
ORG 0063H
LJMP T2INT
//-----------------------------------------
//中断入口
492
ORG 0100H
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
MAIN:
MOV SP,
官方网站:www.STCMCU.com
研发顾问QQ:800003751
#3FH
ORL
ORL
MOV A,
MOV T2L,
MOV T2H,
ORL
AUXR, #10H
//定时器2开始计时
ORL
IE2,
//开定时器2中断
SETB EA
AUXR, #04H
AUXR, #08H
#0FFH
A
A
#04H
//定时器2为1T模式
//T2_C/T=1, T2(P3.1)引脚为时钟源
//初始化计时值
SJMP $
//----------------------------------------//定时器2中断服务程序
T2INT:
CPL
P1.0
U
C
M
//
ANL IE2,
#0FBH
//
ORL IE2,
#04H
RETI
STC — 全球最大的8051单片机设计公司
C
T
S
d
e
t
i
im
L
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
;----------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
493
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6.10.9 用CCP/PCA功能扩展外部中断的测试程序(C和汇编)
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- --------------------------------------------------------*/
/* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 ----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
typedef unsigned long
BYTE;
WORD;
DWORD;
U
C
M
sfr
0xA2;
#define FOSC
18432000L
P_SW1 =
C
T
S
#define CCP_S0 0x10
#define CCP_S1 0x20
sfr
sbit
sbit
sbit
sbit
sfr
sfr
sfr
sfr
sfr
sfr
sfr
sfr
sfr
sfr
sfr
494
CCON =
CCF0
=
CCF1
=
CR
=
CF
=
CMOD =
CL
=
CH
=
CCAPM0
CCAP0L
CCAP0H
CCAPM1
CCAP1L
CCAP1H
CCAPM2
CCAP2L
//外设功能切换寄存器1
//P_SW1.4
//P_SW1.5
0xD8;
CCON^0;
CCON^1;
CCON^6;
CCON^7;
0xD9;
0xE9;
0xF9;
=
0xDA;
=
0xEA;
=
0xFA;
=
0xDB;
=
0xEB;
=
0xFB;
=
0xDC;
=
0xEC;
南通国芯微电子有限公司
L
//PCA控制寄存器
//PCA模块0中断标志
//PCA模块1中断标志
//PCA定时器运行控制位
//PCA定时器溢出标志
//PCA模式寄存器
//PCA定时器低字节
//PCA定时器高字节
//PCA模块0模式寄存器
//PCA模块0捕获寄存器 LOW
//PCA模块0捕获寄存器 HIGH
//PCA模块1模式寄存器
//PCA模块1捕获寄存器 LOW
//PCA模块1捕获寄存器 HIGH
//PCA模块2模式寄存器
//PCA模块2捕获寄存器 LOW
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
sfr
CCAP2H
=
sfr
sfr
sfr
PCAPWM0
=
PCAPWM1
=
PCA_ PWM2 =
0xf2;
0xf3;
0xf4;
sbit
PCA_LED
P1^0;
=
0xFC;
//
//
//
//
//
//
//
//
//
ACC
ACC
ACC
P_SW1
=
&=
|=
=
ACC
ACC
ACC
P_SW1
=
&=
|=
=
STC — 全球最大的8051单片机设计公司
//PCA模块2捕获寄存器 HIGH
//PCA模块0的PWM寄存器
//PCA模块1的PWM寄存器
//PCA模块2的PWM寄存器
void PCA_isr() interrupt 7 using 1
{
CCF0 = 0;
PCA_LED = !PCA_LED;
}
void main()
{
ACC =
ACC &=
P_SW1 =
研发顾问QQ:800003751
//PCA测试LED
//清中断标志
//测试LED取反
d
e
t
i
im
P_SW1;
~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
ACC;
//(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
L
P_SW1;
~(CCP_S0 | CCP_S1);
//CCP_S0=1 CCP_S1=0
CCP_S0;
//(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
ACC;
C
T
S
U
C
M
P_SW1;
~(CCP_S0 | CCP_S1);
//CCP_S0=0 CCP_S1=1
CCP_S1;
//(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
ACC;
CCON =
0;
CL
=
0;
CH
=
0;
CMOD =
0x00;
CCAPM0
=
0x11;
CCAPM0
=
0x21;
CCAPM0
=
0x31;
//初始化PCA控制寄存器
//PCA定时器停止
//清除CF标志
//清除模块中断标志
//复位PCA寄存器
CR
EA
//PCA定时器开始工作
while (1);
//
//
=
=
1;
1;
//设置PCA时钟源
//禁止PCA定时器溢出中断
//PCA模块0为下降沿触发
//PCA模块0为上升沿沿触发
//PCA模块0为上升沿/下降沿触发
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
495
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- --------------------------------------------------------*/
/* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 ----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
d
e
t
i
im
//本测试程序以PCA模块0为例进行说明,PCA的模块1和模块2与模块0的实用方法相同
P_SW1 EQU
0A2H
CCP_S0 EQU
CCP_S1 EQU
10H
20H
CCON EQU
CCF0 BIT
CCF1 BIT
CR
BIT
CF
BIT
CMOD EQU
CL
EQU
CH
EQU
CCAPM0
CCAP0L
CCAP0H
CCAPM1
CCAP1L
CCAP1H
CCAPM2
CCAP2L
CCAP2H
PCA_PWM0
PCA_PWM1
PCA_PWM2
0D8H
CCON.0
CCON.1
CCON.6
CCON.7
0D9H
0E9H
0F9H
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
PCA_LED
0DAH
0EAH
0FAH
0DBH
0EBH
0FBH
0DCH
0ECH
0FCH
0F2H
0F3H
0F4H
C
T
S
BIT P1.0
//外设功能切换寄存器1
//P_SW1.4
//P_SW1.5
U
C
M
L
;PCA控制寄存器
;PCA模块0中断标志
;PCA模块1中断标志
;PCA定时器运行控制位
;PCA定时器溢出标志
;PCA模式寄存器
;PCA定时器低字节
;PCA定时器高字节
;PCA模块0模式寄存器
;PCA模块0捕获寄存器 LOW
;PCA模块0捕获寄存器 HIGH
;PCA模块1模式寄存器
;PCA模块1捕获寄存器 LOW
;PCA模块1捕获寄存器 HIGH
//PCA模块2模式寄存器
//PCA模块2捕获寄存器 LOW
//PCA模块2捕获寄存器 HIGH
//PCA模块0的PWM寄存器
//PCA模块1的PWM寄存器
//PCA模块2的PWM寄存器
;PCA测试LED
;----------------------------------------
ORG 0000H
LJMP MAIN
496
ORG 003BH
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
PCA_ISR:
PUSH PSW
PUSH ACC
CKECK_CCF0:
JNB CCF0, PCA_ISR_EXIT ;判断是否为捕获中断
CLR CCF0
;清中断标志
CPL PCA_LED
;测试LED取反
PCA_ISR_EXIT:
POP ACC
POP PSW
RETI
;----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#5FH
//
//
//
//
//
//
//
//
//
MOV A,
P_SW1
ANL A,
#0CFH
MOV P_SW1, A
MOV
ANL
ORL
MOV
A,
A,
A,
P_SW1,
MOV
ANL
ORL
MOV
A,
A,
A,
P_SW1,
P_SW1
#0CFH
#CCP_S0
A
C
T
S
P_SW1
#0CFH
#CCP_S1
A
U
C
M
MOV CCON, #0
CLR A
MOV CL,
A
MOV CH,
A
MOV CMOD, #00H
MOV CCAPM0, #11H
;
MOV CCAPM0, #21H
;
MOV CCAPM0, #31H
;------------------------------
SETB CR
SETB EA
d
e
t
i
im
//CCP_S0=0 CCP_S1=0
//(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
L
//CCP_S0=1 CCP_S1=0
//(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
//CCP_S0=0 CCP_S1=1
//(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
;初始化PCA控制寄存器
;PCA定时器停止
;清除CF标志
;清除模块中断标志
;
;复位PCA寄存器
;
;设置PCA时钟源
;禁止PCA定时器溢出中断
;PCA模块0捕获CCP0(P1.3)的下降沿
;PCA模块0捕获CCP0(P1.3)的上升沿
;PCA模块0捕获CCP0(P1.3)的上升沿/下降沿
;PCA定时器开始工作
SJMP $
;----------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
497
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
第7章 定时器/计数器
STC15W4K60S4系列���������������������������������
单片机内部设置了5个16位定时器/计数器:16位定时器/计数器T0
和T1、T2、T3以及T4。5个16位定时器T0、T1、T2、T3和T4都具有计数方式和定时方式两种工
作方式。对定时器/计数器T0和T1,用它们在特殊功能寄存器TMOD中相对应的控制位— C/T来
选择T0或T1为定时器还是计数器。对定时器/计数器T2,用特殊功能寄存器AUXR中的控制位—
T2_C/T来选择T2为定时器还是计数器。对定时器/计数器T3,用特殊功能寄存器T4T3M中的控
制位— T3_C/T来选择T3为定时器还是计数器。对定时器/计数器T4,用特殊功能寄存器T4T3M
中的控制位— T4_C/T来选择T4为定时器还是计数器。定时器/计数器的核心部件是一个加法计
数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为
定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1;如
果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5,T2为P3.1,T3为P0.7,T4为P0.5),则
为计数方式,每来一个脉冲加1。
d
e
t
i
im
当定时器/计数器T0、T1及T2工作在定时模式时,特殊功能寄存器AUXR中的T0x12、T1x12
和T2x12分别决定是系统时钟/12还是系统时钟/1(不分频)后让T0、T1和T2进行计数。当定时器
/计数器T3和T4工作在定时模式时,特殊功能寄存器T4T3M中的T3x12和T4x12分别决定是系统时
钟/12还是系统时钟/1(不分频)后让T3和T4进行计数。当定时器/计数器工作在计数模式时,对
外部脉冲计数不分频。
U
C
M
L
定时器/计数器0有4种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模
式),模式2(8位自动重装模式),模式3(不可屏蔽中断的16位自动重装载模式)。定时器/计数器
1除模式3外,其他工作模式与定时器/计数器0相同,T1在模式3时无效,停止计数。定时器T2
的工作模式固定为16位自动重装载模式。T2可以当定时器使用,也可以当串口的波特率发生器
和可编程时钟输出。定时器3、定时器4与定时器T2一样,它们的工作模式固定为16位自动重装
载模式。T3/T4可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。
C
T
S
STC15全系列的定时器/计数器的类型如下表所示。
定时器
计数器 定时器/计数器0 定时器/计数器1 定时器/计数器2 定时器/计数器3 定时器/计数器4
单片机型号
STC15F101W系列
√
√
STC15F408AD系列
√
√
STC15W201S系列
√
√
STC15W408AS系列
√
√
STC15W408S系列
√
√
√
STC15W1K16S系列
√
√
√
STC15F2K60S2系列
√
√
√
STC15W4K60S4系列
√
√
√
√
√
上表中√表示对应的系列有相应的定时器/计数器。
498
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.1 定时器/计数器的相关寄存器
位地址及其符号
符号
描述
地址
TCON
Timer Control
88H
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
0000 0000B
TMOD
TL0
TL1
TH0
TH1
IE
Timer Mode
Timer Low 0
Timer Low 1
Timer High 0
Timer High 1
中断允许寄存器
89H
8AH
8BH
8CH
8DH
GATE
C/T
M1
M0
GATE
C/T
M1
M0
ES
ET1
EX1
ET0
EX0
0000 0000B
0000 0000B
0000 0000B
0000 0000B
0000 0000B
0000 0000B
IP
中断优先级寄存器
PT1
PX1
PT0
PX0
0000 0000B
T2H
T2L
AUXR
INT_CLKO
AUXR2
T4T3M
T4H
T4L
T3H
T3L
IE2
定时器2高8位
寄存器
定时器2低8位
寄存器
辅助寄存器
外部中断允许和时
钟输出寄存器
T4和T3的控制
寄存器
定时器4高8位
寄存器
定时器4低8位
寄存器
定时器3高8位
寄存器
定时器3低8位
寄存器
Interrupt Enable
register
南通国芯微电子有限公司
A8H
B8H
MSB
EA
LSB
ELVD EADC
PPCA PLVD PADC
PS
D6H
d
e
t
i
im
D7H
8EH
8FH
EX4
EX3 EX2
U
C
M
-
L
0000 0000B
0000 0000B
T2x12 EXTRAM S1ST2
0000 0001B
T2CLKO T1CLKO T0CLKO
x000 x000B
T0x12 T1x12 UART_M0x6 T2R T2_C/T
-
复位值
D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B
D2H
C
T
S
0000 0000B
D3H
0000 0000B
D4H
0000 0000B
D5H
0000 0000B
AFH
-
ET4 ET3
总机:0513-5501 2928 / 2929 / 2966
ES4
ES3
ET2
ESPI
ES2
x000 0000B
传真:0513-5501 2969 / 2956 / 2947
499
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
1. 定时器/计数器0/1控制寄存器TCON
TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求
中断源等,TCON格式如下:
TCON : 定时器/计数器中断控制寄存器 (可位寻址)
SFR name
TCON
Address
88H
bit
name
B7
TF1
B6
TR1
B5
TF0
B4
TR0
B3
IE1
B2
IT1
B1
IE0
B0
IT0
TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置
“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由
查询软件清“0”)。
TR1: 定时器T1的运行控制位。该位由软件置位和清零。当GATE(TMOD.7)=0,TR1=1时就
允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD.7)=1,TR1=1且INT1输入
高电平时,才允许T1计数。
d
e
t
i
im
TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置
“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询
软件清0)。
U
C
M
L
TR0: 定时器T0的运行控制位。该位由软件置位和清零。当GATE(TMOD.3)=0,TR0=1时就
允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMOD.3)=1,TR1=0且INT0输入
高电平时,才允许T0计数。
C
T
S
IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该
中断时由硬件清“0”IE1。
IT1:外部中断源1触发控制位。IT1=0,上升沿或下降沿均可触发外部中断1。IT1=1,外部中
断1程控为下降沿触发方式。
IE0:外部中断0请求源(INT0/P3.2)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外
部中断时,由硬件清“0”IE0(边沿触发方式)。
IT0:外部中断源0触发控制位。IT0=0,上升沿或下降沿均可触发外部中断0。IT0=1,外部中
断0程控为下降沿触发方式。
500
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 定时器�����������
/����������
计数器工作模式寄存器TMOD
定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,TMOD寄存器的各位信
息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2个
定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能如下所述。
寄存器TMOD各位的功能描述
复位值:00H
地址:89H
TMOD
不可位寻址
7
6
5
C/T
GATE
M1
4
3
2
1
M0
GATE
C/T
M1
GATE
TMOD.7/
GATE
TMOD.3/
C/T
C
T
S
TMOD.2/
d
e
t
i
im
功能
TMOD.7控制定时器1,置1时只有在INT1脚为高及TR1控制位置1
时才可打开定时器/计数器1。
U
C
M
L
TMOD.3控制定时器0,置1时只有在INT0脚为高及TR0控制位置1
时才可打开定时器/计数器0。
TMOD.6/
M0
定时器0
定时器1
位 符号
0
TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器
(对内部系统时钟进行计数),置1用作计数器(对引脚T1/P3.5
外部脉冲进行计数)
C/T
TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器
(对内部系统时钟进行计数),置1用作计数器(对引脚T0/P3.4
的外部脉冲进行计数)
TMOD.5/TMOD.4 M1、M0
定时器定时器/计数器1模式选择
16位自动重装定时器,当溢出时将RL_TH1和RL_TL1存放的值自
动重装入TH1和TL1中。
16位不可重装载模式,TL1、TH1全用
8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
定时器/计数器1此时无效(停止计数)。
0
0
0
1
1
0
1
1
TMOD.1/TMOD.0 M1、M0
0
0
0
1
1
0
1
1
南通国芯微电子有限公司
定时器/计数器0模式选择
16位自动重装定时器,当溢出时将RL_TH0和RL_TL0存放的值自
动重装入TH0和TL0中。
16位不可重装载模式,TL0、TH0全用
8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0
不可屏蔽中断的16位自动重装定时器
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
501
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
3. 辅助寄存器AUXR
STC15系列����
单片机�
是 1T 的8051单片机,为兼容传统8051,定时器0�����������
、定时器1,�����
和定时器2
复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设
置新增加的特殊功能寄存器AUXR,将T0,T1���������
,T2������
设置为1T。普通111条机器指令�������
执行速度���
是固定
的,快4到24倍,无法改变。
AUXR格式如下:
AUXR : 辅助寄存器
SFR name Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
T2R
T2_C/T
T0x12: 定时器0速度控制位
0, 定时器0是传统8051速度,12分频;
1, 定时器0的速度是传统8051的12倍,不分频
B2
B1
B0
T2x12 EXTRAM S1ST2
d
e
t
i
im
T1x12: 定时器1速度控制位
0, 定时器1是传统8051速度,12分频;
1, 定时器1的速度是传统8051的12倍,不分频
如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口1是12T还是1T
U
C
M
L
UART_M0x6: 串口1模式0的通信速度设置位。
0, 串口1模式0的速度是传统8051单片机串口的速度,12分频;
1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频
T2R: 定时器2允许控制位
0, 不允许定时器2运行;
1, 允许定时器2运行
C
T
S
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
EXTRAM: 内部/外部RAM存取控制位
0, 允许使用逻辑上在片外、物理上在片内的扩展RAM;
1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM
S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位
0, 选择定时器1作为串口1(UART1)的波特率发生器;
1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为
独立定时器使用
502
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
4. T0, T1和T2的时钟输出寄存器和外部中断允许INT_CLKO (AUXR2)
T0CLKO/P3.5、T1CLKO/P3.4和T2CLKO/P3.0的时钟输出控制由INT_CLKO(AUXR2)寄
存器的T0CLKO位�
、 T1CLKO位和T2CLKO位控制�
。 T0CLKO的输出时钟频率由定时器0控
制,T1CLKO的输出时钟频率由定时器1控制,相应的定时器需要工作在定时器的��������
模式������
0(16��
位自
动重装载模式��������������������������������
)�������������������������������
或������������������������������
模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中
断�
。T2CLKO的输出时钟频率由定时器2控制,�����������������
同样���������������
不要允许相应的定时器中断,免得CPU反复
进中断������������������������������������������
。�����������������������������������������
定时器2的������������������������������������
工作模式固定为模式���������������������������
0(16�����������������������
位自动重装载模式���������������
),�������������
在此模式下定时器2可用作可
编程时钟输出。
INT_CLKO (AUXR2)格式如下:
INT_CLKO (AUXR2): 外部中断允许和时钟输出寄存器
SFR name Address bit
INT_CLKO
8FH name
AUXR2
B7
-
B6
B5
B4
B3
EX4 EX3 EX2
-
B2
B1
d
e
t
i
im
B0
T2CLKO T1CLKO T0CLKO
L
T0CLKO : 是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO
1,����������������������
将���������������������
P3.5�����������������
/T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2
若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时,
如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则:
U
C
M
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2
C
T
S
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2
若定时器/计数器T0工作在定时器模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (256-TH0) / 2
0,不允许P3.5/T1管脚被配置为定时器0的时钟输出
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
503
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO
1,�
将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出�
率/2
若定时器/计数器T1工作在定时器模式0(16位自动重装载模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2
T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2
若定时器/计数器T1工作在模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2
T1工作在12T模式����������������������
(AUXR.6/T1x12=0)������
时的输出频率 = (SYSclk)/12/(256-TH1)/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
d
e
t
i
im
输出����
时钟��
频率 = (T1_Pin_CLK) / (256-TH1) / 2
0,不允许P3.4/T0管脚被配置为定时器1的时钟输出
L
T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO
1:允许将P3.0脚���
配置为定时器2的时钟输出T2CLKO,�������
输出时钟频率=T2溢出率/2
如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则:
U
C
M
T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2
T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2
如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则:
C
T
S
输出����
时钟��
频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2
0: 不允许�
将P3.0脚���
配置为定时器2(T2)的时钟输出T2CLKO
EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只
能下降沿触发。
EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也
只能下降沿触发。
EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同
样只能下降沿触发。
504
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
5、定时器T0和T1的中断控制寄存器:IE和IP
IE : 中断允许寄存器 (可位寻址)
SFR name
IE
Address
A8H
bit
name
B7
EA
B6
ELVD
B5
EADC
B4
ES
B3
ET1
B2
EX1
B1
ET0
B0
EX0
EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
ET1 : 定时/计数器T1的溢出中断允许位,ET1=1,允许T1中断,ET1=0,禁止T1中断。
ET0 : T0的溢出中断允许位,ET0=1允许T0中断,ET0=0禁止T0中断。
IP : 中断优先级控制寄存器 (可位寻址)
SFR name Address bit
B7
IP
B8H
name PPCA
B6
PLVD
B5
PADC
B4
PS
d
e
t
i
m
B3
PT1
Li
PT1:
定时器1中断优先级控制位。
当PT1=0时,定时器1中断为最低优先级中断(优先级0)
当PT1=1时,定时器1中断为最高优先级中断(优先级1)
PT0:
定时器0中断优先级控制位。
当PT0=0时,定时器0中断为最低优先级中断(优先级0)
当PT0=1时,定时器0中断为最高优先级中断(优先级1)
C
T
S
U
C
M
B2
PX1
B1
PT0
B0
PX0
注意:当定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装载模式)时,不需要允许
EA/IE.7(总中断使能位)只需允许ET0/IE.1(定时器/计数器0中断允许位)就能打开定时
器/计数器0的中断,此模式下的定时器/计数器0中断与总中断使能位EA无关。一旦此
模式下的定时器/计数器0中断被打开后,该定时器/计数器0中断优先级就是最高的,
它不能被其它任何中断所打断(不管是比定时器/计数器0中断优先级低的中断还是比其
优先级高的中断,都不能打断此时的定时器/计数器0中断),而且该中断打开后既不受
EA/IE.7控制也不再受ET0控制了,清零EA或ET0都不能关闭此中断。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
505
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6、定时器T4和T3的控制寄存器: T4T3M(地址:0xD1)
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
name
T4R
B6
B5
B4
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B7 - T4R:定时器4运行控制位�
。
0�����������
:不允许定时器4运行;
1:允许定时器4运行。
B6 - T4_C/T: 控制定时器4用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数)
B5 - T4x12:定时器4速度控制位�
。
0����������������������������
:定时器4速度是8051单片机定时器的速度,即12分频;
1:定时器4速度是8051单片机定时器速度的12倍,即不分频。
B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO
1:允许将P0.4脚���
配置为定时器4的时钟输出T4CLKO,�������
输出时钟频率=T4溢出率/2
如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则:
U
C
M
d
e
t
i
im
L
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2
如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
C
T
S
0: 不允许�
将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO
。
B3 - T3R:定时器3运行控制位�
0�����������
:不允许定时器3运行;
1:允许定时器3运行。
B2 - T3_C/T: 控制定时器3用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数)
B1 - T3x12:定时器3速度控制位�
。
0����������������������������
:定时器3速度是8051单片机定时器的速度,即12分频;
1:定时器3速度是8051单片机定时器速度的12倍,即不分频。
B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO
1:允许将P0.6脚���
配置为定时器3的时钟输出T3CLKO,�������
输出时钟频率=T3溢出率/2
如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则:
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2
如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
0: 不允许�
将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO
506
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7、定时器T2、T3和T4的中断控制寄存器:IE2
IE2 : 中断允许寄存器 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
1,允许定时器4产生中断;
0,禁止定时器4产生中断。
ET3:定时器3的中断允许位。
1,允许定时器3产生中断;
0,禁止定时器3产生中断。
ES4 : 串行口4中断允许位。
1,允许串行口4中断;
0,禁止串行口4中断
ES3 : 串行口3中断允许位。
1,允许串行口3中断;
0,禁止串行口3中断。
ET2:定时器2的中断允许位。
1,允许定时器2产生中断;
0,禁止定时器2产生中断。
C
T
S
U
C
M
d
e
t
i
im
L
ESPI:SPI中断允许位。
1,允许SPI中断;
0,禁止SPI中断。
ES2 : 串行口2中断允许位。
1,允许串行口2中断;
0,禁止串行口2中断。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
507
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.2 定时器/计数器0工作模式
通过对寄存器TMOD中的M1(TMOD.1)、M0(TMOD.0)的设置,定时器/计数器0有4种不同的
工作模式
7.2.1 模式0(16位自动重装载模式)及测试程序,建议只学习此模式足矣
——STC创新设计,请不要抄袭
此模式下定时器���������������������������
/��������������������������
计数器�����������������������
0����������������������
作为可自动重装载的�������������
16�����������
位计数器,如下图所示。
AUXR.7/T0x12=0
÷12
TF0
Interrupt
SYSclk
÷1
AUXR.7/T0x12=1
Toggle
C/T=0
TL0
(8 bits)
C/T=1
T0 Pin
TR0
d
e
t
i
m
control
GATE
RL_TL0
(8 bits)
INT0
TH0
(8 bits)
Li
RL_TH0
(8 bits)
T0CLKO
P3.5
T0CLKO
定时器/计数器0的模式 0: 16位自动重装
U
C
M
STC创新设计,请不要抄袭,再抄袭就很无耻了
当�������
GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定
时器0,这样可实现脉宽测量。TR0为TCON 寄存器内的控制位,TCON寄存器各位的具体功能描
述��������������
见上节�����������
TCON寄存器����
的介绍�
。
C
T
S
当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定
时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。
STC15��������������������������������������
系列单片机的定时器有两种计数速率:一种是������������������
12T���������������
模式,每�����������
12���������
个时钟加�����
1����
,与传统
8051��������������������������������������������
单片机相同;另外一种是���������������������������������
1T�������������������������������
模式,每个时钟加�����������������������
1����������������������
,速度是传统����������������
8051������������
单片机的��������
12������
倍。����
T0��
的速
率由特殊功能寄存器����������������������������������������������
AUXR������������������������������������������
中的����������������������������������������
T0x12�����������������������������������
决定,如果������������������������������
T0x12=0�����������������������
,����������������������
T0��������������������
则工作在����������������
12T�������������
模式;如果��������
T0x12=1�
,
T0���������
则工作在�����
1T���
模式。
定时器0有��������
2�������
个隐藏的寄存器RL_TH0和RL_TL0。RL_TH0与�����������
TH0��������
共有同一个地址,RL_TL0
与TL0共有同一个地址。当TR0=0即定时器/计数器0被禁止工作时,对TL0写入的内容会同时写
入RL_TL0,对TH0写入的内容也会同时写入RL_TH0。当TR0=1即定时器/计数器0被允许工作时,
对TL0写入内容,实际上不是写入当前寄存器TL0中,而是写入隐藏的寄存器RL_TL0中;对TH0写
入内容,实际上也不是写入当前寄存器TH0中,而是写入隐藏的寄存器RL_TH0。这样可以巧妙
地实现16位重装载定时器。当读TH0和TL0的内容时,所读的内容就是TH0和TL0的内容,而不是
RL_TH0和RL_TL0的内容。
当定时器������
0�����
工作在模式0(TMOD[1:0]/[M1,M0]=00B)时,����������������
[TL0,TH0]�������
的溢出不仅置位TF0,而
且会自动将[RL_TL0,RL_TH0]的内容重新装入[TL0,TH0]。
508
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。
输出时钟频率 = T0 溢出率/2
如果C/T=0,定时器/计数器T0对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH0, RL_TL0])/2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2
7.2.1.1 定时器0的16位自动重装载模式的测试程序(C和汇编)
d
e
t
i
im
1. C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- -------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器0的16位自动重装载模式 -----------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*---- 在 Keil
/*-----------------------------------------------------------------------------------------------------*/
C
T
S
U
C
M
L
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
//----------------------------------------------#define FOSC 18432000L
#define T1MS (65536-FOSC/1000)
//#define T1MS (65536-FOSC/12/1000)
//1T模式,18.432MHz
//12T模式,18.432MHz
sfr
sbit
//Auxiliary register
AUXR =
P10
=
0x8e;
P1^0;
//-----------------------------------------------
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
509
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
P10
=
! P10;
}
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//将测试口取反
//----------------------------------------------/* main program */
void main()
{
AUXR |=
//
AUXR &=
TMOD
TL0
TH0
TR0
ET0
EA
while (1);
=
=
=
=
=
=
0x80;
0x7f;
0x00;
T1MS;
T1MS >> 8;
1;
1;
1;
//设置定时器为模式0(16位自动重装载)
//初始化计时值
C
T
S
d
e
t
i
im
//定时器0开始计时
//使能定时器0中断
U
C
M
}
2. 汇编程序:
//定时器0为1T模式
//定时器0为12T模式
L
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- -------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器0的16位自动重装载模式 -----------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR DATA 08EH
//辅助特殊功能寄存器
;----------------------------------------------T1MS EQU
//T1MS EQU
0B800H
0FA00H
//1T模式的1ms定时值(65536-18432000/1000)
//12T模式的1ms定时值(65536-18432000/1000/12)
;-----------------------------------------------
510
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0INT
官方网站:www.STCMCU.com
研发顾问QQ:800003751
//复位入口
//中断入口
STC — 全球最大的8051单片机设计公司
;----------------------------------------------
MAIN:
ORG 0100H
//
ORL AUXR, #80H
ANL AUXR, #7FH
MOV TMOD, #00H
MOV
MOV
SETB
SETB
SETB EA
SJMP $
MOV SP,
#3FH
TL0,
TH0,
TR0
ET0
#LOW T1MS
#HIGH T1MS
d
e
t
i
im
//设置定时器为模式0(16位自动重装载)
//初始化计时值
U
C
M
C
T
S
//定时器0为1T模式
//定时器0为12T模式
L
//使能定时器0中断
//程序终止
//----------------------------------------//中断服务程序
T0INT:
CPL
RETI
P1.0
//将测试口取反
;----------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
511
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.2.1.2 定时器0对系统时钟或外部引脚T0的时钟输入进行可编程分频输出的测试程序
——定时器0工作在16位自动重装载模式
下面是定时器0工作在16位重装模式时对内部系统时钟或外部引脚T0/P3.4的时钟输入
进行可编程时钟分频输出的程序举例(C和汇编):
1. C程序:
/*--------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/
/* --- 研发顾问QQ:800003751------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -----------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*---------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
C
T
S
typedef unsigned char BYTE;
typedef unsigned int WORD;
U
C
M
d
e
t
i
im
L
#define FOSC 18432000L
//----------------------------------------------sfr
AUXR
=
0x8e;
sfr
INT_CLKO
=
0x8f;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
sbit
//定时器0的时钟输出脚
T0CLKO
#define F38_4KHz
//#define F38_4KHz
=
P3^5;
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
//1T模式
//12T模式
//----------------------------------------------void main()
{
AUXR |=
//
AUXR &=
512
0x80;
~0x80;
南通国芯微电子有限公司
//定时器0为1T模式
//定时器0为12T模式
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
TMOD =
0x00;
//设置定时器为模式0(16位自动重装载)
TMOD &=
TMOD |=
~0x04;
0x04;
//C/T0=0, 对内部时钟进行时钟输出
//C/T0=1, 对T0引脚的外部时钟进行时钟输出
TL0
=
TH0
=
TR0
=
INT_CLKO
F38_4KHz;
F38_4KHz >> 8;
1;
=
0x01;
while (1);
//
//初始化计时值
//使能定时器0的时钟输出功能
//程序终止
}
d
e
t
i
im
2. 汇编程序:
/*--------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/
/* --- 研发顾问QQ:800003751------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -----------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*---------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
L
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
DATA 08EH
DATA 08FH
T0CLKO
BIT
F38_4KHz
//F38_4KHz
EQU
EQU
P3.5
0FF10H
0FFECH
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器0的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下,(65536-18432000/2/12/38400)
//----------------------------------------------
ORG 0000H
LJMP MAIN
南通国芯微电子有限公司
//复位入口
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
513
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#3FH
//
ORL AUXR, #80H
ANL AUXR, #7FH
MOV TMOD, #00H
//设置定时器为模式0(16位自动重装载)
ANL TMOD, #0FBH
ORL TMOD, #04H
//C/T0=0, 对内部时钟进行时钟输出
//C/T0=1, 对T0引脚的外部时钟进行时钟输出
//
MOV
MOV
SETB
MOV
TL0,
#LOW F38_4KHz
TH0,
#HIGH F38_4KHz
TR0
INT_CLKO,
#01H
SJMP $
;----------------------------------------------
514
END
C
T
S
南通国芯微电子有限公司
//定时器0为1T模式
//定时器0为12T模式
//初始化计时值
d
e
t
i
im
//使能定时器0的时钟输出功能
L
//程序终止
U
C
M
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.2.1.3 T0的16位自动重装模式(软硬结合)模拟10位或16位PWM输出的程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器软件模拟PWM举例--------------------------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
d
e
t
i
im
#include "reg51.h"
//6-bit PWM 周期数
//8-bit PWM 周期数
//10-bit PWM 周期数
//16-bit PWM 周期数
64
256
1024
65536
#define HIGHDUTY
#define LOWDUTY
64
//高电平周期数(占空比64/256=25%)
(PWM8BIT-HIGHDUTY) //低电平周期数
sfr
sfr
sbit
AUXR
INT_CLKO
T0CLKO
bit
flag;
C
T
S
=
=
=
L
//#define PWM6BIT
#define PWM8BIT
//#define PWM10BIT
//#define PWM16BIT
U
C
M
0x8e;
0x8f;
P3^5;
//定时器0中断服务程序
void tm0() interrupt 1
{
flag = !flag;
if (flag)
{
TL0 = (65536-HIGHDUTY);
TH0 = (65536-HIGHDUTY) >> 8;
}
else
{
TL0 = (65536-LOWDUTY);
TH0 = (65536-LOWDUTY) >> 8;
}
}
南通国芯微电子有限公司
//辅助寄存器
//时钟输出控制寄存器
//定时器0的时钟输出口
//反转PWM的输出标志
//准备高电平的重载值
//准备低电平的重载值
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
515
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
void main()
{
AUXR =
INT_CLKO
TMOD &=
TL0
=
TH0
=
T0CLKO =
flag
=
TR0
=
ET0
=
EA
=
while (1);
}
0x80;
=
0x01;
0xf0;
(65536-LOWDUTY);
(65536-LOWDUTY) >> 8;
1;
0;
1;
1;
1;
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//定时器0为1T模式
//使能定时器0的时钟输出功能
//设置定时器0为模式0(16位自动重装载)
//初始化定时器初值和重装值
//初始化时钟输出脚(软PWM口)
//初始化标志位
//定时器0开始计时
//使能定时器0中断
d
e
t
i
im
2. 汇编程序:
L
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器软件模拟PWM举例--------------------------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
U
C
M
C
T
S
//假定测试芯片的工作频率为18.432MHz
;PWM6BIT
PWM8BIT
;PWM10BIT
;PWM16BIT
EQU
EQU
EQU
EQU
64
256
1024
65536
HIGHDUTY
LOWDUTY
EQU
EQU
AUXR
INT_CLKO
T0CLKO
DATA 08EH
DATA 08FH
BIT P3.5
FLAG
BIT
64
(PWM8BIT-HIGHDUTY)
;6-bit PWM周期数
;8-bit PWM周期数
;10-bit PWM周期数
;16-bit PWM周期数
;高电平周期数(占空比64/256=25%)
;低电平周期数
;辅助寄存器
;时钟输出控制寄存器
;定时器0的时钟输出口
20H.0
;-----------------------------------------------
516
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ORG 0000H
LJMP MAIN
ORG
LJMP
000BH
TM0_ISR
;----------------------------------------------MAIN:
MOV AUXR, #80H
MOV INT_CLKO,
#01H
ANL TMOD, #0F0H
MOV TL0,
#LOW (65536-LOWDUTY)
MOV TH0,
#HIGH (65536-LOWDUTY)
SETB T0CLKO
CLR
FLAG
SETB TR0
SETB ET0
SETB EA
SJMP $
U
C
M
;----------------------------------------------;定时器0中断服务程序
TM0_ISR:
CPL
FLAG
JNB
FLAG, READYLOW
READYHIGH:
MOV TL0,
#LOW (65536-HIGHDUTY)
MOV TH0,
#HIGH (65536-HIGHDUTY)
JMP
TM0ISR_EXIT
READYLOW:
MOV TL0,
#LOW (65536-LOWDUTY)
MOV TH0,
#HIGH (65536-LOWDUTY)
TM0ISR_EXIT:
RETI
C
T
S
;定时器0为1T模式
;使能定时器0的时钟输出功能
;设置定时器0为模式0(16位自动重装载)
;初始化定时器初值和重装值
;初始化时钟输出脚(软PWM口)
;初始化标志位
;定时器0开始计时
;使能定时器0中断
d
e
t
i
im
L
;反转PWM的输出标志
;准备高电平的重载值
;准备低电平的重载值
;----------------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
517
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.2.1.4 T0的16位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编)
——利用T0的外部计数方式
;定时器0中断(下降沿中断)的测试程序,定时器/计数器0工作在计数模式中的16位自动重装载模式,定
时器/计数器0工作载外部计数模式。
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
C
T
S
//----------------------------------------------sfr
AUXR =
0x8e;
sbit
P10
=
P1^0;
U
C
M
//----------------------------------------------//外部中断服务程序
void t0int() interrupt 1
{
P10
=
!P10;
}
void main()
{
AUXR
TMOD
TH0
TL0
TR0
ET0
EA
d
e
t
i
im
L
//辅助寄存器
//中断入口
//将测试口取反
=
=
=
=
=
=
0x80;
//定时器0为1T模式
0x04; //设置定时器0工作在16位自动重装载模式,同时为外部记数模式
0xff;
0xff;
//设置定时器0初始值
1;
//定时器0开始工作
1;
//开定时器0中断
=
1;
while (1);
}
518
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR
DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
MAIN:
C
T
S
ORG 0100H
MOV SP,
SETB EA
SJMP $
//中断入口
#3FH
MOV AUXR, #80H
MOV TMOD, #04H
MOV A,
#0FFH
MOV TL0,
A
MOV TH0,
A
SETB TR0
SETB ET0
L
//复位入口
U
C
M
ORG 000BH
LJMP T0INT
//-----------------------------------------
d
e
t
i
im
//辅助寄存器
//定时器0为1T模式
//设置定时器0工作在16位自动重装载模式,
//同时为为外部记数模式
//设置定时器0初始值
//定时器0开始工作
//开定时器0中断
//----------------------------------------//外部中断服务程序
T0INT:
CPL P1.0
RETI
;----------------------------------------
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
519
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.2.2 模式1(16位不可重装载模式),不建议学习
此模式下定时器�������������������������
/������������������������
计数器���������������������
0��������������������
工作在�����������������
16���������������
位不可重装载模式,如下图所示。
÷12
AUXR.7/T0x12=0
SYSclk
÷1
AUXR.7/T0x12=1
C/T=0
C/T=1
T0 Pin
TR0
TL0
TH0
(8 Bits) (8 bits)
TF0
Interrupt
control
GATE
INT0
定时器/计数器0的模式 1: 16位不可重装载模式
d
e
t
i
im
此模式下,定时器/计数器0配置为16位不可重装载模式,由�����������������
TL0��������������
的�������������
8������������
位和����������
TH0�������
的������
8�����
位所构成。
TL0������������������������������������
的8位溢出向������������������������������
TH0���������������������������
进位,������������������������
TH0���������������������
计数溢出置位���������������
TCON�����������
中的溢出标志位����
TF0�
。
L
当�������
GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定
时器0,这样可实现脉宽测量。TR0为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述
见上节�����������
TCON寄存器����
的介绍�
。
U
C
M
当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定
时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。
C
T
S
STC15系列单片机的定时器有两种计数速率:一种是������������������
12T���������������
模式,每�����������
12���������
个时钟加�����
1����
,与传统
8051��������������������������������������������
单片机相同;另外一种是���������������������������������
1T�������������������������������
模式,每个时钟加�����������������������
1����������������������
,速度是传统����������������
8051������������
单片机的��������
12������
倍。����
T0��
的速
率由特殊功能寄存器����������������������������������������������
AUXR������������������������������������������
中的����������������������������������������
T0x12�����������������������������������
决定,如果������������������������������
T0x12=0�����������������������
,����������������������
T0��������������������
则工作在����������������
12T�������������
模式;如果��������
T0x12=1�
,
T0���������
则工作在�����
1T���
模式。
520
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.2.3 模式2(8位自动重装载模式),不建议学习
此模式下定时器��������������������������
/�������������������������
计数器����������������������
0���������������������
作为可自动重装载的������������
8�����������
位计数器,如下图所示。
AUXR.7/T0x12=0
÷12
TF0
Interrupt
SYSclk
÷1
AUXR.7/T0x12=1
Toggle
C/T=0
TL0
(8 Bits)
C/T=1
T0 Pin
TR0
T0CLKO
control
GATE
P3.5
T0CLKO
TH0
(8 Bits)
INT0
定时器/计数器0的模式 2: 8位自动重装
d
e
t
i
im
TL0���������������������������������������������
的溢出不仅置位��������������������������������������
TF0�����������������������������������
,而且将�������������������������������
TH0����������������������������
内容重新装入����������������������
TL0�������������������
,������������������
TH0���������������
内容由软件预置,重装时����
TH0�
内
容不变。
U
C
M
L
当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。
输出时钟频率 = T0 溢出率/2
如果C/T=0,定时器/计数器T0对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出����
时钟��
频率=(SYSclk) / (256-TH0)/2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(256-TH0)/2
C
T
S
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (256-TH0) / 2
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
521
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
;定时器0中断(下降沿中断)的测试程序,定时器/计数器0工作在计数模式中的8位自
动重装模式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
AUXR =
P10
=
C
T
S
0x8e;
P1^0;
U
C
M
//----------------------------------------------//外部中断服务程序
void t0int() interrupt 1
{
P10
=
!P10;
}
void main()
{
AUXR
TMOD
TH0 =
TR0
ET0
EA
while (1);
=
0x80;
=
0x06;
TL0 = 0xff;
=
1;
=
1;
=
d
e
t
i
im
L
//辅助寄存器
//中断入口
//将测试口取反
//定时器0为1T模式
//设置定时器0为外部记数模式
//设置定时器0初始值
//定时器0开始工作
//开定时器0中断
1;
}
522
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR
DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
L
//复位入口
ORG 000BH
LJMP T0INT
//-----------------------------------------
//中断入口
MAIN:
C
T
S
ORG 0100H
MOV SP,
MOV
MOV
MOV
MOV
MOV
SETB
SETB
AUXR,
TMOD,
A,
TL0,
TH0,
TR0
ET0
SETB EA
SJMP $
d
e
t
i
im
//辅助寄存器
U
C
M
#3FH
#80H
#06H
#0FFH
A
A
//定时器0为1T模式
//设置定时器0为外部记数模式
//设置定时器0初始值
//定时器0开始工作
//开定时器0中断
//----------------------------------------//外部中断服务程序
T0INT:
CPL P1.0
RETI
;----------------------------------------
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
523
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.2.4 模式3(不可屏蔽中断16位自动重装载,实时操作系统用节拍定时器)
对定时器/计数器1,在模式3时,定时器1停止计数,效果与将TR1设置为0相同。
对定时器/计数器0,其工作模式3与工作模式0是一样的(下图是定时器模式3的原理图,与
模式0是一样的)。唯一不同的是:当定时器/计数器0工作在模式3时,只需允许ET0/IE.1(定时
器/计数器0中断允许位)不需要允许EA/IE.7(总中断使能位)就能打开定时器/计数器0的中断,
此模式下的定时器/计数器0中断与总中断使能位EA无关;一旦工作在模式3下的定时器/计数器
0中断被打开(ET0=1),那么该中断是不可屏蔽的,该中断的优先级是最高的,即该中断不能被
任何中断所打断,而且该中断打开后既不受EA/IE.7控制也不再受ET0控制,当EA=0或ET0=0时
都不能屏蔽此中断。故将此模式称为不可屏蔽中断的16位自动重装载模式。
AUXR.7/T0x12=0
÷12
TF0
Interrupt
SYSclk
÷1
AUXR.7/T0x12=1
Toggle
C/T=0
TL0
(8 bits)
C/T=1
T0 Pin
d
e
t
i
im
TH0
(8 bits)
control
TR0
GATE
RL_TL0
(8 bits)
INT0
U
C
M
L
RL_TH0
(8 bits)
T0CLKO
P3.5
T0CLKO
定时器/计数器0的模式3: 不可屏蔽中断的16位自动重装载模式
定时器/计数器0工作在模式3(不可屏蔽中断的16位自动
重装载模式),实时操作系统用系统节拍定时器。
C
T
S
STC创新设计,请不要抄袭,再抄袭就很无耻了
那么当定时器/计数器0工作在模式3时,如何打开定时器/计数器0的中断呢?
下面的语句可以令定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装在模式)并
打开定时器/计数器0的中断(此时该中断是最高优先级,任何中断都不能屏蔽它)。
C语言设置:
TMOD =
0x11;
TR0
=
1;
//EA
=
1;
ET0
=
1;
//设置定时器为模式3(不可屏蔽中断的16位自动重装载)
//定时器0开始计时
//定时器0工作在模式3(不可屏蔽中断的16位自动重装载
//模式)时,不需要使能总中断允许位EA
//使能定时器0工作在模式3(不可屏蔽中断的16位自动重装
//载模式)时的中断
汇编语言设置:
MOV TMOD, #00H
//设置定时器为模式0(16位自动重装载)
SETB TR0
//定时器0开始计时
//SETB EA
//定时器0工作在模式3(不可屏蔽中断的16位自动重装载
//模式)时,不需要使能总中断允许位EA
SETB ET0
//使能定时器0工作在模式3(不可屏蔽中断的16位自动重装
//载模式)时的中断
注意:当定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装载模式)时,不需要允许EA/IE.7(总
中断使能位)只需允许ET0/IE.1(定时器/计数器0中断允许位)就能打开定时器/计数器0的中断,此
模式下的定时器/计数器0中断与总中断使能位EA无关。一旦此模式下的定时器/计数器0中断被打开
后,该定时器/计数器0中断优先级就是最高的,它不能被其它任何中断所打断(不管是比定时器/计
数器0中断优先级低的中断还是比其优先级高的中断,都不能打断此时的定时器/计数器0中断),
而且该中断打开后既不受EA/IE.7控制也不再受ET0控制了,清零EA或ET0都不能关闭此中断。
524
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.3 定时器/计数器1工作模式
通过对寄存器TMOD中的M1(TMOD.5)、M0(TMOD.4)的设置,定时器/计数器1有3种不同的
工作模式。
7.3.1 模式0(16位自动重装载模式)及测试程序,建议只学习此模式足矣
——STC创新设计,请不要抄袭
此模式下定时器���������������������������
/��������������������������
计数器�����������������������
1����������������������
作为可自动重装载的�������������
16�����������
位计数器,如下图所示。
AUXR.6/T1x12=0
÷12
TF1
Interrupt
SYSclk
÷1
AUXR.6/T1x12=1
Toggle
C/T=0
TL1
(8 bits)
C/T=1
T1 Pin
TR1
d
e
t
i
m
control
T1CLKO
P3.4
GATE
RL_TL1
(8 bits)
INT1
TH1
(8 bits)
U
C
M
Li
RL_TH1
(8 bits)
T1CLKO
定时器/计数器1的模式 0: 16位自动重装
STC创新设计,请不要抄袭,再抄袭就很无耻了
C
T
S
当�������
GATE=0(TMOD.7)时,如TR1=1,则定时器计数。GATE=1时,允许由外部输入INT1控制定
时器1,这样可实现脉宽测量。TR1为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述
见上节�����������
TCON寄存器����
的介绍�
。
当C/T=0时,多路开关连接到系统时钟的分频输出,T1对内部系统时钟计数,T1工作在定
时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.5/T1,即T1工作在计数方式。
STC15系列单片机的定时器有两种计数速率:一种是������������������
12T���������������
模式,每�����������
12���������
个时钟加�����
1����
,与传统
8051��������������������������������������������
单片机相同;另外一种是���������������������������������
1T�������������������������������
模式,每个时钟加�����������������������
1����������������������
,速度是传统����������������
8051������������
单片机的��������
12������
倍。����
T1��
的速
率由特殊功能寄存器����������������������������������������������
AUXR������������������������������������������
中的����������������������������������������
T1x12�����������������������������������
决定,如果������������������������������
T1x12=0�����������������������
,����������������������
T1��������������������
则工作在����������������
12T�������������
模式;如果��������
T1x12=1�
,
T1���������
则工作在�����
1T���
模式。
定时器1有��������
2�������
个隐藏的寄存器RL_TH1和RL_TL1。RL_TH1与�����������
TH1��������
共有同一个地址,RL_TL1
与TL1共有同一个地址。当TR1=0即定时器/计数器1被禁止工作时,对TL1写入的内容会同时写
入RL_TL1,对TH1写入的内容也会同时写入RL_TH1。当TR1=1即定时器/计数器1被允许工作时,
对TL1写入内容,实际上不是写入当前寄存器TL1中,而是写入隐藏的寄存器RL_TL1中;对TH1写
入内容,实际上也不是写入当前寄存器TH1中,而是写入隐藏的寄存器RL_TH1中。这样可以巧
妙地实现16位重装载定时器。当读TH1和TL1的内容时,所读的内容就是TH1和TL1的内容,而不
是RL_TH0和RL_TL1的内容。
当定时器������
1�����
工作在模式0(TMOD[5:4]/[M1,M0]=00B)时,����������������
[TL1,TH1]�������
的溢出不仅置位TF1,而
且会自动将[RL_TL1,RL_TH1]的内容重新装入[TL1,TH1]。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
525
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。
输出时钟频率 = T1 溢出率/2
如果C/T=0,定时器/计数器T1对内部系统时钟计数,则
T1工作在1T模式(AUXR.6/T1x12=1)时的输出����
时钟��
频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2
T1工作在12T模式(AUXR.6/T1x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH1, RL_TL1])/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2
7.3.1.1 定时器1的16位自动重装载模式的测试程序(C和汇编)
1. C程序:
d
e
t
i
im
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- --------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的16位自动重装载模式 -------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*------------------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
L
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
//----------------------------------------------#define FOSC 18432000L
#define T1MS (65536-FOSC/1000)
//#define T1MS (65536-FOSC/12/1000)
//1T模式,18.432MHz
//12T模式,18.432MHz
sfr
sbit
//Auxiliary register
AUXR =
P10
=
0x8e;
P1^0;
//-----------------------------------------------
526
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
/* Timer1 interrupt routine */
void tm1_isr() interrupt 3 using 1
{
P10
=
! P10;
}
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//将测试口取反
//----------------------------------------------/* main program */
void main()
{
AUXR |=
//
AUXR &=
TMOD
TL1
TH1
TR1
ET1
EA
while (1);
0x40;
0xdf;
=
=
=
=
=
=
0x00;
T1MS;
T1MS >> 8;
1;
1;
1;
//设置定时器为模式0(16位自动重装载)
//初始化计时值
C
T
S
d
e
t
i
im
//定时器1开始计时
//使能定时器1中断
U
C
M
}
2. 汇编程序:
//定时器1为1T模式
//定时器1为12T模式
L
/*------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- ---------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的16位自动重装载模式 -------------------------*/
/* --- 研发顾问QQ:800003751----------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*------------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR DATA
08EH
//辅助特殊功能寄存器
;----------------------------------------------T1MS EQU 0B800H
//T1MS EQU 0FA00H
南通国芯微电子有限公司
//1T模式的1ms定时值(65536-18432000/1000)
//12T模式的1ms定时值(65536-18432000/1000/12)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
527
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
;----------------------------------------------
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1INT
//复位入口
//中断入口
;----------------------------------------------
MAIN:
ORG 0100H
//
ORL AUXR, #40H
ANL AUXR, #0DFH
MOV SP,
#3FH
MOV TMOD, #00H
MOV
MOV
SETB
SETB
SJMP $
TL1,
TH1,
TR1
ET1
#LOW T1MS
#HIGH T1MS
SETB EA
C
T
S
//定时器1为1T模式
//定时器1为12T模式
d
e
t
i
im
//设置定时器为模式0(16位自动重装载)
//初始化计时值
U
C
M
L
//使能定时器1中断
//程序终止
//----------------------------------------//中断服务程序
T1INT:
CPL
RETI
P1.0
//将测试口取反
;----------------------------------------
528
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.3.1.2 定时器1对系统时钟或外部引脚T1的时钟输入进行可编程分频输出的测试程序
——定时器1工作在16位自动重装载模式
下面是定时器1工作在16位重装模式时对内部系统时钟或外部引脚T1/P3.5的时钟输入
进行可编程时钟分频输出的程序举例(C和汇编):
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*------------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
C
T
S
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
U
C
M
d
e
t
i
im
L
#define FOSC 18432000L
//----------------------------------------------sfr
AUXR
=
0x8e;
sfr
INT_CLKO
=
0x8f;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
sbit
//定时器1的时钟输出脚
T1CLKO
#define F38_4KHz
//#define F38_4KHz
=
P3^4;
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
//1T模式
//12T模式
//---------------------------------------------void main()
{
AUXR |=
//
AUXR &=
TMOD =
南通国芯微电子有限公司
0x40;
~0x40;
0x00;
总机:0513-5501 2928 / 2929 / 2966
//定时器1为1T模式
//定时器1为12T模式
//设置定时器为模式1(16位自动重装载)
传真:0513-5501 2969 / 2956 / 2947
529
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
//
TMOD &=
TMOD |=
~0x40;
0x40;
//C/T1=0, 对内部时钟进行时钟输出
//C/T1=1, 对T1引脚的外部时钟进行时钟输出
TL1
=
TH1
=
TR1
=
INT_CLKO
F38_4KHz;
F38_4KHz >> 8;
1;
=
0x02;
//初始化计时值
while (1);
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//使能定时器1的时钟输出功能
//程序终止
}
d
e
t
i
im
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. -----------------------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*------------------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
L
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
DATA 08EH
DATA 08FH
T1CLKO
BIT
F38_4KHz
//F38_4KHz
EQU
EQU
P3.4
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
0FF10H
0FFECH
ORG 0000H
LJMP MAIN
//定时器1的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下, (65536-18432000/2/12/38400)
//复位入口
//-----------------------------------------------
530
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
MAIN:
ORG 0100H
//
ORL AUXR, #40H
ANL AUXR, #0BFH
//
MOV SP,
ANL TMOD, #0BFH
ORL TMOD, #40H
MOV
MOV
SETB
MOV
SJMP $
TL1,
#LOW F38_4KHz
TH1,
#HIGH F38_4KHz
TR1
INT_CLKO,
#02H
;----------------------------------------------
END
南通国芯微电子有限公司
STC — 全球最大的8051单片机设计公司
#3FH
MOV TMOD, #00H
研发顾问QQ:800003751
C
T
S
//定时器1为1T模式
//定时器1为12T模式
//设置定时器为模式0(16位自动重装载)
//C/T1=0, 对内部时钟进行时钟输出
//C/T1=1, 对T1引脚的外部时钟进行时钟输出
//初始化计时值
d
e
t
i
im
//使能定时器1的时钟输出功能
L
//程序终止
U
C
M
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
531
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.3.1.3 定时器1模式0(16位自动重载模式)作串口1波特率发生器的测试程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
#define FOSC 18432000L
#define BAUD 115200
#define
#define
#define
#define
#define
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
U
C
M
BYTE;
WORD;
0
1
2
3
4
L
//系统频率
//串口波特率
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
//定义校验位
sfr
AUXR =
0x8e;
//辅助寄存器
sbit
P22
P2^2;
bit
busy;
=
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON =
0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON =
0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON =
0xd2;
//9位可变波特率,校验位初始为0
#endif
532
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
=
=
=
=
=
=
=
官方网站:www.STCMCU.com
研发顾问QQ:800003751
AUXR
TMOD
TL1
TH1
TR1
ES
EA
0x40;
0x00;
(65536 - (FOSC/32/BAUD));
(65536 - (FOSC/32/BAUD))>>8;
1;
1;
1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
STC — 全球最大的8051单片机设计公司
//定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值
//定时器1开始启动
//使能串口中断
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
P22 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
C
T
S
U
C
M
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
南通国芯微电子有限公司
d
e
t
i
im
总机:0513-5501 2928 / 2929 / 2966
L
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
//设置校验位为1
传真:0513-5501 2969 / 2956 / 2947
533
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
#endif
}
busy = 1;
SBUF = ACC;
}
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
2. 汇编程序:
//设置校验位为0
//写数据到UART数据寄存器
//检测字符串结束标志
//发送当前字符
U
C
M
d
e
t
i
im
L
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
C
T
S
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY 0
ODD_PARITY 1
EVEN_PARITY 2
MARK_PARITY 3
SPACE_PARITY 4
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
//定义校验位
//----------------------------------------AUXR EQU
BUSY BIT
08EH
20H.0
//辅助寄存器
//忙标志位
//-----------------------------------------
534
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV AUXR,
MOV TMOD,
MOV TL1,
MOV TH1,
SETB TR1
SETB ES
SETB EA
#40H
#00H
#0FBH
#0FFH
C
T
S
MOV DPTR, #TESTSTR
LCALL SENDSTRING
U
C
M
d
e
t
i
im
L
//定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值(65536-18432000/32/115200)
//定时器1开始运行
//使能串口中断
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
MOV P2.2,
南通国芯微电子有限公司
CHECKTI
SBUF
RB8
C
//检测RI位
//清除RI位
//P0显示串口数据
//P2.2显示校验位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
535
STC15F2K60S2系列单片机指南
CHECKTI:
JNB
CLR
CLR
ISR_EXIT:
POP
POP
RETI
TI,
TI
BUSY
技术支持网站:www.GXWMCU.com
ISR_EXIT
研发顾问Tel:13922805190
//检测TI位
//清除TI位
//清忙标志
PSW
ACC
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
C
T
S
南通国芯微电子有限公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
d
e
t
i
im
//设置校验位为0
L
//设置校验位为1
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
536
临时技术支持Tel:13922829991
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.3.1.4 T1的16位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编)
——利用T1的外部计数方式
;定时器1中断(下降沿中断)的测试程序,定时器/计数器1工作在计数模式中的16位自动重装载模式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//-----------------------------------------------
C
T
S
sfr AUXR = 0x8e;
sbit P10 = P1^0;
//----------------------------------------------//外部中断服务程序
void t1int() interrupt 3
{
P10
=
!P10;
}
void main()
{
AUXR
TMOD
TH1
TR1
ET1
EA
while (1);
=
0x40;
=
0x40;
= TL1 = 0xff;
=
1;
=
1;
=
U
C
M
d
e
t
i
im
L
//辅助寄存器
//中断入口
//将测试口取反
//定时器1为1T模式
//设置定时器1为外部记数模式,工作在16位自动重装载模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
1;
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
537
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1INT
//----------------------------------------
MAIN:
C
T
S
ORG 0100H
MOV SP,
#3FH
MOV
MOV
MOV
MOV
MOV
SETB
SETB
#40H
#40H
#0FFH
A
A
SETB EA
SJMP $
AUXR,
TMOD,
A,
TL1,
TH1,
TR1
ET1
d
e
t
i
im
//辅助寄存器
//复位入口
U
C
M
//中断入口
L
//定时器1为1T模式
//设置定时器1为外部记数模式,工作在16位重装载模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
//----------------------------------------//外部中断服务程序
T1INT:
CPL P1.0
RETI
;----------------------------------------
538
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.3.2 模式1(16位不可重装载模式),不建议学习
此模式下定时器��������������������
/�������������������
计数器����������������
1���������������
作为�������������
16�����������
位定时器,如下图所示。
÷12
AUXR.6/T1x12=0
SYSclk
÷1
AUXR.6/T1x12=1
C/T=0
TL1
TH1
(8 Bits) (8 bits)
C/T=1
T1 Pin
TR1
TF1
Interrupt
control
GATE
INT1
定时器/计数器1的模式 1: 16位不可重装载
d
e
t
i
im
此模式下,定时器1配置为����������������������������������
16��������������������������������
位不可重装在模式,由����������������������
TL1�������������������
的������������������
8�����������������
位和���������������
TH1������������
的�����������
8����������
位所构成。�����
TL1��
的8
位溢出向������������������������������
TH1���������������������������
进位,������������������������
TH1���������������������
计数溢出置位���������������
TCON�����������
中的溢出标志位����
TF1�
。
L
当�������
GATE=0(TMOD.7)时,如TR1=1,则定时器计数。GATE=1时,允许由外部输入INT1控制定
时器1,这样可实现脉宽测量。TR1为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述
见上节�����������
TCON寄存器����
的介绍�
。
U
C
M
当C/T=0时,多路开关连接到系统时钟的分频输出,T1对内部系统时钟计数,T1工作在定
时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.5/T1,即T1工作在计数方式。
C
T
S
STC15系列单片机的定时器有两种计数速率:一种是������������������
12T���������������
模式,每�����������
12���������
个时钟加�����
1����
,与传统
8051��������������������������������������������
单片机相同;另外一种是���������������������������������
1T�������������������������������
模式,每个时钟加�����������������������
1����������������������
,速度是传统����������������
8051������������
单片机的��������
12������
倍。����
T1��
的速
率由特殊功能寄存器����������������������������������������������
AUXR������������������������������������������
中的����������������������������������������
T1x12�����������������������������������
决定,如果������������������������������
T1x12=0�����������������������
,����������������������
T1��������������������
则工作在����������������
12T�������������
模式;如果��������
T1x12=1�
,
T1���������
则工作在�����
1T���
模式。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
539
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.3.3 模式2(8位自动重装载模式),不建议学习
此模式下定时器��������������������������
/�������������������������
计数器����������������������
1���������������������
作为可自动重装载的������������
8�����������
位计数器,如下图所示。
AUXR.6/T1x12=0
÷12
Interrupt
TF1
SYSclk
÷1
Toggle
AUXR.6/T1x12=1
C/T=0
TL1
(8 Bits)
C/T=1
T1 Pin
TR1
T1CLKO
control
GATE
P3.4
T1CLKO
TH1
(8 Bits)
INT1
定时器/计数器1的模式 2: 8位自动重装载
d
e
t
i
im
TL1���������������������������������������������
的溢出不仅置位��������������������������������������
TF1�����������������������������������
,而且将�������������������������������
TH1����������������������������
内容重新装入����������������������
TL1�������������������
,������������������
TH1���������������
内容由软件预置,重装时����
TH1�
内
容不变。
L
当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。
输出时钟频率
������ = T1 溢出率/2
如果C/T=0,定时器/计数器T1对内部系统时钟计数,则
T1工作在1T模式(AUXR.6/T1x12=1)时的输出����
时钟��
频率=(SYSclk) / (256-TH1)/2
T1工作在12T模式(AUXR.6/T1x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(256-TH1)/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (256-TH1) / 2
C
T
S
540
南通国芯微电子有限公司
U
C
M
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.3.3.1 定时器1模式2(8位自动重载模式)作串口1波特率发生器的测试程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序--------------- */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序--------------- */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz#include "reg51.h"
d
e
t
i
im
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
#define BAUD 115200
#define
#define
#define
#define
#define
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
U
C
M
//系统频率
//串口波特率
L
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY //定义校验位
sfr
AUXR =
0x8e;
sbit
P22
P2^2;
bit
busy;
=
//辅助寄存器
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda;
//9位可变波特率,校验位初始为1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
541
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
#elif (PARITYBIT == SPACE_PARITY)
SCON =
0xd2;
#endif
=
=
=
=
=
=
=
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//9位可变波特率,校验位初始为0
AUXR
TMOD
TL1
TH1
TR1
ES
EA
0x40;
//定时器1为1T模式
0x20;
//定时器1为模式2(8位自动重载)
(256 - (FOSC/32/BAUD)); //设置波特率重装值
(256 - (FOSC/32/BAUD));
1;
//定时器1开始工作
1;
//使能串口中断
1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI
=
P0
=
P22
=
}
if (TI)
{
TI
=
busy
=
}
}
C
T
S
U
C
M
0;
SBUF;
RB8;
0;
0;
南通国芯微电子有限公司
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
#endif
}
542
d
e
t
i
im
L
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
#endif
}
busy = 1;
SBUF = ACC;
}
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
2. 汇编程序:
C
T
S
//设置校验位为1
//设置校验位为0
//写数据到UART数据寄存器
d
e
t
i
im
//检测字符串结束标志
L
//发送当前字符
U
C
M
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序--------------- */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序--------------- */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
#define PARITYBIT EVEN_PARITY
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
//定义校验位
//----------------------------------------南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
543
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
AUXR EQU 08EH
BUSY BIT
20H.0
//辅助寄存器
//忙标志位
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
d
e
t
i
im
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV AUXR,
MOV TMOD,
MOV TL1,
MOV TH1,
SETB TR1
SETB ES
SETB EA
#40H
#20H
#0FBH
#0FBH
C
T
S
U
C
M
L
//定时器1为1T模式
//定时器1为模式2(8位自动重载)
//设置波特率重装值(256-18432000/32/115200)
//定时器1开始运行
//使能串口中断
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
544
CHECKTI
SBUF
RB8
南通国芯微电子有限公司
//检测RI位
//清除RI位
//P0显示串口数据
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
MOV
CHECKTI:
JNB
CLR
CLR
ISR_EXIT:
POP
POP
RETI
官方网站:www.STCMCU.com
P2.2,
C
TI,
TI
BUSY
ISR_EXIT
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//P2.2显示校验位
//检测TI位
//清除TI位
//清忙标志
PSW
ACC
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
C
T
S
d
e
t
i
im
//设置校验位为0
L
//设置校验位为1
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
南通国芯微电子有限公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
545
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.3.3.2 T1的8位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编)
;定时器1中断(下降沿中断)的测试程序,定时器/计数器1工作在计数模式中的8位自动重装载模式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sbit
AUXR =
P10
=
C
T
S
0x8e;
P1^0;
U
C
M
//----------------------------------------------//外部中断服务程序
void t1int() interrupt 3
{
P10
=
!P10;
}
void main()
{
AUXR
TMOD
TH1 =
TR1
ET1
EA
while (1);
=
=
TL1 =
=
=
0x40;
0x60;
0xff;
1;
1;
=
1;
L
//辅助寄存器
//中断入口
//将测试口取反
//定时器1为1T模式
//设置定时器1为外部记数模式,工作在8位自动重装载模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
}
546
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR DATA 08EH
//----------------------------------------
ORG 0000H
LJMP MAIN
//复位入口
U
C
M
ORG 001BH
LJMP T1INT
//----------------------------------------
MAIN:
//中断入口
ORG 0100H
MOV SP,
MOV
MOV
MOV
MOV
MOV
SETB
SETB
SETB EA
SJMP $
C
T
S
AUXR,
TMOD,
A,
TL1,
TH1,
TR1
ET1
d
e
t
i
im
//辅助寄存器
L
#3FH
#40H
#60H
#0FFH
A
A
//定时器1为1T模式
//设置定时器1为外部记数模式
//设置定时器1初始值
//定时器1开始工作
//开定时器1中断
//----------------------------------------//外部中断服务程序
T1INT:
CPL P1.0
RETI
;----------------------------------------
//将测试口取反
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
547
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.4 古老的Intel 8051单片机定时器0/1应用举例
【例1】 定时/计数器应用编程,设某应用系统,选择定时/计数器1定时模式,定时时间
Tc = 10ms,主频频率为12MHz,每10ms向主机请求处理。选定工作方式1。计算得计数初值:
低8位初值为F0H,高8位初值为D8H。
(1)初始化程序
…
所谓初始化,一般在主程序中根据应用要求对定时/计数器进行功能选择及参数设定等预
置程序,本例初始化程序如下:
START:
;����
主程序段
MOV SP,
#60H ;设置堆栈区域
MOV
TMOD, #10H ;选择T1、定时模式,工作方式1
MOV
TH1, #0D8H ;设置高字节计数初值
MOV
TL1, #0F0H ;设置低字节计数初值
L
}
U
SETB
EA ;
SETB
ET1 ;
…
C
T
S
开中断
;
�其他初始化程序
TR1 ;启动T1开始计时
…
SETB
MC
d
e
t
i
im
;�����
继续主程序
(2)中断服务程序
INTT1: PUSH
A ;
}
PUSH DPL ; 现场保护
…
PUSH DPH ;
MOV
TL1,
#0F0H ;
MOV
TH1,
#0D8H ;
…
}
重新置初值
POP
;中断处理主体程序
DPH ;
POP
DPL ;
POP
A ;
548
}
现场恢复
RETI ;返回
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
这里展示了中断服务子程序的基本格式。STC15系列单片机的中断属于矢量中断,每一个
矢量中断源只留有8个字节单元,一般是不够用的,常需用转移指令转到真正的中断服务子程
序区去执行。
【例2】 利用定时/计数器0或定时/计数器1的Tx端口改造成外部中断源输入端口的应用设计。
在某些应用系统中常会出现原有的两个外部中断源INT0和INT1不够用,而定时/计数器有
多余,则可将Tx用于增加的外部中断源。现选择定时/计数器1为对外部事件计数模式工作方式
2(自动再装入),设置计数初值为FFH,则T1端口输入一个负跳变脉冲,计数器即回0溢出,
置位对应的中断请求标志位TF1为1,向主机请求中断处理,从而达到了增加一个外部中断源的
目的。应用定时/计数器1(T1)的中断矢量转入中断服务程序处理。其程序示例如下:
(1)主程序段:
ORG
0000H
AJMP
MAIN ;转主程序
ORG
001BH
ORG
U
C
M
L
;转T1中断服务程序
…
LJMP INTER
d
e
t
i
im
C
T
S
0100 ;主程序入口
…
MAIN: …
MOV SP,
MOV
TMOD, #60H ;设置定时/计数器1,计数方式2
MOV
TL1, #0FFH ;设置计数常数
MOV
TH1, #0FFH
#60H ;设置堆栈区
EA ;开中断
SETB
ET1 ;开定时/计数器1中断
SETB
TR1 ;启动定时/计数器1计数
…
SETB
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
549
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
(2)中断服务程序(具体处理程序略)
ORG
1000H
INTER: PUSH
A ;
PUSH
DPL ;
PUSH
DPH ;
… … …
}
现场入栈保护
;
中断处理主体程序
��
;�
POP
DPH ;
}
}ited
POP
DPL ;
POP
A ;
现场出栈复原
Lim
RETI ;返回
这是中断服务程序的基本格式。
U
C
M
【例5】 某应用系统需通过P1.0和P1.1分别输出周期为200μ s和400μ s的方波。为此,系统
C
T
S
选用定时器/计数器0(T0),定时方式3,主频为6M H z,T P=2μ s,经计算得定时常数为9C H和
38H。
本例程序段编制如下:
(1)初始化程序段
…
PLT0: MOV
TMOD,#03H ;设置T0定时方式3
MOV
TL0,#9CH ;设置TL0初值
MOV
TH0,#38H ;设置TH0初值
EA ;
SETB
ET0 ;
SETB
ET1 ;
SETB
TR0 ;启动
SETB
TR1 ;启动
550
…
SETB
南通国芯微电子有限公司
}
开中断
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
(2)中断服务程序段
1)
INT0P:
STC — 全球最大的8051单片机设计公司
… …
研发顾问QQ:800003751
MOV
TL0, #9CH ;重新设置初值
CPL P1.0 ;对P1.0输出信号取反
RETI ;返回
…
INT1P
… …
2)
MOV
CPL P1.1 ;对P1.1输出信号取反
RETI ;返回
…
TH0, #38H
d
e
t
i
im
C
T
S
U
C
M
;重新设置初值
L
在实际应用中应注意的问题如下。
(1)定时/计数器的实时性
定时/计数器启动计数后,当计满回0溢出向主机请求中断处理,由内部硬件自动进行。但
从回0溢出请求中断到主机响应中断并作出处理存在时间延迟,且这种延时随中断请求时的现
场环境的不同而不同,一般需延时3个机器周期以上,这就给实时处理带来误差。大多数应用
场合可忽略不计,但对某些要求实时性苛刻的场合,应采用补偿措施。
这种由中断响应引起的时间延时,对定时/计数器工作于方式0或1而言有两种含义:一是
由于中断响应延时而引起的实时处理的误差;二是如需多次且连续不间断地定时/计数,由于
中断响应延时,则在中断服务程序中再置计数初值时已延误了若干个计数值而引起误差,特别
是用于定时就更明显。
例如选用定时方式1设置系统时钟,由于上述原因就会产生实时误差。这种场合应采用动
态补偿办法以减少系统始终误差。所谓动态补偿,即在中断服务程序中对THx、TLx重新置计数
初值时,应将THx、TLx从回0溢出又重新从0开始继续计数的值读出,并补偿到原计数初值中去
进行重新设置。可考虑如下补偿方法:
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
551
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
…
CLR
EA ;禁止中断
MOV
A,
TLx ;读TLx中已计数值
ADD
A,
#LOW ;LOW为原低字节计数初值
MOV
TLx, A ;设置低字节计数初值
MOV
A,
#HIGH ;原高字节计数初值送A
ADDC
A,
THx ;高字节计数初值补偿
MOV
THx, A ;置高字节计数初值
EA ;开中断
d
e
t
i
im
…
SETB
(2)动态读取运行中的计数值
L
在动态读取运行中的定时/计数器的计数值时,如果不加注意,就可能出错。这是因为不
可能在同一时刻同时读取THx和TLx中的计数值。比如,先读TLx后读THx,因为定时/计数器处
于运行状态,在读TLx时尚未产生向THx进位,而在读THx前已产生进位,这时读得的THx就不对
了;同样,先读THx后读TLx也可能出错。
C
T
S
U
C
M
一种可避免读错的方法是:先读THx,后读TLx,将两次读得的THx进行比较;若两次读得
的值相等,则可确定读的值是正确的,否则重复上述过程,重复读得的值一般不会再错。此法
的软件编程如下:
RDTM:
MOV
A,
THx ;读取THx存A中
MOV R0,
TLx ;读取TLx存R0中
CJNE A,
THx,RDTM ;比较两次THx值,若相等,则读得的
;值正确,程序往下执行,否则重读
MOV
R1,
A ;将THx存于R1中
…
552
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
7.5 定时器/计数器2及其应用(STC创新设计,请不要抄袭)
T2的工作模式固定为16位自动重装载模式����������������������
,���������������������
T2可以当定时器/������������
计数器���������
用,也可以当���
可编程
时钟输出�����������
和串口的波特率发生器�
。
下面首先介绍与定时器/计数器2相关的寄存器:
7.5.1 定时器/计数器2的相关特殊功能寄存器
与定时器/计数器2有关的特殊功能寄存器:
符号
T2H
T2L
AUXR
INT_CLKO
AUXR2
IE2
描述
地址
定时器2高8位
寄存器
定时器2低8位
寄存器
辅助寄存器
外部中断允许和
时钟输出寄存器
Interrupt Enable
register
位地址及其符号
MSB
LSB
D6H
8EH
8FH
AFH
C
T
S
Li
EX4 EX3 EX2
-
ET4 ET3
U
C
M
-
ES4
0000 0000B
T2x12 EXTRAM S1ST2
0000 0001B
T2CLKO T1CLKO T0CLKO
x000 x000B
T0x12 T1x12 UART_M0x6 T2R T2_C/T
-
0000 0000B
d
e
t
i
m
D7H
复位值
ES3
ET2
ESPI
x000 0000B
ES2
1. 定时器2的控制寄存器:辅助寄存器AUXR
STC15系列����
单片机�
是 1T 的8051单片机,为兼容传统8051,定时器0�����������
、定时器1,�����
和定时器2
复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设
置新增加的特殊功能寄存器AUXR,将T0,T1���������
,T2������
设置为1T。普通111条机器指令�������
执行速度���
是固定
的,快3到24倍,无法改变。
AUXR格式如下:
AUXR : 辅助寄存器
SFR name Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
T2R
T2_C/T
B2
B1
B0
T2x12 EXTRAM S1ST2
T2R: 定时器2允许控制位
0, 不允许定时器2运行;
1, 允许定时器2运行
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
553
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
T0x12: 定时器0速度控制位
0, 定时器0是传统8051速度,12分频;
1, 定时器0的速度是传统8051的12倍,不分频
T1x12: 定时器1速度控制位
0, 定时器1是传统8051速度,12分频;
1, 定时器1的速度是传统8051的12倍,不分频
如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口是12T还是1T
UART_M0x6: 串口模式0的通信速度设置位。
0, 串口1模式0的速度是传统8051单片机串口的速度,12分频;
1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频
EXTRAM: 内部/外部RAM存取控制位
0, 允许使用逻辑上在片外、物理上在片内的扩展RAM;
1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM
d
e
t
i
im
S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位
0, 选择定时器1作为串口1(UART1)的波特率发生器;
1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为
独立定时器使用
L
U
C
M
2. T2的时钟输出允许控制位T2CLKO
C
T
S
T2CLKO/P3.0的时钟输出控制由INT_CLKO(AUXR2)寄存器��
中�
的 T2CLKO位控制�
。
T2CLKO的输出时钟频率由定时器2控制,不要允许相应的定时器中断,免得CPU反复进中断�
。
定时器2的����������������������������������������
工作模式固定为模式�������������������������������
0(16���������������������������
位自动重装载模式�������������������
),�����������������
在此模式下定时器2可用作时钟输出。
INT_CLKO (AUXR2)格式如下:
INT_CLKO (AUXR2): 外部中断允许和时钟输出寄存器
SFR name Address bit
INT_CLKO
8FH name
AUXR2
B7
B6
B5
B4
B3
-
EX4
EX3
EX2
-
B2
B1
B0
T2CLKO T1CLKO T0CLKO
T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO
1:允许将P3.0脚���
配置为定时器2的时钟输出T2CLKO,�������
输出时钟频率=T2溢出率/2
如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则:
T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2
T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2
如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则:
输出����
时钟��
频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2
0: 不允许�
将P3.0脚���
配置为定时器2(T2)的时钟输出T2CLKO
554
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
T0CLKO : 是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO
1,����������������������
将���������������������
P3.5�����������������
/T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2
若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时,
如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2
若定时器/计数器T0工作在定时器模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (256-TH0) / 2
d
e
t
i
im
0,不允许P3.5/T1管脚被配置为定时器0的时钟输出
L
T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO
1,�
将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出�
率/2
若定时器/计数器T1工作在定时器模式0(16位自动重装载模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
U
C
M
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2
T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2
C
T
S
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2
若定时器/计数器T1工作在模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2
T1工作在12T模式����������������������
(AUXR.6/T1x12=0)������
时的输出频率 = (SYSclk)/12/(256-TH1)/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (256-TH1) / 2
0,不允许P3.4/T0管脚被配置为定时器1的时钟输出
EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只
能下降沿触发。
EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也
只能下降沿触发。
EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同
样只能下降沿触发。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
555
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
3. T2的中断允许控制位ET2
IE2 : 中断允许寄存器 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
1,允许定时器4产生中断;
0,禁止定时器4产生中断。
ET3:定时器3的中断允许位。
1,允许定时器3产生中断;
0,禁止定时器3产生中断。
ES4 : 串行口4中断允许位。
1,允许串行口4中断;
0,禁止串行口4中断
ES3 : 串行口3中断允许位。
1,允许串行口3中断;
0,禁止串行口3中断。
ET2:定时器2的中断允许位。
1,允许定时器2产生中断;
0,禁止定时器2产生中断。
C
T
S
U
C
M
d
e
t
i
im
L
ESPI:SPI中断允许位。
1,允许SPI中断;
0,禁止SPI中断。
ES2 : 串行口2中断允许位。
1,允许串行口2中断;
0,禁止串行口2中断。
556
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.5.2 定时器/计数器2作定时器及测试程序(C和汇编)
定时器/������������
计数器���������
2的原理框图如下:
AUXR.2/T2x12=0
÷12
T2 Interrupt
SYSclk
÷1
Toggle
AUXR.2/T2x12=1
T2_C/T=0
T2L
(8 bits)
T2_C/T=1
T2 Pin / P3.1
T2H
(8 bits)
T2CLKO
control
P3.0
T2R
RL_TL2
(8 bits)
RL_TH2
(8 bits)
T2CLKO
定时器/计数器2的工作模式: 16位自动重装
d
e
t
i
im
STC创新设计,请不要抄袭,再抄袭就很无耻了
T2R/AUXR.4为AUXR寄存器内的控制位,AUXR寄存器各位的具体功能描述����������
见上节�������
AUXR寄存器
的介绍�
。
L
当T2_C/T=0时,多路开关连接到系统时钟输出,T2对内部系统时钟计数,T2工作在定时方
式。当T2_C/T=1时,多路开关连接到外部脉冲输入P3.1/T2,即T2工作在计数方式。
U
C
M
STC15���������������������������������������
系列单片机的定时器2有两种计数速率:一种是������������������
12T���������������
模式,每�����������
12���������
个时钟加�����
1����
,与传统
8051��������������������������������������������
单片机相同;另外一种是���������������������������������
1T�������������������������������
模式,每个时钟加�����������������������
1����������������������
,速度是传统����������������
8051������������
单片机的��������
12������
倍。����
T2��
的速
率由特殊功能寄存器����������������������������������������������
AUXR������������������������������������������
中的����������������������������������������
T2x12�����������������������������������
决定,如果������������������������������
T2x12=0�����������������������
,����������������������
T2��������������������
则工作在����������������
12T�������������
模式;如果��������
T2x12=1�
,
T2���������
则工作在�����
1T���
模式。
C
T
S
定时器2有��������
2�������
个隐藏的寄存器RL_TH2和RL_TL2。RL_TH2与�����������
T2H��������
共有同一个地址,RL_TL2
与T2L共有同一个地址。当T2R=0即定时器/计数器2被禁止工作时,对T2L写入的内容会同时写
入RL_TL2,对T2H写入的内容也会同时写入RL_TH2。当T2R=1即定时器/计数器2被允许工作时,
对T2L写入内容,实际上不是写入当前寄存器T2L中,而是写入隐藏的寄存器RL_TL2中;对T2H写
入内容,实际上也不是写入当前寄存器T2H中,而是写入隐藏的寄存器RL_TH2。当读T2H和T2L
的内容时,所读的内容就是T2H和T2L的内容,而不是RL_TH2和RL_TL2的内容。
这样可以巧妙地实现16位重装载定时器。��������������������
[T2L,T2H]�����������
的溢出不仅置位被隐藏的中断请求标
志位(定时器2的中断请求标志位对用户不可见),使CPU转去执行定时器2的中断程序,而且会
自动将[RL_TL2,RL_TH2]的内容重新装入[T2L,T2H]。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
557
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.5.2.1 定时器2的16位自动重载模式的测试程序(C和汇编)
1. C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2的16位自动重装载模式举例----------------------*/
/* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
U
C
M
typedef unsigned char BYTE;
typedef unsigned int WORD;
C
T
S
//-----------------------------------------------
L
/* define constants */
#define FOSC 18432000L
#define T38_4KHz
(256-18432000/12/38400/2)
//38.4KHz
0xAF;
0x8E;
0xD6;
0xD7;
//(IE2.2)timer2 interrupt control bit
/* define SFR */
sfr
sfr
sfr
sfr
IE2
AUXR
T2H
T2H
=
=
=
=
sbit
TEST_PIN
=
P0^0;
//test pin
//----------------------------------------------/* Timer2 interrupt routine */
void t2_isr() interrupt 12 using 1
{
TEST_PIN =
!TEST_PIN;
}
558
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
//----------------------------------------------/* main program */
void main()
{
T2L
=
T38_4KHz;
T2H
=
T38_4KH >> 8;
AUXR |=
0x10;
IE2
|=
0x04;
EA
=
1;
while (1);
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
//set timer2 reload value
//timer2 start run
//enable timer2 interrupt
//open global interrupt switch
//loop
}
d
e
t
i
im
2. 汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2的16位自动重装载模式举例----------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
C
T
S
U
C
M
L
//假定测试芯片的工作频率为18.432MHz
IE2
DATA 0AFH
AUXR DATA 08EH
T2H
DATA 0D6H
T2L
DATA 0D7H
//中断使能寄存器2
//辅助寄存器
//定时器2高8位
//定时器2低8位
F38_4KHz
//38.4KHz(1T模式下, 65536-18432000/2/38400)
EQU
0FF10H
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0063H
LJMP T2INT
南通国芯微电子有限公司
//复位入口
//中断入口
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
559
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#3FH
ORL
AUXR, #04H
MOV T2L,
MOV T2H,
ORL
AUXR, #10H
//定时器2开始计时
ORL
IE2,
//开定时器2中断
SETB EA
SJMP $
#LOW F38_4KHz
#HIGH F38_4KHz
#04H
//定时器2为1T模式
//初始化计时值
//----------------------------------------//外部中断服务程序
T2INT:
CPL P1.0
CU
M
//
ANL IE2,
#0FBH
//
ORL IE2,
#04H
RETI
C
T
S
d
e
t
i
im
L
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
;----------------------------------------
560
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.5.2.2 定时器2扩展为外部下降沿中断的的测试程序(C和汇编)
;定时器2中断(下降沿中断)的测试程序,定时器/计数器2工作在计数模式中的16位自动重装载模式
1. C程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
U
C
M
//----------------------------------------------sfr
IE2
=
0xaf;
sfr
AUXR =
0x8e;
sfr
T2H =
0xD6;
sfr
T2L
=
0xD7;
C
T
S
sbit
P10
=
P1^0;
//----------------------------------------------//中断服务程序
void t2int() interrupt 12
{
P10
=
!P10;
//
IE2
&=
~0x04;
//
IE2
|=
0x04;
}
void main()
{
AUXR
AUXR
T2H =
AUXR
|=
|=
T2L =
|=
0x04;
0x08;
0xff;
0x10;
IE2
|=
0x04;
EA
=
1;
while (1);
L
//中断使能寄存器2
//辅助寄存器
//定时器2高8位
//定时器2低8位
//中断入口
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
//定时器2为1T模式
//T2_C/T=1, T2(P3.1)引脚为时钟源
//初始化计时值
//定时器2开始计时
//开定时器2中断
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
561
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
IE2
DATA
AUXR DATA
T2H
DATA
T2L
DATA
0AFH
08EH
0D6H
0D7H
//----------------------------------------
ORG 0000H
LJMP MAIN
U
C
M
L
//复位入口
ORG 0063H
LJMP T2INT
//-----------------------------------------
//中断入口
MAIN:
C
T
S
d
e
t
i
im
//中断使能寄存器2
//辅助寄存器
//定时器2高8位
//定时器2低8位
ORG 0100H
MOV SP,
#3FH
ORL
ORL
AUXR, #04H
AUXR, #08H
MOV A,
MOV T2L,
MOV T2H,
ORL
AUXR, #10H
//定时器2开始计时
ORL
IE2,
//开定时器2中断
SETB EA
#0FFH
A
A
#04H
//定时器2为1T模式
//T2_C/T=1, T2(P3.1)引脚为时钟源
//初始化计时值
SJMP $
//-----------------------------------------
562
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//外部中断服务程序
T2INT:
CPL
P1.0
//
ANL IE2,
#0FBH
//
ORL IE2,
#04H
//将测试口取反
//若需要手动清除中断标志,可先关闭中断,
//此时系统会自动清除内部的中断标志
//然后再开中断即可
RETI
;----------------------------------------
END
C
T
S
南通国芯微电子有限公司
U
C
M
总机:0513-5501 2928 / 2929 / 2966
d
e
t
i
im
L
传真:0513-5501 2969 / 2956 / 2947
563
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.5.3 定时器2对系统时钟或外部引脚T2的时钟输入进行可编程分频输出
定时器/������������
计数器���������
2的原理框图如下:
÷12
AUXR.2/T2x12=0
T2 Interrupt
SYSclk
÷1
Toggle
AUXR.2/T2x12=1
T2_C/T=0
T2L
(8 bits)
T2_C/T=1
T2 Pin / P3.1
T2H
(8 bits)
T2CLKO
control
P3.0
T2R
RL_TL2
(8 bits)
RL_TH2
(8 bits)
T2CLKO
定时器/计数器2的工作模式: 16位自动重装
d
e
t
i
im
STC创新设计,请不要抄袭,再抄袭就很无耻了
L
定时器/计数器2除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器2用
作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。
U
C
M
当T2CLKO/INT_CLKO.2=1时,P3.0管脚配置为定时器2的时钟输出T2CLKO。
输出时钟频率 = T2 溢出率/2
如果T2_C/T=0,定时器/计数器T2对内部系统时钟计数,则:
C
T
S
T2工作在1T模式(AUXR.2/T2x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH2, RL_TL2])/2
T2工作在12T模式(AUXR.2/T2x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH2, RL_TL2])/2
如果T2_C/T=1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则:
输出����
时钟��
频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2]) / 2
上面所有的式子中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
564
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
下面是定时器2对内部系统时钟或外部引脚T2/P3.1的时钟输入进行可编程时钟分频输
出的程序举例(C和汇编):
1. C程序:
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ---------------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2的可编程时钟分频输出举例------------------------*/
/* --- 研发顾问QQ:800003751------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-------------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
U
C
M
typedef unsigned char BYTE;
typedef unsigned int WORD;
C
T
S
d
e
t
i
im
L
#define FOSC 18432000L
//----------------------------------------------sfr
sfr
sfr
sfr
AUXR
INT_CLKO
T2H
T2L
=
=
=
=
0x8e;
0x8f;
0xD6;
0xD7;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器2高8位
//定时器2低8位
sbit
T2CLKO
=
P3^0;
//定时器2的时钟输出脚
#define F38_4KHz
//#define F38_4KHz
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
//1T模式
//12T模式
//----------------------------------------------void main()
{
AUXR |=
//
AUXR &=
南通国芯微电子有限公司
0x04;
~0x04;
总机:0513-5501 2928 / 2929 / 2966
//定时器2为1T模式
//定时器2为12T模式
传真:0513-5501 2969 / 2956 / 2947
565
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
//
AUXR &=
AUXR |=
~0x08;
0x08;
T2L
T2H
F38_4KHz;
F38_4KHz >> 8;
/初始化计时值
AUXR |=
INT_CLKO =
0x10;
0x04;
//定时器2开始计时
//使能定时器2的时钟输出功能
while (1);
=
=
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//T2_C/T=0, 对内部时钟进行时钟输出
//T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出
//程序终止
}
2. 汇编程序:
d
e
t
i
im
L
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ---------------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2可编程时钟分频输出举例---------------------------*/
/* --- 研发顾问QQ:800003751------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-------------------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
T2H
T2L
DATA
DATA
DATA
DATA
T2CLKO
BIT
F38_4KHz
//F38_4KHz
EQU
EQU
08EH
08FH
0D6H
0D7H
P3.0
0FF10H
0FFECH
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器2高8位
//定时器2低8位
//定时器2的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下, (65536-18432000/2/12/38400)
//-----------------------------------------------
566
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
ORG 0000H
LJMP MAIN
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//复位入口
//定时器2为1T模式
//定时器2为12T模式
//----------------------------------------
MAIN:
ORG 0100H
//
ORL AUXR, #04H
ANL AUXR, #0FBH
//
ANL AUXR, #0F7H
ORL AUXR, #08H
MOV SP,
MOV
MOV
ORL
MOV
SJMP $
#3FH
//T2_C/T=0, 对内部时钟进行时钟输出
//T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出
T2L,
#LOW F38_4KHz
T2H,
#HIGH F38_4KHz
AUXR, #10H
INT_CLKO,
#04H
END
南通国芯微电子有限公司
CU
;----------------------------------------------
C
T
S
M
总机:0513-5501 2928 / 2929 / 2966
d
e
t
i
im
//初始化计时值
L
//定时器2开始计时
//使能定时器2的时钟输出功能
//程序终止
传真:0513-5501 2969 / 2956 / 2947
567
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.5.4 定时器/计数器2作串行口波特率发生器及测试程序(C和汇编)
定时器/计数器2除可当定时器/计数器和可编程时钟输出使用外,还可作串行口波特率发
生器。串行口1优先选择定时器2作为其波特率发生器,串行口2只能选择定时器2作为其波特率
发生器,串行口3/串口4默认选择定时器2作为其波特率发生器。
串行口1如果工作在模式1(8位UART,波特率可变)和模式3(9位UART,波特率可变)
时,其可变的波特率可以由定时器T2产生。此时:
串行口1的波特率=�(定时器T���������
2的溢出率)���
/4,
注意:此时波特率也与SMOD无关。
当T2工作在1T模式(AUXR.2/T2x12=1)时�
,定时器T�����
2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口1的波特率=SYSclk / ( 65536 - [[RL_TH2, RL_TL2]) / 4
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
当T2工作在12T模式(AUXR.2/T2x12=0)时�
即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
d
e
t
i
im
串行口2的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特
率可变)。串行口2只能选择定时器T2作其波特率发生器。串行口2的波特率按如下公式计算:
串行口2的波特率=(定时器T��������
2的溢出率)��
/4
L
当T2工作在1T模式(AUXR.2/T2x12=1)时�
,定时器�����
2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
U
C
M
即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
当T2工作在12T模式(AUXR.2/T2x12=0)时�
即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
C
T
S
串行口3的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特
率可变)。串行口3可以选择定时器T3作为其波特率发生器,也可以选择定时器T2作其波特率
发生器。当选择定时器2作为其波特率发生器时,串行口3的波特率按如下公式计算:
串行口3的波特率=(定时器T��������
2的溢出率)��
/4
当T2工作在1T模式(AUXR.2/T2x12=1)时�
,定时器�����
2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]]) / 4
,定时器�����
2的溢出率=SYSclk /12/(65536 - [[RL_TH2, RL_TL2]);
当T2工作在12T模式(AUXR.2/T2x12=0)时�
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [[RL_TH2, RL_TL2]) / 4
串行口4的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特
率可变)。串行口4可以选择定时器T4作为其波特率发生器,也可以选择定时器T2作其波特率
发生器。当选择定时器2作为其波特率发生器时,串行口4的波特率按如下公式计算:
串行口4的波特率=(定时器T��������
2的溢出率)��
/4
当T2工作在1T模式(AUXR.2/T2x12=1)时�
,定时器�����
2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
当T2工作在12T模式(AUXR.2/T2x12=0)时�
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上面所有的式子中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
568
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.5.4.1 定时器/计数器2作串行口1波特率发生器的测试程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
#define BAUD 115200
#define
#define
#define
#define
#define
U
C
M
//系统频率
//串口波特率
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
L
#define PARITYBIT EVEN_PARITY
//定义校验位
sfr
sfr
sfr
sbit
//辅助寄存器
//定时器2高8位
//定时器2低8位
AUXR =
T2H
=
T2L =
0x8e;
0xd6;
0xd7;
P22
P2^2;
=
bit busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
569
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
SCON =
0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON =
0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON =
0xd2;
//9位可变波特率,校验位初始为0
#endif
T2L
T2H
AUXR
AUXR
ES
EA
=
=
=
|=
=
=
(65536 - (FOSC/4/BAUD));
(65536 - (FOSC/4/BAUD))>>8;
0x14;
0x01;
1;
1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
//设置波特率重装值
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
//使能串口1中断
d
e
t
i
im
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
P22 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
C
T
S
U
C
M
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
570
南通国芯微电子有限公司
L
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
TB8 = 0;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
#endif
}
busy = 1;
SBUF = ACC;
研发顾问QQ:800003751
//设置校验位为0
//设置校验位为1
//设置校验位为1
//设置校验位为0
//写数据到UART数据寄存器
d
e
t
i
im
}
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
C
T
S
南通国芯微电子有限公司
STC — 全球最大的8051单片机设计公司
U
C
M
L
//检测字符串结束标志
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
571
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751-----------------------------------------------------------------------
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
*/
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
#define PARITYBIT
0
1
2
3
4
C
T
S
AUXR EQU 08EH
T2H
DATA 0D6H
T2L DATA 0D7H
U
C
M
EVEN_PARITY
//-----------------------------------------
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
//----------------------------------------BUSY BIT
20H.0
//----------------------------------------
ORG 0000H
LJMP MAIN
d
e
t
i
im
L
//定义校验位
//辅助寄存器
//定时器2高8位
//定时器2低8位
//忙标志位
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
572
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
MOV SCON, #0DAH
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
#endif
//------------------------------
MOV T2L,
MOV T2H,
MOV AUXR,
ORL AUXR,
SETB ES
SETB EA
研发顾问QQ:800003751
//9位可变波特率,校验位初始为1
//9位可变波特率,校验位初始为0
#0D8H
#0FFH
#14H
#01H
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//设置波特率重装值(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
//使能串口中断
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
MOV P2.2,
CHECKTI:
JNB TI,
CLR TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
C
T
S
U
C
M
d
e
t
i
im
L
CHECKTI
SBUF
RB8
C
//检测RI位
//清除RI位
//P0显示串口数据
ISR_EXIT
//检测TI位
//清除TI位
//清忙标志
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
南通国芯微电子有限公司
STC — 全球最大的8051单片机设计公司
//P2.2显示校验位
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
573
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
C
T
S
574
南通国芯微电子有限公司
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//设置校验位为0
//设置校验位为1
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
U
C
M
d
e
t
i
im
L
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.5.4.2 定时器/计数器2作串行口2波特率发生器的测试程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
U
C
M
d
e
t
i
im
L
#define FOSC 18432000L
//系统频率
#define BAUD 115200
//串口波特率
#define TM
(65536 - (FOSC/4/BAUD))
#define
#define
#define
#define
#define
C
T
S
NONE_PARITY 0
ODD_PARITY 1
EVEN_PARITY 2
MARK_PARITY 3
SPACE_PARITY 4
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
sfr
sfr
sfr
sfr
sfr
sfr
AUXR
S2CON
S2BUF
T2H
T2L
IE2
#define S2RI
#define S2TI
=
=
=
=
=
=
0x01
0x02
南通国芯微电子有限公司
0x8e;
0x9a;
0x9b;
0xd6;
0xd7;
0xaf;
//定义校验位
//辅助寄存器
//UART2 控制寄存器
//UART2 数据寄存器
//定时器2高8位
//定时器2低8位
//中断控制寄存器2
//S2CON.0
//S2CON.1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
575
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
#define S2RB8 0x04
#define S2TB8 0x08
bit
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//S2CON.2
//S2CON.3
busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
S2CON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
S2CON = 0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
S2CON = 0xd2;
//9位可变波特率,校验位初始为0
#endif
T2L = TM;
T2H = TM>>8;
AUXR = 0x14;
IE2 = 0x01;
EA = 1;
SendString("STC15F2K60S2\r\nUart2 Test !\r\n");
while(1);
}
C
T
S
/*---------------------------UART2 中断服务程序
-----------------------------*/
void Uart2() interrupt 8 using 1
{
if (S2CON & S2RI)
{
S2CON &= ~S2RI;
P0 = S2BUF;
P2 = (S2CON & S2RB8);
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI;
busy = 0;
}
}
L
//设置波特率重装值
//T2为1T模式, 并启动定时器2
//使能串口2中断
U
C
M
d
e
t
i
im
//清除S2RI位
//P0显示串口数据
//P2.2显示校验位
//清除S2TI位
//清忙标志
/*----------------------------
576
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
S2CON &= ~S2TB8;
#elif (PARITYBIT == EVEN_PARITY)
S2CON |= S2TB8;
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
S2CON |= S2TB8;
#elif (PARITYBIT == EVEN_PARITY)
S2CON &= ~S2TB8;
#endif
}
busy = 1;
S2BUF = ACC;
}
C
T
S
STC — 全球最大的8051单片机设计公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
d
e
t
i
im
//设置校验位为1
L
//设置校验位为0
U
C
M
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
南通国芯微电子有限公司
研发顾问QQ:800003751
//写数据到UART2数据寄存器
//检测字符串结束标志
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
577
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751-----------------------------------------------------------------------
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
*/
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
CU
#define PARITYBIT EVEN_PARITY
//----------------------------------------AUXR
S2CON
S2BUF
T2H
T2L
IE2
EQU
EQU
EQU
DATA
DATA
EQU
C
T
S
08EH
09AH
09BH
0D6H
0D7H
0AFH
S2RI
EQU 01H
S2TI
EQU 02H
S2RB8 EQU 04H
S2TB8 EQU 08H
//----------------------------------------BUSY BIT
20H.0
//----------------------------------------
ORG 0000H
LJMP MAIN
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
M
d
e
t
i
im
L
//定义校验位
//辅助寄存器
//UART2 控制寄存器
//UART2 数据寄存器
//定时器2高8位
//定时器2低8位
//中断控制寄存器2
//S2CON.0
//S2CON.1
//S2CON.2
//S2CON.3
//忙标志位
ORG 0043H
LJMP UART2_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
578
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV S2CON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV S2CON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV S2CON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV T2L,
MOV T2H,
MOV AUXR,
ORL IE2,
SETB EA
#0D8H
#0FFH
#14H
#01H
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//设置波特率重装值(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//使能串口2中断
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart2 Test !",0DH,0AH,0
C
T
S
U
C
M
;/*---------------------------;UART2 中断服务程序
;----------------------------*/
UART2_ISR:
PUSH ACC
PUSH PSW
MOV A,
S2CON
JNB ACC.0, CHECKTI
ANL S2CON, #NOT S2RI
MOV P0,
S2BUF
ANL A,
#S2RB8
MOV P2,
A
CHECKTI:
;
MOV A,
S2CON
JNB ACC.1, ISR_EXIT
ANL S2CON, #NOT S2TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
南通国芯微电子有限公司
d
e
t
i
im
//发送测试字符串
L
;读取UART2控制寄存器
;检测S2RI位
;清除S2RI位
;P0显示串口数据
;
;P2.2显示校验位
;读取UART2控制寄存器
;检测S2TI位
;清除S2TI位
;清忙标志
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
579
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
ANL S2CON, #NOT S2TB8
#elif (PARITYBIT == EVEN_PARITY)
ORL S2CON, #S2TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
ORL S2CON, #S2TB8
#elif (PARITYBIT == EVEN_PARITY)
ANL S2CON, #NOT S2TB8
#endif
PARITYBITOK:
SETB BUSY
MOV S2BUF, A
RET
C
T
S
南通国芯微电子有限公司
研发顾问Tel:13922805190
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
d
e
t
i
im
//设置校验位为1
//设置校验位为0
L
//校验位设置完成
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
580
临时技术支持Tel:13922829991
//写数据到UART2数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
7.6 定时器/计数器3及定时器/计数器4
STC15W4K60S4���������������������������������������
还新增了�����������������������������������
两个16位定时/计数器������������������������
:�����������������������
T3���������������������
和T4������������������
。T3���������������
、T4和T2一样,它们����
的工作模
式固定为16位自动重装载模式。T3���������������������������
和T4既�����������������������
可以当定时器/����������������
计数器�������������
用,也可以当�������
可编程时钟输出
和串口的波特率发生器。
下面首先介绍与定时器/计数器T3和T4相关的寄存器:
7.6.1 定时器/计数器3和定时器/计数器4的相关特殊功能寄存器
与定时器/计数器3和定时器/计数器4有关的特殊功能寄存器:
位地址及其符号
符号
描述
T4T3M
T4和T3的控制寄存器
D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B
T4H
T4L
定时器4高8位寄存器
定时器4低8位寄存器
定时器3高8位
寄存器
定时器3低8位
寄存器
Interrupt Enable register
D2H
D3H
T3H
T3L
IE2
地址
D4H
D5H
C
T
S
AFH
d
e
t
i
im
MSB
LSB
U
C
M
-
ET4 ET3
复位值
0000 0000B
0000 0000B
L
0000 0000B
0000 0000B
ES4
ES3
ET2
ESPI
x000 0000B
ES2
1、定时器T4和T3的控制寄存器: T4T3M(地址:0xD1)
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
name
T4R
B6
B5
B4
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B7 - T4R:定时器4运行控制位�
。
0�����������
:不允许定时器4运行;
1:允许定时器4运行。
B6 - T4_C/T: 控制定时器4用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数)
B5 - T4x12:定时器4速度控制位�
。
0����������������������������
:定时器4速度是8051单片机定时器的速度,即12分频;
1:定时器4速度是8051单片机定时器速度的12倍,即不分频。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
581
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO
1:允许将P0.4脚���
配置为定时器4的时钟输出T4CLKO,�������
输出时钟频率=T4溢出率/2
如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则:
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2
如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
0: 不允许�
将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO
。
B3 - T3R:定时器3运行控制位�
0�����������
:不允许定时器3运行;
1:允许定时器3运行。
B2 - T3_C/T: 控制定时器3用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数)
d
e
t
i
im
B1 - T3x12:定时器3速度控制位�
。
0����������������������������
:定时器3速度是8051单片机定时器的速度,即12分频;
1:定时器3速度是8051单片机定时器速度的12倍,即不分频。
U
C
M
L
B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO
1:允许将P0.6脚���
配置为定时器3的时钟输出T3CLKO,�������
输出时钟频率=T3溢出率/2
如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则:
C
T
S
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2
如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
0: 不允许�
将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO
2、定时器T3和T4的中断控制寄存器:IE2
IE2 : 中断允许寄存器 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
1,允许定时器4产生中断;
0,禁止定时器4产生中断。
ET3:定时器3的中断允许位。
1,允许定时器3产生中断;
0,禁止定时器3产生中断。
582
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.6.2 定时器/计数器3的应用(STC创新设计,请不要抄袭)
定时器/计数器���������������������������������
3��������������������������������
既�������������������������������
可以当定时器�������������������������
/计数器���������������������
用,也可以当���������������
可编程时钟输出��������
和串口的波特率发
生器。
7.6.2.1 定时器/计数器3作定时器
定时器/������������
计数器���������
3的原理框图如下:
÷12
T4T3M.1/T3x12=0
T3 Interrupt
SYSclk
÷1
Toggle
T4T3M.1/T3x12=1
T3_C/T=0
T3L
(8 bits)
T3_C/T=1
T3 Pin / P0.7
T3H
(8 bits)
d
e
t
i
m
control
T3CLKO
P0.6
T3R
RL_TL3
(8 bits)
Li
RL_TH3
(8 bits)
T3CLKO
定时器/计数器3的工作模式: 16位自动重装载
U
C
M
STC创新设计,请不要抄袭,再抄袭就很无耻了
T3R/T4T3M.3为T4T3M寄存器内的控制位,T4T3M寄存器各位的具体功能描述���������
见上节������
T4T3M寄
存器����
的介绍�
。
C
T
S
当T3_C/T=0时,多路开关连接到系统时钟输出,T3对内部系统时钟计数,T3工作在定时方
式。当T3_C/T=1时,多路开关连接到外部脉冲输入P0.7/T3,即T3工作在计数方式。
STC15W4K60S4������������������������������������
系列单片机的定时器3有两种计数速率:一种是���������������
12T������������
模式,每��������
12������
个时钟加��
1�
,
与传统��������������������������������������������
8051����������������������������������������
单片机相同;另外一种是�����������������������������
1T���������������������������
模式,每个时钟加�������������������
1������������������
,速度是传统������������
8051��������
单片机的����
12��
倍。
T3��������������������������������������������������
的速率由特殊功能寄存器���������������������������������������
T4T3M����������������������������������
中的��������������������������������
T3x12���������������������������
决定,如果����������������������
T3x12=0���������������
,��������������
T3������������
则工作在��������
12T�����
模式;如果
T3x12=1������������
,�����������
T3���������
则工作在�����
1T���
模式。
定时器3有��������
2�������
个隐藏的寄存器RL_TH3和RL_TL3。RL_TH3与�����������
T3H��������
共有同一个地址,RL_TL3
与T3L共有同一个地址。当T3R=0即定时器/计数器3被禁止工作时,对T3L写入的内容会同时写
入RL_TL3,对T3H写入的内容也会同时写入RL_TH3。当T3R=1即定时器/计数器3被允许工作时,
对T3L写入内容,实际上不是写入当前寄存器T3L中,而是写入隐藏的寄存器RL_TL3中;对T3H写
入内容,实际上也不是写入当前寄存器T3H中,而是写入隐藏的寄存器RL_TH3。当读T3H和T3L
的内容时,所读的内容就是T3H和T3L的内容,而不是RL_TH3和RL_TL3的内容。
这样可以巧妙地实现16位重装载定时器。��������������������
[T3L,T3H]�����������
的溢出不仅置位被隐藏的中断请求标
志位(定时器3的中断请求标志位对用户不可见),使CPU转去执行定时器3中断的程序,而且会
自动将[RL_TL3,RL_TH3]的内容重新装入[T3L,T3H]。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
583
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.6.2.2 定时器/计数器3对系统时钟或外部引脚T3的时钟输入进行可编程时钟分频输出
定时器/������������
计数器���������
3的原理框图如下:
÷12
T4T3M.1/T3x12=0
T3 Interrupt
SYSclk
÷1
Toggle
T4T3M.1/T3x12=1
T3_C/T=0
T3L
(8 bits)
T3_C/T=1
T3 Pin / P0.7
T3H
(8 bits)
T3CLKO
control
P0.6
T3R
RL_TL3
(8 bits)
RL_TH3
(8 bits)
T3CLKO
定时器/计数器3的工作模式: 16位自动重装载
d
e
t
i
im
STC创新设计,请不要抄袭,再抄袭就很无耻了
L
定时器/计数器3除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器3用
作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。
U
C
M
当T3CLKO/T4T3M.0=1时,P0.6管脚配置为定时器3的时钟输出T3CLKO。
输出时钟频率 = T3 溢出率/2
如果T3_C/T=0,定时器/计数器T3对内部系统时钟计数,则:
C
T
S
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH3, RL_TL3])/2
如果T3_C/T=1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
上面所有的式子中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。
584
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.6.2.3 定时器/计数器3作串行口3的波特率发生器
定时器/计数器3除可当定时器/计数器和可编程时钟输出使用外,还可作串行口3波特率发
生器。串行口3默认选择定时器2作为其波特率发生器,但通过设置S3ST3/S3CON.6,串行口3也
可以选择定时器3作为其波特率发生器。
S3CON : 串行口3控制寄存器
SFR name Address bit
B7
B6
B5
B4
B3
B2
B1
S3CON
ACH name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI
B0
S3RI
S3ST3: 串口3(UART3)选择定时器3作波特率发生器的控制位
0, 选择定时器2作为串口3(UART3)的波特率发生器;
1, 选择定时器3作为串口3(UART3)的波特率发生器
d
e
t
i
im
串行口3的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特
率可变)。当串行口3被设置为选择定时器3作为其波特率发生器时,串行口3的波特率按如下
公式计算:
串行口3的波特率=(定时器T��������
3的溢出率)��
/4
U
C
M
L
当T3工作在1T模式(T4T3M.1/T3x12=1)时�
,定时器�����
3的溢出率 = SYSclk / ( 65536 - [RL_TH3,RL_TL3] );
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4
当T3工作在12T模式(T4T3M.1/T3x12=0)时�
,定时器�����
3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]);
C
T
S
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4
上面所有的式子中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
585
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.6.3 定时器/计数器4的应用(STC创新设计,请不要抄袭)
定时器/计数器���������������������������������
4��������������������������������
既�������������������������������
可以当定时器�������������������������
/计数器���������������������
用,也可以当���������������
可编程时钟输出��������
和串口的波特率发
生器。
7.6.3.1 定时器/计数器4作定时器
定时器/������������
计数器���������
4的原理框图如下:
÷12
T4T3M.5/T4x12=0
T4 Interrupt
SYSclk
÷1
Toggle
T4T3M.5/T4x12=1
T4_C/T=0
T4L
(8 bits)
T4_C/T=1
T4 Pin / P0.5
T4H
(8 bits)
T4R
RL_TL4
(8 bits)
T4CLKO
d
e
t
i
im
control
RL_TH4
(8 bits)
P0.4
T4CLKO
L
定时器/计数器4的工作模式: 16位自动重装载
CU
M
STC创新设计,请不要抄袭,再抄袭就很无耻了
T4R/T4T3M.7为T4T3M寄存器内的控制位,T4T3M寄存器各位的具体功能描述���������
见上节������
T4T3M寄
存器����
的介绍�
。
C
T
S
当T4_C/T=0时,多路开关连接到系统时钟输出,T4对内部系统时钟计数,T4工作在定时方
式。当T4_C/T=1时,多路开关连接到外部脉冲输入P0.5/T4,即T4工作在计数方式。
STC15W4K60S4������������������������������������
系列单片机的定时器4有两种计数速率:一种是���������������
12T������������
模式,每��������
12������
个时钟加��
1�
,
与传统��������������������������������������������
8051����������������������������������������
单片机相同;另外一种是�����������������������������
1T���������������������������
模式,每个时钟加�������������������
1������������������
,速度是传统������������
8051��������
单片机的����
12��
倍。
T4��������������������������������������������������
的速率由特殊功能寄存器���������������������������������������
T4T3M����������������������������������
中的��������������������������������
T4x12���������������������������
决定,如果����������������������
T4x12=0���������������
,��������������
T4������������
则工作在��������
12T�����
模式;如果
T4x12=1������������
,�����������
T4���������
则工作在�����
1T���
模式。
定时器4有��������
2�������
个隐藏的寄存器RL_TH4和RL_TL4。RL_TH4与�����������
T4H��������
共有同一个地址,RL_TL4
与T4L共有同一个地址。当T4R=0即定时器/计数器4被禁止工作时,对T4L写入的内容会同时写
入RL_TL4,对T4H写入的内容也会同时写入RL_TH4。当T4R=1即定时器/计数器4被允许工作时,
对T4L写入内容,实际上不是写入当前寄存器T4L中,而是写入隐藏的寄存器RL_TL4中;对T4H写
入内容,实际上也不是写入当前寄存器T4H中,而是写入隐藏的寄存器RL_TH4。当读T4H和T4L
的内容时,所读的内容就是T4H和T4L的内容,而不是RL_TH4和RL_TL4的内容。
这样可以巧妙地实现16位重装载定时器。��������������������
[T4L,T4H]�����������
的溢出不仅置位被隐藏的中断请求标
志位(定时器4的中断请求标志位对用户不可见),使CPU转去执行定时器4中断的程序,而且会
自动将[RL_TL4,RL_TH4]的内容重新装入[T4L,T4H]。
586
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.6.3.2 定时器/计数器4对系统时钟或外部引脚T4的时钟输入进行可编程时钟分频输出
定时器/������������
计数器���������
4的原理框图如下:
T4T3M.5/T4x12=0
÷12
T4 Interrupt
SYSclk
÷1
Toggle
T4T3M.5/T4x12=1
T4_C/T=0
T4L
(8 bits)
T4_C/T=1
T4 Pin / P0.5
T4H
(8 bits)
T4CLKO
control
P0.4
T4R
RL_TL4
(8 bits)
RL_TH4
(8 bits)
T4CLKO
定时器/计数器4的工作模式: 16位自动重装载
d
e
t
i
im
STC创新设计,请不要抄袭,再抄袭就很无耻了
L
定时器/计数器4除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器4用
作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。
U
C
M
当T4CLKO/T4T3M.4=1时,P0.4管脚配置为定时器4的时钟输出T4CLKO。
输出时钟频率 = T4 溢出率/2
如果T4_C/T=0,定时器/计数器T4对内部系统时钟计数,则:
C
T
S
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH4, RL_TL4])/2
如果T4_C/T=1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
上面所有的式子中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
587
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.6.3.3 定时器/计数器4作串行口4的波特率发生器
定时器/计数器4除可当定时器/计数器和可编程时钟输出使用外,还可作串行口4波特率发
生器。串行口4默认选择定时器2作为其波特率发生器,但通过设置S4ST4/S4CON.6,串行口4也
可以选择定时器4作为其波特率发生器。
S4CON : 串行口4控制寄存器
SFR name Address bit
B7
B6
B5
B4
B3
B2
B1
S4CON
84H name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI
B0
S4RI
S4ST4: 串口4(UART4)选择定时器4作波特率发生器的控制位
0, 选择定时器2作为串口4(UART4)的波特率发生器;
1, 选择定时器4作为串口4(UART4)的波特率发生器
串行口4的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特
率可变)。当串行口4被设置为选择定时器4作为其波特率发生器时,串行口4的波特率按如下
公式计算:
串行口4的波特率=(定时器T��������
4的溢出率)��
/4
d
e
t
i
im
L
当T4工作在1T模式(T4T3M.5/T4x12=1)时�
,定时器�����
4的溢出率 = SYSclk / ( 65536 - [RL_TH4,RL_TL4] );
U
C
M
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4
当T4工作在12T模式(T4T3M.5/T4x12=0)时�
,定时器�����
4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]);
C
T
S
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4
上面所有的式子中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。
588
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.7 如何将定时器T0/T1/T2/T3/T4的速度提高12倍
1、定时器T0/T1/T2的���������
速度控制寄存器位:T0x12/T1x12/T2x12
SFR name Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
T2R
T2_C/T
B2
B1
B0
T2x12 EXTRAM S1ST2
定时器0�����������
、����������
定时器1和定时器2:
STC15W4K60S4系列是1T的8051单片机,为了兼容传统8051,定时器0�����������
、����������
和定时器1和定时器2
复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,实现真
正的1T。
T0x12: 定时器0速度控制位
0, 定时器0是传统8051速度,12分频;
1, 定时器0的速度是传统8051的12倍,不分频
T1x12: 定时器1速度控制位
0, 定时器1是传统8051速度,12分频;
1, 定时器1的速度是传统8051的12倍,不分频
如果���������������������������������������������
串口1������������������������������������������
用定时器1做波特率发生器,T1x12位就可以控制UART��������������
异步串口����������
是12T还是1T了。
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T
串口������
1�����
的模式0�:
为了兼容传统���������������������
8051,����������������
串口��������������
1�������������
复位后是兼容传统�����
8051�
的
STC15W4K60S4系列是1T的8051单片机,���������������������������
UART_M0x6: 串口1模式0的通信速度设置位。
0, 串口1模式0的速度是传统8051单片机串口的速度,12分频;
1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频
如果用定时器��������������������������
T1������������������������
做波特率发生器时����������������
,���������������
串口�������������
1������������
的速度由T�������
1������
的溢出率决定
T2R: 定时器2允许控制位
0, 不允许定时器2运行;
1, 允许定时器2运行
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
EXTRAM: 内部/外部RAM存取控制位
0, 允许使用逻辑上在片外、物理上在片内的扩展RAM;
1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM
S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位
0, 选择定时器1作为串口1(UART1)的波特率发生器;
1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为
独立定时器使用
注意:有串口2的单片机,串口2永远是使用�����������������������
定时器��������������������
2作为波特率发生器,串口2不能够选择定时
器1做波特率发生器,串口1可以选择定时器1做波特率发生器,也可以选择������
定时器���
2作为
波特率发生器.
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
589
C
T
S
U
C
M
L
d
e
t
i
im
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2、定时器T4和T3的速度控制寄存器位: T4x12/T3x12
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
name
T4R
B6
B5
B4
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B5 - T4x12:定时器4速度控制位�
。
0����������������������������
:定时器4速度是8051单片机定时器的速度,即12分频;
1:定时器4速度是8051单片机定时器速度的12倍,即不分频。
B1 - T3x12:定时器3速度控制位�
。
0����������������������������
:定时器3速度是8051单片机定时器的速度,即12分频;
1:定时器3速度是8051单片机定时器速度的12倍,即不分频。
B7 - T4R:定时器4运行控制位�
。
0�����������
:不允许定时器4运行;
1:允许定时器4运行。
B6 - T4_C/T: 控制定时器4用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数)
B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO
1:允许将P0.4脚���
配置为定时器4的时钟输出T4CLKO,�������
输出时钟频率=T4溢出率/2
如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则:
U
C
M
d
e
t
i
im
L
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2
C
T
S
如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
0: 不允许�
将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO
。
B3 - T3R:定时器3运行控制位�
0�����������
:不允许定时器3运行;
1:允许定时器3运行。
B2 - T3_C/T: 控制定时器3用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数)
B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO
1:允许将P0.6脚���
配置为定时器3的时钟输出T3CLKO,�������
输出时钟频率=T3溢出率/2
如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则:
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2
如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
0: 不允许�
将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO
590
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.8 可编程时钟输出(也可作分频器使用)
STC15系列单片机最多有六路可编程时钟输出(如STC15W4K60S4系列),这六路可编程时钟输
出分别是: MCLKO/P5.4或MCLKO_2/XTAL2/P1.6, T0CLKO/P3.5, T1CLKO/P3.4, T2CLKO/P3.0,
T3CLKO/P0.6, T4CLKO/P0.4. 由于单片机I/O口的对外输出速度最快不超过13.5MHz,所以可编
程时钟对外输出速度最快也不超过13.5MHz。
STC15全系列的可编程时钟输出的类型如下表所示。
可编程时钟 主时钟输出 定时器/计数器0 定时器/计数器1 定时器/计数器2 定时器/计数器3 定时器/计数器4
时钟输出
时钟输出
时钟输出
时钟输出
时钟输出
输出 (MCLKO/P5.4)
单片机型号
(T0CLKO/P3.5) (T1CLKO/P3.4) (T2CLKO/P3.0) (T3CLKO/P.0.6) (T4CLKO/P0.4)
STC15F101W系列
该系列主时
钟输出在
MCLKO/P3.4
√
√
STC15F408AD系列
√
√
√
√
√
d
e
t
i
im
√
STC15W201S系列
√
STC15W408AS系列
(该系列
主时钟输
出还可在
MCLKO_2/
XTAL2/P1.6)
C
T
S
√
√
STC15W408S系列
(该系列
主时钟输
出还可在
MCLKO_2/
P1.6)
U
C
M
L
√
√
√
√
√
√
√
√
√
√
√
√
√
√
(该系列
主时钟输
STC15W1K16S系列
出还可在
MCLKO_2/
XTAL2/P1.6)
STC15F2K60S2系列
√
√
(该系列
主时钟输
STC15W4K60S4系列
出还可在
MCLKO_2/
XTAL2/P1.6)
√
√
上表中√表示对应的系列有相应的可编程时钟输出。
特别注意:对于STC15W1K16S系列和STC15W408S单片机,若要使用T0CLKO时钟输出功能,必须将P3.5口
设置为强推挽输出模式。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
591
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8.1 与可编程时钟输出有关的特殊功能寄存器
位地址及其符号
复位值
符号
描述
地址
AUXR
辅助寄存器
External Interrupt
enable and Clock
output register
8EH
CLK_DIV
(PCON2)
时钟分配器
97H
MCKO_S1 MCKO_S1 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0
T4T3M
T4和T3的控制
寄存器
D1H
T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B
INT_CLKO
AUXR2
8FH
MSB
LSB
T0x12 T1x12 UART_M0x6 T2R T2_C/T
-
EX4 EX3 EX2
-
T2x12 EXTRAM S1ST2
0000 0001B
T2CLKO T1CLKO T0CLKO x000 x000B
0000 0000B
特殊功能寄存器INT_CLKO/AUXR/CLK_DIV/T4T3M的C语言声明:
sfr
sfr
sfr
sfr
INT_CLKO
AUXR
CLK_DIV
T4T3M
= 0x8F;
= 0x8E;
= 0x97;
= 0xD1;
//�����������
新增加的特殊功能寄存器INT_CLKO的地址声明
//�������
特殊功能寄存器AUXR的地址声明
//�������
特殊功能寄存器CLK_DIV的地址声明
//�����������
新增加的特殊功能寄存器T4T3M的地址声明
d
e
t
i
im
L
特殊功能寄存器INT_CLKO/AUXR/CLK_DIV/T4T3M的汇编语言声明:
INT_CLKO
AUXR
CLK_DIV
T4T3M
EQU
EQU
EQU
EQU
8FH
8EH
97H
D1H
C
T
S
U
C
M
;新增加的特殊功能寄存器INT_CLKO的地址声明
;特殊功能寄存器AUXR的地址声明
;特殊功能寄存器CLK_DIV的地址声明
;新增加的特殊功能寄存器T4T3M的地址声明
1. CLK_DIV (PCON2) : 时钟分频寄存器(不可位寻址)
SFR Name SFR Address bit
B7
B6
B5
B4
B3
B2
B1
B0
CLK_DIV
97H
name MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0
(PCON2)
MCKO_S1 MCKO_S0
0
主时钟对外分频输出控制位
(主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟)
0
主时钟不对外输出时钟
0
1
主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1
1
0
主时钟对外输出时钟,但时钟频率被2分频���������
, 输出时钟频率 = MCLK / 2
1
1
主时钟对外输出时钟,但时钟频率被4分频���������
, 输出时钟频率 = MCLK / 4
主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟,MCLK是指主
时钟频率。
STC15W4K60S4系列单片机在MCLKO/P5.4口或MCLKO_2/XTAL2/P1.6口对外输出主时钟。
STC15系列8-pin单片机(如STC15F101W系列)在MCLKO/P3.4口对外输出主时钟,STC15系列
16-pin及其以上单片机均在MCLKO/P5.4口对外输出主时钟,且STC15W系列20-pin及其以上单片
机除可在MCLKO/P5.4口对外输出主时钟外,还可在MCLKO_2/XTAL2/P1.6口对外输出主时钟。
592
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
STC15W系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在MCLKO/P5.4口对外输出主时
钟,还是在MCLKO_2/XTAL2/P1.6口对外输出主时钟。
MCLKO_2:主时钟对外输出位置的选择位
0:在MCLKO/P5.4口对外输出主时钟;
1:在MCLKO_2/XTAL2/P1.6口对外输出主时钟;
主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。
ADRJ:ADC转换结果调整
0:ADC_RES[7:0]存放高8位ADC结果,ADC_RESL[1:0]存放低2位ADC结果
1:ADC_RES[1:0]存放高2位ADC结果,ADC_RESL[7:0]存放低8位ADC结果
Tx_Rx:串口1的中继广播方式设置
0:串口1为正常工作方式
1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD
外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时
反映RxD端口输入的电平状态。
CLKS2
0
0
0
0
1
1
1
1
U
C
M
d
e
t
i
im
L
系统时钟选择控制位
CLKS1 CLKS0 (系统时钟是指对主时钟进行分频后供给CPU、串行口、SPI、定时器、
CCP/PWM/PCA、A/D转换的实际工作时钟)
0
0
主时钟频率/1,不分频
0
1
主时钟频率/2
主时钟频率/4
1
0
1
1
主时钟频率/8
0
0
主时钟频率/16
0
1
主时钟频率/32
1
0
主时钟频率/64
主时钟频率/128
1
1
C
T
S
主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
593
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. INT_CLKO (AUXR2) : External Interrupt Enable and Clock Output register
SFR Name
SFR Address
bit
B7
B6
B5
B4
B3
INT_CLKO
AUXR2
8FH
name
-
EX4
EX3
EX2
-
B2
B1
B0
T2CLKO T1CLKO T0CLKO
B0 - T0CLKO : �����
是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO
1,����������������������
将���������������������
P3.5�����������������
/T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2
若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时,
如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2
若定时器/计数器T0工作在定时器模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则:
d
e
t
i
im
T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (256-TH0) / 2
U
C
M
0,不允许P3.5/T1管脚被配置为定时器0的时钟输出
L
B1 - T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO
1,�
将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出�
率/2
若定时器/计数器T1工作在定时器模式0(16位自动重装载模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
C
T
S
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2
T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2
若定时器/计数器T1工作在模式2(8位自动重装模式),
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2
T1工作在12T模式����������������������
(AUXR.6/T1x12=0)������
时的输出频率 = (SYSclk)/12/(256-TH1)/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (256-TH1) / 2
0,不允许P3.4/T0管脚被配置为定时器1的时钟输出
B2 - T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO
1:允许将P3.0脚���
配置为定时器2的时钟输出T2CLKO,�������
输出时钟频率=T2溢出率/2
如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则:
T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2
T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2
如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则:
输出����
时钟��
频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2
0: 不允许�
将P3.0脚���
配置为定时器2(T2)的时钟输出T2CLKO
594
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
允许外部中断2(INT2)
B4 - EX2 : ��������
允许外部中断3(INT3)
B5 - EX3 : ��������
允许外部中断4(INT4)
B6 - EX4 : ��������
3������������
、辅助���������
特殊功能寄存器: AUXR(地址:0x8E)
AUXR : Auxiliary register(不可位寻址)
SFR name Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
T2R
T2_C/T
B2
B1
B0
T2x12 EXTRAM S1ST2
B7 - T0x12:定时器0速度控制位�
。
0������������������������������
:定时器0速度是传统8051单片机定时器的速度,即12分频;
1:定时器0速度是传统8051单片机定时器速度的12倍,即不分频。
d
e
t
i
im
B6 - T1x12:定时器1速度控制位�
。
0������������������������������
:定时器1速度是传统8051单片机定时器的速度,即12分频;
1:定时器1速度是传统8051单片机定时器速度的12倍,即不分频。
如果串口1用T1作为波特率发生器,则由T1x12位决定串口1是12T还是1T。
U
C
M
L
B5 - UART_M0x6:串口1模式0的通信速度设置位�
。
0��������������������������������
:串口1模式0的速度是传统8051单片机串口的速度,即12分频;
1:串口1模式0的速度是传统8051单片机串口速度的6倍,即2分频。
C
T
S
B4 - T2R:定时器2运行控制位�
。
0�����������
:不允许定时器2运行;
1:允许定时器2运行。
B3 - T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
B2 - T2x12: 定时器2速度控制位
0, 定时器2是传统8051单片机的速度,12分频;
1, 定时器2的速度是传统8051单片机速度的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
B1 - EXTRAM:内部/外部RAM存取控制位�
。
0�������������������������
:允许使用逻辑上在片外、物理上在片内的扩展RAM;
1:禁止使用逻辑上在片外、物理上在片内的扩展RAM。
B0 - S1ST2:串口1(UART1)选择定时器2作波特率发生器的控制位�
。
0�������������
:选择定时器1作为串口1(UART1)的波特率发生器;
1:选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作
为独立定时器使用。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
595
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
4�����������������
、定时器T4和T3的控制�����
寄存器: T4T3M(地址:0xD1)
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
name
T4R
B6
B5
B4
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B7 - T4R:定时器4运行控制位�
。
0�����������
:不允许定时器4运行;
1:允许定时器4运行。
B6 - T4_C/T: 控制定时器4用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数)
B5 - T4x12:定时器4速度控制位�
。
0����������������������������
:定时器4速度是8051单片机定时器的速度,即12分频;
1:定时器4速度是8051单片机定时器速度的12倍,即不分频。
B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO
1:允许将P0.4脚���
配置为定时器4的时钟输出T4CLKO,�������
输出时钟频率=T4溢出率/2
如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则:
U
C
M
d
e
t
i
im
L
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2
如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
C
T
S
0: 不允许�
将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO
。
B3 - T3R:定时器3运行控制位�
0�����������
:不允许定时器3运行;
1:允许定时器3运行。
B2 - T3_C/T: 控制定时器3用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数)
B1 - T3x12:定时器3速度控制位�
。
0����������������������������
:定时器3速度是8051单片机定时器的速度,即12分频;
1:定时器3速度是8051单片机定时器速度的12倍,即不分频。
B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO
1:允许将P0.6脚���
配置为定时器3的时钟输出T3CLKO,�������
输出时钟频率=T3溢出率/2
如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则:
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2
如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
0: 不允许�
将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO
596
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.8.2 主时钟输出及其测试程序(C和汇编)
主时钟可以是内部高精度R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。由
于单片机I/O口的对外输出速度最快不超过13.5MHz,所以可编程时钟对外输出速度最快也不
超过13.5MHz,如果频率过高,需进行分频输出。
CLK_DIV (PCON2) : 时钟分频寄存器(不可位寻址)
SFR Name SFR Address bit
B7
B6
B5
B4
B3
B2
B1
B0
CLK_DIV
97H
name MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0
(PCON2)
如何利用MCLKO/P5.4或MCLKO_2/XTAL2/P1.6管脚输出时钟
MCLKO/P5.4或MCLKO_2/XTAL2/P1.6的时钟输出控制由CLK_DIV寄存器的MCKO_S1和
MCKO_S0位控制。通过设置MCKO_S1(CLK_DIV.7)和MCKO_S0(CLK_DIV.6)可将MCLKO/
P5.4管脚配置为主时钟输出同时还可以设置该主时钟的输出频率。
d
e
t
i
im
特殊功能寄存器: CLK_DIV (地址:97H)
MCKO_S1 MCKO_S0
主时钟对外分频输出控制位
(主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟)
U
C
M
L
0
0
主时钟不对外输出时钟
0
1
主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1
1
0
主时钟对外输出时钟,但时钟频率被2分频���������
, 输出时钟频率 = MCLK / 2
1
1
C
T
S
主时钟对外输出时钟,但时钟频率被4分频���������
, 输出时钟频率 = MCLK / 4
主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟,MCLK是指主
时钟频率。
STC15W4K60S4系列单片机在MCLKO/P5.4口或MCLKO_2/XTAL2/P1.6口对外输出主时钟。
STC15系列8-pin单片机(如STC15F101W系列)在MCLKO/P3.4口对外输出主时钟,STC15系列
16-pin及其以上单片机均在MCLKO/P5.4口对外输出主时钟,且STC15W系列20-pin及其以上单片
机除可在MCLKO/P5.4口对外输出主时钟外,还可在MCLKO_2/XTAL2/P1.6口对外输出主时钟。
STC15W系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在MCLKO/P5.4口对外输出主时
钟,还是在MCLKO_2/XTAL2/P1.6口对外输出主时钟。
MCLKO_2:主时钟对外输出位置的选择位
0:在MCLKO/P5.4口对外输出主时钟;
1:在MCLKO_2/XTAL2/P1.6口对外输出主时钟;
主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。
由于STC15系列5V单片机I/O口的对外输出速度最快不超过13.5MHz,所以5V单片机的对外可
编程时钟输出速度最快也不超过13.5MHz,如果频率过高,需进行分频输出。
而3.3V单片机I/O口的对外输出速度最快不超过8MHz,故3.3V单片机的对外可编程时钟输出速
度最快也不超过8MHz,如果频率过高,需进行分频输出。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
597
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
下面是主时钟输出的示例程序:
1. C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机的主时钟输出 -----------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
//----------------------------------------sfr
CLK_DIV
=
C
T
S
U
C
M
0x97;
L
//时钟分频寄存器
//----------------------------------------void main()
{
CLK_DIV
//
CLK_DIV
//
CLK_DIV
while (1);
=
=
=
0x40;
0x80;
0xC0;
//0100,0000 P5.4输出频率为SYSclk
//1000,0000 P5.4输出频率为SYSclk/2
//1100,0000 P5.4输出频率为SYSclk/4
//程序终止
}
598
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机的主时钟输出 -----------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
CLK_DIV
DATA
097H
;----------------------------------------;interrupt vector table
U
C
M
ORG 0000H
LJMP MAIN
;----------------------------------------
MAIN:
//
//
C
T
S
ORG
0100H
MOV
MOV
MOV
MOV
SJMP
SP,
CLK_DIV,
CLK_DIV,
CLK_DIV,
$
#3FH
#40H
#80H
#C0H
d
e
t
i
im
//IRC时钟输出控制寄存器
L
//复位入口
//initial SP
//0100,0000 P5.4输出频率为SYSclk
//1000,0000 P5.4输出频率为SYSclk/2
//1100,0000 P5.4输出频率为SYSclk/4
//----------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
599
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8.3 定时器0对系统时钟或外部引脚T0的时钟输入进行可编程分频输出
——及测试程序(C和汇编)
如何利用T0CLKO/P3.5管脚输出时钟
T0CLKO/P3.5管脚是否�����
输出时钟由INT_CLKO (AUXR2)寄存器的T0CLKO位控制
AUXR2.0 - T0CLKO : 1,������
允许时钟输出
0,������
禁止时钟输出
T0CLKO的输出时钟频率由定时器0控制,相应的定时器0需要工作在定时器的���������
模式0(16位自动
重装载模式)或���������������������������������������
模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中断�
,
当然在特殊情况下也可允许相应的定时器中断。
新增加的特殊功能寄存器: INT_CLKO (AUXR2)(地址:0x8F)
d
e
t
i
im
当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。
输出时钟频率 = T0 溢出率/2
若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时,(如下图所示)
如果C/T=0,定时器/计数器T0对内部系统时钟计数,则:
L
T0工作在1T模式(AUXR.7/T0x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2
U
C
M
T0工作在12T模式(AUXR.7/T0x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH0, RL_TL0])/2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
输出����
时钟��
频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2
C
T
S
RL_TH0为TH0的重装载寄存器,RL_TL0为TL0的重装载寄存器。
AUXR.7/T0x12=0
÷12
TF0
Interrupt
SYSclk
÷1
AUXR.7/T0x12=1
Toggle
C/T=0
TL0
(8 bits)
C/T=1
T0 Pin
TR0
TH0
(8 bits)
P3.5
GATE
RL_TL0
(8 bits)
INT0
T0CLKO
control
RL_TH0
(8 bits)
定时器/计数器0的模式 0: 16位自动重装
T0CLKO
STC创新设计,请不
要再抄袭,再抄袭就
很无耻了
当T0CLKO/INT_CLKO.0=1且定时器/计数器T0工作在定时器模式2(8位自动重装模式)时,(如下图所示)
如果C/T=0,定时器/计数器T0对内部系统时钟计数,则:
T0工作在1T模式(AUXR.7/T0x12=1)时的输出����
时钟��
频率=(SYSclk) / (256-TH0) / 2
T0工作在12T模式(AUXR.7/T0x12=0)时的输出����
时钟��
频率=(SYSclk) / 12 / (256-TH0) / 2
如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则:
600
输出����
时钟��
频率 = (T0_Pin_CLK) / (256-TH0) / 2
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
AUXR.7/T0x12=0
÷12
TF0
Interrupt
SYSclk
÷1
AUXR.7/T0x12=1
Toggle
C/T=0
TL0
(8 Bits)
C/T=1
T0 Pin
TR0
T0CLKO
control
GATE
P3.5
T0CLKO
TH0
(8 Bits)
INT0
定时器/计数器0的模式 2: 8位自动重装
特别注意:对于STC15W1K16S系列和STC15W408S单片机,若要使用T0CLKO时钟输出功能,必须将P3.5口
设置为强推挽输出模式。
下面是定时器0对内部系统时钟或外部引脚T0/P3.4的时钟输入进行可编程时钟分频输
出的程序举例(C和汇编):
1. C程序:
d
e
t
i
im
L
/*--------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/
/* --- 研发顾问QQ:800003751------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -----------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*---------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 18432000L
//----------------------------------------------sfr
AUXR
=
0x8e;
sfr
INT_CLKO
=
0x8f;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
sbit
//定时器0的时钟输出脚
T0CLKO
#define F38_4KHz
//#define F38_4KHz
南通国芯微电子有限公司
=
P3^5;
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
总机:0513-5501 2928 / 2929 / 2966
//1T模式
//12T模式
传真:0513-5501 2969 / 2956 / 2947
601
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
//----------------------------------------------void main()
{
AUXR |=
0x80;
//
AUXR &=
~0x80;
TMOD =
0x00;
TMOD &=
TMOD |=
~0x04;
0x04;
TL0
=
TH0
=
TR0
=
INT_CLKO
F38_4KHz;
F38_4KHz >> 8;
1;
=
0x01;
while (1);
//
//设置定时器为模式0(16位自动重装载)
//C/T0=0, 对内部时钟进行时钟输出
//C/T0=1, 对T0引脚的外部时钟进行时钟输出
//初始化计时值
d
e
t
i
im
//使能定时器0的时钟输出功能
//程序终止
}
U
C
M
2. 汇编程序:
研发顾问Tel:13922805190
//定时器0为1T模式
//定时器0为12T模式
临时技术支持Tel:13922829991
L
/*--------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------------------------------------------------------*/
/* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/
/* --- 研发顾问QQ:800003751------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -----------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*---------------------------------------------------------------------------------------------*/
C
T
S
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
DATA 08EH
DATA 08FH
T0CLKO
BIT
P3.5
F38_4KHz
EQU 0FF10H
//F38_4KHz
EQU 0FFECH
//-----------------------------------------------
602
南通国芯微电子有限公司
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器0的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下,(65536-18432000/2/12/38400)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
ORG 0000H
LJMP MAIN
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//复位入口
//定时器0为1T模式
//定时器0为12T模式
//----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#3FH
//
ORL AUXR, #80H
ANL AUXR, #7FH
MOV TMOD, #00H
//设置定时器为模式0(16位自动重装载)
ANL TMOD, #0FBH
ORL TMOD, #04H
//C/T0=0, 对内部时钟进行时钟输出
//C/T0=1, 对T0引脚的外部时钟进行时钟输出
//
MOV
MOV
SETB
MOV
TL0,
#LOW F38_4KHz
TH0,
#HIGH F38_4KHz
TR0
INT_CLKO,
#01H
SJMP $
C
T
S
;----------------------------------------------
END
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
//初始化计时值
L
//使能定时器0的时钟输出功能
//程序终止
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
603
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8.4 定时器1对系统时钟或外部引脚T1的时钟输入进行可编程分频输出
——及测试程序(C和汇编)
如何利用T1CLKO/P3.4管脚输出时钟
T1CLKO/P3.4管脚是否�����
输出时钟由INT_CLKO (AUXR2)寄存器的T1CLKO位控制
AUXR2.1 - T1CLKO : 1,������
允许时钟输出
0,������
禁止时钟输出
T1CLKO的输出时钟频率由定时器1控制,相应的定时器1需要工作在定时器的���������
模式0(16位自动
重装载模式)或���������������������������������������
模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中断�
,
当然在特殊情况下也可允许相应的定时器中断。
新增加的特殊功能寄存器: INT_CLKO (AUXR2)(地址:0x8F)
d
e
t
i
im
当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。
输出时钟频率 = T1 溢出率/2
若定时器/计数器T1工作在定时器模式0(16位自动重装载模式)时,(如下图所示)
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
L
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2
U
C
M
T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
输出����
时钟��
频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2
RL_TH0为TH1的重装载寄存器,RL_TL1为TL0的重装载寄存器。
C
T
S
AUXR.6/T1x12=0
÷12
Interrupt
TF1
SYSclk
÷1
AUXR.6/T1x12=1
Toggle
C/T=0
TL1
(8 bits)
C/T=1
T1 Pin
TR1
TH1
(8 bits)
T1CLKO
control
P3.4
GATE
RL_TL1
(8 bits)
INT1
RL_TH1
(8 bits)
定时器/计数器1的模式 0: 16位自动重装
T1CLKO
STC创新设计,请不
要再抄袭,再抄袭就
很无耻了
当T1CLKO/INT_CLKO.1=1且定时器/计数器T1工作在定时器模式2(8位自动重装模式)时,(如下图所示)
如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则:
T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2
T1工作在12T模式����������������������
(AUXR.6/T1x12=0)������
时的输出频率 = (SYSclk)/12/(256-TH1)/2
如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则:
604
输出����
时钟��
频率 = (T1_Pin_CLK) / (256-TH1) / 2
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
AUXR.6/T1x12=0
÷12
TF1
Interrupt
SYSclk
÷1
AUXR.6/T1x12=1
Toggle
C/T=0
TL1
(8 Bits)
C/T=1
T1 Pin
TR1
T1CLKO
control
GATE
P3.4
T1CLKO
TH1
(8 Bits)
INT1
定时器/计数器1的模式 2: 8位自动重装
下面是定时器1对内部系统时钟或外部引脚T1/P3.5的时钟输入进行可编程时钟分频输
出的程序举例(C和汇编):
d
e
t
i
im
1. C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出-----------------------*/
/* --- 研发顾问QQ:800003751-------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
C
T
S
U
C
M
L
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
//----------------------------------------------sfr AUXR
=
0x8e;
sfr INT_CLKO =
0x8f;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
sbit T1CLKO =
P3^4;
//定时器1的时钟输出脚
#define F38_4KHz
//#define F38_4KHz
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
//1T模式
//12T模式
传真:0513-5501 2969 / 2956 / 2947
605
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
//---------------------------------------------void main()
{
AUXR |=
0x40;
//
AUXR &=
~0x40;
TMOD =
0x00;
TMOD &=
TMOD |=
~0x40;
0x40;
TL1
=
TH1
=
TR1
=
INT_CLKO
F38_4KHz;
F38_4KHz >> 8;
1;
=
0x02;
while (1);
//
//设置定时器为模式1(16位自动重装载)
//C/T1=0, 对内部时钟进行时钟输出
//C/T1=1, 对T1引脚的外部时钟进行时钟输出
//初始化计时值
//程序终止
U
C
M
C
T
S
d
e
t
i
im
//使能定时器1的时钟输出功能
}
2. 汇编程序:
研发顾问Tel:13922805190
//定时器1为1T模式
//定时器1为12T模式
临时技术支持Tel:13922829991
L
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------*/
/* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出-----------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/
/*-----------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
DATA 08EH
DATA 08FH
T1CLKO
BIT
F38_4KHz
EQU
//F38_4KHz EQU
606
P3.4
0FF10H
0FFECH
南通国芯微电子有限公司
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器1的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下, (65536-18432000/2/12/38400)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
ORG 0000H
LJMP MAIN
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//复位入口
//---------------------------------------------- ORG 0100H
MAIN:
MOV SP,
#3FH
//
//
ORL AUXR, #40H
ANL AUXR, #0BFH
MOV TMOD, #00H
ANL TMOD, #0BFH
ORL TMOD, #40H
MOV
MOV
SETB
MOV
SJMP $
//设置定时器为模式0(16位自动重装载)
//C/T1=0, 对内部时钟进行时钟输出
//C/T1=1, 对T1引脚的外部时钟进行时钟输出
TL1, #LOW F38_4KHz
TH1, #HIGH F38_4KHz
TR1
INT_CLKO,
#02H
d
e
t
i
im
//初始化计时值
U
C
M
C
T
S
//定时器1为1T模式
//定时器1为12T模式
L
//使能定时器1的时钟输出功能
//程序终止
;----------------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
607
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8.5 定时器2对系统时钟或外部引脚T2的时钟输入进行可编程分频输出
——及测试程序(C和汇编)
T2可以当定时器用,也可以当串口的波特率发生器和可编程时钟输出。
定时器2的原理框图如下:
÷12
AUXR.2/T2x12=0
T2 Interrupt
SYSclk
÷1
Toggle
AUXR.2/T2x12=1
T2_C/T=0
T2L
(8 bits)
T2_C/T=1
T2 Pin / P3.1
T2H
(8 bits)
T2CLKO
control
P3.0
T2R
RL_TL2
(8 bits)
RL_TH2
(8 bits)
T2CLKO
d
e
t
i
im
定时器/计数器2的工作模式: 16位自动重装载
L
STC创新设计,请不
要再抄袭,再抄袭就
很无耻了
如何利用T2CLKO/P3.0管脚输出时钟
AUXR2.2 - T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO
1: 允许将P3.0脚���
配置为定时器2(T2)的时钟输出T2CLKO,
0: 不允许�
将P3.0脚���
配置为定时器2(T2)的时钟输出T2CLKO
C
T
S
U
C
M
当T2CLKO/INT_CLKO.2=1时,P3.0管脚配置为定时器2的时钟输出T2CLKO。
输出时钟频率 = T2 溢出率/2
如果T2_C/T=0,定时器/计数器T2对内部系统时钟计数,则:
T2工作在1T模式(AUXR.2/T2x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH2, RL_TL2])/2
T2工作在12T模式(AUXR.2/T2x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH2, RL_TL2])/2
如果T2_C/T=1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则:
输出����
时钟��
频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2
RL_TH2为T2H的重装载寄存器,RL_TL2为T2L的重装载寄存器。
用户在程序中如何具体设置T2CLKO/P3.0管脚输出时钟
1.对���
定时器2寄存器T2H/T2L送16位重装载值, [T2H,T2L] = #reload_data
2.对AUXR寄存器中的T2R位置1,让������
定时器���
2运行
3.对AUXR2/INT_CLKO寄存器中的T2CLKO位置1,让��������
定时器�����
2的溢出在P3.0口输出时钟�
。
注意:当定时器/计数器2用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复
进中断,在特殊情况下也可允许定时器/计数器2中断。
608
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
下面是定时器2对内部系统时钟或外部引脚T2/P3.1的时钟输入进行可编程时钟分频输
出的程序举例(C和汇编):
1. C程序:
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ---------------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2的可编程时钟分频输出举例------------------------*/
/* --- 研发顾问QQ:800003751------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可---------*/
/*-------------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
typedef unsigned char
typedef unsigned int
U
C
M
BYTE;
WORD;
C
T
S
d
e
t
i
im
L
#define FOSC 18432000L
//----------------------------------------------sfr
sfr
sfr
sfr
AUXR
INT_CLKO
T2H
T2L
=
=
=
=
0x8e;
0x8f;
0xD6;
0xD7;
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器2高8位
//定时器2低8位
sbit
T2CLKO
=
P3^0;
//定时器2的时钟输出脚
#define F38_4KHz
//#define F38_4KHz
(65536-FOSC/2/38400)
(65536-FOSC/2/12/38400)
//1T模式
//12T模式
//----------------------------------------------void main()
{
AUXR |=
//
AUXR &=
南通国芯微电子有限公司
0x04;
~0x04;
总机:0513-5501 2928 / 2929 / 2966
//定时器2为1T模式
//定时器2为12T模式
传真:0513-5501 2969 / 2956 / 2947
609
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
//
AUXR &=
AUXR |=
~0x08;
0x08;
T2L
T2H
F38_4KHz;
F38_4KHz >> 8;
AUXR |=
INT_CLKO
0x10;
=
while (1);
=
=
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//T2_C/T=0, 对内部时钟进行时钟输出
//T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出
0x04;
//初始化计时值
//定时器2开始计时
//使能定时器2的时钟输出功能
//程序终止
}
d
e
t
i
im
2. 汇编程序:
L
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ---------------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 定时器2可编程时钟分频输出举例---------------------------*/
/* --- 研发顾问QQ:800003751------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可---------*/
/*-------------------------------------------------------------------------------------------------------*/
U
C
M
C
T
S
//假定测试芯片的工作频率为18.432MHz
AUXR
INT_CLKO
T2H
T2L
DATA
DATA
DATA
DATA
T2CLKO
BIT
F38_4KHz
//F38_4KHz
EQU
EQU
08EH
08FH
0D6H
0D7H
P3.0
0FF10H
0FFECH
//辅助特殊功能寄存器
//唤醒和时钟输出功能寄存器
//定时器2高8位
//定时器2低8位
//定时器2的时钟输出脚
//38.4KHz(1T模式下, 65536-18432000/2/38400)
//38.4KHz(12T模式下, (65536-18432000/2/12/38400)
//-----------------------------------------------
610
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
ORG 0000H
LJMP MAIN
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//复位入口
//定时器2为1T模式
//定时器2为12T模式
//----------------------------------------
MAIN:
ORG 0100H
//
ORL AUXR, #04H
ANL AUXR, #0FBH
//
ANL AUXR, #0F7H
ORL AUXR, #08H
MOV SP,
MOV
MOV
ORL
MOV
SJMP
#3FH
//T2_C/T=0, 对内部时钟进行时钟输出
//T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出
T2L,
#LOW F38_4KHz
T2H,
#HIGH F38_4KHz
AUXR, #10H
INT_CLKO, #04H
$
END
南通国芯微电子有限公司
CU
;----------------------------------------------
C
T
S
M
总机:0513-5501 2928 / 2929 / 2966
d
e
t
i
im
//初始化计时值
L
//定时器2开始计时
//使能定时器2的时钟输出功能
//程序终止
传真:0513-5501 2969 / 2956 / 2947
611
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8.6 定时器3对系统时钟或外部引脚T3的时钟输入进行可编程分频输出
——及测试程序(C和汇编)
T3可以当定时器用,也可以当串口3的波特率发生器和可编程时钟输出。
定时器3的原理框图如下:
÷12
T4T3M.1/T3x12=0
T3 Interrupt
SYSclk
÷1
Toggle
T4T3M.1/T3x12=1
T3_C/T=0
T3L
(8 bits)
T3_C/T=1
T3 Pin / P0.7
T3H
(8 bits)
T3CLKO
control
P0.6
T3R
RL_TL3
(8 bits)
RL_TH3
(8 bits)
T3CLKO
d
e
t
i
im
定时器/计数器3的工作模式: 16位自动重装载
L
STC创新设计,请不
要再抄袭,再抄袭就
很无耻了
如何利用T3CLKO/P0.6管脚输出时钟
T4T3M.0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO
1: 允许将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO,
0: 不允许�
将P0.6脚���
配置为定时器3(T3)的时钟输出T3CLKO
C
T
S
U
C
M
当T3CLKO/T4T3M.0=1时,P0.6管脚配置为定时器3的时钟输出T3CLKO。
输出时钟频率 = T3 溢出率/2
如果T3_C/T=0,定时器/计数器T3对内部系统时钟计数,则:
T3工作在1T模式(T4T3M.1/T3x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH3, RL_TL3])/2
T3工作在12T模式(T4T3M.1/T3x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH3, RL_TL3])/2
如果T3_C/T=1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则:
输出����
时钟��
频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2
RL_TH3为T3H的重装载寄存器,RL_TL3为T3L的重装载寄存器。
用户在程序中如何具体设置T3CLKO/P0.6管脚输出时钟
1.对���
定时器3寄存器T3H/T3L送16位重装载值, [T3H,T3L] = #reload_data
2.对T4T3M寄存器中的T3R位置1,让������
定时器���
3运行
3.对T4T3M寄存器中的T3CLKO位置1,让��������
定时器�����
3的溢出在P0.6口输出时钟�
。
注意:当定时器/计数器3用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复
进中断,在特殊情况下也可允许定时器/计数器3中断。
612
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
7.8.7 定时器4对系统时钟或外部引脚T4的时钟输入进行可编程分频输出
——及测试程序(C和汇编)
T4可以当定时器用,也可以当串口4的波特率发生器和可编程时钟输出。
定时器4的原理框图如下:
÷12
T4T3M.5/T4x12=0
T4 Interrupt
SYSclk
÷1
Toggle
T4T3M.5/T4x12=1
T4_C/T=0
T4L
(8 bits)
T4_C/T=1
T4 Pin / P0.5
T4H
(8 bits)
T4CLKO
control
P0.4
T4R
RL_TL4
(8 bits)
RL_TH4
(8 bits)
T4CLKO
d
e
t
i
im
定时器/计数器4的工作模式: 16位自动重装载
L
STC创新设计,请不
要再抄袭,再抄袭就
很无耻了
如何利用T4CLKO/P0.4管脚输出时钟
T4T3M.4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO
1: 允许将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO,
0: 不允许�
将P0.4脚���
配置为定时器4(T4)的时钟输出T4CLKO
C
T
S
U
C
M
当T4CLKO/T4T3M.4=1时,P0.4管脚配置为定时器4的时钟输出T4CLKO。
输出时钟频率 = T4 溢出率/2
如果T4_C/T=0,定时器/计数器T4对内部系统时钟计数,则:
T4工作在1T模式(T4T3M.5/T4x12=1)时的输出����
时钟��
频率 = (SYSclk)/(65536-[RL_TH4, RL_TL4])/2
T4工作在12T模式(T4T3M.5/T4x12=0)时的输出����
时钟��
频率=(SYSclk)/12/(65536-[RL_TH4, RL_TL4])/2
如果T4_C/T=1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则:
输出����
时钟��
频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2
RL_TH4为T4H的重装载寄存器,RL_TL4为T4L的重装载寄存器。
用户在程序中如何具体设置T4CLKO/P0.4管脚输出时钟
1.对���
定时器4寄存器T4H/T4L送16位重装载值, [T4H,T4L] = #reload_data
2.对T4T3M寄存器中的T4R位置1,让������
定时器���
4运行
3.对T4T3M寄存器中的T4CLKO位置1,让��������
定时器�����
4的溢出在P0.4口输出时钟�
。
注意:当定时器/计数器4用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复
进中断,在特殊情况下也可允许定时器/计数器4中断。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
613
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.8 掉电唤醒专用定时器及测试程序(C和汇编)
——进入掉电模式后可将单片机唤醒
——以15L开头的单片机进入掉电模式前必须启动掉电唤醒定时器
特别声明:以15L开头的芯片如需进入"掉电模式",进入"掉电模式"前必须启动掉电唤醒定时器
,不超过3秒要唤醒一次,以15F和15W开头的芯片则不需要
STC15系列�����������������������������������
部分���������������������������������
单片机������������������������������
新增了内部掉电唤醒定时器,�����������������
在进入��������������
停机模式/���������
掉电模式后,除了可
以通过外部中断源进行唤醒外,还可以在无外部中断源的情况下通过使能内部掉电唤醒定时器
定期唤醒CPU,使其恢复到正常工作状态。
掉电唤醒专用定时器的功耗:3V器件典型值低于3uA;5器件典型值低于5uA。
d
e
t
i
im
STC15�����������������������������������������
系列单片机的内部低功耗掉电唤醒专用定时器由特殊功能寄存器WKTCH和WKTCL进行
管理和控制。
WKTCL(不可位寻址)
SFR name Address
WKTCL
AAH
bit
B7
WKTCH
ABH
C
T
S
B5
B4
L
B3
B2
B1
B0
M
name
WKTCH(不可位寻址)
SFR name Address
CU
B6
bit
B7
name
WKTEN
B6
B5
Reset Value
1111 11110B
B4
B3
B2
B1
B0
Reset Value
0111 1111B
内部掉电唤醒定时器是一个15位定时器,{WKTCH[6:0],WKTCL[7:0]}构成最长15位计数值
(32768个),定时从0开始计数。
WKTEN:内部停机唤醒定时器的使能控制位。
WKTEN=1,允许内部停机唤醒定时器;
WKTEN=0,禁止内部停机唤醒定时器;
STC15系列有内部低功耗掉电唤醒专用定时器的单片机除增加了特殊功能寄存器WKTCL和
WKTCH,还设计了了2个隐藏的特殊功能寄存器WKTCL_CNT和WKTCH_CNT来控制内部掉电唤醒专用
定时器。WKTCL_CNT与WKTCL共用同一个地址,WKTCH_CNT与WKTCH共用同一个地址,WKTCL_CNT
和WKTCH_CNT是隐藏的,对用户不可见。WKTCL_CNT和WKTCH_CNT实际上是作计数器使用,而
WKTCL和WKTCH实际上作比较器使用。当用户对WKTCL和WKTCH写入内容时,该内容只写入寄存器
WKTCL和WKTCH中,而不会写入WKTCL_CNT和WKTCH_CNT中。当用户读寄存器WKTCL和WKTCH中的内
容时,实际上读的是寄存器WKTCL_CNT和WKTCH_CNT中的内容,而不是WKTCL和WKTCH中的内容。
614
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
特殊功能寄存器WKTCL_CNT和WKTCH_CNT的格式如下所示:
WKTCL_CNT
SFR name
Address
bit
WKTCL_CNT
AAH
name
B7
B6
B5
B4
B3
B2
B1
B0
Reset Value
1111 1111B
WKTCH_CNT
SFR name
Address
bit
B7
WKTCH_CNT
ABH
name
-
B6
B5
B4
B3
B2
B1
B0
Reset Value
x111 1111B
通过软件将WKTCH寄存器中的WKTEN(Power Down Wakeup Timer Enable)位置‘1’,使
能内部掉电唤醒专用定时器�����������������������������������
。����������������������������������
一旦MCU进入Power Down Mode,内部掉电唤醒专用定时器
[WKTCH_CNT,WKTCL_CNT]���������������������������������������������
就从7FFFH��������������������������������������
开始计数,直到计数到与{WKTCH[6:0],WKTCL[7:0]}寄存器所
设定的计数值相等后就���������������������������������
让系统时钟开始振荡。如果主时钟使用的是内部系统时钟��������
(由用户在ISP
烧录程序时自行设置)����������������������������������
,���������������������������������
MCU������������������������������
在�����������������������������
等待64个时钟后���������������������
,就�������������������
认为此时系统时钟从开始起振的不稳定状态
已经过渡到稳定状态,���������������������������������
就��������������������������������
将时钟供给CPU工作����������������������
。如果主时钟使用的是外部晶体或时钟�����
(由用户在
ISP烧录程序时自行设置)���������������������������������
,��������������������������������
MCU�����������������������������
在����������������������������
等待1024个时钟后������������������
,就����������������
认为此时系统时钟从开始起振的不稳
定状态已经过渡到稳定状态,才将时钟供给CPU工作��������������������
。�������������������
CPU获得时钟后,程序从上次�����
设置单片机
进入掉电模式语句的下一条语句开始往���������������������������������
下执行。�����������������������������
掉电唤醒之后,����������������������
WKTCH_CNT�������������
和������������
WKTCL_CNT���
的内容
保持不变,因此可以通过读[��������������������������������������������
WKTCH,WKTCL]��������������������������������
的内容(实际上是读[����������������������
WKTCH_CNT,WKTCL_CNT]��
的内
容)读出单片机在停机模式/掉电模式所等待的时间。
C
T
S
U
C
M
d
e
t
i
im
L
这里请注意:用户在设置寄存器������������������������������������
{WKTCH[6:0],WKTCL[7:0]}的计数值���������
时,要按照所需要的
计数次数,在计数次数的基础上减1所得的数值才是������������������������
{WKTCH,WKTCL������������
}的计数值。如用户需计数
10次,则将9写入寄存器��������������������������������������������
{WKTCH[6:0],WKTCL[7:0]}���������������������
中。同样,如果用户需计数32768次,则应
对���������������������������������������
{WKTCH[6:0],WKTCL[7:0]}����������������
写入7FFFH(即32767)。
内部掉电唤醒定时器有自己的内部时钟,其中掉电唤醒定时器计数一次的时间就是由该时
钟决定的。内部掉电唤醒定时器的时钟频率约为32768Hz,当然误差较大。对于16-pin及其以
上的单片机,用户可以通过读RAM区F8单元和F9单元的内容来获取内部掉电唤醒专用定时器常
温下的时钟频率。对于8-pin单片机即STC15F101W系列,用户可以通过读RAM区78单元和79单元
的内容来获取内部掉电唤醒专用定时器常温下的时钟频率。下面以16-pin及其以上的单片机为
例,介绍如何计算内部掉电唤醒专用定时器的计数时间。
假设我们用[WIRC_H,WIRC_L]来表示从RAM区F8单元和F9单元获取到的内部掉电唤醒专用
定时器常温下的时钟频率,则���������������������
内部掉电唤醒专用定时器计数时间������
按下式计算:
内部掉电唤醒专用定时器计数时间 =
南通国芯微电子有限公司
106 uS
数
x 16 x 计数次�
[WIRC_H, WIRC_L]
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
615
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
例如:��������������������������������������������
假设读到RAM区F8单元的内容为80H,F9单元的内容为00H,即内部掉电唤醒定时器的时
钟频率[WIRC_H,WIRC_L]为32768Hz,则��������������������
内部掉电唤醒专用定时器最短计数时间(��
即�
计
6
数一次的时间)为���
: 10 uS x 16 x ��1 ≈ 488.28 uS
�� ������� ��
32768
内部掉电唤醒专用定时器最长计数时间约为 488.28us x 32768 = 16S
设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������
(即计数10次)且内部掉电唤醒定时器
的时钟频率[WIRC_H,WIRC_L]为32768Hz, 则从系统掉电到启动系统振荡器,所需要
等待的时间为 488.28uS x 10 ≈ 4882.8uS
设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于32767(������
即�����
最大���
计数�
值 = 32768 = 215)�
且
内部掉电唤醒定时器的时钟频率[WIRC_H,WIRC_L]为32768Hz, 则从系统掉电到启动
系统振荡器,所需要等待的时间为 488�������������������
.28����������������
uS x 32768 = 16S
d
e
t
i
im
下面给出了在读到RAM区F8单元的内容为80H,F9单元的内容为00H,即内部掉电唤醒定
时器的时钟频率[WIRC_H,WIRC_L]为32768Hz情况下,��������������
内部掉电唤醒专用定时器���
的��
计数
时间�
:
488.28uS x 1 = 488.28uS
{WKTCH[6:0],WKTCL[7:0]} = 0,
{WKTCH[6:0],WKTCL[7:0]} = 9,
488.28uS x 10 = 4.8828mS
{WKTCH[6:0],WKTCL[7:0]} = 99,
488.28uS x 100 = 48.828mS
{WKTCH[6:0],WKTCL[7:0]} = 999,
488.28uS x 1000 = 488.28mS
{WKTCH[6:0],WKTCL[7:0]} = 4095,
488.28uS x 4096 = 2.0S
{WKTCH[6:0],WKTCL[7:0]} = 32767, 488.28uS x 32768=16S
C
T
S
U
C
M
L
再假设读到RAM区F8单元的内容为79H,F9单元的内容为18H,即内部掉电唤醒定时器的时钟频
率[WIRC_H,WIRC_L]为31000Hz,则����������������������
内部掉电唤醒专用定时器最短计数时间(����
即���
计数一
6
10
uS
次的时间)为���
:
x 16 x ��1 ≈ 516.13 uS
�� ������� ��
31000
内部掉电唤醒专用定时器最长计数时间约为 516.13us x 32768 ≈ 16.9S
设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������
(即计数10次)且内部掉电唤醒定时器
的时钟频率[WIRC_H,WIRC_L]为31000Hz, 则从系统掉电到启动系统振荡器,所需要
等待的时间为 516.13uS x 10 ≈ 5161.3uS
下面给出了在读到RAM区F8单元的内容为79H,F9单元的内容为18H,即内部掉电唤醒定
时器的时钟频率[WIRC_H,WIRC_L]为31000Hz情况下,��������������
内部掉电唤醒专用定时器���
的��
计数
时间�
:
516.13uS x 1 ≈ 516.13uS
{WKTCH[6:0],WKTCL[7:0]} = 0,
{WKTCH[6:0],WKTCL[7:0]} = 9,
516.13uS x 10 ≈ 5.1613mS
{WKTCH[6:0],WKTCL[7:0]} = 99,
516.13uS x 100 ≈ 51.613mS
616
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
{WKTCH[6:0],WKTCL[7:0]} = 999,
{WKTCH[6:0],WKTCL[7:0]} = 4095,
{WKTCH[6:0],WKTCL[7:0]} = 32767,
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
516.13uS x 1000 ≈ 516.13mS
516.13uS x 4096 ≈ 2.1S
516.13uS x 32768≈16.9S
又假设读到RAM区F8单元的内容为80H,F9单元的内容为E8H,即内部掉电唤醒定时器的时钟频
率[WIRC_H,WIRC_L]为33000Hz,则����������������������
内部掉电唤醒专用定时器最短计数时间(����
即���
计数一
次的时间)为���
: 106 uS x 16 x ��1 ≈ 484.
�� ���������
85uS
33000
内部掉电唤醒专用定时器最长计数时间约为 484. 85us x 32768 ≈ 15.89S
设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������
(即计数10次)且内部掉电唤醒定时器
的时钟频率[WIRC_H,WIRC_L]为33000Hz, 则从系统掉电到启动系统振荡器,所需要
等待的时间为 484. 85uS x 10 ≈ 4848.5uS
d
e
t
i
im
下面给出了在读到RAM区F8单元的内容为80H,F9单元的内容为E8H,即内部掉电唤醒定
时器的时钟频率[WIRC_H,WIRC_L]为33000Hz情况下,��������������
内部掉电唤醒专用定时器���
的��
计数
时间�
:
484. 85uS x 1 ≈ 484. 85uS
{WKTCH[6:0],WKTCL[7:0]} = 0,
{WKTCH[6:0],WKTCL[7:0]} = 9,
484. 85uS x 10 ≈ 4.8485mS
{WKTCH[6:0],WKTCL[7:0]} = 99,
484. 85uS x 100 ≈ 48.485mS
{WKTCH[6:0],WKTCL[7:0]} = 999,
484. 85uS x 1000 ≈ 484. 85mS
{WKTCH[6:0],WKTCL[7:0]} = 4095,
484. 85uS x 4096 ≈ 1.986S
{WKTCH[6:0],WKTCL[7:0]} = 32767, 484. 85uS x 32768≈15.89S
C
T
S
U
C
M
L
如果掉电唤醒定时器被允许(WKTEN=1),同时用户也将外部中断打开了。进入掉地模
式后,当外部中断提前将单片机从停机模式唤醒时,可以通过读WKTCL和WKTCH的内容(实
际是读WKTCL_CNT和WKTCH_CNT中的内容),可以读出单片机在停机模式/掉电模式等待的
时间。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
617
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
/*利用内部专用掉电唤醒定时器来唤醒掉电模式的示例程序(C程序)
1. C程序:
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------------*/
/-/* --- 演示STC15F2K60S2 系列 掉电唤醒定时器举例----------------------------------------*/
/* --- 研发顾问QQ:800003751---------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
d
e
t
i
im
#include "reg51.h"
#include "intrins.h"
//----------------------------------------------sfr
sfr
WKTCL =
WKTCH =
0xaa;
0xab;
sbit
P10
P1^0;
=
U
C
M
L
//掉电唤醒定时器计时低字节
//掉电唤醒定时器计时高字节
C
T
S
//----------------------------------------------void main()
{
WKTCL =
WKTCH =
while (1)
{
}
49;
0x80;
//设置唤醒周期为488us*(49+1) = 24.4ms
//使能掉电唤醒定时器
PCON = 0x02;
_nop_();
_nop_();
P10 = !P10;
//进入掉电模式
//掉电唤醒后,取反测试口
}
618
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 汇编程序:
/*---------------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. ----------------------------------------------------------------------------*/
/-/* --- 演示STC15F2K60S2 系列 掉电唤醒定时器举例----------------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
WKTCL
WKTCH
DATA 0AAH
DATA 0ABH
//----------------------------------------
ORG 0000H
LJMP MAIN
U
C
M
//复位入口
//-----------------------------------------
C
T
S
MAIN:
ORG 0100H
LOOP:
MOV WKTCL, #49
MOV WKTCH, #80H
MOV SP,
d
e
t
i
im
//掉电唤醒定时器计时低字节
//掉电唤醒定时器计时高字节
L
#3FH
MOV PCON, #02H
NOP
NOP
CPL P1.0
JMP LOOP
//设置唤醒周期为488us*(49+1) = 24.4ms
//使能掉电唤醒定时器
//进入掉电模式
//掉电唤醒后,取反测试口
SJMP $
;----------------------------------------
END
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
619
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7.9 外部管脚T0/T1/T2/T3/T4如何唤醒掉电模式/停机模式
如果定时器(T0/T1/T2/T3/T4)的中断在进入掉电模式/停机模式前已经被允许,即ET0/
ET1/ET2/ET3/ET4及EA在进入掉电模式/停机模式前已经被置为1,则进入掉电模式/停机模
式后定时器仍继续工作,且定时器T0/T1/T2/T3/T4的外部管脚(T0/P3.4,T1/P3.5,T2/P3.1,T3/
P0.7,T4/P0.5)如发生由高到低的变化可以将MCU从掉电模式/停机模式唤醒。当MCU由定时器T0/
T1/T2/T3/T4的外部管脚由高到低的变化唤醒时,如果主时钟使用的是内部系统时钟�����
(由用户在
ISP烧录程序时自行设置)��������������������������������
,�������������������������������
MCU����������������������������
在���������������������������
等待64个时钟后�������������������
,就�����������������
认为此时系统时钟从开始起振的不稳定
状态已经过渡到稳定状态,�������������������������������
就������������������������������
将时钟供给CPU工作��������������������
;如果主时钟使用的是外部晶体或时钟���
(由用
户在ISP烧录程序时自行设置)�������������������������������
,������������������������������
MCU���������������������������
在��������������������������
等待1024个时钟后����������������
,就��������������
认为此时系统时钟从开始起振的
不稳定状态已经过渡到稳定状态,�����������������������������
就����������������������������
将时钟供给CPU工作������������������
;�����������������
CPU获得时钟后,程序从上次���
设置单
片机进入掉电模式语句的下一条语句开始往������������������
下执行���������������
,不进入相应定时器的中断程序。
C
T
S
620
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
第8章 串行口通信
除STC15F101W系列无串行口功能外,其他STC15系列单片机都有串行口功能,其中STC15W4K60S4系列单片机有4个高速异步串行通信端口、STC15F2K60S2系列单片机有2个高速异
步串行通信端口、STC15W1K16S/STC15W408S/STC15W408AS/STC15W201S/STC15F408AD
系列单片机有1个高速异步串行通信端口,如下表所示:
下表总结了STC15系列单片机内置了高速异步串行通信端口的单片机型号:
高速异步串行
通信端口
串行口1
串行口2
串行口3
串行口4
STC15W4K60S4系列
√
√
√
√
STC15F2K60S2系列
√
√
STC15W1K16S系列
√
STC15W408S系列
√
STC15W408AS系列
√
STC15W201S系列
√
STC15F408AD系列
√
单片机型号
STC15F101W系列
C
T
S
U
C
M
d
e
t
i
im
L
上表中√表示对应的系列有相应的串行口。
现以STC15W4K60S4系列单片机为例,介绍STC15系列单片机的串行通信端口。
STC15W4K60S4系列单片机具有4个采用UART(Universal Asychronous Receiver/Transmitter)
工作方式的全双工异步串行通信接口(串口1、串口2、串口3和串口4)。每个串行口由2个数据
缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器等组成。每个串行口的数
据缓冲器由������������������������������������
2�����������������������������������
个互相独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只
能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。
串行口1的两个缓冲器共用的地址码是����������������������������
99H�������������������������
;串行口2的两个缓冲器共用的地址码是�������
9BH����
;串行口
3的两个缓冲器共用的地址码是�������������������������������
ADH����������������������������
;串行口4的两个缓冲器共用的地址码是����������
85H�������
。串行口1的两
个缓冲器统称串行通信特殊功能寄存器��������������������������
SBUF����������������������
;串行口2的两个缓冲器统称串行通信特殊功能寄
存器���������������������������������������������
S2BUF����������������������������������������
;串行口3的两个缓冲器统称串行通信特殊功能寄存器����������������
S3BUF�����������
;串行口4的两个缓冲器
统称串行通信特殊功能寄存器������
S4BUF�
。
STC15W4K60S4系列单片机的串行口1有4种工作方式,其中两种方式的波特率是可变的,另
两种是固定的,以供不同应用场合选用。串行口2/串行口3/串行口4都只有两种工作方式,这
两种方式的波特率都是可变的。用户可用软件设置不同的波特率和选择不同的工作方式。主机
可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。
STC15W4K60S4系列单片机串行口1对应的硬件部分是TxD和RxD。串行口1可以在3组管
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
621
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
脚之间进行切换。通过设置特殊功能寄存器AUXR1/P_SW1中的位S1_S1/AUXR1.7和S1_S0/
P_SW1.6,可以将串行口1从[RxD/P3.0,TxD/P3.1]切换到[RxD_2/P3.6,TxD_2/P3.7],还可以切换
到[RxD_3/P1.6/XTAL2,TxD_3/P1.7/XTAL1]。注意,当串行口1在[RxD_2/P1.6, TxD_2/P1.7]时,
系统要使用内部时钟。串口1建议放在[P3.6/RxD_2,P3.7/TxD_2]或[P1.6/RxD_3/XTAL2,P1.7/
TxD_3/XTAL1]上。
STC15W4K60S4系列单片机串行口2对应的硬件部分是TxD2和RxD2。串行口2可以在2组
管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S2_S/P_SW2.0,可以将串行口2从
[RxD2/P1.0,TxD2/P1.1]切换到[RxD2_2/P4.6,TxD2_2/P4.7]。
STC15W4K60S4系列单片机串行口3对应的硬件部分是TxD3和RxD3。串行口3可以在2组
管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S3_S/P_SW2.1,可以将串行口3从
[RxD3/P0.0,TxD3/P0.1]切换到[RxD3_2/P5.0,TxD3_2/P5.1]。
d
e
t
i
im
STC15W4K60S4系列单片机串行口4对应的硬件部分是TxD4和RxD4。串行口4可以在2组
管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S4_S/P_SW2.2,可以将串行口4从
[RxD4/P0.2,TxD4/P0.3]切换到[RxD4_2/P5.2,TxD4_2/P5.3]。
L
STC15W4K60S4系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多
个并行I/O口,或作串����������������
—���������������
并转换,或用于扩展串行外设等。
C
T
S
622
南通国芯微电子有限公司
U
C
M
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.1 串行口1的相关寄存器
符号
描述
AUXR
定时器2高8位
寄存器
定时器2低8位
寄存器
辅助寄存器
SCON
Serial Control
T2H
T2L
位地址及符号
地址
LSB
复位值
D6H
0000 0000B
D7H
0000 0000B
8EH
T0x12 T1x12 UART_M0x6 T2R T2_C/T
98H
SM0/FE
SBUF
Serial Buffer
99H
PCON
Power Control
87H
IE
Interrupt Enable
A8H
IP
Interrupt Priority Low
SM1
SM2
REN
TB8
POF
GF1
ES
ET1
T2x12 EXTRAM S1ST2
RB8
TI
RI
GF0
PD
IDL
EX1
ET0
0000 0001B
0000 0000B
xxxx xxxxB
SMOD SMOD0 LVDF
EA
ELVD EADC
d
e
t
i
im
B8H PPCA PLVD PADC PS
SADEN
Slave Address Mask
B9H
SADDR
Slave Address
A9H
AUXR1
P_SW1
CLK_DIV
PCON2
辅助寄存器1
A2H
时钟分频寄存器
MSB
PT1
PX1
L
S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0
U
C
M
PT0
0
0011 0000B
EX0 0000 0000B
PX0 0000 0000B
0000 0000B
0000 0000B
DPS
0000 0000B
97H MCKO_S1 MCKO_S1 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000 0000B
C
T
S
1. 串行口1的控制寄存器SCON和PCON
STC15系列单片机的串行口1设有两个控制寄存器:串行控制寄存器SCON和波特率选择特
殊功能寄存器PCON。
串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下:
SCON : 串行控制寄存器 (可位寻址)
SFR name
SCON
Address
98H
bit
name
B7
SM0/FE
B6
SM1
B5
SM2
B4
REN
B3
TB8
B2
RB8
B1
TI
B0
RI
SM0/FE:当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个
无效停止位时,通过UART接收器设置该位。它必须由软件清零。
当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作
方式,如下表所示。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
623
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
其中SM0、SM1按下列组合确定串行口1的工作方式:
SM0 SM1 工作方式
0
0
0
1
方式0
方式1
功能说明
波特率
同步移位串行方
式:移位寄存器
当UART_M0x6 = 0时,波特率是SYSclk/12,
当UART_M0x6 = 1时,波特率是SYSclk / 2
8位UART,
波特率可变
串行口1用定时器1作为其波特率发生器且定时器1工作于模式
0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器
时,波特率=�(定时器1的溢出率或定时器T��������
2的溢出率)��
/4.
注意:此时波特率与SMOD无关。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�)
1
1
0
1
方式2
方式3
9位UART
9位UART,
波特率可变
(2
SMOD
/ 64) x SYSclk系统工作时钟频率
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器
时,波特率=�(定时器1的溢出率或定时器T��������
2的溢出率)��
/4.
注意:此时波特率与SMOD无关。
d
e
t
i
im
L
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�)
U
C
M
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且AUXR.6/T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ;
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且AUXR.6/T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1])
C
T
S
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk/12/( 256 - TH1);
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / ( 256 - TH1)
定时器T2的溢出率 = SYSclk / 12/ ( 65536 - [RL_TH2,RL_TL2] );
当AUXR.2/T2x12 = 0时,���
当AUXR.2/T2x12 = 1时,���
定时器T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] );
SM2:允许方式2或方式3多机通信控制位。
在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时
可以利用接收到的第9位(即RB8)来筛选地址帧:若RB8=1,说明该帧是地址帧,地址信
息可以进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较;若RB8=0,
说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位
为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的
信息进入SBUF,并使RI=1,此时RB8通常为校验位.
方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2 应为0。
REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动
串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。
624
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数
据的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0和方式1中,该位不用.
RB8: 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
方式0中不用RB8(置SM2=0). 方式1中也不用RB8(置SM2=0, RB8是接收到的停止位)。
TI:
发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,
即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中,
则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。
RI:
接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,
向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收
到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须
由软件清零。
d
e
t
i
im
SCON的所有位可通过整机复位信号复位为全�
“ 0”�
。 SCON的字节地址为98H,可位寻
址,各位地址为98H~~9FH,可用软件实现位设置。
L
串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理;
当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以���
“��
或逻
辑���������������������������
”��������������������������
关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在
中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬
件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。
C
T
S
U
C
M
电源控制寄存器PCON中的SMOD/PCON.7用于设置方式1、方式2、方式3的波特率是否加
倍。
电源控制寄存器PCON格式如下:
PCON : 电源控制寄存器 (不可位寻址)
SFR name Address
bit
B7
B6
B5
B4
B3
B2
B1 B0
PCON
87H
name SMOD SMOD0 LVDF POF GF1 GF0 PD IDL
SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波
特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。
SMOD0:帧错误检测有效控制位。当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误
检测)功能;当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指
定串行口的工作方式。复位时SMOD0=0
PCON中的其他位都与串行口1无关,在此不作介绍。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
625
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 串行口数据缓冲寄存器SBUF
STC15系列单片机的串行口1缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF
的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个
不同的寄存器,1个是只写寄存器,1个是只读寄存器。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号(MOV SBUF,A)
的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的
输出位。根据不同的工作方式会自动将�
“1”�
或TB8的值装入移位寄存器的第9位,并进行发送.
串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为
9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入
SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变.
由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位
寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中
将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。
3. 辅助寄存器AUXR
U
C
M
辅助寄存器AUXR的格式及各位含义如下:
AUXR : 辅助寄存器 (不可位寻址)
SFR name
Address
AUXR
8EH
bit
C
T
S
B7
B6
B5
name T0x12 T1x12 UART_M0x6
d
e
t
i
im
L
B4
B3
B2
T2R
T2_C/T
T2x12
B1
B0
EXTRAM S1ST2
T0x12: 定时器0速度控制位
0, 定时器0是传统8051速度,12分频;
1, 定时器0的速度是传统8051的12倍,不分频
T1x12: 定时器1速度控制位
0, 定时器1是传统8051速度,12分频;
1, 定时器1的速度是传统8051的12倍,不分频
如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口是12T还是1T
UART_M0x6: 串口模式0的通信速度设置位。
0, 串口1模式0的速度是传统8051单片机串口的速度,12分频;
1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频
T2R: 定时器2允许控制位
0, 不允许定时器2运行;
1, 允许定时器2运行
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
626
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
EXTRAM: 内部/外部RAM存取控制位
0, 允许使用逻辑上在片外、物理上在片内的扩展RAM;
1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM
S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位
0, 选择定时器1作为串口1(UART1)的波特率发生器;
1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为
独立定时器使用
串口1可以选择定时器1做波特率发生器,也可以选择�������������
定时器����������
2作为波特率发生器�
。当设置
AUXR寄存器中的S1ST2位(串������������������������������
行�����������������������������
口波特率选择位)为1时,串����������������
行���������������
口1选择�����������
定时器��������
2作为波特率发生
器,此时定时器1可以释放出来作为定时器/计数器/时钟输出使用.
d
e
t
i
im
L
对于����������������������������������������
STC15�����������������������������������
系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定时
器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1
作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为
其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波
特率发生器。
C
T
S
U
C
M
4. 定时器2的寄存器T2H, T2L
定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用
于保存重装时间常数。
注意:对于���������������������������������������
STC15����������������������������������
系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定
时器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器
1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为
其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波
特率发生器。
5. 从机地址控制寄存器SADEN和SADDR
为了方便多机通信,STC15系列单片机设置了从机地址控制寄存器SADEN和SADDR。其中
SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为
A9H,复位值为00H)。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
627
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6. 与串行口1中断相关的寄存器位ES和PS
串行口中断允许位ES位于中断允许寄存器IE中,中断允许寄存器的格式如下:
IE : 中断允许寄存器 (可位寻址)
SFR name
Address
bit
B7
IE
A8H
name
EA
B6
B5
ELVD EADC
B4
B3
B2
B1
B0
ES
ET1
EX1
ET0
EX0
EA : CPU的总中断允许控制位
EA=1,CPU开放中断,
EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的
中断允许控制位控制。
ES : 串行口中断允许位
ES=1,允许串行口中断,
ES=0,禁止串行口中断。
IP : 中断优先级控制寄存器低 (可位寻址)
SFR name
IP
Address
B8H
bit
name
B7
PPCA
B6
PLVD
B5
PADC
U
C
M
d
e
t
i
im
L
B4
PS
B3
PT1
B2
PX1
B1
PT0
B0
PX0
PS: 串行口1中断优先级控制位。
当PS=0时,串行口1中断为最低优先级中断(优先级0)
当PS=1时,串行口1中断为最高优先级中断(优先级1)
C
T
S
7. 将串口1进行切换的寄存器AUXR1(P_SW1)
Mnemonic Add Name
AUXR1
Auxiliary
A2H
P_SW1
register 1
B7
B6
S1_S1
S1_S0
B5
B4
B3
B2
CCP_S1 CCP_S0 SPI_S1 SPI_S0
B1
B0
Reset Value
0
DPS
0000,0000
串口1/�������������
S1�����������
可在3个地方切换,由 ��������
S1_S0 及 ������������
S1_S1 控制位来选择
S1_S1 S1_S0 串口1/S1可在P1/P3之间来回切换
0
0
串口1/S1在[P3.0/RxD,P3.1/TxD]
0
1
串口1/S1在[P3.6/RxD_2,P3.7/TxD_2]
串口1/S1在[P1.6/RxD_3/XTAL2,P1.7/TxD_3/XTAL1]
1
0
串口1在P1口时要使用内部时钟
1
1
无效
串口1建议放在[P3.6/RxD_2,P3.7/TxD_2]或[P1.6/RxD_3/XTAL2,P1.7/TxD_3/XTAL1]上。
628
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
CCP�����������������������������������
可在3个地方切换,由 CCP_S1 / CCP_S0 两个控制位来选择
CCP_S1 CCP_S0 CCP可在P1/P2/P3之间来回切换
0
0
CCP在[P1.2/ECI,P1.1/CCP0,P1.0/CCP1,P3.7/CCP2]
0
1
CCP在[P3.4/ECI_2,P3.5/CCP0_2,P3.6/CCP1_2,P3.7/CCP2_2]
1
0
CCP在[P2.4/ECI_3,P2.5/CCP0_3,P2.6/CCP1_3,P2.7/CCP2_3]
1
1
无效
SPI�����������
可在3个地方切换,由 ���������
SPI_S1 / ���������������
SPI_S0 两个控制位来选择
SPI_S1 SPI_S0 SPI可在P1/P2/P4之间来回切换
0
0
SPI在[P1.2/SS,P1.3/MOSI,P1.4/MISO,P1.5/SCLK]
0
1
SPI在[P2.4/SS_2,P2.3/MOSI_2,P2.2/MISO_2,P2.1/SCLK_2]
1
0
SPI在[P5.4/SS_3,P4.0/MOSI_3,P4.1/MISO_3,P4.3/SCLK_3]
1
1
无效
d
e
t
i
im
8. 串口1的中继广播方式设置位——Tx_Rx/CLK_DIV.4
Mnemonic Add
Name
B7
B6
B5
B4
B3
B2
B1
B0
Reset Value
CLK_DIV
时钟分频
97H
MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000,0000
(PCON2)
寄存器
U
C
M
L
Tx_Rx:串口1的中继广播方式设置
0:串口1为正常工作方式
1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD
外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时
反映RxD端口输入的电平状态。
串口1的RxD管脚和TxD管脚可以在3组不同管脚之间进行切换:[RxD/P3.0, TxD/P3.1];
[RxD_2/P3.6, TxD_2/P3.7];
[RxD_3/P1.6, TxD_3/P1.7].
C
T
S
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
629
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.2 串行口1工作模式
STC15系列单片机的串行通信接口有4种工作模式,可通过软件编程对SCON中的SM0、
SM1的设置进行选择。其中模式1、模式2和模式3为异步通信,每个发送和接收的字符都带有1
个启动位和1个停止位。在模式0中,串行口被作为1个简单的移位寄存器使用。
8.2.1 串行口1工作模式0:同步移位寄存器(建议初学者不学)
在模式0状态,串行通信接口工作在同步移位寄存器模式,当�������������
串行口模式0的通信速度设置
位UART_M0x6/AUXR.5 = 0时,其波特率固定为SYSclk/12。当��������������
串行口模式0的通信速度设置�
位
UART_M0x6/AUXR.5 = 1时,其波特率固定为SYSclk/2。串行口数据由RxD/P3.0端输入,同步
移位脉冲(SHIFTCLOCK)由TxD/P3.1输出,发送、接收的是8位数据,低位在先。
d
e
t
i
im
模式0的发送过程:当主机执行将数据写入发送缓冲器SBUF指令时启动发送,串行口即将
8位数据以SYSclk/12或SYSclk/2(由UART_M0x6/AUXR.5确定是12分频还是2分频)的波特率从
RxD管脚输出(从低位到高位),发送完中断标志TI置"1",TxD管脚输出同步移位脉冲(SHIFTCLOCK)。波形如图8-1中“发送”所示。
U
C
M
L
当写信号有效后,相隔一个时钟,发送控制端SEND有效(高电平),允许RxD发送数据,
同时允许TxD输出同步移位脉冲。一帧(8位)数据发送完毕时,各控制端均恢复原状态,只有
TI保持高电平,呈中断申请状态。在再次发送数据前,必须用软件将TI清0。
C
T
S
模式0接收过程:模式0接收时,复位接收中断请求标志RI,即RI=0,置位允许接收控制
位REN=1时启动串行模式0接收过程。启动接收过程后,RxD为串行输入端,TxD为同步脉冲
输出端。串行接收的波特率为SYSclk/12或SYSclk/2(由UART_M0x6/AUXR.5确定是12分频还是
2分频)。其时序图如图8-1中“接收”所示。
当接收完成一帧数据(8位)后,控制信号复位,中断标志RI被置"1",呈中断申请状态。当
再次接收时,必须通过软件将RI清0
工作于模式0时,必须清0多机通信控制位SM2,使不影响TB8位和RB8位。由于波特率固
定为SYSclk/12或SYSclk/2,无需定时器提供,直接由单片机的时钟作为同步移位脉冲。
串行口工作模式0的示意图如图8-1所示
由示意图中可见,由TX和RX控制单元分别产生中断请求信号并置位TI=1或RI =1,经��
“�
或
门�������������������������
”������������������������
送主机请求中断,所以主机响应中断后必须软件判别是TI还是RI请求中断,必须软件清0
中断请求标志位TI或RI。
630
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
INTERNAL BUS
WRITE
TO
SBUF
DS Q
CL
RxD
OUTPUT FUNCTION
SBUF
SHIFT
ZERO DETECTOR
START
SYSclk/12
0
SYSclk/2
1
SHIFT
TX CONTROL
TX CLOCK
TI
RX CLOCK
RI
SEND
SERIAL
PORT
INTERRUPT
AUXR.5(UART_M0x6)
REN
RI
START
RECEIVE
d
e
t
i
im
RX CONTROL SHIFT
1 1 1 1 1 1 1 0
INPUT SHIFT REG.
LOAD
SBUF
TxD
OUTPUT FUNCTION
SHIFT
CLOCK
SHIFT
U
C
M
L
RxD
INPUT FUNCTION
SBUF
C
T
S
READ
SBUF
INTERNAL BUS
WRITE TO SBUF
SEND
SHIFT
RXD(DATA OUT)
TRANSMIT
D0
D1
D2
D3
D4
D5
D6
D7
TXD(SHIFT CLOCK)
TI
WRITE TO SCON(CLEAR RI)
RI
RECEIVE
RECEIVE
SHIFT
RXD(DATA IN)
D0
D1
D2
D3
D4
D5
D6
D7
TXD(SHIFT CLOCK)
图8-1 串行口1模式0功能结构及时序示意图
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
631
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.2.2 串行口1工作模式1:8位UART,波特率可变
当软件设置SCON的SM0、SM1为�
“01”����������
时,串行口1则以模式1工作。此模式为8位UART
格式,一帧信息为10位:1位起始位,8位数据位(低位在先)和1位停止位。波特率可变,即可
根据需要进行设置。TxD/P3.1为发送信息,RxD/P3.0为接收端接收信息,串行口为全双工接受
/发送串行口。
图8-2为串行模式1的功能结构示意图及接收/发送时序图
模式1的发送过程:串行通信模式发送时,数据由串行发送端TxD输出。当主机执行一条
写�
“SBUF“����������������
的指令就启动串行通信的发送,写�
“SBUF”�����
信号还把�
“1”���������
装入发送移位寄存器
的第9位,并通知TX控制单元开始发送。发送各位的定时是由16分频计数器同步。
移位寄存器将数据不断右移送TxD端口发送,在数据的左边不断移入�
“ 0”�����
作补充。当
数据的最高位移到移位寄存器的输出位置,紧跟其后的是第9位�
“1”����������
,在它的左边各位全为
“0”���������
,这个状态条件,使TX控制单元作最后一次移位输出,然后使允许发送信号�
“SEND”
失效,完成一帧信息的发送,并置位中断请求位TI,即TI=1,向主机请求中断处理。
d
e
t
i
im
模式1的接收过程:当软件置位接收允许标志位REN,即REN=1时,接收器便以选定波特
率的16分频的速率采样串行接收端口RxD,当检测到RxD端口从�
“1”��
→�
“0”�������
的负跳变时就启
动接收器准备接收数据,并立即复位16分频计数器,将1FFH植装入移位寄存器。复位16分频
计数器是使它与输入位时间同步。
U
C
M
L
16分频计数器的16个状态是将1波特率(每位接收时间)均为16等份,在每位时间的7、
8、9状态由检测器对RxD端口进行采样,所接收的值是这次采样直经����������
“���������
三中取二�����
”����
的值,即3
次采样至少2次相同的值,以此消除干扰影响,提高可靠性。在起始位,如果接收到的值不为
“0”��������������������������
(低电平),则起始位无效,复位接收电路,并重新检测�"1"��
→�"0"���������
的跳变。如果接收到
的起始位有效,则将它输入移位寄存器,并接收本帧的其余信息。
C
T
S
接收的数据从接收移位寄存器的右边移入,已装入的1FFH向左边移出,当起始位�"0"��
移到
移位寄存器的最左边时,使RX控制器作最后一次移位,完成一帧的接收。若同时满足以下两
个条件:
·RI=0;
·SM2=0或接收到的停止位为1。
则接收到的数据有效,实现装载入SBUF,停止位进入RB8,置位RI,即RI=1,向主机请
求中断,若上述两条件不能同时满足,则接收到的数据作废并丢失,无论条件满足与否,接收
器重又检测RxD端口上的�"1"��
→�
"0"��������������������������
的跳变,继续下一帧的接收。接收有效,在响应中断后,必
须由软件清0,即RI=0。通常情况下,串行通信工作于模式1时,SM2设置为�"0"�
。
632
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
INTERNAL BUS
Timer 1
Overflow
TB8
WRITE
TO
SBUF
T 1 工作在 8
位重装模式
T1工作在16
位重装模式
研发顾问QQ:800003751
DS Q
CL
÷2
TxD
ZERO DETECTOR
SMOD
=1
SMOD
=0
SBUF
SHIFT
START
DATA
TX CONTROL
÷4
÷4
TX CLOCK
TI
SEND
RI
LOAD
SBUF
SERIAL
PORT
INTERRUPT
Timer 2
Overflow
÷4
SAMPLE
RX CLOCK
START
1-TO-0
TRANSITION
DETECTOR
d
e
t
i
im
RX CONTROL SHIFT
1FFH
L
BIT
DETECTOR
U
C
M
RxD
INPUT SHIFT REG.
(9 BITS)
SHIFT
LOAD
SBUF
C
T
S
SBUF
READ
SBUF
INTERNAL BUS
TX
CLOCK
WRITE TO SBUF
SEND
TRANSMIT
DATA
SHIFT
D0
TXD
START BIT
TI
D1
D2
D3
D4
D5
D6
D7
START BIT
D0
D1
D2
D3
D4
D5
STOP BIT
RX CLOCK
RXD
D6
D7
RECEIVE BIT DETECTOR SAMPLE TIMES
SHIFT
STOP BIT
RI
图8-2 串行口模式1功能结构示意图及接收/发送时序图
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
633
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
串行通信模式1的波特率是可变的,可变的波特率由定时器/计数器1或定时器2产生,优先
选择定时器2产生波特率。
STC创新设计,请不要抄
袭,再抄袭就很无耻了
当串行口1用定时器2作为其波特率发生器时,
串行口1的波特率=�(定时器T���������
2的溢出率)���
/4.
(注意:此时波特率也与SMOD无关。)
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] );
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2,RL_TL2]);
即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - RL_TH2,RL_TL2]) / 4
RL_TH2是T2H的自动重装载寄存器,RL_TL2是T2L的自动重装载寄存器。
d
e
t
i
im
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时,
串行口1的波特率=�(定时器1的溢出率����
)���
/4.
(注意:此时波特率与SMOD无关。)
L
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ;
U
C
M
即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) / 4
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1])
C
T
S
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1,RL_TL1]) / 4
RL_TH1是TH1的自动重装载寄存器,RL_TL1是TL1的自动重装载寄存器。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时,
串行口1的波特率=���
( 2SMOD/32 )×(定时器1的溢出率��
)�.
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk / 12 / ( 256 - TH1);
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1)
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / ( 256 - TH1)
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1)
634
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.2.3 串行口1工作模式2:9位UART,波特率固定(建议不学习)
当SM0、SM1两位为10时,串行口1工作在模式2。串行口1工作模式2为9位数据异步通信
UART模式,其一帧的信息由11位组成:1位起始位,8位数据位(低位在先),1位可编程位(第
9位数据)和1位停止位。发送时可编程位(第9位数据)由SCON中的TB8提供,可软件设置为1或
0,或者可将PSW中的奇/偶校验位P值装入TB8(TB8既可作为多机通信中的地址数据标志位,
又可作为数据的奇偶校验位)。接收时第9位数据装入SCON的RB8。TxD/P3.1为发送端口,
RxD/P3.0为接收端口,以全双工模式进行接收/发送。
模式2的波特率为:
串行通信模式2波特率=2SMOD/64×(SYSclk系统工作时钟频率)
上述波特率可通过软件对PCON中的SMOD位进行设置,当SMOD=1时,选择SYSclk/32;
当SMOD=0时,选择SYSclk/64,故而称SMOD为波特率加倍位。可见,模式2的波特率基本上
d
e
t
i
im
是固定的。
图8-3为串行通信模式2的功能结构示意图及其接收/发送时序图。
L
由图8-3可知,模式2和模式1相比,除波特率发生源略有不同,发送时由TB8提供给移位寄
存器第9数据位不同外,其余功能结构均基本相同,其接收/发送操作过程及时序也基本相同。
U
C
M
当接收器接收完一帧信息后必须同时满足下列条件:
·RI=0
·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。
C
T
S
当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位
RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无
效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变
信息,接收下一帧的输入信息。
在模式2中,接收到的停止位与SBUF、RB8和RI无关。
通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
635
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
INTERNAL BUS
TB8
WRITE
TO
SBUF
DS Q
CL
SBUF
TxD
ZERO DETECTOR
SYSclk/2
STOP BIT
START GEN.
SHIFT
DATA
TX CONTROL
MODE 2
÷16
TX CLOCK
SEND
TI
SERIAL
PORT
INTERRUPT
SMOD=1
÷2
SMOD=0
÷16
SAMPLE
(SMOD IS PCON.7)
1-TO-0
TRANSITION
DETECTOR
START
d
e
t
i
im
RX
RI
CLOCK
LOAD
SBUF
RX CONTROL SHIFT
L
BIT
DETECTOR
RxD
C
T
S
CU
1FFH
INPUT SHIFT REG.
(9 BITS)
M
SHIFT
LOAD
SBUF
SBUF
READ
SBUF
INTERNAL BUS
TX
CLOCK
WRITE TO SBUF
SEND
TRANSMIT
DATA
SHIFT
D0
TXD
START BIT
TI
D1
D2
D3
D4
D5
D6
D7
TB8
STOP BIT
START BIT
D0
D1
D2
D3
D4
D5
D6
D7
STOP BIT GEN
RX CLOCK
RXD
RECEIVE
RB8
STOP BIT
BIT DETECTOR SAMPLE TIMES
SHIFT
RI
图8-3 串行口模式2功能结构示意图及接收/发送时序图
636
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.2.4 串行口1工作模式3:9位UART,波特率可变
当SM0、SM1两位为11时,串行口1工作在模式3。������
串行通信��
模式3为9位数据异步通信
UART模式��������
,�������
其一帧的信息由11位组成:1位起始位,8位数据位(低位在先),1位可编程位(第
9位数据)和1位停止位。发送时可编程位(第9位数据)由SCON中的TB8提供,可软件设置为1或
0,或者可将PSW中的奇/偶校验位P值装入TB8(TB8既可作为多机通信中的地址数据标志位,
又可作为数据的奇偶校验位)。接收时第9位数据装入SCON的RB8。TxD/P3.1为发送端口,
RxD/P3.0为接收端口,以全双工模式进行接收/发送。
图8-4为串行口工作模式3的功能结构示意图及其接收/发送时序图。
由图8-4可知,模式3和模式1相比,除发送时由TB8提供给移位寄存器第9数据位不同外,
其余功能结构均基本相同,其接收����������������
‘���������������
发送操作过程及时序也基本相同。
当接收器接收完一帧信息后必须同时满足下列条件:
d
e
t
i
im
·RI=0
·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。
L
当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位
RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无
效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变
信息,接收下一帧的输入信息。
U
C
M
在模式3中,接收到的停止位与SBUF、RB8和RI无关。
C
T
S
通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。
串行通信模式3的波特率也是可变的,可变的波特由定时器/计数器1或定时器2产生。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
637
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
研发顾问Tel:13922805190
INTERNAL BUS
Timer 1
Overflow
TB8
WRITE
TO
SBUF
T 1 工作在 8
位重装模式
T1工作在16
位重装模式
临时技术支持Tel:13922829991
DS Q
CL
÷2
TxD
ZERO DETECTOR
SMOD
=1
SMOD
=0
SBUF
SHIFT
START
DATA
TX CONTROL
÷4
÷4
TX CLOCK
TI
SEND
RI
LOAD
SBUF
SERIAL
PORT
INTERRUPT
Timer 2
Overflow
÷4
SAMPLE
1-TO-0
TRANSITION
DETECTOR
RX CLOCK
START
d
e
t
i
im
RX CONTROL SHIFT
1FFH
L
BIT
DETECTOR
CU
M
RxD
C
T
S
INPUT SHIFT REG.
(9 BITS)
SHIFT
LOAD
SBUF
SBUF
READ
SBUF
INTERNAL BUS
TX
CLOCK
WRITE TO SBUF
SEND
TRANSMIT
DATA
SHIFT
D1
D0
TXD
START BIT
TI
D2
D3
D4
D5
D6
D7
TB8
STOP BIT
D1
D2
D3
D4
D5
D6
D7
STOP BIT GEN
RECEIVE
RX CLOCK
÷16 RESET
RXD
START BIT
D0
RB8
STOP BIT
BIT DETECTOR SAMPLE TIMES
SHIFT
RI
图8-4 串行口模式3功能结构示意图及接收/发送时序图
638
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
模式3的波特率(优先选择定时器2产生波特率)为:
当串行口1用定时器2作为其波特率发生器时,
串行口1的波特率=�(定时器T���������
2的溢出率)���
/4.
(注意:此时波特率也与SMOD无关。)
STC创新设计,请不要抄
袭,再抄袭就很无耻了
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] );
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [[RL_TH2,RL_TL2]);
即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2]) / 4
RL_TH2是T2H的自动重装载寄存器,RL_TL2是T2L的自动重装载寄存器。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时,
串行口1的波特率=�(定时器1的溢出率����
)���
/4.
(注意:此时波特率与SMOD无关。)
d
e
t
i
im
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ;
L
即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1, RL_TL1]) / 4
U
C
M
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1])
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1, RL_TL1]) / 4
C
T
S
RL_TH1是TH1的自动重装载寄存器,RL_TL1是TL1的自动重装载寄存器。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时,
串行口1的波特率=���
( 2SMOD/32 )×(定时器1的溢出率��
)�.
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk / 12 / ( 256 - TH1);
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1)
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / ( 256 - TH1)
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1)
可见,模式3和模式1一样,其波特率可通过软件对定时器/计数器1或定时器2的设置进行
波特率的选择,是可变的。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
639
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.3 串行口1的波特率设置
STC15W4K60S4系列单片机串行口1的波特率随所选工作模式的不同而异,对于工作模式0
和模式2,其波特率与系统时钟频率SYSclk和PCON中的波特率选择位SMOD有关,而模式1和
模式3的波特率除与SYSclk和PCON位有关外,还与定时器/计数器1或定时器2设置有关。通过
对定时器/计数器1或定时器2的设置,可选择不同的波特率,所以这种波特率是可变的。建议
用户优先选择定时器2作为串行口1的波特率发生器。
串行通信模式0,其波特率与系统时钟频率SYSclk有关 。
当�����������
模式0的通信速度设置�
位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12。
当�����������
模式0的通信速度设置�
位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2。
一旦SYSclk选定且UART_M0x6/AUXR.5设置好,则串行通信工作模式0的波特率固定不
变。
d
e
t
i
im
串行通信工作模式2,其波特率除与SYSclk有关外,还与SMOD位有关。
其基本表达式为:串行通信模式2波特率=2SMOD/64×(SYSclk系统工作时钟频率)
当SMOD=1时,波特率=2/64(SYSclk)=1/32(SYSclk);
当SMOD=0时,波特率=1/64(SYSclk)。
U
C
M
L
当SYSclk选定后,通过软件设置PCON中的SMOD位,可选择两种波特率。所以,这种模
式的波特率基本固定。
串行通信模式1和3,其波特率是可变的(建议用户优先选择定时器T2作为串口1的波特率发
生器):
STC创新设计,请不要抄
C
T
S
当串行口1用定时器2作为其波特率发生器时,
串行口1的波特率=�(定时器T���������
2的溢出率)���
/4.
(注意:此时波特率也与SMOD无关。)
袭,再抄袭就很无耻了
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] );
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2,RL_TL2]);
即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2]) / 4
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时,
串行口1的波特率=�(定时器1的溢出率����
)���
/4.
(注意:此时波特率与SMOD无关。)
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ;
即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) / 4
当�����������������������
定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1])
即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1,RL_TL1]) / 4
640
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时,
串行口1的波特率=���
( 2SMOD/32 )×(定时器1的溢出率��
)�.
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时�
,
定时器�����
1的溢出率 = SYSclk / 12 / ( 256 - TH1);
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1)
当���������������������
定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时,
��������
定时器�����
1的溢出率 = SYSclk / ( 256 - TH1)
即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1)
通过对定时器/计数器1和T2定时器2的设置,可灵活地选择不同的波特率。在实际应用中
多半选用串行模式1或串行模式3。显然,为选择波特率,关键在于定时器/计数器1和T2定时器
2的溢出率的计算。SMOD的选择,只需根据需要执行下列指令就可实现SMOD=0或1;
MOV
MOV
PCON,#00H
PCON,#80H
;使SMOD=0
;使SMOD=1
d
e
t
i
im
SMOD只占用电源控制寄存器PCON的最高一位,其他各位的具体设置应根据实际情况而定。
L
当用户选择定时器/计数器������������������������
1�����������������������
作波特率发生器时,为选择波特率,关键在于定时器/计数器1
的溢出率。下面介绍如何计算定时器/计数器1的溢出率。
U
C
M
定时器/计数器1的溢出率定义为:单位时间(秒)内定时器/计数器1回0溢出的次数,即定
时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒。
C
T
S
STC15W4K60S4系列单片机设有3个定时器/计数器,定时器/计数器1具有4种工作方式,而
常选用定时器/计数器1的工作方式0(16位自动重装载模式)及工作方式2(8位自动重装)作
为波特率的溢出率。
以定时器/计数器1工作于定时模式的工作方式2(8位自动重装)为例:设置定时器/计数
器1工作于定时模式的工作方式2(8位自动重装),TL1的计数输入来自于SYSclk经12分频或
不分频(由T1x12/AUXR.6确定是12分频还是不分频)的脉冲。当T1x12/AUXR.6=0时,单片机工
作在12T模式,TL1的计数输入来自于SYSclk经12分频的脉冲;当T1x12/AUXR.6=1时,单片机
工作在1T模式,TL1的计数输入来自于SYSclk不经过分频的脉冲。可见,定时器/计数器1的溢
出率与SYSclk和自动重装值N有关,SYSclk越大,特别是N越大,溢出率也就越高。例如:
当N=FFN,则每隔一个时钟即溢出一次(极限情况);若N=00H,则需每隔256个时钟才溢
出一次;当SYSclk=6MHz且T1x12/AUXR.6=0时,一个时钟为2µs, 当SYSclk=6MHz且T1x12/
AUXR.6=1时,一个时钟约为0.167µs(快12倍)。SYSclk=12MHz且T1x12/AUXR.6=0时,则一个
时钟为1µs, 当SYSclk=6MHz且T1x12/AUXR.6=1时,一个时钟约为0.083µs(快12倍)。对于一般
情况下,
当T1x12/AUXR.6=0时,定时器/计数器1溢出一次所需的时间为:(28—N)×12时钟=(28—N)×12×
当T1x12/AUXR.6=1时,定时器/计数器1溢出一次所需的时间为:(28—N)×1时钟=(28—N)×
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
1
SYSclk
1
SYSclk
传真:0513-5501 2969 / 2956 / 2947
641
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
于是得定时器/计数器每秒溢出的次数,即
当T1x12/AUXR.6=0时,定时器/计数器1的溢出率=SYSclk/12×(28-N) (次/秒)
当T1x12/AUXR.6=1时,定时器/计数器1的溢出率=SYSclk×(28-N) (次/秒)
式中SYSclk为系统时钟频率,N为再装入时间常数。
显然,选用定时器/计数器2作波特率的溢出率也一样。选用不同工作方式所获得波特率的
范围不同。因为不同方式的计数位数不同,N取值范围不同,且计数方式较复杂。
现以定时器/计数器1工作于方式2(8位自动重装模式)为例,
设: T1x12/AUXR.6=0,SYSclk=6MHz, N=FFH,
定时器/计数器1工作于方式2的溢出率为6×106/{12×(256-255)} = 0.5×106(次/秒);
设: T1x12/AUXR.6=0,SYSclk=12MHz, N=FFH,
定时器/计数器1工作于方式2的溢出率 = 1×106(次/秒);
d
e
t
i
im
设: T1x12/AUXR.6=0,SYSclk=12MHz, N=00H,
定时器/计数器1工作于方式2的溢出率 = 12×106/12×256≈3906(次/秒)
设: T1x12/AUXR.6=1,SYSclk=6MHz, N=FFH,
U
C
M
L
定时器/计数器1工作于方式2的溢出率为6×106/(256-255) = 6×106(次/秒);
设: T1x12/AUXR.6=1,SYSclk=12MHz, N=00H,
定时器/计数器1工作于方式2的溢出率 = 12×106/256 = 46875(次/秒)
C
T
S
下表给出各种常用波特率与定时器/计数器1各参数之间的关系。
常用波特率与定时器/计数器1各参数关系(T1x12/AUXR.6=0)
系统时钟频率
(MHz)
SMOD
方式0 MAX:1M
12
×
方式2 MAX:375K
62.5K
方式1和3
19.2K
9.6K
4.8K
2.4K
1.2K
137.5
110
110
12
12
11.059
11.059
11.059
11.059
11.059
11.986
6
12
常用波特率
642
南通国芯微电子有限公司
定时器1
×
方式
×
重新装入值
×
1
1
1
0
0
0
0
0
0
×
0
0
0
0
0
0
0
0
×
2
2
2
2
2
2
2
2
×
FFH
FDH
FDH
FAH
F4H
F8H
1DH
72H
0
0
1
FFFBH
C/T
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MOV
MOV
MOV
SETB
MOV
MOV
TMOD,
TH1,
TL1,
TR1
PCON,
SCON,
#20H
#xxH
#xxH
#80H
#50H
;设置定时器/计数器1定时、工作方式2
; 设置定时常数N
;
;启动定时器/计数器1
;设置SMOD=1
;设置串行通信方式1
…
…
设置波特率的初始化程序段如下:
执行上述程序段后,即可完成对定时器/计数器1的操作方式及串行通信的工作方式和波特
率的设置。
由于用其他工作方式设置波特率计算方法较复杂,一般应用较少,故不一一论述。
d
e
t
i
im
当用户选择T2定时器2作波特率发生器时,为选择波特率,关键在于定时器2的溢出率。当
用户选择T2定时器2作波特率发生器时,�������������������������
定时器/���������������������
计数器������������������
1可以释放出来作为定时器/计数器/时
钟输出使用.�
。
U
C
M
L
用户在程序中如何具体使用串口1和�����
定时器��
T2
1.设置串口1 的工作模式,SCON 寄存器中的SM0 和SM1 两位决定了串口1 的4 种工作模式。
2.设置串口1 的波特率,使用���������������
定时器������������
2寄存器 T2H����
及T2L
3.设置寄存器AUXR中的位T2x12/AUXR.2,确定定时器2速度是1T还是12T
4.启动������������������������������������
定时器���������������������������������
2,让T2R位为1,T2H��������������������
/T2L����������������
定时器������������
���������������
2寄存器就立即开始计数。
5.设置串口1的中断优先级,及打开中断相应的控制位是:
PS,ES,EA
6.如要串口1接收,将REN置1即可
如要串口1发送,将数据送入SBUF即可,
接收完成标志RI,发送完成标志TI,要由软件清0。
C
T
S
当串口工作在模式1和模式3时��������������������������������
,�������������������������������
计算相应的波特率需要设置的重装载数,结果送入T2H/T2L寄存
器�
:
计算自动重装数 RELOAD:
1. 计算 RELOAD
计算公式: RELOAD = 65536 - INT(SYSclk/Baud0/4 + 0.5)
计算出的RELOAD 数直接送T2H/T2L寄存器
式中: INT() 表示取整运算即舍去小数, 在式中加 0.5 可以达到四舍五入的目的
SYSclk = 晶振频率
Baud0 = 标准波特率
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
643
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式
����������������������������
3. 计算用 RELOAD 产生的波特率:
Baud = SYSclk/(65536 - RELOAD)/4
4. 计算误差
error = (Baud - Baud0)/Baud0 * 100%
5. 如果误差绝对值 > 3% 要更换波特率或者更换晶体频率, 重复步骤 1-4
例: SYSclk = 22.1184MHz, Baud0 = 57600
1. RELOAD = 65536 - INT( 22118400/57600/4 + 0.5)
= 65536 - INT( 96.5 )
= 65536 - 96
= 65440
= 0FFA0H
2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式
����������������������������
3. Baud = 22118400/(65536-65440)/4
= 57600
4. 误差等于零
C
T
S
U
C
M
d
e
t
i
im
L
例: SYSclk = 12MHz, Baud0 = 57600
1. RELOAD = 65536 - INT( 12000000/57600/4 + 0.5)
= 65536 - INT( 52.0833 + 0.5 )
= 65536 - INT( 52.5833 )
= 65536 - 52
= 65484
= 0FFCCH
2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式
����������������������������
3. Baud = 12000000/(66536-65484)/4
= 57692
4. error = (57692 - 57600)/57600 * 100%
= 0.16%
644
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.4 串行口1的测试程序(C和汇编)
8.4.1 定时器2作串口1波特率发生器的测试程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
U
C
M
L
typedef unsigned char
BYTE;
typedef unsigned int
WORD;
#define FOSC 18432000L
#define BAUD 115200
//系统频率
//串口波特率
#define
#define
#define
#define
#define
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
#define PARITYBIT EVEN_PARITY
sfr
sfr
sfr
sbit
AUXR =
T2H
=
T2L =
0x8e;
0xd6;
0xd7;
P22
P2^2;
bit
busy;
=
//定义校验位
//辅助寄存器
//定时器2高8位
//定时器2低8位
void SendData(BYTE dat);
void SendString(char *s);
void main()
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
645
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2;
//9位可变波特率,校验位初始为0
#endif
T2L = (65536 - (FOSC/4/BAUD));
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14;
AUXR |= 0x01;
ES = 1;
EA = 1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
//设置波特率重装值
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
//使能串口1中断
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
P22 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
C
T
S
U
C
M
d
e
t
i
im
L
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
//等待前面的数据发送完成
ACC = dat;
//获取校验位P (PSW.0)
if (P)
//根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
//设置校验位为0
646
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
//设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
//设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
//设置校验位为0
#endif
}
busy = 1;
SBUF = ACC;
//写数据到UART数据寄存器
}
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
C
T
S
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
//检测字符串结束标志
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
647
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//本示例在Keil开发环境下请选择Intel的8052芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
#define PARITYBIT
0
1
2
3
4
C
T
S
AUXR EQU 08EH
T2H
DATA 0D6H
T2L DATA 0D7H
U
C
M
EVEN_PARITY
//-----------------------------------------
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
//----------------------------------------BUSY BIT
20H.0
//----------------------------------------
ORG 0000H
LJMP MAIN
d
e
t
i
im
L
//定义校验位
//辅助寄存器
//定时器2高8位
//定时器2低8位
//忙标志位
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
648
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
MOV SCON, #0DAH
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
#endif
//------------------------------
MOV T2L,
MOV T2H,
MOV AUXR,
ORL AUXR,
SETB ES
SETB EA
研发顾问QQ:800003751
//9位可变波特率,校验位初始为1
//9位可变波特率,校验位初始为0
#0D8H
#0FFH
#14H
#01H
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//设置波特率重装值(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
//使能串口中断
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
MOV P2.2,
CHECKTI:
JNB TI,
CLR TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
C
T
S
U
C
M
d
e
t
i
im
L
CHECKTI
SBUF
RB8
C
//检测RI位
//清除RI位
//P0显示串口数据
ISR_EXIT
//检测TI位
//清除TI位
//清忙标志
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
南通国芯微电子有限公司
STC — 全球最大的8051单片机设计公司
//P2.2显示校验位
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
649
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
C
T
S
650
南通国芯微电子有限公司
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//设置校验位为0
//设置校验位为1
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
U
C
M
d
e
t
i
im
L
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.4.2 定时器1模式0(16位自动重装载)作串口1波特率发生器程序(C和汇编)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
#define BAUD 115200
#define
#define
#define
#define
#define
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
U
C
M
0
1
2
3
4
L
//系统频率
//串口波特率
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
//定义校验位
sfr
AUXR =
0x8e;
//辅助寄存器
sbit
P22
P2^2;
bit
busy;
=
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2;
//9位可变波特率,校验位初始为0
#endif
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
651
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
AUXR = 0x40;
TMOD = 0x00;
TL1 = (65536 - (FOSC/4/BAUD));
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TR1 = 1;
ES = 1;
EA = 1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值
//定时器1开始启动
//使能串口中断
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
P22 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
C
T
S
南通国芯微电子有限公司
L
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
U
C
M
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
652
d
e
t
i
im
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
//设置校验位为1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
#endif
}
busy = 1;
SBUF = ACC;
}
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
2. 汇编程序:
//设置校验位为0
//写数据到UART数据寄存器
//检测字符串结束标志
//发送当前字符
U
C
M
d
e
t
i
im
L
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
C
T
S
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY 0
ODD_PARITY 1
EVEN_PARITY 2
MARK_PARITY 3
SPACE_PARITY 4
#define PARITYBIT EVEN_PARITY
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
//定义校验位
//----------------------------------------AUXR EQU
BUSY BIT
08EH
20H.0
//辅助寄存器
//忙标志位
//----------------------------------------南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
653
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV AUXR,
MOV TMOD,
MOV TL1,
MOV TH1,
SETB TR1
SETB ES
SETB EA
U
C
M
#40H
#00H
#0D8H
#0FFH
C
T
S
MOV DPTR, #TESTSTR
LCALL SENDSTRING
d
e
t
i
im
L
//定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值(65536-18432000/4/115200)
//定时器1开始运行
//使能串口中断
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
MOV P2.2,
654
CHECKTI
//检测RI位
//清除RI位
SBUF
//P0显示串口数据
RB8
C
//P2.2显示校验位
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
CHECKTI:
JNB
CLR
CLR
ISR_EXIT:
POP
POP
RETI
TI,
TI
BUSY
官方网站:www.STCMCU.com
ISR_EXIT
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
//检测TI位
//清除TI位
//清忙标志
PSW
ACC
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
C
T
S
d
e
t
i
im
//设置校验位为0
L
//设置校验位为1
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
南通国芯微电子有限公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
655
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.4.3 定时器1模式2(8位自动重装载)作串口1波特率发生器程序(建议不学)
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
d
e
t
i
im
//假定测试芯片的工作频率为18.432MHz#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
#define FOSC 18432000L
#define BAUD 115200
#define
#define
#define
#define
#define
U
C
M
C
T
S
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
L
//系统频率
//串口波特率
0
1
2
3
4
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY //定义校验位
sfr
AUXR =
0x8e;
sbit
P22
P2^2;
=
//辅助寄存器
bit busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda;
//9位可变波特率,校验位初始为1
656
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
#elif (PARITYBIT ==
SCON =
#endif
=
=
=
=
=
=
=
官方网站:www.STCMCU.com
研发顾问QQ:800003751
SPACE_PARITY)
0xd2;
AUXR
TMOD
TL1
TH1
TR1
ES
EA
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
STC — 全球最大的8051单片机设计公司
//9位可变波特率,校验位初始为0
0x40;
//定时器1为1T模式
0x20;
//定时器1为模式2(8位自动重载)
(256 - (FOSC/32/BAUD)); //设置波特率重装值
(256 - (FOSC/32/BAUD));
1;
//定时器1开始工作
1;
//使能串口中断
1;
}
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
P22 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
U
C
M
d
e
t
i
im
L
//清除RI位
//P0显示串口数据
//P2.2显示校验位
//清除TI位
//清忙标志
C
T
S
/*---------------------------发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
//等待前面的数据发送完成
ACC = dat;
//获取校验位P (PSW.0)
if (P)
//根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
//设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
//设置校验位为1
#endif
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
657
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0;
#endif
}
busy = 1;
SBUF = ACC;
}
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
2. 汇编程序:
//设置校验位为1
//设置校验位为0
//写数据到UART数据寄存器
L
//发送当前字符
U
C
M
C
T
S
d
e
t
i
im
//检测字符串结束标志
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
//定义校验位
//-----------------------------------------
658
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
AUXR EQU 08EH
BUSY BIT
20H.0
官方网站:www.STCMCU.com
研发顾问QQ:800003751
//辅助寄存器
//忙标志位
STC — 全球最大的8051单片机设计公司
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
d
e
t
i
im
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV AUXR,
MOV TMOD,
MOV TL1,
MOV TH1,
SETB TR1
SETB ES
SETB EA
#40H
#20H
#0FBH
#0FBH
C
T
S
U
C
M
L
//定时器1为1T模式
//定时器1为模式2(8位自动重载)
//设置波特率重装值(256-18432000/32/115200)
//定时器1开始运行
//使能串口中断
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//发送测试字符串
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0
;/*---------------------------;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CLR RI
MOV P0,
MOV C,
南通国芯微电子有限公司
CHECKTI
SBUF
RB8
//检测RI位
//清除RI位
//P0显示串口数据
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
659
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
MOV
CHECKTI:
JNB
CLR
CLR
ISR_EXIT:
POP
POP
RETI
P2.2,
C
TI,
TI
BUSY
ISR_EXIT
研发顾问Tel:13922805190
//P2.2显示校验位
//检测TI位
//清除TI位
//清忙标志
PSW
ACC
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
CLR TB8
#elif (PARITYBIT == EVEN_PARITY)
SETB TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
SETB TB8
#elif (PARITYBIT == EVEN_PARITY)
CLR TB8
#endif
PARITYBITOK:
SETB BUSY
MOV SBUF, A
RET
C
T
S
南通国芯微电子有限公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
d
e
t
i
im
//设置校验位为0
L
//设置校验位为1
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
660
临时技术支持Tel:13922829991
//设置校验位为1
//设置校验位为0
//校验位设置完成
//写数据到UART数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.5 串行口2的相关寄存器
位地址及符号
复位值
符号
描述
地址
S2CON
Serial 2 Control register
9AH
S2BUF
Serial 2 Buffer
9BH
xxxx xxxxB
T2H
定时器2高8位,装入重装数 D6H
0000 0000B
T2L
定时器2低8位,装入重装数 D7H
0000 0000B
MSB
LSB
S2SM0
-
S2SM2 S2REN S2TB8 S2RB8 S2TI
AUXR
辅助寄存器
IE
Interrupt Enable
IE2
Interrupt Enable 2
AFH
-
IP2
Interrupt Priority 2 Low
B5H
-
-
-
外围设备功能切换控制
BAH
寄存器
-
-
-
P_SW2
8EH
T0x12 T1x12 UART_M0x6 T2R T2_C/T
A8H EA ELVD EADC
-
-
1. 串行口2的控制寄存器S2CON
S2RI
T2x12 EXTRAM S1ST2
0000 0000B
0000 0001B
ES
ET1
EX1
ET0
EX0 0000 0000B
-
-
-
ESPI
ES2 xxxx xx00B
-
-
-
PSPI
PS2 x000 0000B
-
-
S4_S
S3_S
S2_S
d
e
t
i
m
xxxx x000B
Li
串行口2控制寄存器S2CON用于确定串行口2的工作方式和某些控制功能。其格式如下:
S2CON : 串行口2控制寄存器
SFR name Address bit
B7
S2CON
9AH name S2SM0
C
T
S
U
C
M
B6
-
B5
B4
B3
B2
B1
S2SM2 S2REN S2TB8 S2RB8 S2TI
B0
S2RI
S2SM0:指定串行口2的工作方式,如下表所示。
S2SM0 工作方式
功能说明
0
方式0
8位UART,波
(定时器T2的溢出率)/4
特率可变
1
方式1
9位UART,波
(定时器T2的溢出率)/4
特率可变
波特率
当AUXR.2/T2x12=1时,定时器������
T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] )
当AUXR.2/T2x12=0时,定时器������
T2的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2] )
式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
B6:保留,该位复位后为0.
S2SM2:允许方式1多机通信控制位。
在方式1时,如果S2SM2位为1且S2REN位为1,则接收机处于地址帧筛选状态。此时
可以利用接收到的第9位(即S2RB8)来筛选地址帧:若S2RB8=1,说明该帧是地址帧,
地址信息可以进入S2BUF,并使S2RI为1,进而在中断服务程序中再进行地址号比较;
若S2RB8=0,说明该帧不是地址帧,应丢掉且保持S2RI=0。在方式1中,如果S2SM2位
为0且S2REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S2RB8为0或1,
均可使接收到的信息进入S2BUF,并使S2RI=1,此时S2RB8通常为校验位.
方式0是非多机通信方式,在这种方式时,要设置S2SM2 应为0。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
661
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
S2REN:允许/禁止串行口2接收控制位。由软件置位S2REN,即S2REN=1为允许串行接收状
态,可启动串行接收器RxD2,开始接收信息。软件复位S2REN,即S2REN=0,则禁
止接收。
S2TB8:在方式1,S2TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据
的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用.
S2RB8:在方式1,S2RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
方式0中不用S2RB8(置S2SM2=0, S2RB8是接收到的停止位)。
S2TI:发送中断请求标志位。在停止位开始发送时由S2TI内部硬件置位,即S2TI=1,响应中断
后S2TI必须用软件清零。
S2RI:接收中断请求标志位。在串行接收到停止位的中间时刻S2RI由内部硬件置位,即
S2RI=1,向CPU发中断申请,响应中断后S2RI必须由软件清零。
d
e
t
i
im
S2CON的所有位可通过整机复位信号复位为全�
“ 0”�
。 S2CON的字节地址为9AH,不可
位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S2TI,即S2TI=1,请求
中断处理;当接收完一帧信息时,内部硬件自动置位S2RI,即S2RI=1,请求中断处理。由于
S2TI和S2RI以�������������������������������
“������������������������������
或逻辑���������������������������
”��������������������������
关系向主机请求中断,所以主机响应中断时事先并不知道是S2TI还是
S2RI请求的中断,必须在中断服务程序中查询S2TI和S2RI进行判别,然后分别处理。因此,
两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响
应的错误。
C
T
S
U
C
M
L
2. 串行口2的数据缓冲寄存器S2BUF
STC15系列单片机的串行口2数据缓冲寄存器(S2BUF)的地址是9BH,实际是2个缓冲器,写
S2BUF的操作完成待发送数据的加载,读S2BUF的操作可获得已接收到的数据。两个操作分别对
应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S2BUF信号(MOV
S2BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为
移位寄存器的输出位。根据不同的工作方式会自动将�
“1”�
或S2TB8的值装入移位寄存器的第9
位,并进行发送.
串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收
完毕,移位寄存器中的数据字节装入串行数据缓冲器S2BUF中,其第9位则装入S2CON寄存器
中的S2RB8位。如果由于S2SM2使得已接收到的数据无效时,S2RB8和S2BUF中内容不变.
由于接收通道内设有输入移位寄存器和S2BUF缓冲器,从而能使一帧接收完将数据由移位
寄存器装入S2BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S2BUF缓冲器
中将数据取走,否则前一帧数据将丢失。S2BUF以并行方式送往内部数据总线。
662
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
3. 串行口2只能选择定时器2作为其波特率发生器——定时器2的寄存器T2H, T2L
定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用
于保存重装时间常数。
注意:对于STC15系列单片机,串口2��������������������������
永远是使用���������������������
定时器������������������
2作为波特率发生器,串口2不能够选择
其他������������
定时器���������
作其�������
波特率发生器�
;串口1默认选择定时器2作为其波特率发生器,也可以选择定时
器1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作
为其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其
波特率发生器。
4. 定时器2的控制位——TR2、T2_C/T、T2x12
d
e
t
i
im
AUXR : 辅助寄存器 (不可位寻址)
SFR name
Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
T2R:定时器2运行控制位
0,����������
不允许�������
定时器����
2运行;
1���������
,��������
允许������
定时器���
2运行
U
C
M
B4
T2R
B3
B2
T2_C/T
T2x12
L
B1
B0
EXTRAM S1ST2
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
C
T
S
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
对于����������������������������������������
STC15�����������������������������������
系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定时
器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1
作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为
其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波
特率发生器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
663
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
5. 与串行口2中断相关的寄存器
串行口2中断允许位ES2位于中断允许寄存器IE2中,中断允许寄存器的格式如下:
IE2 : 中断允许寄存器2 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
-
B5
B4
-
-
B3
-
B2
-
B1
ESPI
B0
ES2
ES2 : 串行口2中断允许位,ES2=1,允许串行口2中断,ES2=0,禁止串行口2中断。
IE : 中断允许寄存器 (可位寻址)
SFR name
IE
Address
A8H
bit
name
B7
EA
B6
B5
ELVD EADC
B4
ES
B3
ET1
B2
EX1
B1
ET0
B0
EX0
EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
d
e
t
i
im
串行口2中断优先级控制位PS2位位于中断优先级控制寄存器IP中,中断优先级控制寄存器
的格式如下:
IP2 : 中断优先级控制寄存器 (不可位寻址)
SFR name
IP2
Address
B5H
bit
name
B7
-
B6
-
B5
-
U
C
M
B4
-
L
B3
-
B2
-
B1
PSPI
B0
PS2
PS2: 串行口2中断优先级控制位。
当PS2=0时,串行口2中断为最低优先级中断(优先级0)
当PS2=1时,串行口2中断为最高优先级中断(优先级1)
C
T
S
6. 串行口2在2组管脚之间切换的控制位——S2_S/P_SW2.0
通过设置寄存器P_SW2中的S2_S位,可以将串口2在2组管脚之间任意切换,P_SW2寄存器的
格式如下:
P_SW2: 外围设备功能切换控制寄存器2 (不可位寻址)
Mnemonic Add
P_SW2
Name
B7
B6
B5
B4
B3
外围设备功能切换
BAH
控制寄存器2
B2
B1
B0
Reset Value
S4_S
S3_S
S2_S
xxxx,x000
串口2/�������������
S2�����������
可在2个地方切换,由 �����������
S2_S 控制位来选择
S2_S S2可在P1/P4之间来回切换
0
串口2/S2在[P1.0/RxD2,P1.1/TxD2]
1
串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2]
串口3/�������������
S3�����������
可在2个地方切换,由 �����������
S3_S 控制位来选择
S3_S S3可在P0/P5之间来回切换
0
串口3/S3在[P0.0/RxD3,P0.1/TxD3]
1
串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2]
串口4/�������������
S4�����������
可在2个地方切换,由 �����������
S4_S 控制位来选择
S4_S S4可在P0/P5之间来回切换
0
串口4/S4在[P0.2/RxD4,P0.3/TxD4]
1
串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2]
664
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.6 串行口2工作模式
STC15W4K60S4系列单片机的串行口2有两种工作模式,可通过软件编程对S2CON中的
S2SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个
启动位和1个停止位。
8.6.1 串行口2的工作模式0----8位UART,波特率可变
10�����
位数据通过RxD2/P1.0(RxD2_2/P4.6)接收,通过TxD2/P1.1(TxD2_2/P4.7)发送。一帧
数据包含一个起始位�����������������������������������
(0),8������������������������������
个数据位和一个停止位��������������������
(1)�����������������
。接收时,停止位进入特殊功能寄存器
S2CON的S2RB8位。波特率由定时器T2的溢出率决定。
串口2在模式0的���
波特率 = 定时器��������
T2的溢出率/4
d
e
t
i
im
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
L
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
U
C
M
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
C
T
S
8.6.2 串行口2的工作模式1----9位UART,波特率可变
11位数据通过RxD2/P1.0(RxD2_2/P4.6)发送,通过TxD2/P1.1(TxD2_2/P4.7)接收。一��
帧�
数
据包含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位
数据位来自特殊功能寄存器S2CON的S2TB8位.接收时,第9位进入特殊功能寄存器S2CON的
S2RB8位。
串口2在模式1的���
波特率= T2 定时器�������
2的溢出率/4
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
可见,模式1和模式0一样,其波特率可通过软件对定时器2的设置进行波特率的选择,是
可变的。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
665
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
用户在程序中如何具体使用串口2
1.设置串口2的工作模式,S2CON寄存器中的S2SM0决定了串口2的2种工作模式
2.设置串口2的波特率相应的寄存器:
�������
定时器����
2寄存器T2H / T2L
3.启动������
定时器���
2,让T2R位为1,������������
定时器���������
2就立即开始计数。
4.������������������������
设置AUXR.2/T2x12,确定定时器2的速度
5.设置串口2的中断优先级,及打开中断相应的控制位是:
PS2, PS2H, ES2, EA
6.如要串口2接收,将S2REN置1 即可
如要串口2发送,将数据送入S2BUF即可,
接收完成标志S2RI,发送完成标志S2TI,要由软件清0。
C
T
S
666
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.7 串行口2的测试程序(C和汇编)
——使用定时器2作串口2的波特率发生器
1. C程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
U
C
M
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
BYTE;
typedef unsigned int
WORD;
#define FOSC 18432000L
#define BAUD 115200
#define TM
(65536 - (FOSC/4/BAUD))
C
T
S
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
d
e
t
i
im
L
//系统频率
//串口波特率
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
#define PARITYBIT EVEN_PARITY
//定义校验位
sfr
sfr
sfr
sfr
sfr
sfr
//辅助寄存器
//UART2 控制寄存器
//UART2 数据寄存器
//定时器2高8位
//定时器2低8位
//中断控制寄存器2
AUXR
S2CON
S2BUF
T2H
T2L
IE2
#define S2RI
#define S2TI
=
=
=
=
=
=
0x01
0x02
南通国芯微电子有限公司
0x8e;
0x9a;
0x9b;
0xd6;
0xd7;
0xaf;
//S2CON.0
//S2CON.1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
667
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
#define S2RB8 0x04
#define S2TB8 0x08
bit
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//S2CON.2
//S2CON.3
busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
S2CON = 0x50;
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
S2CON = 0xda;
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
S2CON = 0xd2;
//9位可变波特率,校验位初始为0
#endif
T2L = TM;
T2H = TM>>8;
AUXR = 0x14;
IE2 = 0x01;
EA = 1;
SendString("STC15F2K60S2\r\nUart2 Test !\r\n");
while(1);
}
C
T
S
/*---------------------------UART2 中断服务程序
-----------------------------*/
void Uart2() interrupt 8 using 1
{
if (S2CON & S2RI)
{
S2CON &= ~S2RI;
P0 = S2BUF;
P2 = (S2CON & S2RB8);
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI;
busy = 0;
}
}
L
//设置波特率重装值
//T2为1T模式, 并启动定时器2
//使能串口2中断
U
C
M
d
e
t
i
im
//清除S2RI位
//P0显示串口数据
//P2.2显示校验位
//清除S2TI位
//清忙标志
/*----------------------------
668
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
S2CON &= ~S2TB8;
#elif (PARITYBIT == EVEN_PARITY)
S2CON |= S2TB8;
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
S2CON |= S2TB8;
#elif (PARITYBIT == EVEN_PARITY)
S2CON &= ~S2TB8;
#endif
}
busy = 1;
S2BUF = ACC;
}
C
T
S
STC — 全球最大的8051单片机设计公司
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
d
e
t
i
im
//设置校验位为1
L
//设置校验位为0
U
C
M
/*---------------------------发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
南通国芯微电子有限公司
研发顾问QQ:800003751
//写数据到UART2数据寄存器
//检测字符串结束标志
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
669
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*--------------------------------------------------------------------------------------------------------- */
/* --- STC MCU Limited. --------------------------------------------------------------------------- */
/* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */
/* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */
/* --- Web: www.STCMCU.com ------------------------------------------------------------------- */
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----
*/
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----
*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/
/*--------------------------------------------------------------------------------------------------------- */
//假定测试芯片的工作频率为18.432MHz
#define
#define
#define
#define
#define
NONE_PARITY
ODD_PARITY
EVEN_PARITY
MARK_PARITY
SPACE_PARITY
0
1
2
3
4
U
C
M
#define PARITYBIT EVEN_PARITY
C
T
S
//----------------------------------------AUXR
S2CON
S2BUF
T2H
T2L
IE2
EQU
EQU
EQU
DATA
DATA
EQU
08EH
09AH
09BH
0D6H
0D7H
0AFH
S2RI
EQU 01H
S2TI
EQU 02H
S2RB8 EQU 04H
S2TB8 EQU 08H
//----------------------------------------BUSY BIT
20H.0
//----------------------------------------
ORG
0000H
LJMP MAIN
//无校验
//奇校验
//偶校验
//标记校验
//空白校验
d
e
t
i
im
L
//定义校验位
//辅助寄存器
//UART2 控制寄存器
//UART2 数据寄存器
//定时器2高8位
//定时器2低8位
//中断控制寄存器2
//S2CON.0
//S2CON.1
//S2CON.2
//S2CON.3
//忙标志位
ORG 0043H
LJMP UART2_ISR
//----------------------------------------
ORG 0100H
670
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV S2CON, #50H
//8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV S2CON, #0DAH
//9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
MOV S2CON, #0D2H
//9位可变波特率,校验位初始为0
#endif
//------------------------------
MOV T2L,
MOV T2H,
MOV AUXR,
ORL IE2,
SETB EA
#0D8H
#0FFH
#14H
#01H
MOV DPTR, #TESTSTR
LCALL SENDSTRING
//设置波特率重装值(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//使能串口2中断
d
e
t
i
im
L
//发送测试字符串
U
C
M
SJMP $
;----------------------------------------TESTSTR:
DB "STC15F2K60S2 Uart2 Test !",0DH,0AH,0
C
T
S
;/*---------------------------;UART2 中断服务程序
;----------------------------*/
UART2_ISR:
PUSH ACC
PUSH PSW
MOV A,
S2CON
JNB ACC.0, CHECKTI
ANL S2CON, #NOT S2RI
MOV P0,
S2BUF
ANL A,
#S2RB8
MOV P2,
A
CHECKTI:
;
MOV A,
S2CON
JNB ACC.1, ISR_EXIT
ANL S2CON, #NOT S2TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
南通国芯微电子有限公司
;读取UART2控制寄存器
;检测S2RI位
;清除S2RI位
;P0显示串口数据
;
;P2.2显示校验位
;读取UART2控制寄存器
;检测S2TI位
;清除S2TI位
;清忙标志
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
671
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
;/*---------------------------;发送串口数据
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
ODD1INACC:
#if (PARITYBIT == ODD_PARITY)
ANL S2CON, #NOT S2TB8
#elif (PARITYBIT == EVEN_PARITY)
ORL S2CON, #S2TB8
#endif
SJMP PARITYBITOK
EVEN1INACC:
#if (PARITYBIT == ODD_PARITY)
ORL S2CON, #S2TB8
#elif (PARITYBIT == EVEN_PARITY)
ANL S2CON, #NOT S2TB8
#endif
PARITYBITOK:
SETB BUSY
MOV S2BUF, A
RET
C
T
S
南通国芯微电子有限公司
研发顾问Tel:13922805190
//等待前面的数据发送完成
//获取校验位P (PSW.0)
//根据P来设置校验位
//设置校验位为0
//设置校验位为1
d
e
t
i
im
//设置校验位为1
//设置校验位为0
L
//校验位设置完成
U
C
M
;/*---------------------------;发送字符串
//----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
//----------------------------------------
END
672
临时技术支持Tel:13922829991
//写数据到UART2数据寄存器
//读取字符
//检测字符串结束标志
//字符串地址+1
//发送当前字符
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
8.8 串行口3的相关寄存器
地址
位地址及符号
复位值
符号
描述
S3CON
S3BUF
串口3控制寄存器
ACH S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 0000,0000
串口3数据缓冲器
ADH
MSB
LSB
xxxx,xxxx
T2H
定时器2高8位,装入重装数 D6H
0000 0000B
T2L
定时器2低8位,装入重装数 D7H
0000 0000B
AUXR
辅助寄存器
8EH
T3H
T3L
定时器3高8位寄存器
D4H
0000 0000B
定时器3低8位寄存器
D5H
0000 0000B
T4T3M
T4和T3的控制寄存器
D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B
IE2
中断允许寄存器
P_SW2
T0x12 T1x12 UART_M0x6 T2R T2_C/T
AFH
ET4
外围设备功能切换控制
BAH
寄存器
-
ET3
-
-
U
C
M
ES4
d
e
t
i
m
ES3
Li
-
-
T2x12 EXTRAM S1ST2
0000 0001B
ET2
ESPI
ES2
x000 0000B
S4_S
S3_S
S2_S
xxxx x000B
1. 串行口3的控制寄存器S3CON
串行口3控制寄存器S3CON用于确定串行口3的工作方式和某些控制功能。其格式如下:
C
T
S
S3CON : 串行口3控制寄存器
SFR name Address bit
B7
B6
B5
B4
B3
B2
B1
S3CON
ACH name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI
B0
S3RI
S3SM0:指定串行口3的工作方式,如下表所示。
S3SM0 工作方式
功能说明
波特率
0
方式0
或 (定时器T3的溢出率)/4
8位UART,波特率可变 (定时器T2的溢出率)/4 ��
1
方式1
9位UART,波特率可变 (定时器T2的溢出率)/4 ��
或 (定时器T3的溢出率)/4
当AUXR.2/T2x12=1时,定时器������
T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] )
当AUXR.2/T2x12=0时,定时器������
T2的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2] )
式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
当T4T3M.1/T3x12=1时,定时器������
T3的溢出率 = SYSclk / ( 65536 - [RL_TH3, RL_TL3] )
当T4T3M.1/T3x12=0时,定时器T�����
3的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3] )
式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。
S3ST3:串口3(UART3)选择定时器3作波特率发生器的控制位。
0,��������������������
串�������������������
行������������������
口3选择定时器2����������
作为其�������
波特率发生器;
1��������������������
,�������������������
串������������������
行�����������������
口3���������������
选择定时器3作为其������
波特率发生器
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
673
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
S3SM2:允许方式1多机通信控制位。
在方式1时,如果S3SM2位为1且S3REN位为1,则接收机处于地址帧筛选状态。此时
可以利用接收到的第9位(即S3RB8)来筛选地址帧:若S3RB8=1,说明该帧是地址帧,
地址信息可以进入S3BUF,并使S3RI为1,进而在中断服务程序中再进行地址号比较;
若S3RB8=0,说明该帧不是地址帧,应丢掉且保持S3RI=0。在方式1中,如果S3SM2位
为0且S3REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S3RB8为0或1,
均可使接收到的信息进入S3BUF,并使S3RI=1,此时S3RB8通常为校验位.
方式0是非多机通信方式,在这种方式时,要设置S3SM2 应为0。
S3REN:允许/禁止串行口3接收控制位。由软件置位S3REN,即S3REN=1为允许串行接收状
态,可启动串行接收器RxD3,开始接收信息。软件复位S3REN,即S3REN=0,则禁
止接收。
S3TB8:在方式1,S3TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据
的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用.
d
e
t
i
im
S3RB8:在方式1,S3RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
方式0中不用S3RB8(置S3SM2=0, S3RB8是接收到的停止位)。
L
S3TI:发送中断请求标志位。在停止位开始发送时由S3TI内部硬件置位,即S3TI=1,响应中断
后S3TI必须用软件清零。
U
C
M
S3RI:接收中断请求标志位。在串行接收到停止位的中间时刻S3RI由内部硬件置位,即
S3RI=1,向CPU发中断申请,响应中断后S3RI必须由软件清零。
C
T
S
S3CON的所有位可通过整机复位信号复位为全�
“0”�
。S3CON的字节地址为ACH,不可
位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S3TI,即S3TI=1,请求
中断处理;当接收完一帧信息时,内部硬件自动置位S3RI,即S3RI=1,请求中断处理。由于
S3TI和S3RI以�������������������������������
“������������������������������
或逻辑���������������������������
”��������������������������
关系向主机请求中断,所以主机响应中断时事先并不知道是S3TI还是
S3RI请求的中断,必须在中断服务程序中查询S3TI和S3RI进行判别,然后分别处理。因此,
两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响
应的错误。
674
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 串行口3的数据缓冲寄存器S3BUF
STC15W4K60S4系列单片机的串行口3数据缓冲寄存器(S3BUF)的地址是ADH,实际是2个缓
冲器,写S3BUF的操作完成待发送数据的加载,读S3BUF的操作可获得已接收到的数据。两个操
作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S3BUF信号(MOV
S3BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为
移位寄存器的输出位。根据不同的工作方式会自动将�
“1”�
或S3TB8的值装入移位寄存器的第9
位,并进行发送.
串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收
完毕,移位寄存器中的数据字节装入串行数据缓冲器S3BUF中,其第9位则装入S3CON寄存器
中的S3RB8位。如果由于S3SM2使得已接收到的数据无效时,S3RB8和S3BUF中内容不变.
由于接收通道内设有输入移位寄存器和S3BUF缓冲器,从而能使一帧接收完将数据由移位
寄存器装入S3BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S3BUF缓冲器
中将数据取走,否则前一帧数据将丢失。S3BUF以并行方式送往内部数据总线。
U
C
M
d
e
t
i
im
L
3. 串行口3既能选择定时器2作为其波特率发生器,也能选择定时器3作为其波特率
发生器——定时器2的寄存器T2H, T2L和定时器3的寄存器T3H, T3L
定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用
于保存重装时间常数。
C
T
S
定时器3寄存器T3H(地址为D4H,复位值为00H)及寄存器T3L(地址为D5H,复位值为00H)用
于保存重装时间常数。
注意:有串口2的单片机,串口2永远是使用�����������������������
定时器��������������������
2作为波特率发生器,串口2不能够选择定时
器1 做波特率发生器,串口1可以选择定时器1做波特率发生器,也可以选择��������
定时器�����
2作为波特
率发生器�������������������������������������
。而�����������������������������������
串口3可以选择定时器2做波特率发生器,也可以选择�����������
定时器��������
3作为波特率发生
器����������������������������������������
。同样�������������������������������������
串口4可以选择定时器2做波特率发生器,也可以选择�������������
定时器����������
4作为波特率发生器�
。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
675
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
4. 定时器2的控制位——TR2、T2_C/T、T2x12
AUXR : 辅助寄存器 (不可位寻址)
SFR name
Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
B2
T2R
T2_C/T
T2x12
B1
B0
EXTRAM S1ST2
T2R:定时器2运行控制位
0,����������
不允许�������
定时器����
2运行;
1���������
,��������
允许������
定时器���
2运行
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
U
C
M
5. 定时器3的控制位——TR3、T3_C/T、T3x12
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
C
T
S
name
T4R
B6
B5
B4
d
e
t
i
im
L
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B3 - T3R:定时器3运行控制位�
。
0, 不允许定时器3运行;
1, 允许定时器3运行。
B2 - T3_C/T: 控制定时器3用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数)
B1 - T3x12:定时器3速度控制位�
。
0, 定时器3速度是8051单片机定时器的速度,即12分频;
1, 定时器3速度是8051单片机定时器速度的12倍,即不分频。
676
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
6. 与串行口3中断相关的寄存器IE2
串行口3中断允许位ES3位于中断允许寄存器IE2中,中断允许寄存器的格式如下:
IE2 : 中断允许寄存器2 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
1,允许定时器4产生中断;
0,禁止定时器4产生中断。
ET3:定时器3的中断允许位。
1,允许定时器3产生中断;
0,禁止定时器3产生中断。
d
e
t
i
im
ES4 : 串行口4中断允许位。
1,允许串行口4中断;
0,禁止串行口4中断
ES3 : 串行口3中断允许位。
1,允许串行口3中断;
0,禁止串行口3中断。
ET2:定时器2的中断允许位。
1,允许定时器2产生中断;
0,禁止定时器2产生中断。
C
T
S
L
U
C
M
ESPI:SPI中断允许位。
1,允许SPI中断;
0,禁止SPI中断。
ES2 : 串行口2中断允许位。
1,允许串行口2中断;
0,禁止串行口2中断。
IE : 中断允许寄存器 (可位寻址)
SFR name
Address
bit
B7
IE
A8H
name
EA
B6
B5
ELVD EADC
B4
B3
B2
B1
B0
ES
ET1
EX1
ET0
EX0
EA : CPU的总中断允许控制位
1,CPU开放中断,
0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的
中断允许控制位控制。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
677
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7. 串行口3在2组管脚之间切换的控制位——S3_S/P_SW2.1
通过设置寄存器P_SW2中的S3_S位,可以将串口3在2组管脚之间任意切换,P_SW2寄存器的
格式如下:
P_SW2 : 外围设备切换控制寄存器2 (不可位寻址)
Mnemonic Add
P_SW2
Name
7
6
5
4
3
外围设备功能切换
BAH
控制寄存器2
2
1
0
Reset Value
S4_S
S3_S
S2_S
xxxx,x000
串口2/�������������
S2�����������
可在2个地方切换,由 �����������
S2_S 控制位来选择
S2_S S2可在P1/P4之间来回切换
0
串口2/S2在[P1.0/RxD2,P1.1/TxD2]
1
串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2]
串口3/�������������
S3�����������
可在2个地方切换,由 �����������
S3_S 控制位来选择
S3_S S3可在P0/P5之间来回切换
0
串口3/S3在[P0.0/RxD3,P0.1/TxD3]
1
串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2]
串口4/�������������
S4�����������
可在2个地方切换,由 �����������
S4_S 控制位来选择
S4_S S4可在P0/P5之间来回切换
0
串口4/S4在[P0.2/RxD4,P0.3/TxD4]
1
串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2]
C
T
S
678
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.9 串行口3工作模式
STC15W4K60S4系列单片机的串行口3有两种工作模式,可通过软件编程对S3CON中的
S3SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个
启动位和1个停止位。
8.9.1 串行口3的工作模式0----8位UART,波特率可变
10�����
位数据通过RxD3/P0.0(RxD3/P5.0)接收,通过TxD3/P0.1(TxD3/P5.1)发送。一帧数据包含
一个起始位�����������������������������������
(0),8������������������������������
个数据位和一个停止位��������������������
(1)�����������������
。接收时,停止位进入特殊功能寄存器S3CON的
S3RB8位。串行口3既可以选择定时器2作其波特率发生器,也可以选择定时器3作其波特率发
生器。所以串行口3的波特率由定时器T2的溢出率或定时器T3的溢出率决定。
d
e
t
i
im
当串行口3选择定时器T2作为其波特率发生器(即S3ST3/S3SCON.1=0)时:
串口3在模式0的���
波特率 = 定时器��������
T2的溢出率/4
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
L
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
U
C
M
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
C
T
S
当串行口3选择定时器T3作为其波特率发生器(即S3ST3/S3SCON.1=1)时:
串口3波特率在模式0 = 定时器��������
T3的溢出率/4
,定时器�����
当T3工作在1T模式(T4T3M.1/T3x12=1)时�
3的溢出率=SYSclk / ( 65536 - [RL_TH3, RL_TL3] );
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4
当T3工作在12T模式(T4T3M.1/T3x12=0)时�
,定时器�����
3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]);
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4
上式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
679
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.9.2 串行口3的工作模式1----9位UART,波特率可变
11位数据通过TxD3/P0.1(TxD3/P5.1)发送,通过RxD3/P0.0(RxD3/P5.0)接收。一����
帧���
数据包
含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位数据
位来自特殊功能寄存器S3CON的S3TB8位.接收时,第9位进入特殊功能寄存器S3CON的S3RB8
位。串行口3既可以选择定时器2作其波特率发生器,也可以选择定时器3作其波特率发生器。
所以串行口3的波特率由定时器T2的溢出率或定时器T3的溢出率决定。
当串行口3选择定时器T2作为其波特率发生器(即S3ST3/S3SCON.1=0)时:
串口3在模式1的���
波特率 = 定时器��������
T2的溢出率/4
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
d
e
t
i
im
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
L
当串行口3选择定时器T3作为其波特率发生器(即S3ST3/S3SCON.1=1)时:
U
C
M
串口3波特率在模式1= 定时器T3的溢出率/4
,定时器�����
当T3工作在1T模式(T4T3M.1/T3x12=1)时�
3的溢出率=SYSclk / ( 65536 - [RL_TH3, RL_TL3] );
即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4
C
T
S
当T3工作在12T模式(T4T3M.1/T3x12=0)时�
,定时器�����
3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]);
即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4
上式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。
可见,模式1和模式0一样,其波特率可通过软件对定时器2或定时器3的设置进行波特率的
选择,是可变的。
用户在程序中如何具体使用串口3
1.设置串口3的工作模式,S3CON寄存器中的S3SM0决定了串口3的2种工作模式
2.设置串口3的波特率相应的寄存器:
�������
定时器����
3寄存器T3H / T3L
3.启动������
定时器���
3,让T3R位为1,������������
定时器���������
3就立即开始计数。
4.��
设置T4T3M.1/T3x12,确定定时器3的速度
5.打开串口3中断�����������
,设置��������
相应的控制位是:
ES3, EA
6.如要串口3接收,将S3REN置1 即可
如要串口3发送,将数据送入S3BUF即可,
接收完成标志S3RI,发送完成标志S3TI,要由软件清0。
680
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
8.10 串行口4的相关寄存器
符号
描述
地址
S4CON
S4BUF
串口4控制寄存器
84H
85H
串口4数据缓冲器
位地址及符号
MSB
复位值
LSB
S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI
0000,0000
xxxx,xxxx
T2H
定时器2高8位,装入重装数 D6H
0000 0000B
T2L
定时器2低8位,装入重装数 D7H
0000 0000B
AUXR
辅助寄存器
8EH
T4H
T4L
定时器4高8位寄存器
D2H
0000 0000B
定时器4低8位寄存器
D3H
0000 0000B
T4T3M
T4和T3的控制寄存器
D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B
IE2
中断允许寄存器
P_SW2
T0x12 T1x12 UART_M0x6 T2R T2_C/T
AFH
ET4
外围设备功能切换控制
BAH
寄存器
-
ET3
-
-
U
C
M
ES4
d
e
t
i
m
ES3
Li
-
-
T2x12 EXTRAM S1ST2
0000 0001B
ET2
ESPI
ES2
x000 0000B
S4_S
S3_S
S2_S
xxxx x000B
1. 串行口4的控制寄存器S4CON
串行口4控制寄存器S4CON用于确定串行口4的工作方式和某些控制功能。其格式如下:
C
T
S
S4CON : 串行口4控制寄存器
SFR name Address bit
B7
B6
B5
B4
B3
B2
B1
S4CON
84H name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI
B0
S4RI
S4SM0:指定串行口4的工作方式,如下表所示。
S4SM0 工作方式
功能说明
0
方式0
8位UART,波
(定时器T4的溢出率)/4
特率可变
1
方式1
9位UART,波
(定时器T4的溢出率)/4
特率可变
波特率
当T4T3M.5/T4x12=1时,定时器������
T4的溢出率 = SYSclk / ( 65536 - [RL_TH4, RL_TL4] )
当T4T3M.5/T4x12=0时,定时器T�����
4的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4] )
式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。
S4ST4:串口4(UART4)选择定时器4作波特率发生器的控制位。
0,��������������������
串�������������������
行������������������
口4选择定时器2����������
作为其�������
波特率发生器;
1��������������������
,�������������������
串������������������
行�����������������
口4���������������
选择定时器4作为其������
波特率发生器
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
681
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
S4SM2:允许方式1多机通信控制位。
在方式1时,如果S4SM2位为1且S4REN位为1,则接收机处于地址帧筛选状态。此时
可以利用接收到的第9位(即S4RB8)来筛选地址帧:若S4RB8=1,说明该帧是地址帧,
地址信息可以进入S4BUF,并使S4RI为1,进而在中断服务程序中再进行地址号比较;
若S4RB8=0,说明该帧不是地址帧,应丢掉且保持S4RI=0。在方式1中,如果S4SM2位
为0且S4REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S4RB8为0或1,
均可使接收到的信息进入S4BUF,并使S4RI=1,此时S4RB8通常为校验位.
方式0是非多机通信方式,在这种方式时,要设置S4SM2 应为0。
S4REN:允许/禁止串行口4接收控制位。由软件置位S4REN,即S4REN=1为允许串行接收状
态,可启动串行接收器RxD4,开始接收信息。软件复位S4REN,即S4REN=0,则禁
止接收。
S4TB8:在方式1,S4TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据
的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用.
d
e
t
i
im
S4RB8:在方式1,S4RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
方式0中不用S4RB8(置S4SM2=0, S4RB8是接收到的停止位)。
L
S4TI:发送中断请求标志位。在停止位开始发送时由S4TI内部硬件置位,即S4TI=1,响应中断
后S4TI必须用软件清零。
U
C
M
S4RI:接收中断请求标志位。在串行接收到停止位的中间时刻S4RI由内部硬件置位,即
S4RI=1,向CPU发中断申请,响应中断后S4RI必须由软件清零。
C
T
S
S4CON的所有位可通过整机复位信号复位为全�
“ 0”�
。 S4CON的字节地址为84H,不可
位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S4TI,即S4TI=1,请求
中断处理;当接收完一帧信息时,内部硬件自动置位S4RI,即S4RI=1,请求中断处理。由于
S4TI和S4RI以�������������������������������
“������������������������������
或逻辑���������������������������
”��������������������������
关系向主机请求中断,所以主机响应中断时事先并不知道是S4TI还是
S4RI请求的中断,必须在中断服务程序中查询S4TI和S4RI进行判别,然后分别处理。因此,
两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响
应的错误。
682
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
2. 串行口4的数据缓冲寄存器S4BUF
STC15W4K60S4系列单片机的串行口4数据缓冲寄存器(S4BUF)的地址是85H,实际是2个缓
冲器,写S4BUF的操作完成待发送数据的加载,读S4BUF的操作可获得已接收到的数据。两个操
作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S4BUF信号(MOV
S4BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为
移位寄存器的输出位。根据不同的工作方式会自动将�
“1”�
或S4TB8的值装入移位寄存器的第9
位,并进行发送.
串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收
完毕,移位寄存器中的数据字节装入串行数据缓冲器S4BUF中,其第9位则装入S4CON寄存器
中的S4RB8位。如果由于S4SM2使得已接收到的数据无效时,S4RB8和S4BUF中内容不变.
由于接收通道内设有输入移位寄存器和S4BUF缓冲器,从而能使一帧接收完将数据由移位
寄存器装入S4BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S4BUF缓冲器
中将数据取走,否则前一帧数据将丢失。S4BUF以并行方式送往内部数据总线。
U
C
M
d
e
t
i
im
L
3. 串行口4既能选择定时器2作为其波特率发生器,也能选择定时器4作为其波特率
发生器——定时器2的寄存器T2H, T2L和定时器4的寄存器T3H, T3L
定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用
于保存重装时间常数。
C
T
S
定时器4寄存器T4H(地址为D2H,复位值为00H)及寄存器T3L(地址为D3H,复位值为00H)用
于保存重装时间常数。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
683
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
4. 定时器2的控制位——TR2、T2_C/T、T2x12
AUXR : 辅助寄存器 (不可位寻址)
SFR name
Address
AUXR
8EH
bit
B7
B6
B5
name T0x12 T1x12 UART_M0x6
B4
B3
B2
T2R
T2_C/T
T2x12
B1
B0
EXTRAM S1ST2
T2R: 定时器2允许控制位
0, 不允许定时器2运行;
1, 允许定时器2运行
T2_C/T: 控制定时器2用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数)
T2x12: 定时器2速度控制位
0, 定时器2是传统8051速度,12分频;
1, 定时器2的速度是传统8051的12倍,不分频
如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T.
U
C
M
5. 定时器4的控制位——TR4、T4_C/T、T4x12
T4T3M(不可位寻址)
SFR name Address
T4T3M
D1H
bit
B7
name
T4R
C
T
S
B6
B5
B4
d
e
t
i
im
L
B3
B2
B1
B0
T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO
B7 - T4R:定时器4运行控制位�
。
0, 不允许定时器4运行;
1, 允许定时器4运行。
B6 - T4_C/T: 控制定时器4用作定时器或计数器。
0, 用作定时器(对内部系统时钟进行计数);
1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数)
B5 - T4x12:定时器4速度控制位�
。
0, 定时器4速度是8051单片机定时器的速度,即12分频;
1, 定时器4速度是8051单片机定时器速度的12倍,即不分频。
684
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
6. 与串行口4中断相关的寄存器IE2
串行口4中断允许位ES4位于中断允许寄存器IE2中,中断允许寄存器的格式如下:
IE2 : 中断允许寄存器2 (不可位寻址)
SFR name
IE2
Address
AFH
bit
name
B7
-
B6
ET4
B5
ET3
B4
ES4
B3
ES3
B2
ET2
B1
ESPI
B0
ES2
ET4:定时器4的中断允许位。
1,允许定时器4产生中断;
0,禁止定时器4产生中断。
ET3:定时器3的中断允许位。
1,允许定时器3产生中断;
0,禁止定时器3产生中断。
d
e
t
i
im
ES4 : 串行口4中断允许位。
1,允许串行口4中断;
0,禁止串行口4中断
ES3 : 串行口3中断允许位。
1,允许串行口3中断;
0,禁止串行口3中断。
ET2:定时器2的中断允许位。
1,允许定时器2产生中断;
0,禁止定时器2产生中断。
C
T
S
L
U
C
M
ESPI:SPI中断允许位。
1,允许SPI中断;
0,禁止SPI中断。
ES2 : 串行口2中断允许位。
1,允许串行口2中断;
0,禁止串行口2中断。
IE : 中断允许寄存器 (可位寻址)
SFR name
Address
bit
B7
IE
A8H
name
EA
B6
B5
ELVD EADC
B4
B3
B2
B1
B0
ES
ET1
EX1
ET0
EX0
EA : CPU的总中断允许控制位
EA=1,CPU开放中断,
EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的
中断允许控制位控制。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
685
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
7. 串行口4在2组管脚之间切换的控制位——S4_S/P_SW2.2
通过设置寄存器P_SW2中的S4_S位,可以将串口4在2组管脚之间任意切换,P_SW2寄存器的
格式如下:
P_SW2 : 外围设备切换控制寄存器2 (不可位寻址)
Mnemonic Add
P_SW2
Name
7
6
5
4
3
外围设备功能切换
BAH
控制寄存器2
2
1
0
Reset Value
S4_S
S3_S
S2_S
xxxx,x000
串口2/�������������
S2�����������
可在2个地方切换,由 �����������
S2_S 控制位来选择
S2_S S2可在P1/P4之间来回切换
0
串口2/S2在[P1.0/RxD2,P1.1/TxD2]
1
串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2]
串口3/�������������
S3�����������
可在2个地方切换,由 �����������
S3_S 控制位来选择
S3_S S3可在P0/P5之间来回切换
0
串口3/S3在[P0.0/RxD3,P0.1/TxD3]
1
串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2]
U
C
M
串口4/�������������
S4�����������
可在2个地方切换,由 �����������
S4_S 控制位来选择
S4_S S4可在P0/P5之间来回切换
0
串口4/S4在[P0.2/RxD4,P0.3/TxD4]
1
串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2]
C
T
S
686
南通国芯微电子有限公司
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.11 串行口4工作模式
STC15W4K60S4系列单片机的串行口4有两种工作模式,可通过软件编程对S4CON中的
S4SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个
启动位和1个停止位。
8.11.1 串行口4的工作模式0----8位UART,波特率可变
10�����
位数据通过RxD4/P0.2(RxD4_2/P5.2)接收,通过TxD4/P0.3(TxD4_2/P5.3)发送。一帧
数据包含一个起始位�����������������������������������
(0),8������������������������������
个数据位和一个停止位��������������������
(1)�����������������
。接收时,停止位进入特殊功能寄存器
S4CON的S4RB8位。串行口4既可以选择定时器2作其波特率发生器,也可以选择定时器4作其
波特率发生器。所以串行口4的波特率由定时器T2的溢出率或定时器T4的溢出率决定。
d
e
t
i
im
当串行口4选择定时器T2作为其波特率发生器(即S4ST4/S4SCON.1=0)时:
串口4在模式0的���
波特率 = 定时器��������
T2的溢出率/4
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
L
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
U
C
M
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
C
T
S
当串行口4选择定时器T4作为其波特率发生器(即S4ST4/S4SCON.1=1)时:
串口4在模式0的���
波特率 = 定时器��������
T4的溢出率/4
,定时器�����
当T4工作在1T模式(T4T3M.5/T4x12=1)时�
4的溢出率=SYSclk / ( 65536 - [RL_TH4, RL_TL4] );
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4
当T4工作在12T模式(T4T3M.5/T4x12=0)时�
,定时器�����
4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]);
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4
上式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
687
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.11.2 串行口4的工作模式1----9位UART,波特率可变
11位数据通过TxD4/P0.3(TxD4_2/P5.3)发送,通过RxD4/P0.2(RxD4_2/P5.2)接收。一��
帧�
数
据包含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位
数据位来自特殊功能寄存器S4CON的S4TB8位.接收时,第9位进入特殊功能寄存器S4CON的
S4RB8位。串行口4既可以选择定时器2作其波特率发生器,也可以选择定时器4作其波特率发
生器。所以串行口4的波特率由定时器T2的溢出率或定时器T4的溢出率决定。
当串行口4选择定时器T2作为其波特率发生器(即S4ST4/S4SCON.1=0)时:
串口4在模式1的���
波特率 = 定时器��������
T2的溢出率/4
,定时器�����
当T2工作在1T模式(AUXR.2/T2x12=1)时�
2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] );
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4
当T2工作在12T模式(AUXR.2/T2x12=0)时�
,定时器�����
2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]);
d
e
t
i
im
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4
上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。
L
当串行口4选择定时器T4作为其波特率发生器(即S4ST4/S4SCON.1=1)时:
U
C
M
串口4在模式1的���
波特率= 定时器T4的溢出率/4
,定时器�����
当T4工作在1T模式(T4T3M.5/T4x12=1)时�
4的溢出率=SYSclk / ( 65536 - [RL_TH4, RL_TL4] );
即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4
C
T
S
当T4工作在12T模式(T4T3M.5/T4x12=0)时�
,定时器�����
4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]);
即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4
上式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。
可见,模式1和模式0一样,其波特率可通过软件对定时器2的设置进行波特率的选择,是
可变的。
用户在程序中如何具体使用串口4
1.设置串口4的工作模式,S4CON寄存器中的S4SM0决定了串口4的2种工作模式
2.设置串口4的波特率相应的寄存器:
�������
定时器����
4寄存器T4H / T4L
3.启动������
定时器���
4,让T4R位为1,������������
定时器���������
4就立即开始计数。
4.��
设置T4T3M.5/T4x12,确定定时器4的速度
5.打开串口4中断�����������
,设置��������
相应的控制位是:
ES4, EA
6.如要串口4接收,将S4REN置1 即可
如要串口4发送,将数据送入S4BUF即可,
接收完成标志S4RI,发送完成标志S4TI,要由软件清0。
688
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.12 双机通信
STC15系列单片机的串行通信根据其应用可分为双机通信和多机通信两种。下面先介绍双
机通信。
如果两个8051应用系统相距很近,可将它们的串行端口直接相连(TXD—RXD,RXD—
地),即可实现双机通信。为了增加通信距离,减少通道及电源干扰,
TXD,GND—GND—�������������������������������
可采用RS—232C或RS—422、RS—485标准进行双机通信,两通信系统之间采用光�����
—����
电隔离技
术,以减少通道及电源的干扰,提高通信可靠性。
8051
TxD
RxD
RxD
TxD
GND
GND
U
C
M
d
e
t
i
im
8051
L
为确保通信成功,通信双方必须在软件上有系列的约定通常称为软件通信�������
“������
协议����
”���
。现举
例简介双机异步通信软件�������
“������
协议����
”���
如下:
C
T
S
通信双方均选用2400波特的传输速率,设系统的主频SYSclk=6MHz,甲机发送数据,乙机
接收数据。在双机开始通信时,先由甲机发送一个呼叫信号(例如�
“06H”��������
),以询问乙机是
否可以接收数据;乙机接收到呼叫信号后,若同意接收数据,则发回�
“00H”�������
作为应答信号,
否则发�
“05H”���������������������������
表示暂不能接收数据,;甲机只有在接收到乙机的应答信号�
“00H”����
后才可将
存储在外部数据存储器中的内容逐一发送给乙机,否则继续向乙机发呼叫信号,直到乙机同意
接收。其发送数据格式如下:
字节数n
数据1
数据2
数据3
…
数据n
累加校验和
字节数n:甲机向乙机发送的数据个数;
数据1~数据n:甲机将向乙机发送的n帧数据;
累加校验和:为字节数n、数据1、����
…���
、数据n,这(n+1)个字节内容的算术累加和.
乙机根据接收到的������������
“�����������
校验和��������
”�������
判断已接收到的n个数据是否正确。若接收正确,向甲机回发
“0FH”���������
信号才算完成发送任
“0FH”信号,否则回发“F0H”信号。甲机只有在接收到乙机发回的�
务,返回被调用的程序,否则继续呼叫,重发数据。
不同的通信要求,软件�����������������������������
“����������������������������
协议��������������������������
”�������������������������
内容也不一样,有关需甲、乙双方共同遵守的约定应尽量
完善,以防止通信不能正确判别而失败。
STC15系列单片机的串行通信,可直接采用查询法,也可采用自动中断法。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
689
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
(1)������������
查询方式双机通信软件举例
①��������
甲机发送子程序段
下图为甲机发送子程序流程图。
开始
定时器,串行口初始化
发送数据
地址指针DPTR,长度计数器
R7,校验寄存器R6置初值
发送完否?
N
Y
发送校验和
d
e
t
i
im
发送呼叫信号06H
等待乙机回答
等待乙机回答
N
是00H?
Y
C
T
S
发字节长度数
CU
N
L
M
传送正确吗?
Y
返回
甲机发送程序设置:
(a) ��������������������������������������������
波特率设置:选用定时器���������������������������������
/��������������������������������
计数器�����������������������������
1����������������������������
定时模式、工作方式�������������������
2������������������
,计数常数�������������
F3H����������
,���������
SMOD=1���
。波
特率为����������
2400������
(位����
/���
秒);
(b) ��������������������
串行通信设置:异步通信方式�������
1������
,允许接收;
(c) ��������������
内部������������
RAM���������
和工作寄存器设置:
31H������������������
���������������������
和�����������������
30H��������������
单元存放发送的数据块首地址;
2FH�������������
����������������
单元存放发送的数据块个数;
R6��������
����������
为累加和寄存器。
690
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
甲机发送子程序清单:
START:
MOV
MOV
MOV
MOV
MOV
SETB
ST-RAM:
MOV
MOV
MOV
MOV
TX-ACK:
MOV
MOV
WAIT1:
JBC
SJMP
RX-YES:
JBC
SJMP
NEXT1:
MOV
CJNE
TX-BYT:
MOV
TMOD,#20H
TH1, #0F3H
TL1, #0F3H
SCON, #50H
PCON, #80H
TR1
;设置定时器/计数器1定时、工作方式2
;设置定时计数常数
;
;串口初始化
;设置SMOD=1
;启动定时
DPH,
DPL,
R7,
R6,
31H
30H
2FH
#00H
;设置外部RAM数据指针
;DPTR初值
;发送数据块数送R7
;累加和寄存器R6清0
A,
#06H
;
SBUF, A
;
T1,
WAIT1
;等待发送完呼叫信号
;未发送完转WATI1
RX – YES
RI,
NEXT1
RX-YES
C
T
S
d
e
t
i
im
发送呼叫信号“06H”
U
C
M
L
;判断乙机回答信号
;未收到回答信号,则等待
A,
A,
SBUF
;接收回答信号送A
#00H, TX-ACK ;判断是否“00H”,否则重发呼叫信号
A,
R7
;
MOV SBUF,
ADD A,
MOV R6,
WAIT2:
JBC
TI,
A
R6
A
;
TX-NES
;
JMP
TX-NES:
MOVX
MOV
ADD
MOV
INC
WAIT2
;
A,
SBUF,
A,
R6,
DPTR
@DPTR
A
R6
A
;从外部RAM取发送数据
;发送数据块
南通国芯微电子有限公司
发送数据块数n
等待发送完
;DPTR指针加1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
691
STC15F2K60S2系列单片机指南
WAIT3:
JBC
SJMP
NEXT2:
DJNZ
TX-SUM:
MOV
MOV
WAIT4:
JBC
NEXT2
;判断一数据块发送完否
;等待发送完
R7,
TX-NES
;判断发送全部结束否
A,
R6
SBUF, A
TI,
SJMP
IF-0FH:
MOV
RX-0FH
RI,
A,
A,
; 等待发送完
;
IF-0FH
研发顾问Tel:13922805190
;发送累加和给乙机
RX-0FH
WAIT4
CJNE
RET
临时技术支持Tel:13922829991
TI,
WAIT3
SJMP
RX-0FH:
JBC
技术支持网站:www.GXWMCU.com
; 等待接收乙机回答信号
;
d
e
t
i
im
; 判断传输是否正确,否则重新发送
#0FH, ST-RAM ;
;返回
SBUF;
C
T
S
U
C
M
L
乙机接收子程序段
接收程序段的设置:
(a) ���������������
波特率设置初始化:同发送程序;
(b) ��������������
串行通信初始化:同发送程序;
(c) ������
寄存器设置:
内部RAM 31H、30H单元存放接收数据缓冲区首地址。
R7——数据块个数寄存器。
R6——累加和寄存器。
(d) ���������
向甲机回答信号:“0FH”为接收正确,“F0H”为传送出错,“00H”为同意接收数
据,“05H”为暂不接收。
692
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
下图为双机通信查询方式乙机接收子程序流程图。
开始
定时器,串行口初始化
接收数据并存入RAM
地址指针DPTR赋值,
校验寄存器清0
地址指针DPTR加1
数据接收完否?
N
Y
接收呼叫信号
接收校验和
是06H?
d
e
t
i
im
Y
传送正确吗?
N
向甲机回送15H
向甲机回送00H
C
T
S
接收数据块长度
U
C
M
Y
N
L
向甲机回送F0H
向甲机回送0FH
返回
接收子程序清单:
TART:
MOV
MOV
TMOD, #20H
TH1, #0F3H
;
TL1, #0F3H
TR1
SCON, #50H
定时器/计数器1设置
;
;启动定时器/计数器1
; 置串行通信方式1,允许接收
MOV
ST-RAM:
MOV
PCON, #80H
;
DPH, 31H
;
DPL, 30H
R6, #00H
MOV
SETB
MOV
MOV
MOV
南通国芯微电子有限公司
SMOD置位
设置DPTR首地址
;
;校验和寄存器清0
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
693
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RX-ACK:
JBC
RI,
SJMP
RX-ACK
MOV
A,
CJNEA #06H, TX-05H
IF-06H
;判断接收呼叫信号
;等待接收呼叫信号
IF-06H:
SBUF
;呼叫信号送A
;判断呼叫信号正确否?
TX-00H:
MOV
A,
#00H
MOV
WAIT1:
SBUF, A
JBC
TI,
SJMP
WAIT1
;
;
RX-BYS
向甲机发送“00H”,同意接收
;等待应答信号发送完
d
e
t
i
im
TX-05H:
MOV
A,
#05H
MOV
SBUF, A
;向甲机发送“05H”呼叫
;不正确信号
WAIT2:
JBC
TI,
SJMP WAIT2
HAVE1:
RX-BYS:
JBC
RI,
HAVE2
SJMP RX-BYS
L
;因呼叫错,返回重新接收呼叫
C
T
S
LJMP RX-ACK
;等待发送完
U
C
M
HAVE1
;等待接收数据块个数
;
HAVE2:
MOV
A,
SBUF
;
MOV R7,
A
;数据块个数帧送R7,R6
MOV R6,
A
;
RX-NES:
JBC
RI,
HAVE3
SJMP RX-NES
HAVE3:
MOV
MOVX @DPTR,A
INC
DPTR
ADD
A,
R6
MOV
DJNZ
R6,
R7,
A
RX-NES
694
;
A,
;
SBUF
;
;接收到的数据存入外部RAM
;
南通国芯微电子有限公司
接收数据帧
;
形成累加和
;
;判断数据是否接收完
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
RX-SUM:
JBC
RI,
SJMP RX-SUM
HAVE4:
;
;
HAVE4
MOV
A,
SBUF
CJNE
TX-RIT:
A,
R6,
A,
#0FH
MOV
MOV
WAIT3:
SBUF, A
TI,
JBC
WAIT3
MOV
A,
MOV
SBUF, A
JBC
TI,
;
;
;
;
;
GOOD
SJMP
TX-ERR:
;
TX-ERR
#0F0H
AGAIN
等待发送结束
SJMP WAIT4
AGAIN:
LJMP
C
T
S
ST-RAM
GOOD:
RET
d
e
t
i
im
;向甲机发送传输有误信号
L
;等待发送完
U
C
M
判断传输是否正确
向甲机发送接收正确信息
WAIT4:
等待接收校验和
;返回重新开始接收
;传输正确返回
(2)中断方式双机通信软件举例
在很多应用场合,双机通信的双方或一方采用中断方式以提高通信效率。由于STC15系列
单片机的串行通信是双工的,且中断系统只提供一个中断矢量入口地址,所以实际上是中断和
查询必须相结合,即接收/发送均可各自请求中断,响应中断时主机并不知道是谁请求中断,
统一转入同一个中断矢量入口,必须由中断服务程序查询确定并转入对应的服务程序进行处
理。
这里,任以上述协议为例,甲方(发送方)任以查询方式通信(从略),乙方(接收方)
则改用中断����������
—���������
查询方式进行通信。
在中断接收服务程序中,需设置三个标志位来判断所接收的信息是呼叫信号还是数据块个
数,是数据还是校验和。增设寄存器:内部RAM32H单元为数据块个数寄存器,33H单元为校
验和寄存器,位地址7FH、7EH、7DH为标志位。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
695
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
乙机接收中断服务程序清单
采用中断方式时,应在主程序中安排定时器/计数器、串行通信等初始化程序。通信接收的数据存放在外
部RAM的首地址也需在主程序中确定。
主程序:
ORG
AJMP START
0000H
ORG
0023H
LIMP
SERVE
;转至主程序起始处
;转中断服务程序处
·
·
·
START:
696
MOV
TMOD, #20H
MOV
TH1, #0F3H
MOV
MOV
TL1, #0F3H
SCON, #50H
MOV
PCON, #80H
SETB
TR1
SETB
7FH
SETB
7EH
SETB
7DH
MOV
31H,#10H
MOV
MOV
SETB
SETB
30H,#00H
33H,#00H
EA
ES
C
T
S
d
e
t
i
im
;定义定时器/计数器1定时、工作方式2
;
设置波特率为2400位/秒
;
;设置串行通信方式1,允许接收
U
C
M
;设置SMOD=1
L
;启动定时器
;
;设置标志位为1
;
; 规定接收的数据存储于外部RAM的
;
起始地址1000H
;累加和单元清0
;
;
开中断
·
·
·
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
中断服务程序:
SERVE:
CLR
EA
;关中断
CLR
RI
;清除接收中断请求标志
PUSH
DPH
;
PUSH DPL
; 现场保护
PUSH A
JB
7FH, RXACK
;判断是否是呼叫信号
JB
7EH, RXBYS
;判断是否是数据块数据
JB
7DH, RXDATA
;判断是否是接收数据帧
MOV
A,
;接收到的校验和
CJNE
A, 33H, TXERR
:判断传输是否正确
MOV
A,
;
;
;
RXSUM:
SBUF
d
e
t
i
im
TXRI:
#0FH
MOV
WAIT1:
SBUF, A
JNB
TI,
WAIT1
CLR
TI
SJMP
AGAIN
MOV
A,
TI,
CLR
TI
SJMP
AGAIN
;转结束处理
;
;
#0F0H
SBUF, A
JNB
;清除发送中断请求标志位
MOV
WAIT2:
U
C
M
;等待发送完毕
C
T
S
TXERR:
WAIT2
L
向甲机发送接收正确信号“0FH”
向甲机发送接收出错信号“F0H”
;等待发送完毕
;清除发送中断请求标志
;转结束处理
RXACK:
MOV
A,
SBUF
;判断是否是呼叫信号“06H”
XRL
A,
#06H
;异或逻辑处理
JZ
TXREE
;是呼叫,则转TXREE
TXNACK:
MOV
A,
MOV
SBUF, A
南通国芯微电子有限公司
#05H
;接收到的不是呼叫信号,则向甲机发送
;“05H”,要求重发呼叫
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
697
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
WAIT3:
JNB
TI,
CLR
TI
SJMP
RETURN
WAIT3
; 等待发送结束
;转恢复现场处理
TXREE:
MOV
A,
MOV
SBUF, A
;接收到的是呼叫信号,发送“00H”
;接收到的是呼叫信号,发送“00H”
#00H
WAIT4:
JNB
TI,
CLR
TI
CLR
7FH
SJMP
RETURN
WAIT4
;等待发送完毕
;清除TI标志
;清除呼叫标志
;转恢复现场处理
d
e
t
i
im
RXBYS:
MOV
A,
MOV
32H, A
ADD
A,
MOV
CLR
33H, A
7EH
SJMP
RETURN
RXDATA:
;接收到数据块数
;存入32H单元
33H
;
U
C
M
;转恢复现场处理
C
T
S
L
形成累加和
;
;清除数据块数标志
;
MOV
DPH, 31H
MOV
MOV
DPL, 30H
A,
SBUF
MOVX @DPTR, A
698
SBUF
设置存储数据地址指针
;
;读取数据帧
;将数据存外部RAM
;地址指针加1
INC
DPTR
MOV
31H, DPH
;
30H, DPL
A,
33H
MOV
ADD
;
;
MOV
DJNZ
33H, A
32H, RETURN
形成累加和
;
;判断数据接收完否
CLR
7DH
;清数据接收完标志
SJMP
RETURN
南通国芯微电子有限公司
保存地址指针值
;转恢复现场处理
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
AGAIN:
SETB
7FH
;
SETB
7EH
;恢复标志位
SETB
7DH
;
MOV
33H, #00H
;累加和单元清0
MOV
31H, #10H
;
MOV
RETURN:
30H,
;
POP
A
;
POP
DPL
;恢复现场
POP
DPH
;
SETB
EA
RET1
#00H
恢复接收数据缓冲区首地址
;开中断
d
e
t
i
im
;返回
L
上述程序清单中,ORG为程序段说明伪指令,在程序汇编时,它向汇编程序说明该程序段
的起始地址。
U
C
M
在实际应用中情况多种多样,而且是两台独立的计算机之间进行信息传输。因此,应周密
考虑通信协议,以保证通信的正确性和成功率
C
T
S
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
699
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.13 多机通信
在很多实际应用系统中,需要多台微计算机协调工作。STC15系列单片机的串行通信方
式2和方式3具有多机通信功能,可构成各种分布式通信系统。下图为全双工主从式多机通信
系统的连接框图。
TxD
STC
MCU RxD
主机
TxD
RxD
STC MCU 从机1
TxD
d
e
t
i
im
RxD
L
STC MCU 从机2
U
C
M
TxD
…
RxD
STC MCU 从机n
上图为一台主机和几台从机组成的全双工多机通信系统。主机可与任一台从机通信,而从
机之间的通信必须通过知己转发。
C
T
S
(1)���������
多机通信的基本原理
在多机通信系统中,为保证主机(发送)与多台从机(接收)之间能可靠通信,串行通
信必须具备识别能力。�����������������������������������
MCS-51�����������������������������
系列单片机的串行通信控制寄存器��������������
SCON����������
中设有多机通信选择位
SM2��������������������������������������������
。当程序设置��������������������������������������
SM2=1���������������������������������
,串行通信工作于方式�����������������������
2����������������������
或方式�������������������
8������������������
,发送端通过对�����������
TB8��������
的设置以区别于发
送的是地址帧(�������������������������������������������
TB8=1��������������������������������������
)还是数据帧(�������������������������������
TB8=0��������������������������
),接收端通过对接收到���������������
RB8������������
进行识别:当������
SM2=1�
,
若接收到���������������������������������������������
RB8=1����������������������������������������
,则被确认为呼叫地址帧,将该帧内容装入���������������������
SBUF�����������������
中,并置位������������
RI=1��������
,向������
CPU���
请求中
断,进行地址呼叫处理;若����������������������������������
RB8=0�����������������������������
为数据帧,将不予理睬,接收的信息被丢弃。若��������
SM2=0���
,则无
论是地址帧还是数据帧均接收,并置位�����������������������������
RI=1�������������������������
,向�����������������������
CPU��������������������
请求中断,将该帧内容装入��������
SBUF����
。据此原
理,可实现多机通信。
对于上图的从机式多机通信系统,从机的地址为��������������������
0�������������������
,������������������
1�����������������
,����������������
2���������������
,��������������
…�������������
,������������
n�����������
。实现多机通信的过程如
下:
① �����������������������
置全部从机的�����������������
SM2=1������������
,处于只接收地址帧状态。
② 主机首先发送呼叫地址帧信息,将����������������������
�������������������������������������
TB8�������������������
设置为����������������
1���������������
,以表示发送的是�������
呼叫地址帧。
������
③ ������������������������������������
所有从机接收到呼叫地址帧后,各自将接收到的主机呼叫的地址与本机的地址相比
较:若比较结果相等,则为被寻址从机,清除�����������������������
SM2=0������������������
,准备接收从主机发送的数据帧,直至全
部数据传输完;若比较不相等,则为非寻址从机,任维持������������������
SM2=1�������������
不变,对其后发来的数据帧不
予理睬,即接收到的数据帧内容不装入����������������������������
SBUF������������������������
,不置位,�������������������
RI=0���������������
,不会产生中断请求,直至被寻址
为止。
700
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
④ 主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的�
�����������������������������
TB8=0��������������
,以表示为数据帧。�����
⑤ �������������������������������������
当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机,原先被寻址的从机经分
析得知主机在寻呼其他从机时,恢复其����������������������
SM2=1�����������������
,对其后主机发送的数据帧不予理睬。
上述过程均在软件控制下实现。
(2)��������
多机通信协议简述
由于串行通信是在二台或多台各自完全独立的系统之间进行信息传输这就需要根据时间通
信要求制定某些约定,作为通信规范遵照执行,协议要求严格、完善,不同的通信要求,协议
的内容也不相同。在多机通信系统中要考虑的问题较多,协议内容比较复杂。这里仅例举几条
作一说明。
上图的主从式多机通信系统,允许配置����������������
255�������������
台从机,各从机的地址分别为00H~FEH。
d
e
t
i
im
① ������������������������������������������
约定地址��������������������������������������
FFH�����������������������������������
为全部从机的控制命令,命令各从机恢复�����������������
SM2=1������������
状态,准备接收主机的地
址呼叫。
L
② 主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址
��������������������������������������
给主机,经验证地址相符后主机再向被寻址的从机发送命令字,被寻址的从机根据命
令字要求回送本机的状态,若主机判断状态正常,主机即开始发送或接收数据帧,发
送或接收的第一帧为传输数据块长度。
③ ������������
约定主机发送的命令字为:
C
T
S
00H�����������
:要求从机接收数据块;
U
C
M
01H�����������
:要求从机发送数据块;
·
·
·
其他:非法命令。
④ ������������
从机的状态字格式约定为:
B7
B6
B5
B4
B3
B2
B1
B0
ERR
0
0
0
0
0
TRDY
RRDY
���������������������
定义: 若����������������
ERR=1�����������
,从机接收到非法命令;
�����������������
若����������������
TRDY=1����������
,从机发送准备就绪;
�����������������
若����������������
RRDY=1����������
,从机接收准备就绪;
⑤ ������������
其他:如传输出错措施等。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
701
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
(3)����
程序举例
在实际应用中如传输波特率不太高,系统实时性有一定要求以及希望提高通信效率,则多
半采用中断控制方式,但程序调试较困难,这就要求提高程序编制的正确性。采用查询方式,
则程序调试较方便。这里仅以中断控制方式为例简单介绍主�������������
—������������
从机之间一对一通信软件。
① 主机发送程序
������
该主机要发送的数据存放在内部�����������������������������
RAM��������������������������
中,数据块的首地址为����������������
51H�������������
,数据块长度存放做����
50H�
单
元中,有关发送前的初始化、参数设置等采用子程序格式,所有信息发送均由中断服务程序完
成。当主机需要发送时,在完成发送子程序的调用之后,随即返回主程序继续执行。以后只需
查询���������������������������
PSW·5����������������������
的���������������������
F0�������������������
标志位的状态即可知道数据是否发送完毕。
要求主机向���������������������
#5�������������������
从机发送数据,中断服务程序选用工作寄存存器区1的R0~R7。
d
e
t
i
im
主机发送程序清单:
ORG
AJMP MAIN
ORG
0023H
LJMP
SERVE
0000H
.
.
.
MAIN: ...
...
C
T
S
.
.
.
ORG
1000H
;转主程序
;转中断服务程序
U
C
M
L
;发送中断服务程序入口
;主程序
;发送子程序入口
TXCALL:
;设置定时器/计数器1定时、方式2
MOV
TMOD, #20H
MOV
TH1, #0F3H
;设置波特率为2400位/秒
;置位SMOD
MOV
TL1, #0F3H
MOV
PCON, #80H
SETB
TR1
MOV
SCON, #0D8H
SETB
EA
;开中断总控制位
CLR
ES
;禁止串行通信中断
;
;启动定时器/计数器1
;串行方式8,允许接收,TB8=1
TXADDR:
MOV
SBUF, #05H
JNB
TI,
CLR
TI
;发送呼叫从机地址
WAIT1:
702
WAIT1
南通国芯微电子有限公司
;等待发送完毕
;复位发送中断请求标志
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
RXADDR:
;等待从机回答本机地址
;复位接收中断请求标志
JNB
RI,
RXADDR
CLR
TI
MOV
A,
SBUF
CJNE
A,
#05H, TXADDR
CLR
TB8
CLR
PSW.5
MOV
08H, #50H
MOV
0CH, 50H
INC
0CH
SETB
ES
RET
;读取从机回答的本机地址
;判断呼叫地址符否,否则重发
;地址相符,复位TB8=0,准备发数据
;复位F0=0标志位
;发送数据地址指针送R0
;数据块长度送R4
;数据块长度加1
;允许串行通信中断
;返回主程序
SERVE:
CLR
TI
PUSH PSW
PUSH A
CLR
RS1
C
T
S
SETB
TXDATA:
RS0
MOV
SBUF, @R0
WAIT2:
WAIT2
;
CU
M
L
;中断服务程序段,清中断请求标志TI
d
e
t
i
im
.
.
.
;
;
;
现场入栈保护
选择工作寄存器组1
;发送数据块长度及数据
;等待发送完毕
JNB
TI,
CLR
TI
INC
R0
DJNZ
R4,
SETB PSW.5
;已发送完毕置位F0=1
CLR
ES
;关闭串行中断
;复位TI=0
;地址指针加1
RETURN
;数据块未发送完,转返回
RETURN:
POP
A
POP
RETI
PSW
南通国芯微电子有限公司
;
恢复现场
;
;返回
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
703
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
②������
从机接收程序
主机发送的地址呼叫帧,所有的从机均接收,若不是呼叫本机地址即从中断返回;若是本
机地址,则回送本机地址给主机作为应答,并开始接收主机发送来的数据块长度帧,并存放于
内部RAM的60H单元中,紧接着接收的数据帧存放于61H为首地址的内部RAM单元中,程序
中还选用20·0H、20·1H位作标志位,用来判断接收的是地址、数据块长度还是数据,选用了
2FH、2EH两个字节单元用于存放数据字节数和存储数据指针。#5从机的接收程序如下,供参
考。
#5从机接收程序清单:
ORG
0000H
AJMP START
ORG
0023H
LJMP
SERVE
ORG
0100H
;转主程序段
;从中断入口转中断服务程序
START:
L
;主程序段:初始化程序,设置定时
MOV
TMOD, #20H
MOV
TH1, #0F3H
MOV
TL1, #0F3H
MOV
PCON, #80H
MOV
SCON, #0F0H
SETB
TR1
;启动定时器/计数器1
SETB
20·0
;
SETB
SETB
20·1
EA
;
;
SETB
.
.
.
ES
;
ORG
1000H
C
T
S
SERVE:
CLR
RI
PUSH A
704
d
e
t
i
im
;器/计数器1定时、工作方式2,设
U
C
M
;置波特率为2400位/秒的有关初值
;置位SMOD
;设置串行方式3,允许接收,SM2=1
置标志位为1
开中断
PUSH PSW
CLR
RS1
SETB
JB
RS0
20·0H,
ISADDR
;清接收中断请求标志RI=0
;
现场保护
;
;
选择工作寄存器组1
;
;判断是否是地址帧
JB
20·1H,
ISBYTE
;判断是否是数据块长度帧
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
官方网站:www.STCMCU.com
STC15F2K60S2系列单片机指南
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
ISDATA:
;数据指针送R0
MOV
R0,
2EH
MOV
A,
SBUF
MOV
@R0, A
INC
2EH
DJNZ
2FH, RETURN
SETB
20·0H
;
SETB
20·1H
;恢复标志位
SETB
SM2
SJMP
RETURN
;接收数据
;数据指针加1
;判断数据接收完否?
;
;转入恢复现场,返回
ISADDR:
MOV
A,
SBUF
CJNE
MOV
A,
#05H, RETURN
SBUF, #01H
JNB
TI,
CLR
TI
CLR
20·0H
CLR
SM2
SJMP
RETURN
; 是地址呼叫,判断与本机地址
d
e
t
i
im
相符否,不符则转返回
;
;相符,发回答信号“01H”
WAIT:
U
C
M
L
;等待发送结束
;清0TI,20·0,SM2
;清0TI,20·0,SM2
C
T
S
ISBYTES:
WAIT
;清0TI,20·0,SM2
;转返回
;接收数据块长度帧
MOV
A,
SBUF
MOV
R0,
#60H
MOV
@R0, A
;将数据块长度存入内部RAM
MOV
2FH, A
;60H单元及2FH单元
MOV
2EH, #61H
CLR
20·1H
;
;置首地址61H于2EH单元
;清20·1H标志,表示以后接收的为数据
RETURN:
POP
PSW
POP
RETI
A
;
恢复现场
;
;返回
多机通信方式可多种多样,上例仅以最简单的住一从式作了简单介绍,仅供参考。
对于串行通信工作方式0的同步方式,常用于通过移位寄存器进行扩展并行I/O口,或配置
某些串行通信接口的外部设备。例如,串行打印机、显示器等。这里就不一一举例了。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
705
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.14 串口1作为增强型串口使用时的自动地址识别功能
8.14.1 与串口1自动地址识别功能相关的特殊功能寄存器
符号
描述
地址
SCON
串口控制寄存器
98H
位地址及符号
MSB
SM0/FE
LSB
SM1
SM2
REN
TB8
RB8
TI
RI
复位值
0000 0000B
串口发送/接收数据缓冲器 99H
xxxx xxxxB
SADEN 从机地址屏蔽位寄存器 B9H
0000 0000B
SBUF
从机地址寄存器
SADDR
A9H
0000 0000B
1. 串行口1的控制寄存器SCON
串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下:
d
e
t
i
im
SCON : 串行控制寄存器 (可位寻址)
SFR name
SCON
Address
98H
bit
name
B7
SM0/FE
B6
SM1
B5
SM2
U
C
M
B4
REN
L
B3
TB8
B2
RB8
B1
TI
B0
RI
SM0/FE:当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个
无效停止位时,通过UART接收器设置该位。它必须由软件清零。
当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作
方式,如下表所示。
C
T
S
其中SM0、SM1按下列组合确定串行口1的工作方式:
SM0 SM1 工作方式
0
0
0
1
方式0
方式1
功能说明
波特率
同步移位串行方
式:移位寄存器
8位UART,
波特率可变
当UART_M0x6 = 0时,波特率是SYSclk/12,
当UART_M0x6 = 1时,波特率是SYSclk / 2
串行口1用定时器1作为其波特率发生器且定时器1工作于模式
0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器
时,波特率=�(定时器1的溢出率或定时器T��������
2的溢出率)��
/4.
注意:此时波特率与SMOD无关。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�)
1
1
0
1
方式2
方式3
9位UART
9位UART,
波特率可变
(2
SMOD
/ 64) x SYSclk系统工作时钟频率
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器
时,波特率=�(定时器1的溢出率或定时器T��������
2的溢出率)��
/4.
注意:此时波特率与SMOD无关。
当串行口1用定时器1作为其波特率发生器且定时器1工作于模式
2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�)
706
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
SM2:允许方式2或方式3多机通信控制位。
在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时
可以利用接收到的第9位(即RB8)来筛选地址帧:若RB8=1,说明该帧是地址帧,地址信
息可以进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较;若RB8=0,
说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位
为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的
信息进入SBUF,并使RI=1,此时RB8通常为校验位.
方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2 应为0。
REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动
串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。
TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数
据的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0和方式1中,该位不用.
d
e
t
i
im
RB8: 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
方式0中不用RB8(置SM2=0). 方式1中也不用RB8(置SM2=0, RB8是接收到的停止位)。
L
TI:
发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,
即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中,
则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。
RI:
接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,
向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收
到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须
由软件清零。
C
T
S
U
C
M
SCON的所有位可通过整机复位信号复位为全�
“ 0”�
。 SCON的字节地址为98H,可位寻
址,各位地址为98H~~9FH,可用软件实现位设置。
串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理;
当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以���
“��
或逻
辑���������������������������
”��������������������������
关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在
中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬
件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
707
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 串行口数据缓冲寄存器SBUF
STC15系列单片机的串行口1缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF
的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个
不同的寄存器,1个是只写寄存器,1个是只读寄存器。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号(MOV SBUF,A)
的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的
输出位。根据不同的工作方式会自动将�
“1”�
或TB8的值装入移位寄存器的第9位,并进行发送.
串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为
9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入
SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变.
由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位
寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中
将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。
3. 从机地址控制寄存器SADEN和SADDR
U
C
M
d
e
t
i
im
L
为了方便多机通信,STC15系列单片机设置了从机地址控制寄存器SADEN和SADDR。其中
SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为
A9H,复位值为00H)。
C
T
S
708
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.14.2 串口1自动地址识别功能的介绍
自动地址识别功能典型应用在多机通讯领域,其主要原理是从机系统通过硬件比较功能来
识别来自于主机串口数据流中的地址信息,通过寄存器SADDR和SADEN设置的本机的从机地址,
硬件自动对从机地址进行过滤,当来自于主机的从机地址信息与本机所设置的从机地址相匹配
时,硬件产生串口中断;否则硬件自动丢弃串口数据,而不产生中断。当众多处于空闲模式的
从机链接在一起时,只有从机地址相匹配的从机才会从空闲模式唤醒,从而可以大大降低从机
MCU的功耗,即使从机处于正常工作状态也可避免不停地进入串口中断而降低系统执行效率。
要使用串口的自动地址识别功能,首先需要将参与通讯的MCU的串口通讯模式设置为模式2
或者模式3(通常都选择波特率可变的模式3,因为模式2的波特率是固定的,不便于调节),
并开启从机的SCON的SM2位。对于串口模式2或者模式3的9位数据位中,第9位数据(存放在RB8
中)为地址/数据的标志位,当第9位数据为1时,表示前面的8位数据(存放在SBUF中)为地址
信息。当SM2=1时,从机MCU会自动过滤掉非地址数据(第9位为0的数据),而对SBUF中的地
址数据(第9位为1的数据)自动与SADDR和SADEN所设置的本机地址进行比较,若地址相匹配,
则会将RI置“1”,并产生中断,否则不予处理本次接收的串口数据。
d
e
t
i
im
L
从机地址的设置是通过SADDR和SADEN两个寄存器进行设置的。SADDR为从机地址寄存器,
里面存放本机的从机地址。SADEN为从机地址屏蔽位寄存器,用于设置地址信息中的“don’t
care bit”(忽略位),设置方法如下:
C
T
S
U
C
M
例如
SADDR = 11001010
SADEN = 10000001
则匹配地址为 1xxxxxx0
即,只要主机送出的地址数据中的bit0为0且bit7为1就可以和本机地址相匹配
再例如
SADDR = 11001010
SADEN = 00001111
则匹配地址为 xxxx1010
即,只要主机送出的地址数据中的低4位为1010就可以和本机地址相匹配,而高4为被忽略,可
以为任意值。
主机可以使用广播地址(FFH)同时选中所有的从机来进行通讯。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
709
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
-12V
TxD
RS232
CONVERTER
……
RS232
CONVERTER
STC15W4K60S4
STC15W4K60S4
SLAVER-1
PC COM
TxD
RxD
RxD
10K
TxD
1
6
2
7
3
8
4
9
5
RxD
J1
SLAVER-n
示例代码的测试方法:
d
e
t
i
im
1、 �����
首先将两个MCU按照上图的链接方法与电脑相连接
2、 ����
将代码中SLAVE定义为0(“#define
SLAVER 0”),编译产生的HEX文件烧录到
SLAVER-1的MCU中;然后将SLAVE定义为1(“#define SLAVER 1”),编译产生的HEX
文件烧录到SLAVER-2的MCU中
C
T
S
U
C
M
L
3、 ���������������������
在PC端,打开串口助手,将串口设置如有图,
注意校验位
4、 ����������������������������������������
在串口助手终端,发送0x55,则会选中从机1,此时从机1应答的数据为8个0x78
710
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
5、 ������������������������������������������
串口助手终端再发送0x5a,则会选中从机2,此时从机2应答的数据为8个0x49,如图
d
e
t
i
im
L
8.14.3 串口1自动地址识别功能的测试程序(C和汇编)
U
C
M
1. C程序:
/*----------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited -----------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 串口1地址自动识别举例举例------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*----------------------------------------------------------------------------------------------*/
C
T
S
//假定测试芯片的工作频率为18.432MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
//----------------------------------------------#define SLAVER
#if
SLAVER ==
#define SAMASK
南通国芯微电子有限公司
0
0
0x33
//定义从机编号,0为从机1, 1为从机2
//从机1地址屏蔽位
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
711
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
#define
#define
#else
#define
#define
#define
#endif
SERADR
ACKTST
0x55
0x78
//从机1的地址为xx01,xx01
//从机1应答测试数据
SAMASK
SERADR
ACKTST
0x3C
0x5A
0x49
//从机2地址屏蔽位
//从机2的地址为xx01,10xx
//从机2应答测试数据
#define URMD 0
临时技术支持Tel:13922829991
//0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器
sfr
sfr
T2H
T2L
=
=
0xd6;
0xd7;
//定时器2高8位
//定时器2低8位
sfr
AUXR =
0x8e;
//辅助寄存器
sfr
sfr
SADDR =
SADEN =
0xA9;
0xB9;
//从机地址寄存器
//从机地址屏蔽寄存器
void InitUart();
char count;
void main()
{
InitUart();
ES = 1;
EA = 1;
while (1);
}
研发顾问Tel:13922805190
C
T
S
U
C
M
d
e
t
i
im
L
//初始化串口
/*---------------------------UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (TI)
{
TI = 0;
//清除TI位
if (count != 0)
{
count--;
SBUF = ACKTST;
//继续发送应答数据
}
else
{
SM2 = 1;
//若发送完成,则重新开始地址检测
}
}
712
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
if (RI)
{
}
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
RI
SM2
count
SBUF
=
=
=
=
0;
0;
7;
ACKTST;
//清除RI位
//本机被选中后,进入数据接收状态
//并开发送应答数据
}
/*---------------------------初始化串口
----------------------------*/
void InitUart()
{
SADDR =
SADEN =
SCON =
#if
#elif
#else
#endif
}
URMD
T2L
T2H
AUXR
AUXR
URMD
AUXR
TMOD
TL1
TH1
TR1
==
=
=
=
|=
==
=
=
=
=
=
TMOD
AUXR
TH1 =
TR1
=
=
TL1 =
=
南通国芯微电子有限公司
SERADR;
SAMASK;
0xf8;
0
0xd8;
0xff;
0x14;
0x01;
1
0x40;
0x00;
0xd8;
0xff;
1;
0x20;
0x40;
0xfb;
1;
L
//设置波特率重装值
//115200 bps(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
U
C
M
C
T
S
d
e
t
i
im
//设置串口为9位可变波特率,使能多机通讯检测,
//(将TB8设置为1,方便与PC直接通讯测试)
//定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值
//115200 bps(65536-18432000/4/115200)
//定时器1开始启动
//设置定时器1为8位自动重装载模式
//定时器1为1T模式
//115200 bps(256 - 18432000/32/115200)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
713
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*-----------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------------------------*/
/* --- STC15F2K60S2 系列 串口1地址自动识别举例举例-------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可 */
/*----------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
#define SLAVER
0
#if
SLAVER ==
#define SAMASK
#define SERADR
#define ACKTST
#else
#define SAMASK
#define SERADR
#define ACKTST
#endif
0
0x33
0x55
0x78
0x3C
0x5A
0x49
#define URMD 0
C
T
S
d
e
t
i
im
//定义从机编号,0为从机1, 1为从机2
L
//从机1地址屏蔽位
//从机1的地址为xx01,xx01
//从机1应答测试数据
U
C
M
//从机2地址屏蔽位
//从机2的地址为xx01,10xx
//从机2应答测试数据
T2H DATA 0D6H
T2L
DATA 0D7H
AUXR DATA 08EH
//0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器
//定时器2高8位
//定时器2低8位
//辅助寄存器
SADDR DATA 0A9H
SADEN DATA 0B9H
//从机地址寄存器
//从机地址屏蔽寄存器
COUNT DATA 20H
//----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
//----------------------------------------
ORG 0100H
MAIN:
MOV SP,
#3FH
714
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
LCALL INIT_UART
SETB ES
SETB EA
SJMP $
//----------------------------------------//串口中断服务程序
UART_ISR:
PUSH PSW
PUSH ACC
JNB TI,
CHK_RX
CLR TI
MOV A,
COUNT
JZ
RESTART
DEC COUNT
MOV SBUF, #ACKTST
JMP UREXIT
RESTART:
SETB SM2
JMP UREXIT
CHK_RX:
JNB RI,
UREXIT
CLR RI
CLR SM2
MOV SBUF, #ACKTST
MOV COUNT, #7
UREXIT:
POP ACC
POP PSW
RETI
C
T
S
/*---------------------------初始化串口
----------------------------*/
INIT_UART:
MOV SADDR, #SERADR
MOV SADEN, #SAMASK
MOV SCON, #0F8H
URMD
==
MOV T2L,
MOV T2H,
MOV AUXR,
ORL AUXR,
URMD
==
MOV AUXR,
MOV TMOD,
MOV TL1,
MOV TH1,
南通国芯微电子有限公司
0
#0D8H
#0FFH
#14H
#01H
1
#40H
#00H
#0D8H
#0FFH
STC — 全球最大的8051单片机设计公司
//初始化串口
//发送完成8个数据后,就不再发送
//发送应答测试数据
d
e
t
i
im
//若发送完成,则重新开始地址检测
U
C
M
L
//本机被选中后,进入数据接收状态
//并开发送应答数据
#if
#elif
研发顾问QQ:800003751
//设置串口为9位可变波特率,使能多机通讯检测,
//(将TB8设置为1,方便与PC直接通讯测试)
//设置波特率重装值(65536-18432000/4/115200)
//T2为1T模式, 并启动定时器2
//选择定时器2为串口1的波特率发生器
//;定时器1为1T模式
//定时器1为模式0(16位自动重载)
//设置波特率重装值(65536-18432000/4/115200)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
715
STC15F2K60S2系列单片机指南
#else
#endif
SETB
TR1
MOV
MOV
MOV
MOV
SETB
TMOD,
AUXR,
TL1,
TH1,
TR1
技术支持网站:www.GXWMCU.com
#20H
#40H
#0FBH
#0FBH
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
//定时器1开始运行
//设置定时器1为8位自动重装载模式
//定时器1为1T模式
//115200 bps(256 - 18432000/32/115200)
RET
//----------------------------------------
END
C
T
S
716
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
8.15 串行口1的中继广播方式
串行口1可在3组管脚间进行切换:[RxD/P3.0, TxD/P3.1];[RxD_2/P3.6, TxD_2/P3.7];
[RxD_3/P1.6, TxD_3/P1.7].
Mnemonic Add Name
7
BB6
B5
B4
B3
B2
B1
B0 Reset Value
CLK_DIV
时钟分频
97H
MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000,0000
(PCON2)
寄存器
Tx_Rx:串口1的中继广播方式设置
0:串口1为正常工作方式
1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD
外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时
反映RxD端口输入的电平状态。
d
e
t
i
im
串口1的RxD管脚和TxD管脚可以在3组不同管脚之间进行切换:[RxD/P3.0, TxD/P3.1];
[RxD_2/P3.6, TxD_2/P3.7];
[RxD_3/P1.6, TxD_3/P1.7].
U
C
M
L
串行口1的中继广播方式除可以在用户程序中设置Tx_Rx/CLK_DIV.4来选择外,还可以在
STC-ISP下载编程软件中设置。
当单片机的工作电压低于上电复位门槛电压(POR,3V单片机在1.8V附近,5V单片机在3.2V
附近)时,Tx_Rx默认为0,即串行口1默认为正常工作方式。当单片机的工作电压高于上电复
位门槛电压(POR,3V单片机在1.8V附近,5V单片机在3.2V附近)时,单片机首先读取用户在
STC-ISP下载编程软件中的设置,如果用户允许了“单片机TxD管脚的对外输出实时反映RxD端
口输入的电平状态”即中继广播方式,则上电复位后P3.7/TxD_2管脚的对外输出可以实时反映
P3.6/RxD_2端口输入的电平状态,如果用户未选择“单片机TxD管脚的对外输出实时反映RxD端
口输入的电平状态”,则上电复位后串口1为正常工作方式,即P3.7/TxD_2管脚的对外输出不
实时反映P3.6/RxD_2端口输入的电平状态。
C
T
S
串行口1的位置和中继广播方式除可以在STC-ISP下载编程软件中设置外,还可以在用户的
用户程序中用设置。在STC-ISP下载编程软件中的设置是在单片机上电复位后就可以执行的,
如果用户在用户程序中的设置与STC-ISP下载编程软件中的设置不一致时,当执行到相应的用
户程序时就会覆盖原来STC-ISP下载编程软件中的设置。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
717
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.16 软件模拟串行口的测试程序(C及汇编)
——如串行口不够用或无串行口可用[P3.0, P3.1]结合定时器0软件模拟串行口
1. C程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------------------------------*/
/* --- STC15Fxx 系列 软件模拟串口举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
/*----------------------------------------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
U
C
M
d
e
t
i
im
L
#include "reg51.h"
//----------------------------------------//define baudrate const
//BAUD = 256 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
//NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)
C
T
S
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
0xF400
0xFA00
0xFD00
0xFE80
0xFF40
0xFFA0
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
#define BAUD
0xEC00
0xF600
0xFB00
0xFD80
0xFEC0
0xFF60
// 1200bps @ 18.432MHz
// 2400bps @ 18.432MHz
// 4800bps @ 18.432MHz
// 9600bps @ 18.432MHz
//19200bps @ 18.432MHz
//38400bps @ 18.432MHz
//#define BAUD
//#define BAUD
//#define BAUD
//#define BAUD
0xE800
0xF400
0xFA00
0xFD00
// 1200bps @ 22.1184MHz
// 2400bps @ 22.1184MHz
// 4800bps @ 22.1184MHz
// 9600bps @ 22.1184MHz
718
南通国芯微电子有限公司
// 1200bps @ 11.0592MHz
// 2400bps @ 11.0592MHz
// 4800bps @ 11.0592MHz
// 9600bps @ 11.0592MHz
//19200bps @ 11.0592MHz
//38400bps @ 11.0592MHz
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
//#define BAUD
//#define BAUD
//#define BAUD
sfr
AUXR
sbit
RXB
sbit
TXB
0xFE80
0xFF40
0xFF80
=
0x8E;
=
P3^0;
=
P3^1;
typedef bit
BOOL;
typedef unsigned char
typedef unsigned int
BYTE
BYTE
BYTE
BYTE
BOOL
BOOL
void
TBUF,
TDAT,
TCNT,
TBIT,
TING,
TEND,
官方网站:www.STCMCU.com
//19200bps @ 22.1184MHz
//38400bps @ 22.1184MHz
//57600bps @ 22.1184MHz
//define UART TX/RX port
RBUF;
RDAT;
RCNT;
RBIT;
RING;
REND;
UART_INIT();
C
T
S
void main()
{
TMOD = 0x00;
AUXR = 0x80;
TL0 = BAUD;
TH0 = BAUD>>8;
TR0 = 1;
ET0 = 1;
PT0 = 1;
EA = 1;
STC — 全球最大的8051单片机设计公司
BYTE;
WORD;
BYTE t, r;
BYTE buf[16];
研发顾问QQ:800003751
U
C
M
d
e
t
i
im
L
//timer0 in 16-bit auto reload mode
//timer0 working at 1T mode
//initial timer0 and set reload value
//tiemr0 start running
//enable timer0 interrupt
//improve timer0 interrupt priority
//open global interrupt switch
UART_INIT();
while (1)
{
if (REND)
{
REND = 0;
buf[r++ & 0x0f] = RBUF;
}
if (TEND)
南通国芯微电子有限公司
//user's function
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
719
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
{
if (t != r)
{
TEND = 0;
TBUF = buf[t++ & 0x0f];
TING = 1;
}
}
}
}
//----------------------------------------//Timer interrupt routine for UART
d
e
t
i
im
void tm0() interrupt 1 using 1
{
if (RING)
{
if (--RCNT == 0)
{
RCNT = 3;
//reset send baudrate counter
if (--RBIT == 0)
{
RBUF = RDAT;
//save the data to RBUF
RING = 0;
//stop receive
REND = 1;
//set receive completed flag
}
else
{
RDAT >>= 1;
if (RXB) RDAT |= 0x80;
//shift RX data to RX buffer
}
}
}
else if (!RXB)
{
RING = 1;
//set start receive flag
RCNT = 4;
//initial receive baudrate counter
RBIT = 9;
//initial receive bit number (8 data bits + 1 stop bit)
}
C
T
S
720
if (--TCNT == 0)
{
TCNT = 3;
南通国芯微电子有限公司
U
C
M
L
//reset send baudrate counter
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
if (TING)
//judge whether sending
{
if (TBIT == 0)
{
TXB = 0;
//send start bit
TDAT = TBUF;
//load data from TBUF to TDAT
TBIT = 9;
//initial send bit number (8 data bits + 1 stop bit)
}
else
{
TDAT >>= 1;
//shift data to CY
if (--TBIT == 0)
{
TXB = 1;
TING = 0;
//stop send
TEND = 1;
//set send completed flag
}
else
{
TXB = CY;
//write CY to TX port
}
}
}
}
}
C
T
S
U
C
M
d
e
t
i
im
L
//----------------------------------------//initial UART module variable
void UART_INIT()
{
TING = 0;
RING = 0;
TEND = 1;
REND = 0;
TCNT = 0;
RCNT = 0;
}
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
721
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
2. 汇编程序:
/*----------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------------------------------*/
/* --- STC15Fxx 系列 软件模拟串口举例---------------------------------------------------*/
/* --- 研发顾问QQ:800003751--------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com ---------------------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
/*----------------------------------------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
;----------------------------------------;define baudrate const
;BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
;NOTE: (FOSC/3/BAUDRATE) must be greater then 75, (RECOMMEND GREATER THEN 100)
U
C
M
d
e
t
i
im
L
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
EQU 0F400H
EQU
0FA00H
EQU
0FD00H
EQU
0FE80H
EQU
0FF40H
EQU
0FFA0H
EQU
0FFC0H
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
BAUD
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0EC00H
0F600H
0FB00H
0FD80H
0FEC0H
0FF60H
0FF95H
; 1200bps @ 18.432MHz
; 2400bps @ 18.432MHz
; 4800bps @ 18.432MHz
; 9600bps @ 18.432MHz
;19200bps @ 18.432MHz
;38400bps @ 18.432MHz
;57600bps @ 18.432MHz
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
;BAUD
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0E800H
0F400H
0FA00H
0FD00H
0FE80H
0FF40H
0FF80H
; 1200bps @ 22.1184MHz
; 2400bps @ 22.1184MHz
; 4800bps @ 22.1184MHz
; 9600bps @ 22.1184MHz
;19200bps @ 22.1184MHz
;38400bps @ 22.1184MHz
;57600bps @ 22.1184MHz
722
C
T
S
南通国芯微电子有限公司
; 1200bps @ 11.0592MHz
; 2400bps @ 11.0592MHz
; 4800bps @ 11.0592MHz
; 9600bps @ 11.0592MHz
;19200bps @ 11.0592MHz
;38400bps @ 11.0592MHz
;57600bps @ 11.0592MHz
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
;----------------------------------------;define UART TX/RX port
RXB
TXB
BIT
BIT
P3.0
P3.1
;----------------------------------------;define SFR
AUXR DATA 8EH
;----------------------------------------;define UART module variable
TBUF
RBUF
TDAT
RDAT
TCNT
RCNT
TBIT
RBIT
DATA
DATA
DATA
DATA
DATA
DATA
DATA
DATA
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
C
T
S
d
e
t
i
im
;(R0) ready send data buffer (USER WRITE ONLY)
;(R1) received data buffer (UAER READ ONLY)
;(R2) sending data buffer
(RESERVED FOR UART MODULE)
;(R3) receiving data buffer (RESERVED FOR UART MODULE)
;(R4) send baudrate counter (RESERVED FOR UART MODULE)
;(R5) receive baudrate counter (RESERVED FOR UART MODULE)
;(R6) send bit counter
(RESERVED FOR UART MODULE)
;(R7) receive bit counter
(RESERVED FOR UART MODULE)
U
C
M
L
TING BIT 20H.0
RING BIT
20H.1
TEND BIT 20H.2
REND BIT 20H.3
; sending flag (USER WRITE "1" TO TRIGGER SEND DATA,
;
CLEAR BY MODULE)
; receiving flag (RESERVED FOR UART MODULE)
; sent flag
(SET BY MODULE AND SHOULD USER CLEAR)
; received flag (SET BY MODULE AND SHOULD USER CLEAR)
RPTR DATA 21H
WPTR DATA 22H
BUFFER DATA 23H
;circular queue read pointer
;circular queue write pointer
;circular queue buffer (16 bytes)
;----------------------------------------
ORG 0000H
LJMP RESET
;----------------------------------------;Timer0 interrupt routine for UART
ORG
000BH
PUSH
PUSH
ACC
PSW
南通国芯微电子有限公司
;4 save ACC
;4 save PSW
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
723
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOV PSW,
#08H
;3 using register group 1
L_UARTSTART:
;------------------
JB
RING, L_RING
;4 judge whether receiving
JB
RXB, L_REND
; check start signal
L_RSTART:
SETB RING
; set start receive flag
MOV R5,
#4
; initial receive baudrate counter
MOV R7,
#9
; initial receive bit number (8 data bits + 1 stop bit)
SJMP L_REND
; end this time slice
L_RING:
DJNZ R5,
L_REND
;4 judge whether sending
MOV R5,
#3
;2 reset send baudrate counter
L_RBIT:
MOV C,
RXB
;3 read RX port data
MOV A,
R3
;1 and shift it to RX buffer
RRC A
;1
MOV R3,
A
;2
DJNZ R7,
L_REND
;4 judge whether the data have receive completed
L_RSTOP:
RLC A
; shift out stop bit
MOV R1,
A
; save the data to RBUF
CLR RING
; stop receive
SETB REND
; set receive completed flag
L_REND:
;------------------L_TING:
DJNZ R4,
L_TEND
;4 check send baudrate counter
MOV R4,
#3
;2 reset it
JNB TING, L_TEND
;4 judge whether sending
MOV A,
R6
;1 detect the sent bits
JNZ L_TBIT
;3 "0" means start bit not sent
L_TSTART:
CLR TXB
; send start bit
MOV TDAT, R0
; load data from TBUF to TDAT
MOV R6,
#9
; initial send bit number (8 data bits + 1 stop bit)
JMP L_TEND
; end this time slice
L_TBIT:
MOV A,
R2
;1 read data in TDAT
SETB C
;1 shift in stop bit
RRC A
;1 shift data to CY
MOV R2,
A
;2 update TDAT
MOV TXB,
C
;4 write CY to TX port
DJNZ R6,
L_TEND
;4 judge whether the data have send completed
C
T
S
724
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
L_TSTOP:
CLR TING
SETB TEND
L_TEND:
;------------------L_UARTEND:
POP PSW
POP ACC
RETI
;----------------------------------------;initial UART module variable
UART_INIT:
CLR TING
CLR RING
SETB TEND
CLR REND
CLR A
MOV TCNT, A
MOV RCNT, A
RET
;----------------------------------------;main program entry
C
T
S
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
; stop send
; set send completed flag
;3 restore PSW
;3 restore ACC
;4 (69)
U
C
M
d
e
t
i
im
L
RESET:
MOV R0,
#7FH
;clear RAM
CLR A
MOV @R0, A
DJNZ R0,
$-1
MOV SP,
#7FH
;initial SP
;------------------;system initial
MOV TMOD, #00H
;timer0 in 16-bit auto reload mode
MOV AUXR, #80H
;timer0 working at 1T mode
MOV TL0,
#LOW BAUD
;initial timer0 and
MOV TH0,
#HIGH BAUD
;set reload value
SETB TR0
;tiemr0 start running
SETB ET0
;enable timer0 interrupt
SETB PT0
;improve timer0 interrupt priority
SETB EA
;open global interrupt switch
LCALL UART_INIT
;----------------------------------------MAIN:
JNB REND, CHECKREND
;if (REND)
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
725
STC15F2K60S2系列单片机指南
CLR REND
MOV A,
INC RPTR
ANL A,
ADD A,
MOV R0,
MOV @R0,
CHECKREND:
JNB TEND,
MOV A,
XRL A,
JZ
MAIN
CLR TEND
MOV A,
INC WPTR
ANL A,
ADD A,
MOV R0,
MOV TBUF,
SETB TING
SJMP MAIN
技术支持网站:www.GXWMCU.com
726
END
研发顾问Tel:13922805190
#0FH
#BUFFER
A
RBUF
;{
; REND = 0;
; BUFFER[RPTR++ & 0xf] = RBUF;
;}
;
;
;
MAIN
RPTR
WPTR
;if (TEND)
;{
; if (WPTR != REND)
; {
;
TEND = 0;
;
TBUF = BUFFER[WPTR++ & 0xf];
;
TING = 1;
; }
;}
;
;
;
RPTR
WPTR
#0FH
#BUFFER
A
@R0
;----------------------------------------
临时技术支持Tel:13922829991
C
T
S
南通国芯微电子有限公司
U
C
M
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
第9章 STC15系列单片机EEPROM的应用
STC15系列单片机内部集成了大容量的EEPROM,其与程序空间是分开的。����������
利用ISP/IAP技
术可将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区,���
每个扇
区包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放
在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。
EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。在用户程序
中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。在工作电压Vcc偏低时,建议不要进
行EEPROM/IAP操作。
d
e
t
i
im
9.1 IAP及EEPROM新增特殊功能寄存器介绍
符号
描述
地址
ISP/IAP Flash
Data Register
ISP/IAP Flash
IAP_ADDRH
Address High
ISP/IAP Flash
IAP_ADDRL
Address Low
ISP/IAP Flash
IAP_CMD
Command Register
ISP/IAP Flash
IAP_TRIG
Command Trigger
ISP/IAP
IAP_CONTR
Control Register
PCON
Power Control
IAP_DATA
C
T
S
南通国芯微电子有限公司
C2H
C3H
C4H
C5H
位地址及符号
L
MSB
U
C
M
-
-
-
LSB
1111 1111B
0000 0000B
0000 0000B
-
-
-
MS1
MS0
C6H
C7H
87H
复位值
xxxx x000B
xxxx xxxxB
IAPEN SWBS SWRST CMD_FAIL
SMOD SMOD0 LVDF POF
总机:0513-5501 2928 / 2929 / 2966
-
WT2 WT1
GF1 GF0 PD
WT0
0000 x000B
IDL 0011 0000B
传真:0513-5501 2969 / 2956 / 2947
727
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
1. ISP/IAP数据寄存器IAP_DATA
IAP_DATA : ISP/IAP 操作时的数据寄存器。
ISP/IAP 从Flash读出的数据放在此处,向Flash写的数据也需放在此处
2. ISP/IAP地址寄存器IAP_ADDRH和IAP_ADDRL
IAP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。
IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。
3. ISP/IAP命令寄存器IAP_CMD
ISP/IAP命令寄存器IAP_CMD格式如下:
SFR name
Address
bit
B7
B6
B5
B4
B3
B2
B1
B0
IAP_CMD
C5H
name
-
-
-
-
-
-
MS1
MS0
命令 / 操作
d
e
t
i
im
模式选择
MS1
MS0
0
0
Standby
0
1
从用户的应用程序区对"Data Flash/EEPROM区"进行字节读
1
0
从用户的应用程序区对"Data Flash/EEPROM区"进行字节编程
1
1
从用户的应用程序区对"Data Flash/EEPROM区"进行扇区擦除
待机模式,无ISP操作
U
C
M
L
程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除
IAP15�������������������������������
系列�����������������������������
除外,IAP15���������������������
系列�������������������
可在�����������������
用户���������������
应用程序区修改��������
用户������
应用程序区。
特别声明:EEPROM也可以用MOVC指令读(MOVC访问的是程序存储器),但起始地址不再是0000H,
而是程序存储空间结束地址的下一个地址。
C
T
S
4. ISP/IAP命令触发寄存器IAP_TRIG
IAP_TRIG: ISP/IAP操作时的命令触发寄存器。
在IAPEN(IAP_CONTR.7) = 1 时,对IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP命令才会生效。
ISP/IAP���������������������������������������������������
操作完成后,IAP地址高八位寄存器IAP_ADDRH、IAP地址低八位寄存器IAP_ADDRL和IAP
命令寄存器IAP_CMD的内容不变。如果接下来要对下一个地址的数据进行ISP/IAP操作,需手动
将该地址的高8位和低8位分别写入IAP_ADDRH和IAP_ADDRL寄存器。
每次IAP操作时,都要对IAP_TRIG先写入5AH,再写入A5H,ISP/IAP命令才会生效。
在每次触发前,需重新送字节读/字节编程/扇区擦除命令,在命令不改变时,不需重新送
命令
728
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
5. ISP/IAP命令寄存器IAP_CONTR
ISP/IAP控制寄存器IAP_CONTR格式如下:
SFR name
Address
IAP_CONTR
C7H
bit
B7
B6
B5
B4
name IAPEN SWBS SWRST CMD_FAIL
B3
B2
B1
B0
-
WT2
WT2
WT0
IAPEN: ISP/IAP功能允许位。0:禁止IAP读/写���
/��
擦除Data Flash/EEPROM
1: 允许IAP读/写���
/��
擦除Data Flash/EEPROM
SWBS: ���������������
软件选择复位后从用户应用程序区启动(送����������������
0)��������������
,还是从系统IS������
P�����
监控程序区启动(送1)。
要与SWRST直接配合才可以实现
SWRST: 0: 不操作; 1: �����������������
软件控制产生复位,单片机自动复位�
。
CMD_FAIL: 如果IAP地址(由IAP地址寄存器IAP_ADDRH和IAP_ADDRL的值决定)指向了非法地
址或无效地址,且送了ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败��
,�
则
。
CMD_FAIL为1,需由软件清零�
d
e
t
i
im
;在用户应用程序区(AP 区)软件复位并从用户应用程序区(AP 区)开始执行程序
MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP 区), SWRST = 1(软复位)
;在用户应用程序区(AP 区)软件复位并从系统ISP 监控程序区开始执行程序
MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP 区), SWRST = 1(软复位)
;在系统ISP 监控程序区软件复位并从用户应用程序区(AP 区)开始执行程序
MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP 区), SWRST = 1(软复位)
;在系统ISP 监控程序区软件复位并从系统ISP 监控程序区开始执行程序
MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP 区), SWRST = 1(软复位)
设置等待时间
WT2 WT1 WT0
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
C
T
S
U
C
M
CPU等待时间(多少个CPU工作时钟 )
Sector Erase
Read/读 Program/编程
扇区擦除
(2个时钟)
(=55us)
(=21ms)
2个时钟
55个时钟
21012个时钟
2个时钟
110个时钟
42024个时钟
2个时钟
165个时钟
63036个时钟
2个时钟
330个时钟
126072个时钟
2个时钟
660个时钟
252144个时钟
2个时钟
1100个时钟
420240个时钟
2个时钟
1320个时钟
504288个时钟
2个时钟
1760个时钟
672384个时钟
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
L
Recommended System Clock
跟等待参数对应的推荐系统时钟
≤ 1MHz
≤ 2MHz
≤ 3MHz
≤ 6MHz
≤ 12MHz
≤ 20MHz
≤ 24MHz
≤ 30MHz
传真:0513-5501 2969 / 2956 / 2947
729
技术支持网站:www.GXWMCU.com
STC15F2K60S2系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
6. 工作电压过低判断,此时不要进行EEPROM/IAP操作
PCON : 电源控制寄存器
SFR name Address
PCON
87H
bit
B7
B6
B5
B4
B3
B2
B1
B0
name
SMOD
SMOD0
LVDF
POF
GF1
GF0
PD
IDL
LVDF: 低压检测标志位,当工作电压Vcc低于低压检测门槛电压时,该位置1。该位要由软件清0
当低压检测电路发现工作电压Vcc偏低时,不要进行EEPROM/IAP操作。
5V单片机的低压检测门槛电压:
-40 ℃
25 ℃
85 ℃
4.74
4.64
4.60
4.41
4.32
4.27
4.14
4.05
4.00
3.90
3.82
3.77
3.69
3.61
3.56
3.51
3.43
3.38
3.36
3.28
3.23
3.21
3.14
3.09
3.3V单片机的低压检测门槛电压:
-40 ℃
3.11
2.85
2.63
2.44
2.29
2.14
2.01
1.90
C
T
S
25 ℃
3.08
2.82
2.61
2.42
2.26
2.12
2.00
1.89
U
C
M
d
e
t
i
im
L
85 ℃
3.09
2.83
2.61
2.43
2.26
2.12
2.00
1.89
建议在电压偏低时,不要操作EEPROM/IAP, 烧录时直接选择“低压禁止EEPROM操作”
730
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
9.2 STC15系列单片机EEPROM空间大小及地址
9.2.1 STC15W4K60S4系列单片机EEPROM空间大小及地址
STC15W4K60S4系列单片机内部EEPROM选型一览表
型号
用IAP字
扇 节读时
EEPROM
区 EEPROM
字节数
数 起始扇区
首地址
用IAP字
节读时
EEPROM
结束扇区
末尾地址
用MOVC
指令读时
EEPROM
起始扇区
首地址
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
STC15W4K08S4
53K
106
0000h
D3FFh
2000h
F3FFh
STC15W4K16S4
45K
90
0000h
B3FFh
4000h
F3FFh
STC15W4K24S4
37K
74
0000h
93FFh
6000h
STC15W4K32S4
29K
58
0000h
73FFh
8000h
STC15W4K40S4
21K
42
0000h
53FFh
A000h
STC15W4K48S4
13K
26
0000h
33FFh
C000h
STC15W4K56S4
5K
10
0000h
13FFh
E000h
F3FFh
STC15W4K60S4
1K
2
0000h
03FFh
F000h
F3FFh
M
CU
STC15W4K60S4
系列单片机内部
EEPROM还可以用
MOVC指令读,但
此时首地址不再是
0000H,而是程序存
储空间结束地址的
下一个地址
d
e
t
i
im
F3FFh
F3FFh
L
F3FFh
F3FFh
512字节为一个扇区
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15W4K61S4
南通国芯微电子有限公司
C
T
S
-
122
0000h
F3FFh
总机:0513-5501 2928 / 2929 / 2966
没有专门的EEPROM,但可在用户程
序区修改用户程序,
使用时不要将自己的
有效程序擦除。
传真:0513-5501 2969 / 2956 / 2947
731
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
9.2.2 STC15F2K60S2及STC15L2K60S2系列EEPROM空间大小及地址
STC15F2K60S2系列单片机内部EEPROM选型一览表
STC15L2K60S2系列单片机内部EEPROM选型一览表
型号
用IAP字 用IAP字
扇 节读时
节读时
EEPROM
区 EEPROM EEPROM
字节数
数 起始扇区 结束扇区
首地址 末尾地址
用MOVC
指令读时
EEPROM
起始扇区
首地址
用MOVC
指令读时
EEPROM
结束扇区
STC15F2K60S2及
末尾地址
STC15L2K60S2系列
F3FFh 单片机内部EEPROM
还可以用MOVC指令
读,但此时首地址不
F3FFh 再是0000H,而是程
序存储空间结束地址
F3FFh 的下一个地址
STC15F2K08S2
STC15L2K08S2
53K
106
0000h
D3FFh
2000h
STC15F2K16S2
STC15L2K16S2
45K
90
0000h
B3FFh
4000h
STC15F2K24S2
STC15L2K24S2
37K
74
0000h
93FFh
6000h
STC15F2K32S2
STC15L2K32S2
29K
58
0000h
73FFh
8000h
STC15F2K40S2
STC15L2K40S2
21K
42
0000h
53FFh
F3FFh
STC15F2K48S2
STC15L2K48S2
13K
26
0000h
CU
A000h
33FFh
C000h
F3FFh
STC15F2K56S2
STC15L2K56S2
STC15F2K60S2
STC15L2K60S2
C
T
S
M
d
e
t
i
im
L
F3FFh
5K
10
0000h
13FFh
E000h
F3FFh
1K
2
0000h
03FFh
F000h
F3FFh
512字节为一个扇区
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15F2K61S2
IAP15L2K61S2
732
-
南通国芯微电子有限公司
122
0000h
F3FFh
总机:0513-5501 2928 / 2929 / 2966
没有专门的EEPROM,
但可在用户程序区修
改用户程序,使用时
不要将自己的有效程
序擦除。
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
9.2.3 STC15W1K16S系列单片机EEPROM空间大小及地址
STC15W1K16S系列单片机内部EEPROM选型一览表
用IAP字 用IAP字
节读时
扇 节读时
EEPROM
型号
区 EEPROM EEPROM
字节数
数 起始扇区 结束扇区
首地址 末尾地址
STC15W1K16S
13K
26
0000h
33FFh
STC15W1K24S
5K
10
0000h
用MOVC
指令读时
EEPROM
起始扇区
首地址
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
STC15W1K16S系列单片
机内部EEPROM还可以用
MOVC指令读,但此时首地
址不再是0000H,而是程序
存储空间结束地址的下一个
地址
512字节为一个扇区
13FFh
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
-
IAP15W1K29S
58
0000h
没有专门的EEPROM,但可在
用户程序区修改用户程序,
使用时不要将自己的有效程
序擦除。
d
e
t
i
im
73FFh
L
STC15W1K16S系列中以STC开头的单片机不能用MOVC读EEPROM。
C
T
S
U
C
M
9.2.4 STC15W408S系列单片机EEPROM空间大小及地址
STC15W408S系列单片机内部EEPROM选型一览表
用IAP字 用IAP字
节读时
扇 节读时
EEPROM
型号
区 EEPROM EEPROM
字节数
数 起始扇区 结束扇区
首地址 末尾地址
STC15W404S
9K
18
0000h
23FFh
STC15W408S
5K
10
0000h
13FFh
STC15W410S
3K
6
0000h
0BFFh
用MOVC
指令读时
EEPROM
起始扇区
首地址
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
STC15W408S系列单片机内
部EEPROM还可以用MOVC
指令读,但此时首地址不再
是0000H,而是程序存储空
间结束地址的下一个地址
512字节为一个扇区
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15W413S
-
26
0000h
没有专门的EEPROM,但可在
用户程序区修改用户程序,
使用时不要将自己的有效程
序擦除。
33FFh
STC15W408S系列中以STC开头的单片机不能用MOVC读EEPROM。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
733
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
9.2.5 STC15W408AS系列单片机EEPROM空间大小及地址
STC15W408AS系列单片机内部EEPROM选型一览表
用IAP字 用IAP字
节读时
扇 节读时
EEPROM
型号
区 EEPROM EEPROM
字节数
数 起始扇区 结束扇区
首地址 末尾地址
STC15W404AS
9K
18
0000h
23FFh
用MOVC
指令读时
EEPROM
起始扇区
首地址
1000h
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
33FFh
STC15W408AS
5K
10
0000h
13FFh
2000h
33FFh
STC15W410AD
3K
6
0000h
0BFFh
2800h
33FFh
STC15W412AD
1K
2
0000h
03FFh
3000h
33FFh
STC15W408AS系列单片
机内部EEPROM还可以用
MOVC指令读,但此时首地
址不再是0000H,而是程序
存储空间结束地址的下一个
地址
512字节为一个扇区
d
e
t
i
im
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15W413AS
-
26
C
T
S
0000h
33FFh
U
C
M
没有专门的EEPROM,但可在
用户程序区修改用户程序,
使用时不要将自己的有效程
序擦除。
L
9.2.6 STC15W201S系列单片机EEPROM空间大小及地址
STC15W201S系列单片机内部EEPROM选型一览表
型号
STC15W201S
用IAP字 用IAP字
节读时
扇 节读时
EEPROM
区 EEPROM EEPROM
字节数
数 起始扇区 结束扇区
首地址 末尾地址
4K
8
0000h
0FFFh
STC15W202S
3K
6
0000h
0BFFh
STC15W203S
2K
4
0000h
07FFh
STC15W204S
1K
2
0000h
03FFh
用MOVC
指令读时
EEPROM
起始扇区
首地址
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
STC15W201S系列单片机内
部EEPROM还可以用MOVC
指令读,但此时首地址不再
是0000H,而是程序存储空
间结束地址的下一个地址
512字节为一个扇区
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15W205S
-
10
0000h
没有专门的EEPROM,但可在
用户程序区修改用户程序,
使用时不要将自己的有效程
序擦除。
13FFh
STC15W408S系列中以STC开头的单片机不能用MOVC读EEPROM。
734
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
9.2.7 STC15F408AD及STC15L408AD系列EEPROM空间大小及地址
STC15F408AD系列单片机内部EEPROM选型一览表
STC15L408AD系列单片机内部EEPROM选型一览表
用IAP字 用IAP字 用MOVC
节读时 指令读时
扇 节读时
EEPROM
型号
区 EEPROM EEPROM EEPROM
字节数
数 起始扇区 结束扇区 起始扇区
首地址 末尾地址 首地址
STC15F408AD
STC15L408AD
5K
10
0000h
13FFh
2000h
用MOVC
指令读时
EEPROM
结束扇区
末尾地址
STC15F408AD及
STC15L408AD系列单片
机内部EEPROM还可以用
MOVC指令读,但此时首地
址不再是0000H,而是程序
存储空间结束地址的下一个
地址
33FFh
512字节为一个扇区
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15F413AD
IAP15L413AD
-
26
0000h
d
e
t
i
im
33FFh
U
C
M
L
没有专门的EEPROM,但可在
用户程序区修改用户程序,
使用时不要将自己的有效程
序擦除。
9.2.8 STC15F101W及STC15L101W系列EEPROM空间大小及地址
C
T
S
STC15F101W系列单片机内部EEPROM选型一览表
STC15L101W系列单片机内部EEPROM选型一览表
用IAP字 用IAP字 用MOVC
节读时 指令读时
扇 节读时
EEPROM
型号
区 EEPROM EEPROM EEPROM
字节数
数 起始扇区 结束扇区 起始扇区
首地址 末尾地址 首地址
STC15F101W
4K
8
0000h
0FFFh
0400h
STC15L101W
STC15F102W
3K
6
0000h
0BFFh
0800h
STC15L102W
STC15F103W
2K
4
0000h
07FFh
0C00h
STC15L103W
STC15F104W
1K
2
0000h
03FFh
1000h
STC15L104W
用MOVC
指令读时
EEPROM STC15F101W及STC15L101W
结束扇区 系列单片机内部EEPROM还
末尾地址 可以用MOVC指令读,但此
时首地址不再是0000H,而是
13FFh
程序存储空间结束地址的下
一个地址
13FFh
13FFh
512字节为一个扇区
13FFh
以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改
IAP15F105W
IAP15L105W
-
南通国芯微电子有限公司
10
0000h
13FFh
总机:0513-5501 2928 / 2929 / 2966
没有专门的EEPROM,但可在
用户程序区修改用户程序,使
用时不要将自己的有效程序擦
除。
传真:0513-5501 2969 / 2956 / 2947
735
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
STC15单片机的内部EEPROM地址表
第一扇区
第二扇区
第三扇区
第四扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
0000h
1FFh
200h
3FFh
400h
5FFh
600h
第五扇区
第六扇区
7FFh
第七扇区
第八扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
800h
9FFh
A00h
BFFh
C00h
DFFh
E00h
第九扇区
第十扇区
第十二扇区
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
1000h
11FFh
1200h
13FFh
1400h
15FFh
1600h
第十四扇区
第十五扇区
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
1800h
19FFh
1A00h
1BFFh
1C00h
1DFFh
1E00h
第十八扇区
第十九扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
2000h
21FFh
2200h
23FFh
2400h
25FFh
第二十一扇区
第二十二扇区
起始地址
结束地址
起始地址
结束地址
2800h
29FFh
2A00h
2BFFh
第二十五扇区
第二十三扇区
起始地址
U
C
M
第二十六扇区
2C00h
2DFFh
第二十七扇区
17FFh
结束地址
1FFFh
第二十扇区
d
e
t
i
im
L
结束地址
结束地址
第十六扇区
起始地址
第十七扇区
结束地址
FFFh
第十一扇区
起始地址
第十三扇区
结束地址
起始地址
结束地址
2600h
27FFh
第二十四扇区
起始地址
结束地址
2E00h
2FFFH
第二十八扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
3000h
31FFh
3200h
33FFh
3400h
35FFh
3600h
37FFH
第二十九扇区
C
T
S
第三十扇区
第三十一扇区
第三十二扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
3800h
39FFh
3A00h
3BFFh
3C00h
3DFFh
3E00h
3FFFH
第三十三扇区
第三十四扇区
第三十五扇区
第三十六扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
4000h
41FFh
4200h
43FFh
4400h
45FFh
4600h
第三十七扇区
第三十八扇区
第三十九扇区
47FFH
第四十扇区
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
4800h
49FFh
4A00h
4BFFh
4C00h
4DFFh
4E00h
4FFFH
第四十二扇区
第四十三扇区
第四十四扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
5000h
51FFh
5200h
53FFh
5400h
55FFh
5600h
57FFH
第四十五扇区
第四十六扇区
第四十七扇区
第四十八扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
5800h
59FFh
5A00h
5BFFh
5C00h
5DFFh
5E00h
5FFFH
第四十九扇区
第五十扇区
第五十一扇区
第五十二扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
6000h
61FFh
6200h
63FFh
6400h
65FFh
6600h
67FFH
第五十三扇区
第五十四扇区
第五十五扇区
第五十六扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
6800h
69FFh
6A00h
6BFFh
6C00h
6DFFh
6E00h
6FFFH
736
南通国芯微电子有限公司
建议同一次修
改的数据放在
同一扇区,不
是同一次修改
的数据放在不
同的扇区,不
必用满, 当
然可全用
结束地址
起始地址
第四十一扇区
每个扇区
512字节
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
研发顾问QQ:800003751
STC15单片机的内部EEPROM地址表
第五十七扇区
第五十八扇区
第五十九扇区
第六十扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
7000h
71FFh
7200h
73FFh
7400h
75FFh
7600h
77FFh
第六十一扇区
第六十二扇区
第六十三扇区
第六十四扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
7800h
79FFh
7A00h
7BFFh
7C00h
7DFFh
7E00h
7FFFh
第六十五扇区
第六十六扇区
第六十七扇区
第六十八扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
8000h
81FFh
8200h
83FFh
8400h
85FFh
8600h
87FFh
第六十九扇区
第七十扇区
第七十一扇区
第七十二扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
8800h
89FFh
8A00h
8BFFh
8C00h
8DFFh
8E00h
8FFFh
第七十三扇区
第七十四扇区
第七十五扇区
第七十六扇区
d
e
t
i
im
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
9000h
91FFh
9200h
93FFh
9400h
95FFh
9600h
97FFh
第七十七扇区
第七十八扇区
第七十九扇区
起始地址
结束地址
起始地址
结束地址
9800h
99FFh
9A00h
9BFFh
第八十一扇区
起始地址
A000h
第八十二扇区
起始地址
结束地址
U
C
M
9C00h
9DFFh
第八十三扇区
第八十扇区
L
起始地址
结束地址
9E00h
9FFFH
第八十四扇区
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
A1FFh
A200h
A3FFh
A400h
A5FFh
A600h
A7FFh
第八十五扇区
起始地址
结束地址
A800h
A9FFh
第八十九扇区
起始地址
C
T
S
结束地址
起始地址
结束地址
起始地址
结束地址
AA00h
ABFFh
AC00h
ADFFh
AE00h
AFFFH
第八十六扇区
第九十扇区
第八十七扇区
第九十一扇区
第八十八扇区
第九十二扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
B000h
B1FFh
B200h
B3FFh
B400h
B5FFh
B600h
B7FFh
第九十三扇区
第九十四扇区
第九十五扇区
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
B800h
B9FFh
BA00h
BBFFh
BC00h
BDFFh
BE00h
BFFFH
第九十八扇区
第九十九扇区
第一百扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
C000h
C1FFh
C200h
C3FFh
C400h
C5FFh
C600h
C7FFh
第一百零一扇区
第一百零二扇区
第一百零三扇区
第一百零四扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
C800h
C9FFh
CA00h
CBFFh
CC00h
CDFFh
CE00h
CFFFH
第一百零五扇区
第一百零六扇区
第一百零七扇区
第一百零八扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
D000h
D1FFh
D200h
D3FFh
D400h
D5FFh
D600h
D7FFh
第一百零九扇区
第一百一十扇区
第一百一十一扇区
第一百一十二扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
D800h
D9FFh
DA00h
DBFFh
DC00h
DDFFh
DE00h
DFFFH
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
建议同一次修
改的数据放在
同一扇区,不
是同一次修改
的数据放在不
同的扇区,不
必用满, 当
然可全用
第九十六扇区
起始地址
第九十七扇区
每个扇区
512字节
传真:0513-5501 2969 / 2956 / 2947
737
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
STC15单片机的内部EEPROM地址表
第一百一十三扇区
第一百一十四扇区
第一百一十五扇区
第一百一十六扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
E000h
E1FFh
E200h
E3FFh
E400h
E5FFh
E600h
E7FFh
第一百一十七扇区
第一百一十八扇区
第一百一十九扇区
第一百二十扇区
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
起始地址
结束地址
E800h
E9FFh
EA00h
EBFFh
EC00h
EDFFh
EE00h
EFFFH
第一百二十一扇区
第一百二十二扇区
起始地址
结束地址
起始地址
结束地址
F000h
F1FFh
F200h
F3FFh
C
T
S
738
南通国芯微电子有限公司
U
C
M
每个扇区
512字节
建议同一次修改
的数据放在同一
扇区,不是同一
次修改的数据放
在不同的扇区,
不必用满, 当
然可全用
d
e
t
i
im
L
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
9.3 IAP及EEPROM汇编简介
;用DATA还是EQU声明新增特殊功能寄存器地址要看你用的汇编器/编译器
IAP_DATA
DATA
0C2h;
IAP_ADDRH
DATA
IAP_ADDRL
或
IAP_DATA
EQU
0C2h
0C3h; 或
IAP_ADDRH
EQU
0C3h
DATA
0C4h; 或
IAP_ADDRL
EQU
0C4h
IAP_CMD
DATA
0C5h; 或
IAP_CMD
EQU
0C5h
IAP_TRIG
DATA
0C6h; 或
IAP_TRIG
EQU
0C6h
IAP_CONTR
DATA
0C7h; 或
IAP_CONTR
EQU
0C7h
;定义ISP/IAP命令及等待时间
d
e
t
i
im
ISP_IAP_BYTE_READ
EQU
1
;字节读
ISP_IAP_BYTE_PROGRAM EQU
2
;字节编程,前提是该字节是空,0FFh
ISP_IAP_SECTOR_ERASE EQU
3
;扇区擦除,要某字节为空,要擦一扇区
WAIT_TIME
EQU
U
C
M
0
L
;设置等待时间,30MHz以下0,24M以下1,
;20MHz以下2,12M以下3,6M以下4,3M以下5,2M以下6,1M以下7,
;字节读,����������������������������
也可以用MOVC指令读,但起始地址不再是0000H,而是程序存储空间结束地址的下一个地址
C
T
S
MOV
IAP_ADDRH,
#BYTE_ADDR_HIGH
;送地址高字节
MOV
IAP_ADDRL,
#BYTE_ADDR_LOW
;送地址低字节
MOV
IAP_CONTR,
#WAIT_TIME
;设置等待时间
ORL
IAP_CONTR,
#10000000B
;允许ISP/IAP操作
MOV
IAP_CMD,
#ISP_IAP_BYTE_READ
地址需要改变时
才需重新送地址
此两句可以合成一句,
并且只送一次就够了
�������������������������
;送字节读命令,�����������������
现有A版本每次触发前需重新送命令。
;在���������������
命令不需改变时,不需重新送命令
MOV
IAP_TRIG,
#5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
MOV
IAP_TRIG,
#0A5h
;送完A5h后,ISP/IAP命令立即被触发起动
;CPU等待IAP动作完成后,才会继续执行程序。
NOP
MOV
A,
南通国芯微电子有限公司
ISP_DATA
;数据读出到IAP_DATA寄存器后,CPU继续执行程序
;将读出的数据送往Acc
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
739
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
;以下语句可不用,只是出于安全考虑而已
MOV
IAP_CONTR,
#00000000B
;禁止ISP/IAP操作
MOV
IAP_CMD,
#00000000B
;去除ISP/IAP命令
;MOV
IAP_TRIG,
#00000000B
;防止ISP/IAP命令误触发
;MOV
IAP_ADDRH,
#0FFh
;送地址高字节单元为FF,指向非EEPROM区
;MOV
IAP_ADDRL,
#0FFh
;送地址低字节单元为FF,防止误操作
;字节编程,该字节为FFh/空时,可对其编程,否则不行,要先执行扇区擦除
MOV
IAP_DATA,
#ONE_DATA
;送字节编程数据到IAP_DATA,
;只有数据改变时才需重新送
d
e
t
i
m
MOV
IAP_ADDRH,
#BYTE_ADDR_HIGH
;送地址高字节
MOV
IAP_ADDRL,
#BYTE_ADDR_LOW
;送地址低字节
MOV
IAP_CONTR,
#WAIT_TIME
ORL
IAP_CONTR,
#10000000B
IAP_CMD,
#ISP_IAP_BYTE_PROGRAM
MOV
U
C
M
Li
;设置等待时间
;允许ISP/IAP操作
地址需要改变时
才需重新送地址
此两句可合成
一句,并且只
送一次就够了
;送字节编程命令,现有A版本每次触发前需重新送命令。
;在���������������
命令不需改变时,不需重新送命令
C
T
S
MOV
IAP_TRIG,
#5Ah
;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
MOV
IAP_TRIG,
#0A5h ;送完A5h后,ISP/IAP命令立即被触发起动
;CPU等待IAP动作完成后,才会继续执行程序.
NOP
;字节编程成功后,CPU继续执行程序
;以下语句可不用,只是出于安全考虑而已
MOV
IAP_CONTR,
#00000000B
;禁止ISP/IAP操作
MOV
IAP_CMD,
#00000000B
;去除ISP/IAP命令
;MOV
IAP_TRIG,
#00000000B
;防止ISP/IAP命令误触发
;MOV
IAP_ADDRH,
#0FFh ;送地址高字节单元为FF,;指向非EEPROM区,防止误操作
;MOV
IAP_ADDRL,
#0FFh ;送地址低字节单元为FF,指向非EEPROM区,防止误操作
740
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
;扇区擦除,没有字节擦除,只有扇区擦除,512字节/扇区,每个扇区用得越少越方便
;如果要对某个扇区进行擦除,而其中有些字节的内容需要保留,则需将其先读到单片机
;内部的RAM中保存,再将该扇区擦除,然后将须保留的数据写回该扇区,所以每个扇区
;中用的字节数越少越好,操作起来越灵活���
方便�.
;扇区中任意一个字节的地址都是该扇区的地址,无需求出首地址.
MOV
IAP_ADDRH,
#SECTOR_FIRST_BYTE_ADDR_HIGH ;送扇区起始地址高字节
MOV
IAP_ADDRL,
#SECTOR_FIRST_BYTE_ADDR_LOW
;送扇区起始地址低字节
;地址需要改变时才需重新送地址
MOV
IAP_CONTR,
#WAIT_TIME
;设置等待时间
ORL
IAP_CONTR,
#10000000B
;允许ISP/IAP
MOV
IAP_CMD,
#ISP_IAP_SECTOR_ERASE
d
e
t
i
im
此两句可以合
成一句,并且只
送一次就够了
L
;送扇区擦除命令,�����������������
现有A版本每次触发前需重新送命令。
;在���������������
命令不需改变时,不需重新送命令
MOV
IAP_TRIG,
MOV
C
T
S
IAP_TRIG,
#5Ah
U
C
M
;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
#0A5h
;送完A5h后,ISP/IAP命令立即被触发起动
;CPU等待IAP动作完成后,才会继续执行程序.
NOP
;扇区擦除成功后,CPU继续执行程序
;以下语句可不用,只是出于安全考虑而已
MOV
IAP_CONTR,
#00000000B
;禁止ISP/IAP操作
MOV
IAP_CMD,
#00000000B
;去除ISP/IAP命令
;MOV
IAP_TRIG,
#00000000B
;防止ISP/IAP命令误触发
;MOV
IAP_ADDRH,
#0FFh
;送地址高字节单元为FF,指向非EEPROM区
;MOV
IAP_ADDRL,
#0FFh
;送地址低字节单元为FF,防止误操作
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
741
STC15F2K60S2系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
小常识: (STC单片机的Data Flash 当EEPROM功能使用)
3个基本命令----字节读,字节编程,扇区擦除
字节编程:将“1”����������������������������������
写成“1”或����������������������������
“0”,������������������������
将�����������������������
“0”��������������������
写成“0”。��������������
如果������������
某�����������
字节是F F H,����
才���
可��
对其
如果该字节������������������������������
不是F F H�������������������������
,则须先将整个扇区擦除,因为只有“扇区擦除”才可以
进行字节编程。�����������������������������������
将“0”变为“1”。
扇区擦除:只有“扇区擦除”才可能将“0”擦除为“1”。
大建议:
1.同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区,就不须读出保
护。
d
e
t
i
im
2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC单片机的Data Flash比外部EEPROM要
快很多,读一个字节/编程一个字节大概是2���������
个时钟������
/55uS。
U
C
M
L
3.如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则
另外的不需要修改的数据须先读出放在STC单片机的RAM中,然后擦除整个扇区,再将需要保留
的数据和需修改的数据��������������������������������
按字节逐字节��������������������������
写回该扇区中(�������������������
只有字节写命令,无连续字节写命令���
)。这
时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。
C
T
S
常问的问题:
1:IAP指令完成后,地址是否会自动“加1”或“减1”?
答:不会
2:送5A和A5触发后,下一次IAP命令是否还需要送5A和A5触发?
答:是,一定要。
742
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC15F2K60S2系列单片机指南
官方网站:www.STCMCU.com
研发顾问QQ:800003751
STC — 全球最大的8051单片机设计公司
9.4 EEPROM测试程序(C和汇编)
9.4.1 EEPROM测试程序(不用串口送出数据)(C和汇编)
1. C程序:
;STC15系列单片机EEPROM/IAP 功能测试程序演示
/*--------------------------------------------------------------------------------------------------*/
/* --- STC MCU Limited. --------------- -----------------------------------------------------*/
/* --- 演示STC 15 系列单片机 EEPROM/IAP功能----------------------------------------*/
/* --- 研发顾问QQ:800003751------------------------------------------------------------*/
/* --- Fax: 86-755-82905966 -----------------------------------------------------------------*/
/* --- Tel: 86-755-82948412 ------------------------------------------------------------------*/
/* --- Web: www.STCMCU.com -------------------------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------------------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 --------------------------------*/
/*---- 在 Keil
�������
C� 开发环境中选择 Intel 8052编译,头文件包含即可-----*/
/*---------------------------------------------------------------------------------------------------*/
//假定测试芯片的工作频率为18.432MHz
void IapIdle();
BYTE IapReadByte(WORD addr);
#include "reg51.h"
#include "intrins.h"
U
C
M
C
T
S
d
e
t
i
im
L
typedef unsigned char BYTE;
typedef unsigned int WORD;
//----------------------------------------------sfr
sfr
sfr
sfr
sfr
sfr
IAP_DATA
IAP_ADDRH
IAP_ADDRL
IAP_CMD
IAP_TRIG
IAP_CONTR
#define
#define
#define
#define
CMD_IDLE
0
CMD_READ 1
CMD_PROGRAM 2
CMD_ERASE 3
//#define ENABLE_IAP
//#define ENABLE_IAP
#define ENABLE_IAP
//#define ENABLE_IAP
//#define ENABLE_IAP
南通国芯微电子有限公司
=
=
=
=
=
=
0xC2;
0xC3;
0xC4;
0xC5;
0xC6;
0xC7;
0x80
0x81
0x82
0x83
0x84
//IAP数据寄存器
//IAP地址寄存器高字节
//IAP地址寄存器低字节
//IAP命令寄存器
//IAP命令触发寄存器
//IAP控制寄存器
//空闲模式
//IAP字节读命令
//IAP字节编程命令
//IAP扇区擦除命令
//if SYSCLK