单片机实验实训指导书II.docx
《单片机实验实训指导书II.docx》由会员分享,可在线阅读,更多相关《单片机实验实训指导书II.docx(42页珍藏版)》请在冰豆网上搜索。
单片机实验实训指导书II
实验一单片机最小系统设计
1、实验目的:
1、学习单片机时钟电路设计;
2、学习单片机复位电路设计;
3、学习单片机I/O口输出控制;
4、学习keil编译软件的应用
5、学习Proteus仿真软件的应用
6、学习延时子程序设计。
2、实验任务
1、设计单片机最小系统;
2、利用单片机最小系统控制发光二极管秒周期闪烁。
3、实验仪器
PC一台、keil编译软件、Proteus仿真软件
4、实验说明
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统.
1、系统时钟电路
单片机内部具有一个高增益反相放大器,用于构成振荡器。
通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,系统时钟电路结构如图2所示,可以根据情况选择6MHz、8MHz或12MHz等频率的石英晶体,补偿电容通常选择20-30pF左右的瓷片电容。
图1系统时钟电路
2、复位电路
单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。
上电复位要求接通电源后,自动实现复位操作。
手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。
复位电路结构如图3所示。
上电自动复位通过电容C3充电来实现。
手动按键复位是通过按键将电阻R2与VCC接通来实现。
图2复位电路
3、延时子程序设计
单片机延时程序可以采用延时子程序和定时中断完成,定时中断延时不会占用CPU时间,将在后续章节介绍,延时子程序主要采用CPU运行指令占用时间而得到,通常采用循环指令编写,本例中单片机晶振为12MHz,因此机器周期为1µs,0.05s程序如下:
DLYHS:
MOVR5,#1;置外循环次数
DLY0:
MOVR6,#100;置中循环次数
DLY1:
MOVR7,#250;置内循环次数
DLY2:
DJNZR7,DLY2;2机周×250×1µs=0.5ms
DJNZR6,DLY1;0.5ms×100=0.05s
DJNZR5,DLY0;0.05ms×1=0.05s
RET
5、实验说明
1、根据单片机最小系统定义,设计单片机最小系统设计,并设计单片机控制发光二极管电路;
2、编程并调试,实现对发光二极管循环闪烁;
3、编写500ms延时子程序,并于主程序中调用,完成对时间周期的控制。
6、实验原理图:
7、实验步骤
1、开机启动Proteus仿真软件,并画出对应仿真原理图
2、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功
3、编译无错后,进入调试运行环境。
4、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序。
5、观察程序运行情况。
8、程序流程
实验二内存数据复制程序设计
1、实验目的
1、掌握单片机最小系统设计
2、掌握子程序的编写及调用
3、掌握单片机源程序的编辑、汇编、调试及运行过程
4、掌握循环分支程序的编写及调试方法
2、实验任务
应用AT89C51单片机芯片,设计单片机最小系统,并在此基础上编写两程序实现如下功能:
1.设计程序分别将0~31数据写入单片机RAM地址30h~4fh内,然后将30h~4fh内数据复制到50h~6fh内;
2.将存放在ROM中以TABLE为标号地址起始的连续16个数据依次复制到RAM70H~7FH单元。
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
四、实验说明
从广义上讲,80C51内RAM(128B)和特殊功能寄存器(128B)均属于片内RAM空间,为了加以区别,内RAM通常指00H~7FH的低128空间,它又可以分为3个物理空间:
工作寄存器区、位寻址区和用户数据区,具体内存分配如图2-1所示。
1、工作寄存器区
地址从00H~1FH共32个字节属工作寄存器区。
工作寄存器(R0、R1¼R7)是80C51的重要寄存器,指令系统中有专用于工作寄存器操作的指令,读写速度比一般内RAM要快,指令字节比一般直接寻址指令要短,另外工作寄存器还具有间接功能,能给编程和应用带来方便。
工作寄存器分为4个区,0区、1区、2区、3区。
每个区有8个寄存器:
R0~R7,寄存器名称相同。
但当前工作寄存器区只能有一个,至于哪一个工作寄存器区处于当前工作状态则有程序状态字PSW中的D4(RS1)、D3(RS0)位决定。
若用户程序不需要4个工作寄存器区,则不用的工作寄存器区单元可作为一般的RAM使用。
2、位寻址区
从20H~2FH共16字节属位寻址区。
16字节(Byte,缩写为大写B)每B有8位(bit,缩写为小写b),共128位,每一位均有一个位地址(如图1-4)。
在MCS—51单片机机中,RAM,ROM均以字节为单位,每个字节有8位,每一位可容纳一位二进制数的1或0.但是一般RAM只有字节地址,操作时只能8位整体操作,不能按位单独操作。
而位寻址区的16个字节,非但有字节地址,而且字节中的每一位有位地址,可位寻址、位操作。
所谓位寻址位操作是指按位地址对该位进行置1、清0、求反或判转等,位寻址区得主要用途是存放各种标志为信息和为数据。
需要注意的是,位地址00H~7FH和内存RAM字节地址00H~7FH编址相同,但位操作指令和字节操作指令不同,因此在指令执行时,CPU不会搞错,而初学者却容易搞错,应用中应特别注意。
3、数据缓冲区
内RAM中30H~7FH为地址的字节区域,共80个RAM单元为数据缓冲区,属于一般内RAM,用于存放各种数据和中间结果以及作为堆栈使用,起到数据缓冲的作用。
4、内部程序存储器
程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。
如用助记符编写的命令MOVA,#20H,换成机器认识的代码74H、20H:
(写成二进制就是01110100B和00100000B)。
在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。
程序存储器可以放在片内或片外,亦可片内片外同时设置。
由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH的64KB范围。
51子系列单片机内部有4K字节ROM(EPROM、EEPROM)(0000H~0FFFH),1000H~FFFFH是外部扩展程序存储地址空间。
而52子系列内部有8KBROM(EPROM、EEPROM)程序存储器,同样可以扩展到64KB,在64KB程序存储器中,有6个地址单元用作6种中断的入口地址,如表2-2。
5、实验步骤
6、开机启动Proteus仿真软件,并画出对应仿真原理图
7、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功
8、编译无错后,进入调试运行环境。
9、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序。
10、观察程序运行情况。
6、实验原理图
7、实验参考流程图
8、实验参考程序
实验三简易交通灯设计
1、实验目的
1、掌握单片机输出口控制
2、掌握单片机控制发光二极管方法
3、掌握单片机控制数码管方法
二、实验任务
设计交通灯仿真系统,控制如下:
交通灯一般分为红、黄、绿三种颜色,红灯作为禁止通行的信号标志,如图3-1所示,本实验中禁行的时间红灯设为25秒;绿灯作为允许通行的信号标志,黄灯作为通行与禁行切换时的间隔信号标志,黄灯闪亮时间为6秒,绿灯亮时间为19秒。
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
4、实验说明
1、发光二极管控制原理
LED是一种固体光源如图2-6,当它两端加上正向电压,半导体中的少数载流子和多数载流子发生复合,放出的过剩能量将引起光子发射。
采用不同的材料,可制成不同颜色有发光二极管。
发光二极管的反向击穿电压越5V。
它的正向伏安特性很陡,使用时必须串联限流电阻以控制通过管子的电流。
普通发光二极管的正向压降和工作电流根据二极管的大小和颜色不同而不同,一般:
红绿LED正向压降为1.8~2.4V,蓝白是2.8~4.2V。
3mmLED额定电流1~10mA,5mmLED额定电流5~25mA,10mmLED额定电流25~100mA。
其与单片机常用控制如图2-7所示。
如要LED亮,则需选择合适的电阻值,并是P1.0引脚输出低电平“0”,如要LED灭,则由P1.0输出高电平,如要LED出现闪烁效果,则需控制LED亮、灭两种状态交替出现即可,闪烁的速度,则由LED亮和灭状态各自维持时间来决定。
2、数码管工作原理
LED(LightEmitingDiode)是发光二极管的缩写。
LED数码管里面有8只发光二极管,分别记作a、b、c、d、e、f、g、dp,其中dp为小数点,每一只发光二极管有一根电极引到外部引脚上,而另一只引脚就连接在一起,并引到外部引脚上,记作公共端(COM),如图4-5a所示,其引脚排列因不同制造厂商而有所不同。
常用的LED数码管有两种,分为共阴极和共阳极。
当数码管里面发光二极管的阴极接在一起作为公共端(COM)时,在正常使用时此引脚接电源负极,此数码管为共阴极数码管,如图4-5b所示,当发光二极管的阳极接高电平时,发光二极管被点亮,从而相应数码段显示,而输入低电平的段则不能点亮。
当数码管里面发光二极管的阳极接在一起作为公共端(COM)时,在正常使用时此引脚接电源正极,此数码管为共阳极数码管,如图3-2所示,当对应发光二极管阴极接低电平时,发光二极管被点亮,从而对应数码段显示,而输入高电平的段不能点亮。
五、实验步骤
11、开机启动Proteus仿真软件,并画出对应仿真原理图
12、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功
13、编译无错后,进入调试运行环境。
14、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序。
15、观察程序运行情况。
6、参考实验原理图
7、参考实验流程图
实验四按键控制跑马灯
1、实验目的
1、掌握单片机I/O口输入控制方法
2、掌握单片机控制LED方法
3、掌握单片机独立式按键控制方法
2、实验任务
应用AT89C51芯片和按键、8个发光二极管模拟跑马灯运行过程功能:
K1键:
控制发光二极管从上向下依次点亮,全亮后熄灭,无其它键按下则反复运行
K2键:
控制发光二极管从下向上依次点亮,全亮后熄灭,无其它键按下则反复运行
k3键:
控制发光二极管从中间向两边依次点亮,全亮后熄灭,无其它键按下则反复运行
K4键:
控制发光二极管从两边向中间依次点亮,全亮后熄灭,无其它键按下则反复运行
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
5、实验说明
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。
CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。
1、按键结构与特点:
微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。
其抖动过程如图4-1所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。
为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。
这一点可从硬件、软件两方面予以考虑。
在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
2、按键编码
一组按键或键盘都要通过I/O口线查询按键的开关状态。
根据键盘结构的不同,可采用不同的编码。
无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。
3、键盘程序编制
一个完善的键盘控制程序应具备以下功能:
(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2)有可靠的逻辑处理办法。
每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3)准确输出按键值(或键号),以满足跳转指令要求。
五、实验步骤
16、开机启动Proteus仿真软件,并画出对应仿真原理图
17、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功
18、编译无错后,进入调试运行环境。
19、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序。
20、观察程序运行情况。
六、参考原理图
7、参考流程图
8、参考程序
实验五多路抢答器设计
1、实验目的
1、掌握单片机中断控制原理
2、掌握单片机外部中断应用
3、掌握中断子程序设计方法
4、掌握数码管控制方法
2、实验任务
应用AT89C51芯片及简单的外围电路,设计制作一个4人抢答器,当按下“开始”按键并且数码管显示“0”后,参赛选手进行抢答,使用1位数码管显示最先按键的选手的号码并保持到下一次抢答开始。
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
四、实验说明
1、中断概念
CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,叫做中断。
2、中断源
中断源是指能发出中断请求,引起中断的装置或事件。
80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:
⑴INT0:
外部中断0,中断请求信号由P3.2输入。
⑵INT1:
外部中断1,中断请求信号由P3.3输入。
⑶T0:
定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。
⑷T1:
定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。
⑸串行中断:
包括串行接收中断RI和串行发送中断TI。
3、中断断点
由于中断的发生,某个程序被暂停执行,该程序中即将被执行但由于中断而没有被执行的那条指令的地址,成为中断断点,简称断点。
4、中断服务程序
处理中断事件的程序段被称为中断服务程序。
中断服务程序不同于一般的子程序,子程序由某个程序调用,它的调用是由主程序设定的,因此是确定的。
而中断服务程序由某个事件引发,它的发生往往是随机的,不确定的。
5、中断控制寄存器
80C51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:
五、实验步骤
1、开机启动Proteus仿真软件,并画出对应仿真原理图;
2、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功;
3、编译无错后,进入调试运行环境;
4、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序;
5、观察程序运行情况。
六、参考电路设计
7、参考流程图
实验六单片机实现乐曲播放
一、实验目的
1、掌握定时/计数器工作原理及应用;
2、掌握单片机控制蜂鸣器方法
3、掌握定时器中断服务程序设计方法
二、实验任务
应用AT89C51芯片及简单的外围电路,设计声音系统,当按下“开始”按键后,开始播放《梁祝》片断乐曲,曲谱如下:
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
四、实验说明
1.蜂鸣器
单片机控制乐曲演奏原理图比较简单,主要由单片及最小系统(单片机、复位电路、时钟震荡电路)和蜂鸣器驱动电路组成,蜂鸣器驱动主要由NPN型三极管放大电路驱动,单片机通过普通引脚输出定频率的信号,经过三极管驱动蜂鸣器,根据输出频率的不同,发出不同声音。
2、电子乐曲演奏原理
组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器激励信号的频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。
1)音调的控制
首先来看一下怎样控制音调的高低变化。
乐曲是由不同音符编制而成的。
音符中有7个音名:
C、D、E、F、G、A、B(1、2、3、4、5、6、7),分别唱哆唻咪法嗦啦唏。
声音是由空气振动产生的,每个音名,都有一个固定的振动频率,频率的高低决定了音调的高
低。
音乐的12平均律规定:
每两个八音度(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个八度音之间又可分为12个半音,每两个半音的频率比为2的12次开方。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B(简谱中的音7)到C(简谱中音1)之间,E(简谱中音3)到F(简谱中音4)之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率如下表6-1:
若用P1.7引脚驱动一个蜂鸣器,构成一个简单的音响电路,因此只要有了某个音的频率数,就能产生出来这个音来。
现以A(低6)为例进行分析。
A音的频率数为440Hz,则其周期为T=1/f=1/440=2.28ms,如果用定时器1方式1进行定时,要P3.7输出周期为2.28ms的等宽方波。
则定时值为1.14ms,设计数初始值X,根据定时值=(65536-x)X12/晶振频率可得X=64396=FB8CH,只要将计数初始值装入TH1、TH0,就能使P1.7的高电平或低电平的持续时间为1.14ms,从而发出440Hz的音调。
2)节拍控制
乐曲中的音符不单有音调的高低,还要有音的长短,如有的音要唱1/4拍,有的音要唱二拍等。
在节拍符号中,如用x代表某个音的唱名,x下面无短线为4分音符,有一条短横线代表8分音符,有两条横线代表16分音符,x右边有一条短横线代表2分音符,有”.”的音符为符点音符(延时左边原拍的一半).节拍控制可以通过调用延时子程序(设延时时间为130ms)的次数来进行控制,以每拍520ms的节拍时间为例,那么,1拍需要循环调用延时子程序4次.同样,半拍需要调用延时子程序2次。
具体调用情况如表5-11。
五、实验步骤
1、开机启动Proteus仿真软件,并画出对应仿真原理图;
2、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功;
3、编译无错后,进入调试运行环境;
4、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序;
5、观察程序运行情况。
六、参考电路设计
7、参考流程图
实验七简易电子琴设计
一、实验目的
1、掌握定时/计数器原理及应用
2、掌握行列式键盘控制方法
3、掌握蜂鸣器驱动方法
2、实验任务
应用AT89C51芯片及简单的外围电路,设计矩阵式键盘和蜂鸣器驱动电路,学习设计矩阵式键盘识别方法,并设计简易电子琴功能。
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
四、实验说明
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如图7-1所示。
由图可知,一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。
当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这是识别按键是否按下的关键。
然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
2.矩阵式键盘按键的识别
为了识别键盘上的闭合键,通常采用两种方法:
一种行扫描法、一种行反转法。
1)行扫描法:
键盘的行线一端经电阻接+5V电源,另一端接单片机的输入口;各列线的一端接单片机的输出口,另一端可悬空。
每一行线(水平线)与列线(垂直线)的交叉处不相通,而是通过一个按键来连通。
利用这种矩阵结构只需n条行线和m条列线,既可组成具有nxm个按键的键盘。
判键步骤:
(1)判断有无键被按下。
键被按下时,与此键相连的行线与列线将导通,而行线电平在无键按下时处于高电平,显然,如果让所有列线处于高电平,那么键按下与否不会引起行线电平的状态变化,所以只有让所有列线处于低电平,当有健按下时,按键所在行电平将被拉成低电平,根据此行电平的变化,便能判定此行一定有键按下。
(2)判断按键是否真的被按下。
当判断出有键被按下之后,用软件延时的方法延时10ms,再判断键盘的状态,如果仍有键被按下,则认为确实有键按下,否则,当做键抖动处理。
(3)如果某列有键被按下,识别键盘哪一行的键被按下:
逐行置低电平,并置其于各行为高电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此行此列交叉点按键被按下。
2)反转法
行反转法识别闭合键时,要将行线接一个并行端口,先让他工作在输出方式下,将列线也接一个并行端口,先让他工作在输入模式下。
程序使CPU通过输出端口往各行线上全部送抵电平,然后读入列线的值。
如果此时有某一键被按下,则必定会使某一列线值为0。
然后,程序再对两个并行端口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行口输出,再读取行线上的输入值,那么闭合键所在的行线上的值必定为0。
这样当一个键被按下时,必定可以读取一对唯一的行值和列值。
五、实验步骤
1、开机启动Proteus仿真软件,并画出对应仿真原理图;
2、启动Keil软件,建立一个工程文件,添加编写好的程序,编译文件,软编译有错,直接进行修改,直至汇编成功;
3、编译无错后,进入调试运行环境;
4、以单步运行,跟踪运行,断点运行,全速运行等形式调试程序;
5、观察程序运行情况。
六、参考电路
7、参考流程图
实验八静态显示
1、实验目的
1、掌握单片机片外I/O口扩展技术
2、掌握用74LS373数据输入输出编程方法
3、掌握静态显示编程方法
2、实验任务
设计静态显示电路,并编程序实现四个数码管分别显示30H、31H、32H、33H内存单元的数字。
三、实验仪器
PC一台、keil编译软件、Proteus仿真软件
四、实验说明
单片机控制数码管显示方法有静态显示和动态显示两种;静态显示就是当数码管显示某个字符时,相应的段恒定地导通或截止,直到显示另一个字符为止。
这种显示方法比较简单,只需将显示段码送至段码口,在没有新的段码送来时,字符显示稳定。
如图8-1为静态显示控制扩展原理图,静态显示多用于扩展较少的数码管,由于占用I/O口较多,要扩展