STC — 8051单片机全球第一品牌,全球最大的8051单片机设计公司
官方网站:www.STCMCU.com
www.GXWMCU.com
STC11/10xx系列单片机器件手册
STC11F01,
STC11F02,
STC11F03,
STC11F04,
STC11F05,
STC11F08,
STC11F16,
STC11F32,
STC11F40,
STC11F48,
STC11F52,
STC11F56,
STC11F60,
IAP11F62,
C
T
S
---����
加���
密��
性强
---1个时钟/机器周期8051
---高速,高可靠
---低功耗,超低价
---强抗静电,强抗干扰
STC11F01E
STC11F02E
STC11F03E
STC11F04E
STC11F05E,
STC11F08X,
STC11F16X,
STC11F32X,
STC11F40X,
STC11F48X,
STC11F52X,
STC11F56X,
STC11F60X,
IAP11F62X
CU
M
L
d
e
t
i
im
IAP11F06
STC11F08XE
STC11F16XE
STC11F32XE
STC11F40XE
STC11F48XE
STC11F52XE
STC11F56XE
STC11F60XE
STC-ISP:最方便的在线升级软件,无需编程器,无需仿真器
STC——8051单片机全球第一品牌,全球最大的8051单片机设计公司
Update date: 2015/8/10
STC11/10xx系列单片机指南
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
技术支持QQ:800003751
STC — 8051单片机全球第一品牌,全球最大的8051单片机设计公司
官方网站:www.STCMCU.com
www.GXWMCU.com
STC11/10xx系列单片机器件手册
STC10F04,
STC10F08,
STC10F12,
IAP10F04,
C
T
S
---����
加���
密��
性强
---1个时钟/机器周期8051
---高速,高可靠
---低功耗,超低价
---强抗静电,强抗干扰
STC10F04X,
STC10F08X,
STC10F12X,
IAP10F04X
U
C
M
d
STC10F04XE
e
t
i
im STC10F08XE
L
STC10F12XE
STC-ISP:最方便的在线升级软件,无需编程器,无需仿真器
STC——8051单片机全球第一品牌,全球最大的8051单片机设计公司
请同行不要再抄袭我们的设计、规格和管脚排列,再抄袭就很无耻了
全部中国本土独立自主知识产权,请全体中国人民支持,您的支持是中国本土
力量前进的�����
有力保证.
封装后,全部175oC八小时高温烘烤,高品质制造保证
技术支持网站:www.STCMCU.com
www.GXWMCU.com
Update date: 2015/8/10
STC11/10xx系列单片机指南
临时技术支持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
STC15系列1T 8051单片机,超高速双串口,高速A/D,比较器,宽电压,低功耗
不需外部晶振的单片机
不需外部复位的单片机
E2PROM
Data Flash
8/16/32/60/61K
字节 Flash
程序存储器
大容量 2048
字节 SRAM
5组8位
微处理器
高速(0-35M),高可靠
7K
128 - - 2(T0/T2)
-
有 5
-
-
IAP
有 有 固定 有 是 无 否 否
7K
128 - - 2(T0/T2)
-
有 5
-
-
IAP
16级
16级
16级
16级
有是
有是
有是
有是
有
有
有
有
是是
是是
是是
是是
2.5-5.5 7.5K 256 1 - 2(T0/T2)
-
有 5
-
有
IAP
¥0.89
¥0.99
¥1.1
¥1.2
¥1.2
¥1.1
¥1.2
¥1.3
¥1.3
有是
有是
有是
有是
有
有
有
有
是是
是是
是是
是是
SOP8
DIP8
¥0.99
¥1.1
¥1.2
¥1.3
¥1.3
¥1.2
¥1.3
¥1.4
¥1.4
有 有 16级 有 是 有 是 是
有 有 固定 有 是 无 否 否
STC15W404S系列�����������
单片机选型价格一览表,大批量现货供应中
4K 512 1 有
3
- 有 5
有 9K 有 有 16级 有 是 有 是 是
8K 512 1 有
3
- 有 5
有 5K 有 有 16级 有 是 有 是 是
IAP15W413S
2.5-5.5 13K 512 1 有
3
-
有 5
-
有
IAP
有 有 16级 有 是 有 是 是
IRC15W415S
默认使用内部
24MHz时钟
2.5-5.5 15.5K 512 1 有
3
-
有 5
-
有
IAP
有 有 固定 有 是 无 否 否
DFN8
¥1.5
SOP8
¥1.15
¥1.25
¥1.35
¥1.35
SOP16
¥1.2
¥1.3
¥1.4
¥1.4
DIP16
¥1.35
¥1.45
¥1.55
¥1.55
3
3-ch 有 5
10位
-
IAP
有 有 固定 有 是 无 否 否
STC15F2K32S
STC15F2K60S
5.5-4.5 32K
5.5-4.5 60K
2K 1 有
2K 1 有
3
3
-
有 5
有 5
-
-
29K
1K
有 有 8级 有 是 有 是 是
有 有 8级 有 是 有 是 是
IAP15F2K61S
5.5-4.5 61K
2K 1 有
3
-
有 5
-
-
IAP
有 有 8级 有 是 有 是 是
STC15F2K24AS 5.5-4.5 24K
STC15F2K48AS 5.5-4.5 48K
2K 1 有
2K 1 有
3
3
10位
10位
-
37K
13K
有 有 8级 有 是 有 是 是
有 有 8级 有 是 有 是 是
3-ch 有 5
3-ch 有 5
P2.5/CCP0_3
P2.4/ECI_3/SS_2
P2.3/MOSI_2
P2.2/MISO_2
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
STC 单片机在线编程ISP/仿真线路 USB转��
串口
用户可将用户程序区不用的程序Flash当EEPROM使用
¥1.6
¥1.8
¥1.99
¥2.2
¥2.3
DIP16
SOP20
DIP20 TSSOP20 SOP28 SKDIP28 TSSOP28 QFN28
¥1.8
¥1.8
¥2.0
¥1.9
¥2.0
¥2.2
¥2.1
¥2.0
¥2.0
¥2.2
¥2.1
¥2.2
¥2.4
¥2.3
¥2.2
¥2.2
¥2.4
¥2.3
¥2.5
¥2.7
¥2.6
¥2.4
¥2.4
¥2.6
¥2.5
¥2.7
¥2.9
¥2.8
¥2.5
¥2.5
¥2.7
¥2.6
¥2.8
¥3.0
¥2.9
用户可将用户程序区不用的程序Flash当EEPROM使用
¥2.5
¥2.5
¥2.7
¥2.6
¥2.8
¥3.0
¥2.9
用户可将用户程序区不用的程序Flash当EEPROM使用
SOP28 SKDIP28 LQFP32 QFN32 PDIP40 LQFP44
¥2.3
¥2.5
¥2.4
¥3.0
¥2.5
¥2.5
¥2.7
¥2.6
¥3.0
¥2.7
¥2.6
¥2.8
¥2.7
¥2.65
¥3.3
¥2.8
用户可将用户程序区不用的程序Flash当EEPROM使用
¥2.6
¥2.8
¥2.7
¥3.3
¥2.8
用户可将用户程序区不用的程序Flash当EEPROM使用
STC15W1K16S系列�����������
单片机选型价格一览表,大批量现货供应中
TSSOP20 SOP28 SKDIP28 LQFP32 QFN32 PDIP40 LQFP44
STC15W1K16S 2.6-5.5 16K 1K 1 有
3
- 有 5
¥3.3
¥3.5
¥3.4
¥4.0
¥3.5
有 13K 有 有 16级 有 是 有 是 是
STC15W1K24S 2.6-5.5 24K 1K 1 有
3
- 有 5
¥3.6
¥3.8
¥3.7
¥4.3
¥3.8
有 5K 有 有 16级 有 是 有 是 是 ¥3.6
¥3.6
¥3.6
¥3.8
¥3.7
¥3.65
¥4.3
¥3.8
IAP15W1K29S 2.6-5.5 29K 1K 1 有
3
- 有 5
有 IAP 有 有 16级 有 是 有 是 是
用户可将用户程序区不用的程序Flash当EEPROM使用
IRC15W1K31S
¥3.6
¥3.8
¥3.7
¥4.3
¥3.8
3
- 有 5
有 IAP 有 有 固定 有 是 无 否 否
默认使用内部 2.6-5.5 31.5K 1K 1 有
用户可将用户程序区不用的程序Flash当EEPROM使用
24MHz时钟
单片机选型价格一览表�
,另有STC15L系列(工作电压2.4V-3.6V)
STC15F2K60S2系列�����������
大批量
TSSOP20 SOP28 SKDIP28 LQFP32 QFN32 PDIP40 LQFP44
特别提醒:3路CCP/PCA/PWM还可当3路定时器使用
现货供应中
STC15F2K08S2 5.5-4.5 8K 2K 2 有
3
3-ch 有 5 10位
53K 有 有 8级 有 是 有 是 是
¥3.8
¥4.0
¥3.9
¥4.5
¥4.0
STC15F2K16S2 5.5-4.5 16K 2K 2 有
3
3-ch 有 5 10位
45K 有 有 8级 有 是 有 是 是
¥4.0
¥4.2
¥4.1
¥4.7
¥4.2
STC15F2K32S2 5.5-4.5 32K 2K 2 有
3
3-ch 有 5 10位
29K 有 有 8级 有 是 有 是 是
¥4.3
¥4.5
¥4.4
¥4.9
¥4.5
STC15F2K48S2 5.5-4.5 48K 2K 2 有
3
3-ch 有 5 10位
13K 有 有 8级 有 是 有 是 是
¥4.4
¥4.6
¥4.5
¥4.9
¥4.6
STC15F2K60S2 5.5-4.5 60K 2K 2 有
3
3-ch 有 5 10位
1K 有 有 8级 有 是 有 是 是
¥4.4
¥4.6
¥4.5
¥4.9
¥4.6
IAP15F2K61S2
¥4.4
¥4.4
¥4.6
¥4.5
¥4.45
¥4.9
¥4.6
5.5-4.5 61K 2K 2 有
3
3-ch 有 5 10位
IAP 有 有 8级 有 是 有 是 是
用户可将用户程序区不用的程序Flash当EEPROM使用
本身就是仿真器
IRC15F2K63S2
¥4.9
¥4.6
默认使用外部晶振
5.5-4.5 63.5K 2K 2 有
如无外部晶振则使
用内部24MHz时钟
28
27
26
25
24
23
22
21
20
19
18
17
16
15
¥2.0
¥2.2
¥2.5
¥2.7
¥2.8
¥2.8
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.01μF
47μF
Gnd
Power On
SW1
Vin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
我们直销,所以低价,����������������������������������������������������������
以上单价为10K/M起定量,量小每片需加0.1元,以上价格运费由客户承担,零售10片起,如对价格不满,可来电要求降�
价
特别声明:以15F和15L开头且有SPI功能的芯片只支持"SPI主机模式";以15W开头且有SPI功能的芯片,SPI主/从机模式均支持
以15F和15L开头的芯片不支持"串行口掉电唤醒"功能,而以15W开头的芯片支持该功能
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
P4.5/ALE
P2.7/A15/CCP2_3
P2.6/A14/CCP1_3
P2.5/A13/CCP0_3
P2.4/A12/ECI_3/SS_2
P2.3/A11/MOSI_2
P2.2/A10/MISO_2
P2.1/A9/SCLK_2
P2.0/A8/RST_LOW
P4.4/RD
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
P3.4/T0/T1CLKO/ECI_2
P3.3/INT1
P3.2/INT0
P3.1/TxD/T2
P3.0/RxD/INT4/T2CLKO
MCU_TxD(P3.1)
支持RS485下载
支持程序加密后传输(防拦截)
300Ω
VO_3.3V
1 GND
0.1uF
VO_33 8
2 TxD
VDD_5 7
3 VDD_325
4 RxD
另有PL-2303HXD-SSOP28
及PL-2303HX-SSOP28,其
价格更低
DM 6
DP 5
MCU_RxD(P3.0)
10uF
27Ω
27Ω
0.1uF
USB
+5V
VO_3.3V
1.5K
1
D- 2
D+ 3
4
PL-2303SA-SOP8
USB
也可使用普通的RS232芯片接电脑
如MAX232或MAX3232
SP232或SP3232
用户可将用户程序区不用的程序Flash当EEPROM使用
¥4.4
¥3.9
¥4.4
¥3.9
¥4.5
¥4.0
用户可将用户程序区不用的程序Flash当EEPROM使用
¥3.9
¥3.9
38个I/O
IAP
IAP
¥1.4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
P1.1/ADC1/CCP0
P1.0/ADC0/CCP1
P3.7/INT3/TxD_2/CCP2/CCP2_2
P3.6/INT2/RxD_2/CCP1_2
P3.5/T0CLKO/CCP0_2
P3.4/T0/ECI_2
P3.3/INT1
P3.2/INT0
P3.1/TxD/T2
P3.0/RxD/INT4/T2CLKO
用户可将用户程序区不用的程序Flash当EEPROM使用
¥2.3
10-bit 有
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
XTAL2/RxD_3/ADC6/P1.6
XTAL1/TxD_3/ADC7/P1.7
MCLKO/RST/P5.4
Vcc
P5.5
Gnd
用户可将用户程序区不用的程序Flash当EEPROM使用
SOP16
16级
16级
16级
16级
DFN8
20
19
18
17
16
15
14
13
12
11
PDIP40
IAP15W413AS 2.5-5.5 13K 512 1 有 2(T0/T2) 3-ch 有 5 10-bit 有
DIP8
有 有 固定 有 是 无 否 否
STC15W401AS系列单片机选型价格一览表,大批量现货供应中
特别提示:3路CCP/PCA/PWM还可当3路定时器使用
2.5-5.5 1K 512 1 有 2(T0/T2) 3-ch 有 5 10-bit 有 5K 有 有
2.5-5.5 2K 512 1 有 2(T0/T2) 3-ch 有 5 10-bit 有 5K 有 有
2.5-5.5 4K 512 1 有 2(T0/T2) 3-ch 有 5 10-bit 有 9K 有 有
2.5-5.5 8K 512 1 有 2(T0/T2) 3-ch 有 5 10-bit 有 5K 有 有
默认使用外部晶振
2.5-5.5 15.5K 512 1 有 2(T0/T2) 3-ch 有 5
如无外部晶振则使
用内部24MHz时钟
封装价格 (RMB ¥)
SOP8
有 有 固定 有 是 无 否 否
STC15W201S系列�������������������
单片机选型价格一览表,大批量现货供应中
1K 256 1 - 2(T0/T2) - 有 5
有 4K 有 有 16级 有 是 有 是 是
2K 256 1 - 2(T0/T2) - 有 5
有 3K 有 有 16级 有 是 有 是 是
4K 256 1 - 2(T0/T2) - 有 5
有 1K 有 有 16级 有 是 有 是 是
1
2
3
4
5
6
7
8
9
10
26个I/O
SOP28 / SKDIP28
所有封装
LQFP44/PDIP40
LQFP32/QFN32
SOP28/SKDIP28/TSSOP28/QFN28
SOP20/DIP20/TSSOP20
SOP16/DIP16
SOP8/DIP8/DFN8
(现此系列未生产PLCC44和SOP32封装)
CMPO/ECI/SS/ADC2/P1.2
MOSI/ADC3/P1.3
MISO/ADC4/P1.4
SCLK/ADC5/P1.5
MCLKO_2/XTAL2/RxD_3/ADC6/P1.6
XTAL1/TxD_3/ADC7/P1.7
CMP-/MCLKO/RST/P5.4
Vcc
CMP+/P5.5
Gnd
18个I/O
SOP20/DIP20/TSSOP20
比较器可作掉电检测
1组比较器
20
14个I/O
SOP16/DIP16
高频PWM:6位/7位/8位
STC15W10x系列����������
单片机选型价格一览表
串行口功能可由[P3.0/ INT4, P3.1]结合定时器实现
2.5-5.5 0.5K 128 - - 2(T0/T2) - 有 5
有 有
2.5-5.5 1K 128 - - 2(T0/T2) - 有 5
4K 有 有
2.5-5.5 2K 128 - - 2(T0/T2) - 有 5
3K 有 有
2.5-5.5 4K 128 - - 2(T0/T2) - 有 5
1K
有 有
2.5-5.5
2.5-5.5
P5
LQFP44(12mm x 12mm, 强烈推荐)
STC15W201S系列,RMB1.15元起
PDIP40(正常生产)
P3.3/INT1
1
8
CMP-/MCLKO/RST/P5.4
LQFP32(9mm x 9mm, 推荐)
QFN32(5mm x 5mm)
Vcc
P3.2/INT0
2
7
SOP28(强烈推荐)
P3.1/TxD/T2
3
6
CMP+/P5.5
TSSOP28(6.4mm x 9.7mm)
Gnd
4
5
P3.0/RxD/INT4/T2CLKO
QFN28(5mm x 5mm)
SOP-8
SKDIP28(正常生产)
SOP20(强烈推荐)
STC15W201S系列是目前全球抗干扰最强的Flash型单片机
DIP20(正常生产)
现悬赏
万元人民币寻找比STC15W201S系列抗干扰更强的Flash型单片机
TSSOP20 (6.5mm x 6.5mm)
1
16
CMPO/T0/P1.2
P1.1
SOP16(6mm x 9.9mm, 强烈推荐)
2
15
P1.0/RSTOUT_LOW
P1.3
DIP16(正常生产)
3
14
P3.7/INT3/TxD_2
T0CLKO/P1.4
SOP8(强烈推荐)
P3.6/INT2/RxD_2
4
13
P1.5
DIP8(正常生产)
CMP-/MCLKO/RST/P5.4
P3.3/INT1
5
12
6
11
P3.2/INT0
Vcc
DFN8(4mm x 4mm)
隆重推出
P3.1/TxD/T2
CMP+/P5.5
7
10
全部175℃
RMB 0.89元单片机
Gnd
P3.0/RxD/INT4/T2CLKO
8
9
8小时高温烘烤
STC15F100W
A/D
3路CCP/PCA/PWM
PWM可当D/A使用 (高速10位8路) 降低的是成本
IRC15W415AS
STC15W404S
STC15W408S
P4
最多42个I/O
比较
可 程可
串
普通 CCP 掉
支
A/D 器
内部
对 序设
行
定时器 PCA 电
内部
内
持
标准 8路 (可当
高
外 加下
R
口
计数器 PWM 唤
低压
部
Flash
外部 (3路 1路
可靠
输 密次
工作
并 S T0-T2 可当 醒
检测 看
高
更S
程序存
中断 PWM ADC EEP
复位
出 后
电压
可 P 外部 外部 专
中断 门
精
新 4
(可选
储器
支持 可当 使用, ROM
时 传
程 8
(V)
掉 I 管脚 中断 用
并可 狗
准
(byte)
掉电 3路 可作
复位
钟 输序
5
电
也能 并可 定
掉电
时
唤醒 D/A 外部
门槛
及 (防 需
唤
掉电 掉电 时
唤醒
钟
下
使用) 掉电
电压)
复 拦口
醒
唤醒 唤醒 器
载
检测)
位 截) 令
单片机选型价格一览表���
,另有STC15L系列(工作电压2.4V-3.6V)
STC15F100W系列�������������
串行口功能可由[P3.0/ INT4, P3.1]结合定时器实现
5.5-3.8 0.5K 128 - - 2(T0/T2) - 有 5
有 有 8级 有 是 有 是 是
5.5-3.8 1K 128 - - 2(T0/T2) - 有 5
4K 有 有 8级 有 是 有 是 是
5.5-3.8 2K 128 - - 2(T0/T2) - 有 5
3K 有 有 8级 有 是 有 是 是
5.5-3.8 4K 128 - - 2(T0/T2) - 有 5
1K 有 有 8级 有 是 有 是 是
-
2.5-5.5
2.5-5.5
2.5-5.5
P3
+
P5.4 / P5.5
大
容
量
S
R
A
M
字
节
2.5-5.5
P2
20万元人民币请专家帮忙查找加密有无漏洞
每片单片机具有全球唯一身份证号码(ID号),无法解密,加密坚不可摧
提升的是性能
ISP编程时可设置
16级复位门槛电压 超高速双串口(UART)
最多6个定时器 分时复用可当5组使用
5.5-3.8
P1
并行端口
P0/P1
P2/P3/P4
超强抗干扰,无法解密
宽电压(2.5V~5.5V)
内置高精准时钟(ISP编程时5~35MHz可任意设置)
内置高可靠复位电路(16级复位门槛电压可设置)
掉电模式: 3% 要更换波特率或者更换晶体频率, 重复步骤 1-4
例: SYSclk = 22.1184MHz, Baud0 = 57600 (12T 模式)
1. RELOAD = 256 - INT( 22118400/57600/32/12 + 0.5)
= 256 - INT( 1.5 )
= 256 - 1
= 255
= 0FFH
2. Baud = 22118400/(256-255)/32/12
= 57600
3. 误差等于零
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
291
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
例: SYSclk = 18.432MHz, Baud0 = 57600 (12T 模式)
1. RELOAD = 256 - INT( 18432000/57600/32/12 + 0.5)
= 256 - INT( 0.833 + 0.5 )
= 256 - INT( 1.333 )
= 256 - 1
= 255
= 0FFH
2. Baud = 18432000/(256-255)/32/12
= 48000
3. error = (48000 - 57600)/57600 * 100%
= -16.66%
4. 误差很大, 要更换波特率或者更换晶体频率, 重新计算请见下一例
例: SYSclk = 18.432MHz, Baud0 = 9600 (12T 模式)
1. RELOAD = 256 - INT( 18432000/9600/32/12 + 0.5)
= 256 - INT( 5.5 )
= 256 - 5
= 251
= 0FBH
2. Baud = 18432000/(256-251)/32/12
= 9600
3. 一目了然, 误差等于零
例: SYSclk = 2.000MHz, Baud = 4800 (1T 模式)
1. RELOAD = 256 - INT( 2000000/4800/32 + 0.5)
= 256 - INT( 13.02 + 0.5 )
= 256 - INT( 13.52 )
= 256 - 13
= 243
= 0F3H
2. Baud = 2000000/(256-243)/32
= 4808
3. error = 0.16%
C
T
S
292
南通国芯微电子有限公司
U
C
M
.
d
e
t
i
m
Li
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
8.4 STC11/10xx系列单片机串行口在P3口还是在P1口的使用
由AUXR1寄存器设置(PCA/PWM/SPI/UART2)是在P1口还是在P4口
Mnemonic Add
Name
AUXR1 A2H Auxiliary Register 1
7
6
5
4
3
2
UART_P1
-
-
-
GF2
-
1
0
Reset Value
DPS 0xxx,0xx0
UART_P1: 0, 串口/UART在P3 口[RxD/P3.0,TxD/P3.1]
1, 串口/UART在P1 口,将串口从P3口切换到P1 口[RxD/P1.6,TxD/P1.7]
串行口做主机通信时,可控制串口通信在[RxD/P3.0,TxD/P3.1]和[RxD/P1.6 口,TxD/P1.7]之
间任意切换,实现2 组串口。建议用户将自己的串行口设置在[RxD/P1.6 口,TxD/P1.7]而将
[RxD/P3.0,TxD/P3.1]口作为ISP 下载的专用通信口,当然也可以当用户的普通I/O 口用�
。若用
户将[P3.0,P3.1]作串口通信用,则必须在������������������
ISP���������������
下载程序时选择“下次冷启动时,P1.0/P1.1为0/0
才可下载程序”。
GF2:
DPS:
通用标志位
U
C
M
.
d
e
t
i
m
Li
0, 使用缺省数据指针DPTR0
1,使用另一个数据指针DPTR1
C
T
S
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
293
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.5 串行口的测试程序(C程序及汇编程序)
8.5.1 串行口在P3口的测试程序
1. C程序:
/*------------------------------------------------------------------------------------*/
/* --- STC MCU International Limited ---------------------------------------*/
/* --- 演示STC 1T 系列单片机串行口功能 (8-bit/9-bit) ----------------*/
/* --- Mobile: (86)13922805190 -----------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
U
C
M
.
d
e
t
i
m
Li
#define FOSC 18432000L
#define BAUD 9600
//System frequency
//UART baudrate
/*Define UART parity mode*/
#define NONE_PARITY 0
#define ODD_PARITY 1
#define EVEN_PARITY 2
#define MARK_PARITY 3
#define SPACE_PARITY 4
//None parity
//Odd parity
//Even parity
//Mark parity
//Space parity
C
T
S
#define PARITYBIT
sbit
bit
bit9 = P2^2;
busy;
EVEN_PARITY
//Testing even parity
//P2.2 show UART data bit9
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda;
//9-bit variable UART, parity bit initial to 1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2;
//9-bit variable UART, parity bit initial to 0
#endif
294
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
TMOD
TH1
TR1
ES
EA
SendString("STC11/10xx\r\nUart Test !\r\n");
while(1);
= 0x20;
= TL1 = -(FOSC/12/32/BAUD);
= 1;
= 1;
= 1;
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
//Set Timer1 as 8-bit auto reload mode
//Set auto-reload vaule
//Timer1 start run
//Enable UART interrupt
//Open master interrupt switch
}
/*---------------------------UART interrupt service routine
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
bit9 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
/*---------------------------Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
if (P)
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0;
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1;
#endif
}
C
T
S
南通国芯微电子有限公司
.
d
e
t
i
m
Li
//Clear receive interrupt flag
//P0 show UART data
//P2.2 show parity bit
U
C
M
//Clear transmit interrupt flag
//Clear transmit busy flag
//Wait for the completion of the previous data is sent
//Calculate the even parity bit P (PSW.0)
//Set the parity bit according to P
//Set parity bit to 0
//Set parity bit to 1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
295
STC11/10xx系列单片机指南
技术支持网站: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
/*---------------------------Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
C
T
S
296
南通国芯微电子有限公司
U
C
M
//Set parity bit to 1
//Set parity bit to 0
//Send data to UART buffer
.
d
e
t
i
m
Li
//Check the end of the string
//Send current char and increment string ptr
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
2. 汇编程序:
/*------------------------------------------------------------------------------------*/
/* --- STC MCU International Limited ---------------------------------------*/
/* --- 演示STC 1T 系列单片机串行口功能 (8-bit/9-bit) ----------------*/
/* --- Mobile: (86)13922805190 -----------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
;/*Define UART parity mode*/
#define NONE_PARITY 0
#define ODD_PARITY 1
#define EVEN_PARITY 2
#define MARK_PARITY 3
#define SPACE_PARITY 4
#define PARITYBIT
EVEN_PARITY
;----------------------------------------BUSY BIT
20H.0
;----------------------------------------
ORG 0000H
LJMP MAIN
C
T
S
//None parity
//Odd parity
//Even parity
//Mark parity
//Space parity
M
CU
.
d
e
t
i
m
Li
//Testing even parity
;transmit busy flag
ORG 0023H
LJMP UART_ISR
;----------------------------------------
ORG 0100H
MAIN:
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
;8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
;9-bit variable UART, parity bit initial to 1
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
;9-bit variable UART, parity bit initial to 0
#endif
;-------------------------------
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
297
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
MOV TMOD, #20H
;Set Timer1 as 8-bit auto reload mode
MOV A,
#0FBH
;256-18432000/12/32/9600
MOV TH1,
A
;Set auto-reload vaule
MOV TL1,
A
SETB TR1
;Timer1 start run
SETB ES
;Enable UART interrupt
SETB EA
;Open master interrupt switch
;------------------------------
MOV DPTR, #TESTSTR
;Load string address to DPTR
LCALL SENDSTRING
;Send string
;------------------------------
SJMP $
;----------------------------------------TESTSTR:
;Test string
DB
"STC11/10xx Uart Test !", 0DH,0AH,0
;/*---------------------------;UART2 interrupt service routine
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CHECKTI
CLR RI
MOV P0,
SBUF
MOV C,
RB8
MOV P2.2,
C
CHECKTI:
JNB TI,
ISR_EXIT
CLR TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
C
T
S
U
C
M
;/*---------------------------;Send a byte data to UART
;Input: ACC (data to be sent)
;Output:None
;----------------------------*/
SENDDATA:
JB
BUSY, $
MOV ACC, A
JNB P,
EVEN1INACC
298
南通国芯微电子有限公司
.
d
e
t
i
m
Li
;Check RI bit
;Clear RI bit
;P0 show UART data
;P2.2 show parity bit
;Check S2TI bit
;Clear S2TI bit
;Clear transmit busy flag
;Wait for the completion of the previous data is sent
;Calculate the even parity bit P (PSW.0)
;Set the parity bit according to P
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.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
C
T
S
南通国芯微电子有限公司
;Set parity bit to 0
;Set parity bit to 1
;Set parity bit to 1
;Set parity bit to 0
.
d
e
t
i
m
;Parity bit set completed
Li
;Send data to UART buffer
U
C
M
;/*---------------------------;Send a string to UART
;Input: DPTR (address of string)
;Output:None
;----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
;----------------------------------------
END
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
;Get current char
;Check the end of the string
;increment string ptr
;Send current char
;Check next
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
299
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.5.2 串行口在P1口的测试程序
1. C程序:
/*------------------------------------------------------------------------------------*/
/* --- STC MCU International Limited ---------------------------------------*/
/* --- 演示 STC10/11xx 系列单片机串行口功能 (8-bit/9-bit) ----------------*/
/* --- Mobile: (86)13922805190 -----------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
#include "reg51.h"
#include "intrins.h"
typedef unsigned char
typedef unsigned int
BYTE;
WORD;
U
C
M
.
d
e
t
i
m
Li
#define FOSC 18432000L
#define BAUD 9600
//System frequency
//UART baudrate
/*Define UART parity mode*/
#define NONE_PARITY 0
#define ODD_PARITY 1
#define EVEN_PARITY 2
#define MARK_PARITY 3
#define SPACE_PARITY 4
//None parity
//Odd parity
//Even parity
//Mark parity
//Space parity
C
T
S
#define PARITYBIT
sfr
AUXR1 =
#define UART_P1
sbit
bit
bit9 = P2^2;
busy;
EVEN_PARITY
//Testing even parity
0xA2;
0x80
//(AUXR1.7) switch RXD/TXD from P3.0/P3.1 to P1.6/P1.7
//P2.2 show UART data bit9
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
AUXR1 |= UART_P1;
//switch RXD/TXD from P3.0/P3.1 to P1.6/P1.7
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50;
//8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
300
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
SCON = 0xda;
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2;
#endif
//9-bit variable UART, parity bit initial to 1
//Set Timer1 as 8-bit auto reload mode
//Set auto-reload vaule
//Timer1 start run
//Enable UART interrupt
//Open master interrupt switch
TMOD = 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
ES = 1;
EA = 1;
SendString("STC10/11xx\r\nUart Test !\r\n");
while(1);
//9-bit variable UART, parity bit initial to 0
.
d
e
t
i
m
}
/*---------------------------UART interrupt service routine
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{
if (RI)
{
RI = 0;
P0 = SBUF;
bit9 = RB8;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
C
T
S
/*---------------------------Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void SendData(BYTE dat)
{
while (busy);
ACC = dat;
南通国芯微电子有限公司
U
C
M
Li
//Clear receive interrupt flag
//P0 show UART data
//P2.2 show parity bit
//Clear transmit interrupt flag
//Clear transmit busy flag
//Wait for the completion of the previous data is sent
//Calculate the even parity bit P (PSW.0)
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
301
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
if (P)
{
#if (PARITYBIT == ODD_PARITY)
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;
}
302
南通国芯微电子有限公司
研发顾问Tel:13922805190
//Set the parity bit according to P
//Set parity bit to 0
//Set parity bit to 1
//Set parity bit to 1
.
d
e
t
i
m
//Set parity bit to 0
Li
//Send data to UART buffer
U
C
M
/*---------------------------Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{
while (*s)
{
SendData(*s++);
}
}
C
T
S
临时技术支持Tel:13922829991
//Check the end of the string
//Send current char and increment string ptr
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
2. 汇编程序:
/*------------------------------------------------------------------------------------*/
/* --- STC MCU International Limited ---------------------------------------*/
/* --- 演示STC 1T 系列单片机串行口1功能 (8-bit/9-bit) ----------------*/
/* --- Mobile: (86)13922805190 -----------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
AUXR1
UART_P1
EQU
EQU
0A2H
80H
;/*Define UART parity mode*/
#define NONE_PARITY 0
#define ODD_PARITY 1
#define EVEN_PARITY 2
#define MARK_PARITY 3
#define SPACE_PARITY 4
C
T
S
Li
//None parity
//Odd parity
//Even parity
//Mark parity
//Space parity
U
C
M
#define PARITYBIT
EVEN_PARITY
;----------------------------------------BUSY BIT
20H.0
;----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
;----------------------------------------
ORG 0100H
MAIN:
ORL AUXR1,#UART_P1
.
d
e
t
i
m
//(AUXR1.7) switch RXD/TXD from P3.0/P3.1 to P1.6/P1.7
//Testing even parity
;transmit busy flag
;switch RXD/TXD from P3.0/P3.1 to P1.6/P1.7
CLR BUSY
CLR EA
MOV SP,
#3FH
#if (PARITYBIT == NONE_PARITY)
MOV SCON, #50H
;8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
MOV SCON, #0DAH
;9-bit variable UART, parity bit initial to 1
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
303
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
#elif (PARITYBIT == SPACE_PARITY)
MOV SCON, #0D2H
#endif
;-------------------------------
MOV TMOD,#20H
MOV A,#0FBH
MOV TH1,A
MOV TL1,A
SETB TR1
SETB ES
SETB EA
;------------------------------
MOV DPTR, #TESTSTR
LCALL SEND STRING
;------------------------------
SJMP $
;----------------------------------------TESTSTR:
DB "STC10/11xx Uart Test !",0DH,0AH,0
304
南通国芯微电子有限公司
研发顾问Tel:13922805190
;9-bit variable UART, parity bit initial to 0
;Set Timer1 as 8-bit auto reload mode
;256-18432000/12/32/9600
;Set auto-reload vaule
;Timer1 start run
;Enable UART interrupt
;Open master interrupt switch
.
d
e
t
i
m
;Load string address to DPTR
;Send string
U
C
M
;/*---------------------------;UART2 interrupt service routine
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB RI,
CHECKTI
CLR RI
MOV P0,
SBUF
MOV C,
RB8
MOV P2.2,
C
CHECKTI:
JNB TI,
ISR_EXIT
CLR TI
CLR BUSY
ISR_EXIT:
POP PSW
POP ACC
RETI
C
T
S
临时技术支持Tel:13922829991
Li
;Test string
;Check RI bit
;Clear RI bit
;P0 show UART data
;P2.2 show parity bit
;Check S2TI bit
;Clear S2TI bit
;Clear transmit busy flag
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
;/*---------------------------;Send a byte data to UART
;Input: ACC (data to be sent)
;Output:None
;----------------------------*/
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:
;Parity bit set completed
SETB BUSY
MOV SBUF, A
RET
C
T
S
南通国芯微电子有限公司
;Wait for the completion of the previous data is sent
;Calculate the even parity bit P (PSW.0)
;Set the parity bit according to P
;Set parity bit to 0
.
d
e
t
i
m
;Set parity bit to 1
U
C
M
;/*---------------------------;Send a string to UART
;Input: DPTR (address of string)
;Output:None
;----------------------------*/
SENDSTRING:
CLR A
MOVC A,
@A+DPTR
JZ
STRINGEND
INC DPTR
LCALL SENDDATA
SJMP SENDSTRING
STRINGEND:
RET
;----------------------------------------
END
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
Li
;Set parity bit to 1
;Set parity bit to 0
;Send data to UART buffer
;Get current char
;Check the end of the string
;increment string ptr
;Send current char
;Check next
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
305
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
8.6 双机通信
STC11/10xx系列单片机的串行通信根据其应用可分为双机通信和多机通信两种。下面先介
绍双机通信。
如果两个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
m
8051
Li
为确保通信成功,通信双方必须在软件上有系列的约定通常称为软件通信�������
“������
协议����
”���
。现举
例简介双机异步通信软件�������
“������
协议����
”���
如下:
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”信号,否则回发“F0H”信号。甲机只有在接收到乙机发回的�
“0FH”���������
信号才算完成发送任
务,返回被调用的程序,否则继续呼叫,重发数据。
不同的通信要求,软件�����������������������������
“����������������������������
协议��������������������������
”�������������������������
内容也不一样,有关需甲、乙双方共同遵守的约定应尽量
完善,以防止通信不能正确判别而失败。
STC11/10xx系列单片机的串行通信,可直接采用查询法,也可采用自动中断法。
306
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
(1)������������
查询方式双机通信软件举例
①��������
甲机发送子程序段
下图为甲机发送子程序流程图。
开始
定时器,串行口初始化
发送数据
地址指针DPTR,长度计数器
R7,校验寄存器R6置初值
发送完否?
N
Y
.
d
e
t
i
m
发送校验和
发送呼叫信号06H
Li
等待乙机回答
CU
等待乙机回答
N
是00H?
C
T
S
Y
发字节长度数
M
N
传送正确吗?
Y
返回
甲机发送程序设置:
(a) ��������������������������������������������
波特率设置:选用定时器���������������������������������
/��������������������������������
计数器�����������������������������
1����������������������������
定时模式、工作方式�������������������
2������������������
,计数常数�������������
F3H����������
,���������
SMOD=1���
。波
特率为����������
2400������
(位����
/���
秒);
(b) ��������������������
串行通信设置:异步通信方式�������
1������
,允许接收;
(c) 内部������������������������������������������
��������������������������������������������
RAM���������������������������������������
和工作寄存器设置:������������������������������
31H���������������������������
和��������������������������
30H�����������������������
单元存放发送的数据块首地址;���������
2FH������
单元存放
发送的数据块个数;����������
R6��������
为累加和寄存器。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
307
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
甲机发送子程序清单:
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
m
Li
发送呼叫信号“06H”
U
C
M
;判断乙机回答信号
;未收到回答信号,则等待
A,
A,
SBUF
;接收回答信号送A
#00H, TX-ACK ;判断是否“00H”,否则重发呼叫信号
A,
R7
;
MOV SBUF,
ADD A,
MOV R6,
WAIT2:
JBC
TI,
A
R6
A
; 发送数据块数n
TX-NES
;
JMP
TX-NES:
MOVX
MOV
ADD
MOV
INC
WAIT2
; 等待发送完
A,
SBUF,
A,
R6,
DPTR
@DPTR
A
R6
A
;从外部RAM取发送数据
;发送数据块
308
南通国芯微电子有限公司
;DPTR指针加1
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
WAIT3:
JBC
SJMP
NEXT2:
DJNZ
TX-SUM:
MOV
MOV
WAIT4:
JBC TI,
官方网站:www.STCMCU.com
TI,
WAIT3
NEXT2
;判断一数据块发送完否
;等待发送完
R7,
TX-NES
;判断发送全部结束否
A,
R6
SBUF, A
;发送累加和给乙机
RX-0FH
;
SJMP
RX-0FH:
JBC
WAIT4
; 等待发送完
SJMP
IF-0FH:
MOV
RX-0FH
CJNE
RET
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
RI,
A,
A,
IF-0FH
SBUF;
.
d
e
t
i
m
;
; 等待接收乙机回答信号
;
Li
#0FH, ST-RAM ; 判断传输是否正确,否则重新发送
;返回
C
T
S
U
C
M
乙机接收子程序段
接收程序段的设置:
(a) ���������������
波特率设置初始化:同发送程序;
(b) ��������������
串行通信初始化:同发送程序;
(c) ������
寄存器设置:
内部RAM 31H、30H单元存放接收数据缓冲区首地址。
R7——数据块个数寄存器。
R6——累加和寄存器。
(d) ���������
向甲机回答信号:“0FH”为接收正确,“F0H”为传送出错,“00H”为同意接收数
据,“05H”为暂不接收。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
309
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
下图为双机通信查询方式乙机接收子程序流程图。
开始
定时器,串行口初始化
接收数据并存入RAM
地址指针DPTR赋值,
校验寄存器清0
地址指针DPTR加1
数据接收完否?
N
Y
.
d
e
t
i
m
接收呼叫信号
接收校验和
是06H?
Y
N
向甲机回送15H
向甲机回送00H
C
T
S
接收数据块长度
Li
传送正确吗?
U
C
M
Y
N
向甲机回送F0H
向甲机回送0FH
返回
接收子程序清单:
TART:
MOV
MOV
;
TL1, #0F3H
TR1
SCON, #50H
; 定时器/计数器1设置
;启动定时器/计数器1
; 置串行通信方式1,允许接收
MOV
ST-RAM:
MOV
PCON, #80H
; SMOD置位
DPH, 31H
;
DPL, 30H
R6, #00H
; 设置DPTR首地址
;校验和寄存器清0
310
MOV
SETB
MOV
TMOD, #20H
TH1, #0F3H
MOV
MOV
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
RX-ACK:
JBC
RI,
IF-06H
SJMP
RX-ACK
MOV
A,
CJNEA #06H, TX-05H
;判断接收呼叫信号
;等待接收呼叫信号
IF-06H:
SBUF
;呼叫信号送A
;判断呼叫信号正确否?
TX-00H:
MOV
A,
#00H
MOV
WAIT1:
SBUF, A
JBC
TI,
SJMP
WAIT1
;
;
RX-BYS
向甲机发送“00H”,同意接收
;等待应答信号发送完
TX-05H:
MOV
A,
#05H
MOV
SBUF, A
;不正确信号
WAIT2:
JBC
TI,
HAVE1
C
T
S
LJMP RX-ACK
RX-BYS:
JBC
SJMP WAIT2
HAVE1:
RI,
Li
U
C
M
;等待发送完
;因呼叫错,返回重新接收呼叫
HAVE2
SJMP RX-BYS
.
d
e
t
i
m
;向甲机发送“05H”呼叫
;等待接收数据块个数
;
HAVE2:
MOV
A,
SBUF
;
MOV R7,
A
;数据块个数帧送R7,R6
MOV R6,
A
;
RX-NES:
JBC
RI,
HAVE3
SJMP RX-NES
HAVE3:
A,
;
MOV
MOVX @DPTR,A
INC
DPTR
ADD
A,
R6
MOV
DJNZ
R6,
R7,
A
RX-NES
南通国芯微电子有限公司
;
SBUF
接收数据帧
;
;接收到的数据存入外部RAM
;
;
; 形成累加和
;判断数据是否接收完
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
311
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RX-SUM:
JBC
RI,
HAVE4
SJMP RX-SUM
HAVE4:
;
;
MOV
A,
SBUF
CJNE
TX-RIT:
A,
R6,
MOV
A,
#0FH
MOV
WAIT3:
JBC
SJMP
TX-ERR:
MOV
A,
MOV
SBUF, A
JBC
TI,
;
;
;
#0F0H
LJMP
GOOD:
AGAIN
SJMP WAIT4
AGAIN:
RET
C
T
S
ST-RAM
;
WAIT4:
;
GOOD
WAIT3
TX-ERR
;
SBUF, A
TI,
判断传输是否正确
向甲机发送接收正确信息
.
d
e
t
i
m
等待发送结束
Li
;向甲机发送传输有误信号
U
C
M
等待接收校验和
;等待发送完
;返回重新开始接收
;传输正确返回
(2)中断方式双机通信软件举例
在很多应用场合,双机通信的双方或一方采用中断方式以提高通信效率。由于STC11/10xx
系列单片机的串行通信是双工的,且中断系统只提供一个中断矢量入口地址,所以实际上是中
断和查询必须相结合,即接收/发送均可各自请求中断,响应中断时主机并不知道是谁请求中
断,统一转入同一个中断矢量入口,必须由中断服务程序查询确定并转入对应的服务程序进行
处理。
这里,任以上述协议为例,甲方(发送方)任以查询方式通信(从略),乙方(接收方)
则改用中断����������
—���������
查询方式进行通信。
在中断接收服务程序中,需设置三个标志位来判断所接收的信息是呼叫信号还是数据块个
数,是数据还是校验和。增设寄存器:内部RAM32H单元为数据块个数寄存器,33H单元为校
验和寄存器,位地址7FH、7EH、7DH为标志位。
312
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
乙机接收中断服务程序清单
采用中断方式时,应在主程序中安排定时器/计数器、串行通信等初始化程序。通信接收的数据存放在外
部RAM的首地址也需在主程序中确定。
主程序:
ORG
AJMP START
ORG
0023H
LIMP
SERVE
0000H
;转至主程序起始处
;转中断服务程序处
·
·
·
.
d
e
t
i
m
START:
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
;定义定时器/计数器1定时、工作方式2
;
Li
; 设置波特率为2400位/秒
;设置串行通信方式1,允许接收
U
C
M
;设置SMOD=1
;启动定时器
;
;设置标志位为1
;
; 规定接收的数据存储于外部RAM的
; 起始地址1000H
;累加和单元清0
;
; 开中断
·
·
·
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
313
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
中断服务程序:
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
TXRI:
MOV
WAIT1:
#0FH
SBUF, A
JNB
TI,
WAITI
CLR
TI
SJMP
AGAIN
TXERR:
MOV
MOV
WAIT2:
C
T
S
A,
SBUF, A
JNB
TI,
CLR
TI
SJMP
AGAIN
;等待发送完毕
;转结束处理
;
;
WAIT2
Li
向甲机发送接收正确信号“0FH”
;清除发送中断请求标志位
#0F0H
U
C
M
;
.
d
e
t
i
m
向甲机发送接收出错信号“F0H”
;等待发送完毕
;清除发送中断请求标志
;转结束处理
RXACK:
MOV
A,
SBUF
;判断是否是呼叫信号“06H”
XRL
A,
#06H
;异或逻辑处理
JZ
TXREE
;是呼叫,则转TXREE
TXNACK:
314
MOV
A,
#05H
MOV
SBUF, A
南通国芯微电子有限公司
;接收到的不是呼叫信号,则向甲机发送
;“05H”,要求重发呼叫
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
WAIT3:
JNB
TI,
CLR
TI
SJMP
RETURN
WAIT3
; 等待发送结束
;转恢复现场处理
TXREE:
MOV
A,
MOV
SBUF, A
#00H
JNB
TI,
CLR
TI
CLR
7FH
SJMP
RETURN
;接收到的是呼叫信号,发送“00H”
;接收到的是呼叫信号,发送“00H”
WAIT4:
WAIT4
;等待发送完毕
;清除TI标志
;清除呼叫标志
MOV
A,
MOV
32H, A
ADD
A,
MOV
CLR
33H, A
7EH
SJMP
RETURN
SBUF
33H
U
C
M
;
Li
; 形成累加和
;清除数据块数标志
;转恢复现场处理
MOV
DPH, 31H
MOV
MOV
DPL, 30H
A,
SBUF
;接收到数据块数
;存入32H单元
C
T
S
RXDATA:
;
MOVX @DPTR, A
INC
DPTR
MOV
31H, DPH
MOV
ADD
30H, DPL
A,
33H
MOV
DJNZ
33H, A
32H, RETURN
; 形成累加和
;判断数据接收完否
CLR
7DH
;清数据接收完标志
SJMP
RETURN
南通国芯微电子有限公司
; 设置存储数据地址指针
;读取数据帧
;将数据存外部RAM
.
d
e
t
i
m
;转恢复现场处理
RXBYS:
;地址指针加1
;
;
;
保存地址指针值
;转恢复现场处理
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
315
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
AGAIN:
SETB
7FH
;
SETB
7EH
;恢复标志位
SETB
7DH
;
MOV
33H, #00H
;累加和单元清0
MOV
31H, #10H
;
30H,
;
;
MOV
RETURN:
POP
A
POP
DPL
POP
DPH
SETB
EA
RET1
#00H
恢复接收数据缓冲区首地址
;恢复现场
;
.
d
e
t
i
m
;开中断
;返回
U
C
M
Li
上述程序清单中,ORG为程序段说明伪指令,在程序汇编时,它向汇编程序说明该程序段
的起始地址。
在实际应用中情况多种多样,而且是两台独立的计算机之间进行信息传输。因此,应周密
考虑通信协议,以保证通信的正确性和成功率
C
T
S
316
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
8.7 多机通信
在很多实际应用系统中,需要多台微计算机协调工作。STC11/10xx系列单片机的串行通
信方式2和方式3具有多机通信功能,可构成各种分布式通信系统。下图为全双工主从式多机
通信系统的连接框图。
STC
MCU
TxD
RxD
主机
TxD
TxD
RxD
STC MCU 从机1
STC MCU 从机2
U
C
M
.
d
e
t
i
m
Li
RxD
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���������������
,不会产生中断请求,直至被寻址
为止。
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
317
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
④ �����������������������������
主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的�
TB8=0��������������
,以表示为数据帧。�����
⑤ �����������������������������
当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机,原先
被寻址的从机经分析得知主机在寻呼其他从机时,恢复其����������������
SM2=1�����������
,对其后主机发送的数据
帧不予理睬。
上述过程均在软件控制下实现。
(2)��������
多机通信协议简述
由于串行通信是在二台或多台各自完全独立的系统之间进行信息传
�����������������������������
输这就需要根据时间通信要求制定某些约定,作为通信规范遵照执行,协议要求严格、完
善,不同的通信要求,协议的内容也不相同。在多机通信系统中要考虑的问题较多,协议内容
比较复杂。这里仅例举几条作一说明。
.
d
e
t
i
m
Li
上图的主从式多机通信系统,允许配置����������������
255�������������
台从机,各从机的地址分别为00H~FEH。
① ������������������������������������������
约定地址��������������������������������������
FFH�����������������������������������
为全部从机的控制命令,命令各从机恢复�����������������
SM2=1������������
状态,准备接收主机的地
址呼叫。
② ��������������������������������������
主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址
给主机,经验证地址相符后主机再向被寻址的从机发送命令字,被寻址的从机根据命
令字要求回送本机的状态,若主机判断状态正常,主机即开始发送或接收数据帧,发
送或接收的第一帧为传输数据块长度。
U
C
M
C
T
S
③ ������������
约定主机发送的命令字为:
00H�����������
:要求从机接收数据块;
01H�����������
:要求从机发送数据块;
·
·
·
其他:非法命令。
④ ������������
从机的状态字格式约定为:
B7
B6
B5
B4
B3
B2
B1
B0
ERR
0
0
0
0
0
TRDY
RRDY
���������������������
定义: 若����������������
ERR=1�����������
,从机接收到非法命令;
�����������������
若����������������
TRDY=1����������
,从机发送准备就绪;
�����������������
若����������������
RRDY=1����������
,从机接收准备就绪;
⑤ ������������
其他:如传输出错措施等。
318
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
(3)����
程序举例
在实际应用中如传输波特率不太高,系统实时性有一定要求以及希望提高通信效率,则
��������������������������������������
多半采用中断控制方式,但程序调试较困难,这就要求提高程序编制的正确性。采用查询方
式,则程序调试较方便。这里仅以中断控制方式为例简单介绍主�������������
—������������
从机之间一对一通信软件。
① ������
主机发送程序
该主机要发送的数据存放在内部�����������������������������
RAM��������������������������
中,数据块的首地址为����������������
51H�������������
,数据块长度存放做����
50H�
单
元中,有关发送前的初始化、参数设置等采用子程序格式,所有信息发送均由中断服务程序完
成。当主机需要发送时,在完成发送子程序的调用之后,随即返回主程序继续执行。以后只需
查询���������������������������
PSW·5����������������������
的���������������������
F0�������������������
标志位的状态即可知道数据是否发送完毕。
要求主机向���������������������
#5�������������������
从机发送数据,中断服务程序选用工作寄存存器区1的R0~R7。
.
d
e
t
i
m
主机发送程序清单:
ORG
AJMP MAIN
ORG
0023H
;发送中断服务程序入口
LJMP
SERVE
;转中断服务程序
0000H
Li
.
.
.
MAIN: ...
C
T
S
...
.
.
.
ORG
1000H
TXCALL:
;转主程序
U
C
M
;主程序
;发送子程序入口
MOV
TMOD, #20H
MOV
TH1, #0F3H
;设置波特率为2400位/秒
MOV
TL1, #0F3H
;置位SMOD
;设置定时器/计数器1定时、方式2
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:
南通国芯微电子有限公司
WAIT1
;等待发送完毕
;复位发送中断请求标志
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
319
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
RXADDR:
JNB
RI,
CLR
TI
MOV
A,
SBUF
CJNE
A,
#05H, TXADDR
CLR
TB8
CLR
PSW.5
RXADDR
;等待从机回答本机地址
;复位接收中断请求标志
;读取从机回答的本机地址
;判断呼叫地址符否,否则重发
;地址相符,复位TB8=0,准备发数据
;复位F0=0标志位
MOV
08H, #50H
;发送数据地址指针送R0
MOV
0CH, 50H
;数据块长度送R4
INC
0CH
SETB
ES
RET
;数据块长度加1
;允许串行通信中断
SERVE:
CLR
TI
U
C
M
PUSH PSW
PUSH A
CLR
RS1
Li
;中断服务程序段,清中断请求标志TI
;
;
;
;
C
T
S
.
d
e
t
i
m
;返回主程序
.
.
.
现场入栈保护
SETB
TXDATA:
RS0
MOV
SBUF, @R0
JNB
TI,
CLR
TI
;复位TI=0
INC
R0
;地址指针加1
DJNZ
R4,
SETB PSW.5
;已发送完毕置位F0=1
CLR
ES
;关闭串行中断
WAIT2:
WAIT2
RETURN
选择工作寄存器区1
;发送数据块长度及数据
;等待发送完毕
;数据块未发送完,转返回
RETURN:
POP
A
POP
RETI
PSW
320
南通国芯微电子有限公司
;
;
恢复现场
;返回
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
②������
从机接收程序
主机发送的地址呼叫帧,所有的从机均接收,若不是呼叫本机地址即从中断返回;若是
本机地址,则回送本机地址给主机作为应答,并开始接收主机发送来的数据块长度帧,并存放
于内部RAM的60H单元中,紧接着接收的数据帧存放于61H为首地址的内部RAM单元中,程序
中还选用20·0H、20·1H位作标志位,用来判断接收的是地址、数据块长度还是数据,选用了
2FH、2EH两个字节单元用于存放数据字节数和存储数据指针。#5从机的接收程序如下,供参
考。
#5从机接收程序清单:
ORG
AJMP START
0000H
ORG
0023H
LJMP
SERVE
ORG
0100H
;转主程序段
;从中断入口转中断服务程序
START:
MOV
TMOD, #20H
MOV
TH1, #0F3H
MOV
TL1, #0F3H
MOV
PCON, #80H
C
T
S
MOV
SCON, #0F0H
SETB
TR1
SETB
U
C
M
.
d
e
t
i
m
Li
;主程序段:初始化程序,设置定时
;器/计数器1定时、工作方式2,设
;置波特率为2400位/秒的有关初值
;置位SMOD
;设置串行方式3,允许接收,SM2=1
;启动定时器/计数器1
20·0
;
SETB
SETB
20·1
EA
;
;
置标志位为1
SETB
.
.
.
ES
;
开中断
ORG
1000H
;清接收中断请求标志RI=0
;
SERVE:
CLR
RI
PUSH A
PUSH PSW
CLR
RS1
SETB
JB
RS0
20·0H,
ISADDR
; 选择工作寄存器区1
;判断是否是地址帧
JB
20·1H,
ISBYTE
;判断是否是数据块长度帧
南通国芯微电子有限公司
;
;
现场保护
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
321
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
ISDATA:
MOV
R0,
2EH
MOV
A,
SBUF
MOV
@R0, A
INC
2EH
DJNZ
2FH, RETURN
SETB
20·0H
;
SETB
20·1H
;恢复标志位
SETB
SM2
SJMP
RETURN
;数据指针送R0
;接收数据
;数据指针加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
m
; 是地址呼叫,判断与本机地址
WAIT:
U
C
M
Li
;等待发送结束
;清0TI,20·0,SM2
;清0TI,20·0,SM2
;清0TI,20·0,SM2
C
T
S
ISBYTES:
WAIT
;
相符否,不符则转返回
;相符,发回答信号“01H”
;转返回
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口,或配
置某些串行通信接口的外部设备。例如,串行打印机、显示器等。这里就不一一举例了。
322
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站:www.STCMCU.com
STC — 全球最大的8051单片机设计公司
技术支持QQ:800003751
第9章 STC11/10xx系列单片机EEPROM的应用
STC11/10xx����������������������������������������
系列单片机内部集成了的EEPROM是与程序空间是分开的,利用ISP/IAP技术可
将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区,每个扇区包
含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不
同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。
EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。在用户程序
中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。�����������������
在工作电压Vcc偏低时,建议不要进
行EEPROM/IAP操作。
需要注意的是:STC11xx系列5V单片机在4.1V以上对EEPROM进行操作才有效,4.1V以下对
EEPROM进行操作,MCU不执行此功能;3.3V单片机在2.4V以上对EEPROM进行操作才有效,2.4V以
下对EEPROM操作,MCU不执行此功能。STC10xx系列5V单片机在3.8V以上对EEPROM进行操作才有
效,3.8V以下对EEPROM进行操作,MCU不执行此功能;3.3V单片机在2.4V以上对EEPROM进行操作才
有效,2.4V以下对EEPROM操作,MCU不执行,所以建议ISP烧录程序时选择高的复位门槛电压,如
5V单片机选择4.1V以下复位,3V 单片机选择2.4V以下复位。
U
C
M
.
d
e
t
i
m
Li
9.1 IAP及EEPROM新增特殊功能寄存器介绍
符号
IAP_DATA
IAP_ADDRH
IAP_ADDRL
IAP_CMD
IAP_TRIG
IAP_CONTR
PCON
C
T
S
描述
地址
ISP/IAP Flash Data
Register
ISP/IAP Flash Address High
ISP/IAP Flash Address Low
ISP/IAP Flash Command Register
ISP/IAP Flash Command Trigger
ISP/IAP Control
Register
Power Control
南通国芯微电子有限公司
C2H
位地址及符号
MSB
LSB
复位值
1111 1111B
C3H
0000 0000B
C4H
0000 0000B
C5H
-
-
-
-
-
-
MS1
MS0
C6H
xxxx xx00B
xxxx xxxxB
C7H
IAPEN SWBS SWRST CMD_FAIL
87H
SMOD SMOD0 LVDF
总机:0513-5501 2928 / 2929 / 2966
POF
GF1
-
WT2 WT1
GF0
PD
WT0
0000 x000B
IDL
0011 0000B
传真:0513-5501 2969 / 2956 / 2947
323
STC11/10xx系列单片机指南
技术支持网站: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 操作时的地址寄存器高八位。�������
该寄存器地址为C3H,复位后值为00H.
该寄存器地址为C4H,复位后值为00H.
IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。�������
3. ISP/IAP命令寄存器IAP_CMD
ISP/IAP命令寄存器IAP_CMD格式如下:
SFR name
Address
bit
B7
B6
B5
B4
B3
IAP_CMD
C5H
name
-
-
-
-
-
B2
B1
.
d
e
t
i
m
-
MS1
MS1
MS0
0
0
命令 / 操作 模式选择
Standby 待机模式,无ISP操作
0
1
从用户的应用程序区对"Data Flash/EEPROM区"进行字节读
1
0
从用户的应用程序区对"Data Flash/EEPROM区"进行字节编程
1
1
从用户的应用程序区对"Data Flash/EEPROM区"进行扇区擦除
U
C
M
B0
MS0
Li
程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除
,IAP12C5A62S2/IAP12LE5A62S2等�����������������������
除外,这几个型号可在应用程序区修改应用程序区。
C
T
S
4. ISP/IA命令触发寄存器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命令才会生效。
324
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
传真:0513-5501 2969 / 2956 / 2947
STC10/11xx系列单片机指南
官方网站: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),还是从������������
系统����������
ISP�������
监控�����
程序区启动(送1)。
要与SWRST直接配合才可以实现
SWRST: 0: 不操作; 1: 产生软件系统复位,硬件自动���
复位�
。
CMD_FAIL: 如果送了ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败,则为1,需由软件清零
.;在用户应用程序区(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(软复位)
U
C
M
设置等待时间 CPU等待时间(多少个CPU工作时钟 )
Sector Erase
Read/读
Program/编程
WT2 WT1 WT0
扇区擦除
(2个时钟)
(=55us)
(=21ms)
1
1
1 2个时钟
55个时钟
21012个时钟
1
1
0 2个时钟
110个时钟
42024个时钟
1
0
1 2个时钟
165个时钟
63036个时钟
1
0
0 2个时钟
330个时钟
126072个时钟
0
1
1 2个时钟
660个时钟
252144个时钟
0
1
0 2个时钟
1100个时钟
420240个时钟
0
0
1 2个时钟
1320个时钟
504288个时钟
0
0
0 2个时钟
1760个时钟
672384个时钟
C
T
S
南通国芯微电子有限公司
总机:0513-5501 2928 / 2929 / 2966
.
d
e
t
i
m
Li
Recommended System Clock
跟等待参数对应的推荐系统时钟
≤ 1MHz
≤ 2MHz
≤ 3MHz
≤ 6MHz
≤ 12MHz
≤ 20MHz
≤ 24MHz
≤ 30MHz
传真:0513-5501 2969 / 2956 / 2947
325
STC11/10xx系列单片机指南
技术支持网站:www.GXWMCU.com
临时技术支持Tel:13922829991
研发顾问Tel:13922805190
EEPROM使用注意事项:
为了保证单片机内部EEPROM的正常可靠工作,目前供货的单片机:
STC11xx系列:
5V������������������������������������������������
单片机在��������������������������������������������
Vcc