实验DOC.docx

上传人:b****8 文档编号:27587047 上传时间:2023-07-03 格式:DOCX 页数:30 大小:467.08KB
下载 相关 举报
实验DOC.docx_第1页
第1页 / 共30页
实验DOC.docx_第2页
第2页 / 共30页
实验DOC.docx_第3页
第3页 / 共30页
实验DOC.docx_第4页
第4页 / 共30页
实验DOC.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

实验DOC.docx

《实验DOC.docx》由会员分享,可在线阅读,更多相关《实验DOC.docx(30页珍藏版)》请在冰豆网上搜索。

实验DOC.docx

实验DOC

单片机原理及接口技术

实验指导书

 

班级

学号

姓名

 

电光工程学院

 

实验的共性要求:

●各实验的外扩电路、程序等应在实验课前提前准备;

●程序以及流程图、硬件原理图、程序执行情况截图等均需记载在实验报告上(数据记录纸),并加上必要的说明、注释;

●如实记录实验中软硬件出现的问题以及对应的解决方法;

●务必完成每个实验的思考题。

注意事项:

●学习板等均未加绝缘外壳,因此不要放在金属等导电材质的桌面上使用,也不要在周围放置水杯等,以防损坏设备或发生事故;

●本课程的实验需要焊接外扩电路时,因此务必注意用电安全;

●电烙铁在使用中以及断电后一段时间内仍会处于高温状态,务必注意防止烫伤和发生火灾,电烙铁的存放也应在断电和充分冷却后进行。

 

实验一基本实验

一、实验目的

1、了解单片机开发系统的各主要组成部分。

2、学会使用Keil-C51编程软件,并进行编译调试程序;学会观察各个特殊功能寄存器中数据的变化;掌握单片机在执行过程中PSW的状态。

3、熟悉51单片机的指令系统,掌握汇编语言的主要指令与程序设计方法。

二、实验仪器

1、C51实验开发系统1套

2、直流温压电源1个

3、PC机1台

三、实验内容

1、初步认识仿真器软件和KeilC51软件界面及使用,参见附录1。

2、简单程序调试

(1)传送指令

设置内部RAM的值,(30H)=40H,(40H)=10H,单步执行下列程序,检查结果。

MOVR0,#30H

MOVA,@R0

MOVR1,A

MOVB,@R1

STOP:

SJMPSTOP

执行后:

(R0)=,(R1)=,(A)=,(B)=,(30H)=,(40H)=。

(2)运算指令

单步

执行

MOVA,#0BFH

MOV20H,#85H

SETBC

ADDA,20H

MOVA,#0BFH

MOV20H,#85H

SETBC

ADDCA,20H

MOVA,#0BFH

MOV20H,#85H

SETBC

SUBBA,20H

MOVA,#0BFH

MOVB,#85H

MULAB

SJMP$

结果

标志

(A)=

CY=AC=

OV=P=

(A)=

CY=AC=

OV=P=

(A)=

CY=AC=

OV=P=

(A)=(B)=

CY=AC=

OV=P=

4、多字节十进制数加法

被加数

加数

结果

低位

20H

67

30H

65

20H

21H

45

31H

72

21H

22H

23

32H

98

22H

23H

01

33H

89

23H

高位

图1-24字节十进制数相加

两个4字节十进制数1234567和89987265相加,将其8421-BCD码按低位到高位存放在地址为20-23H、30-33H的RAM中,运算结果存放在20-23H的地址中,如上图示。

运算程序如下,ADD_BCD为多字节十进制数加法子程序的首地址。

分别按“跟踪”、“单步”和“全速”方式调试程序。

检查运算结果,区别“跟踪”、“单步”调试方式的不同。

在“ADD_BCD子程序”的指令“DAA”处设置断点,再用“全速”方式运行,到达断点后,观察“A”的值,然后用“单步”运行,观察指令“DAA”的功能。

同时理解“断点”方式调试程序的特点。

;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;

MOVR0,#20H;置被加数首地址

MOVR1,#30H;置加数首地址

MOVR2,#04H;置被加数和加数的长度(字节数)

ACALLADD_BCD;调用多字节十进制数加法子程序ADD_BCD

STOP:

SJMPSTOP;停止

;;;;;;;;;;多字节十进制数加法子程序;;;;;;;;;;

;入口:

R0、R1为被加数和加数的首地址,按低位到高位存放

;出口:

R0为运算结果的首地址,也按低位到高位存放

ADD_BCD:

CLRC;进位清零

LOOP:

MOVA,@R0;一字节的被加数→A

ADDCA,@R1;一字节加

DAA;十进制数调整

MOV@R0,A;存一字节的运算结果

INCR0;被加数指向下一字节

INCR1;加数指向下一字节

DJNZR2,LOOP;循环控制

RET;子程序返回

END

四、预习要求

1、读懂各程序;

2、预先给出运算结果,以便和实验结果比较;

3、回忆“跟踪”、“单步”和“断点”调试方式的特点。

五、思考题

1、为什么程序结束用“STOP:

SJMPSTOP”指令?

有没有其他的停止方式?

51单片机启动后,是否一直不断地在执行指令?

2、比较“跟踪”、“单步”和“断点”调试方式的特点。

 

实验二程序技术

一、实验目的

1、学会使用Kei-C51编程软件,并进行调试;

2、掌握“最小数”、“转换”等经典编程技术;

二、实验仪器

1、C51实验开发系统1套

2、直流温压电源1个

3、PC机1台

三、开发工具

KeilCISP下载软件STC_ISP_V483

四、实验内容

用C语言设计以下程序。

1.数据排序实验

(1)实验题目:

编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。

(2)算法:

把8051中RAM50H-5AH中放入不等的数据,运行本实验程序后检查50-5AH中内容是否按从小到大排列。

(3)程序框图

图21程序1框图

2.二进制与ASCII码的转换

(1)实验题目:

把存储器中的部分内容转换成二进制ASCII码再存于30H~31H中。

(2)算法:

分别取30H中的高四位与低四位,查ASCII表(自建0~F数符),并存于30H与31H中。

(3)程序框图

图2-2程序2框图

(4)在存储器窗口中输入D:

30H,然后单步执行,查看30H~31H单元值的变化。

3、二进制与BCD码的转换

(1)实验题目:

把123转换成二进制BCD码再以16进制存于30-32H中。

(2)算法:

将123除以100得百位,存于30H中;余数除以10得十位,存于31H中;余数存于32H中。

(3)程序框图

图2-3程序3框图

(4)在存储器窗口中输入D:

30H,然后单步执行,查看30H~31H单元值的变化。

五、思考题

1、注意执行控制转移类指令后PC寄存器的值的变化。

2、R0~R7和RAM地址的关系如何?

实验三定时器中断

一、实验目的

1、学习51单片机内部定时器的使用和编程方法。

2、掌握中断处理程序的编写方法。

二、实验设备

1、C51实验开发系统1套

2、直流温压电源1个

3、PC机1台

三、实验原理

关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。

内部计数器在单片机中主要有定时器和计数器两个功能。

本实验使用的是定时器,定时为一秒钟。

CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。

TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。

TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

内部计数器用作定时器时,是对机器周期计数。

每个机器周期的长度是12个振荡器周期。

因为实验系统的晶振是12MHZ,建议本程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次。

在本实验的中断处理程序中,中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。

四、实验内容

利用51单片机的定时和中断处理功能,使发光二极管隔一秒点亮一次,点亮时间为一秒。

五、思考题

总结51单片机程序设计的操作步骤和技巧。

总结在设计与实验过程中遇到的问题、解决的办法及收获。

实验四人机接口

一、实验目的

1、掌握查询式键盘的工作原理和编程方法。

2、掌握LED的使用方法。

二、实验仪器

1、C51实验开发系统1套

2、直流温压电源1个

3、PC机1台

三、实验原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图4-1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

阵列式键盘行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下:

判断键盘中有无键按下将全部行线H1-3置低电平,然后检测列线L1-3的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

图4-1查询式键盘的工作原理

四、实验内容

在阵列式键盘模块上按下某个键,观察数码管显示是否与按键值一致,16个按键的键值从左至右.从上至下依次为0~F(16进制数)

五、思考题

1、总结51单片机程序设计的操作步骤和技巧。

2、总结在设计与实验过程中遇到的问题、解决的办法及收获。

附录1Keil工程文件的建立、设置与目标文件的获得

进入KeilC51后,屏幕如下图所示。

几秒钟后出现编辑界面:

启动KeilC51时的屏幕:

进入KeilC51后的编辑界面:

简单程序的调试:

学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编程、调试,引导大家学习KeilC51软件的基本使用方法和基本的调试技巧。

1)建立一个新工程 单击Project菜单,在弹出的下拉菜单中选中NewProject选项。

 

2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存。

 3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.

 4)完成上一步骤后,屏幕如下图所示

 到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

 

5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项

  

 新建文件后屏幕如下图所示

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。

然后,单击“保存”按钮。

 6)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下菜单

 然后单击“AddFiletoGroup‘SourceGroup1’”屏幕如下图所示

 选中Test.c,然后单击“Add”屏幕好下图所示

 

注意到“SourceGroup1”文件夹中多了一个子项“Text1.c”了吗?

子项的多少与所增加的源程序的多少相同

 7)现在,请输入如下的C语言源程序:

 #include         //包含文件 

#include 

voidmain(void)          //主函数 

{

SCON=0x52;  

TMOD=0x20;  

TH1=0xf3;  

TR1=1;       //此行及以上3行为PRINTF函数所必须  

printf(“HelloIamKEIL.\n”);  //打印程序执行的信息 

 printf(“Iwillbeyourfriend.\n”);

 while

(1); 

}

 在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

程序输入完毕后,如下图所示

 8)在上图中,单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5),屏幕如下所示

 9)调试程序:

在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果,其结果如下图所示

至此,我们在KeilC51上做了一个完整工程的全过程。

但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢?

10)单击“Project”菜单,再在下拉菜单中单击“

”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。

把程序下载到AT89S51单片机中。

 

附录2C51编程简介

Keil的C51是支持51单片机最成功的C语言,它功能强大且代码效率极高,其应用最为广泛。

但是,C51和标准C有一定的区别,主要体现在数据类型和数据存储结构上的差别,下面主要介绍C51和标准C有区别的内容。

一、C51的数据类型

C语言的基本数据类型有char、int、short、long、float、double。

对于C51来说,short和int类型相同,float和double类型相同。

也就是说,C51不支持双精度浮点运算。

C51的数据类型

数据类型

长度

取值范围

数据类型

长度

取值范围

unsignedchar

单字节

0~255

float

4字节

±1.18e-38~±3.40e38

char

单字节

-128~127

*

1-3字节

对象的地址

unsignedint

双字节

0~65535

bit

1位

0或1

int

双字节

-32768~32767

sfr

单字节

0~255

unsignedlong

4字节

0~4294967295

sfr16

双字节

0~65536

long

4字节

-2147483648

~2147483647

sbit

1位

0或1

1、char、int、long三种类型均分无符号型(unsigned)和有符号型(signed,缺省),有符号型的数据采用补码表示,与标准C的定义相同,其数据长度和取值范围见上表。

2、float也与标准C一样,符合IEEE-754标准,数据长度和取值范围见上表。

float的使用和运算,需要数学库“math.h”的支持。

3、指针型(*),它本身就是一个变量,只是这个变量存放的不是普通的数据,而是指向一个数据的地址。

指针变量本身也要占据一定的内存,在C51中,指针变量的长度一般为1~3个字节。

如char*dat表示dat是一个字符型的指针变量,float*dat1表示dat1是一个浮点型指针变量。

指针变量直接指示硬件的物理地址,因此用它可以方便对8051的各部分物理地址直接操作。

以上数据类型在标准C中都有定义,以下4种类型是C51的扩充数据类型。

4、位类型:

bit

布尔处理器是8051单片机的特色,使用它可以方便进行逻辑操作。

位类型(bit)可以定义一个位变量,由C51编译器在8051内部RAM区20H~2FH的128个位地址中分配一个位地址。

需要注意的是,位类型不能定义指针和数组。

5、特殊功能寄存器:

sfr

8051及其兼容产品的特殊功能寄存器必须采用直接寻址的方式来访问,8051的特殊功能寄存器离散地分布在80H~FFH的地址空间里。

sfr可以对8051的特殊功能寄存器进行定义,sfr型数据占用一个字节,取值0~255。

6、16位特殊功能寄存器:

sfr16

8051及其兼容产品的16位特殊功能寄存器(如DPTR),就可以用sfr16来定义,sfr16型数据占用两个字节,取值0~65535。

在C51编译器提供的头文件reg51.h中,已经把所有的特殊功能寄存器进行定义,我们可以直接用include命令包括在程序中,参见附录2。

注意,在使用时,所有的sfr的名称都必须大写,如开系统中断写为“EA=1”。

7、可寻址位类型:

sbit

利用sbit可以对8051内部RAM的位寻址空间及特殊功能寄存器的可寻址位进行定义。

例如:

sbitflag=P1^0;表示P1.0这条I/O口线定义名为flag的标志。

在使用中需注意,只有unsignedchar和bit类型是8051CPU可以直接用汇编语言支持的数据类型,它们的操作效率最高。

其他的数据类型都有多条汇编指令组合操作,需占用大量的程序存储空间和数据存储器资源。

C51还支持结构类型和联合类型等复杂类型数据,与标准C相同,不另介绍。

8、数据类型的转换

不同类型的数据是可以相互转换的,可以通过赋值或者强制转换。

赋值转换次序为:

bit–char–int–long–float,如果反向赋值,则结果丢弃高位。

强制转换是通过强制转换运算符来实现的,形式为:

(类型名)(表达式),如:

(int)(x+y)和(float)(5%3);

二、C51数据的存储结构

数据分常量和变量。

常量可以用一个标志符号来代表。

变量由变量名和变量值组成,每一个变量占据一定的存储空间,这些存储空间存放变量的值。

8051的存储空间比较复杂,因此,数据的存放也同样复杂,详见下表:

C51的存储器类型。

一般地,C51对变量定义时,除定义数据类型外,还可以定义存储类型。

其格式为:

“数据类型[存储类型]变量名”,或者“[存储类型]数据类型变量名”。

如:

unsignedchardataname_var,或者dataunsignedcharname_var。

存储类型为可选项,如果不做存储类型的定义,系统将按照编译时的存储模式来默认。

具体默认存储类型参见下表:

存储模式与默认存储类型。

C51的存储器类型

存储器类型

说明

data

直接寻址片内RAM,00~7FH空间,速度最快

bdata

可位寻址的片内RAM区20H~2FH空间,容许位和字节混合访问

idada

间接访问片内00~FFH全部256个地址空间

pdata

使用MOVX@Ri指令访问外部RAM分页的00~FFH空间

xdata

使用MOVX@DPTR访问外部RAM的0000~FFFFH全部空间

code

使用MOVC@A+DPTR访问程序存储器0000~FFFFH全部空间

存储模式与默认存储类型

存储模式

默认存储类型

SMALL

参数和局部变量均为片内RAM,即data存储类型,也包括堆栈

COMPACT

参数和局部变量均为片外分页RAM,pdata存储类型,堆栈置于片内RAM

LARGE

参数和局部变量均为片外64K的RAM,xdata存储类型,堆栈置于片内RAM

三、C51的中断函数

C51增加了一个intrrupt函数选项,支持直接编写中断服务程序函数。

其函数定义的形式为:

函数类型函数名()[intrruptn][usingn]

函数类型一般定义为void,intrrupt后的n是中断号,指示相应的中断源。

C51编译器从code区的绝对地址8n+3处产生中断向量。

n必须是常数,不允许使用表达式。

中断号与中断向量

中断号

中断源

中断向量入口

中断号

中断源

中断向量入口

0

外部中断0

0003H

3

定时器1

001BH

1

定时器0

000BH

4

串行口

0023H

2

外部中断1

0013H

5

定时器2

002BH

usingn是可选的,n为0~3的常数,指示选择8051的4个寄存器组。

如果不使用usingn,中断函数所有使用的公共寄存器都入栈。

如果使用usingn,切换的寄存器就不再入栈。

注意,带using的函数不允许返回bit类型数值。

编写C51的中断函数时,需要注意的几个问题:

(1)中断函数没有返回值,因此它必须是一个void类型的函数;

(2)中断函数不允许进行参数传递;

(3)不允许直接调用中断函数;

(4)中断函数对压栈和出栈的处理由编译器完成,无需人工管理;

(5)需要严格注意usingn的使用,必须确保寄存器组的正确切换。

 

附录3KeilC51常用库函数原型

/*--------------------------------------------------------------------------

ABSACC.H

Directaccessto8051,extended8051andPhilips80C51MXmemoryareas.

Copyright(c)1988-2001KeilElektronikGmbHandKeilSoftware,Inc.

Allrightsreserved.

--------------------------------------------------------------------------*/

#defineCBYTE((unsignedcharvolatilecode*)0)

#defineDBYTE((unsignedcharvolatiledata*)0)

#definePBYTE((unsignedcharvolatilepdata*)0)

#defineXBYTE((unsigned

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1