第一章
认识51系列单片机存储空间
计算机的应用是一个系统,这个系统应由两部分组成――硬件和软件。硬件是指具体的元器件、电路等,软件则是指程序和数据。如果説硬件是计算机应用系统的基础的话,那么软件则是计算机应用系统的灵魂。计算机原理告诉我们程序和数据是被“装载”在计算机存储器中的,从某种意义上讲,认识一个计算机的存储器系统是开发软件所必须的。
为了全面认识51系列单片机的存储空间,本章列出四个实训单元。在进行完本章列出的四个实训单元后,要求读者应全面了解51系列单片机的程序存储器(ROM )、片内随机存储器(片内RAM )和片外随机存储器(片外RAM )空间的范围、用途和使用方法等。
1.1 认识51系列单片机的程序存储器(ROM )
第一部分 教学要求
一、目的要求
1. 认识51系列单片机的程序存储器(ROM )的空间范围; 2. 认识汇编指令编码在ROM 中存储形式;
3. 掌握指令编码和指令编码所在地址的概念;
4. 了解51系列单片机的程序存储器(ROM )固定地址的用途。 二、实训平台
1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件
三、 教学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识 1. ROM 存储器
ROM(Real Only Memory)即只读存储器之意,其特点是在计算机正常运行的情况下CPU
对ROM 存储器只能进行读操作且断电后信息不会丢失,通常用来存储固定不变的程序和数据,如引导程序、基本输入输出系统程序等。ROM 按其性能可分为以下几类: (1)掩模工艺ROM
它是由芯片制造厂根据ROM 要求存储的信息,制造成固定的半导体掩模版生产的。一旦制出成品后,其存储的信息只能读出,不能改变。这种ROM 适用于存储固定不变的程序和数据,批量生产时,成本较低。 (2)可一次编程PROM
允许用户对ROM 进行一次编程。 (3)可擦除的EPROM
允许用户对ROM 进行多次编程,即可擦除。按擦除的方法不同,可分为紫外线擦除的可擦除可编程序只读存储器EPROM(Erasable Programmable Read Only Memory)和电擦除的电可擦除编程序只读存储器EEPROM(Electrically Erasable Programmable Read Only Memory) 。
(4)Flash存储器
Flash 存储器是在20世纪80年代末逐渐发展起来的一种新型不挥发性半导体存储器,它结合了以往EPROM 结构简单、密度高和EEPROM 在系统的电可擦除性的一些优点,实现了高密度、低成本和高可靠性。Flash 存储器和传统存储器的最大区别在于它是按块(Sector)擦除,按位编程,从而实现了快闪擦除的高速度。目前它广泛应用于PCBIOS 、数字蜂窝电话、汽车领域和微控制器等许多领域。
EPROM 、EEPROM 、Flash 存储器需通过专用的编程器将程序和数据写入其中。
2. 51系列单片机ROM 空间
由于5l 系列单片机的程序计数器PC 是16位的,所以能寻址64KB 的程序存储器地址范围。允许用户程序调用或转向64KB 的任何存储单元。在5l 系列单片机中根据不同的型号,其程序存储器的形式也有所不同。例如:8051单片机在芯片内部设置了4 KB 掩模版的ROM , 8751单片机在芯片内部设置了4 KB 的EPROM ,89C52单片机在芯片内部设置了8 KB 的Flash 存储器, 而8031单片机在芯片内部没有设置程序存储器,需要在单片机外部配置EPROM 。 51系列单片机的EA 引脚为访问内部或外部程序存储器的选择端。接高电平时,CPU 将首先访问内部存储器,当指令地址超过内部存储器的最大地址时,自动转向片外ROM 去取指令。当EA 引脚接低电平时(接地) ,CPU 只能访问外部程序存储器。对于8031单片机,由于其内部无程序存储器,故只能采用这种接法。
51系列单片机程序存储器的地址从0000H 开始编址。程序存储器低端的一些地址被固定地用作特定程序的入口地址: 0000H 0000H :单片机复位后的程序入口地址; 0001H 0003H :外部中断0的中断服务程序入口地址;
000BH :定时器0的中断服务程序入口地址;0013H :外部中断l 的中断服务程序入口地址;001BH :定时器1的中断服务程序入口地址; 0023H :串行端口的中断服务程序入口地址;
002BH :定时器2的中断服务程序入口地址。 FFFFH
图 1.1.1 ROM 空间示意 编程时,通常在这些入口地址开始的二三个单元中,放人一条转移指令,以使相应的服务与实际分配的程序存储器区域中的程序段相对应(仅在中断服务程序较短时,才可以将中断服务程序直接放在相应的人口地址开始的几个单元中) 。
3. 源程序汇编与程序定位伪指令
将汇编语言源程序转换为计算机能执行的机器码形式的目标程序的过程叫汇编。汇编常用的方法有两种:一是手工汇编,二是利用计算机汇编。
手工汇编时,把程序用助记符指令写出后,通过手工方式查指令编码表,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制形式) 键入到单片机开发机中,并进行调试。由于手工汇编是按绝对地址进行定位的,所以,对于偏移量的计算和程序的修改有诸多不便。通常只有程序较小或条件所限时才使用。
机器汇编是在常用的个人计算机上,使用交叉汇编程序将汇编语言源程序转换为计算机能执行的机器码形式的目标程序。汇编工作由计算机自动完成。生成的目标程序由PC 机传到开发机上,经调试无误后,再固化到程序存储器ROM 中。机器汇编与手工汇编相比具有极大的优势,是汇编工作的首选。本教材选用的伟福仿真软件就可进行机器汇编。
伪指令不是单片机执行的指令,没有对应的机器码,仅是用来对汇编过程进行某种控制。常用的伪指令有: (1) 定位伪指令ORG
格式:[标号:] ORG l6位地址
功能:规定程序块或数据块存放的起始地址。如:
ORG 8000H
START :MOVA ,#30H
该语句规定第一条指令从地址8000H 单元开始存放。标号START 的值为8000H 。通常,在一段汇编语言源程序的开始,都要设置一条ORG 伪指令来指定该程序在存储器中存放的起始位置。若省略ORG 伪指令,则该程序段从0000H 单元开始存放。在一个源程序中,可以多次使用ORG 伪指令,以规定不同程序段或数据段存放的起始地址,但要求16位地址值由 小到大依序排列,不允许空间重叠。 (2) 汇编结束伪指令 END
格式:[标号:] END [表达式]
功能:结束汇编。
汇编程序遇到END 伪指令后即结束汇编。处于END 之后的程序,汇编程序不予处理。 (3) 字节数据定义伪指令 DB
格式:[标号:] DB 8位字节数据表
功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。字节数据表可以是一个或多个字节数据、字符串或表达式。该伪指令将字节数据表中的数据按从左到右的顺序依次存放在指定的存储单元中。一个数据占一个存储单元。
4. 伟福V3.2版仿真软件使用
见附录X
二、实训用程序
ORG 0000H
AJMP BEGIN ;转初始化程序段
ORG 0003H
LJMP PINT0;转外部中断0的中断服务程序 ORG 0100H
BEGIN: SETB EA ; 初始化程序段
SETB EX0
SETB PX0 SETB IT0
MOV R0, #03H MOV A, #0A8H MOV @R0, A MOV R1, #20H MOV R2, #31H MOV R0, #00H MOV A, @R1 MOVX @R0, A MOV R0, #03H MOV A, #01H MOVX @R0, A CLR A
MOVX @R0, A
LOOP: SJMP $
ORG 2000H
PINT0: MOV R0, #00H ; 外部中断0的中断服务程序
INC R1 MOV A, @R1 MOVX @R0, A MOV R0, #02H MOV A, #01H MOVX @R0, A CLR A
MOVX @R0, A DJNZ R2, NEXT
CLR EX0 SJMP DONE
NEXT: SETB EX0 DONE: RETI
END
三、实训
将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到计算机中,并以*.ASM 文件名保存,然后进行汇编。汇编成功后,通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→CODE ”菜单观察程序存储器(ROM )中的内容,理解“地址”、“指令代码”的概念,并了解51系列单片机程序存储器(ROM )空间的分布特点。 注:本节实训不要求读者具体读懂上述程序的具体功能。
具体步骤如下:
(1) 打开伟福V3.2版仿真软件,选择伟福软件模拟器。如图1.1.2所示
图1.1.2
(2) 选择“文件(F)→新建文件(N)”, 输入实训用程序。如图1.1.3所示
图1.1.3
(3) 程序输完后,选择“文件(F)→另存为(A)”, 在弹出的对话框中输入带有.ASM 后缀新文件名。按“保存”按钮后,程序就会以带有.ASM 后缀的文件形式存储磁盘上。(注意此时程序中字符会根据伟福仿真软件的设置变色。)如图1.1.4所示
图1.1.4
(4) 选择“项目→编译”对源程序进行汇编,如图1.1.5所示。若无错,则会在模拟的程序存储器中形成机器指令代码。
图1.1.5
(5) 选择“窗口→数据窗口→CODE ”,观察程序存储器(ROM )中的内容。如图1.1.6所示
图1.1.6
图1.1.7是在模拟的程序存储器中形成的机器指令代码。蓝字部分为地址,黑字部分为
图1.1.7
(6) 根据图1.1.7窗口数据,填写下列表格。
1.2 认识51系列单片机的片内随机存储器(片内RAM )
第一部分 教学要求
一、目的要求
1. 认识51系列单片机片内随机存储器(片内RAM )的空间范围; 2. 认识51系列单片机片内随机存储器的区域划分; 3. 掌握字节地址和位地址的概念; 4. 了解R0~R7寄存器与字节地址的关系。
二、实训平台 1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件。
三、 学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识 1. RAM 存储器
RAM (Random Access Memory)即随机访问存储器之意,RAM 存储器是一种既可读
又可写的易失性存储器,其特点是断电后所存储的信息将全部丢失,通常用来暂存运行的程序和数据。但在单片机应用系统中RAM 存储器仅被用来暂存运行的数据。 2. 51系列单片机片内随机存储器的区域划分
51系列单片机片内随机存储器根据型号的不同,其存储容量为128B 或256B 。典型
芯片的容量为128B ,被划分为工作寄存器区、位寻址区和通用RAM 区等三个区域。如图1.2.1所示。
其中单片机片内RAM 中,最低的32个字节又被分成4个工作寄存器组,每组占8个字节。即:
寄存器0组:地址00H 一07H ;
寄存器1组:地址08H 一0FH ; 寄存器2组:地址10H 一17H ; 寄存器3组:地址18H — 1FH 。
每个工作寄存器组都有8个寄存器,分别称为:R0,R1,„,R7。程序运行时,只能有一个工作寄存器组作为当前工作寄存器组。当前工作寄存器组的选择是由特殊功能寄存器中的程序状态字寄存器PSW 的RSl 、RS0两位决定的。可以对这两位进行编程,以选择不同的工作寄存器组。工作寄存器组与RSl 、RS0的关系及地址如表2—l
所示。
图1.2.1 51系列单片机片内RAM 区域划分
表2—1 8051单片机工作寄存器地址表
在工作寄存器区之后的20H~2FH的16个字节为位寻址区,共有128位。每位都有相应的位地址,范围是00H~7FH。利用位寻址,可以对被寻址的位进行位操作。在实际应用中常把各种程序状态标志、位控制变量设在位寻址区内。对于该区未用到的单元也可以作为通用RAM 使用。
位寻址区之后的30H~7FH共80个字节为通用RAM 区。这些单元有两种用途:其一可以作为数据缓冲器使用;其二设置堆栈区。51系列单片机的堆栈一般设在30H ~7FH 的范围内。栈顶的位置由SP 寄存器指示。系统复位时SP 的初值为07H ,在系统初始化时可以重新设置。
3. 寻址方式与汇编指令
立即数寻址:例 MOV 30H, #20H ;将数据20H 送入30H 单元中;
直接寻址: 例 MOV 30H , 20H ;将20H 单元中的数据送入30H 单元中;
间接寻址: 例 MOV @R0, 30H ;将30H 单元中的数据送入以 R0寄存器中的内
容为地址的存储单元中; 寄存器寻址:例 MOV R0, #20H ;将数据20H 送入R0寄存器中; 位寻址: 例 SETB 00H ;将位地址为00H 的位置1。
二、实训用程序 ORG 0000H AJMP BEGIN ORG 0030H
BEGIN: MOV R0, #00H ; 0=>R0 MOV R1, #11H ; 11H=>R1
MOV R6, #66H ; 66H=>R6 MOV R7, #77H ; 77H=>R7
MOV R0, 01H ; 将01单元中的数据=>R0 ①
MOV R6, 07H ; 将07单元中的数据=>R6
SETB RS0 ; 设置寄存器组为一组,RS1,RS0=01 ② MOV R0, 00H ; 将00单元中的数据=>寄存器一组中的R0 MOV R1, 01H ; 将01单元中的数据=>寄存器一组中的R1 MOV R7, 07H ; 将07单元中的数据=>寄存器一组中的R7 SETB RS1 ; 设置寄存器组为三组,RS1,RS0=11 ③ MOV R6, 00H ; 将00单元中的数据=>寄存器三组中的R6 MOV R7, 17H ; 将17单元中的数据=>寄存器三组中的R7 MOV 20H , #00H ; 0=>20H单元 ④ MOV 2FH, #0FFH ; FFH=>2FH单元 SETB 00H ; 位地址00H 置“1” ⑤ SETB 07H ; 位地址07H 置“1” CLR 78H ; 位地址78H 清“0” CLR 7FH ; 位地址7FH 清“0” MOV 31H , #31H ;31H=>31H单元 ⑥ MOV 32H , #32H ;32H=>32H单元 CLR RS0 ; ⑦
CLR RS1 ; 设置寄存器组为0组,RS1,RS0=00 PUSH 00H ; 将00单元中的数据入栈 MOV SP , #30H ; 重新设置栈地址为30H ⑧ PUSH 00H ; 将00单元中的数据入栈
PUSH 01H ; 将01单元中的数据入栈 ⑨ POP 00H ; 弹出栈顶数据至00单元 POP 01H ; 弹出栈顶数据至01单元 AJMP $ ; ⑩
三、实训
1. 阅读以上程序,正确理解每一条指令功能。
2. 将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到
计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 汇编成功后,分别将光标移至标记①~⑨所在行,通过伟福V3.2版仿真软件的“执行
(R)→设置/取消断点(B)”菜单对标记①~⑨所在行设置断点。如图1.2.2所示。 4. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。
图1.2.2
5. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第一个断点处暂停。 6. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。 如图1.2.3和图1.2.4所示。
图1.2.3
图1.2.4
7.填写下表。体会0组寄存器组与片内RAM 地址的关系。
8. 通过伟福V3.2版仿真软件的“执行(R)→全速执行
(R)”菜单, 执行到第二个断点处暂停。
9. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。 10.填写下表。体会寄存器与寄存器之间的数据传递。
11. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第三个断点处暂停。
12. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口
(D)→
DATA ”菜单, 观察指令运行结果。
13.填写下表。体会第一组寄存器组与片内RAM 地址的关系。
14. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第四个断点处暂停。
15. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
16.填写下表。体会第三组寄存器组与片内RAM 地址的关系。
17. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第五个断点处暂停。
18. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
19.填写下表。体会位寻址空间。
20. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第六个断点处暂停。
21. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
22. 填写下表。体会位地址与字节地址的关系。
23. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第七个断点处暂
停。
24. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
25.填写下表。
26.
通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第八个断点处暂停。
27. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
28.填写下表。体会初始栈区的位置
29. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第九个断点处暂停。
30. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
31.填写下表。体会修改后栈区的位置
32. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第十个断点处暂停。
33. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
34.填写下表。体会利用堆栈进行数据传递
1.3 认识51系列单片机的片内特殊功能寄存器
第一部分 教学要求
一、目的要求
1. 认识51系列单片机片内特殊功能寄存器的地址空间范围; 2. 掌握51系列单片机片内特殊功能寄存器的字节地址; 3. 了解51系列单片机片内特殊功能寄存器的用途; 4. 掌握51系列单片机片内特殊功能寄存器的位地址。
二、实训平台 1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件。
三、 学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识
1.51系列单片机片内特殊功能寄存器(SFR )的地址空间是与片内随机存储器统一编址的,其地址空间范围是80H ~FFH 。如图1.3.1所示。
图1.3.1
2. 51系列单片机根据芯片型号的不同,其片内特殊功能寄存器的数量有所不同。以典型芯片8031为例,片内特殊功能寄存器有21个。它们离散地分布在80H ~FFH 地址(字节地址)空间上。
值得注意的是:那些分布在字节地址能被8整除的(即16进制的地址码尾数为0或8的)单元的特殊功能寄存器不但有字节地址而且还具有位地址,其位地址的空间范围也是80H ~FFH ,但不连续编址。编址的原则是具有位地址的特殊功能寄存器,其字节地址亦是特殊功能寄存器第0位的位地址。例如:作为特殊功能寄存器之一的累加器A ,字节地址为E0H ,则累加器A 第0位的位地址也是E0H ,累加器A 第0位至第7位的位地址是E0H ~E7H 。 见表1.3.1。
3. 51系列单片机片内的特殊功能寄存器有着特殊的地位。从某种意义上讲使用51系列单片机就是使用单片机片内的特殊功能寄存器,因此,正确地理解和使用51系列单片机片内的特殊功能寄存器对使用51系列单片机而言是具有决定性作用的。
51系列单片机片内的特殊功能寄存器几乎包括了在微型计算机原理中叙述的所有基本功能单元。这些基本功能单元是:计算、寻址、计算机及程序状态、并行和串行I/O操作、定时/计数器操作和中断控制等。简单罗列如下:
·累加器A ,8位。它是8051单片机中最繁忙的寄存器,用于向ALU 提供操作数,许多运算的结果也存放在累加器中。
·B 寄存器,8位。主要用于乘、除法运算。也可以作为RAM 的一个单元使用。
·PSW 是程序状态字寄存器,8位。起标志寄存器的作用。其中CY 是进位、借位标志,有进位、借位时CY=1,否则CY=0;AC 是辅助进位、借位标志(高四位与低四位间的进位、借位) ,有辅助进位、借位时AC=1,否则AC=0;FO 是用户标志位,由用户自己定义;RSl 、RS0为工作寄存器组选择位;OV 为溢出标志位,有溢出时OV=l,否则OV=0;P 是奇偶标志位,运算结果中有奇数个“1”时P=l,否则P=0。
·SP 栈指针寄存器,8位。用于指示当前栈顶地址。栈操作遵循“后进先出”的原则。入栈操作时,SP 先加1,数据再压人SP 指向的单元。出栈操作时,先将SP 指向的单元的数据弹出,然后,SP 再减1,这时SP 指向的单元是新的栈顶。
·DPTR 是16位的数据指针寄存器。它由两个8位的寄存器DPH 和DPL 组成,用来存放16位的地址,采用间接寻址或变址寻址方式可对片外的RAM 或ROM 作64KB 范围的数据进行操作。
·P0、P1、P2、P3是4个并行I /O 端口寄存器。通过对这几个寄存器的读/写,可以实现数据从相应端口的并行输入/输出。
·SBUF 是串行端口数据缓冲器,通过SBUF 可以实现全双工串行数据通信。 ·SCON 是串行端口控制寄存器,用于控制和设置串行数据通信。
·PCON 是串行通信波特率倍增寄存器,用于设置串行数据通信的波特率。
·THO 、TL0是定时/计数器TO 的两个8位计数初值寄存器,可以构成16位的计数器,其中,TH0存放高8位,TL0存放低8位。
·TH1、TL1是定时/计数器T1的两个8位计数初值寄存器,可以构成16位的计数器,其中,TH1存放高8位,TL1存放低8位。
·TMOD 是定时/计数器的工作模式寄存器,用于设置定时/计数器的工作模式 ·TCON 是定时/计数器的控制寄存器,用于控制定时/计数器和中断的操作。 ·IE 是中断允许控制寄存器, 用于允许/屏蔽中断源的中断请求。 ·IP 是中断优先级控制寄存器,用于设置中断源的中断优先级。
表1.3.1
二、实训用程序 ORG 0000H AJMP BEGIN
ORG 0030H
BEGIN: MOV A, #0FH ; 0F=>A
MOV 0E0H, #0F0H ; F0H=>E0H单元
SETB 0E0H ; 将位地址E0H 置1 CLR 0E7H ; 将位地址E7H 清零 CLR C ; 清进位位
ADD A, #0FFH
;(A)+FFH=>A
ADDC A, #00H ;(A)+00H+CY=>A SETB 0EAH ; 将位地址EAH 置1 MOV P1, #0FH ;0FH=>P1
SETB P1.7 ; 将位地址97H 置1 CLR P1.0 ; 将位地址90H 清零 MOV DPL, #00H
MOV DPH, #20H ;DPTR=2000H MOV TL0, #00H
MOV TH0, #10H ;TH0TL0=1000H AJMP $
三、实训
1.阅读以上程序,正确理解每一条指令功能。
2.将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。 4. 选择伟福V3.2版仿真软件的“执行(R)→单步(S) 菜单或按F8键,如图1.3.2所示。单
步执行实训用程序。
图
1.3.2
5. 选择伟福V3.2版仿真软件的“窗口(W)→CPU 窗口菜单,如图1.3.3所示。并根据表1.3.1,
填表下列表格。
表1.3.2 1.3.3
1.4 认识51系列单片机的片外数据存储器(片外RAM )及全部存储空间访问
第一部分 教学要求
一、目的要求
1.认识51系列单片机的片外数据存储器(片外RAM )的地址空间范围;
2.认识51系列单片机的片外数据存储器的用途;
3.掌握51系列单片机全部存储空间(ROM 、片外RAM 和片内RAM )的访问方法。
二、实训平台 1.PC 机,台/人;
2.伟福V3.2版仿真软件或其它51系列单片机仿真软件
三、教学节奏与方式
四、成绩评定
(注:成绩评定等级:优良、及格、不及格)
第二部分 教学内容
一、预备知识
1. 片外RAM 存储器
由于51系列单片机片外的地址总线为16位,所以能寻址的片外RAM 空间为64K 。与片内的RAM 存储器一样,片外RAM 存储器也是一种既可读又可写的易失性存储器,故片外RAM 存储器通常被用来暂存程序运行时所采集的数据。 2. 51系列单片机三类存储器空间
51系列单片机的存储器空间按访问途径分,可分为三类(ROM 、片内RAM 和片外RAM )。如图1.4.1所示。这三类存储器空间在使用上有着明确地分工,ROM 用来存储程序和数据表,由于ROM 存储器需使用专用的编程器进行写入,并且是非易失性的,所以人们形象地称写入ROM 中的程序和数据为固化。片内RAM 存储器的使用最为丰富,除了有非常重要的特殊功能寄存器外,还有工作寄存器组、堆栈、位地址和用户数据缓存等用途。片外RAM 存储器的用途最为单一,仅被用作暂存程序运行时所采集的数据,通常I/O接口会占用一些片外RAM 存储器的地址(这部分内容将在后面的章节介绍)。
图1.4.1
3. 51系列单片机三类存储器空间的访问(存/取)
从图1.4.1上我们可以看到三类存储器空间的地址都是从0开始编址的,这就意味着
这三类存储器的地址空间是重叠的(ROM 与片外RAM 完全重叠,片内RAM 存储器
与片外RAM 存储器和ROM 的低端重叠)。从微机原理上讲,地址是CPU 用来选择访问对象的(每一个地址即为一个对象),并且在任一时刻CPU 的访问对象必须是唯一的。由于三类存储器的地址空间是重叠的,单靠地址无法唯一选择访问对象。所以在51系列单片机中了采用地址+控制信号的方法来选择访问对象,具体做法是:对三类存储器地址空间的访问分别用三种不同的控制信号+地址进行,这样即使地址编码相同,但由于控制信号的不同,所以CPU 也能唯一选择访问对象。 4. 控制信号与指令
微机原理告诉我们,控制信号的产生是指令被译码的结果,那么不同的控制信号就
是不同的指令被译码的结果。在51系列单片机中,读ROM 是PSEN 信号有效、读片外
RAM 是RD 信号有效,而写片外RAM 则是WR 信号有效。访问三类存储器空间地址的指令(举例)及单片机引脚信号见表1.4.1。
二、实训用程序 ORG 0000H AJMP BEGIN ORG 0030H
BEGIN: MOV DPTR, #0100H ; 100H=>DPTR CLR A ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR)
ADD A, #05H ;A+5=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) INC DPTR ;DPTR+1=>DPTR CLR A ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) INC DPL ;DPL+1=>DPL MOV A, #00H ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) AJMP $
ORG 0100H
DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H 三、实训
1.阅读以上程序,正确理解每一条指令功能。
2.将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到
计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 编成功后,选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容
(指令编码),特别注意ROM 中0030H 单元后以及0100H 单元后的内容,具体步骤见
本章第一节。
4. 察片外RAM 中的内容(指令的执行结果),选择“窗口(W)→数据窗口(D)→XDATA ”菜
单,如图1.4.2所示。
图1.4.2
5. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。 6. 选择伟福V3.2版仿真软件的“执行(R)→单步(S) 菜单或按F8键,如图1.3.2所示。单
步执行实训用程序。
7.选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容,填写下表。
8.选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容,填写下表。
体会伪指令的DB 的作用。
9RAM 中的内容,填写下表。体
第一章
认识51系列单片机存储空间
计算机的应用是一个系统,这个系统应由两部分组成――硬件和软件。硬件是指具体的元器件、电路等,软件则是指程序和数据。如果説硬件是计算机应用系统的基础的话,那么软件则是计算机应用系统的灵魂。计算机原理告诉我们程序和数据是被“装载”在计算机存储器中的,从某种意义上讲,认识一个计算机的存储器系统是开发软件所必须的。
为了全面认识51系列单片机的存储空间,本章列出四个实训单元。在进行完本章列出的四个实训单元后,要求读者应全面了解51系列单片机的程序存储器(ROM )、片内随机存储器(片内RAM )和片外随机存储器(片外RAM )空间的范围、用途和使用方法等。
1.1 认识51系列单片机的程序存储器(ROM )
第一部分 教学要求
一、目的要求
1. 认识51系列单片机的程序存储器(ROM )的空间范围; 2. 认识汇编指令编码在ROM 中存储形式;
3. 掌握指令编码和指令编码所在地址的概念;
4. 了解51系列单片机的程序存储器(ROM )固定地址的用途。 二、实训平台
1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件
三、 教学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识 1. ROM 存储器
ROM(Real Only Memory)即只读存储器之意,其特点是在计算机正常运行的情况下CPU
对ROM 存储器只能进行读操作且断电后信息不会丢失,通常用来存储固定不变的程序和数据,如引导程序、基本输入输出系统程序等。ROM 按其性能可分为以下几类: (1)掩模工艺ROM
它是由芯片制造厂根据ROM 要求存储的信息,制造成固定的半导体掩模版生产的。一旦制出成品后,其存储的信息只能读出,不能改变。这种ROM 适用于存储固定不变的程序和数据,批量生产时,成本较低。 (2)可一次编程PROM
允许用户对ROM 进行一次编程。 (3)可擦除的EPROM
允许用户对ROM 进行多次编程,即可擦除。按擦除的方法不同,可分为紫外线擦除的可擦除可编程序只读存储器EPROM(Erasable Programmable Read Only Memory)和电擦除的电可擦除编程序只读存储器EEPROM(Electrically Erasable Programmable Read Only Memory) 。
(4)Flash存储器
Flash 存储器是在20世纪80年代末逐渐发展起来的一种新型不挥发性半导体存储器,它结合了以往EPROM 结构简单、密度高和EEPROM 在系统的电可擦除性的一些优点,实现了高密度、低成本和高可靠性。Flash 存储器和传统存储器的最大区别在于它是按块(Sector)擦除,按位编程,从而实现了快闪擦除的高速度。目前它广泛应用于PCBIOS 、数字蜂窝电话、汽车领域和微控制器等许多领域。
EPROM 、EEPROM 、Flash 存储器需通过专用的编程器将程序和数据写入其中。
2. 51系列单片机ROM 空间
由于5l 系列单片机的程序计数器PC 是16位的,所以能寻址64KB 的程序存储器地址范围。允许用户程序调用或转向64KB 的任何存储单元。在5l 系列单片机中根据不同的型号,其程序存储器的形式也有所不同。例如:8051单片机在芯片内部设置了4 KB 掩模版的ROM , 8751单片机在芯片内部设置了4 KB 的EPROM ,89C52单片机在芯片内部设置了8 KB 的Flash 存储器, 而8031单片机在芯片内部没有设置程序存储器,需要在单片机外部配置EPROM 。 51系列单片机的EA 引脚为访问内部或外部程序存储器的选择端。接高电平时,CPU 将首先访问内部存储器,当指令地址超过内部存储器的最大地址时,自动转向片外ROM 去取指令。当EA 引脚接低电平时(接地) ,CPU 只能访问外部程序存储器。对于8031单片机,由于其内部无程序存储器,故只能采用这种接法。
51系列单片机程序存储器的地址从0000H 开始编址。程序存储器低端的一些地址被固定地用作特定程序的入口地址: 0000H 0000H :单片机复位后的程序入口地址; 0001H 0003H :外部中断0的中断服务程序入口地址;
000BH :定时器0的中断服务程序入口地址;0013H :外部中断l 的中断服务程序入口地址;001BH :定时器1的中断服务程序入口地址; 0023H :串行端口的中断服务程序入口地址;
002BH :定时器2的中断服务程序入口地址。 FFFFH
图 1.1.1 ROM 空间示意 编程时,通常在这些入口地址开始的二三个单元中,放人一条转移指令,以使相应的服务与实际分配的程序存储器区域中的程序段相对应(仅在中断服务程序较短时,才可以将中断服务程序直接放在相应的人口地址开始的几个单元中) 。
3. 源程序汇编与程序定位伪指令
将汇编语言源程序转换为计算机能执行的机器码形式的目标程序的过程叫汇编。汇编常用的方法有两种:一是手工汇编,二是利用计算机汇编。
手工汇编时,把程序用助记符指令写出后,通过手工方式查指令编码表,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制形式) 键入到单片机开发机中,并进行调试。由于手工汇编是按绝对地址进行定位的,所以,对于偏移量的计算和程序的修改有诸多不便。通常只有程序较小或条件所限时才使用。
机器汇编是在常用的个人计算机上,使用交叉汇编程序将汇编语言源程序转换为计算机能执行的机器码形式的目标程序。汇编工作由计算机自动完成。生成的目标程序由PC 机传到开发机上,经调试无误后,再固化到程序存储器ROM 中。机器汇编与手工汇编相比具有极大的优势,是汇编工作的首选。本教材选用的伟福仿真软件就可进行机器汇编。
伪指令不是单片机执行的指令,没有对应的机器码,仅是用来对汇编过程进行某种控制。常用的伪指令有: (1) 定位伪指令ORG
格式:[标号:] ORG l6位地址
功能:规定程序块或数据块存放的起始地址。如:
ORG 8000H
START :MOVA ,#30H
该语句规定第一条指令从地址8000H 单元开始存放。标号START 的值为8000H 。通常,在一段汇编语言源程序的开始,都要设置一条ORG 伪指令来指定该程序在存储器中存放的起始位置。若省略ORG 伪指令,则该程序段从0000H 单元开始存放。在一个源程序中,可以多次使用ORG 伪指令,以规定不同程序段或数据段存放的起始地址,但要求16位地址值由 小到大依序排列,不允许空间重叠。 (2) 汇编结束伪指令 END
格式:[标号:] END [表达式]
功能:结束汇编。
汇编程序遇到END 伪指令后即结束汇编。处于END 之后的程序,汇编程序不予处理。 (3) 字节数据定义伪指令 DB
格式:[标号:] DB 8位字节数据表
功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。字节数据表可以是一个或多个字节数据、字符串或表达式。该伪指令将字节数据表中的数据按从左到右的顺序依次存放在指定的存储单元中。一个数据占一个存储单元。
4. 伟福V3.2版仿真软件使用
见附录X
二、实训用程序
ORG 0000H
AJMP BEGIN ;转初始化程序段
ORG 0003H
LJMP PINT0;转外部中断0的中断服务程序 ORG 0100H
BEGIN: SETB EA ; 初始化程序段
SETB EX0
SETB PX0 SETB IT0
MOV R0, #03H MOV A, #0A8H MOV @R0, A MOV R1, #20H MOV R2, #31H MOV R0, #00H MOV A, @R1 MOVX @R0, A MOV R0, #03H MOV A, #01H MOVX @R0, A CLR A
MOVX @R0, A
LOOP: SJMP $
ORG 2000H
PINT0: MOV R0, #00H ; 外部中断0的中断服务程序
INC R1 MOV A, @R1 MOVX @R0, A MOV R0, #02H MOV A, #01H MOVX @R0, A CLR A
MOVX @R0, A DJNZ R2, NEXT
CLR EX0 SJMP DONE
NEXT: SETB EX0 DONE: RETI
END
三、实训
将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到计算机中,并以*.ASM 文件名保存,然后进行汇编。汇编成功后,通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→CODE ”菜单观察程序存储器(ROM )中的内容,理解“地址”、“指令代码”的概念,并了解51系列单片机程序存储器(ROM )空间的分布特点。 注:本节实训不要求读者具体读懂上述程序的具体功能。
具体步骤如下:
(1) 打开伟福V3.2版仿真软件,选择伟福软件模拟器。如图1.1.2所示
图1.1.2
(2) 选择“文件(F)→新建文件(N)”, 输入实训用程序。如图1.1.3所示
图1.1.3
(3) 程序输完后,选择“文件(F)→另存为(A)”, 在弹出的对话框中输入带有.ASM 后缀新文件名。按“保存”按钮后,程序就会以带有.ASM 后缀的文件形式存储磁盘上。(注意此时程序中字符会根据伟福仿真软件的设置变色。)如图1.1.4所示
图1.1.4
(4) 选择“项目→编译”对源程序进行汇编,如图1.1.5所示。若无错,则会在模拟的程序存储器中形成机器指令代码。
图1.1.5
(5) 选择“窗口→数据窗口→CODE ”,观察程序存储器(ROM )中的内容。如图1.1.6所示
图1.1.6
图1.1.7是在模拟的程序存储器中形成的机器指令代码。蓝字部分为地址,黑字部分为
图1.1.7
(6) 根据图1.1.7窗口数据,填写下列表格。
1.2 认识51系列单片机的片内随机存储器(片内RAM )
第一部分 教学要求
一、目的要求
1. 认识51系列单片机片内随机存储器(片内RAM )的空间范围; 2. 认识51系列单片机片内随机存储器的区域划分; 3. 掌握字节地址和位地址的概念; 4. 了解R0~R7寄存器与字节地址的关系。
二、实训平台 1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件。
三、 学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识 1. RAM 存储器
RAM (Random Access Memory)即随机访问存储器之意,RAM 存储器是一种既可读
又可写的易失性存储器,其特点是断电后所存储的信息将全部丢失,通常用来暂存运行的程序和数据。但在单片机应用系统中RAM 存储器仅被用来暂存运行的数据。 2. 51系列单片机片内随机存储器的区域划分
51系列单片机片内随机存储器根据型号的不同,其存储容量为128B 或256B 。典型
芯片的容量为128B ,被划分为工作寄存器区、位寻址区和通用RAM 区等三个区域。如图1.2.1所示。
其中单片机片内RAM 中,最低的32个字节又被分成4个工作寄存器组,每组占8个字节。即:
寄存器0组:地址00H 一07H ;
寄存器1组:地址08H 一0FH ; 寄存器2组:地址10H 一17H ; 寄存器3组:地址18H — 1FH 。
每个工作寄存器组都有8个寄存器,分别称为:R0,R1,„,R7。程序运行时,只能有一个工作寄存器组作为当前工作寄存器组。当前工作寄存器组的选择是由特殊功能寄存器中的程序状态字寄存器PSW 的RSl 、RS0两位决定的。可以对这两位进行编程,以选择不同的工作寄存器组。工作寄存器组与RSl 、RS0的关系及地址如表2—l
所示。
图1.2.1 51系列单片机片内RAM 区域划分
表2—1 8051单片机工作寄存器地址表
在工作寄存器区之后的20H~2FH的16个字节为位寻址区,共有128位。每位都有相应的位地址,范围是00H~7FH。利用位寻址,可以对被寻址的位进行位操作。在实际应用中常把各种程序状态标志、位控制变量设在位寻址区内。对于该区未用到的单元也可以作为通用RAM 使用。
位寻址区之后的30H~7FH共80个字节为通用RAM 区。这些单元有两种用途:其一可以作为数据缓冲器使用;其二设置堆栈区。51系列单片机的堆栈一般设在30H ~7FH 的范围内。栈顶的位置由SP 寄存器指示。系统复位时SP 的初值为07H ,在系统初始化时可以重新设置。
3. 寻址方式与汇编指令
立即数寻址:例 MOV 30H, #20H ;将数据20H 送入30H 单元中;
直接寻址: 例 MOV 30H , 20H ;将20H 单元中的数据送入30H 单元中;
间接寻址: 例 MOV @R0, 30H ;将30H 单元中的数据送入以 R0寄存器中的内
容为地址的存储单元中; 寄存器寻址:例 MOV R0, #20H ;将数据20H 送入R0寄存器中; 位寻址: 例 SETB 00H ;将位地址为00H 的位置1。
二、实训用程序 ORG 0000H AJMP BEGIN ORG 0030H
BEGIN: MOV R0, #00H ; 0=>R0 MOV R1, #11H ; 11H=>R1
MOV R6, #66H ; 66H=>R6 MOV R7, #77H ; 77H=>R7
MOV R0, 01H ; 将01单元中的数据=>R0 ①
MOV R6, 07H ; 将07单元中的数据=>R6
SETB RS0 ; 设置寄存器组为一组,RS1,RS0=01 ② MOV R0, 00H ; 将00单元中的数据=>寄存器一组中的R0 MOV R1, 01H ; 将01单元中的数据=>寄存器一组中的R1 MOV R7, 07H ; 将07单元中的数据=>寄存器一组中的R7 SETB RS1 ; 设置寄存器组为三组,RS1,RS0=11 ③ MOV R6, 00H ; 将00单元中的数据=>寄存器三组中的R6 MOV R7, 17H ; 将17单元中的数据=>寄存器三组中的R7 MOV 20H , #00H ; 0=>20H单元 ④ MOV 2FH, #0FFH ; FFH=>2FH单元 SETB 00H ; 位地址00H 置“1” ⑤ SETB 07H ; 位地址07H 置“1” CLR 78H ; 位地址78H 清“0” CLR 7FH ; 位地址7FH 清“0” MOV 31H , #31H ;31H=>31H单元 ⑥ MOV 32H , #32H ;32H=>32H单元 CLR RS0 ; ⑦
CLR RS1 ; 设置寄存器组为0组,RS1,RS0=00 PUSH 00H ; 将00单元中的数据入栈 MOV SP , #30H ; 重新设置栈地址为30H ⑧ PUSH 00H ; 将00单元中的数据入栈
PUSH 01H ; 将01单元中的数据入栈 ⑨ POP 00H ; 弹出栈顶数据至00单元 POP 01H ; 弹出栈顶数据至01单元 AJMP $ ; ⑩
三、实训
1. 阅读以上程序,正确理解每一条指令功能。
2. 将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到
计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 汇编成功后,分别将光标移至标记①~⑨所在行,通过伟福V3.2版仿真软件的“执行
(R)→设置/取消断点(B)”菜单对标记①~⑨所在行设置断点。如图1.2.2所示。 4. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。
图1.2.2
5. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第一个断点处暂停。 6. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。 如图1.2.3和图1.2.4所示。
图1.2.3
图1.2.4
7.填写下表。体会0组寄存器组与片内RAM 地址的关系。
8. 通过伟福V3.2版仿真软件的“执行(R)→全速执行
(R)”菜单, 执行到第二个断点处暂停。
9. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。 10.填写下表。体会寄存器与寄存器之间的数据传递。
11. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第三个断点处暂停。
12. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口
(D)→
DATA ”菜单, 观察指令运行结果。
13.填写下表。体会第一组寄存器组与片内RAM 地址的关系。
14. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第四个断点处暂停。
15. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
16.填写下表。体会第三组寄存器组与片内RAM 地址的关系。
17. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第五个断点处暂停。
18. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
19.填写下表。体会位寻址空间。
20. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第六个断点处暂停。
21. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
22. 填写下表。体会位地址与字节地址的关系。
23. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第七个断点处暂
停。
24. 通过伟福V3.2版仿真软件的“窗口
(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
25.填写下表。
26.
通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第八个断点处暂停。
27. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
28.填写下表。体会初始栈区的位置
29. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第九个断点处暂停。
30. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
31.填写下表。体会修改后栈区的位置
32. 通过伟福V3.2版仿真软件的“执行(R)→全速执行(R)”菜单, 执行到第十个断点处暂停。
33. 通过伟福V3.2版仿真软件的“窗口(W)→数据窗口(D)→DATA ”菜单, 观察指令运行结果。
34.填写下表。体会利用堆栈进行数据传递
1.3 认识51系列单片机的片内特殊功能寄存器
第一部分 教学要求
一、目的要求
1. 认识51系列单片机片内特殊功能寄存器的地址空间范围; 2. 掌握51系列单片机片内特殊功能寄存器的字节地址; 3. 了解51系列单片机片内特殊功能寄存器的用途; 4. 掌握51系列单片机片内特殊功能寄存器的位地址。
二、实训平台 1. PC 机,台/人;
2. 伟福V3.2版仿真软件或其它51系列单片机仿真软件。
三、 学节奏与方式
四、成绩评定
第二部分 教学内容
一、预备知识
1.51系列单片机片内特殊功能寄存器(SFR )的地址空间是与片内随机存储器统一编址的,其地址空间范围是80H ~FFH 。如图1.3.1所示。
图1.3.1
2. 51系列单片机根据芯片型号的不同,其片内特殊功能寄存器的数量有所不同。以典型芯片8031为例,片内特殊功能寄存器有21个。它们离散地分布在80H ~FFH 地址(字节地址)空间上。
值得注意的是:那些分布在字节地址能被8整除的(即16进制的地址码尾数为0或8的)单元的特殊功能寄存器不但有字节地址而且还具有位地址,其位地址的空间范围也是80H ~FFH ,但不连续编址。编址的原则是具有位地址的特殊功能寄存器,其字节地址亦是特殊功能寄存器第0位的位地址。例如:作为特殊功能寄存器之一的累加器A ,字节地址为E0H ,则累加器A 第0位的位地址也是E0H ,累加器A 第0位至第7位的位地址是E0H ~E7H 。 见表1.3.1。
3. 51系列单片机片内的特殊功能寄存器有着特殊的地位。从某种意义上讲使用51系列单片机就是使用单片机片内的特殊功能寄存器,因此,正确地理解和使用51系列单片机片内的特殊功能寄存器对使用51系列单片机而言是具有决定性作用的。
51系列单片机片内的特殊功能寄存器几乎包括了在微型计算机原理中叙述的所有基本功能单元。这些基本功能单元是:计算、寻址、计算机及程序状态、并行和串行I/O操作、定时/计数器操作和中断控制等。简单罗列如下:
·累加器A ,8位。它是8051单片机中最繁忙的寄存器,用于向ALU 提供操作数,许多运算的结果也存放在累加器中。
·B 寄存器,8位。主要用于乘、除法运算。也可以作为RAM 的一个单元使用。
·PSW 是程序状态字寄存器,8位。起标志寄存器的作用。其中CY 是进位、借位标志,有进位、借位时CY=1,否则CY=0;AC 是辅助进位、借位标志(高四位与低四位间的进位、借位) ,有辅助进位、借位时AC=1,否则AC=0;FO 是用户标志位,由用户自己定义;RSl 、RS0为工作寄存器组选择位;OV 为溢出标志位,有溢出时OV=l,否则OV=0;P 是奇偶标志位,运算结果中有奇数个“1”时P=l,否则P=0。
·SP 栈指针寄存器,8位。用于指示当前栈顶地址。栈操作遵循“后进先出”的原则。入栈操作时,SP 先加1,数据再压人SP 指向的单元。出栈操作时,先将SP 指向的单元的数据弹出,然后,SP 再减1,这时SP 指向的单元是新的栈顶。
·DPTR 是16位的数据指针寄存器。它由两个8位的寄存器DPH 和DPL 组成,用来存放16位的地址,采用间接寻址或变址寻址方式可对片外的RAM 或ROM 作64KB 范围的数据进行操作。
·P0、P1、P2、P3是4个并行I /O 端口寄存器。通过对这几个寄存器的读/写,可以实现数据从相应端口的并行输入/输出。
·SBUF 是串行端口数据缓冲器,通过SBUF 可以实现全双工串行数据通信。 ·SCON 是串行端口控制寄存器,用于控制和设置串行数据通信。
·PCON 是串行通信波特率倍增寄存器,用于设置串行数据通信的波特率。
·THO 、TL0是定时/计数器TO 的两个8位计数初值寄存器,可以构成16位的计数器,其中,TH0存放高8位,TL0存放低8位。
·TH1、TL1是定时/计数器T1的两个8位计数初值寄存器,可以构成16位的计数器,其中,TH1存放高8位,TL1存放低8位。
·TMOD 是定时/计数器的工作模式寄存器,用于设置定时/计数器的工作模式 ·TCON 是定时/计数器的控制寄存器,用于控制定时/计数器和中断的操作。 ·IE 是中断允许控制寄存器, 用于允许/屏蔽中断源的中断请求。 ·IP 是中断优先级控制寄存器,用于设置中断源的中断优先级。
表1.3.1
二、实训用程序 ORG 0000H AJMP BEGIN
ORG 0030H
BEGIN: MOV A, #0FH ; 0F=>A
MOV 0E0H, #0F0H ; F0H=>E0H单元
SETB 0E0H ; 将位地址E0H 置1 CLR 0E7H ; 将位地址E7H 清零 CLR C ; 清进位位
ADD A, #0FFH
;(A)+FFH=>A
ADDC A, #00H ;(A)+00H+CY=>A SETB 0EAH ; 将位地址EAH 置1 MOV P1, #0FH ;0FH=>P1
SETB P1.7 ; 将位地址97H 置1 CLR P1.0 ; 将位地址90H 清零 MOV DPL, #00H
MOV DPH, #20H ;DPTR=2000H MOV TL0, #00H
MOV TH0, #10H ;TH0TL0=1000H AJMP $
三、实训
1.阅读以上程序,正确理解每一条指令功能。
2.将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。 4. 选择伟福V3.2版仿真软件的“执行(R)→单步(S) 菜单或按F8键,如图1.3.2所示。单
步执行实训用程序。
图
1.3.2
5. 选择伟福V3.2版仿真软件的“窗口(W)→CPU 窗口菜单,如图1.3.3所示。并根据表1.3.1,
填表下列表格。
表1.3.2 1.3.3
1.4 认识51系列单片机的片外数据存储器(片外RAM )及全部存储空间访问
第一部分 教学要求
一、目的要求
1.认识51系列单片机的片外数据存储器(片外RAM )的地址空间范围;
2.认识51系列单片机的片外数据存储器的用途;
3.掌握51系列单片机全部存储空间(ROM 、片外RAM 和片内RAM )的访问方法。
二、实训平台 1.PC 机,台/人;
2.伟福V3.2版仿真软件或其它51系列单片机仿真软件
三、教学节奏与方式
四、成绩评定
(注:成绩评定等级:优良、及格、不及格)
第二部分 教学内容
一、预备知识
1. 片外RAM 存储器
由于51系列单片机片外的地址总线为16位,所以能寻址的片外RAM 空间为64K 。与片内的RAM 存储器一样,片外RAM 存储器也是一种既可读又可写的易失性存储器,故片外RAM 存储器通常被用来暂存程序运行时所采集的数据。 2. 51系列单片机三类存储器空间
51系列单片机的存储器空间按访问途径分,可分为三类(ROM 、片内RAM 和片外RAM )。如图1.4.1所示。这三类存储器空间在使用上有着明确地分工,ROM 用来存储程序和数据表,由于ROM 存储器需使用专用的编程器进行写入,并且是非易失性的,所以人们形象地称写入ROM 中的程序和数据为固化。片内RAM 存储器的使用最为丰富,除了有非常重要的特殊功能寄存器外,还有工作寄存器组、堆栈、位地址和用户数据缓存等用途。片外RAM 存储器的用途最为单一,仅被用作暂存程序运行时所采集的数据,通常I/O接口会占用一些片外RAM 存储器的地址(这部分内容将在后面的章节介绍)。
图1.4.1
3. 51系列单片机三类存储器空间的访问(存/取)
从图1.4.1上我们可以看到三类存储器空间的地址都是从0开始编址的,这就意味着
这三类存储器的地址空间是重叠的(ROM 与片外RAM 完全重叠,片内RAM 存储器
与片外RAM 存储器和ROM 的低端重叠)。从微机原理上讲,地址是CPU 用来选择访问对象的(每一个地址即为一个对象),并且在任一时刻CPU 的访问对象必须是唯一的。由于三类存储器的地址空间是重叠的,单靠地址无法唯一选择访问对象。所以在51系列单片机中了采用地址+控制信号的方法来选择访问对象,具体做法是:对三类存储器地址空间的访问分别用三种不同的控制信号+地址进行,这样即使地址编码相同,但由于控制信号的不同,所以CPU 也能唯一选择访问对象。 4. 控制信号与指令
微机原理告诉我们,控制信号的产生是指令被译码的结果,那么不同的控制信号就
是不同的指令被译码的结果。在51系列单片机中,读ROM 是PSEN 信号有效、读片外
RAM 是RD 信号有效,而写片外RAM 则是WR 信号有效。访问三类存储器空间地址的指令(举例)及单片机引脚信号见表1.4.1。
二、实训用程序 ORG 0000H AJMP BEGIN ORG 0030H
BEGIN: MOV DPTR, #0100H ; 100H=>DPTR CLR A ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR)
ADD A, #05H ;A+5=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) INC DPTR ;DPTR+1=>DPTR CLR A ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) INC DPL ;DPL+1=>DPL MOV A, #00H ;0=>A
MOVC A, @A+ DPTR ; (A+DPTR)=>A MOVX @DPTR, A ;A=>(DPTR) AJMP $
ORG 0100H
DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H 三、实训
1.阅读以上程序,正确理解每一条指令功能。
2.将以上实训用程序通过伟福V3.2版仿真软件(或其它51系列单片机仿真软件)输入到
计算机中,并以*.ASM 文件名保存,然后进行汇编。 3. 编成功后,选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容
(指令编码),特别注意ROM 中0030H 单元后以及0100H 单元后的内容,具体步骤见
本章第一节。
4. 察片外RAM 中的内容(指令的执行结果),选择“窗口(W)→数据窗口(D)→XDATA ”菜
单,如图1.4.2所示。
图1.4.2
5. 选择伟福V3.2版仿真软件的“执行(R)→复位(E) 菜单。使程序从第一条指令开始执行。 6. 选择伟福V3.2版仿真软件的“执行(R)→单步(S) 菜单或按F8键,如图1.3.2所示。单
步执行实训用程序。
7.选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容,填写下表。
8.选择“窗口(W)→数据窗口(D)→CODE ”,观察程序存储器(ROM )中的内容,填写下表。
体会伪指令的DB 的作用。
9RAM 中的内容,填写下表。体