资源描述
MCS-51单片机实验
第一部分 软件实验 2
软件实验一 求一组数据的最大(小)值 2
软件实验二 二进制数转换为BCD数 3
软件实验三 二进制数转换为ASCII码 3
第二部分 硬件实验 5
硬件实验一 并行口输入、输出实验 5
硬件实验二 外部中断实验 6
硬件实验三 定时计数器实验 9
硬件实验四 串行通信实验 11
第三部分 综合实验 13
综合实验一 电子时钟 13
第一部分 软件实验
软件实验一 求一组数据的最大(小)值
一、实验目的
1.熟悉Keil mVision3软件,掌握C51语言程序的调试方法。
2.理解并掌握数组的定义及初始化。
3.熟悉并学会分支程序、循环程序的安排与设计。
二、实验设备
装有Keil mVision3的计算机 1台
三、实验内容
1.用数组定义一组数据(如10个带符号数,每个占2字节),并赋初值;
2.编程找出这组数的最大值、最小值,分别存在max、min变量中;
3.编译后单步调试,打开Watches窗口和Memory窗口,观察变量值的变化以及它们在单片机存储器中的实际位置。
四、实验步骤
1、建立项目文件:用鼠标单击【Project—New Project…】菜单命令,在弹出的“Creat New Project”窗口中选择项目保存的位置,在“文件名”后的框中输入项目文件名(可以与源程序文件名相同),单击“保存”。并在弹出的窗口中选择器件型号。
2、建立源程序文件并添加到项目中:用鼠标单击【File—New…】菜单命令(或Create a new file),进入编辑窗口,在该窗口中输入源程序,单击【File—Save】菜单命令(或保存文件快捷按钮)保存文件(必须带扩展名)。注意:用汇编语言写的程序,文件的扩展名为.ASM(必须写);如用C语言则扩展名为.C。然后将该文件添加到项目中。必要时对单片机的晶振频率、编译输出文件(.hex)进行设置。
3、编译程序:用鼠标单击【Project—Build target或Rebuild all target files】菜单命令(或相应的快捷按钮),对源文件进行编译。如果编译有错,输出窗口将说明出错的状态和位置,用鼠标双击输出窗口的错误信息条,则自动定位源文件中出错的地方,可修改并保存后再编译,直到编译通过为止。
4、调试程序:
(1)用鼠标单击菜单【Debug—Start/Stop Debug Session】(或快捷按钮),程序进入调试状态。
(2)用鼠标单击菜单【View—Watch & Call Stack Window】和【View—Memory Window】(或快捷按钮 和),分别打开Watches窗口和Memory窗口,设置要观察的变量和存储器(参考下图)。
(3)按F11键单步跟踪调试,每执行一条语言观察变量值的变化和存储器单元的变化。检查程序运行结果与设计要求是否相符。
软件实验二 二进制数转换为BCD数
一、实验要求
将给定的一个无符号二进制数x(8位),转换成二-十进制(BCD)码,其个位、十位、百位分别存放到数组a的元素a[0],a[1],a[2]中。
二、实验目的
1.掌握简单的数制转换算法;
2.了解计算机中数的各种表达方法。
三、实验说明
计算机中的数值有各种表示方式,这是计算机的基础。实际中可能经常用到各种数制之间的转换。有兴趣的同学可以试试将BCD码转换成二进制。
四、程序框图
参考如下:
五、实验步骤
参考软件实验一,并学习单步执行程序、执行到光标处、设断点运行等程序调试方法。注意观察程序执行过程中变量值的变化和内部RAM单元。
软件实验三 二进制数转换为ASCII码
一、实验要求
给出一个二进制数(8位),将其高、低4位对应的十六进制数(0-9或A-F)转换成ASCII码。
二、实验目的
1.了解十进制(或十六进制)数与ASCII码的区别;
2.学习如何用查表方法进行数值转换及快速计算。
三、程序
C51语言程序自行编写,建议0-9和A-F这些字符对应的ASCII码值以数组形式存放到ROM区,供查表用。
四、实验步骤
参考软件实验一,并学习单步执行程序、执行到光标处、设断点运行等程序调试方法。注意观察程序执行过程中变量值的变化和内部RAM单元。
第二部分 硬件实验
硬件实验一 并行口输入、输出实验
一、实验目的
1.学习单片机并行I/O口的使用方法;
2.学习软件延时函数的编写和使用。
二、实验要求
1.用P2.0引脚(下图中P20)来驱动1只LED(下图中的D20),编写程序,使LED闪烁(要求LED亮500ms,灭500ms);
2.P2做输出口,接8只LED(如下图),编写程序,使LED循环点亮(流水灯);
3.P3.2和P3.3做输入口,分别接两个拨动开关到GND;P2.7~P2.4做输出口,接4只LED(参考下图),用来指示两个开关的闭合状态组合。实现如下“真值表”:
P3.3
P3.2
P2.7
P2.6
P2.5
P2.4
开
开
亮
灭
灭
灭
开
合
灭
亮
灭
灭
合
开
灭
灭
亮
灭
合
合
灭
灭
灭
亮
三、实验说明
1.MCS-51单片机的P0-P3口作为普通I/O口使用时是准双向口,它们做输出口时与一般的双向口使用方法相同,直接输出0或1;当作为输入口使用时,由内部结构可知,必须先对它置“1”(目的是使其内部的MOSFET关断),否则读入的数据可能不正确;
2.软件延时子程序(函数)就是通过(多重)循环来消耗CPU的时间,从而达到延时目的。如用汇编语言编写,可大致算出循环所需的机器周期数;如用C51语言编写,则需编译后再实际调试。注意要先设置好晶振频率。
四、实验程序
自行编写
附:延时函数(供参考)
//延时函数(C51语言)
void Delay(unsigned int x)
{unsigned int i;
while(x--)
for(i=0;i<123;i++);
}
五、实验步骤
参考前面的实验,并学习Step Into、Step Over、Step Out、设断点运行、运行到光标处等程序调试方法。注意观察程序运行时变量值的变化、内部RAM单元、实际延时时间、外设I/O端口电平。
在Keil软件中调试通过后,再用Proteus软件来验证。
六、思考题
1.记录每个LED点亮的持续时间,并根据实际需要进行调整,在Proteus仿真软件中或实验板上观察延时时间<5ms和延时时间>200ms时显示效果的区别。
2.让一个共阳七段数码管(下图4位中的一位)循环显示0-9和A-F,每个数显示0.5s。用P10(即P1.0)作为位选信号,P0口输出段码。
硬件实验二 外部中断实验
一、实验目的
1.掌握中断的应用,中断源,中断矢量和中断号等概念;
2.掌握中断的开放与屏蔽,中断优先级的设定,中断响应过程;
3.理解中断服务函数与主函数的关系。
二、实验设备
1.微机一台
2.Keil C51编程软件
3.Proteus仿真软件
4.单片机实验板及下载线(可选)
三、实验要求
1.通过外部中断0,启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,P2端口的流水灯开启,再按一次,灯熄灭。
2.分别采用下降沿触发方式(IT0=1)和低电平触发方式(IT0=0),编写C51程序,调试无误后,再用Proteus软件仿真测试。在实验板上进行测试时,应考虑去抖。
四、实验说明
1.实验电路
2.8051的中断源
在MCS−51系列单片机中,不同类型的单片机,其中断源个数和中断标志位的定义也有所不同。下面是8051的中断源。
中断源一览表
中断源名称
申请中断的原因
触发方式选择位
中断申请标志
允许中断的控制位
中断总允许位
外部中断0
引脚有
低电平、或下降沿
IT0
(TCON)
IE0
(TCON)
EX0
(IE)
EA
(IE)
定时器0中断
T0
定时器/计数器0
溢出
TF0
(TCON)
ET0
(IE)
外部中断1
引脚有
低电平、或下降沿
IT1
(TCON)
IE1
(TCON)
EX1
(IE)
定时器1中断
T1
定时器/计数器1
溢出
TF1
(TCON)
ET1
(IE)
串行口中断
RXD、TXD
接收一个字节或
发送一个字节完成
RI、TI
(SCON)
ES
(IE)
注:( )中为该位所属对应的特殊功能寄存器
3.中断系统总体框图
8051中断系统的中断方式、中断开放和禁止以及中断优先级的设定总体框图如Error! Reference source not found.所示:
4.定时器、外部中断控制
定时器中断的溢出标志位和外部中断的控制位是由定时器控制寄存器TCON来定义,如图所示:
5.串行口中断控制
串行口中断用发送中断和接收中断标志,在串行口控制寄存器SCON,具体见串行口实验。
6.中断允许设置
中断允许寄存器IE字节地址为A8H,其各位含义如图所示。
7.中断优先级设置
8051内部中断系统对各中断源中断优先级有一个统一的规定,各中断源在同一优先级时从高到低的排列顺序为:
外部中断0→定时器0中断→外部中断1→定时器1中断→串行口中断→(定时器2中断)。
每个中断源的中断优先级都可以通过程序来设定为高优先级还是低优先级,由中断优先级寄存器 IP 统一管理。IP寄存器各位的含义如图.
8.中断入口地址/中断编号
中断响应时,将对应的中断入口地址装入程序计数器PC,使程序转移到该中断入口地址单元,去执行中断服务程序。与各中断源相对应的中断入口地址、中断编号如Error! Reference source not found.所示:
中断入口地址表
中 断 源
中 断 入 口 地 址
中 断 编 号
外部中断0
0003H
0
定时器T0中断
000BH
1
外部中断1
0013H
2
定时器T1中断
001BH
3
串行口中断
0023H
4
五、思考题
1.比较在下降沿触发和低电平触发两种方式程序中中断请求标志位IE0的异同;
2.比较在查询法和中断法两种程序中中断请求标志位IE0的异同。
硬件实验三 定时计数器实验
一、实验目的
1.了解MCS-51单片机中定时/计数器的基本结构、工作原理和工作方式;
2.掌握定时/计数常数(初值)的设定;
3.学习定时/计数器中断法和查询法的应用。
二、实验设备
1.微机一台
2.Keil C51编程软件
3.Proteus仿真软件
4.单片机实验板及下载线(可选)
三、实验内容
1.定时器实验
实验要求(中断法或查询法):
用单片机内部定时器方式计时,实现每一秒钟P2口输出状态发生一次反转。(可设置定时器溢出时间为50ms,溢出20次则为1秒)。
2.对外部信号计数
实验要求(无中断,只读计数值):
(1)单片机对从P3.4输入的信号计数,T0工作于方式1
(2)将计数数值结果送至P2口显示(二进制形式)(选做:将结果以十进制形式用3位数码管来显示)。
四、实验说明
1.实验电路
同中断实验。
2.定时器/计数器模型
定时器/计数器模型如下图。
(1) 对计数脉冲可选择来自单片机内部振荡器或是由单片机外部引脚输入的外部脉冲;
(2) 计数器的主体是一个加1计数器,它对进入脉冲进行加1计数(其计数长度由程序
设定,但不能超过16位);
(3) 计数器是否计数由控制信号确定(通过TCON寄存器中的TRx置位来启动计数);
(4) 计数器溢出时(进位),置一个溢出标志TFx并触发中断系统产生中断请求,也可
以由用户查询TFx来判断溢出与否。TFx可以由程序或是中断服务程序复位(清0)。
3.定时器方式设置
定时/计数器方式寄存器TMOD 的地址为89H(不可位寻址),其各位的意义如下图:
M1、M0:定时/针数器为工作方式选择,具体如表所示。
表 定时/计数器的工作方式
M1
M0
工作方式
说 明
0
0
方式0
13位计数器(THx高八位及TLx低五位);
0
1
方式1
16位计数器;
1
0
方式2
可自动重新装入初值的8位计数器;
1
1
方式3
将定时器0分为两个8位计数器。定时器T1在此方式下停止。T0工作于方式3时T1可以工作于其他方式,此时常用做串行口时钟。
定时器T0有0、1、2、3共四4种工作方式,定时器T1只有0、1、2共三种工作方式。
C/:定时/计数选择。0为定时,定时脉冲由内部振荡器12分频后提供;1为计数,对由T0的引脚(P3.4)或T1的引脚(P3.5)输入的外部脉冲进行计数,计数的最高频率为内部振荡器的1/24。
GATE:门控位。确定控制信号由TRx位还是由引脚控制。
4.定时器的控制
定时/计数器控制寄存器TCON的地址为88H(可位寻址),其各位的意义如Error! Reference source not found.:
TF1/TF0:定时器1/0溢出中断标志位。由硬件置位,当转向中断服务程序时由硬件清0,也可由软件清0。
TR1/TR0:定时器1/0运行控制位。1为启动计数,0为停止。
IE1/IE0:外部中断1/0请求标志位。中断时由硬件置位,当转向中断服务程序时由硬件清0,也可以由软件清0。(具体用法详见中断系统)
IT1/IT0:外部中断触发方式控制位。IT1/IT0=1时为下降沿触发中断;IT1/IT0=0时为低电平触发中断。(具体用法详见中断系统)
5.编程的具体步骤
在实际应用中,若要使用定时/计数器,应按以下步骤进行编程:
(1) 设定定时/计数器的工作方式(TMOD);
(2) 给计数器设定所需的初值(TH0、TL0、TH1、TL1);
(3) 开放定时/计数器中断(如果需要的话);
(4) 启动计数器开始计数(通过设置TCON中的相关位TR1/TR0)
五、思考题
1、定时器的方式1和方式2,在设定定时常数和编写中断服务程序时有何不同?
2、比较中断法和查询法两种实现程序的异同?
硬件实验四 串行通信实验
一、实验目的
1.了解MCS-51单片机串行口(UART)的结构;
2.掌握串行口的工作方式及波特率的设置方法;
3.掌握单片机串行通信的编程方法。
二、实验设备
1.微机一台
2.Keil C51编程软件
3.Proteus仿真软件
4.单片机实验板及下载线(可选)
三、实验内容
1.发送和接收数据并显示
实验要求(发送方用查询法,接收方用中断法):
单片机甲用于发送,单片机乙用于接收。甲向乙发送0-9和A-F共16个数。乙接收这16个数存放到数组,然后依次用一个接在P0口的共阳七段数码管显示出来,每个数显示时间约0.5s。
2.发送字符
实验要求:
(1)发生外部中断0(下降沿触发)时,单片机从串行口输出字符串“Hello”;
(2)发生外部中断1(下降沿触发)时,单片机从串行口输出字符串“SCUT!”。
四、实验说明
1.实验电路
双机通信时,甲的发送端(TXD)接乙的接收端(RXD),自己画Proteus电路模型。发送字符时,直接用已有的实验板模型,在串行终端Virtual Terminal窗口点击鼠标右键,取消“Hex Display Mode”前面的√。
2.串行口工作方式设置
串行口特殊功能控制寄存器SCON(可位寻址)的格式如下
位7
位6
位5
位4
位3
位2
位1
位0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0、SM1:为串行口工作方式选择位。8051串行口共有4种工作方式。通过对SM0、SM1的设置可以选择串行口的工作方式。具体工作方式如下Error! Reference source not found.所示。
串行口工作方式选择
SM0
SM1
方式
功能说明
0
0
0
移位寄存器方式(波特率为fosc/12)
0
1
1
8位UART,波特率可变(T1溢出率/n)
1
0
2
9位UART,波特率为fosc/64或fosc/32
1
1
3
9位UART,波特率可变(T1溢出率/n)
SM2:多机通信控制位。主要用于工作方式2和工作方式3。在方式2和方式3中,如SM2=1,则接收到第9位数据(RB8)为0时,不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8=1时,才将接收的前8位数据送入SBUF,并置位RI产生中断请求。当SM2=0时,则不论第9位数据为1或是为0,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。
REN:允许接收控制位。REN=0,禁止串行口接收;REN=1,允许串行口接收。
TB8:待发送数据第9位,用于在方式2和方式3时存放发送数据第9位。TB8由软件置位或复位。
RB8:接收到的数据第9位。多机通信控制位。
TI:发送完一帧数据时,该位硬件置1,向CPU申请串行口中断。
RI:接收到一帧数据时,该位硬件置1,向CPU申请串行口中断。
3. 串行通信波特率的计算
(1)方式0:移位寄存器方式。
波特率=fosc / 12。
(2)方式2:9位UART。
波特率=2SMOD×fosc / 64。
(3)方式1或3:8位或9位UART。
①使用定时器1作为串行口波特率发生器时,
波特率=2SMOD/32×(定时器1溢出率);
②当定时器1工作于方式2时,
波特率=2SMOD/32×(fosc/12)/(256-TH1)。
SMOD为波特率选择位。在方式1、方式2和方式3时,串行通信的波特率和SMOD有关。当SMOD=1时,波特率加倍;否则波特率不加倍。SMOD为PCON寄存器(不可位寻址)的最高位。
五、思考题
1、特殊功能寄存器SCON、PCON中各位的含义是什么?
2、若串行口方式1下波特率为2400,定时器T1的初值X为多少?
第三部分 综合实验
综合实验一 电子时钟
一、实验目的
1.掌握单片机并行I/O口的使用方法;
2.掌握外部中断、定时器、串行口的设置及编程方法;
3.学习多位数码管的动态扫描显示编程方法。
二、实验设备
1.微机一台
2.Keil C51编程软件
3.Proteus仿真软件
4.单片机实验板及下载线(可选)
三、实验内容
1.简单电子钟
实验要求:
在四个共阳数码管上显示形式为“HH.MM”的时间,不显示秒位(设初始时间为23.59.56,程序开始运行时显示23.59,则过4s后应显示00.00)。
2.功能较齐全的电子钟
实验要求:
(1)开始时在四个共阳数码管上显示形式为“HH.MM”的时间,不显示秒位(设初始时间为12.34.56),可用P3.7、P3.6、P3.5的按钮分别设置时、分、秒,按一次加1,实时调整;
(2)可由串行口接收PC机发来的时间值,如字符串“235957”或数值23、59、57表示将当前时间设为23:59:57;
(3)发生外部中断1(下降沿触发)时,只在后两位数码管上显示秒位,前两位不显示;再次发生该中断时又恢复为“HH.MM”的形式显示。
(4)发生外部中断0(下降沿触发)时,单片机从串行口发送当前的时分秒值。如当前时间为17:23:45,则发送字符串“172345”或数值17、23、45。
四、实验说明
1.实验电路
直接用已有的实验板模型,在串行终端Virtual Terminal窗口点击鼠标右键,取消“Hex Display Mode”前面的√。
2.程序设计步骤
仔细分析设计要求,画出程序设计流程图,对各功能模块分别编程,用函数或中断函数实现,分块调试。程序有问题时应学会使用设置断点、运行到光标处和单步运行调试,找出问题所在。
展开阅读全文