嵌入式系统设计

109
嵌嵌嵌嵌 嵌嵌 嵌嵌嵌嵌 嵌嵌 摘摘摘摘摘摘摘摘摘摘摘 摘摘摘摘摘摘摘摘摘摘摘 摘摘摘摘摘摘摘摘MCS-51 MCS-51 摘摘摘摘摘摘摘摘摘摘

Upload: carla-schultz

Post on 30-Dec-2015

63 views

Category:

Documents


0 download

DESCRIPTION

嵌入式系统设计. 摘自其他学校单片机讲义. 实验准备( MCS-51 单片机介绍). 1.1 MCS-51 系列芯片举例. 本次实验用 MCS-51 单片机 P89LV51RD2 的主要性能和特点. 增强形 INTEL 8052 CPU 内核 内部程序存储器 ROM : 64KB ( FLASH ) 内部数据存储器 RAM : 1KB RAM 寄存器区:有 4 个寄存器区,每个区有 R0-R7 八个工作寄存器 8 位并行输入输出端口: P0 、 P1 、 P2 、 P3 定时 / 计数器: 2 个 16 位的定时 / 计数器 - PowerPoint PPT Presentation

TRANSCRIPT

嵌入式系统设计嵌入式系统设计

摘自其他学校单片机讲义摘自其他学校单片机讲义

实验准备(实验准备( MCS-51MCS-51 单片机介绍)单片机介绍)

1.1 1.1 MCS-51MCS-51 系列芯片举例系列芯片举例型 号 型 号 片内片内 ROMROM 片内片内 RAMRAM I/OI/O 口线口线 封 装封 装

80318031 无无 128B+SFR128B+SFR 88×4×4 DIP 40DIP 40 脚脚

80518051 掩膜掩膜 4KB4KB 128B+SFR128B+SFR 88×4×4 DIP 40DIP 40 脚脚

87518751 EPROM 4KBEPROM 4KB 128B+SFR128B+SFR 88×4×4 DIP 40DIP 40 脚脚

AT89C2051AT89C2051 FLASH 2KBFLASH 2KB 128B+SFR128B+SFR 1515DIP 20DIP 20 脚脚

SOIC 20SOIC 20 脚脚

AT89C51AT89C51 FLASH 4KBFLASH 4KB 128B+SFR128B+SFR 88×4×4 DIP 40DIP 40 脚脚 PLCPLCC 44C 44 脚脚

AT89C52AT89C52 FLASH 8KBFLASH 8KB 256B+SFR256B+SFR 88×4×4DIP 40DIP 40 脚脚

PLCC 44PLCC 44 脚脚

P89C51RD2P89C51RD2FLASH 64KBFLASH 64KB

EEPROM 2KBEEPROM 2KB1024B+SFR1024B+SFR 88×6×6 DIP 40DIP 40 脚脚 PLCPLC

C 68C 68 脚脚

本次实验用 本次实验用 MCS-51 MCS-51 单片机单片机P89LV51RD2 P89LV51RD2 的主要性能和特点的主要性能和特点

•增强形增强形 INTEL 8052 CPU INTEL 8052 CPU 内核内核•内部程序存储器内部程序存储器 ROM ROM :: 64KB64KB ( ( FLASH FLASH ))•内部数据存储器内部数据存储器 RAMRAM :: 1KB RAM 1KB RAM •寄存器区:有寄存器区:有 44 个寄存器区,每个区有个寄存器区,每个区有 R0-R7R0-R7 八个工作寄存器八个工作寄存器•88 位并行输入输出端口:位并行输入输出端口: P0P0 、、 P1P1 、、 P2P2 、、 P3P3•定时定时 // 计数器:计数器: 22 个个 1616 位的定时位的定时 // 计数器计数器•串型口:全双工的端口(串型口:全双工的端口( RXDRXD :接收端,:接收端, TXDTXD 发送端)发送端)•硬件硬件 SPISPI :支持程序下载:支持程序下载•中断系统:设有中断系统:设有 55 个中断源个中断源•堆栈:设在内堆栈:设在内 RAMRAM 单元中,通过堆栈指针单元中,通过堆栈指针 SPSP 确定堆栈位置确定堆栈位置•指令系统:指令系统: 111111 条指令。按功能分为数据传送、算术运算、逻条指令。按功能分为数据传送、算术运算、逻辑运算、控制转移和布尔操作辑运算、控制转移和布尔操作 55 大类。大类。

1.2 1.2 MCS-51 MCS-51 单片机内部方框图单片机内部方框图

时钟电路 4KROM程序存储器

256BRAM数据存储器

2X16 位定时 / 计数器

CPU处理器

64KB 总线扩展控制器

可编程 I/O端口 P0-3

可编程串行口

1.31.3 :: MCS-51MCS-51 单片机的引脚定义单片机的引脚定义MCS-51MCS-51 单片机有两种封装形式:单片机有两种封装形式:

a.40a.40 脚的双列直插脚的双列直插 DIPDIP 封装; 封装; b.44b.44 脚的脚的 PLCCPLCC 。。

11 ,,主电源引脚 主电源引脚 ::Vcc(+5V--- 40Vcc(+5V--- 40 脚脚 )) 和和 Vss(GND 20Vss(GND 20 脚脚 ););

22 ,,外接晶体引脚:外接晶体引脚: XTAL1XTAL1 (( 1919 脚)、脚)、 XTAL2XTAL2 (( 1818 脚)脚),,只要只要在这两脚之间接入一个晶体震荡器,单片机就可以以此晶体的频在这两脚之间接入一个晶体震荡器,单片机就可以以此晶体的频率开始工作。常用的晶体频率有率开始工作。常用的晶体频率有 0-24M0-24M ,,频率越高,单片机的频率越高,单片机的工作速度就越快,但单片机的功耗就要增加。工作速度就越快,但单片机的功耗就要增加。

33 ,,控制或与电源复用引脚:控制或与电源复用引脚: RST/VpdRST/Vpd 、、 ALE/PROGALE/PROG 、、 /PSEN/PSEN 和和VddVdd

RST/VpdRST/Vpd (( 99 脚):脚):在系统上电震荡器开始工作时, 在内部加在系统上电震荡器开始工作时, 在内部加在此引脚上有一个两个时钟周期的高电平使单片机复位。但为了在此引脚上有一个两个时钟周期的高电平使单片机复位。但为了使系统复位可靠,建议外加 一个上电复位电路,延长复位的时间。使系统复位可靠,建议外加 一个上电复位电路,延长复位的时间。当单片机掉点时,此引脚可以接入备用电源向单片机内部的当单片机掉点时,此引脚可以接入备用电源向单片机内部的 RARAMM 供电,以防止供电,以防止 RAMRAM 中的数据丢失。 中的数据丢失。 引脚图

在复位状态下:所有在复位状态下:所有 SFRSFR 的内容全变为“的内容全变为“ 0”0” ,, 端口输出“端口输出“ 1”1” 。。 RAMRAM 内容不变。内容不变。

MCS-51

RST

Vcc

MCS-51

RST

Vcc

1K

10Ω

t

V

T

延长上电复位时间的电路和 RST 端上电电压曲线

具有手动复位功能 的复位电路

R

C

ALE/PROGALE/PROG (( 3030 脚):脚):以一个不变的频率(系统时钟 以一个不变的频率(系统时钟 fosc/fosc/6 )6 ) 周期性输出正脉。 当单片机使用外部存储器时,此信号周期性输出正脉。 当单片机使用外部存储器时,此信号可作为低八位地址的锁存信。 对于可作为低八位地址的锁存信。 对于 EPROMEPROM 型的单片机型的单片机 ,,此脚还是用于写程序时,输入编程脉冲。此脚还是用于写程序时,输入编程脉冲。

/PSEN/PSEN (( 2929 脚):脚):外部程序程序存储器的选通信号。当单片外部程序程序存储器的选通信号。当单片机使用外部程序存储器时,此脚在一个机器周期内产生两次机使用外部程序存储器时,此脚在一个机器周期内产生两次负脉冲。注意,访问外部数据存储器时,此信号无效。负脉冲。注意,访问外部数据存储器时,此信号无效。

/EA / Vdd /EA / Vdd (( 3131 脚):脚):外部程序存储器的选择端控制端:当外部程序存储器的选择端控制端:当此脚加入“此脚加入“ 1”1” 电平是,单片机使用内部的程序存储器;当电平是,单片机使用内部的程序存储器;当EAEA 加入低电平时,系统只使用外部的程序存储器。加入低电平时,系统只使用外部的程序存储器。

但要特别注意:如果但要特别注意:如果 EA=1EA=1 既使用单片机内部的程序存既使用单片机内部的程序存储器时,如果程序计数器储器时,如果程序计数器 PCPC 的值超过的值超过 0FFFH0FFFH 时,单片机时,单片机将自动转向外部程序存储器将自动转向外部程序存储器 1000H1000H 开始的单元。开始的单元。

对于对于 EPROMEPROM 型的单片机,此脚还是用于写程序时,加型的单片机,此脚还是用于写程序时,加入入 2121 伏的编程电压。伏的编程电压。

引脚图

44 ,,并行输入输出端口引脚(并行输入输出端口引脚( P0-P3P0-P3 ))P0.0 - P0.7 P0P0.0 - P0.7 P0 端口线端口线 (39-32(39-32 脚脚 )) ::输出能力最强的端口,输出能力最强的端口,

可以带动可以带动 88 个个 TTLTTL 负载。驱动一个负载。驱动一个 MOSMOS 负载时,应接一个负载时,应接一个 110K0K 左右的上拉电阻。如果系统使用外接存储器时,该口还作左右的上拉电阻。如果系统使用外接存储器时,该口还作为地址(低八位)总线和数据总线,注意在这种情况下,为地址(低八位)总线和数据总线,注意在这种情况下, P0P0口就不能通用的口就不能通用的 I/OI/O 端口。端口。

P1.0 - P1.7 P1P1.0 - P1.7 P1 端口线端口线 (1 – 8(1 – 8 脚脚 )) ::负载能力为负载能力为 44 个个 TTLTTL

负载。负载。P2.0 – P2.7 P2P2.0 – P2.7 P2 端口线端口线 (21 – 28(21 – 28 脚脚 )) ::通用通用 I/OI/O 端口。端口。 除了做通用除了做通用 I/OI/O 端口外,当系统使用外接存储器时,该口还作端口外,当系统使用外接存储器时,该口还作

为地址(高八位)总线,在这种情况下,为地址(高八位)总线,在这种情况下, P0P0 口就不能通用的口就不能通用的I/OI/O 端口。负载能力为端口。负载能力为 44 个个 TTLTTL 。。

引脚图

P3.0 – P3.7 P3P3.0 – P3.7 P3 端口线 (端口线 ( 10 – 1710 – 17 脚):脚): P3P3 口除了做通用的口除了做通用的 I/OI/O 端口外,同时它还有第二端口外,同时它还有第二

功能),负载能力为功能),负载能力为 44 个个 TTLTTL 。。

口线口线 定义定义 说明说明 口线口线 定义定义 说明说明

P3.0P3.0 RXDRXD 串行数据输入口串行数据输入口 P3.4P3.4 T0T0 计数器0外部输入信号计数器0外部输入信号P3.1P3.1 TXDTXD 串行数据输出口串行数据输出口 P3.5P3.5 T1T1 计数器1外部输入信号计数器1外部输入信号

P3.2P3.2 INT0INT0 外部中断0输入口外部中断0输入口 P3.6P3.6 / WR/ WR 外部数据存储器写信号外部数据存储器写信号P3.3P3.3 INT1INT1 外部中断1输入口外部中断1输入口 P3.7P3.7 / RD/ RD 外部数据存储器读信号外部数据存储器读信号

P3 口第二功能表

引脚图

MCS-51MCS-51 单片机外型图(单片机外型图( DIPDIP 封装) 封装) MCS-51MCS-51 单片机的逻辑符号单片机的逻辑符号图图

VCCRSTXTAL1 P0 口XTAL2/EA/PSENALE

P1 口P3 口RXDTXD/INT0/INT1 P2 口T0T1/WR/RDGND

87C51EPROM 型

AT89C51

ATMELFLASH 型

返回上一次

1.4.0 MCS-511.4.0 MCS-51 单片机的存储器的配置特点单片机的存储器的配置特点 (89C(89C51)51)

在在 MCS-51MCS-51 单片机的内部集成了单片机的内部集成了 4K4K 的程序存储器的程序存储器和和 256B256B 的数据存储器,同时还可以使用片外的程的数据存储器,同时还可以使用片外的程序存储器和数据存储器,其扩展能力都是序存储器和数据存储器,其扩展能力都是 64K64K 。。

从物理结构的角度讲,从物理结构的角度讲, 5151 单片机的存储系统可以单片机的存储系统可以分为四个存储空间:既片内分为四个存储空间:既片内 ROMROM ,, RAMRAM 和片外和片外ROMROM 、、 RAMRAM 。。

从逻辑上讲(既用户编程的角度讲)从逻辑上讲(既用户编程的角度讲) 5151 单片机的单片机的存储系统又可分为三个存储空间。既片内存储系统又可分为三个存储空间。既片内 RAMRAM ,,片外片外 RAMRAM 和片内、外的程序存储器和片内、外的程序存储器 ROMROM 。。

从物理结构上单片机系统的存储器结构图从物理结构上单片机系统的存储器结构图(四个部分)(四个部分)

MCS-51单片机

片内ROM

4K

片内RAM256B

片外RAM64K

片外ROM64K

返回上一次

1.4.1 1.4.1 程序存储器程序存储器 (( 片内与片外片内与片外 ))1.1. 程序存储器是用来存放编好的程序、常数和表程序存储器是用来存放编好的程序、常数和表格的。格的。

2.2. 在在 MCS-51MCS-51 单片机中,当引脚单片机中,当引脚 EA=1EA=1 时,系统时,系统使用片内的使用片内的 4KROM4KROM来存储程序。来存储程序。 EA=0EA=0 时,时,系统使用片外的系统使用片外的 ROMROM 。。

3.3. 无论是使用片内还是使用片外的无论是使用片内还是使用片外的 ROMROM (既 (既 EAEA=1=1 或或 EA=0EA=0 ),其起始地址都是从),其起始地址都是从 0000H0000H 单元单元开始。开始。

4.4. 如果如果 EA=1EA=1 (使用片内的程序存储器时):(使用片内的程序存储器时): 程序从程序从 0000H0000H 开始执行。开始执行。 注意:在这种情况下,注意:在这种情况下,如果程序计数器的指针如果程序计数器的指针

PCPC 值超过值超过 0FFFH0FFFH (( 4K4K )时,)时,单片机就要自动的单片机就要自动的转向片外的转向片外的 ROMROM 存储器(尽管存储器(尽管 EA=1EA=1 ),且从片),且从片外外 ROMROM 的的 1000H1000H 单元开始执行程序。但单片机是单元开始执行程序。但单片机是无法使用片外无法使用片外 ROMROM 的的 0000H-0FFFH0000H-0FFFH 这这 4K4K 单元。单元。

本次实验所使用的 本次实验所使用的 P89C52RD2 P89C52RD2 单片机,其片内单片机,其片内即有 即有 64KB 64KB 程序存储器,已是全部程序存储空间,程序存储器,已是全部程序存储空间,该型单片机不会使用片外该型单片机不会使用片外 ROMROM ;但可片外;但可片外 RAMRAM 。。

MCS-51MCS-51 单片机片内、外程序存储器的使用示意单片机片内、外程序存储器的使用示意图图

0FFFH

0000H

0FFFH

0000H

FFFFH

1000H

EA=1 时, ROM 的使用 EA=0 时 ROM 的使用

片外程序存储器(最大 64K )

单片机内部程序存储器

( 4K )

程序存储器六个特殊的单元程序存储器六个特殊的单元

在程序存储器中,在程序存储器中,有六个单元有六个单元是具有特定功能。编是具有特定功能。编程者是不能随便使用的。程者是不能随便使用的。

0000H0000H 单元:单元:上电时,程序计数器上电时,程序计数器 PCPC 所指向的单元所指向的单元0003H0003H 单元:单元:外部中断外部中断 /INT0/INT0 的入口地址;的入口地址;000BH000BH 单元单元::定时器定时器 T0T0 的溢出中断入口地址;的溢出中断入口地址;0013H0013H 单元:单元:外部中断外部中断 /INT1/INT1 的入口地址;的入口地址;001BH001BH 单元:单元:定时器定时器 T1T1 的溢出中断入口地址;的溢出中断入口地址;0023H0023H 单元:单元:串行口接收、传送的中断入口地址。串行口接收、传送的中断入口地址。

1.4.2 1.4.2 内部数据存储器内部数据存储器 RAMRAM数据存储器无论在物理上还是逻辑上都分为两个地址空间,数据存储器无论在物理上还是逻辑上都分为两个地址空间,既一个内部和一个外部的数据存储空间。既一个内部和一个外部的数据存储空间。

访问访问内部数据存储单元内部数据存储单元时,使用时,使用 MOV MOV 指令;指令; 而访问而访问外部数据存储器外部数据存储器时,使用时,使用 MOVX MOVX 指令。指令。

内部数据存储器从功能上又将内部数据存储器从功能上又将 256B256B空间分为二个不同的空间分为二个不同的块: 块: 1,1, 低低 128B128B 的的 RAMRAM块;块;

2,2, 高高 128B128B 的的 SFR (Special Function RegisterSFR (Special Function Register )块。)块。在低在低 128B128B 的的 RAMRAM 存储单元中又可划分为:存储单元中又可划分为:工作寄存器工作寄存器区区、、可位寻址区可位寻址区、、通用存储数据的便签区通用存储数据的便签区。。高高 128B128B 的的专用寄存器区专用寄存器区中仅仅使用了中仅仅使用了 2121寄存器(寄存器( 5151 系系列),其它单元未定义不能使用。列),其它单元未定义不能使用。

存储结构图

MCS-51 MCS-51 片内 、片外 数据存储器示意图片内 、片外 数据存储器示意图

特殊功能寄存器SFR

通用数据存储器

80H7FH

00H

FFH

片内数据存储器 片外数据存储器256B个字节 64KB个字节

片外数据存储器64KB

0000H

FFFFH 注意:

1, 访问片内 RAM20H 存储单元;MOV A,20H

2, 访问片外 RAM 存储单元; MOV R0,#20hMOVX A,@R0

3,尽管片内与片外的 RAM 单元 的 00H-FFH 地址相重叠但由于指令的不同不会发生地址

混乱。

片内片内 RAMRAM 低 低 128B 128B 字节功能分配图字节功能分配图

位寻址区

3区

2区

1区

0区

便笺区

08H07H

00H

7FH

30H2FH

20H1FH

18H17H

10H0FH

四个工作寄存器区每个区中有 R0-R7

八个工作寄存器

位寻址区16 个单元 20H-2FH ,共有 128 可寻址位个位。位地址: 00H-7FH注意:位地址与字节地址的区别

通用的 RAM区地址: 30H-7FH

返回上一次

片内 片内 RAMRAM (( 20H-2FH20H-2FH)中的位寻址区结)中的位寻址区结构图构图

7F7F 7E7E 7D7D 7C7C 7B7B 7A7A 7979 7878

7777 7676 7575 7474 7373 7272 7171 7070

6F6F 6E6E 6D6D 6C6C 6B6B 6A6A 6969 6868

6767 6666 6565 6464 6363 6262 6161 6060

5F5F 5E5E 5D5D 5C5C 5B5B 5A5A 5959 5858

5757 5656 5555 5454 5353 5252 5151 5050

4F4F 4E4E 4D4D 4C4C 4B4B 4A4A 4949 4848

4747 4646 4545 4444 4343 4242 4141 4040

3F3F 3E3E 3D3D 3C3C 3B3B 3A3A 3939 3838

3737 2626 2525 2424 2323 2222 2121 2020

2F2F 2E2E 2D2D 2C2C 2B2B 2A2A 2929 2828

2727 2626 2525 2424 2323 2222 2121 2020

1F1F 1E1E 1D1D 1C1C 1B1B 1A1A 1919 1818

1717 1616 1515 1414 1313 1212 1111 1010

0F0F 0E0E 0D0D 0C0C 0B0B 0A0A 0909 0808

0707 0606 0505 0404 0303 0202 0101 0000

2FH

20H

字节地址

位寻址区内的地址是位寻址区内的地址是位地址。位地址。共有共有 00-7FH00-7FH (共(共 128128 个位);个位);

要区分字节地址和位地址这两个不同的地址概念:要区分字节地址和位地址这两个不同的地址概念: 从物理的角度,每一个字节地址内包含了从物理的角度,每一个字节地址内包含了 88 个位,既:个位,既: D7D7 ,, D6D6 ,, D5D5 ,, D4D4 ,, D3D3 ,, D2D2 ,, D1D1 ,, D0D0 在一般情况,我们提到的在一般情况,我们提到的 RAMRAM 地址都是字节地址。地址都是字节地址。

从逻辑的角度讲,字节地址和位地址是靠不同类型的指令来从逻辑的角度讲,字节地址和位地址是靠不同类型的指令来区分的。如:区分的。如:

MOV AMOV A , , 20h 20h ;将;将 RAMRAM 的的 2020 单元内容送累加器单元内容送累加器 AA ;; MOV C MOV C ,, 20h 20h ;将;将 RAMRAM 位寻址区中位寻址区中 20H20H 位送位送 CYCY 中。中。 在这二个例子中,第一条指令为在这二个例子中,第一条指令为字节传送指令字节传送指令,所以,所以 20H20H 为为字节地址;第二个例子中的指令为字节地址;第二个例子中的指令为位操作指令位操作指令,所以,所以 20H20H 为为位地址。有关详细内容将在第二章中描述。位地址。有关详细内容将在第二章中描述。

00区工作寄存器区结构图区工作寄存器区结构图

R7R7

R6R6

R5R5

R4R4

R3R3

R2R2

R1R1

R0R0

RAM 地址07H

06H

05H

04H

03H

02H

01H

00H

返回上一次

特殊功能寄存器特殊功能寄存器 SFRSFR

特殊功能寄存器特殊功能寄存器 SFR SFR (( Special Function RegisterSpecial Function Register ))

特殊用途寄存器的集合。用来设定单片机内部各个部特殊用途寄存器的集合。用来设定单片机内部各个部件的工作方式,存放相关部件的状态,定时器初值寄存器,件的工作方式,存放相关部件的状态,定时器初值寄存器,并行端口的锁存器等等。并行端口的锁存器等等。

尽管特殊功能寄存器与尽管特殊功能寄存器与 RAMRAM 在同一个单元中,但不在同一个单元中,但不能作为普通的能作为普通的 RAMRAM 存储单元来使用。只有在编程中根据存储单元来使用。只有在编程中根据需要,进行一些特定功能的设定,或者是从中查寻相关部需要,进行一些特定功能的设定,或者是从中查寻相关部件的状态时,才能进行读、写操作。如中断方式的设定、件的状态时,才能进行读、写操作。如中断方式的设定、定时器工作模式的设定,查询串行口发送或接收是否结束定时器工作模式的设定,查询串行口发送或接收是否结束等等。等等。

标识符标识符 名 称名 称 地 址地 址

ACCACC

BB

PSWPSW

SPSP

DPTRDPTR

P0P0

P1P1

P2P2

P3P3

IPIP

IEIE

TMODTMOD

TCONTCON

累加器累加器BB寄存器寄存器

程序状态字程序状态字堆栈指针堆栈指针

数据指针数据指针 (( 包括包括 DPH,DPL)DPH,DPL)

口口 00

口口 11

口口 22

口口 33

中断优先级控制寄存器中断优先级控制寄存器中断允许控制寄存器中断允许控制寄存器

定时定时 // 计数器方式控制寄存器计数器方式控制寄存器定时定时 // 计数器控制寄存器计数器控制寄存器

0E0H0E0H

0F0H0F0H

0D0H0D0H

81H81H

83H,82H83H,82H

80H80H

90H90H

0A0H0A0H

0B0H0B0H

0B8H0B8H

0A8H0A8H

89H89H

88H88H

特殊功能寄存器 特殊功能寄存器 SFR(SFR( 表一表一 ))

SFR(SFR(

表表二二))

标识符标识符 名 称名 称 地 址地 址

TH0TH0

TL0TL0

TH1TH1

TL1TL1

SCONSCON

SBUFSBUF

PCONPCON

定时定时 // 计数器计数器 00 初值寄存器高初值寄存器高 88位位

定时定时 // 计数器计数器 00 初值寄存器低初值寄存器低 88位位

定时定时 // 计数器计数器 11 初值寄存器高初值寄存器高 88位位

定时定时 // 计数器计数器 11 初值寄存器低初值寄存器低 88位位

串行口控制寄存器串行口控制寄存器串行口数据缓冲器串行口数据缓冲器 (( 接收接收 ,,发发

送送 ))

电源控制寄存器电源控制寄存器

8CH8CH

8AH8AH

8DH8DH

8BH8BH

98H98H

99H99H

97H97H

SFR高 128B

低 128B

0FFH

80H7FH

00H

特殊功能寄存器SFR 在片内 RAM

中的位置

注 : 表中黄色的单元为可按位寻址的字节

特殊功能寄存器特殊功能寄存器 SFRSFR 说明说明程序计数器程序计数器 PC: PC: 用来存放下一条要执行的指令地址用来存放下一条要执行的指令地址 ,, 长度为长度为1616 位位 ,, 所以寻址范围为所以寻址范围为 0-65535(64K).0-65535(64K). 在物理上是独立于在物理上是独立于 SFR.SFR.

累加器累加器 AA: : 最常用的专用寄存器最常用的专用寄存器 , , 大多数的指令操作数都来自大多数的指令操作数都来自累加器累加器 A.A. 所有的算术运算指令的运算结果都存放在所有的算术运算指令的运算结果都存放在 AA 中中 ..

BB 寄存器寄存器 ::乘除法指令使用的寄存器乘除法指令使用的寄存器 ..

数据指针数据指针 DPTR: DPTR: 一个一个 1616 位的寄存器位的寄存器 ..由高八位由高八位 DPHDPH 和低八和低八位位 DPLDPL构成构成 .DPTR.DPTR 主要用来存放片内主要用来存放片内 ROMROM 的地址和片外的地址和片外 RRAM,ROMAM,ROM 的地址的地址 .. 这样单片机可以通过间址的方式来访问片内这样单片机可以通过间址的方式来访问片内ROMROM 或片外的或片外的 RAM,ROMRAM,ROM 。。

例如例如 :: 片外片外 RAMRAM 的的 2000H2000H 单元中有一个数单元中有一个数 x,x, 试将其送到累加器试将其送到累加器AA 中中 ..

MOV DPTR,#2000h MOV DPTR,#2000h ; DPTR ; DPTR ←← 2000H 2000H

MOVX A,@DPTR MOVX A,@DPTR ; A ; A ←← x x

程序状态字程序状态字 PSW: PSW: 88位寄存器位寄存器 . . 表征程序执行的状态信息。表征程序执行的状态信息。

CY (PSW.7)CY (PSW.7)进位标志进位标志 : : 在加减法运算中在加减法运算中 ,,累加器累加器 AA 的最高位的最高位 A7A7有进位有进位 ,,则则 CY=1,CY=1,否则否则 CY=0.CY=0. 同理同理 ,, 在减法运算中在减法运算中 ,, 如果如果 A7A7有借位有借位 ,,则则 CY=1.CY=1.因此因此 CYCY往往作为无符号数运算是否有溢出往往作为无符号数运算是否有溢出的标志。的标志。

AC(PSW.6):AC(PSW.6):辅助进位位辅助进位位 : : 用来判断加减法运算时用来判断加减法运算时 ,, 低四位是否低四位是否向高四位进位或借位向高四位进位或借位 (( 既既 A3A3 的进位或借位的进位或借位 ).).往往用来判断压往往用来判断压缩的缩的 BCDBCD码的运算处理码的运算处理 ..

F0(PSW.5) F0(PSW.5) 用户标志位用户标志位 : : 完全由用户来定义和使用。完全由用户来定义和使用。RS1,RS0RS1,RS0 工作寄存器区选择位工作寄存器区选择位 ::确定工作寄存器确定工作寄存器 R0-R7R0-R7 在哪个在哪个区中区中 . . 单片机在上电或复位后单片机在上电或复位后 RS1RS1 、、 RS0=00RS0=00 。当需要人为。当需要人为的修改的修改 RS1,RS0RS1,RS0 的值来改变工作寄存器区的位置。的值来改变工作寄存器区的位置。

CYCY ACAC F0F0 RS1RS1 RS0RS0 OVOV -- PP

RAM分配图

OV(PSW.2) OV(PSW.2) 溢出标志位溢出标志位 : : 判断符号数加减法运算时是否有溢出判断符号数加减法运算时是否有溢出 . . OVOV 的结果可以用一个算法来表示的结果可以用一个算法来表示 : : OV=CPOV=CP异或异或 CSCS 其中其中 :CP:CP 为为 A7A7 的进位的进位 ,CS,CS 为为 A6A6 的进位的进位 OV=1OV=1 表明有溢出。表明有溢出。

P(PSW.0)P(PSW.0)奇偶标志位奇偶标志位 : : 用来标志累加器用来标志累加器 AA 中运算后中运算后 11 的个数。的个数。 当当 P=1P=1 时时 ,, 表明表明 AA 中中 11 的个数为奇数个的个数为奇数个 ,,反之为偶数个。反之为偶数个。

【【举例举例】】:有两个数:有两个数 0FH0FH 和和 F8HF8H ,试将两数相加,试将两数相加 MOV AMOV A ,, #0FH #0FH ;将立即数;将立即数 0f h 0f h 送累加器送累加器 AA ADD AADD A ,, #0F 8H #0F 8H ;; AA 的内容与立即数的内容与立即数 0f8h0f8h相加,结果送相加,结果送

AA

0000 1111 0000 1111 运算结果:运算结果: A=07HA=07H ,, CY=1CY=1 (既(既 CP=1CP=1 ),), + 1111 1000+ 1111 1000 CS=1 CS=1 ,, OV=0OV=0 (因为(因为 CP=1CP=1 ,, CS=1CS=1 )) CyCy→→1 0000 0111 AC=11 0000 0111 AC=1 ,, P=1P=1

如何根据如何根据 PSWPSW来分析运算结果是否正确?是否有溢出?来分析运算结果是否正确?是否有溢出?11 ,若数据为无符号数。既,若数据为无符号数。既 15+248=263=107H 15+248=263=107H 既既 CY=1CY=1 ,, A=07HA=07H 。。22 ,若数据为有符号数。既,若数据为有符号数。既 +15+15 加加 -8=+7=07H-8=+7=07H ,, OV=0OV=0 表明无溢出。表明无溢出。

SP SP 堆栈指针堆栈指针:: 88 位寄存器,用来位寄存器,用来指示堆栈的位置指示堆栈的位置 ,, 可由软件修改。在可由软件修改。在MCS-51MCS-51 单片机的设计中,片内单片机的设计中,片内 RARAMM区为堆栈的可用空间。上电或复区为堆栈的可用空间。上电或复位时,位时, SPSP被初始化为被初始化为 07H07H ,既堆,既堆栈底部被确定在栈底部被确定在 RAMRAM 的的 07H07H 单元。单元。

堆栈操作过程:堆栈操作过程: 进栈进栈 :: PUSH ACC PUSH ACC指令指令 (设 (设 SP=07HSP=07H ),), 11 ,, SP+1SP+1送送 SPSP ,此时,此时 SP=08HSP=08H ;; 22 ,, ACCACC送送 RAMRAM 的的 08H08H 单元;单元;出栈出栈 :: POP ACC POP ACC (设(设 SP=08HSP=08H ));; 11 ,将,将 RAM RAM 中中 08H08H 单元内容送单元内容送 AA ;; 22 ,, SP-1SP-1送送 SP SP ,此时,此时 SP=07HSP=07H 。。

07H

SP08H07H

RAM

x

累加器 A

堆栈操作示意图

并行端口并行端口 P0-P3P0-P3 :: SFRSFR 中的中的 P0-P3P0-P3 实际上就是实际上就是 I/OI/O 端口端口的数据锁存器。与的数据锁存器。与 RAMRAM 中的任意一个单元一样,中的任意一个单元一样, P0-P3P0-P3都有自己的都有自己的 RAMRAM 地址:地址: 80H80H 、、 90H90H 、、 A0HA0H 、、 B0HB0H 。所。所以,在以,在 5151 单片机中的输入、输出操作实际上就是个普通单片机中的输入、输出操作实际上就是个普通的的 RAMRAM 单元操作一样:如单元操作一样:如

输出指令 输出指令 MOV 80H,A MOV 80H,A ;将累加器中的数据送到;将累加器中的数据送到 P0P0 口输口输出出

输入指令 输入指令 MOV A,90H MOV A,90H ;将;将 P1P1 口的数据输入到累加器口的数据输入到累加器 AA中中

既既 MCS-51MCS-51 的指令系统中没有专用的输入、输出(的指令系统中没有专用的输入、输出( ININ 、、OUTOUT )指令,而是把)指令,而是把 P0-P3P0-P3 作为普通的内存单元来使用。作为普通的内存单元来使用。上面的第一个例子实际上就是上面的第一个例子实际上就是 MCS-51MCS-51 的输出指令的输出指令;同理;同理后者是后者是 MCS-51MCS-51 的输入指令的输入指令。。

串行数据缓冲器串行数据缓冲器 SBUFSBUF ::它是专门用来存放发送或接收的它是专门用来存放发送或接收的数据,实际上它是两个独立的寄存器。尽管在数据,实际上它是两个独立的寄存器。尽管在 SFRSFR 中的中的RAMRAM 地址只是地址只是 99H,99H, 但根据指令“发送”或“接收”两种但根据指令“发送”或“接收”两种不同的操作不同的操作 ,, 硬件会自动的区分硬件会自动的区分 ,, 将数据送如对应的缓冲将数据送如对应的缓冲单元。单元。

定时定时 // 计数器计数器 T0T0 、、 T1T1 ::无论是定时还是计数,对于无论是定时还是计数,对于 MCMCS-51S-51 单片机的定时单片机的定时 // 计数器来说,计数器来说,都是一个“计数器”在都是一个“计数器”在计数。计数。这个“计数器”是由两个这个“计数器”是由两个 88 位寄存器(高位和低位寄存器(高位和低位)构成的位)构成的 1616 位计数器,分别是位计数器,分别是 TH0TH0 、、 TL0TL0 (( T0T0 ));;TH1TH1 、、 TL1TL1 (( T1T1 ))。。 THTH 和和 TLTL 中的数据直接与“定时中的数据直接与“定时操作”或“计数操作”有关,因此在使用定时操作”或“计数操作”有关,因此在使用定时 // 计数器之计数器之前,要对它进行初始化,其中就要对前,要对它进行初始化,其中就要对 THTH 、、 TLTL赋初值。赋初值。如:如:

MOV 8CH,#01HMOV 8CH,#01H MOV 8AH,#20H MOV 8AH,#20H 大家试分析上面两条指令的作用。大家试分析上面两条指令的作用。 有关有关 SFRSFR 中其它寄存器的说明将相关的章节中作介绍。中其它寄存器的说明将相关的章节中作介绍。

TH0 TL0

1.4.3 1.4.3 外部数据存储器外部数据存储器在片内在片内 RAMRAM 不能满足需要时,就要外接不能满足需要时,就要外接 RAMRAM 。。 P0P0 、、 P1P1 作作为外部为外部 RAMRAM 的地址和数据总线。的地址和数据总线。

MCS-51MCS-51 对外部数据存储器的扩展能力为对外部数据存储器的扩展能力为 64KB64KB 。除了。除了硬件电路外,系统主要是靠专门的指令来访问外部数据存储硬件电路外,系统主要是靠专门的指令来访问外部数据存储器。 如:器。 如:

MOVMOV R0 R0 ,, #20H#20H ;;将外部将外部 RAMRAM 单元地址单元地址 20H20H 送送 R0R0 寄存器寄存器 MOVX AMOVX A ,, @R0@R0 ;;从外部从外部 RAM20HRAM20H 单元取数据到累加器单元取数据到累加器 AA 这里使用了这里使用了 R0R0 做间址寄存器做间址寄存器 ,, 所以寻址范围为所以寻址范围为 256KB256KB 。 。

同理同理 : : MOV DPTR,#2000HMOV DPTR,#2000H ;;将外部 将外部 RAM RAM 单元的地址的单元的地址的 20002000 送送 DPTRDPTR MOVX A MOVX A ,, @DPTR @DPTR ;;从外部 从外部 RAM 2000HRAM 2000H 单元中取数据到 单元中取数据到 AA 这里使用了这里使用了 1616 位的寄存器位的寄存器 DPTRDPTR ,所以寻址范围为,所以寻址范围为 64KB64KB 。。

1.6.1 P01.6.1 P0 口口 ::特点特点 :“:“ 通用数据通用数据 I/OI/O 端口端口”和“”和“地址地址、数据复用总线、数据复用总线””

端口端口 ..

11 ,在作为通用数据,在作为通用数据 I/OI/O 端口时端口时 ,,具有较强的驱动能具有较强的驱动能力力 (8(8个个 TTLTTL 负载负载 ),),与与 MOSMOS 负载连接时负载连接时 ,, 需要外接需要外接一个上拉电阻。一个上拉电阻。

22 ,作为,作为““地址、地址、数据复用总线数据复用总线”使用时”使用时 ,P0,P0 口首先口首先输出外部存储器的低八位地址输出外部存储器的低八位地址 ,, 然后再变为数据总然后再变为数据总线进行数据的输入或输出线进行数据的输入或输出 .. 此时,此时, P0P0 口不能再作为口不能再作为通用通用 I/OI/O 口。口。

P0P0 口的位结构图口的位结构图

D Q 锁存器CL /Q

P0.x引脚

Vcc地址 / 数据

1/0控制 (=0 时 )读锁存器

读引脚

内部总线

写锁存器MUX ( 控制 =0 时 )

硬件组成:1 ,一个输出锁存器( D型触发器);;22 ,二个,二个三态门(控制读引脚或读锁存器)三态门(控制读引脚或读锁存器);;33 ,与门和,与门和 MUXMUX 等元件组成的等元件组成的输出控制电路;输出控制电路;44 ,,一对场效应晶体管一对场效应晶体管 FETFET 构成的输出电路构成的输出电路 ..

Vcc

返回前一次

1 , P0 口的 I/O操作;2 , P0口的总线方式

1 , P0 口的 I/O操作(通用 I/O 端口)

在在 P0P0 口作为通用口作为通用 I/OI/O 端口时端口时 ,, 控制电路中的“控制”为控制电路中的“控制”为““ 0”0” 电平电平 ,, 多路开关多路开关 MUXMUX 接入下方的锁存器的接入下方的锁存器的 /Q/Q 端。端。

由于与门的一个输入端为“由于与门的一个输入端为“ 0”,0”, 所以它使上端的所以它使上端的 FETFET截止截止 .. 这就是这就是 P0P0 口在做口在做 I/OI/O 口时输出为“漏极开路”的结口时输出为“漏极开路”的结构原因构原因 ..

输出操作输出操作 :: 在执行以口为目标的指令时在执行以口为目标的指令时 ,, 数据送到锁存器数据送到锁存器的“的“ D”D” 端端 ,, 经“经“ /Q”/Q” 端送场效管应输出极端送场效管应输出极 .. 如如 :: 送“送“ 1”1” 时时 ,,/Q=“0”,/Q=“0”, 使下端的使下端的 FETFET截止截止 .. 这样出现输出极的两个这样出现输出极的两个 FETFET全部截止全部截止 .. 在这种情况下必须在端口线上外加上拉电阻在这种情况下必须在端口线上外加上拉电阻 ..这样在上拉电阻的作用下这样在上拉电阻的作用下 ,, 使端口为高电平使端口为高电平 .. 同理同理 ,, 若总线若总线向口送“向口送“ 0”0” 时时 ,, 锁存器的锁存器的 /Q=1,/Q=1, 使下端的使下端的 FETFET导通导通 (( 上面上面的的 FETFET仍然截止仍然截止 ),), 这样端口呈现“这样端口呈现“ 0”0” 电平电平 ..

返回结构图

输入操作(读引脚,读锁存,输入前写一)a,a, 读引脚读引脚 :: 读外部送到端口引脚的电平读外部送到端口引脚的电平 ,, 即即通常所说的输入操通常所说的输入操

作(如:作(如: MOV A,P0MOV A,P0 )) .. 此时此时 ,, 单片机控制“读引脚”的三单片机控制“读引脚”的三态门态门 ,, 使引脚处的外部电平经三态门送入内部总线使引脚处的外部电平经三态门送入内部总线 ..

b,b, 读锁存器读锁存器 :: 将进行将进行读锁存器并进行处理,最后再写回锁存器读锁存器并进行处理,最后再写回锁存器的操作称之为: “读—修改—写”操作。的操作称之为: “读—修改—写”操作。在这种情况下在这种情况下 , , 读入的数据不是来自引脚,而是端口内部的锁存器的内容。读入的数据不是来自引脚,而是端口内部的锁存器的内容。

当前面完成一次端口的输出后,要再将前面输入的状当前面完成一次端口的输出后,要再将前面输入的状态取回来,进行再处理,然后重新输出,在态取回来,进行再处理,然后重新输出,在 MCS-51MCS-51 的指令的指令系统中这种“读—修改—写”的操作有系统中这种“读—修改—写”的操作有 : : ORL ORL 、、 XRL XRL 、、 JJBC BC 、、 CPL CPL 、、 INC INC 、、 DEC DEC 、、 DJNZ DJNZ 、、 MOV Px,y MOV Px,y 、 、 CCLR Px,yLR Px,y 和和 SET Px,ySET Px,y 。。

如: 如: ORL P0,A ;ORL P0,A ;P0 ∨ A → P0P0 ∨ A → P0

返回结构图P0. X

cc ,输入时应先写“,输入时应先写“ 1”1” ::在端口电路中在端口电路中 ,, 可以发现一个问题可以发现一个问题 ::

端口在输入(读引脚)时端口在输入(读引脚)时 ,, 原来锁存器的状态可能要影响原来锁存器的状态可能要影响引脚电平的输入引脚电平的输入 .. 例如例如 :: 原来锁存器的状态为“原来锁存器的状态为“ 0”0” 态态 ,, 既既输出极的下端输出极的下端 FETFET 是饱和状态是饱和状态 ,, 这样如果外电路向引脚输这样如果外电路向引脚输入高电平时入高电平时 ,, 电路将不能正确读入电路将不能正确读入 .. 解决的方法就是让下端解决的方法就是让下端的的 FETFET截止截止 ,, 既事先向端口写一个“既事先向端口写一个“ 1”.1”.

请注意下面的一段程序:请注意下面的一段程序: MOV AMOV A ,, #0FFH #0FFH ;; 0FFH0FFH送累加器送累加器 AA

MOV P0MOV P0 ,, A A ;;向向 P0P0 口“写口“写 1”1”

MOV A,P0 MOV A,P0 ;;从从 P0P0 口输入数据到口输入数据到 AA

你能正确的分析出指令的操作吗?你能正确的分析出指令的操作吗?

返回结构图

2,P02,P0 口的总线方式(系统使用外存储器时)口的总线方式(系统使用外存储器时)

控制电路的“控制”控制电路的“控制” =1,=1, 此时与门打开此时与门打开 ,MUX,MUX 接接向“地址向“地址 // 数据”信号数据”信号 .. 在这种情况下在这种情况下 ,, 输出极的输出极的两个两个 FETFET都处于正常的工作状态 。都处于正常的工作状态 。访问外部存储器的指令访问外部存储器的指令 movxmovx 、、 movcmovc ,就是使,就是使用用 P0P0 口来输出外部存储器的低八位地址和输入、口来输出外部存储器的低八位地址和输入、输出存储器的数据。输出存储器的数据。在进行单片机的硬件系统的设计中,如果使用了在进行单片机的硬件系统的设计中,如果使用了外部存储器(或使用外部存储器(或使用 movxmovx 指令来访问外部接口指令来访问外部接口电路)时,电路)时, P0P0 口成为整个系统的地址口成为整个系统的地址 // 数据复用数据复用总线。换句话,总线。换句话, P0P0 口不能再作为通用的口不能再作为通用的 I/OI/O 端口端口的形式直接与外部连接。的形式直接与外部连接。

返回结构图

1,1, 做通用数据做通用数据 I/OI/O 端口时端口时 ,, 输出级上端的输出级上端的 FETFET 处于截止状态处于截止状态 ,, 所所以与以与 MOSMOS 器件连接时器件连接时 ,,必须接“上拉电阻”必须接“上拉电阻” ,,否则不能正确否则不能正确的输出高电平的输出高电平 ;;

2,2, 在输入操作前在输入操作前 ,, 为了保证输入正确,必须先向端口“写为了保证输入正确,必须先向端口“写 1”;1”;

3,3,““ 读引脚”与“读锁存器”是不同的两个数据通道。凡是“读读引脚”与“读锁存器”是不同的两个数据通道。凡是“读—修改—写” 的操作—修改—写” 的操作 ,CPU,CPU 读的都是端口锁存器中的数据。读的都是端口锁存器中的数据。

4,4, 为了提高电路的可靠性为了提高电路的可靠性 ,, 端口引脚不要直接与三极管一类的器端口引脚不要直接与三极管一类的器件直接连接件直接连接 ,, 应加隔离电路或与三极管之间加一个电阻应加隔离电路或与三极管之间加一个电阻 ..

5,5, 在总线方式时在总线方式时 ,P0,P0 口不能再做通用的口不能再做通用的 I/OI/O 端口。它分时输出地端口。它分时输出地址址、、数据总线的信息(此时引脚不用外接上拉电阻)。数据总线的信息(此时引脚不用外接上拉电阻)。

返回结构图

P0P0 口特点小结口特点小结 ::

特点:特点:单纯的通用单纯的通用 I/OI/O 端口端口 ,,负载能力为负载能力为 33 个个 TTLTTL 输入。与输入。与 PP00 口的区别在于内部具有上拉电阻,所以输出时不用外接上拉口的区别在于内部具有上拉电阻,所以输出时不用外接上拉

电阻。电阻。

1.6.2 1.6.2 P1P1 口的位结构图口的位结构图

D Q 锁存器CL /Q

P1.x引脚

Vcc读锁存器

读引脚

内部总线

写锁存器

内部上拉电阻

返回前一次

1.6.3 P21.6.3 P2 口 口 特点:特点: “通用数据“通用数据 I/OI/O 端口”和“高八位地址端口”和“高八位地址总线”端口总线”端口

D Q 锁存器CL /Q

P2.x引脚

Vcc地址 / 数据1/0

控制读锁存器

读引脚

内部总线

写锁存器

MUX ( 地址 / 数据 =0)

内部上拉电阻

返回上一次

与与 P0P0 口一样,口一样, P2P2 口在系统使用外部存储器时,做高八位的地址总口在系统使用外部存储器时,做高八位的地址总线。线。

应当注意的是:应当注意的是:仅使用仅使用外部数据存储器外部数据存储器时,时, P2P2 口分两种情况:口分两种情况: 11 ,仅仅使用,仅仅使用 256B256B 的外部的外部 RAMRAM 时,既使用时,既使用 movx a,@r0movx a,@r0指令访问指令访问

外部外部 RAMRAM ,此时用,此时用 88 位的寄存器位的寄存器 R0R0 或或 R1R1 作间址寄存器,这时作间址寄存器,这时 P2P2口无用,所以在这种情况下,口无用,所以在这种情况下, P2P2 口仍然可以做通用口仍然可以做通用 I/OI/O 端口。端口。

22 ,如果访问外部,如果访问外部 ROMROM 或使用大于或使用大于 256B256BRAMRAM 时,时, P2P2 口必须作为口必须作为外存储器的高八位地址总线。外存储器的高八位地址总线。

如:如: movx amovx a ,, @dptr @dptr ;访问外部数据存储器;访问外部数据存储器 movc amovc a ,, @a+dptr @a+dptr ;访问外部程序存储器;访问外部程序存储器 这里使用了这里使用了 1616 位的寄存器位的寄存器 DPTRDPTR

上一页

1.6.4 P31.6.4 P3 口 特点:口 特点:通用通用 I/OI/O 端口端口、多用途端口、多用途端口

在多用途情况下,在多用途情况下, P3P3 口分别作为串行口口分别作为串行口、外中断输入、外部计数输入和系、外中断输入、外部计数输入和系统扩展时使用的统扩展时使用的 WRWR 和和 RDRD 信号的端口。在这种情况下,锁存器信号的端口。在这种情况下,锁存器 QQ 端为端为““ 1”1” 电平以保证与门是打开的。电平以保证与门是打开的。在通用在通用 I/OI/O模式下,“替代输出功能”端为“模式下,“替代输出功能”端为“ 1”1” 电平,以保证与门打开。电平,以保证与门打开。

D Q 锁存器CL /Q

P3.x引脚

替代输出功能读锁存器

读引脚

内部总线

写锁存器

MUX ( 地址 / 数据 =0)

Vcc

1.6.5 1.6.5 并行端口在使用时应注意的几个问题并行端口在使用时应注意的几个问题

““ 拉电流”还是“灌电流”拉电流”还是“灌电流” -------- 与大电流负载与大电流负载的连接的连接

((我们以美国我们以美国 ATMELATMEL公司生产的公司生产的 AT8951AT8951 为例为例 ))

1,1, 使用灌电流的方式使用灌电流的方式与电流较大的负载直与电流较大的负载直接连接时接连接时 , , 端口可以吸收约端口可以吸收约 20mA20mA 的电流而保的电流而保证端口电平不高于证端口电平不高于 0.45V0.45V (见右上图)。(见右上图)。

2,2,采用拉电流方式采用拉电流方式连接负载时,连接负载时, AT89C51AT89C51所能提供“拉电流”仅仅为所能提供“拉电流”仅仅为 8080μμAA ,否则输出的,否则输出的高电平会急剧下降高电平会急剧下降 .. 如果我们采用右下图的方式,如果我们采用右下图的方式,向端口输出一个高电平去点亮向端口输出一个高电平去点亮 LEDLED ,会发现,,会发现,端口输出的电平不是“端口输出的电平不是“ 1”1”而是“而是“ 0”0”!!

当然,不是所有的单片机都是这样,当然,不是所有的单片机都是这样, PICPIC 单单片机就可以提供片机就可以提供 30mA30mA 的拉电流和灌电流。单的拉电流和灌电流。单对于大多数对于大多数 ICIC 电路,最好还是使用“灌电流”电路,最好还是使用“灌电流”去推动负载。去推动负载。

Px.y

Vdd

Px.y

Vdd

Vdd

灌电流方式输出” 0” 点亮 LED

拉电流方式输出高电平点亮 LED

单片机与继电器等大电流负载的接口单片机与继电器等大电流负载的接口

我们知道我们知道 :AT89C51:AT89C51 的端口可以的端口可以吸收约吸收约 20mA20mA 的电流的电流 .. 对于继电对于继电器等大于器等大于 20mA20mA 的负载的负载 ,, 单片机单片机可以采用右图的接法可以采用右图的接法 ,, 用一个三用一个三极管来承担负载所需的大电流极管来承担负载所需的大电流 ..

若于负载电流易造成干扰单片机若于负载电流易造成干扰单片机的环境的环境 ,, 应采用右下图”光电隔应采用右下图”光电隔离”的方式离”的方式 ..其中其中 ::

A A 、、 BB 两处没有两处没有 任何电的联系任何电的联系 ..

Px.y

J

VccVdd

负载

Vcc

Px.y

A B

1.7 1.7 MCS-51MCS-51 单片机的定时单片机的定时 // 计计数器数器

定时定时 // 计数器计数器工作方式与原理::

1.7.1 1.7.1 定时定时 // 计数器的计数器的四种工作模式

1.7.2 MCS-511.7.2 MCS-51 定时定时 // 计数器的计数器的控制和状态寄存器

1,1,模式0:: 既既 1313 位计数器模式位计数器模式

2,2,模式一 :: 既既 1616 位计数器模式位计数器模式

3,3,模式二 : : 自动重装初值模式自动重装初值模式

1,1, 模式控制寄存器模式控制寄存器 TMOD (SFR (SFR 的地址的地址 :89H):89H)

2,2, 控制寄存器 控制寄存器 TCON (SFR(SFR 地址地址 :88H):88H)

4,4,模式三:: 组合扩展模式 组合扩展模式

定时定时 // 计数器工作方式与原理计数器工作方式与原理 ::

定时定时 // 计数器是一种应用非常广泛的逻辑计数器是一种应用非常广泛的逻辑

电路,它可以完成两种不同的方式工作电路,它可以完成两种不同的方式工作 --------

““ 定时”、“计数”定时”、“计数”。。

定时定时 // 计数器工作方式与原理计数器工作方式与原理 ::1,1,定时定时 :: 产生一个标准的时间间隔产生一个标准的时间间隔 ;;如如 20mS,100m20mS,100m

SS 或或 1000mS1000mS等等 .. 单片机使用这种方式可以产生单片机使用这种方式可以产生一个符合某一要求的脉冲方波一个符合某一要求的脉冲方波 (( 如下图如下图 ))。。

2,2,计数计数 :: 对外部的事件对外部的事件 (( 脉冲脉冲 )) 进行统计进行统计 ..很明显外很明显外部事件的发生是随机的部事件的发生是随机的 ,,单片机不可能预知外部单片机不可能预知外部事件何时发生事件何时发生 ,,但可以进行统计但可以进行统计 ,,当达到所要求的当达到所要求的数值时数值时 ,,单片机进行相应的操作。单片机进行相应的操作。

20mS

40mS

33 ,,定时定时 // 计数器的工作原理:用一个简单的框图构造计数器的工作原理:用一个简单的框图构造它的模型 :它的模型 : NN 位计数器构成了电路的核心位计数器构成了电路的核心。定时。定时 ,,计数两种方式的区别在于计数器的脉冲来源计数两种方式的区别在于计数器的脉冲来源 ..初值寄初值寄存器是用来设定“存器是用来设定“定时定时 // 计数的具体参数”计数的具体参数”

(( 11 ):何时控制启动计数?):何时控制启动计数? (( 22 ):如何控制定时还是计数?):如何控制定时还是计数? (( 33 ):如何控制定时):如何控制定时 // 计数的长短?计数的长短?

N 位 +1 计数器 TF

N 位初值寄存器

系统内部时钟 fosc

启动控制 TR外部脉冲

定时 / 计数控制 C/T

计数器溢出中断信号

返回

计数脉冲CP

1.7.1 1.7.1 定时定时 // 计数器的四种工作模式计数器的四种工作模式

1,1, 模式模式 0:0:1313 位计数器模式。位计数器模式。 当计数器计满为全”当计数器计满为全” 1”1”时时 ,, 再来一个计数脉再来一个计数脉

冲时冲时 ,,就产生一个“溢出中断信号”就产生一个“溢出中断信号” TF1=1.TF1=1.

TH1 TL1

震荡器 1/12

(8 位 )( 低 5 位 )

TF1 中断

启动控制

T1 引脚

TR1

GATE

INT1

高三位弃用

C/T=0

C/T=1

13 位加 1 计数器

GATE=0GATE=0 时时 ,,TR1=1TR1=1 开始定时开始定时 // 计数计数 ;;

GATE=1GATE=1 时时 ((门控方式门控方式 ), TR=1), TR=1且且 INT1=1INT1=1 时时 ,, 开始工作开始工作 .. 此种此种方式主要用于测量加在方式主要用于测量加在 INT1INT1 脚上一个正脉冲的脉宽脚上一个正脉冲的脉宽 ..

TL1 TH1

震荡器 1/12

(8 位 ) (8 位 )

TF1 中断

启动控制

T1 引脚

TR1

GATE

INT1

C/T=0

C/T=1

2,2, 模式模式 1 :1 : 既既 1616位计数器模式位计数器模式 (( 以以 T1T1 为为例例 ).).

16 位加 1 计数器

返回上一次

由由 TL1TL1 做计数器做计数器 ,TH1,TH1 做初值寄存器做初值寄存器 . . 工作前工作前 TL1,TH1TL1,TH1分分别预置相同的初值别预置相同的初值 .. 计数器计数器 TL1TL1 工作时工作时 ,, 每当溢出产生中每当溢出产生中断的同时断的同时 , , 将将 TH1TH1 中的初值自动重装中的初值自动重装 .. 此模式主要用于做此模式主要用于做串行口波特率发生器使用串行口波特率发生器使用 ..

TL1(8 位 )

TH1(8 位 )

震荡器 1/12

TF1 中断

控制

T1 引脚

TR1

GATE

INT1

C/T=1

C/T=0

3,3, 模式模式 22 : : 自动重装初值模式自动重装初值模式

8 位加 1 计数器

8 位初值寄存器

在这种模式中在这种模式中 ,, 单片机将单片机将 T0T0 和和 T1T1重新进行“拆分、组合”重新进行“拆分、组合” ..将将 T0T0 变为由变为由 TH0,TL0TH0,TL0组成的两个独立的组成的两个独立的 88 位定时位定时 // 计数器计数器 ..

TL0

震荡器 1/12

TF0 中断

控制

T0 引脚

TR0

GATE

INT0

C/T=0

C/T=1

TH0 TF1 中断控制

TR1

Fosc/12

在模式 3 时的模式中定时器 T0 的结构图

4,4, 模式模式 33 组合扩展模式组合扩展模式

注意注意 ::模式模式 33 时时 T0T0 (( TH0,TL0TH0,TL0 )及)及 T1T1 的各自特点的各自特点 ::

1,1, TH0TH0 计数脉冲来自内部计数脉冲来自内部 fosc,fosc, 所以它只能处于”定时”方式所以它只能处于”定时”方式 ;;

2, TH02, TH0分别借用了定时器分别借用了定时器 T1T1 的的 TR1TR1 和和 TF1TF1来为自己工作来为自己工作 ,,使使 TH0TH0 能象能象 TL0TL0那样用那样用 TR1TR1启动定时启动定时 ,, 并用并用 TF1TF1来作为来作为 TTH0H0 的溢出中断的标志的溢出中断的标志 ;;

3,3,由于由于 T1T1缺少了启动控制信号缺少了启动控制信号 TR1TR1 和溢出中断标志和溢出中断标志 TR1,TR1,那那么在模式么在模式 33 时时 ,T1,T1 是如何工作? 是如何工作?

没有溢出中断标志没有溢出中断标志 TF1,TF1,则则 T1T1 就不用中断方式工作就不用中断方式工作 (( 实际实际上连查询也不行上连查询也不行 ););没有启动控制信号没有启动控制信号 TR1,TR1, 可以让它在模式可以让它在模式33 之前就开始工作之前就开始工作 ,, 并且让它事先设定为自动重装模式并且让它事先设定为自动重装模式 ..

4, 4, 模式模式 33 就是将单片机原有的就是将单片机原有的 T0,T1T0,T1 两个计数器变成三个独两个计数器变成三个独立的计数器立的计数器 ,,其中其中 T1T1 要事先设定为模式要事先设定为模式 2(2( 串行口的波特率串行口的波特率发生器发生器 )) 并启动起来。并启动起来。

返回结构图

在模式在模式 33 时时 T0,T1T0,T1 的电路结构图的电路结构图

TL0 八位定时 / 计数器

TH0 八位定时器

T1(TL1,TH1) 自动重装模式

TF0

TF1

将 T0分解为两个计数器TL0 和 TH0, 其中 TH0借

用了 T1 的 TR1 和 TF1

T1已无 TR1,TF1 功能 ,建议 T1 做波特率发生器

TH0,TL0 和 T1三个计数器返回结构图

定时定时 // 计数器计数器 44 种模式比较种模式比较

模 式模 式 计数模计数模 M M 最大定时时间 最大定时时间 TmaxTmax

模式模式 00 1313 位位 Tmax=8192*1 μЅ =8.192ms

模式模式 11 1616 位位 Tmax=65536* 1μЅ=65.536ms

模式模式 22 ,,33

88 位位 Tmax=256*1 μЅ=0.256ms

模 式模 式 计数模计数模 M M 最大计数值最大计数值模式模式 00 1313 位位 Tmax=8192

模式模式 11 1616 位位 Tmax=65536

模式模式 22 ,,33

88 位位 Tmax=256

T=(M-TC)×t 其中 ,T: 定时时间, M: 计数器的模, TC: 计数初值,

t: 计数器计数脉冲的周期( t = fosc/12) 。

1.7.2 MCS-511.7.2 MCS-51 定时定时 // 计数器的控制和状态寄存计数器的控制和状态寄存器器

GATE GATE 选通门选通门 :GATE=0:GATE=0 时时 ,, 只要只要 TR=1,TR=1, 计数器就开始工计数器就开始工作作 . GATE=1. GATE=1 时时 ,, 只有只有 INTINT 脚和脚和 TRTR 同时为“同时为“ 1”1” 时时 ,, 计数计数器才开始工作器才开始工作 .. 主要用于测量主要用于测量 INTINT 脚上高电平脉冲的宽度脚上高电平脉冲的宽度 ..

C/T C/T 计数计数、、定时方式选择位定时方式选择位 ::C/T=0C/T=0 时时 ,, 计数方式计数方式 .. 既计数既计数器的计数脉冲来自器的计数脉冲来自 T0T0 或或 T1T1 引脚的外部事件引脚的外部事件 .C/T=1.C/T=1 时时 ::定时方式定时方式 ,, 计数脉冲来自内部震荡频率计数脉冲来自内部震荡频率 foscfosc 的的 1212分频分频 ..

M1 M1 、、 M0 M0 模式选择模式选择 :: 分别对应四种模式分别对应四种模式 ..

GATEGATE C/TC/T M1M1 M0M0 GATEGATE C/TC/T M1M1 M0M0

定时 / 计数器 1 定时 / 计数器 0

1,1, 模式控制寄存器模式控制寄存器 TMOD (SFRTMOD (SFR 的地址的地址 :89H):89H)

结构图

TF1,TF0 TF1,TF0 定时器定时器 T1,T0T1,T0 的溢出标志的溢出标志 :: 计数器溢出时硬件自计数器溢出时硬件自动置位即动置位即 TF=1,TF=1, 进入中断后再由硬件自动清除进入中断后再由硬件自动清除 ;;

TR1.TR0 TR1.TR0 计数器计数器 T1,T0T1,T0 的控制位的控制位 ::由软件置位由软件置位 (( 计数器开计数器开始工作始工作 )) 或清零或清零 (( 计数器停止工作计数器停止工作 ).).

IE1,IE0 IE1,IE0 外部中断外部中断 INT1,INT0INT1,INT0 的请求标志的请求标志 :: 当单片机检测当单片机检测到到 INTINT 引脚上有下降沿时引脚上有下降沿时 ,IE=1,IE=1 申请中断申请中断 ..进入中断服务进入中断服务程序时程序时 ,,硬件自动清除硬件自动清除 IEIE标志标志 ..

IT1,IT0 IT1,IT0 外中断触发类型控制外中断触发类型控制 ::IT=1IT=1 时时 ,, 外中断信号的下降外中断信号的下降沿出发沿出发 IEIE标志标志 ,IT=0,IT=0 时时 ,, 外中断信号的低电平引发外中断信号的低电平引发 IEIE标志标志 ..

((关于中断部分将在后面相关章节中再做详细介绍关于中断部分将在后面相关章节中再做详细介绍 ))

TF1TF1 TR1TR1 TF0TF0 TR0TR0 IE1IE1 IT1IT1 IE0IE0 IT0IT0

2,2,控制寄存器控制寄存器 TCON (SFRTCON (SFR 地址地址 :88H):88H)

返回前一次

1.8 MCS-511.8 MCS-51 单片机的串行接口单片机的串行接口单片机系统中的串行接口及特点串行通讯应用示意图关于串行通讯中的基本概念

1.8.1 1.8.1 数据缓冲寄存器数据缓冲寄存器 SBUF1.8.2 1.8.2 串行口控制寄存器串行口控制寄存器 SCON

1.8.3 1.8.3 串行口的串行口的模式0

模式模式 0 0 电路框图模式模式 00 的的工作原理(发送)(发送)

串行口模式串行口模式 00 的的时序信号(发送)(发送)

模式模式 00 的工作原理的工作原理(接收)

模式模式 00 的的时序信号(接收)

1.8.5 1.8.5 串行口模式串行口模式 22 、、 33

1.8.5.1 1.8.5.1 模式模式 22 、、 33 的应用之一:的应用之一:带奇偶校验位的数据传带奇偶校验位的数据传送送1.8.5.2 1.8.5.2 模式模式 22 、、 33 的应用之二:的应用之二:多机通讯多机通讯

1.8.5.3 1.8.5.3 模式模式 22 、、 33 使用时要注意的问题使用时要注意的问题

1.8.61.8.6 波特率及定时器波特率及定时器 T1T1 的设定的设定

串行口模式串行口模式 11 时数据帧格式及接收采样示意图时数据帧格式及接收采样示意图

1.8.41.8.4 串行口模式串行口模式 11

第八节目录二第八节目录二

返回上一页

单片机系统中的串行接口既特点单片机系统中的串行接口既特点串行口的设计使串行口的设计使 MCS-51MCS-51 单片机的功单片机的功能能

大大增加大大增加 .. 可以用串行通讯的方式实现可以用串行通讯的方式实现单片机与单片机或者是单片机与微机单片机与单片机或者是单片机与微机等设备之间的数据交换等设备之间的数据交换 ..

串行通讯电路简单串行通讯电路简单 ,, 成本低成本低 ,,可以实可以实现远距离的数据传输。缺点是传输速现远距离的数据传输。缺点是传输速度低于并行数据传输。度低于并行数据传输。

在一个嵌入式系统中在一个嵌入式系统中 ,, 往往采用多单往往采用多单片机构成一个完整的控制系统片机构成一个完整的控制系统 ,,它们它们之间以串行通信的方式进行数据交之间以串行通信的方式进行数据交换换 ------多机通讯多机通讯 (( 如图如图 ).).

从机

从机

从机

从机

主机

串行通讯应用示意图串行通讯应用示意图TXDRXD

RXDTXD

TXDRXD

RXDTXD

RS-232或 485

RS-232或 485

TXDRXD RS-232

PC 机COM1,COM2

单片机甲、、乙之间近距离通讯

单片机甲乙两地之间远距离通讯

单片机与 PC 机之间的数据通讯返回前一次

关于串行通讯中的基本概念关于串行通讯中的基本概念 ::字符帧字符帧 ::也称数据帧也称数据帧 ,,它是由“起始位”“数据位”它是由“起始位”“数据位”

和“停止位”构成和“停止位”构成 (( 如下图所示如下图所示 ))。。波特率波特率 ::每秒钟传输二进制数据的个数每秒钟传输二进制数据的个数 ..波特率波特率

使用的单位是使用的单位是 ::bpsbps(bit per scond),(bit per scond), 既 位既 位 //秒。秒。异步通讯异步通讯 :: 数据是以数据是以字符字符或或字节字节为单位组成字符帧传送的为单位组成字符帧传送的 ..数据是从发送端一帧一帧的发送数据是从发送端一帧一帧的发送 ,,通过传输线为接收端一通过传输线为接收端一帧一帧的接收帧一帧的接收 ..发送与接收相互独立发送与接收相互独立 ,,互不同步。互不同步。

DD00

DD11

DD22

DD33

DD44

DD55

DD66

DD77

起始位 停止位0 1

一个字符帧的格式

1.8.1 1.8.1 数据缓冲寄存器 数据缓冲寄存器 SBUSBUFF

SBUFSBUF 是用来存放串行口发送和接收数据的寄存器是用来存放串行口发送和接收数据的寄存器 ,, 在在 SSFRFR 的地址为的地址为 99H.99H. 在物理上它对应两个不同的单元在物理上它对应两个不同的单元 :: 发发送寄存器和接收寄存器。送寄存器和接收寄存器。

CPUCPU 写写 SBUFSBUF 就是就是开始发送数据开始发送数据(( MOV SBUF,AMOV SBUF,A )) ;; CPUCPU 读读 SBUFSBUF 就是就是接收数据到接收数据到 A A (( MOV A,SBUFMOV A,SBUF )。)。

由于发送由于发送 SBUFSBUF 与接收的与接收的 SBUFSBUF 是两个不同的逻辑部件是两个不同的逻辑部件 ,,所以在硬件设计上保证了所以在硬件设计上保证了 5151 单片机串行口是一个可以同单片机串行口是一个可以同时发送与接收的时发送与接收的”全双工””全双工”接口。接口。

1.8.2 1.8.2 串行口控制寄存器串行口控制寄存器 SCON SCON 地址地址 :98H:98H

SM0 SM1SM0 SM1: : 串行口操作模式选择位串行口操作模式选择位 .. 可以确定串行口的可以确定串行口的四种模式之一四种模式之一 (( 如下表如下表 ););

SM0SM0 SM1SM1 SM2SM2 RENREN TB8TB8 RB8RB8 TITI RIRI

SM0 SM1SM0 SM1 模式模式 功 能功 能 波特率波特率 0 00 0 00 同步移位寄存器模式同步移位寄存器模式 Fosc/12Fosc/12

0 10 1 11 88 位异步通信位异步通信 UARTUART 可变可变 1 01 0 22 99 位异步通信位异步通信 UARTUART Fosc/64Fosc/64 或或 /3/3

22

1 11 1 33 99 位异步通信位异步通信 UARTUART 可变可变

返回前一次

SM2SM2

RIRI ::完成一帧数据接收的完成一帧数据接收的标志标志 ,,原始应清零原始应清零,,接收完成接收完成 RI=1RI=1 并并申请中断申请中断 ;;

TITI ::完成一帧数据发送的完成一帧数据发送的标志标志 ,,原始应清零原始应清零,,发送完成发送完成 TI=1TI=1 同同时申请中断时申请中断 ;;

RB8RB8:: 在在 99 位数据传送的模式位数据传送的模式 22 、、 33 时时 ,, 接收到的接收到的第第 99 位数据位数据 ;;

TB8TB8:: 在在 99 位数据传送的模式位数据传送的模式 22 、、 33 时时 ,, 将要发送的将要发送的第第 99 位数据位数据 ;;

RENREN::允许接收位允许接收位 ,REN=1,REN=1 时允许接收时允许接收 ..由软件置位或清零由软件置位或清零 ;;

返回前一次

SM0SM0 SM1SM1 SM2SM2 RENREN TB8TB8 RB8RB8 TITI RIRI

SM2SM2 : :多机通信使能位多机通信使能位 .. 11 ,,模式模式 00 、、 11 时时 ::

SM2SM2 不用,应设为不用,应设为 00 。时。时 RIRI 才能被正常激活并引发中断才能被正常激活并引发中断 ;; 22 ,,模式模式 22 、、 33 时时 ::

若若 SM2=0SM2=0 时,无论时,无论 RB8RB8 如何,如何, RIRI都能被激活(都能被激活( RI=1RI=1 )。)。 但是但是 RI=1RI=1 并不能引发中断!所以只能用查询的方式接收并不能引发中断!所以只能用查询的方式接收 数据。 数据。 若若 SM2=1SM2=1,,收到的第收到的第 99 位位 (RB8)=0(RB8)=0 时时 ,,则则 RIRI 不会被激活;不会被激活;若若 SM2=1SM2=1且且 RB8=1RB8=1 时时 ,RI,RI才能被激活才能被激活 =1=1 并引发中断。并引发中断。

SM0SM0 SM1SM1 SM2SM2 RENREN TB8TB8 RB8RB8 TITI RIRI

返回上一页

如何使用如何使用 RIRI,, TITI 标志(中断和查询)标志(中断和查询) CPUCPU与串行口之间不是同步工作的,两者之间的数据交换与串行口之间不是同步工作的,两者之间的数据交换

通过通过 SBUFSBUF,, 何时交换必须借助于标志信号进行。何时交换必须借助于标志信号进行。

RIRI(( SCON.0)SCON.0):接收完一帧数据的标志。:接收完一帧数据的标志。 如果系统中断是开放的,则如果系统中断是开放的,则 RI=1RI=1 时会自动引发中断。用时会自动引发中断。用户可以通过中断服务程序将户可以通过中断服务程序将 SBUFSBUF中的数据取出送累加器中的数据取出送累加器AA 。 。

MOV A,SBUFMOV A,SBUF 。也可以使用查询的方式对。也可以使用查询的方式对 RIRI 进行检测,进行检测,如果如果 RI=1RI=1则执行:则执行: MOV A,SBUFMOV A,SBUF 。。

TI TI (( SCON.1):SCON.1): 发送完一帧数据标志。发送完一帧数据标志。 如果系统中断是开放的,则如果系统中断是开放的,则 TITI 会自动引发中断。用户可会自动引发中断。用户可

以通过中断服务程序向以通过中断服务程序向 SBUFSBUF输送下一个数据:输送下一个数据: MOVSBUF, AMOVSBUF, A 。。也可以使用查询的方式对也可以使用查询的方式对 TITI 进行检测,如进行检测,如

果果 TI=1TI=1则执行则执行: : MOV SBUF , AMOV SBUF , A 。。

使用查询使用查询 RIRI、、 TITI 标志方式进行发送与接收标志方式进行发送与接收 NN 个数个数据据

CLR SCON .TI

数据送累加器 A修改数据区指针

mov sbuf,a

TI=1?

N 个数据发送完?YES NO

YESNO

发送数据的程序框图

SETB SCON .REN

mov a , sbuf

RI=1?

N 个数据接收完?YES

NO

YES

NO

CLR SCON .RI

A送数据区修改数据指针

返回本节目录一

接收数据程序框图

1.8.3 1.8.3 串行口的模式串行口的模式 00特点特点 :: 串行口做同步移位寄存器用串行口做同步移位寄存器用 ,, 其波特率为 其波特率为 fosc/1fosc/12.2. 在这种模式下在这种模式下 RXD(P3.0)RXD(P3.0)做数据口做数据口 ;TXD(P3.1);TXD(P3.1)做移做移位脉冲输出端位脉冲输出端 .. 在移位过程中在移位过程中 ,, 先移数据的低位先移数据的低位 .. 注意注意 ::移位脉冲的频率就是模式移位脉冲的频率就是模式 00 的波特率的波特率 ..

模式模式 00 的主要功能是的主要功能是 :: 可以使用一个串行口来扩展出可以使用一个串行口来扩展出 88位、位、 1616位等并行口位等并行口 ,, 且理论上可以扩展且理论上可以扩展 n*8n*8位的并行位的并行口口 ..

MCS-51

RXDTXD

Data 外部移位寄存器cp

移位脉冲

串行数据

并行的数据 (8 位 )

模式模式 0 0 电路框图电路框图51 内部总线

SBUF

零检测器

移位时钟

START SHIFT 发送控制器TXCLOCK TI SEND

D S QCL

START RI RECEIVERX 接收控制器 SHIFTCLOCK 1 1 1 1 1 1 1 0

输入移位寄存器

SBUF

51 内部总线

读 SBUF

写 SBUF

S6

串行口中断

P3.0RXD

P3.1TXD

装载 SBUF

REN/RI

返回前一次

P3.0RXD

MOV SBUF,A

1

S6P2

串行口模式串行口模式 00 的时序信号(发送)的时序信号(发送)S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6

写 SBUF

SEND

D1D0 D2 D3 D4 D5 D6 D7RXD 端数据

SHIFT

TXD 端同步脉冲

TI 中断标志

mov sbuf,a指令送发送到结束的 10 个机器周期

返回电路图

模式模式 00 的工作原理的工作原理 ((发发送)送)单片机执行单片机执行 mov sbuf,amov sbuf,a指令的指令的 S6P2S6P2 时时 ,, 出现“出现“写写 sbufsbuf ” ” 信号:信号:

11 ,打开总线三态门使累加器中的数据送到,打开总线三态门使累加器中的数据送到 SBUFSBUF 中;中;22 ,使,使 DD 型触发器置一型触发器置一 , , 触发器的输出构成了触发器的输出构成了 SBUFSBUF 的第的第 99 位;位;33 ,启动“发送控制器”开始发送。,启动“发送控制器”开始发送。

在“写在“写 SBUFSBUF 信号”有效相隔一个机器周期后信号”有效相隔一个机器周期后 ,“,“发送控制器”发送控制器”的的 SEND=1SEND=1 使使 RXDRXD,,TXDTXD 端的与门打开端的与门打开 ,, 使数据和移位脉冲输使数据和移位脉冲输出。在出。在 TXDTXD 端,每一个机器周期中发出一个同步脉冲端,每一个机器周期中发出一个同步脉冲 ,, 同时在同时在SEND=1SEND=1 期间期间 ,,每一个每一个 S6P2S6P2 时控制器发出一个时控制器发出一个 SHIFTSHIFT移位信移位信号将号将 SBUFSBUF 中的数据右移一次中的数据右移一次 (( 同时同时 DD 型触发器清零型触发器清零 )) 。这样。这样 ::

每当每当 SBUFSBUF中的数据右移中的数据右移 ((发送发送 ))一位时一位时 ,SBUF,SBUF的左端便移入的左端便移入11 个“个“ 0”0”。。当当 SBIUFSBIUF 中的数据右移中的数据右移 77 次后,检零器的次后,检零器的 77 个输入端全为个输入端全为““ 0”0” ,向控制器发出一个信号:通知控制器作最后一次移位,,向控制器发出一个信号:通知控制器作最后一次移位,然后控制器的然后控制器的 SEND=0SEND=0停止发送数据和同步信号,停止发送数据和同步信号, TITI被置位。被置位。

返回电路图

模式模式 00 的工作原理的工作原理 (( 接接收收 ))

在满足在满足 REN=1REN=1且且 RI=0RI=0 的条件下的条件下(实际上是一条写(实际上是一条写 SCONSCON指令),就会引发一次接收过程。在下一个机器周期的指令),就会引发一次接收过程。在下一个机器周期的 S6S6P2P2 时刻,接收控制器将时刻,接收控制器将 1111111011111110 写入移位寄存器。在下写入移位寄存器。在下一个周期的一个周期的 S1P1S1P1 使使 RECEIVE=1RECEIVE=1从而使从而使 TXDTXD 端的与门打端的与门打开。开。

同发送的过程类似:在后面的每一个机器周期从同发送的过程类似:在后面的每一个机器周期从 TXDTXD 端发端发出同步移位脉冲,在每一个出同步移位脉冲,在每一个 S5P2S5P2 时刻对时刻对 RXDRXD 线进行采样。线进行采样。在在 S6P2S6P2 时刻,控制器对寄存器进行移位,每左移一次右时刻,控制器对寄存器进行移位,每左移一次右端就补进一位由端就补进一位由 RXDRXD 端输入的数据。端输入的数据。

当从当从 RXDRXD 端输入端输入 77 位数据时,开始最右端的“位数据时,开始最右端的“ 0”0”被移到被移到寄存器的最左端,寄存器向控制器发信号,通知控制器做寄存器的最左端,寄存器向控制器发信号,通知控制器做最后一次接收,并将完整的最后一次接收,并将完整的 88 位数据装入位数据装入 SBUFSBUF 中。最后中。最后清清 RECEIVERECEIVE ,, SCONSCON 中的中的 RIRI 置位,向置位,向 CPUCPU发中断申请。发中断申请。返回电路图

模式模式 00 的时序信号(接收)的时序信号(接收)S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6 S1~S6S1~S6

写 SCON ( RI=0 )

RECEIVE

SHIFT

RI

对 RXD采样

TXD 同步脉冲

RI 中断标志

返回电路图

1.8.41.8.4 串行口模式串行口模式 11特点特点 :10:10 位传输格式 位传输格式 (1(1 个起始位个起始位 +8+8 个数据位个数据位 +1+1 个停止位个停止位 ););

波特率波特率 :: 可变波特率可变波特率 ,,由定时器由定时器 T1T1 的溢出率来确定的溢出率来确定 ,, 所以在所以在此种模式下此种模式下 ,,首先要对首先要对 T1T1进行初始化以确定串行口的波特率;进行初始化以确定串行口的波特率;发送操作:在发送操作:在 TI=0TI=0 ,执行,执行 mov sbuf,a mov sbuf,a 指令后从指令后从 TXDTXD 端开端开始发送数据。当发送完始发送数据。当发送完 88 位数据后自动的添加一个高电平的位数据后自动的添加一个高电平的停止位,并将停止位,并将 TITI 置位。置位。接收操作:在接收操作:在 REN=1REN=1且且 RI=0RI=0 的条件下进行。串行口的接收的条件下进行。串行口的接收控制器对控制器对 RXDRXD 线进行采样,其采样频率是接收时钟的线进行采样,其采样频率是接收时钟的 1616倍。倍。当连续当连续 88 次采集到次采集到 RXDRXD 线上为低电平时,检测电路便认定线上为低电平时,检测电路便认定RXDRXD 线上有了“起始位”,在此后,便开始在每次第线上有了“起始位”,在此后,便开始在每次第 7 7 、 、 8 8 、、 99三个脉冲时进行三个脉冲时进行 RXDRXD采样,采取“三中取二”的原采样,采取“三中取二”的原则来确定接收的数据(如图所示)。则来确定接收的数据(如图所示)。当接收到停止位时,必须满足:当接收到停止位时,必须满足: RI=0RI=0且且 SM2=0SM2=0 ,才能把接,才能把接收的数据送到收的数据送到 SBUFSBUF 中(停止位送中(停止位送 SCONSCON 的的 RB8RB8 中,并使中,并使RI=1RI=1 ),否则数据丢失。),否则数据丢失。

串行口模式串行口模式 11 时数据帧格式及接收采样示意图时数据帧格式及接收采样示意图

D0D0 D1D1 D2D2 D3D3 D4D4 D5D5 D6D6 D7D7

起始位 8 位数据 停止位

对 RXD线的数据以 16倍速度采样

当连续 8 次采集到低电平时,便确认起始位到来

在每个第 7,8,9 个脉冲对 RXD采样并采用“以三取二”来确定采集的数据

返回本节目录二

7.8.9

1.8.5 1.8.5 串行口模式串行口模式 22 、、 33特点特点 ::模式模式 22 、、 33都是都是 1111位传输格式 位传输格式 ((11 个起始位个起始位 +9+9个数据位个数据位+1+1 个停止位个停止位 )),不同处是波特率,不同处是波特率 ;;

波特率波特率 : : 模式模式 22 :固定为:固定为 fosc/64fosc/64 或或 fosc/32(fosc/32( 具体由具体由 PCONPCON 中中的 的 SMODSMOD位来确定)。位来确定)。

模式模式 33 :由定时器:由定时器 T1T1 的溢出波特率来确定。的溢出波特率来确定。模式模式 22 、、 33 的的发送过程发送过程类似于模式类似于模式 11 ,唯一的区别在于,唯一的区别在于数据帧数据帧中数据是中数据是 99 位。这样,在发送位。这样,在发送一帧数据一帧数据时,时, CPUCPU除了要把除了要把 88位位数据送数据送 SBUFSBUF外(外( mov sbuf,a),mov sbuf,a),还要把第还要把第 99位数据送到位数据送到 SCON.SCON.TB8TB8中中

set scon.tb8set scon.tb8 或:或: clr scon.tb8 clr scon.tb8 但注意要先设定好但注意要先设定好 scon.tb8scon.tb8,然后再向,然后再向 SBSBUFUF 送数,因为送数,因为 mov sbuf,amov sbuf,a指令一执行,串行口就开始发送。 指令一执行,串行口就开始发送。 例如:例如:

set scon.tb8 set scon.tb8 或: 或: clr scon.tb8 clr scon.tb8 mov sbuf,a mov sbuf,a mov sbuf,a mov sbuf,a

模式模式 22 、、 33 的接收过程类似于模式的接收过程类似于模式 11 ,不同的是:模式,不同的是:模式 11 时,时,SCONSCON 中的中的 RB8RB8是接收到的停止位(“是接收到的停止位(“ 1”1”);而模式);而模式 22 、、33 时,时, RB8RB8是接收到的第是接收到的第 99位。位。

在模式在模式 11 ,接收操作只有在,接收操作只有在 RI=0,RI=0, 且且 REN=1REN=1 时数据才能接时数据才能接收。而模式收。而模式 22 、、 33 的接收条件是: 的接收条件是: aa ,, RI=0RI=0且且 SM2=0SM2=0

或 或 b, b, RI=0RI=0且且 RB8=1RB8=1 。。 只有满足只有满足 aa 或满足或满足 bb 的条件时的条件时 ,, 接收到的数据才能送到接收到的数据才能送到 SBUSBU

FF ,并使,并使 RI=1RI=1激活,否则接收无效且激活,否则接收无效且 RIRI 不能置位。不能置位。RI=0RI=0 是保证是保证 SBUFSBUF空空(每次取走数据时通过软件复位(每次取走数据时通过软件复位 RIRI ,,如果没有取走数据则如果没有取走数据则 RI=1RI=1 ),以保证接收到的数据不丢失。),以保证接收到的数据不丢失。后一个条件是由后一个条件是由 SM2SM2 和和 RB8RB8共同来控制接收。共同来控制接收。

令令 SM2=0SM2=0 可以保证可以保证 RB8RB8 正确的接收正确的接收奇偶校验位奇偶校验位;; 令令 SM2=1SM2=1 可以利用接收到的可以利用接收到的 RB8RB8 控制接收是否有效。控制接收是否有效。 即 即 RB8=1RB8=1 时,接收有效。时,接收有效。 RB8=0RB8=0 时,接收无效。时,接收无效。

返回本节目录二 返回上一页

串行口模式串行口模式 22 、、 33 时数据帧格式时数据帧格式

发送时:发送时:将将 SCONSCON 中的中的 TB8TB8 作为第作为第 99 位数据发送;位数据发送;接收时:接收时:将接收来的第将接收来的第 99 位送到位送到 SCONSCON 中的中的 RB8RB8 中。中。

D0D0 D1D1 D2D2 D3D3 D4D4 D5D5 D6D6 D7D7 D8D8

起始位 9 位数据 停止位

SM0SM0 SM1SM1 SM2SM2 RENREN TB8TB8 RB8RB8 TITI RIRI

1.8.5.1 1.8.5.1 模式模式 22 、、 33 的应用之一的应用之一带奇偶校验位的数据传送带奇偶校验位的数据传送

奇偶校验:奇偶校验:接收到的第接收到的第 99位数据是发送方送来的奇位数据是发送方送来的奇偶校验位。偶校验位。

在这种情况下,必须令在这种情况下,必须令 SM2=0SM2=0 ,,否则接收的校验否则接收的校验位位 RB8=0RB8=0 时,将影响数据的接收(因为时,将影响数据的接收(因为 RB8RB8是根是根据据 88位数据进行奇偶校验的结果来设定,有时为位数据进行奇偶校验的结果来设定,有时为““ 1”1”,而有时为“,而有时为“ 0”0”)。)。

当接收到数据后,用指令对 当接收到数据后,用指令对 PSW.PPSW.P 位进行判断。位进行判断。将此结果与将此结果与 RB8RB8中的数据进行“异或”,看结果是中的数据进行“异或”,看结果是否与约定的相符合。否与约定的相符合。

例如:例如:发送、接收双方约定为发送、接收双方约定为奇校验奇校验:: 若发送的若发送的数据数据和和第第 99位位分别是:分别是: 00011010 00011010 、、 00 (( 第第 99位数据是发送方用根据位数据是发送方用根据奇校验奇校验自动生成的自动生成的 ))若接收后若接收后 SBUFSBUF 送送 AA 的数据是:的数据是: 0001101000011010 ,这时,,这时,PSW.P=1PSW.P=1 ,且 ,且 RB8=0 RB8=0 。则进行: 。则进行: PP异或异或 RB8=1RB8=1 ,,

满足约定条件既接收正确。满足约定条件既接收正确。反之若反之若 SBUFSBUF 送送 A=00011011,A=00011011,使使 PSW.P=0,PSW.P=0, 且且 RB8RB8=0 =0 。 。 PP异或异或 RB8=0 RB8=0 表明不符合约定条件,接收表明不符合约定条件,接收出错。出错。

总之总之 ,,使用模式使用模式 22 、、 33发送带“奇偶校验”位的数据发送带“奇偶校验”位的数据

时:时: 11 ,一定要使,一定要使 SM2=0SM2=0 。。 22 ,又因为,又因为 SM2=0SM2=0 ,所以尽管,所以尽管 RIRI能够激活,但不会能够激活,但不会

引发中断,所以只能采用“查询”的方式接收数据。引发中断,所以只能采用“查询”的方式接收数据。

利用模式利用模式 2,32,3进行带奇校验的串行通讯程序流程进行带奇校验的串行通讯程序流程图图

数据送累加器 A

PSW.P=1 ?

SET SCON.TB8 CLR SCON.TB8

MOV SBUF,A

TI=1 ?

CLR SCON.TI

YES

NO

NO

YES

发送端程序(原始 TI=0 )

使用“查询法”编制的发送、接收程序 返回本节目录二

RI=1 ?

MOV A,SBUF

PSW.P RB8=1?⊕出错处理

CLR SCON.RI

YESNO

接收端程序(原始 RI=0 )

N

Y

数据送内存

1.8.5.2 1.8.5.2 模式模式 22 、、 33 的应用之二:的应用之二:多机通讯多机通讯

在在传统的多路数据采集系统传统的多路数据采集系统中,存在着许多缺点。使它在采中,存在着许多缺点。使它在采集的点数和引线长度都受到限制。集的点数和引线长度都受到限制。

采用多采用多 CPUCPU 的方式可以构成一个的方式可以构成一个多机通讯系统多机通讯系统。如在一个。如在一个生产线上要对许多参数(温度、压力、流量等)进行采集检生产线上要对许多参数(温度、压力、流量等)进行采集检测,并且要对这些数据进行处理、显示、打印或保存。测,并且要对这些数据进行处理、显示、打印或保存。

我们可以将这些单片机进行分工:选一台单片机作为我们可以将这些单片机进行分工:选一台单片机作为主机主机,,专门负责接收其他单片机传回的数据,并进行数据的后期处专门负责接收其他单片机传回的数据,并进行数据的后期处理如:保存、显示等。而其它的单片机则完成对传感器的信理如:保存、显示等。而其它的单片机则完成对传感器的信号检测、号检测、 A/DA/D 转换,最后将数据上传给主机。我们称这些单转换,最后将数据上传给主机。我们称这些单片机为片机为从机。从机。

传统方式的多路数据采集系统传统方式的多路数据采集系统

单片机系统或

微型计算机系统

传感器 1

传感器 2

传感器 3

传感器 4

传感器 N

接口电路

引线(模拟信号)

机房 或 仪表室

检测现场 返回前一次

采用“智能传感器”组成的多路数据采集系采用“智能传感器”组成的多路数据采集系统统

主机

从机 N从机 4从机 3从机 2从机 1

返回前一次

串行数据线( 2条)RXD TXD

TXD RXD

主从式多机通讯原理主从式多机通讯原理主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机之间不能直接通讯;从机之间不能直接通讯;

主机和从机的设置为模式主机和从机的设置为模式 22 或或 33 ,其中主机的,其中主机的 SM2=0SM2=0 ,从机的,从机的 SM2=1SM2=1 。。

主机首先通过发送主机首先通过发送地址码地址码来寻找从机(来寻找从机(地址码的特征是第地址码的特征是第 99 位数据为位数据为““ 1”1” ,且,且被从机接收为被从机接收为 RB8RB8 ),所以,所有的从机都能接收到主机发出),所以,所有的从机都能接收到主机发出的地址码(因为:的地址码(因为: RI=0RI=0 ,, SM2=1,RB8=1SM2=1,RB8=1 ),并使),并使 RI=1RI=1 引发中断。从引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的的从机将自己的 SM2=0SM2=0 ,而未被选中的从机仍保持,而未被选中的从机仍保持 SM2=1SM2=1 。。

当主机找到从机后,开始向从机发数据、命令,其特征为第当主机找到从机后,开始向从机发数据、命令,其特征为第 99 位位 =0=0 。由。由于从机于从机 SM2=0SM2=0 ,所以尽管接收到的,所以尽管接收到的 RB8=0RB8=0 ,同样可以激活从机的,同样可以激活从机的 RIRI ,,使其以使其以查询的方式查询的方式接收主机发出的数据或命令。当主机与从机的通讯完接收主机发出的数据或命令。当主机与从机的通讯完成后,从机再将其成后,从机再将其 SM2=1SM2=1 ,主机重新发出另一个从机的地址,所有从机,主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信息。可以马上响应并接收地址信息。

返回多机图参见 SM2位

多机通讯原理多机通讯原理

在模式在模式 22 、、 33 中,中, 11 ,, SM2=0SM2=0 时时:: RB8=1RB8=1 或或 RB8=0RB8=0 都可以激活都可以激活 RIRI,, 但不能引发中断。但不能引发中断。 22 ,, SM2=1SM2=1 时:时: RB8=1RB8=1才能激活才能激活 RIRI并引发中断。并引发中断。 而而 RB8=0RB8=0 时,时, RIRI不能激活。不能激活。

小 结小 结

11 ,主机的,主机的 SM2=0SM2=0 ,从机的,从机的 SM2=1SM2=1 ;;22 ,主机向从机发送的,主机向从机发送的地址码地址码第第 99 位为“位为“ 1”1” ;;33 ,所有的从机,所有的从机 SM2=1SM2=1 、、 RB8=1RB8=1 、、 RI=0RI=0 ,接收主机的,接收主机的地址进入中断服务程序。在程序中比较、确认是否为被寻地址进入中断服务程序。在程序中比较、确认是否为被寻从机。从机。44 ,被寻从机将,被寻从机将 SM2SM2清零,以保证能清零,以保证能以查询的方式以查询的方式接收接收主机的数据、命令。同时向主机返回地址供主机核实。没主机的数据、命令。同时向主机返回地址供主机核实。没有被选种的从机保持有被选种的从机保持 SM2=1SM2=1 并退出服务程序。并退出服务程序。55 ,,被寻中的从机以被寻中的从机以查询查询 RIRI 的方式与主机之间进行数据交的方式与主机之间进行数据交换(注意:因为换(注意:因为 SM2=0SM2=0 时,时, RIRI 虽然能被激活,但不能引虽然能被激活,但不能引发中断),完成后,重新将发中断),完成后,重新将 SM2SM2 置置 11 。。

返回多机图 返回本节目录二

1.8.5.3 1.8.5.3 模式模式 22 、、 33 使用时要注意的问题使用时要注意的问题在模式在模式 22 、、 33 中,可以实现较为特殊的通讯方式,如带校中,可以实现较为特殊的通讯方式,如带校验位的验位的 99 位传送、多机通讯。位传送、多机通讯。注意:当注意:当 SM2=0SM2=0 时,只能采时,只能采用查询方式。用查询方式。

功能功能 SM2SM2 第第 99位 位 工作方式工作方式带校验位的带校验位的 99

位数传送位数传送 SM2=0SM2=0 校验位校验位 以查询(以查询( RIRI )的方式)的方式接收数据接收数据

多机多机通讯通讯

主主机机 SM2=0SM2=0

地址码:地址码: TB8=1TB8=1

数据、命令时数据、命令时 =0=0以查询的方式工作以查询的方式工作

从从机机 SM2=1SM2=1

未选中时未选中时 SM2SM2 不变不变 以中断的方式接收地址以中断的方式接收地址选中后选中后 SM2=0SM2=0 以查询的方式与主机通讯以查询的方式与主机通讯

返回本节目录二

1.8.6 1.8.6 波特率及定时器波特率及定时器 T1T1 的设定的设定在串行口的异步通讯中,发送方与接收方是两个互相独立在串行口的异步通讯中,发送方与接收方是两个互相独立的系统,它们的系统时钟可以各不相同(的系统,它们的系统时钟可以各不相同(如图所示如图所示)。在)。在这种条件下使通讯正确的条件是:这种条件下使通讯正确的条件是: 11 ,要有相同的字符帧,要有相同的字符帧格式;格式; 22 ,要有相同的波特率。,要有相同的波特率。MCS-51MCS-51 单片机的串行口四种模式其波特率各不相同。其单片机的串行口四种模式其波特率各不相同。其中模式中模式 11 、、 33 的波特率就是由的波特率就是由定时器定时器 T1T1 的溢出率的溢出率来决定来决定的(另外的(另外 PCONPCON 中的中的 SMODSMOD 位起着波特率加倍的作用)。位起着波特率加倍的作用)。

SM0 SM1SM0 SM1 模式模式 功 能功 能 波特率波特率 0 00 0 00 同步移位寄存器模式同步移位寄存器模式 Fosc/12Fosc/12

0 10 1 11 1010 位异步通信位异步通信 UARUARTT

可变,由可变,由 T1T1 初值确初值确定定

1 01 0 22 1111 位异步通信位异步通信 UARUARTT

Fosc/64Fosc/64 或或 /32/32

1 11 1 33 1111 位异步通信位异步通信 UARUARTT

可变,由可变,由 T1T1 初值确初值确定定

如何设定波特率?如何设定波特率?在编制串行口通讯(模式在编制串行口通讯(模式 11 、、 33 )程序时,在程序的初始)程序时,在程序的初始化中,必须进行波特率的设定,既对化中,必须进行波特率的设定,既对 T1T1进行初始化。进行初始化。

T1T1初始化的主要任务就是:初始化的主要任务就是: 11 ,设置,设置 T1T1 的的工作方式为定时(工作方式为定时( C/T=0C/T=0 ));; 工作模式为模式工作模式为模式 2 2 :自动重装。:自动重装。 22 ,计算定时常数并分别送给,计算定时常数并分别送给 TH1TH1 、、 TL1TL1 。。

波特率计算公式:波特率计算公式: B =B =

T1T1溢出率:溢出率: == (计数速率)(计数速率) / / [ 256-[ 256- (( TH1TH1 )) ]]

= (fosc/12) / = (fosc/12) / [ 256-[ 256- (( TH1TH1 )) ]]

溢出率)( 132

2T

SMOD

波特率、初值波特率、初值 TCTC 计算公式计算公式

B= fosc / B= fosc / [ 96 X[ 96 X (( 256-TH256-TH )) ]] ;; ( ( SMOD=1SMOD=1 时)时) 或 或 B= fosc / [ 192 XB= fosc / [ 192 X (( 256-TH256-TH )) ]] ;; ( ( SMOD=0SMOD=0 时)时)

其中:其中: foscfosc 为系统时钟频率,为系统时钟频率, THTH 为定时器为定时器 T1T1 的初值。的初值。所以可以推出:所以可以推出: TH=256-[ fosc/TH=256-[ fosc/ (( 384XB384XB )) ]] ; ( ; ( SMOD=0SMOD=0 时)时)

或: 或: TH=256-[ fosc/TH=256-[ fosc/ (( 192XB192XB )) ]] ; ( ; ( SMOD=1SMOD=1 时)时)【【举例举例】】设系统时钟为设系统时钟为 11.059MHz11.059MHz ,要求波特率为,要求波特率为 1200Hz1200Hz ,,求求 THTH 。。

【【解解】】用上述公式用上述公式 TH=256-[11.059MHz /TH=256-[11.059MHz / (( 384X1200384X1200 )) ]=2]=23232

=0E8H =0E8H 设:设: SMOD=0SMOD=0

返回本节目录二

1.9 MCS-511.9 MCS-51 的中断系统的中断系统

MCS-51MCS-51 的中断的中断系统结构图

1.9.11.9.1 中断允许积存器中断允许积存器IE1.9.21.9.2 中断优先级寄存器中断优先级寄存器IP1.9.3 1.9.3 优先级结构

1.9.4 1.9.4 中断查询与响应协议

1.9.5 1.9.5 外部中断

1.9.6 1.9.6 中断请求的撤除

1.9.7 1.9.7 中断响应时间

中断:中断:

CPUCPU 中止正在运行的程序,转向为外部设备服务中止正在运行的程序,转向为外部设备服务的过程称为中断。当完成中断后,的过程称为中断。当完成中断后, CPUCPU再回到原再回到原来的“断点”继续原来的程序。来的“断点”继续原来的程序。中断源是由外部产生,具有随机性、不可知性。中断源是由外部产生,具有随机性、不可知性。

主程序

断点

中断相应

中断返回

中断服务程序

MCS-51MCS-51 的中断系统结构图的中断系统结构图

MCS-51MCS-51 单片机共有单片机共有 55 个中断源(如图所示)。个中断源(如图所示)。

/ int0

T0

/ int1

T1

ES

中断源标识符

高优先级中断请求

中断矢量

中断源标识符

低优先级中断请求

中断矢量中断请求寄存器 中断允许寄存器 中断优先级

寄存器

源允许 总允许 EA

返回前一次

返回本节目录

1.9.11.9.1 中断允许寄存器中断允许寄存器 IEIE (( 0A8H0A8H))

EAEA :总允许位。:总允许位。 EA=0EA=0 :禁止一切中断;:禁止一切中断; EA=1EA=1 中断开放。中断开放。ESES :串行口中断允许位。:串行口中断允许位。 ES=1ES=1 :允许:允许 RIRI 、、 TITI 引发中断;引发中断; ES=0ES=0 :禁止中断。:禁止中断。ET1ET1 、、 ET0ET0 :定时器:定时器 T1T1 、、 T0T0允许位。允许位。 ET=1ET=1允许,允许, =0=0禁止。禁止。EX1EX1 、、 EX0EX0 ::外中断 外中断 int1int1 、、 int0int0允许位。允许位。 ET =1ET =1允许,允许, =0=0禁禁

止。止。

EAEA XX XX ESES ET1ET1 EX1EX1 ET0ET0 EX0EX0

返回本节目录 返回前一次

1.9.21.9.2 中断优先级寄存器中断优先级寄存器 IPIP (( 0B8H0B8H))

PSPS ::串行口中断优先级设定位;串行口中断优先级设定位;PT1PT1 、、 PT0PT0 ::定时器定时器 T1T1 、、 T0T0 中断优先级设定位;中断优先级设定位;PX1PX1 、、 PX0PX0 ::外中断 外中断 int1int1 、、 00 中断优先级设定位;中断优先级设定位;

XX XX XX PSPS PT1PT1 PX1PX1 PT0PT0 PX0PX0

返回前一次 返回本节目录

1.9.3 1.9.3 优先级结构优先级结构由于由于 IPIP寄存器的设定,将寄存器的设定,将 55 个中断源分为两个级别。中个中断源分为两个级别。中断的发生将遵循下面的断的发生将遵循下面的 33条基本原则:条基本原则:

11 ,低级中断在响应执行中,可以被高级中断所中断,反之,低级中断在响应执行中,可以被高级中断所中断,反之则不能。则不能。

22 ,一个中断(不论是什么优先级)一旦得到响应,与它同,一个中断(不论是什么优先级)一旦得到响应,与它同级的中断则不能在中断它。级的中断则不能在中断它。

33 ,当,当 CPUCPU同时收到几个同一级别的中断要求时,同时收到几个同一级别的中断要求时, CPUCPU 响响应哪个中断源取决于硬件的查询顺序(应哪个中断源取决于硬件的查询顺序(见图见图)。)。

转IP寄存器

如何改变中断源的优先级顺序如何改变中断源的优先级顺序

从中断系统的从中断系统的硬件结构图硬件结构图可以清楚地看出同一级别中可以清楚地看出同一级别中 55 个个中断源的查询顺序。很明显,要改变这种顺序只能通过中断源的查询顺序。很明显,要改变这种顺序只能通过 IPIP的设置。的设置。

如:要想将串行口的级别设为最高时,将如:要想将串行口的级别设为最高时,将 IPIP 中的中的 PSPS 置置一。一。

既使用指令:既使用指令: setb ip.pssetb ip.ps 或 或 mov 0b8h,#10h mov 0b8h,#10h 完成对完成对 IIPP 设置。设置。

XX XX XX PSPS PT1PT1 PX1PX1 PT0PT0 PX0PX0

IP寄存器返回本节目录 返回前一次

1.9.4 1.9.4 中断查询与响应协议中断查询与响应协议在每一个机器周期中,所有的中断源都要按照其顺序检查在每一个机器周期中,所有的中断源都要按照其顺序检查一遍,到一遍,到 S6S6状态时,就查找到所有被激活的中断申请并状态时,就查找到所有被激活的中断申请并排好优先权。在下一个机器周期的排好优先权。在下一个机器周期的 S1S1 状态,只要不受阻状态,只要不受阻断,就开始响应高级中断。断,就开始响应高级中断。

如果发生下列情况,中断将被阻止:如果发生下列情况,中断将被阻止: 11 ,,同级或高级中断正在执行时;同级或高级中断正在执行时; 22 ,,当前的机器周期不是指令的最后一个机器周期;当前的机器周期不是指令的最后一个机器周期; 33 ,, CPUCPU正在执行的指令是正在执行的指令是 RETIRETI或访问或访问 IEIE 、、 IPIP寄存器寄存器

时,时, CPUCPU是不会响应中断,而且要等到是不会响应中断,而且要等到该指令的下一条该指令的下一条指令指令执行完后中断才能响应。执行完后中断才能响应。

返回前一次

CPUCPU 查询到某一中断源后,使相应的查询到某一中断源后,使相应的“优先级激活”触发器置位用以阻断“优先级激活”触发器置位用以阻断同级或低级中断。在硬件的控制下,同级或低级中断。在硬件的控制下,程序自动转向对应的矢量单元,执行程序自动转向对应的矢量单元,执行其服务程序。其服务程序。CPUCPU 响应中断时响应中断时 ,,将当时程序计数器将当时程序计数器PCPC 的内容进栈的内容进栈 ,,并将相应的中断矢量并将相应的中断矢量装入装入 PCPC 中中 ,,使使 CPUCPU转向对应的服务转向对应的服务程序。程序。中断服务程序的最后一条指令是中断服务程序的最后一条指令是 RETRETII,指令将清除“优先级激活触发,指令将清除“优先级激活触发器”,然后从堆栈中弹出断点地址并器”,然后从堆栈中弹出断点地址并装入到装入到 PCPC 中。中。矢量入口的指令应当是转移指令。矢量入口的指令应当是转移指令。

(上电启动地址)(上电启动地址)

(( INT0INT0 中断入中断入口)口)

(( T0T0 中断入口)中断入口)

(( INT1INT1 中断入中断入口)口)

(( T1T1 中断入口)中断入口)

(串口中断入口)(串口中断入口)

0000H

0003H

000BH

0013H

001BH

0023H

返回本节目录

1.9.5 1.9.5 外部中断外部中断在在 MCS-51MCS-51 引脚上有:引脚上有: INT0INT0 、、 INT1INT1 两个外部的中断输两个外部的中断输入,作为外部事件的触发信号。入,作为外部事件的触发信号。 CPUCPU 在每一个机器周期在每一个机器周期对它们进行一次检测。系统设定了两种触发方式:边沿触对它们进行一次检测。系统设定了两种触发方式:边沿触发(下降沿)和电平触发(低电平)。具体由发(下降沿)和电平触发(低电平)。具体由 TCONTCON中的中的IT0IT0 、、 IT1IT1来确定。来确定。

11 ,在边沿触发方式中,在相邻的两个机器周期,如果第,在边沿触发方式中,在相邻的两个机器周期,如果第一次采集是高电平,第二次采集是低电平时,则一次采集是高电平,第二次采集是低电平时,则 TCONTCON中中的标志的标志 IE0IE0 或或 IE1IE1 置位。所以,在边沿触发方式时:外部置位。所以,在边沿触发方式时:外部设备发出的边沿信号(高电平和低电平)的时间应大于一设备发出的边沿信号(高电平和低电平)的时间应大于一个机器周期,否则信号将可能漏检。个机器周期,否则信号将可能漏检。

22 ,如果采用“电平”触发方式,如果采用“电平”触发方式,, CPUCPU采集到采集到 INT0INT0 或或 ININT1T1 的引脚为低电平时将激活标志的引脚为低电平时将激活标志 IE0IE0 或或 IE1IE1 。所以在这。所以在这种触发方式中,外部的低电平至少应保留一个机器周期种触发方式中,外部的低电平至少应保留一个机器周期。。

返回本节目录 引脚图

1.9.6 1.9.6 中断请求的撤除中断请求的撤除

以外中断电平触发为例:以外中断电平触发为例:当当 CPUCPU 响应该中断并进响应该中断并进入到服务程序后,在执行入到服务程序后,在执行 RETIRETI返回主程序前,必返回主程序前,必须将外部的低电平撤掉,否则,当须将外部的低电平撤掉,否则,当 CPUCPU返回主程返回主程序后,会因为外部的低电平信号而再次进入中断,序后,会因为外部的低电平信号而再次进入中断,使程序无法正常运行。使程序无法正常运行。

同理,同理,其它中断源也存在类似的问题。所以在使其它中断源也存在类似的问题。所以在使用中断时必须清楚用中断时必须清楚在响应某一中断时,其中断请在响应某一中断时,其中断请求(标志)是否要撤除,如何撤除求(标志)是否要撤除,如何撤除等问题。等问题。

MCS-51MCS-51 的中断请求的撤除方法的中断请求的撤除方法

中断源中断源 中断标志中断标志 说 明说 明 撤除方法撤除方法INT0INT0 、、 INTINT11 IE0IE0 、、 IE1IE1 外部边沿触发外部边沿触发 无影响无影响

INT0INT0 、、 INTINT11 IE0IE0 、、 IE1IE1 外部电平触发外部电平触发 电路、软件撤除电路、软件撤除

T0T0 、、 T1T1 TF0TF0 、、 TFTF11

定时计数器中断定时计数器中断 自动清除标志自动清除标志

ESES RIRI 、、 TITI 串行口中断串行口中断 软件清除标志软件清除标志

注:此表指使用中断服务程序来处理中断事件时的情况,如果采用查询标志的方法来处理事件时,都需要软件来清除标志。

撤除外部电平请求信号的方案撤除外部电平请求信号的方案

MCS-51

INTX

P1 .0

D Q

CP S

外部设备

D 型触发器

CLR P1.0

SETB P1.0

中断服务程序

RETI

服务程序主体

硬件电路部分

返回本节目录

1.9.7 1.9.7 中断响应时间(以外部中断中断响应时间(以外部中断 INTxINTx 为为例)例)

每个机器周期的每个机器周期的 S5P2S5P2 时刻,时刻, INTxINTx 引脚的电平被锁存到引脚的电平被锁存到内部寄存器中,待下一个周期查询。内部寄存器中,待下一个周期查询。

11 ,最短时间:,最短时间:中断请求有效,查询后在下一个周期便开中断请求有效,查询后在下一个周期便开始执行一条硬件的子程序的调用(时间是两个周期),然始执行一条硬件的子程序的调用(时间是两个周期),然后开始执行服务程序的第一条指令。这样从锁存电平的周后开始执行服务程序的第一条指令。这样从锁存电平的周期到执行中断服务程序,中间相隔期到执行中断服务程序,中间相隔 33 个机器周期。个机器周期。

C1C1 C2C2 C3C3 C4C4 C5C5

电平锁存 中断查询 长调用 执行中断服务程序

返回前一次

22 ,,最长时间:最长时间:如果中断信号发生在如果中断信号发生在前面所说前面所说的的 33 种情况时,种情况时, 响应时间就要变长:响应时间就要变长:

第第 11 种情况:种情况:响应时间取决于高级中断的执行时间;响应时间取决于高级中断的执行时间; 第第 22 种情况:种情况:指当前指当前 CPUCPU执行的指令是多周期指令,如乘除执行的指令是多周期指令,如乘除 法指令(法指令( 44 个周期),最坏情况,还要等个周期),最坏情况,还要等 33 个周个周 期。这样期。这样响应周期变为响应周期变为 3+3=63+3=6个周期;个周期; 第第 33 种情况:种情况: CPUCPU 当前执行的指令是当前执行的指令是 RETIRETI 或访问或访问 IEIE 、、 IPIP寄存寄存

器器 时,本指令(时,本指令( 11 个周期)没有响应,且下一条指个周期)没有响应,且下一条指 令执行完后才能响应,这样附加的等待时间最长令执行完后才能响应,这样附加的等待时间最长 不会超过不会超过 55 个周期(个周期( 1+41+4 )。整个响应为)。整个响应为 5+3=85+3=8 个个 周期。这样,如果不考虑第周期。这样,如果不考虑第 11 种情况,整个中断种情况,整个中断 响应的时间范围应当是: 响应的时间范围应当是: 33~~ 88 个机器周期。个机器周期。

返回上一页中断协议

中断响应时间的不确定,在大多数场合下可能是中断响应时间的不确定,在大多数场合下可能是无关紧要的,但是对于一些较特殊的场合下,这无关紧要的,但是对于一些较特殊的场合下,这种响应时间的不确定往往会带来一些问题。种响应时间的不确定往往会带来一些问题。

如:利用中断来编制一个时钟程序时,便不如:利用中断来编制一个时钟程序时,便不可避免的带来误差,所以是要提醒大家注意。在可避免的带来误差,所以是要提醒大家注意。在程序中可以使用一些算法来减少这种误差(参考程序中可以使用一些算法来减少这种误差(参考清华的资料) 。清华的资料) 。

相对比较美国相对比较美国 mircchipmircchip 公司的公司的 PICPIC 单片机由单片机由于使用单字节、单周期指令,使中断响应时间固于使用单字节、单周期指令,使中断响应时间固定,所以从根本上消除了这种的情况。定,所以从根本上消除了这种的情况。

返回本节目录