单片微机原理及应用_实验一_实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验指导书
【实验项目】
实验一:单片微机软件实验
【实验设备】
Keil μvision4软件、计算机
【实验目的】
1、熟悉Keil μvision4操作环境
2、掌握单片机C51编程技巧
3、掌握单片机存储器读写等基本操作
【实验内容及步骤】
一、实验内容1:存储块清零
1. 实验目的
(1)掌握存储器读写方法。
(2)了解存储器的块操作方法。
(3)掌握内存数据的观察方法。
2. 实验原理
(1)数据存储类型
在讨论C51的数据类型时,必须同时提到它的存储类型,以及它与51单片机存储结构的关系,因为C51定义的任何数据类型必须以一定的方式定位在51单片机的某一存储区中,否则没有任何实际意义。
内部数据存储区可分为3个不同的数据存储类型:DATA、IDATA和BDATA。
DATA区寻址是最快的,应该把经常使用的变量放在DATA区,但是其存储空间有限,DATA区除了包含程序变量外,还包括了堆栈和寄存器组。DATA区声明中的存储类型标识符为data,声明方法为:
Unsigned int data uint_ id[8];
BDATA区是DATA中的位寻址区,在这个区中声明变量就可进行位寻址。BDATA区声明中的数据类型标识符为bdata,声明方法:
Unsigned int bdata status_byte;
IDATA区使用寄存器作为指针来进行间接寻址,常用来存放使用比较频繁的变量。与外部存储器寻址相比,它的指令执行周期和
代码长度相对较短。IDATA区声明中的存储类型标识符为idata,声明方法:
Unsigned int data uint_ id[8];
访问片外数据存储区比访问片内存储区慢,因为片外数据存储区是通过数据指针加载地址来间接寻址访问的。C51提供两种不同的数据存储类型xdata和pdata来访问片外数据存储区。PDATA区只有256字节,仅指定256字节的外部数据存储区。但XDATA区最多可达64KB,对应的xdata存储类型标识符可以指定外部数据区64KB内的任何地址。声明方法:
Unsigned int pdata uint_ id[8];
Char xdata inp_ string[16];
程序存储区只能读不能写,可能在51单片机的内部或者外部,或者内外部都有,由单片机的硬件决定,C51提供了code存储类型来访问程序存储区。声明方法:
Unsigned char code a[]={0x00,0x01,0x02,0x03,0x04,0x05};
(2)数据查看方法
通过本实验,学生可以了解单片机读写存储器的读写方法,同时也可以了解单片机编程,调试方法。如何将存储块的内容置成某固定值(如填充为0ffh),请大家完成此操作。
在仿真程序编译后:点击按钮,在点击如下图按钮后,
下方会出现Address工具栏,在Address栏中输入的地址,
其中D表示数据的位于DATA区,0x20表示所要显示的内存块的起始地址。通过改变表中地址内容,查看地址单元中的内容是否被改变。这三个按钮可以复位CPU运行程序,暂停程序。
查看不同数据存储区域的方法:
DATA区——D:8位地址
XDATA区——X:16位地址
CODE区——C:16位地址
IDATA区——I:8位地址
3. 参考程序
数据块清零参考程序。
#include
unsigned char xdata Buffer[256] _at_ 0x3000;
void main()
{
unsigned int index;
unsigned char xdata *ptr;
ptr=&Buffer;
for(index=0;index<=255;index++)
{
*ptr++=0;
}
}
4. 程序框图
数据块清零寄存器如图1-1 (a),寄存器操作流程如图1-1 (b)。
图1-1 (a)数据块清零流程图,(b)寄存器操作流程图
5. 实验报告要求
(1)按照给出的参考程序,指定存储器中某块的起始地址和长度,并能将其内容清零。参照实验原理中的“数据查看方法”,验证程序执行结果,截图保存,并解释程序实现的功能。
(2)根据流程图1-1(b),在程序模板中填入以下语句对应的程序。(附程序模板)
a. 在累加器A中写入立即数25H,向片内RAM的30H单元写入立即数78H;
b. 将片内RAM中30H单元的数据内容复制到工作寄存器R3中;
c. 向寄存器DPTR中写入立即数F637H;
d. 将DPTR寄存器的内容的低8位传给片内RAM的35H单元;
e. 将DPTR寄存器中的高8位传送给片内RAM的36单元。
程序模板:
#include
unsigned char data *iRAM=0x00; //片内RAM区定义
unsigned char data *R=0x00; //寄存器R定义
void main()
{
}
(3)实验总结与思考:观察CPU带电复位后内存单元中的数据变化情况。
二、实验内容2:二进制到BCD转换
1. 实验目的
(1)掌握简单的数值转换方法。
(2)基本了解数值的各种表达方法。
2. 实验内容
(1)编程实现将二进制码转换成BCD码。
(2)编程实现两个字节的BCD转换码换成二进制码。
3. 实验原理
计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。
(1)十进制数
我们熟悉的十进制数有两个主要特点:
① 10个不同的数字符号:0、1、2、 (9)
②低位向高位进、借位的规律是“逢十进一”“借一当十”的原则进行计数。