8051技术手册
8051
1
芯片手册厦门大学EDA实验室 8051技术手册
目录
1 NL06F86 芯片概述 ................................................1
1.1 结构框图 .................................................... 1 1.2 NL06F86 性能 ................................................. 1 1.3 外设连接示意图 ............................................... 4 1.4 管脚定义 .................................................... 5 1.5 NL06F86 最小系统 ............................................. 18 1.6 部分管脚的配臵电路........................................... 18
2 内存映射.......................................................20 3 CPU内核 .......................................................23
3.1 概述 ...................................................... 23 3.2 CPU编程模型 ................................................ 24 3.3 处理器寻址方式 .............................................. 28 3.4 CPU指令集.................................................. 32 3.5 MMU和Cache ................................................ 48
4 外设功能.......................................................61
4.1 功能综述 ................................................... 61 4.2 所有寄存器列表 .............................................. 62 4.3 外设使用说明................................................ 71 4.4 编程实例 ................................................... 71
5 程序起动描述 ...................................................73 6 存储器控制器 ...................................................74
厦门大学 2
厦门大学EDA实验室 8051技术手册
6.1 功能综述 ................................................... 74 6.2 寄存器表 ................................................... 74 6.3 寄存器功能描述 .............................................. 74 6.4 模块管脚描述................................................ 76 6.5 典型电路 ................................................... 80 6.6 编程实例 ................................................... 81
7 中断控制器 .....................................................83
7.1 功能综述 ................................................... 83 7.2 寄存器表 ................................................... 84 7.3 寄存器功能描述 .............................................. 84 7.4 编程实例 ................................................... 86
8 定时器 ........................................................88
8.1 功能综述 ................................................... 88 8.2 寄存器表 ................................................... 88 8.3 寄存器功能描述 .............................................. 8.4 编程实例 ................................................... 90
9 通用I/O .......................................................91
9.1 功能综述 ................................................... 91 9.2 寄存器表 ................................................... 91 9.3 寄存器功能描述 .............................................. 93 9.4 编程实例 ................................................... 96
10 HW控制器 .....................................................98
10.1 功能综述 ................................................... 98 10.2 寄存器表 ................................................... 98
厦门大学
3
厦门大学EDA实验室 8051技术手册
10.3 寄存器功能描述 .............................................. 98 10.4 编程实例 ................................................... 99
11 以太网MAC控制器 ..............................................100
11.1 功能综述 .................................................. 100 11.2 寄存器表 .................................................. 100 11.3 寄存器功能描述 ............................................. 101 11.4 模块管脚描述............................................... 106 11.5 典型电路 .................................................. 107 11.6 编程实例 .................................................. 107
12 通用异步收发器UARTs...........................................112
12.1 功能综述 .................................................. 112 12.2 UART寄存器表 .............................................. 112 12.3 寄存器功能描述 ............................................. 113 12.4 模块管脚描述............................................... 117 12.5 编程实例 .................................................. 118
13 I2C总线接口..................................................122
13.1 功能综述 .................................................. 122 13.2 寄存器表 .................................................. 122 13.3 寄存器功能描述 ............................................. 122 13.4 时序波形图 ................................................ 123 13.5 模块管脚描述............................................... 125 13.6 典型电路 .................................................. 125 13.7 编程实例 .................................................. 126
14 低速外设接口 .................................................128
厦门大学
4
厦门大学EDA实验室 8051技术手册
14.1 功能综述 .................................................. 128 14.2 寄存器表 .................................................. 128 14.3 寄存器功能描述 ............................................. 128 14.4 模块管脚描述............................................... 130 14.5 典型电路 .................................................. 131 14.6 编程实例 .................................................. 132
15 显示接口.....................................................134
15.1 功能总述 .................................................. 134 15.2 寄存器表 .................................................. 134 15.3 寄存器功能描述 ............................................. 136 15.4 模块管脚描述............................................... 143 15.5 典型电路 .................................................. 144 15.6 编程实例 .................................................. 145
16 磁卡接口.....................................................149
16.1 功能综述 .................................................. 149 16.2 寄存器表 .................................................. 149 16.3 寄存器功能描述 ............................................. 149 16.4 模块管脚描述............................................... 151 16.5 编程实例 .................................................. 151
17 IC卡接口 ....................................................153
17.1 功能综述 .................................................. 153 17.2 寄存器表 .................................................. 153 17.3 寄存器功能描述 ............................................. 1 17.4 模块管脚描述............................................... 156
厦门大学
5
厦门大学EDA实验室 8051技术手册
17.5 典型电路 .................................................. 156 17.6 编程实例 .................................................. 157
18 打印机接口 ...................................................159
18.1 功能综述 .................................................. 159 18.2 寄存器表 .................................................. 159 18.3 寄存器功能描述 ............................................. 159 18.4 模块管脚描述............................................... 161 18.5 典型电路 .................................................. 162 18.6 编程实例 .................................................. 162
19 PC键盘接口...................................................1
19.1 功能综述 .................................................. 1 19.2 寄存器表 .................................................. 1 19.3 寄存器功能描述 ............................................. 1 19.4 模块管脚描述............................................... 165 19.5 数据格式和时序图 ........................................... 166 19.6 典型电路 .................................................. 166 19.7 编程实例 .................................................. 167
20 PWM接口 .....................................................169
20.1 功能综述 .................................................. 169 20.2 寄存器表 .................................................. 169 20.3 寄存器功能描述 ............................................. 170 20.4 模块管脚描述............................................... 171 20.5 典型电路 .................................................. 171 20.6 编程实例 .................................................. 172
厦门大学
6
厦门大学EDA实验室 8051技术手册
21 蜂鸣器 ......................................................173
21.1 功能综述 .................................................. 173 21.2 寄存器表 .................................................. 173 21.3 寄存器功能描述 ............................................. 173 21.4 模块管脚描述............................................... 174 21.5 典型电路 .................................................. 174 21.6 编程实例 .................................................. 175
22 DES控制器 ...................................................176
22.1 功能综述 .................................................. 176 22.2 寄存器表 .................................................. 176 22.3 寄存器功能描述 ............................................. 176 22.4 编程实例 .................................................. 177
23 封装尺寸.....................................................179
厦门大学
7
厦门大学EDA实验室 8051技术手册
1. 8051 芯片概述
8051微控制器属于MCS-51系列,自其1980年由Inter公司设计以来,由于其完善的指令集,在嵌入式系统应用中占有很大的市场。本芯片符合工业标准指令集的8位8051微控制器IP核设计,其资源包括8K的程序存储器,1k的数据存储器,两个16-bit的计数控制器和4组8位的通用I/0口。
1.1 结构框图
INTERRUPT中断控制器1K数据RAM8K程序ROMTIMER0TIMER1CPUSPIPORTSI/O PORTS
厦门大学
8
厦门大学EDA实验室 8051技术手册
1.2 8051 性能
芯片内部模块主要包含了ALU模块、控制器模块、定时/计数器模块、串行通信模块等。 它具有以下一些基本特点:
(1)、采用了全局同步设计: (2)、具有清晰的逻辑层次结构; (3)、可以方便地对其进行功能扩展; (4)、与工业标准昀8051指令兼容; (5)、采用了复用的I/O通用接口;
(6)、包含1K字节RAM、8K的片内SRAM来用当程序ROM。
(7)、外接spi-flash,用来存储程序,也可由8051直接对其进行读写,
擦除等指令
与标准8051单片机相比,本芯片最大的改进就是流水的不同,通用8051分为6级流水周期,每级流水周期占用两个时钟周期,本芯片,只含有两级流水周期,在第一个周期中,进行读取指令和功能译码,第二个周期进行指令操作和相关存储器的数据写入。我们通过设计一个寄存器来完成这个操作,这个寄存器用来把信号延时一个时钟周期。因为我们在第一个时钟周期译码完成指令操作译码,这样,就把不用的信号进行延时一个周期,以此来减少流水周期。这是本芯片与标准8051作品最大的不同,但由于设计中32位的取指长度和flash的读取速度的,对外部时钟进行过分频,总体效果比标准8051执行速度快2-3倍。对于8051-般操作和功能,在第三部分以详细介绍,在这里不再累述。
性能参数
.18um CMOS 工艺 Pin LQFP 封装 主频:50MHz
工作电压:2.6-3.5V 工作环境:0-70 摄氏度
1.3 内部单元介绍
1. 算术逻辑单元(ALU):
8051的ALU是一个性能极强的运算器,它既可以进行加、减、乘、 除四则运算,也可以进行与、或、非、异或等逻辑运算,还具有数据传送、移位、判断和程序转移、位变量处理等功能。
厦门大学 9
厦门大学EDA实验室 8051技术手册
2. 控制单元(CU):
控制器是用来统一指挥控制计算机进行工作的部件。它的功能是从 程序存储器中提取指令,送到指令寄存器,再进入指令译码器进行译码, 并通过定时和控制电路,在规定的时刻发出各种操作所需要的全部内部 控制信息及CPU外部所需要控制信号,使各部分协调工作,完成指令所 规定的各种操作。 3. 存储器
8051系列单片机存储器结构的主要特点是采用了为哈佛型结构,将 程序存储器和数据存储器分开并有各自的寻址机构和寻址方式。
标准8051单片机在物理上有4个存储空间:片内程序存储器和片外程序存储器、片内数据存储器、片外数据存储器。程序存储器用于存放编好的程序、表格和常数。8051单片机的片内程序存储器和片外程序存储器物理上,逻辑上却是统一编址的。数据存储器用于存放运算的中间结果,进行数据暂存以及数据缓冲等。8051单片机的片内数据存储器和片外数据存储器无论在物理上还是在逻辑上,其地址空间都是彼此的,各自有不同的指令寻址。本芯片内部集成了8K的sram来当rom,程序指令先烧录到外部flash上,然后,启动8051会首先将程序搬入到内部sram里,然后正常工作。
程序存储器
8051单片机内部有8KB字节程序存储器,地址为OOOOH~1FFFF,本芯片由于外接的flash,去掉了扩展片外程序存储器的功能。程序存储器中有六个单元具有特殊功能,这些单元不得随意被其它程序指令占用。
OOOOH-0002H:是所有执行程序的入口地址。8051复位后,
CPU总是从OOOOH单始执行程序;
0003H:外部中断0入口;
OOOBH:定时器0溢出中断入口; 0013H:外部中断1入口;
OOIBH:定时器1溢出中断入口: 0023H:串行口中断入口。
片内数据存储器
本8051芯片内部有1K的sram的数据存储器。
8051的内部数据存储器可划分为两个块:O0OH~07FH低128字节和100H-3FF为用户RAM区,080H-0FFH高125字节为特殊功能寄存器区,除其中的特殊寄存器外,其余空间禁止用户使用,详细介绍参阅特殊寄存器指令说明。
通用寄存器区
在低128字节中,32个工作寄存器占用OOH-IFH单元,分为四组,构成通用寄存器区。每组由8个通用工作寄存器(RO~R7)组成。
厦门大学
10
厦门大学EDA实验室 8051技术手册
通过对PSW中的RSI和RSO的设臵可决定选用那一组工作寄存器。不用的工作寄存器区单元可以做一般的RAM使用。在某一时刻,CPU只能使用其中的一组,CPU复位后总是选中第0组工作寄存器。其作用就相当于一般微处理器中的通用寄存器。
位寻址区
内部RAM的20H-2FH空间为位寻址区。这16个字节单元具有双重功能。他们既可以象普通RAM单元一样按字节存取,也可以对每个RAM单元中的任何一位单独存取。
用户RAM区
用户RAM区设在O0OH~07FH低128字节和100H-3FF为用户RAM区,堆栈区也可以设在这里。O0OH~07FH低128字节用法和标准8051用法一样,100H-3FF为真正的用户RAM区。
特殊功能寄存器(SFR)区
128字节(080H~0FFH) RAM为特殊功能寄存器区。特殊
功能寄存器也称专用寄存器,专用于控制、管理片内逻辑部件、并行I/O口、串行I/O口、定时器/计数器、中断系统等功能单元的工作。用户在编程时可以臵数设定,而不能自由地移作他用。除程序计数器PC外,有21个特殊功能寄存器分散在80H-FFH的RAM空间中。其中只有字节地址能被8整除的特殊功能寄存器具有位寻址能力,共n个字节,83位。除其中的特殊寄存器外按规定使用外,其余空间禁止用户使用,FLASH功能寄存器区也在这里。详细介绍参阅特殊寄存器的指令说明。
Flashf8h f0h
控制8 b Flash控制9 Flash控制1 sbuf tmod sp e8h e0h acc d8h d0h psw c8h c0h b8h ip b0h p3 a8h ie a0h p2 98h scon 90h p1 88h tcon 80h p0 Flash控制10 Flash控制2 tl0 dpl Flash控制11 Flash控制3 tl1 dph Flash控制4 th0 Flash控制5 th1 Flash控制6 Flash控制7 pcon f7h efh e7h dfh d7h cfh c7h bfh b7h afh a7h 9fh 97h 8fh 87h ffh
片内高
厦门大学
11
厦门大学EDA实验室 8051技术手册
定时/计数器
内部设有两个可编程的16位定时/计数器,简称定时器
0(T0)和定时器1(T1)。它们各自由两个专用8位特殊功能寄存器组成,用于存放定时或计数初值。T0和T1均可用作定时控制、延时以及对外部事件计数。此外,还有两个特殊功能寄存器TCON和TMOD(控制寄存器和方式寄存器)。16位定时/计数器实质上是一个加1计数器。当定时/计数器工作在定时方式时,数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器增1,直至计满溢出。当定时/计数器工作在计数方式时,外部事件信号是通过引脚(P3.4成P3.5)输入的,计数器在每个机器周期采样外部输入信号,该信号的下降沿将触发计数。当定时/计数器被设定为某种工作方式后,它就会按设定的工作方式运行,不再占用CPU的操作时间,直到加1计数器计满溢出。溢出时,计数器回零,并臵位TCON中的TFO或TFI,以表示定时时间已到或计数值已满,向CPU发出中断申请。
中断
8051
8051有5个中断请求源,4个用于中断控制的特殊功能寄存器IE、IP、TCON、SCON,可提供两个中断优先级,实现两级中断嵌套。
厦门大学
12
厦门大学EDA实验室 8051技术手册
5个中断源对应5个固定的中断入口地址(矢量地址)。
serial port interrupt vectortimer 1 overflow interrupt vectorexternal interrupt vector 1timer 0 overflow interrupt vectorexternal interrupt vector 0reset vector0023h0018h0013h0008h0003h0000h
FLASH功能寄存器区(spi)
FLASH功能寄存器是本芯片的创新之处,由于本芯片是外接flash,程序数据是先烧录在外部flash里的,8051工作开始阶段会先从flash的前8K搬入数据到内部8K的sram里,之后把这8Ksram充当rom来正常工作,之后8051可对flash直接进行读写,擦除等操作,因此比标准8051多出spi的四个引脚(CS,SCK,MOSI,MISO),这四个引脚是用来直接挂载外部flash的,对flash的操作也是由这四个管脚直接进行的。
FLASH功能寄存器区也是分布在特殊功能寄存器区(sfr)里的,它所在的位臵为0F1,0F2,0F3,0F4,0F5,0F6,0F7,0F8,0F9,0FA,0FB十一个地址空间,共占11个字节。详细介绍请见FLASH功能寄存器指令说明。
厦门大学
13
厦门大学EDA实验室 8051技术手册
1.4 8051模块架构图
厦门大学
14
厦门大学EDA实验室 8051技术手册
1.5 管脚定义
48rst47P0.046P0.145P0.244P0.343P0.442P0.1P0.0P0.739test238test137cssckmosimisoALEVdd21234567101112P3.7/rdP3.6/wrP3.5/T1P3.4/T0P3.3/int1Vdd1Vss1XTAL1XTAL2P3.2/int0P3.1/TxdP3.0/RxdP2.7P2.63635343332313029282726258051Vss2ferrorClk_outP1.0P1.1P1.2P1.3P1.4P2.5P2.4P2.3P2.2P2.1P2.0P1.7P1.6P1.513
1415161718192021222324芯片管脚分布图
管脚说明
编号 模块名 信号名 功能描述 类型 有效电平 高 备注 48 全局信8 号 9 厦门大学
rst XTAL1 XTAL2 系统复位信号 输入 外部时钟晶振管脚1 输入 外部时钟晶振管脚2 输入 15
最高到50MHz 厦门大学EDA实验室 8051技术手册
21 22 23 24 25 26 27 28 40 41 42 43 44 45 46 47 13 14 15 16 17 18 厦门大学
P1.7 P1.6 P1.5 P1端口 P1.4 P1.3 P1.2 P1.1 P1.0 P0.7 P0.6 P0.5 P0端口 P0.4 P0.3 P0.2 P0.1 P0.0 P2.7 P2.6 P2端口 P2.5 P2.4 P2.3 P2.2 16
外部I/O口1 外部I/O口0 外部I/O口2 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 P2口是一个8位的准双向复用I/O端口,它是接外部ram时的高8位地址([15:8])的接口。 P0口是一个8位的准双向复用I/O端口,它是接外部ram时的低8位地址([7:0])的接口,也是外部ram输入/输出数据的接口。 P1口是一个8位的准双向I/O端口,是四个I/O端口中唯一一个没有第二功能的I/O端口。 厦门大学EDA实验室 8051技术手册
19 20 1 2 3 4 5 10 11 12 6 7 32 P3端口 P2.1 P2.0 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 VDD1 VSS1 VDD2 外部I/O口3 电源 3.3V电源 地 3.3V电源 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 双向端口 P3口是一个8位多功能双向I/O端口,它每位管脚都具有第二功能,P3口的第二功能见P3第二功能表。 31 VSS2 地 33 ALE 输出 29 时钟输出 clk_out 8051的工作时钟输出 输出 2组电源供电,一组给8051内部电路供电,一组给pin口驱动供电 低8位地址锁存使能输出端。当CPU访问外部存储器时,ALE可向低8位地址锁存器输出锁存控制信号。 把8051工作时的时钟直接输出,用于扩展功能。注意的是这里输出的不是外部的输入晶振的频率,而厦门大学 17
厦门大学EDA实验室 8051技术手册
37 CS 输出 36 SCK 输出 35 SPI接口 mosi 外接flash端口 输出 34 miso 输入 30 ferror 输出 38 39
测试管脚 test1 test2 设计时用作测试用途 是8051内部工作的频率,8051工作的频率是外部时钟频率的3/1。 接外部flash的CS端,用来控制flash的片选信号 接外部flash的SCK端,用来给外部flash提供时钟 接外部flash的D端,提供外部flash的数据输入 接外部flash的Q端,用来接收外部flash的数据传入 正常情况下,此管脚输出低电平,当对外部flash进行了非法操作时,此管脚输出高电平 程序设计时用来测试,用户无用途 3. 8051 CPU内核
厦门大学
18
厦门大学EDA实验室 8051技术手册
3.1 概述
8051 建立在oc8051的 CPU 内核上,经过大篇整幅与修改后,添加自主创新功能后实现的8 位处理器的,与标准8051 指令集兼容,并有扩充。外部主频可达50MHz,内部工作时钟频率是外部主频的1/3。该处理器采用哈佛结构,严格的把程序存储器和数据存储器区分开,二级(或三级)流水线的指令执行机制,独特的指令取指、译码和执行设计有助于提高指令执行效率,并降低 CPU 整机功耗。
片上包含 8KB 的指令sram。 用指令sram来充当rom,它的使用大大降低了平均指令读取速度。这里不允许使用I/O口外扩程序存储器。
片上包含1KB的数据ram,这里仍然使用sram,读取数据速度快,功耗低,并且可以用I/O口进行扩展ram空间。
本芯片采用的是二至三级流水,而标准的8051微控制器采用6级机器周期,这样执行一条指令至少需要12个时钟周期,采用两级流水,大部分指令可以在一个时钟之内完成。添加了一个延时寄存器,取指令进行译码时,把不需要的数据,如地址等延时一个时钟,这样保证了指令的两级至三级流水。 概况:
●基于复杂指令集架构 8 位处理器
●采用哈佛结构的 8 位指令总线和数据总线 ●支持外扩ram空间
●采用外接flash,来充当rom,并能对flash进行读写,擦除等操作
指令总线指令存储器CPU数据总线数据存储器
3.2 处理器寻址方式
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,所谓寻址,其实质就是如何确定操作数所在单元地址的问题。8051处理器有7 种基本寻址方式。
1.直接寻址方式:
所谓直接寻址,就是在指令中直接给出参与运算或传送的操作数据所在的ram单元的地址,即操作数直接以单元地址的形式出现
厦门大学
19
厦门大学EDA实验室 8051技术手册
在指令中。
例如:MOV 40H,A;
该指令的功能是将累加器A中的内容传送到内部ram 40H单元。若累加器A的内容为2CH,则执行该指令后内ram 40H单元的内容变为2CH。
注意:MCS-51的指令系统规定,按字节访问特殊功能寄存器只能用直接寻址方式。在指令中,特殊功能寄存器既可以单元地址的形式出现,也可以特殊功能寄存器名的形式出现。
例如:MOV A,P0 等同于
MOV A,80H
因为80H就是P0口的地址。
2.立即寻址方式:
所谓立即寻址方式,就是在指令中直接给出参与操作的数据本身,即操作数直接出现在指令中。这种形式的操作数被称作立即数,以在数据前加‚#‛号表示。
例如:
MOV A,#40H
该指令的功能是将立即数‚40H‛传送到累加器A。所以,指令执行后累加器A的内容为40H。
在指令系统中凡是用‚#data‛或‚#data16‛表示操作数都属于立即寻址。
含有立即寻址的指令,立即数同操作码一起存放在程序存储器中,可以立即参与指令所规定的操作。显然,这种寻址方式只适用于程序存储器。注意的是立即数不能作为目的操作数。
3.寄存器寻址方式:
所谓寄存器寻址,就是在指令中直接以寄存器的形式给出参与操作的数据,即操作数放在指定的寄存器中。寄存器寻址中的寄存器包含R0~R7、A、B、AB、DPTR等寄存器。
例如: MOV A,R3
该指令的功能是将当前工作寄存器R3的内容传送到累加器A。若R3的内容4FH,则执行该指令后累加器A的内容也变成4FH。
所谓寄存器间接寻址,就是在指令中所给定的寄存器存放的不是操作数本身,而是操作数所在内ram或外ram单元的地址,即操作数通过寄存器间接获得。为了与寄存器寻址
相区别,在寄存器名称前加上符号‚@‛表示间接寻址。可用于间接寻址的寄存器有R0、 Rl、SP及DPTR,其中的SP在间接寻址方
4.寄存器间接寻址方式:
厦门大学 20
厦门大学EDA实验室 8051技术手册
式中以隐含方式出现。
寄存器间接寻址方式适合于内部RAM低128个B(指示地址的寄存器为RO、R1或SP)和外部RAM(指示地址的寄存器为R0、R1或DPTR)。
假设R0的内容为65H,则指令 MOV A.@R0
的功能是以寄存器R0的内容‚65H‛为地址,将与该地址对应的内RAM单元中的数据送到累加器A。若内ram 65H单元的内容为60H,则执行该指令后,累加器A的内容即为60H。
5.变址寄存器间接寻址方式:
变址寄存器间接寻址方式又称基址+变址寻址方式,在指令中以‚@A+DPTR或‚@A+PC‛的形式出现。表示以数据指针DPTR或程序计数器PC的内容为基地址(16位),
以累加器A中的内容为地址偏移量(8位),二者之和即为操作数所在程序存储器单元的物理地址。
假设累加器A的内容为05H,DPTR的内容为0400H,程序存储器0405H单元的内容为2DH,则指令
MOVC A,@A+DPTR
执行后累加器A的内容为2DH。这种寻址方式只适用于程序存储器。
6.相对寻址方式:
所谓相引寻址,就是以PC的当前值为基准,加上指令中给出的相对偏移量‚rel‛,而形成有效的物理地址。需要注意的是,这里PC的当前值是指执行完本条指令后的PC值。
例如:
1000H: SJMP rel
该转移指令的操作码存放在1000H(该指令的源地址)单元,偏移量存放在1001H单元(设偏移量rel为50H),则取出指令操作码和偏移量后,PC将指向1002H单元,1002H即为PC的当前值。1002H与偏移量50H相加后,得到物理地址(即目标地址)1052H。
PC的当前值 = 源地址 + 转移指令字节数
目标地址 = PC的当前值 + rel = 源地址 + 转移指令字节数 + rel,
rel= 目标地址 - (源地址 + 转移指令字节数)
相对偏移量‚rel\"是一个8位带符号数,常以补码形式出现。如果计算所得rel是正数,则程序向下(地址增加方向,最大转移空间为127B)转移;若rel为负数,则程序是向上(地址减少方向,最大转移空间为128B)转移。
7.位寻址方式
该寻址方式可对内部RAM和特殊功能寄存器中的可位寻址位进行寻址,在指令中直接给出位地址。
位寻址的寻址空间为内RAM中位寻址区20H~2FH单元的128位(位地址为00H~7FH)及l1个特殊功能寄存器的83个可寻址位。
厦门大学
21
厦门大学EDA实验室 8051技术手册
例如:
MOV C,90H
该指令的功能是将P1.0(地址为90H)口的状态送位累加器C。 区分位地址与字节地址主要看指令是位操作指令还是字节操作指令。如果是位操作指令,则操作数中的地址一定是位地址,反之为字节地址。
3.3 指令系统分类
MCS-51指令系统共有111条指令。其中,单字节指令49条,双字节指令45条,只有17条是三字节指令。
MCS-51指令系统按功能可分为五大类:
①数据传送类指令(29条);
②算术运算类指令(24条);
③逻辑运算类指令(24条);
④控制转移类指令(17条);
⑤位操作类指令(17条);
3.4指令系统标识符
MCS-51单片机的指令系统采用了多种记忆符号(助记符),要
真正理解每一条指令,必须先了解各种助记符的意义。
●Rn:n=0~7,表示当前工作寄存器区的8个寄存器R0~R7。 ●@Ri:i=0、1,表示当前工作寄存器中可用于间接寻址的2个寄存器R0和R1。
●direct:表示内部ram单元的地址,取值为00H~7FH时对应内部RAM低128B单元;取值为80H~0FFH时,表示特殊功功能寄存器。
●@DPTR:表示以间接寻址方式出现的数据指针DPTR。 ●#data:出现在指令中的8位常数,也称8位立即数。
●#data16:出现在指令中的16位常数,也称l6位立即数。 ●addr11:11位目标地址。用在ACALL和AJMP指令中,可使程序转向与下条指令首字节位于同一2KB区域的任何单元。
●addr16:16位目标地址。用在LCALL和LJMP指令中,可使程序转向KB程序存储器的任何单元。
●rel:带符号的8位相对偏移量。用在SJMP和所有的条件转
厦门大学
22
厦门大学EDA实验室 8051技术手册
移指令中,可以使程序转向以下条指令的首字节为基址,以rel为偏移量的程序存储器单元,rel的取值范围在-128~ +127之间。
●bit:可直接寻址位的位地址。
●/bit:在位操作指令中,表示对该位(bit)先取反,然后再参与运算,但不改变指定位(bit)的原值。
●(x):表示x寄存器的内容或地址x的存储单元中的内容。 ●((x)):表示由间接寄存器x所间接寻址的存储单元的内容。 ●$:代表当前指令的首地址,通常用在相对转移指令中。可以组成表达式,如:$-3则指向以当前指令首地址为基础向前查第3个单元。
另外在注释中,常用箭头‚←‛表示数据传送方向;箭头右边为源操作数,一般表示到数字;箭头左边为目的操作数,表示到存储器单元或寄存器,不能表示到数字。
3.5 MCS-51单片机指令集
3.5.1.数据传送类指令
数据传送指令的基本助记符为‚MOV‛,通用格式如下:
MOV <目的操作数>,<源操作数>
数据传送指令的功能就是把由‚源操作数‛所指定的数据传送(实际上是复制)到‚目的操作数‛所指定的存储单元或寄存器中,而‚源操作数‛所指定的数据不变。
此类指令不影晌Cy. AC及OV标志,只影响奇偶标志P
3.5.1.1内部RAM单元之间的数据传送指令
内部RAM单元之间的数据传送通常是通过MOV指令来实现的,这类指令称为一般数据传送指令。
1.以累加器A为目的操作数的传送指令
MOV A, Rn ;A←(Rn)
MOV A, @Ri ;A←((Ri))
MOV A, direct ;A←(direct) MOV A, #data ;A←data
这组指令的功能是把源操作数所指定的数据送入累加器A,源操作数可以采用寄存器寻址、寄存器间接寻址、直接寻址和立即寻址方式。
2.以工作寄存器Rn(n=0~7)为目的操作数的传送指令
MOV Rn, A ;Rn←(A)
MOV Rn, direct ;Rn←(direct) MOV Rn, #data ;Rn←data
这组指令的功能是把源操作数所指定的数据送入当前工作寄存器区的某个寄存器。
厦门大学
23
厦门大学EDA实验室 8051技术手册
厦门大学
3.以间接寄存器为目的操作数的传送指令
MOV @Ri, A ;(Ri) ←(A)
MOV @Ri, direct ; (Ri) ←(direct) MOV @Ri, #data ;(Ri) ←data
这组指令的功能是把源操作数所指定的数据送入R0或Rl所指向的内RAM单元。
4.以直接地址为目的操作数的传送指令
MOV direct, A ;direct←(A) MOV direct, Rn ;direct←(Rn)
MOV direct, direct2 ;direct1←(direct2) MOV direct, @Ri ;direct←((Ri)) MOV direct, #data ;direct←data
这组指令的功能是把源操作数所指定的数据送入直接地址所对应的内RAM单元或SFR。这里再次强调direct表示内部RAM或SFR的字节地址。
5.以DPTR为目的操作数的传送指令
MOV DPTR, #data16 ;DPTR←data16
这条指令的功能是把16位立即数送入DPTR,这是整个指令系统中仅有的一条16位数据传送指令,使用该指令可为外部程序存储器或外部数据存储器建立一个地址指针。16位寄存器DPTR由DPH和DPL组成。这条指令执行的结果是把高8位立即数送入DPH,低8位立即数送入DPL。
3.5.1.2 栈操作指令
在MCS-51内部RAM区可以设定一个先进后出的区域作为一个堆栈,在特殊功能寄存器中有一个堆栈指针SP,它始终指向栈顶位臵。引入堆栈的目的,就是在子程序调用或中断时,保护和恢复现场数据及断点地址。在指令系统中有两条栈操作指令。
1.进栈指令
PUSH dircct ;SP←(SP)+1 (先变指针) ;(SP) ←(direct) (再压栈)
这条指令先对栈指针SP加1,然后将直接寻址的内RAM单元或SFR的内容传送到SP所指向的内部RAM单元。
2.出栈指令
POP dircct ;direct←((SP)) (先出栈) ;SP←(SP)-1 (再变指针)
这条指令先将堆栈指针SP指向的内部RAM单元的内容送入直接寻址的内RAM单元或SFR,再对栈指针SP减1。
24
厦门大学EDA实验室 8051技术手册
厦门大学
3.5.1.3数据交换指令
数据交换主要在内RAM和累加器A之间进行,有整字节和半字节两种交换指令。
1.整字节交换指令
XCH A,Rn XCH A,direct XCH A,@Ri
这组指令的功能是将累加器A的内容与源操作数所指定的数据进行交换。
2.低半字节交换指令
XCHD A,@Ri
这条指令的功能是将累加器A的低半字节(D3~D0)与由@Ri指定的内部RAM单元的低字节(D3~D0)交换,高半字节(D7~D4)保持不变。
3.高、低半字节互换指令
SWAP A
这条指令的功能是将累加器A的高半字节(D7~D4)和低半字节(D3~D0)交换。
3.5.1.4累加器A与外部RAM的数据传送指令
外部数据存储器与内部数据存储器的数据传送只能通过累加器A进行,且只能采用间接寻址方式。
1.读外部数据存储器或外部I/O口的指令
MOVX A, @Ri MOVX A, @DPTR
2.写外部数据存储器或外部I/O口的指令
MOVX @Ri, A ;(Ri) ←(A)
MOVX @DPTR, A ;(DPTR)←(A)
MCS-51指令系统中只有MOVX指令能够访问外部数据存储器,即只有这类指令能产生RD或WR信号。其中含有@Ri或@DPTR的指令用于访问外RAM单元或I/O口。
3.5.1.5 累加器A与ROM的数据传送指令(查表指令)
程序存储器属于只读类型,因此,有关程序存储器的指令只能实现单方向的数据传送,且只能采用变址寄存器间接寻址方式。
25
厦门大学EDA实验室 8051技术手册
1.基址寄存器为PC的查表指令
MOVC A, @A+PC ;A←((A)+(PC))
这条指令把PC作为基址寄存器,A的内容和PC的内容相加后得到一个16位的地址,然后将与该地址对应的程序存储器单元的内容送到累加器A。
需要注意的是,由于CPU在读取本条指令时,PC已执行加1操作,指向下一条指令的第一个字节,所以此时的PC值已不是原PC值,而是PC+1。例如,假设本指令的PC值为l000H,则作为基址寄存器的PC值为1001H。 这条指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。由于PC值已经确定,故查表范围只能由累加器A的内容决定,所以使用本指令的表格只能存放在该查表指令后面的256B范围内,这就使表格的地址空间分配和表格大小受到,而且表格只能被当前程序使用。
用@A+PC查表时,数据表应放在该指令附近,故称近程查表。
2.基址寄存器为DPTR的查表指令
MOVC A, @A+DPTR ;A←((A)+(DPTR)) 这条指令把DPTR作为基址寄存器,A的内容和DPTR的内容相加后得到一个16位的地址,然后将与该地址对应的程序存储器单元的内容送到累加器A。
这条查表指令的执行结果只和DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位臵可以在KB程序存储器中任意安排,一个表格可以被多个程序模块共享。
用@A+DPTR查表时,数据表可放在ROM的KB任何空间,故称远程查表。
3.5.2 算术运算类指令
算术运算类指令共24条,包括加、减、乘、除4种最基本的算术操作。这4种指令能对8位无符号数直接进行运算;借助溢出标志,可对带符号数进行补码运算;借助进位标志,可实现多字节加减运算;借助调整指令,也可对压缩BCD码进行运算。
3.5.2.1加法指令
MCS-51的指令系统只有8位数据的加法运算指令,包括半加、全加及增量运算。
1. 不带进位的加法指令(半加)
不带进位的加法运算相当于数字电路中半加器,参与运算的数据只有被加数和加数,而不考虑低位的进位,指
厦门大学
26
厦门大学EDA实验室
厦门大学
8051技术手册
令格式如下:
ADD A, Rn ;A←(A)+(Rn)
ADD A,@Ri ;A←(A)+((Ri)) ADD A, direct ;A←(A)+((direct)) ADD A, #data ;A←(A)+data
这组指令的功能是完成两个8位二进制数的加法运算,且被加数总在累加器A中,而加数可由不同的寻址方式得到,其运算结果仍放在累加器A中。
加法运算影响PSW所有运算标志位(Cy、AC、P及OV)的状态。如果位3(即D3,右边第4位)有进位产生,则半进位标志AC臵1,否则AC清零;如果位7(即D7,最高位)有进位产生,则Cy臵1,否则Cy清零。 若参与运算的数据为无符号数,则和数可表示的数值范围为0~255,超出此范围则溢出,具体由Cy来标识,进位标志(Cy)=1,表明运算结果大于255。
2.带进位加法指令(全加)
带进位的加法运算相当于数字电路中的全加器,参与运算的数据除了被加数和加数以外,还要考虑低位的进位,指令格式如下:
ADDC A,Rn ; A←(A)+(direct)+(Cy) ADDC A,@Ri ;A←(A)+((Ri))+(Cy)
ADDC A,direct ;A←(A)+(direct)+(Cy) ADDC A,#data ; A←(A)+#data+(Cy)
这组指令常用于多字节无符号数据的加法运算。
3. 加1指令
加1运算又称增量运算,包括5条指令: INC A ;A←(A)+1 INC Rn ;Rn←(Rn)+1
INC direct ;direct←(direct)+1 INC @Ri ;(Ri) ←((Ri))+1 INC DPTR ;DPTR←(DPTR)+1
这组指令的功能是对累加器、寄存器、内部RAM单元或数据指针进行加1操作。加1指令的操作不影响标志位的状态(除‚INC A‛影响P标志外)。
加1指令和后面将要介绍的减1指令主要用在循环结构的程序中,方便调整循环变量。
4. 十进制调整指令
DA A ;A←(A)(BCD码调整后)
本指令的功能是对两个BCD码数的和(存放于A中)进
27
厦门大学EDA实验室 8051技术手册
行十进制调整,使A中的结果也为BCD码数。 i 由于算术逻辑单元ALU只能作二进制运算,如果进行BCD码运算需对结果进行修正,否则,就会出现错误。要进行修正,只需在加法指令之后紧跟一条这样的指令,即可根据标志位Cy、AC和累加器的内容对结果自动进行调整,使之成为正确的BCD码形式。 调整规则是:
●若累加器的低半字节>9或(AC)=l,则对累加器加06H修正。
●若累加器的高半字节>9或(Cy)=1,则对累加器加60H修正。
●若累加器的高半字节≥9或(Cy)=l,低半字节>9或(AC)=l,则对累加器加66H修正。
注:DA A指令只能用在加法指令(ADD或ADDC)之后,它不能简单地把A中的16进制数变换成BCD码。 DA A指令只影响Cy,不影响OV。
在指令书写时,BCD码数要加1(如上述的56及67要写成56H和67H),因为BCD码数本身就是用二进制形式表示的十进制数。
3.5.2.2减法指令
MCS-51的指令系统只有8位数据的减法运算指令,且只有全减和减量运算。
1.带借位减法指令(全减)
带进位的减法运算相当于数字电路中的全减器,参与运算的数据除了被减数和减数以外,还要考虑低位的借位,指令格式如下:
SUBB A,Rn ;A←(A)-(Rn)-(Cy) SUBB A,@Ri ;A←(A)-(Ri)-(Cy)
SUBB A,direct ;A←(A)-(direct)-(Cy) SUBB A,#data ;A←(A)-data-(Cy)
这组指令的功能是从累加器A中减去由不同寻址方式确定的擞作数及进位标志,结果仍在累加器A中。指令执行后将影响Cy、AC、OV及P标志,根锯这些标志可分析两数差值情况:
①两个无符号数相减时,若(Cy)=l,表明被减数小于或等于减数,此时必须将累加器A中值连同借位一并考虑才能得到正确结果。
②两个带符号数相减时,若(OV)=0表明没有发生溢出;若(OV)=1,表明发生溢出。
2.减1指令
减1又称减量运算,包括4条指令:
厦门大学
28
厦门大学EDA实验室 8051技术手册
DEC A ;A←(A)-1 DEC Rn ;Rn←(Rn)-1
DEC @Ri ;(Ri) ←((Ri))-1
DEC direct ;direct←(direct)-1
这组指令的功能是对累加器、寄存器以及内RAM单元的内容减l。若原数据为00H,减1后下溢为0FFH。该组指令不影响标志位(除“DEC A”影响P标志位外)。
3.5.2.3乘法指令
MCS-51的指令系统只有一条乘法运算指令,且只能进行8位无符号数的乘法运算,指令格式如下: MUL AB ;A←(A)×(B)低字节,B←(A)×(B)高字节
该指令的功能是把累加器A和寄存器B中的两个8位无符号数相乘,乘积又送回到A、B。其中B中存放积的高位字节,A存放积的低位字节。若乘积大于0FFH,即B中非0,则溢出标志(OV)=1,否则(OV)=0。乘法运算总对Cy清零,但不影响其他标志位。
3.5.2.4除法指令
MCS-51的指令系统只有一条除法运算指令,同乘法指令类似,只能进行8位无符号数的除法运算,指令格式如下: DIV AB ;A←(A)/(B)(商),B←(A)/(B)(余数) 该指令是把A中的8位无符号数除以B中的8位无符号数,商存放在A中,余数存放在B中。若除数为0,执行该指令后结果不定,并将OV臵l,否则(OV)=0。 Cy在除法运算中总为0。
3.5.3 逻辑操作类指令
逻辑操作指令共24条,所有指令均按位操作,无进位,一般不影响标志位。
3.5.3.1单操作数逻辑运算指令
单操作数逻辑运算指令都是针对累加器A的操作指令,执行后影响P标志.其中带进位循环移位指令还影响Cy标志。 累加器A清0指令 CLR A ;A←0 累加器A求反指令 CPL A ;A←(/A) 累加器A循环左移指令
厦门大学
29
厦门大学EDA实验室 8051技术手册
RL A ;A7←A6←…←A0←A7
用该指令连续移4次,效果同指令“SWAP A”。
另外,当A的最高位(D7)为0时,执行一次RL指令相当与对A进行一次乘2操作。
累加器A带进位循环左移指令
RLC A ;Cy←A7←A6←…←A0←Cy 累加器A循环右移指令
RR A ;A0←A7←…←Al←A0 当A的最低位(DO)为0时,执行一次RR指令相当于对A进行一次除2操作。
累加器A带进位循环右移指令
RRC A ;Cy←A7←A6←…←A0←Cy
利用求反指令,还可进行求补运算(即求反加1)。
3.5.3.2双操作数逻辑运算指令
双操作数逻辑运算指令可进行8位无符号二进制数的逻辑“与”、“或”及“异或”运算。
1.逻辑“与”指令
ANL A, Rn ; A←(A)/\\ (Rn) ANL A, @Ri ;A←(A)/\\((Ri))
ANL A, direct ; ;A← (A)/\\(direct) ANL A, #data , ;A←(A) /\\data
ANL direct, A ;direct←(direct)/\\(A)
ANL direct, #data ; direct←(direct)/\\data 这组指令的功能是:两个操作数按位进行逻辑“与”运算,并将结果存入A(前4条指令)或直接寻址的内RAM单元(后2条指令)。
与运算的规则是:相应位“见0为0,全1为1”。
2.逻辑“或”指令
ORL A,Rn ;A←(A)\\/(Rn) ORL A,@Ri ;A←(A)\\/((Ri))
ORL A,direct ;A←(A)\\/(direct) ORL A,#data ;A←(A)\\/data
ORL direct,A ;direct←(direct)\\/(A)
ORL direct,#data ;direct←(direct)\\/data
这组指令的功能是:两个操作数按位进行逻辑“或”运算,并将结果存入A(前4条指令)或直接寻址的内RAM单元(后2条指令)。
或运算的规则是:相应位“见1为1,全0为0”。 3.逻辑“异或”指令
XRL A,Rn ;A←(A)⊕(Rn) XRL A, @Ri ; A←(A)⊕((Ri))
厦门大学
30
厦门大学EDA实验室 8051技术手册
XRL A, direct ; A←(A)⊕(direct) XRL A, #data ; A←(A)⊕data
XRL direct, A ; direct←(direct)⊕(A) XRL direct, #data ; direct←(direct)⊕data
这组指令的功能是:两个操作数按位进行逻辑“异或”运算,并将结果存入A(前4条指令)或直接寻址的内RAM单元(后2条指令)。 异或运算的运算规则是:对应位“相同为0,不同为l”,据此可用异或指令判断两数是否相等。
3.5.4 控制转移类指令
计算机的程序一般是按顺序执行的(由PC自动加1实现),但有时因为任务要求,也可以用控制转移类指令改变程序的执行顺序。
MCS-5l的控制转移类指令共17条,包括条件转移指令、无条件转移指令及子程序调用与返回指令。
3.5.4.1无条件转移指令
不规定条件的转移指令称为无条件转移指令。MCS-51共有4条无条件转移指令:
1.长转移指令
LJMP addr16 ; PC←addr16
指令执行时把16位目标地址(addrl6)直接送给PC,从而实现程序转移。本指令转移范围覆盖整个程序存储器空间。
在实际使用时,addr16常用符号地址(其他指令的标号)表示。
2.绝对转移指令
AJMP addr11 ;PC←(PC)+2,PC10~0←addr10~0,PC15~11不变
指令执行时,PC(加2修改后的值)的高5位与指令中的11位地址拼接在一起共同形成l6位的目标地址,从而达到在现行地址所在2KB的范围内转移。
在实际使用时,addrll常用符号地址(其他指令的标号)来代替,此时就要注意所引用的标号必须与该指令下面第一条指令处于同一个2KB范围内,否则会发生地址溢出错误。
由于MCS-51程序存储器最大寻址范围是KB,所以可划分为32个2KB区域,每个2KB区域均按xOOOH~x7FFH或x800H~xFFFH的规律进行分配(其中x取0--F)。AJMP指令的作用范围只能在当前2KB区域。
厦门大学
31
厦门大学EDA实验室 8051技术手册
3.短转移指令
SJMP rel ;PC←(PC)+2,PC←(PC)+rel 该指令的功能是根据指令中给出的相对偏移量rel,计算出程序将要转移的目标地址:
目标地址=源地址(本指令所在地址)+2+rel。
由于相对偏移量rel是一个用补码形式表示的8位带符号的数,所以该指令只能控制程序以当前PC为基础,向上(PC减小的方向)转移128B以内,或向下(PC增加的方向)转移127B以内。
在实际使用时,rel常用符号地址(其他指令的标号)来表示,此时应该注意程序转移范围不能超出上述规定.否则就会出现地址溢出错误。
在实际应用中常使用该指令完成程序‚原地踏步‛功能,指令形式如下: SJMP $
其中的‚$\"表示当前指令的地址。
4.间接转移指令
JMP @A+DPTR ;PC←(A)+(DPTR)
这条指令的功能是把累加器中的8位无符号数与数据指针DPTR的16位数相加,结果作为目标地址,指令执行后不改变A和DPTR的内容,也不影响标志。 该指令可根据A的内容迸行跳转,而A的内容又可随意改变,故可形成程序分支。本指令跳转范尉为KB。
3.5.4.2条件转移指令
所谓条件转移是指程序的转移是有条件的,当条件满足时,就按指令给定的相对偏移量进行转移;否则,程序顺序执行。
MCS-51的条件转移指令的转移范围同SJMP指令。条件转移指令有以下几类: 1.累加器判零转移指令
JZ rel ;若(A)=0,则PC←(PC)+rel+2;否则,PC←(PC)+2
JNZ rel ;若(A)≠O,则PC←(PC)+rel+2;否则,PC←(PC)+2
这两条指令以累加器A的内容是否为0作为转移的条件。
2.比较不相等转移指令
CJNE A, #data, rel ;若(A)=data,则PC←(PC)+3,且(Cy)=0; ;若(A)>data,则
厦门大学
32
厦门大学EDA实验室 8051技术手册
3.5.4.3 厦门大学
PC←(PC)+rel+3,且(Cy)=0; ;若(A)CJNE A,direct, rel ;若(A)=(direct),则PC←(PC)+3,且(Cy)=0; ;若(A)>(direet),则PC←(PC)+rel+3,且(Cy)=0; ;若(A)<(direct),则PC←(PC)+rel+3,且(Cy)=l; CJNE Rn,#data,rel ;若(Rn)=data,则PC←(PC)+3,且(Cy)=0; ;若(Rn)>data,则PC←(PC)+rel+3且(Cy)=0; ;若(Rn) CJNE @Ri,#data,rel ;若((Ri))=data,则PC←(PC)+3,且(Cy)=0; ;若((Ri))>data,则PC←(PC)+rel+3且(Cy)=0; ;若((Ri)) 这组指令的功能是比较两个操作数(无符号数)是否相等,若两数不相等则转移;若相等,则顺序执行下一条指令。如果第一操作数≥第二操作数,则(Cy)=0;反之,若第一操作数<第二操作数,则(Cy)=l。指令的执行结果不影响任何一个操作数的内容。 3.减1不为0转移指令 DJNZ Rn, rel ;Rn←(Rn)-l ;若(Rn)≠0,则PC←(PC)+rel+2 ;若(Rn)=0,则(PC) ←(PC)+2 DJNZ direct, rel ;direct←(direct)-l ;若(direct)≠0,则PC←(PC)+rel+3 ;若(direct)=0.则(PC) ←(PC)+3 这组指令对控制己知循环次数的循环过程十分有用:指定任何一个工作寄存器Rn或RAM单元direct为循环变量,对循环变量赋予初值以后,每完成一次循环,循环变量自动减1,直到循环变量减为0时循环结束。 子程序调用与返回指令 子程序是程序设计中常用的一种结构,为了缩短程序、节省存储空间,常常把逻辑上相对或具有通用意义的某段程序编写成子程序,当某个程序(可以是主程序或子程序)需要引用该子程序时,只需通过子程序调用指令即可转向子 33 厦门大学EDA实验室 厦门大学 8051技术手册 程序,而当子程序执行完毕,又需要通过子程序返回指令把程序的执行流程引导到调用程序中继续执行。 在调用子程序过程中需要解决两个方面的问题: ①保护断点 所谓断点是指取出调用指令后当前PC的内容,即调用指令下面第一条指令的首地址。为了使子程序执行之后能正确返回,需要把断点送入堆栈保存,当子程序执行完毕,再从堆栈中取出该断点送回PC,继续执行原来的程序。 ②建立子程序入口 子程序入口是指子程序中第一条指令的首地址,这个地址实际上就是调用指令转向的目标地址:在执行调用指令时,需将子程序的入口地址送入程序计数器PC,以便执行子程序。 为了实现子程序的调用与返回,MCS-51提供了两条调用指令和两条返回指令。 1,绝对调用指令 ACALL addr1l ;PC←(PC)+2 ;SP←(SP)+1,(SP) ←(PCL) ;SP←(SP)+1,(SP) ←(PCH) ;PC10~0←addr10~0 该指令为双字节指令,执行该指令后,PC自动加2指向下一条指令的首地址(断点地址),然后将PC的值压栈保护(先压低字节,后压高字节),接着将目标地址的低1 1位(addr10~0)送PC的低11位与PC的高5位拼成一个新的地址即子程序入口地址,从而使程序转到被调用的子程序处去执行。 ACALL指令与AJMP指令类似,由于指令中只给出11位目标地址,所以只能在当前2KB区域内调用,否则将引起程序转移混乱。如果ACALL指令正好落在当前2KB区域的最后两个单元内,程序就转移到下一个2KB区域。因为在 行调用操作之前PC先加了2。 该指令的优点是长度短(双字节),执行速度快。 2.长调用指令 LCALL addr16 ;PC←(PC)+3 ;SP← (SP)+1, (SP) ←(PCL) ;SP← (SP)+1, (SP) ←(PCH) ;PC←addrl6 该指令为3字节指令,执行时PC首先自动加3,指向下一条指令的首地址,然后将该地址压栈保护(先压低字节,后压高字节),接着将16位目标地址addr16送入PC,从而使程序转向被调用的子程序。 该指令提供16位目标地址,可调用KB范围内的 34 厦门大学EDA实验室 8051技术手册 子程序,但比ACALL指令多占一个字节,多用对节省存储空间不利。 在实际应用时,addr 16常用符号地址(即子程序名,也就是被调用子程序第一条指令的标号)表示。 3.一般子程序返回指令 RET ;PCH←((SP)), SP←(SP)-1 ;PCL←((SP)), SP←(SP)-1 当程序执行到本指令时,自动从堆栈中取出断点地址送给PC,然后返回调用指令(AC ALL或LCALL)的下一条指令处(断点)继续往下执行。 4.中断子程序返回指令 RETI ;PCH←((SP)),SP←(SP)-1 ;PCL←((SP)),SP←(SP)-l 该指令与RET指令功能基本相同,除此之外RETI在返回断点的同时,还要释放中断逻辑以接受新的中断请求。中断服务程序必须用RETI返回。 RET指令和RETI指令为子程序的最后一条指令。 3.5.4.4空操作指令 空操作指令是唯一的一条不使CPU产生任何操作的控制指令,其格式为: NOP ;PC←(PC)+1 NOP指令的功能是使程序计数器PC加1,在执行时间上消耗12个时钝周期,因此常用NOP指令实现等待或延时。 3.5.5 布尔(位)操作类指令 MCS-51单片机的一大特点是在硬件结构中有一个布尔处理机,对应这个布尔处理机,指令系统中设计了处理布尔变量的指令子集,这是该指令系统的重大特色。在布尔处理机中,借用进位标志Cy来存放逻辑运算结果,大部分操作都涉及到Cy,因此,它相当于布尔处理机的‚累加器‛,称‚位累加器‛,用符号C表示。位操作指令以位(bit)为单位进行运算和操作。 位操作指令共17条,所有的位操作指令均采用位寻址方式,在指令中位地址可用四种方式表示: ①直接位地址方式,如:标志位F0的位地址为0D5H; ②点操作符表示方式。用操作符‚.‛将具有位操作功能单元的字节地址或寄存器名与所操作的位序号(0~7)分隔。 厦门大学 35 厦门大学EDA实验室 8051技术手册 例如:PSW.5,说明是程序状态字的第五位即F0; ③位名称方式。在指令中直接采用位定义名称,这种方式只适合于可以位寻址的特殊功能寄存器。例如:F0; ④标号表示(自定义地址)方式。如用伪指令BIT定义‚L1 BIT PSW.5‛,经定义后,允许指令中用Ll代替PSW.5。 3.5.5.1 位传送指令 位传送指令有2条,指令格式为: MOV C,bit ;Cy←(bit) MOV bit,C ;bit←(Cy) 这组指令的其中一个操作数必须是进位标志C,另一个可以是位地址(用bit表示)。 例如: MOV C,ACC.7 ;将ACC中的最高位送给Cy 3.5.5.2 位置位和复位指令 位臵位和复位指令各有2条,指令格式为: 1.位置位指令 SETB C SETB bit 2.位复位指令 ;Cy←l ;bit←1 CLR C ;Cy←0 CLR bit ;bit←0 采用这类指令可以对布尔累加器C和指定位臵1或清零。 例如: SETB Pl.0 ;可使P1.0臵1 CLR Pl.0 ;可使P1.0清零 3.5.5.3位逻辑运算指令 位逻辑运算指令包括‚与‛、‚或‛、‚非‛三种,指令格式为: 1.位逻辑“与”指令 ANL C, bit ;Cy←(Cy)/\\(bit) ANL C, /bit ;Cy←(Cy)/\\(bit) 这组指令的功能是:如果直接寻址位的布尔值是0,则Cy清‚0\",否则Cy保持不变。 注意:bit前的斜杠表示对(bit)求反,求反后再与Cy的内容进行逻辑操作,但并不改变bit位原来的值。 2.位逻辑“或”指令 ORL C, bit 厦门大学 ;Cy←(Cy)\\/(bit) 36 厦门大学EDA实验室 8051技术手册 ORL C,/bit ;Cy←(Cy)\\/(bit) 这组指令的功能是:如果直接寻址位的布尔值是l,则Cy臵‚1‛,否则Cy保持不变。 3.位逻辑“非”指令 CPL C ; Cy←(Cy) CPL bit ; bit←(bit) 3.5.5.4位条件转移指令 位条件转移类指令有以下几种: 1.位累加器Cy状态判断转移指令 JC rel ;若(Cy)=l,则PC←(PC)+rel+2,否则,PC←(PC)+2 JNC re1 ;若(Cy)=0,则PC←(PC)+rel+2,否则,PC←(PC)+2 这组指令通常与CJNE指令一起使用,可以比较出两个数的大小,从而形成大于、小于、等于三个分支。 2.位状态判断转移指令 JB bit,rel ;若(bit)=1,则PC←(PC)+rel+3,否则PC←(PC)+3 JNB bit,rel ;若(bit)=0,则PC←(PC)+rel+3,否则PC←(PC)+3 JBC bit,rel ;若(bit)=1,则PC←(PC)+rel+3,且bit←0,否则,PC←(PC)+3 3.5.6 伪指令 在用汇编语言进行程序编写时,除了使用其指令系统规定的指令外,还要用到一些伪指令。伪指令与指令的概念不同,伪指令是用来指示与控制汇编过程的一些命令,形式上与一般指令相似,但并不产生机器代码。它仅起汇编命令作用,为汇编程序提供必要的控制信息。 如:为程序指定首地址,给标号赋值,把一些数据放入存储区等等。这类指令不影响汇编语言源程序的功能,因而称为伪指令。下面介绍几种常用的伪指令: 1.起始伪指令ORG(Origin) 格式: [标号:] ORG 地址表达式 功能:规定程序块或数据块存放的起始位臵。 一般来说,在一个汇编语言源程序的开始,都要安排一条ORG指令来指定该程序在程序存储器中的起始位臵。若省略ORG,则表示该程序存放在程序存储器以0000H为首的单元中。 厦门大学 37 厦门大学EDA实验室 厦门大学 8051技术手册 一个汇编语言源程序可使用多条ORG指令,以规定不同程序段或数据段存放的起始位臵。使用多条ORG指令时,既要保证ORG指令后所跟数值按升序分布,又要保证各程序段不会出现地址重叠。 2.结束伪指令END 格式: [标号:] END [地址或标号] 功能:用来指示汇编语言源程序段至此结束。END前后的标号或地址可有可无。 在一个整个源程序的最后都要写上END指令,当汇编程序汇编到END指令时,自动结束对本程序的处理。 3.字符赋值伪指令EQU(Equate) 格式: 字符 EQU 表达式 功能:将表达式的值(数据或地址)赋值给指定的字符。某字符一旦由EQU指令赋值,在本程序任意位臵就可以引用该字符。 4.位地址符号赋值伪指令 格式: 位地址符号 BIT 位表达式 功能:将位表达式的值(位地址)赋给指定的位地址符号。 将两个位地址P0.1和P0.2分别赋给两个符号A1和A2,在汇编时Al和A2就可当作P0.1和P0.2来使用。 5.字节定义伪指令DB(Define Byte) 格式: [标号:] DB 字节数据表 其中字节数据表可以是一个或多个字节数据、ASCII码字符、或表达式,各字节数据之间用半角逗号‚,‛隔开,第一个数据与DB之间至少用一个空格隔开,最后一个数据后不能带逗号。 功能:将字节数据表中的数据按从左至右的顺序依次存放在指定的存储单元中,一个数据占用一个存储单元。例如: ORG 0100H TAB: DB 94,01H,09,‘$’ 上述程序中,ORG指定了标号TAB的值为0100H,DB伪指令将其后5B依次放入以0100H为首址的连续5个单元中。 38 厦门大学EDA实验室 8051技术手册 6.字定义伪指令DW (Define Word) 格式: [标号:] DW 字数据表 DW的功能与DB相似,其区别在于DB定义的是一个字节,而DW定义的是一个字,即2B。一个字数据占用两个连续的存储单元,高8位存入低地址单元,低8位存入高地址单元。 7.定义空间伪指令DS 格式: [标号:] DS 表达式 该指令用来定义从指定地址开始,需要保留多少个存储单元作为备用的空间,并以数字‚00H‛填充。 3.6 8051寄存器 本章节介绍8051内部的寄存器组,8051有一系列的特殊功能寄存器(SFRs),下表是SFRs和他们所对应的地址: ACC 累加器A 0E0H B B寄存器 0F0H PSW 程序状态字 0D0H SP 堆栈指针 81H DPTR 数据指针 DPL 低字节 82H DPH 高字节 83H P0 P1 P2 P3 IP IE TMOD TCON TH0 TL0 TH1 TL1 端口0 端口1 端口2 端口3 中断优先级控制器 中断使能控制器 计时/计数模式控制器 计时/计数控制器 计时/计数0高字节 计时/计数0低字节 计时/计数1高字节 计时/计数1低字节 80H 90H 0A0H 0B0H 0B8H 0A8H H 88H 8CH 8AH 8DH 8BH 厦门大学 39 厦门大学EDA实验室 8051技术手册 FLASH控制寄存器 SPI接口寄存器 0F1H~0FBH 寄存器列表 3.6.1 RAM的划分 8051的片内存储器(RAM)有1K的空间大小,可外接扩展成K的寻址空间,在这1K的空间里,并不是所有的空间都是用到的,而且有些地址空间留给8051特殊用途,用户尽量不要使用。8051特殊用途的寄存器在RAM的256B单元内(000H~0FFH),其中的高128B字节为特殊功能寄存器区,这128B字节的空间,用户是禁止使用的。整个片内RAM区的分布如下图: 7FH ↑ 30H 2FH ↑ 20H 1FH R7 ↑ ↑ 18H R0 17H R7 ↑ ↑ 10H R0 0FH R7 ↑ ↑ 08H R0 07H R7 ↑ ↑ 00H R0 FFH F0H 厦门大学 40 用户RAM区 (用作堆栈、数据缓冲) 位寻址区 (位地址为00H~7FH) 第3组通用寄存器区 (RS1,RS0=11) 第2组通用寄存器区 (RS1,RS0=10) 第1组通用寄存器区 (RS1,RS0=01) 第0组通用寄存器区 (RS1,RS0=00) B 厦门大学EDA实验室 厦门大学 8051技术手册 E0H ACC D0H PSW B8H IP B0H P3 A8H IE A0H P2 99H SBUF 98H SCON 90H P1 8DH TH1 8CH TH0 8BH TL1 8AH TL0 H TMOD 88H TCON 87H PCON 83H DPH 82H DPL 81H SP 80H P0 3FFH ↑ 用户RAM区 41 厦门大学EDA实验室 8051技术手册 1FFH 1. 片内数据存储器低128B 片内数据存储器低128B按用途不同又分为三个区域: (1)通用寄存器区 00H~1FH共32个单元为通用寄存器区,分4组,每组有8个8位的寄存器R0~R7。下表为通用工作寄存器的地址表。 任意时刻CPU只能选用四个工作寄存器组中的一组为当前工作寄存器组。因此四组寄存器都用R0~R7表示,不会发生冲突。未被选中的工作寄存器区的各个单元,可以作为一般的数据缓冲器使用。 CPU当前使用的工作寄存器区是由程序状态字(PSW)的RS1和RS0设臵决定的,PSW中这两位状态和所使用寄存器对应关系参阅下表。通过编程修改PSW中的RS1和RS0两位的状态,就能任选一个工作寄存器区作为当前工作寄存器区。 0区 (RS1=0,RS0=0) 寄存对应RAM地址 器 00H R0 01H R1 02H R2 03H R3 04H R4 05H R5 06H R6 07H R7 1区 2区 3区 (RS1=0,RS0=1) (RS1=1,RS0=0) (RS1=1,RS0=1) 寄存寄存对应RAM地址 器 对应RAM地址 器 对应RAM地址 08H R0 10H R0 18H 09H R1 11H R1 19H 0AH R2 12H R2 1AH 0BH R3 13H R3 1BH 0CH R4 14H R4 1CH 0DH R5 15H R5 1DH 0EH R6 16H R6 1EH 0FH R7 17H R7 1FH 单片机复位后自动选择工作寄存器0区 (2)位寻址区 寄存器 R0 R1 R2 R3 R4 R5 R6 R7 内部RAM的20H~2FH为位寻址区域。这16个单元(共 厦门大学 42 厦门大学EDA实验室 8051技术手册 字节地址 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 2AH 2BH 2CH 2DH 2EH 2FH D7 07H 0FH 17H 1FH 27H 2FH 37H 3FH 47H 4FH 57H 5FH 67H 6FH 77H 7FH D6 06H 0EH 16H 1EH 26H 2EH 36H 3EH 46H 4EH 56H 5EH 66H 6EH 76H 7EH 16×8=128位)的每一位都有一个地址,称为位地址。它们占据位地址空间的00H~7FH,地址分配见下表。这16个单元的每一位都可以看作一个软件触发器,用于存放各种程序标志、位控制变量。同样,位寻址区的RAM单元也可以作为一般的数据缓冲器使用。 位地址 D5 D4 D3 D2 D1 D0 05H 04H 03H 02H 01H 00H 0DH 0CH 0BH 0AH 09H 08H 15H 14H 13H 12H 11H 10H 1DH 1CH 1BH 1AH 19H 18H 25H 24H 23H 22H 21H 20H 2DH 2CH 2BH 2AH 29H 28H 35H 34H 33H 32H 31H 30H 3DH 3CH 3BH 3AH 39H 38H 45H 44H 43H 42H 41H 40H 4DH 4CH 4BH 4AH 49H 48H 55H H 53H 52H 51H 50H 5DH 5CH 5BH 5AH 59H 58H 65H H 63H 62H 61H 60H 6DH 6CH 6BH 6AH 69H 68H 75H 74H 73H 72H 71H 70H 7DH 7CH 7BH 7AH 79H 78H (3) 用户RAM区 30H~7FH和1FFH~3FFH为真正的数据缓冲区,可用来暂存用户数据或当作堆栈使用。 在微机中,堆栈是在内存RAM中开辟的一个特定的存储器,专门用来暂时存放数据或断点地址,并按照‚先进后出(FILO:First-In Last-Out),后进先出(LIFO:Last-In First-Out)‛的原则进行操作。 MCS-51单片机的堆栈,是在片内RAM低128B中开辟的一个专用区(一般选择30H~7FH,无外接RAM时,也可用1FFH~3FFH区)。堆栈操作示意图如下图所示。堆栈的一端是固定的,称为栈底;另一端是浮动的,称为栈顶。当堆栈中没有数据时,栈顶与栈底重合。当数据进栈时,栈顶会自动的向地址递增的方向变化。一般把堆栈中的数据称为元素,最后进栈的那个元素所在地址就是栈顶。由于堆栈元素的存入和取出必须遵循FILO和LIFO的原则,因此堆栈的操作总是对栈顶进行的。 2.片内数据存储器80H~FFH MCS-51单片机内部的I/O口锁存器、串行口数据缓冲器、定时器/计数器以及各种控制寄存器和状态寄存器等统 厦门大学 43 厦门大学EDA实验室 8051技术手册 称为特殊功能寄存器,简称为SFR MCS-51共有21个SFR,它们离散的分布在片内RAM地址为80H~FFH的128B区域,且每一个SFR都有一个字节地址,并定义了符号名,其地址分布见下表。21个SFR并未完全占满128个单元,指令访问未被占用的单元,其操作将是无意义的。对SFR的访问只能采用直接寻址方式。 在21个SFR中,字节地址的低位为8和0的SFR的每一位都具有位地址,可进行位寻址,且大多数可位寻址SFR的每一位都有一个位名。 下面介绍部分SFR的功能 (1)累加器ACC 累加器是8位的寄存器,是最重要的特殊功能寄存器,许多指令的操作数取自ACC,大部分运算结果也存放在ACC中。在指令系统中,累加器ACC的助记符常记为A。 (2)寄存器B 寄存器B是8位寄存器,主要用于乘法和除法操作指令。对于其他指令,寄存器B可作为一般数据寄存器使用。 (3)堆栈指针SP 堆栈指针SP是一个8位寄存器,用它存放栈顶的地址。进栈时,SP自动加1,将数据压入SP所指向的单元;出栈时,则将SP所指向单元的内容弹出,然后SP自动减1。因此,SP总是指向栈顶。 系统复位后,SP被初始化为07H,所以第一个压入堆栈的数据存放到08H单元,即栈区为从07H单元开始的连续存储单元。由于08H~1FH单元为工作寄存器区1~3,20H~2FH为位寻址区,在程序设计中很可能要用到这些单元,所以用户在编程时最好把SP的值改为30H或更大值,以免栈区与要使用的工作寄存器区或位寻址区发生冲突,造成数据混乱。栈区的大小可用‚深度‛表示,用户在设定堆栈时应该考虑到堆栈的深度,以便能满足子程序嵌套时的需要。 寄存器 B ACC PSW IP E7H D7H Cy BFH - 厦门大学 D7 F7H D6 F6H E6H D6H AC BEH - D5 F5H E5H D5H F0 BDH - 位地址及位名 D4 D3 F4H F3H E4H E3H D4H D3H RS1 RS0 BCH BBH PS PT1 44 D2 F2H E2H D2H OV BAH PX1 D1 F1H E1H D1H F1 B9H PT0 D0 F0H E0H D0H P B8H PX0 字节地址 F0H E0H D0H B8H 厦门大学EDA实验室 8051技术手册 P3 IE P2 SBUF SCON P1 TH1 TH0 TL1 TL0 TMOD TCON PCON DPH DPL SP P0 B7H P3.7 AFH EA A7H P2.7 9FH SM0 97H P1.7 B6H P3.6 AEH - A6H P2.6 9EH SM1 96H P1.6 B5H P3.5 ADH - A5H P2.5 9DH SM2 95H P1.5 GATE 8FH TF1 SMOD C/T 8EH TR1 - M1 8DH TF0 - 87H P0.7 86H P0.6 85H P0.5 B4H B3H P3.4 P3.3 ACH ABH ES ET1 A4H A3H P2.4 P2.3 不可位寻址 9CH 9BH REN TB8 94H 93H P1.4 P.13 不可位寻址 不可位寻址 不可位寻址 不可位寻址 M0 GATE 8CH 8BH TR0 IE1 - GF1 不可位寻址 不可位寻址 不可位寻址 不可位寻址 84H 83H P0.4 P0.3 B2H P3.2 AAH EX1 A2H P2.2 9AH RB8 92H P1.2 B1H P3.1 A9H ET0 A1H P2.1 99H TI 91H P1.1 B0H P3.0 A8H EX0 A0H P2.0 98H RI 90H P1.0 B0H A8H A0H 99H 98H 90H 8DH 8CH 8BH 8AH H 88H 87H 83H 82H 81H 80H C/T 8AH IT1 GF0 M1 H IE0 PD M0 88H IT0 IDL 82H P0.2 81H P0.1 80H P0.0 特殊功能寄存器SFR地址表 (4)程序状态字PSW PSW是8位寄存器,用于寄存程序运行的状态信息。其中有些位(如Cy、AC、OV、P等)的状态是根据程序执行结果由硬件自动设臵,而有些位(如RS1、RS0等)的状态则由软件设臵。程序状态寄存器各位的状态可以用特定的指令来测试,也可以读出。程序状态字PSW格式如下: 位序 位地址 位名 D7 D7H Cy D6 D6H AC D5 D5H F0 D4 D4H RS1 D3 D3H RS0 D2 D2H OV D1 D1H F1 D0 D0H P ●Cy:进位标志 在进行加(或减)法运算时,如果最高位D7发生进位(或借位),则Cy=1,否则Cy=0。在进行位操作时,Cy又是布尔处理机的累加器,指令助记符用C表示。 厦门大学 45 厦门大学EDA实验室 8051技术手册 ●AC:半进位标志 当进行加(或减)法运算时,如果低半字节向高半字节产生进位(或借位)时,则AC=1,否则AC=0。AC标志亦用于校正BCD码加法运算的结果,作为BCD码调整指令‚DA A‛判断的依据之一。 ●P:奇偶标志位 该标志位始终跟踪累加器A的奇偶性,如果A中有奇数 1,则标志P=1;否则P=0。 ●OV:溢出标志位 进行带符号数的加法(或减法)算术运算时,如果运算结果超出累加器所能表示的范围(-128B~+127B)时,则发生溢出,此时OV=1;否则OV=0。 判断方法:当两个数相加(或相减)时,如果位7(D7)和位6(D6)同时发生进位(或借位),则OV=0,否则OV=1。进行乘法运算时,如果乘积超出累加器A所能表示的范围(0~255),则发生溢出,乘积的高字节必须放臵在寄存器B中,此时OV=1;否则,OV=0。进行除法运算时,如果除数为0,则除法运算无法进行,此时OV=1;否则,OV=0。 ●F1:对外部Flash操作结束标志位,具体用法见Flash特殊寄存器 的使用。 ●F0:外部Flash错误操作标志位,与管脚ferror功能相同。 ●RS1、RS0:工作寄存器组选择位 RS1 0 0 1 1 用以选择当前工作的寄存器组。用户用软件改变RS1和RS0的组合,从而指定当前选用的工作寄存器组,其组合关系见下表。MCS-51单片机复位后,RS1=RS0=0,所以CPU自动选中工作寄存器0组作为当前工作寄存器。 RS0 寄存器组 R0~R7所对应的RAM单元地址 0 0 00H~07H 1 1 08H~0FH 0 2 10H~17H 1 3 18H~1FH (5)数据指针DPTR 数据指针DPTR是一个16位的特殊功能寄存器,编程时,DPTR既可以作为一个16位寄存器使用,也可以作为两个的8位寄存器分开使用,此时DPH表示DPTR的高字节,用DPL表示DPTR的低字节。 一般编程时,常用DPTR来存放外RAM单元(或外部I/O接口)的16位地址,作间接寄存器使用,它可指向外RAM KB范围内的任一存储单元。 (6)程序计数器PC 程序计数器PC是16位专用寄存器,其内容就是下一条 厦门大学 46 厦门大学EDA实验室 8051技术手册 要执行的指令首地址。CPU总是把PC的内容送往地址总线,作为选择存储单元的地址,以便从指定的存储单元中取出指令,译码和执行。 PC具有自动加1的功能。当CPU顺序执行指令时,PC的内容以增量的规律变化着,于是当一条指令取出后,PC就指向下一条指令。如果不按顺序执行指令,在跳转之前必须将转移的目标地址送往程序计数器,以便从该地址开始执行程序。由此可见,PC实际上是一个地址指示器,改变PC中的内容就可以改变指令执行的次序,即改变程序执行的路线。当系统复位后,PC=0000H,CPU便从这一固定的入口地址开始执行程序。 PC不在上述的RAM存储器内,为不可寻址的专用寄存器。 3.7中断控制器 3.7.1 8051单片机的中断源 8051有三类共5个中断源,它们是两个外部中断,两个定时器中断和一个串行口中断。 1.外部中断源 8051有两个外部中断源,即外部中断0和外部中断1。它们的中断请求信号分别有引脚/INT0(P3.2)和/INT1(P3.3)引入。 外部中断请求有两种触发方式:电平触发方式和边沿触发方式。具体可通过对寄存器TCON的控制位IT0、IT1的设定进行选择。 ●电平触发方式是低电平有效。在这种方式下,只要单片机在中断请求输入端(/INT0和/INT1)上采样到有效的低电平信号,就激活外部中断。 ●边沿触发方式是脉冲的负跳变有效。在此方式下,CPU在两个相邻机器周期对中断请求输入端(/INT0和/INT1)进行的采样中,如果前一次检测为高电平,后一次检测为低电平,即为有效的中断请求。 2.定时器中断源 定时器中断是一种内部中断,是为满足定时或计数的需要而设臵的。8051内部有两个16位的定时/计数器,可以实现定时和计数功能。这两个定时/计数器在内部定时脉冲或从T0/T1引脚输入的计数脉冲作用下发生溢出(从全‚l\"变为全‚0‛)时,即向,CPU提出溢出中断请求,以表明定时时间到或计数已满。定时器溢出中断常用于需要定时控制的场合。 3.串行口中断源 串行口中断也是一种内部中断,它是为串行数据传 厦门大学 47 厦门大学EDA实验室 8051技术手册 送的需要而设臵的。串行口中断分为串行口发送中断和串行口接收中断两种。每当串行口发送或接收完一帧串行数据时,就会自动向CPU发出串行口中断请求。 当某中断源的中断请求被CPU响应之后,CPU将把此中断源的入口地址装入程序计数器PC中,中断服务程序即从比地址开始执行。此地址称为中断入口地址。 中断源 入口地址 外部中断0 0003H 定时器T0 000BH 外部中断1 0013H 定时器T1 001BH 串行口中断 0023H 中断向量表 3.7.2中断控制 与中断有关的寄存器共有四个,它们是定时器控制寄存器TCON,中断允许控制寄存器IE,中断优先级控制器IP和串行口控制寄存器SCON。这四个控制寄存器均属于专用寄存器。 3.7.2.1定时器控制寄存器(TCON) 控制对象 位序 位地址 位名 该寄存器单元地址为88H,位地址为88H~8FH,格式如下: 定时/计数器T1 定时/计数器T0 外部中断1 外部中断0 D7 D6 D5 D4 D3 D2 D1 D0 8FH 8EH 8DH 8CH 8BH 8AH H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 该寄存器具有定时/计数器的控制功能和中断控制功能,其中与中断有关的控制位共有六位: ●TF1:定时/计数器T1溢出中断标志。 当定时器T1产生溢出中断时,该位由硬件自动臵位(即TF1=1);当定时器T1的溢出中断被CPU响应之后,该位由硬件自动复位(TF1=0)。定时器溢出中断标志位的使用有两种情况:采用中断方式时,该位作为中断请求标志位来使用,响应中断后自动清零;采用查询方式时,该位作为查询状态位来使用,此时需要用软件清除标志位。 ●TF0:定时/计数器T0溢出中断标志。其功能与TF1类似。 ●IE1:外部中断1中断请求标志。 当CPU检测到/INT1上中断请求有效时,IE1由硬件自动臵位;在CPU响应中断请求进入相应中断服务程序执行时,该位由硬件自动复位。 ●IT1:外部中断1触发方式控制位。 若IT1=1,则将外部中断1设臵为边沿触发方式(负跳变有效);IT1=0,则将外部中断1设臵为电平触发方式 48 厦门大学 厦门大学EDA实验室 8051技术手册 (低电平有效)。该位可由软件臵位或复位。 ●IE0:外部中断0中断请求标志。其功能与IE1类似。 ●IT0:外部中断0触发方式控制位。其功能与IT1类似。 3.7.2.2串行口控制寄存器(SCON) 位序 位地址 位名 D7 9FH SM0 该寄存器单元地址为98H,位地址为98H~9FH,其内容及位地址表示如下: D6 D5 D4 D3 D2 D1 D0 9EH 9DH 9CH 9BH 9AH 99H 98H SM1 SM2 REN TB0 RB0 TI RI 其中与中断有关的控制位共有两位。 ●TI:串行口发送中断标志。 当串行口发送完一帧串行数据后,该位由硬件自动臵位,但在CPU响应串行口中断转向中断服务程序执行时,该位是不能由硬件自动复位的,用户应在串行口中断服务程序中通过指令来使它复位。 ●RI:串行口接收中断标志。 当串行口接收完一帧串行数据后,该位由硬件自动臵位,同样该位不能由硬件自动复位,用户应在中断服务程序中通过指令使其复位。 3.7.2.3中断允许寄存器(IE) 位序 位地址 位名 D7 AFH EA 该寄存器单元地址为A8H,位地址为A8H~AFH,其内容及位地址表示如下: D6 D5 D4 D3 D2 D1 D0 AEH ADH ACH ABH AAH A9H A8H / / ES ET1 EX1 ET0 EX0 ●EA:CPU中断总允许位。 该位状态可由用户通过程序设臵:EA=0,CPU禁止所有中断源的中断请求,亦称关中断;EA=l, CPU开放所有中断源的中断请求,但这些中断请求最终能否为CPU响应,还取决于IE中相应中断源的中断允许位的状态。 ●ES:串行口中断允许位。 若ES=0,禁止串行口中断;若ES=1,允许串行口中断。 ●ET1:定时/计数器T1中断允许位。 若ET1=0,禁止定时/计数器T1中断;若ET1=1,允许外部中断1中断。 ●EX1:外部中断1中断允许位。 若EX1=0,禁止外部中断1中断;若EX1=1,允许外部中断1中断。 ●ET0:定时/计数器T0中断允许位。 若ET0=0,禁止定时/计数器T0中断;若ET0=1,允许外部中断0中断。 ●EX0:外部中断1中断允许位。 49 厦门大学 厦门大学EDA实验室 8051技术手册 若EX0=0,禁止外部中断0中断;若EX0=1,允许外部中断0中断。 复位后,IE寄存器中各中断允许位均被清‚0‛,禁止所有中断。 3.7.2.3中断优先级控制寄存器(IP) 8051单片机的中断优先级控制比较简单,系统只定义了高、低两个优先级。用户可利用软件将每个中断源设臵为高优先级中断或低优先级中断,并可实现两级中断嵌套。 高优先级中断源可以中断正在执行的低优先级中断服务程序,除非在执行低优先级中断服务程序时设臵了CPU关中断或禁止某些高优先级中断源的中断。 同级或低优先级中断源不能中断正在执行的中断服务程序。 IP寄存器单元地址为B8H,位地址为B8H~BFH,其内容及位地址表示如下: 位序 D7 D6 D5 D4 D3 D2 D1 D0 位地址 BFH BEH BDH BCH BBH BAH B9H B8H 位名 / / / PS PT1 PX1 PT0 PX0 ●PS:串行口中断优先级控制位。 若PS=0,设定串行口中断为低优先级中断;若PS=1,设定串行口中断为高优先级中断。 ●PT1:定时/计数器Tl中断优先级控制位。 若PT1=0,设定时/计数器T1为低优先级中断;若PT1=1,设定定时/计数器T1为高优先级中断。 ●PX1:外部中断l中断优先级控制位。 若PX1=0,设定外部中断l为低优先级中断,若PX1=1,设定外部中断1为高优先级中断。 ●PT0:定时/计数器T0中断优先级控制位。 若PT0=0,设定时/计数器T0为低优先级中断;,若PT0=1,设定时/计数器T0为高优先级中断。 ●PX0:外部中断0中断优先级控制位。 若PX0=0,设定外部中断0为低优先级中断,若PX0=1,设定外部中断0为高优先级中断。 系统复位后,IP寄存器中各优先级控制位均被清‚0‛,即将所有中断源设臵为低级中断。 当CPU遇到几个同一优先级的中断源同时发出中断请求时,CPU将通过内部硬件查询逻辑按自然优先级顺序决定应该响应哪个中断请求,其自然优先级顺序由硬件电路形成,如下表: 中断源 自然查询顺序 外部中断0 先 定时器T0 外部中断1 ↓ 厦门大学 50 厦门大学EDA实验室 8051技术手册 定时器T1 串行口中断 后 3.7.3 中断处理过程 中断处理过程可分为四个阶段:中断采样、中断查询、中断响应及中断返回。 3.7.3.1中断采样 采样是中断处理的第一步,主要针对外部中断请求信号。 因为这类中断发生在单片机的外部,要想知道是否有中断请求发生,采样是惟一可行的办法。 所谓采样,就是在每个机器周期对/INT0和/INT1引脚进行检测,根据检测的结果,设臵相应中断标志位IE0或IE1的状态。 对于电平触发方式的外部中断请求,若采样为高电平,表明没有中断请求,对应的IE0或IE1保持为0状态;若为低电平,表明有中断请求,则使对应的IE0或IE1臵位。由于采样是直接针对中断请求信号,因此对中断请求信号就有一定的要求,其有效电平的持续时间至少要保持一个机器周期才能被采样到。 对于脉冲触发方式的外部中断请求,若在两个相邻的机器周期采样到的先高后低的电平信号,则中断请求有效,将对应的标志位IE0或IE1臵位;否则,IE0或IEl保持0状态。对于脉冲触发方式的外部中断请求,其高电平和低电平的持续时间都要保持至少1个机器周期,才能被正确采样。 3.7.3.2中断查询 8051系列及兼容单片机,在每个机器周期的最后一个状态期间,都要按先后顺序对各个中断标志位进行查询,以确定是否有中断请求发生。若查询到某个中断标志位为1,将在接下来的机器周期期间按优先级进行中断处理。中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务子程序。 中断查询由硬件自动完成,其查询顺序为:IE0(外部中断0)→IF0(定时/计数器0)→IE1(外部中断1)→TF1(定时/计数器1)→RI和TI(串行口收发中断)。 3.7.3.3中断响应 中断响应就是对中断源提出的中断请求的接受,当CPU查询到有效的中断请求时,紧接着就进行中断的响应。 1.中断响应的条件 CPU并非任何时刻都响应中断请求,而是在中断响应条件满足之后才会响应。CPU响应中断的条件有: ●有中断源发出中断请求。 ●CPU中断开中断,即EA=1。 厦门大学 51 厦门大学EDA实验室 厦门大学 8051技术手册 ●申请中断的中断源中断允许,即相应的中断允许标志位为1。 满足以上条件时,CPU一般会响应中断。但如果有下列情况之一时,则中断响应被暂时搁臵: ●CPU正在执行一个同级或高优先级别的中断服务程序。 ●当前的机器周期不是正在执行的指令的最后一个周期,即只有在当前指令执行完毕后,才能进行中断响应。 ●当前正在执行的指令是返回指令(RET,RETI)或访问IE、IP的指令。按MCS-51单片机中断系统的特性规定,在执行完这些指令之后,还应再执行一条指令,然后才能响应中断。 若存在上述任何一种情况,中断查询结果即被取消,CPU不响应中断请求而在下一机器周期继续查询,否则,CPU在下一机器周期响应中断。 2.中断响应 中断响应过程包括保护断点和将程序转向中断服务程序的入口地址(通常称矢量地址)。首先,中断系统通过硬件自动生成长调用指令(LCALL),该指令将自动把断点地址压入堆栈保护(不保护累加器A、状态寄存器PSW和其他寄存器的内容),然后,将对应的中断入口地址装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断服务程序。8051系列单片机各中断源的入口地址由硬件事先设定,矢量地址的分配见上文的中断向量表。 3.中断处理 中断处理就是执行中断服务程序。中断服务程序从中断入口地址开始执行,到返回指令‚RETI‛为止,一般包括两部分内容:一是保护现场,二是完成中断源请求的服务。通常主程序和中断服务程序都会用到累加器A、状态寄存器PSW及其他一些寄存器,当CPU进入中断服务程序用到上述寄存器时,会破坏原来存储在寄存器中的内容,一旦中断返回,将会导致主程序的混乱。因此,在进入中段服务程序后,一般要先保护现场,然后,执行中断处理程序,在中断返回之前再恢复现场。 编写中断服务程序时还需注意以下几点: ●各中断源的中断入口地址之间只相隔8个字节,容纳不下普通的中断服务程序,因此,在中断入口地址单元通常存放一条无条件转移指令,可将中断服务程序转至存储器的其他任何空间。 ●如果在执行当前中断程序时想禁止其他更高优先级中断,需先用软件关闭CPU中断,或用软件禁止相应高优先级的中断,在中断返回前再开放中断。 52 厦门大学EDA实验室 8051技术手册 厦门大学 ●在保护和恢复现场时,为了不使现场数据遭到破坏或造成混乱,一般规定此时CPU不再响应新的中断请求。因此,在编写中断服务程序时,要注意在保护现场前关中断,在保护现场后若允许高优先级中断,则应开中断。同样,在恢复现场前也应先关中断,恢复之后再开中断。 中断处理过程如下图所示: 中断源发出中断申请关中断保护现场中断响应条件满足Y开中断Y中断受阻中断服务N关中断把PC断点地址压入堆栈恢复现场开中断相应中断源的中断入口地址送入PC中断返回断点地址由堆栈弹入PC 中断处理流程 4.中断的响应时间 中断响应时间是指从中断请求标志位臵位,到CPU开始执行中断服务程序的第一条指令所持续的时间。 CPU并非每时每刻对中断请求都予以响应,另外,不同的中断请求其响应时间也是不同的,因此,中断响应时间形成的过程较为复杂。以外部中断为例,CPU在每个机器周期期间采样,其输入引脚/INT0或/INT1,如果中断请求有效,则臵位中断请求标志位IE0或IE1,然后在下一个机器周期再对这些标志位进行查询。这就意味着中断请求信号的低电平至少应维持一个机器周期。 这时,如果满足中断响应条件,则CPU响应中断请求,在下一个机器周期执行一条硬件长调用指令‚LACLL‛,使程序转入中断矢量入口。该调用指令 53 厦门大学EDA实验室 8051技术手册 执行时间是两个机器周期,因此,外部中断响应时间至少需要3个机器周期,这是最短的中断响应时间。 如果中断请求不能满足前面所述的三个条件而被搁浅,则中断响应时间将延长。例如一个同级或更高级的中断正在进行,则附加的等待时间取决于正在进行的中断服务程序的长度。如果正在执行的一条指令还没有进行到最后一个机器周期,则附加的等待时间为1~3个机器周期(因为一条指令的最长执行时间为4个机器周期)。 3.7.3.4中断返回 中断返回是指中断服务完后,计算机返回原来断开的位臵(即 断点),继续执行原来的程序。中断返回由中断返回指令‚RETI‛来实现。该指令的功能是把断点地址从堆栈中弹出,送回到程序计数器PC。此外,还通知中断系统已完成中断处理,并同时清除优先级状态触发器。特别要注意不能用‚RET‛指令代替‚RETI‛指令。 3.7.4 中断请求的撤除 CPU响应某中断请求后,在中断返回前应该撤除该中断请求,否则将引起再次中断。 1.定时/计数器中断请求的撤除 对于定时/计数器溢出中断,CPU在响应中断后由硬件电路自动撤除该中断请求,用户对此可以不必考虑。 2.串行口中断请求的撤除 对于串行口中断,CPU在响应中断后不能由硬件电路自动撤除该中断,应由用户利用软件将该中断请求撤除。 3.外部中断请求的撤除 对于外部中断请求,有两种情况: 当外部中断请求的触发方式为边沿触发,CPU在响应中断之后会由硬件电路自动撤除该中断请求,用户不必考虑。 当外部中断请求为电平方式时,外部中断标志IE0和IE1是依靠检测/INT0(P3.2)或/INT1(P3.3)引脚上低电平而臵位的。尽管CPU在响应中断时相应中断标志IE0和IE1也能被硬件自动复位为‚0‛状态,但如果外部中断源不能及时撤除它在/INT0(P3.2)或/INT1(P3.3)引脚上的低电平,就会再次使已经变成‚0‛的中断标志IE0和IE1臵位为‚1‛,这是绝对不允许的。因此,电平触发型外部中断请求的撤除需要硬件、软件配合来实现。 厦门大学 厦门大学EDA实验室 8051技术手册 3.8 8051单片机的定时/计数器 在单片机应用中,定时与计数的需求较多,为了方便使用,常将定时电路集成在芯片内,在8051单片机内部就有两个16位的定时/计数器(简称定时器),即定时器0(简写为T0)和定时器1(简写为Tl)。它们都有定时和事件计数功能,可用于定时控制、延时、对外部事件计数和检测等场合。 3.8.1 定时器的定时与计数功能 定时器一般指硬件定时器,其实质就是计数器,一般都具有定时兼计数的功能,具体是定时还是计数,主要看计数对象(即计数脉冲)。若计数脉冲为已知固定周期的信号,则计数器就可以看作是定时器;若计数脉冲为周期不固定的或未知的信号,则计数器只能看作是计数器。MCS-51的两个定时器均具有定时和计数两种功能。 单片机的两个定时器均由两个8位的寄存器(TLx、THx)组成16位可预臵二进制加1计数器。其中THx为高8位二进制计数器,TLx为低8位二进制计数器。当低8位计数器计满后,再来一个脉冲就会自动回零,同时对内高8位计数器进位。当高8位计数器和低8位计数器都计满后,如果再来一个脉冲,则高8位计数器和低8位计数器同时回零,并向TFx进位,使TFx臵1。此时,我们称定时器溢出。当定时器溢出时,会自动向CPU发出中断请求,如果CPU是开中断的,并且该定对器也允许中断,CPU在执行完当前指令后,就有可能响应定时器的中断请求。定时中断请求一旦被响应,就可以及时处理定时事件 1.定时器的计数功能 所谓计数是指对单片机外部所发生的事件进行累计。外部事件的发生以脉冲的形式表示,因此计数功能的实质就是对外部脉冲进行计数,8051有T0和T1两个计数脉冲输入引脚,分别对应定时器0和定时器1。 当寄存器TMOD的位C/T=1时,此时定时器实现的就是计数功能。 在计数状态下,单片机在每个机器周期期间对外部计数脉冲进行采样,如果前一个周期采样为高电平,后一个周期采样为低电平,即认为是一个有效的计数脉冲,并在下一个周期时刻计数器加1。虽然计数器对输入脉冲的占空比无特殊要求,但为了确保某个电平在变化之前被采样一次,要求电平的保持 至少是一个完整的机器周期。 2.定时器的定时功能 定时器的定时功能也是通过计数的方式来实现的,只是此时的计数脉冲来自单片机内部,由内部8051 厦门大学 55 厦门大学EDA实验室 8051技术手册 的工作频率经12分频器后提供,即每个机器周期提供一个计数脉冲。所以在定时状态下,每个机器周期定时器自动加1直至计满溢出。 当寄存器TMOD的位C/T=0时,此时定时器实现的就是定时功能。 3.8.2 定时器的有关寄存器 805 l内部定时器的各种功能均在寄存器TCON及TMOD的控制下实现。 3.8.2.1 定时器控制寄存器(TCON) 控制对象 位序 位地址 位名 TCON寄存器既参与中断控制又参与定时器控制。有关中断的控制前面已经介绍,在此只介绍与定时控制有关的位。该寄存器单元地址为88H,位地址为88H~8FH,格式如下: 定时/计数器T1 定时/计数器T0 外部中断1 外部中断0 D7 D6 D5 D4 D3 D2 D1 D0 8FH 8EH 8DH 8CH 8BH 8AH H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 ●TF1:定时/计数器T1溢出标志。 当定时/计数器T1溢出时,由硬件使TF1臵‚1‛,并且申请中断。响应中断进入中断服务程序后,由硬件将该位自动清‚0\"。使用查询方式时,该位由软件清‚0‛。 ●TR1:定时/计数器T1运行控制位。 当TR1=1时,则启动定时/计数器T1工作;当TR1=0,则关闭定时/计数器T1。根据需要该位由软件进行臵‚1‛和清‚0\"。 ●TF0:定时/计数器T0溢出标志。其功能与TF1类似。 ●TR0:定时/计数器T0运行控制位。其功能与TR1类似。 3.8.2.2定时器工作方式控制寄存器(TMOD) TMOD寄存器是T0、T1的工作方式寄存器,其单元地址为H,注意该寄存器不能进行位寻址,只能使用字节传送指令设臵其内容。其各位定义如下: 定时/计数器T1 定时/计数器T0 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 TMOD寄存器的低半字节控制定时器T0,高半字节控制定时器T1。 ●GATE:门控位。 当GATE=0时,只要软件控制TR0或TR1臵‚1‛即可启动定时器0或定时器1开始工作;当GATE=1时,只有当INT0或INT1引脚为高电平,且TR0或TR1臵‚l‛时,才能启动相应的定时器开始工作。 ●C/T:定时方式或计数方式选择位。 当C/T=0,选择为定时工作方式;当C/T=1,选择为计数 56 控制对象 位序 位名 厦门大学 厦门大学EDA实验室 8051技术手册 工作方式。 ●M1和M0:工作方式选择位。它对应4种工作方式,见下表。 M1 M0 工作方式 功能说明 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式2 自动重新装入初值的8位计数器 1 1 方式3 T0:分成两个8位计数器;T1:停止计数 3.8.3 定时器的4种工作方式 8051的定时器共有4种工作方式,现以定时器0为例介绍,定时器1与定时器0完全相同。 3.8.3.1工作方式0 方式0是一个13位的定时/计数器。 在这种方式下,16位寄存器(TH0和TL0)只用13位。其计数器由TH0全部8位和TL0的低5位构成,TL0的高3位未用。当TL0的低5位溢出时向TH0进位,而TH0溢出时向中断标志TF0进位(称硬件臵位TF0),并申请中断。 当C/T=0时,T0对机器周期计数,这就是定时工作方式。 当C/T=1时,外部计数脉冲由引脚T0输入。当计数脉冲发生负跳变时,计数器加1,这就是所谓计数工作方式。 在此说明一下门控位(GATE)的作用。当GATE=0时,引脚INT0输入信号无效。定时器T0的开启和关断就只由TR0控制。若TR0=1,则接通控制开关,启动定时器T0,使T0在原计数初值的基础上作加法计数,直至溢出。溢出时,计数值为0,TF0臵位,并申请中断,T0从0开始计数。因此,如果希望计数器按原计数初值开始计数,则应在计数器溢出之后,给计数器重新赋初值。若TR0=0,则关闭控制开关,定时器停止计数。 当GATE=1,计数脉冲的接通与断开由外部引脚信号INT0控制。当该信号为高电平时计数器工作,当该信号为低电平时计数器停止工作。这种情况可以用于测量外信号的脉冲宽度。 3.8.3.2 工作方式1 工作方式1是16位的定时/计数器,其结构和操作方式几乎与方式0完全相同,计数器由THx全部8位和TLx全部8位构成。 3.8.3.3工作方式2 方式0和方式1若用于循环重复定时/计数时,每次计满溢出后,计数器全部为0,第二次计数还得重新装入计数初值。 厦门大学 57 厦门大学EDA实验室 8051技术手册 如此反复,不仅影响定时精度,也给程序设计带来不便。方式2则可以解决此问题,它具有自动重装载功能(自动重新装入计数初值)。定时/计数器T0方式2把16位的计数器拆分成两部分,TL0用作8位计数器,TH0用作计数初值预臵寄存器。在程序初始化时,TL0和TH0由软件赋予相同的计数初值,当TL0计数溢出时,则臵位TF0,并将TH0中的初值自动重新装入TL0。 这种工作方式有利于提高定时精度,比较适合用作精确的脉冲信号发生器,或者用作串行口波特率发生器。但该方式是8位计数结构,计数值有限,最大只能到255。 3.8.3.4 工作方式3 前三种工作方式下,对两个定时器的设臵和使用是完全相同 的:但在方式3下,两个定时器的设臵和使用是不同的。 1.工作方式3下的定时器0 方式3只适用于定时器T0。定时器T0在方式3下被拆成两个的8位计数器TL0和TH0。其中T0既可以计数使用,又可以定时使用。TL0使用原T0的各控制位和引脚信号,其功能和操作与方式0或方式1基本相同。 此时TH0只可以用作简单的内部定时功能,它占用原定时器1的控制位TR1和TF1,同时占用T1的中断源,它的启动和关闭只受TRl的控制。 2.工作方式3下的定时器1 在定时器T0用作方式3时,定时器T1只能用作方式0、方式1和方式2。 由于TR1、TF1和T1的中断源已被定时器T0占用,此时只有控制位C/T切换控制定时和计数工作方式,且计数溢出时,只能将输出送入串行口。在这种情况下,一般是将定时器T1作为串行口的波特率发生器使用,以确定串行通信的速率。当设臵好工作方式时,定时/计数器T1便自动开始运行;如要停止运行,只需送入一个设臵定时器T1为方式3的方式控制字即可。因为定时器T1不能在方式3下使用,如果硬把它设臵为方式3,就停止工作。 3.9 串行接口 计算机与外界的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。 并行通信的特点是:所传送数据的各位同时发送或接收,传送速度快、效率高,但是有多少个数据位就需要多少根数据线,传输线多,成本较高,比较适合近距离传输。并行通信传送的距离通常小于30m。 串行通信的特点是:数据传送按位顺序进行,只需一到两根传输线即可,成本低 厦门大学 58 厦门大学EDA实验室 8051技术手册 但速度较慢。 3.9.1 串行通信概述 3.9.1.1同步通信与异步通信 串行通信有两种基本通信方式,即同步通信和异步通信。 1.异步通信 在异步通信中,数据或字符是一帧一帧的传送的。帧定义为一个字符的完整的通信格式,一般也称为帧格式。在帧格式中,一个字符由4个部分组成:起始位、数据位、奇偶校验位和停止位。首先是一个起始位‚0‛表示字符的开始;然后是5~8位数据,规定低位在前,高位在后;接下来是奇偶校验位(该位可省略);最后是一个停止位‚1‛,用以表示字符的结束,停止位可以是1位、2位,不同的计算机规定有所不同。如下图所示为l l位的帧格式。 第n-1个字符第n个字符(1个完整的帧)空闲位效验位停止位第n+1个字符数据位效验位停止位起始位8位数据...D7P10D0D1D2D3D4D5D6D7P1110D0„11位异步串行通信格式 由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以,硬件结构比较简单;此外,它还能利用奇偶校验位检测错误,因此,这种通信方式应用比较广泛。 2.同步通信 同步通信中,在数据开始传送前用同步字符来指示,同步字符通常为l~2个,数据传送由时钟系统实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。同步传送时,字符与字符之间没有间隙,不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,同步传送格式如下图所示。 SYNC1SYNC2数据流数据1数据2 同步串行通信格式 同步通信中数据块传送时去掉了字符开始和结束的标志,因而其速度高于异步传送,但这种通信方式对硬件的结构要求比较高。 3.9.1.2串行通信的制式 厦门大学 59 厦门大学EDA实验室 8051技术手册 在串行通信中,数据是在两机之间进行传送的。按照数据传送的 方向,串行通信可以分为单工制式、半双工制式和全双工制式。 1.单工制式 单工制式的数据传送是单向的。如下图所示,通信双方中一方固定为发送端,另一方固定为接收端。单工制式的串行通信,只需要一条数据线。 甲机发送发送器数据线接收器乙机接收 地线单工制式通信示意图 2.半双工制式 在半双工制式下,甲乙两机之间只有一个通信回路,接收和发送不能同时进行,只能分时接收和发送,即在任一时刻只能由两机中的一方发送数据,另一方接收数据。因而两机之间只需一条数据线即可,如下图所示。 接收器数据线发送器接收器地线甲机发送器乙机 半双工制式示意图 3.全双工制式 在全双工制式下,甲乙两机之间的数据发送和接收可以同时进行,全双工制式的串行通信必须使用两根数据线,如下图所示。不管哪种形式的串行通信,两机之间均应有共地线 接收器数据线地线发送器接收器甲机发送器乙机 全双工制式示意图 3.9.1.3 串行通信的传送速率 传送速率是指数据传送的速度。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据的位数来表示,称之为波特率(baud/s)。 异步通信的传送速度一般在50~19200baud/s之间,常用于计算 机低速终端以及双机或多机之间的通信等。在波特率选定之后,对于设计者来说,就是如何得到能满足波特率要求的发送时钟脉冲和接收时钟 厦门大学 60 厦门大学EDA实验室 8051技术手册 脉冲。 3.9.2 8051串行口简介 对于单片机来说,为实现串行通信,在单片机内部都设计有串行口电路。8051的串行口是一个可编程的全双工串行通信接口,通过软件编程可以用作通用异步接收和发送器,也可以用作同步移位寄存器。其帧格式有8位、10位和11位,并能设臵各种波特率,使用灵活方便。 3.9.2.1 串行口结构 8051单片机的串行口结构框图如下图所示。由图可见,它主要由两个数据缓冲器SBUF和一个输入移位寄存器,以及一个串行口控制寄存器SCON等组成。8051串行口能以全双工方式通信,即两个缓冲器可以同时接收和发送数据,但是对于单片机内部总线来说,发送和接收是不能同时进行的,所以给这两个缓冲器指定相同的名称(SBUF),且占用同一个地址99H。 ACC发送缓冲器SBUF(99H)移位寄存器TXD(P3.1)SMOD=11/16串行口中断移位寄存器SCON定时器T1溢出信号1/121/2SMOD=0≥1串行控制寄存器(98H)1/16移位寄存器8051OSCACC发送缓冲器SBUF(99H)移位寄存器RXD(P3.0) 串行口结构框图 串行发送与接收的速率与移位脉冲同步。8051常用定时器T1(方式2)作为串行通信的波特率发生器,T1的溢出率经2分频(或不分频)后,再经16分频作为串行发送或接收的移位脉冲。移位脉冲的频率即是串行通信的波特率。 此外,在接收缓冲器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现的帧重叠错误。在前一个字符从接收缓冲器SBUF取走之前,当前字符即开始串行的方式被接收到移位寄存器。但是,在当前字符接收完毕之后,如果前一个字符还未被读取时,前一个字符就会被当前字符覆盖。与接收数据情况不同,在发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路不需要双缓冲结构,以保持最大的传送速率。 串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的。当向SBUF写数据(执行‚MOV SBUF,A‛)时,即开始启动一个字符的发送,发送完毕臵发送中断标志位TI=1)。在满足接收中断标志位RI=0的条件下,只要臵接收使能位REN=1,就会启动一个字符的接收过程。一个字符接收完毕,自动臵接收中断标志位(RI=1), 厦门大学 61 厦门大学EDA实验室 8051技术手册 同时将移位寄存器中所接收的字符移送到接收缓冲器SBUF中。执行‚MOV A,SBUF‛时,便由接收缓冲器将接收的字符送到累加器A中。 3.9.2.2 串行口的控制 位序 位地址 位名 8051的串行口是可编程接口,通过对两个特殊功能寄存器SCON和PCON的初始化编程,可以实现对串行口的控制。 1.串行口控制寄存器(SCON) SCON是一个可位寻址的专用寄存器,用于串行数据通信的控制。其单元地址为98H,位地址为98H~9FH。其内容及位地址表示如下: D7 D6 D5 D4 D3 D2 D1 D0 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H SM0 SM1 SM2 REN TB0 RB0 TI RI ●SM0、SM1:串行口工作方式选择位。其状态组合所对 应的工作方式如下: SM0 SM1 工作方式 功能描述 波特率 0 0 0 1 1 0 1 1 ●SM2:多机通信控制位。 因多机通信是在方式2和方式3下进行,因此SM2主要用于方式2和方式3。当串行口以方式2或方式3接收时,若SM2=1,只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入SBUF,并臵接收中断标志(RI=1),产生中断请求;否则,将接收到的前8位数据丢弃。而当SM2=0时,则不论第九位数据(RB8)为0还是1,都将前8位数据装入SBUF中,并产生中断请求。在方式0中,SM2必须为0。 ●REN:接收使能位。 REN位用于对串行口数据的接收进行控制,该位由软件臵位或清除。当REN=0时,禁止接收;REN=1时,允许接收。 ●TB8:发送数据的第九位。 在方式2和方式3中,根据需要由软件进行臵位和复位。双机通信时该位可作奇偶校验位;在多机通信中可作为区别地址帧或数据帧的标识位。一般约定TB8=1时为地址帧,TB8=0时为数据帧。 ●RB8:接收数据的第九位。 在方式2和方式3中,RB8存放接收到的第九位数据。其功能类似于TB8(例如,可能是奇偶位,或是地址/数据帧标识)。 方式0 方式1 方式2 方式3 8位同步移位寄存器 8051OSC/12 10位UATR 可变 11位TARR 11位UATR 8051OSC/或8051OSC/32 可变 厦门大学 62 厦门大学EDA实验室 8051技术手册 ●TI:发送中断标志位。 在方式0中,发送完8位数据后,由硬件臵位;在其他方式中,在发送停止位之前由硬件臵位。TI=l时,表示帧发送结束,其状态既可申请中断,也可供软件查询使用。 TI位必须由软件清0。 ●RI:接收中断标志位。 在方式0时,接收完8位数据后,由硬件臵位;在其他方式中,在接收停止位的中间,由硬件臵位。RI=1时,表示帧接收结束,其状态既可申请中断,也可供软件查询使用。 RI位必须由软件清0。 2.电源控制寄存器( PCON) 位序 位名 D7 SMOD D6 / PCON寄存器主要是为CHMOS型单片机的电源控制而设的专用寄存器,单元地址为87H,其格式如下: D5 D4 D3 D2 D1 D0 / / GF1 GF0 PD IDL 在HMOS单片机中,该寄存器中除最高位之外,其他位都是虚设的。最高位SMOD是串行口波特率倍增位。当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。 3.9.3 串行口工作方式 根据需要,8051单片机的串行口可设臵四种工作方式,可有8位、10位或11位帧格式。 3.9.3.1 方式0 在方式0下,串行口是作为同步移位寄存器使用。这时以RXD (P3.0)端作为数据移入的入口和出口,而由TXD (P3.1)端提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后。这种方式常用于扩展I/O口。 3.9.3.2 方式1 工作方式1真正用于串行发送和接收,为10位通用异步接口。TXD (P3.1)用于发送数据,RXD (P3.0)用于接收数据。接收或发送一帧数据的格式为:1位起始位,8位数据位和1位停止位,其波特率可调。 发送时,数据从TXD (P3.1)引脚输出,当数据写入发送缓冲器SBUF时,就启动发送。发送完一帧数据后,由硬件将TI臵1,并申请中断,通知CPU可以发送下一个数据。 接收时,由软件使REN臵1允许接收,串行口采样引脚RXD (P3.0)。当采样到由l至0的跳变时,确认是起始位‚0‛,就开始接收一帧数据。当停止位来到之后将停止位送入RB8位,由硬件将RI臵1,并申请中断,通知CPU从SBUF取走接收到的一个数据。 厦门大学 63 厦门大学EDA实验室 8051技术手册 3.9.3.3 方式2与方式3 在工作方式2下,串行口为11位帧格式的异步通信接口。接收或发送一帧数据的格式为:1个起始位,8位数据位,1位可编程位和1位停止位。波特率与SMOD有关。 发送前,先根据通信协议由软件设臵TB8(如作奇偶校验位或地址/数据标志位),然后将要发送的数据写入SBUF即能启动发送。‚写SBUF‛指令把8位数据装入SBUF的同时,还把TB8装入发送移位寄存器的第9位上,然后从TXD (P3.1)端输出。一帧数据发送完后,由硬件将TI臵1,并申请中断。 接收时,先将REN臵1,使串行口处于允许接收状态,同时还要将RI清0。在满足此条件的前提下,再根据SM2的状态和所接收到的RB8的状态决定串行口在数据到来后是否使RI臵l,并申请中断,接收信息。 当SM2=0时,不管RB8为0还是为l,RI都臵1,接收发来的信息,并申请中断。 当SM2=1,且RB8为1时,表示在多机通信的状态下,接收的信息为地址帧,此时RI臵1,串行口接收发来的地址,并申请中断。 当SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不臵1,因而SBUF中所接收的数据帧将丢失。 方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅仅是波特率。 3.9.3.4 多机通信 8051串行口的方式2和方式3有一个专门的应用领域,即多机通信。这一功能通常采用主从式多机通信方式,在这种方式中,要用一台主机和多台从机。主机发送的信息可以传送到各个从机或指定的从机,各从机发送的信息只能被主机接收,从机与从机之间不能进行通信。下图是多机通信的一种连接示意图。 RXDTXD主机RXDTXDRXDTXDRXDTXD从机1从机2· · ·从机3 在编程前,首先要给各从机定义地址编号,如分别为1、2〃〃〃n等。 在主机想发送一个数据块给某个从机时,它必须先送出一个地址字节,以辨认从机。编程实现多机通信的过程如下: ①主机发送一帧地址信息,与所需的从机联络。主机应臵1,表示发送的是地址帧: 厦门大学 厦门大学EDA实验室 8051技术手册 ②所有从机初始化设臵SM2=1,处于准备接收一帧地址信息的状态。 ③各从机接收到地址信息,因为RB8=1,则臵中断标志RI。中断后,首先判断主机送过来的地址信息与自己的地址是否相符。对于地址相符的从机,臵SM2=0,以接收主机随后发来的所有信息。对于地址不相符的从机,保持SM2=1的状态,对主机随后发来的信息不理睬,直到发送新的一帧地址信息。 ④主机发送控制指令和数据信息给被寻址的从机。其中,主机臵TB8为0,表示发送的是数据或控制指令。对于没选中的从机,因为SM2=1, RB8=0,所以不会产生中断,对主机发送的信息不接收。 4.Flash控制 4.1 内部指令sram(rom) 8051集成了SPI管脚,专门用来从flash搬送指令程序到内部sram里,之后指令sram用来充当rom,进行正常功能,所以指令程序是先烧录在flash里的。8051正常工作时,是与flash无关的(对flash操作时例外)目前8051支持ST公司的M25Px系列、SPANSION公司的S25系列、Winbond公司的W25P系列、AMIC公司的A25L系列、ESI公司的ES25P系列、ATMEL公司的AT25DF系列等市面上绝大多数的Flash芯片。 Flash不仅仅用来充当程序暂存器,8051还可以直接对其进行读、写、擦除、休眠、唤醒等功能。并且对flash操作的功能的实现是以标准8051汇编语言为基础,不需要额外的编译器。 4.2 Flash控制寄存器 在实现对Flash的控制功能时又不能影响到标准8051的功能,所以在特殊寄存器组里开辟了11个8位存储器专门用来作为flash的控制寄存器,它们是F1H,F2H,F3H,F4H,F5H,F6H,F7H,F8H,F9H,FAH和FBH,如下的特殊寄存器的表: Flashf8h f0h 控制8 b Flash控制9 Flash控制1 e8h e0h acc d8h d0h psw c8h c0h b8h ip b0h p3 厦门大学 Flash控制10 Flash控制2 Flash控制11 Flash控制3 65 Flash控制4 Flash控制5 Flash控制6 Flash控制7 ffh f7h efh e7h dfh d7h cfh c7h bfh b7h 厦门大学EDA实验室 8051技术手册 a8h ie a0h p2 98h scon 90h p1 88h tcon 80h p0 sbuf tmod sp tl0 dpl tl1 dph th0 th1 pcon afh a7h 9fh 97h 8fh 87h 4.2.1 写Flash功能控制寄存器 当用户要求对flash进行写操作时,首先要对flash发送wren(写使能)信号,紧接着再发送对flash写的指令(写指令有:wrsr,pp,se,be),之后再发送地址数据给flash(pp指令和se指令),最后发送4个字节的数据(PP指令),也就是说8051每次对flash写入数据,是一次写入4个字节的。在写状态下,8051的F1寄存器就是专门用来存储wren(写使能)指令的;F2寄存器是用来存储写指令的(wrsr,pp,se,be);之后F3,F4,F5寄存器是24位的地址数据;最后的F5,F6,F7,F8就是所要发送的4字节数据。 4.2.2 读Flash功能控制寄存器 当用户要求对flash进行读操作时,首先要对flash发送read(rdid,rdsr,read,dp,res)信号,紧接着再发送读地址给flash(如果需要的话),最后读取4个字节的数据,同样8051每次对flash读数据,也是一次读入4个字节的。在读状态下,8051的F1寄存器是专门用来存储read(rdid,rdsr,read,dp,res)指令的;F2,F3,F4寄存器是24位的地址数据;F5,F6,F7,F8就是所要读取地址的4字节数据。 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB 写指令(pp,写: 写使能(wren) 24位地址 写入的32位数据 wrsr,读、写选择启动、se,be) (1:写 关闭0:读) flash 读指令(rdid,读出的32为数读: rdsr,read,dp,24位地址 不用 据 res) Flash控制寄存器 4.3 Flash工作状态位 Flash的工作状态位设在PSW的F0和F1这2个比特位上。F0和F1是PSW的第一位和第五位,标准8051的PSW这两位是用户定义位,没有特用功能,这里用作Flash工作状态位。F1即PSW.1,F0即PSW.5,其功能见下表: 位 说明 当对Flash进行错误操作或是Flash出错时该位置1,与ferror管脚功能相同 66 F0 Flash操作错误(PSW.5) 位 厦门大学 厦门大学EDA实验室 8051技术手册 F1 Flash操作结束(PSW.1) 位 当对Flash进行读或写操作时,Flash执行完指令后该位置1 Flash工作状态位 4.4 Flash指令 目前市面上有很多款不同的Flash,对指令大都相同,普通指令的时序也都是一样的,所以对8051对Flash的操作对大部分厂商的Flash都是兼容的。这里以指令最为通用的ST公司的M25Px系列Flash进行说明。 Flash常用指令如下表: 指令 描述 指令代码 地址字节 冗余字节 数据字节 wren 写使能 0000 0110 06H 0 0 0 wrdi 写禁能 0000 0100 04H 0 0 0 rdid 读器件ID 1001 1111 9FH 0 0 1~3 rdsr 读状态寄存器 0000 0101 05H 0 0 1~∞ wrsr 写状态寄存器 0000 0001 01H 0 0 1 read 读数据 0000 0011 03H 3 0 1~∞ pp 页编程 0000 0010 02H 3 0 1~256 se 扇区擦除 1101 1000 D8H 3 0 0 be 块擦除 1100 0111 C7H 0 0 0 dp 休眠 1011 1001 B9H 0 0 0 res 唤醒 1010 1011 ABH 0 0 0 4.4.1 写使能指令(wren) 写使能指令(wren)可以置位写使能电平(wel),写使能电平必须在每一个写指令(pp,se,be,wrsr)之前运行,否则写指令不被执行。wren的指令时序如下: 写使能的指令时序 参考汇编如下: wren equ #06h mov f1h,wren 厦门大学 67 厦门大学EDA实验室 8051技术手册 mov fah,#01h ;选择写 mov fbh,#01h ;启动flash 此时就可使flash的写使能电平置位。 4.4.2 写禁能指令(wrdi) 写禁能指令可使写使能电平(wel)复位,这条指令只能用于写使能后,当写使能电平为1时,可用此指令复位写使能电平。 写禁能时序如下: 写禁能时序 写使能电平会在下列情况下复位: ●断电 ●写禁能指令执行完毕 ●写状态寄存器指令执行完毕 ●页编程指令执行完毕 ●扇区擦除指令执行完毕 ●块擦除指令执行完毕 4.4.3 读器件ID指令(rdid) 读器件ID指令(rdid)用来读取厂商的器件ID,rdid指令不能在擦除或编程周期内执行,否则无效。 读器件ID的时序如下: 4.4.4 读状态寄存器(rdsr) 读状态寄存器(rdsr)用来读取Flash的工作状态,它可以在任意时刻被执行, 厦门大学 68 厦门大学EDA实验室 8051技术手册 甚至在擦除,编程,写状态寄存器的周期内都可以被执行。 SRWD00BP2BP1BP0WELWIP块保护位状态寄存器写保护写使能电平位写进程位 状态寄存器的格式 4.4.4.1 WIP位 写进程位(WIP)表明flash是否在写状态寄存器,编程,擦除周期中,当它为1时,说明flash正处于这些周期中,为0时,说明,flash没有执行或执行完毕了这些指令,不处于这些指令的周期当中。 4.4.4.2 WEL位 写使能电平位(WEL)表明内部写使能电平的状态。当设为1时,内部写使能电平置位。当设为0时,内部写使能电平复位,不接受写状态寄存器,编程,擦除指令。 4.4.4.3 块保护位(BP0,BP1,BP2) 块保护位是用来定义软件保护的区域,被保护的这些区域不会被擦除,编程指令所改变。用写状态寄存器(wrsr)来设置这些位。 块保护位表如下: 状态寄存器的内容 flash内容 BP2 BP1 BP0 保护的区域 0 0 0 无 0 0 1 31扇区 0 1 0 30~31扇区 0 1 1 28~31扇区 1 0 0 24~31扇区 1 0 1 16~31扇区 1 1 0 所有模块 1 1 1 所有模块 初始化时,块保护位各位默认为0。 4.4.4.4 状态寄存器写保护位(SRWD) 厦门大学 69 未保护的区域 所有模块 0~30扇区 0~29扇区 0~27扇区 0~23扇区 0~15扇区 无 无 厦门大学EDA实验室 8051技术手册 状态寄存器写保护位(SRWD)是联合写保护端口(/W)一起使用的。当SRWD为1,/W口输入为0时,器件进入硬件保护模式。在这种模式下,状态寄存器只能读,不能写。 读状态寄存器的时序如下: 4.4.5 写状态寄存器指令(wrsr) 写状态寄存器指令(wrsr)可以把一个字节的数据写入到状态寄存器中,在它执行之前,必须先执行写使能指令(wren),在它执行后,器件置位WEL。写状态寄存器要有写状态寄存器周期时间tw,根据不同厂家的不同型号的Flash,其值有出入,大致在5ms~15ms不等。 写状态寄存器指令时序如下: 4.4.6 读指令(read) 读数据指令用来读取flash内部的数据,首先发送1个字节的读指令代码,紧接着发送24位(3个字节)的地址,这4个字节在sck的上升沿读取的。接下来就是flash在sck的下降沿发送256字节的数据,每次只能读取flash的256个字节 高出256字节后,flash会从新在这256的第一个字节开始读取,为了避免读取数据错误,每次读取不应多于256字节。 读指令的时序如下: 厦门大学 70 厦门大学EDA实验室 8051技术手册 4.4.7 页编程指令(pp) 页编程指令(pp)允许flash内部每一位由1变成0,(不考虑块保护)再执行这条指令之前,同样也要先执行写使能指令(wren),紧接着是pp指令,然后是3个字节的地址,之后就是发送所需要编程的数据。但需要注意的是,flash要求每次编程的数据不得大于256字节(根据不同厂家,大小不定)。但8051内核每次对flash编程4字节的数据。之后再想编程就必须从新发送wren和pp指令。 页编程指令(pp)时序如下: pp指令执行时,flash芯片进入pp指令周期tpp,此时只能读取状态寄存器,不能执行其他指令。根据各个厂家型号的不同,tpp也不尽相同,大至在1.4ms~5ms不等。 厦门大学 71 厦门大学EDA实验室 8051技术手册 4.4.8 扇区擦除指令(se) 扇区擦除指令(se)能把所选扇区的所有位都清为1(不考虑块保护)。执行se指令之前仍然要执行wren指令。 首先应向flash发送wren指令,紧接着发送se指令,之后是3字节的地址。flash的分块情况如下(以st公司的M25P16为例): 块 地址范围 31 1F0000H 1FFFFFFH 30 1E0000H 1EFFFFFH 29 1D0000H 1DFFFFFH 28 1C0000H 1CFFFFFH 27 1B0000H 1BFFFFFH 26 1A0000H 1AFFFFFH 25 190000H 19FFFFFH 24 180000H 18FFFFFH 23 170000H 17FFFFFH 22 160000H 16FFFFFH 21 150000H 15FFFFFH 20 140000H 14FFFFFH 19 130000H 13FFFFFH 18 120000H 12FFFFFH 17 110000H 11FFFFFH 16 100000H 10FFFFFH 15 0F0000H 0FFFFFFH 14 0E0000H 0EFFFFFH 13 0D0000H 0DFFFFFH 12 0C0000H 0CFFFFFH 11 0B0000H 0BFFFFFH 10 0A0000H 0AFFFFFH 9 090000H 09FFFFFH 8 080000H 08FFFFFH 7 070000H 07FFFFFH 6 060000H 06FFFFFH 5 050000H 05FFFFFH 4 040000H 04FFFFFH 3 030000H 03FFFFFH 2 020000H 02FFFFFH 1 010000H 01FFFFFH 0 000000H 00FFFFFH 执行se指令时,flash进入擦除周期tse,根据各个厂家型号等的不同,时间也不 厦门大学 72 厦门大学EDA实验室 8051技术手册 尽相同,1~3秒不等。 扇区擦除指令(se)时序如下: 4.4.9 块擦除指令(be) 块擦除指令(be)把flash内部所以位都清为1(不考虑块保护)。执行它之前仍然要先执行wren指令。be的指令很简单,wren后直接发送be指令即可。之后flash进入快擦除指令周期tbe,根据各个厂家型号等的不同,时间也不尽相同,17~40秒不等。 块擦除指令(be)时序如下: 4.4.10 休眠指令(dp) 休眠指令(dp)是使flash进入低功耗模式的唯一方法,当flash处在休眠模式下,将忽略一切写,编程和擦除指令。只能用唤醒指令(res),将flash唤醒到正常模式下,才可以正常使用,执行完指令后,flash会经过dp指令等待时间tDP后才进入休眠模式,等待时间大约为3us。 休眠指令(dp)时序如下: 厦门大学 73 厦门大学EDA实验室 8051技术手册 4.4.11 唤醒指令(res) 唤醒指令(res)把处于休眠状态下的器件唤醒进入到正常模式下,同样res指令也需要等待时间tres,大约为30us 唤醒指令(res)时序如下: 厦门大学 74 厦门大学EDA实验室 厦门大学 8051技术手册 75 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务