单片机原理实验.docx
《单片机原理实验.docx》由会员分享,可在线阅读,更多相关《单片机原理实验.docx(71页珍藏版)》请在冰豆网上搜索。
![单片机原理实验.docx](https://file1.bdocx.com/fileroot1/2023-8/14/21c3c7bf-142b-4015-afb7-e6f40e5f475c/21c3c7bf-142b-4015-afb7-e6f40e5f475c1.gif)
单片机原理实验
实验一、单片机集成开发环境入门
实验二、I/O口输入输出实验――循环灯程序设计
实验三、I/O口输入输出实验――LED数码管动态显示与按键去抖程序设计
实验四、定时器应用实验――LED数码动态显示与矩阵键盘赋值程序设计
实验五、计数器应用实验――基于热敏电阻和555电路的简易温度报警系统设计
实验六、中断实验――简易温度控制器设计
实验一、单片机集成开发环境入门
一、实验目地
1.掌握单片机集成开发软件“WAVE3.2”的开发环境配置。
2.掌握单片机集成开发软件“WAVE3.2”的基本功能,了解MCS-51系列单片机应用系统的软件开发过程。
●掌握创建工程项目和管理工程项目的方法。
●掌握MCS-51系列单片机汇编程序的编辑、编译方法。
●掌握MCS-51系列单片机汇编程序的仿真调试方法和观察窗口的使用。
二、实验设备
PC兼容机一台,操作系统为WindowsXP,安装有单片机集成开发软件“WAVE3.2”。
三、实验原理
1.单片机集成开发软件“WAVE3.2”简介
单片机应用程序的设计步骤通常可分为以下几步:
(1)根据单片机应用系统的功能进行算法构思和设计,画出程序流程图;
(2)用单片机汇编语言、C语言或PLM语言(初学者一般应采用汇编语言)编写源程序;(3)将源程序翻译成单片机可执行的机器码程序,即所谓的目标程序,该过程称为汇编或编译;(4)程序调试,将目标程序下载到目标单片机(即应用系统板中的单片机),运行目标程序,对运行结果进行监控。
若运行结果与预期结果相符,程序正确,调试结束;否则由结果的差异分析算法或程序的可能错误,重复步骤2至4,修改源程序、重新汇编、再调试,直至程序正确。
以上步骤2至4可应用单片机集成开发软件在个人计算机上完成。
“WAVE3.2”是一款功能强大的单片机集成开发软件,可开发多个系列的单片机应用系统。
该软件主要功能有:
(1)集成了文本编辑器,可对源程序进行编辑、修改;
(2)集成了汇编器,可对源程序进行汇编,自动查找源程序中的语法错误,并将无语法错误的源程序翻译成目标程序;(3)集成了仿真调试器,可对目标系统进行在线仿真调试,也可在个人计算机上对目标程序进行模拟仿真调试。
在线仿真调试,必需借助硬件仿真器,PC机通过硬件仿真器与目标系统相连,可用PC机监控目标程序的运行,目标单片机内部RAM和特殊功能寄存器的值可实时反馈回PC机。
程序员通过分析目标单片机内部RAM和特殊功能寄存器的值、观测目标程序与单片机应用系统的配合情况,判断系统的软硬件是否正确。
模拟仿真调试是一种纯软件模拟,它直接利用PC机的资源,在PC机上模拟目标程序的运行,并显示虚拟单片机内部RAM和特殊功能寄存器的值,程序员通过分析虚拟单片机内部RAM和特殊功能寄存器的值仅能判断与硬件无关的那部分软件的正确与否,无法判断单片机应用系统的硬件是否正确,目标程序与系统硬件是否匹配。
由于在线仿真调试需要硬件仿真器,设备成本较高,使用较复杂,不利于普及。
因此,本课程的实验将采用模拟仿真调试与硬件无关的部分软件(这部分软件所占比例很大),采用将目标程序下载到目标系统中实际运行,进行软硬件综合调试。
2.集成开发软件“WAVE3.2”的界面
图1.1:
WAVE集成开发环境界面
启动“WAVE3.2”后,集成开发软件的界面如图1.1所示,菜单功能见附录一。
3.
单片机应用程序设计及调试方法
以下举例说明51系列单片机应用程序设计及调试的主要方法,主要步骤如下:
①创建工程项目,编辑源程序;②汇编或编译;③使用软件模拟器及观察窗口调试程序。
以实现“从P1.0口输出1Hz方波”程序为例。
先进行算法设计,若每隔500mS将P1.0求反,则P1.0口将输出频率为1Hz的方波,程序流图如图1.2和图1.3所示。
为了能在本例中能尽可能多地实践程序调试方法,我们故意将500mS延时子程序复杂化,采用二级子程序嵌套,并引入十进制加法运算。
该程序的汇编源程序清单如下
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H;初始化
MAIN1:
XRLP1,#01H;P1.0求反
ACALLDELAY;调用500mS延时子程序
SJMPMAIN1
DELAY:
MOV30H,#0;500mS延时子程序
DELAY1:
ACALLD10MS;调用10mS延时子程序
MOVA,30H
ADDA,#01H
DAA
MOV30H,A
CJNEA,#50H,DELAY1
RET
D10MS:
MOVR6,#20;延时(2*R7+4)*R6+5=10005机器周
D10MS1:
MOVR7,#248
NOP
DJNZR7,$
DJNZR6,D10MS1
RET
END
3.1创建工程项目
①建立一个工作文件夹(不妨取为E:
\学号\实验一)用于保存与本例的工程项目有关的各种文件。
②启动WAVE软件,系统将自动打开最近使用过的工程项目,将所有窗口全部关闭。
③编辑源程序,选择菜单[文件|新建文件]功能,出现一个文件名为NONAME1的源程序编辑窗口,在此窗口中输入上述程序,选择菜单[文件|保存文件]或[文件|另存为]功能,将文件保存到工作目录中,文件名自定义,如取为eg1.asm,文件保存后,程序窗口上文件名变成了:
E:
\学号\实验一\eg1.asm。
④建立新的项目,选择菜单[文件|新建项目]功能,自动打开项目名为UNTITLED的项目窗口,并弹出加入模块文件对话框,选择eg1.asm源程序文件,点击打开。
紧接着弹出加入包含文件对话框,因没有需要添加的其它文件,点击取消钮。
再接着弹出保存项目对话框,键入工程项目的名称project,点击保存钮,项目窗口中的项目名称显示为project.prj。
注意:
工程项目文件、源程序文件等要保存在同一文件夹中。
⑤设置项目,选择菜单[设置|仿真器设置]功能或按“仿真器设置”快捷图标或双击项目窗口的第一行来打开“仿真器设置”对话框。
由于本课程实验没有使用硬件仿真器,自制实验板的CPU型号为AT89S52,因此在“仿真器”栏中应如下设置仿真器:
在仿真器标签中任意选取仿真器和仿真头,只要所选仿真器和仿真头可仿真的CPU列表中有8032或8732即可,并选择其中一款CPU,然后选中“使用伟福软件模拟器,并设置晶体频率1200000Hz。
在“语言”栏中,由于本课程实验均采用汇编语言编写程序,因此“编译器选择”选择“伟福汇编器”。
当仿真器设置好后,再次保存项目,完成项目创建。
3.2汇编(或编译)程序
选择菜单[项目|编译]功能或按编译快捷图标,编译你的项目。
在编译过程中,如果源程序有语法错误,将自动弹出信息窗口,显示错误所在行号及错误编号等信息,双击错误信息,可以在源程序中定位所在行。
纠正错误后,再次编译直到没有错误。
在编译之前,软件会自动将项目和程序存盘。
在编译没有错误后,打开工作文件夹,可以看到文件夹中产生eg1.lst、project.bin、project.hex三个文件,第1个是源程序eg1.asm的汇编列表文件,可用记事本编辑器打开该文件,解读该文件提供的信息;第2和3个文件是该工程项目的二种格式的目标程序(.bin和.hex格式)。
3.3汇编程序的仿真调试方法和观察窗口的使用
如前所述,模拟仿真调试的方法是在PC机上模拟目标程序的运行,并显示虚拟单片机内部RAM和特殊功能寄存器的值,程序员通过分析虚拟单片机内部RAM和特殊功能寄存器的值仅能判断与硬件无关的那部分软件的正确与否。
常用先打开合适的观察窗口,用跟踪、单步、执行到光标处等方式来调试程序。
比如
1打开CPU窗口、数据窗口(DATA窗口)、外设端口,适当调整各窗口位置和大小,如图1.4所示。
图1.4:
WAVE软件工作环境
在主窗口下方的状态栏中显示CPU的当前状态,包括PC、DPTR、ACC、PSW、SP的值及上次程序执行(跟踪、单步、或执行到光标处)的时间。
在CUP窗口中,第一栏显示每条指令的地址、机器码、反汇编结果、对应的源程序行,若该栏未显示正确指令,可重新编译;第二栏显示SFR及其值,第三栏显示被选中的SFR名位的值,被选中的SFR的名称和值的显示格为立体框样式。
点击跟踪快捷图标,程序转移到“MAIN”标号行,此时在源程序窗口最左边出现“o”和“=>”符号,其中“o”代表此行为有效程序,此行产生了可以执行的机器码,伪指令不产生机器码;“=>”所指的行(被点亮的行)就是下次将要执行的程序指令行。
数据窗口逐行显示内部RAM的内容,每行16字节。
端口显示P0、P1、P2、P3的状态,“√”表示高电平(即逻辑1)。
②由于待调试程序仅涉及SFR中的ACC、PSW、SP和RAM中R6、R7、30H单元、堆栈(60H~7FH),为了便于观察这些单元的内容变化,可在CPU窗口中关闭无关的SFR的显示,添加R6、R7、30H单元的显示。
选择菜单[仿真器|设置汇编预定义符号]功能,弹出符号定义对话框;例如要关闭DPL,则双击DPL,将DPL的用途由“预定义符号+SFR窗口显示”改为“预定义符号”,确认修改;例如要添加R6,则点击“添加”钮,输入名称――R6、地址――06H,
图1.5:
经修改后CPU窗口
中的第二、三栏
用途选择为“预定义符号+SFR窗口显示”,确认修改。
所有修改完后,关闭CPU窗口,再重新打开CPU窗口,此时窗口第二、三栏的显示内容如图1.5所示,添加30H单元时,将该单元取名为XR1。
③跟踪法调试程序。
在“=>”指向“MOVSP,#60H”时,点击跟踪快捷图标1次,观察CPU窗口中SP值的变化,及该指令的执行时间;
再点击跟踪快捷图标1次,执行“XRLP1,#01H”指令,观察端口P1的变化;
继续点击跟踪快捷图标1次,执行“ACALLDELAY”指令,观察程序的转移及CPU窗口SP值的变化及RAM窗口60H、61H内容的变化,这些变化反映子程序调用时断点地址的进栈保护;
继续点击踪快捷图标1次,执行“MOV30H,#0”,由于执行前XR1的值为0,因此CPU窗口中XR1的值没有变化,仍为黑色;
继续点击踪快捷图标1次,执行“ACALLD10MS”,观察程序的转移、CPU窗口SP值的变化及RAM窗口62H、63H内容的变化,这些变化反映子程序二级嵌套的断点保护。
继续点击跟踪快捷图标6次,每次均观察CPU窗口的变化,从第5次开始,循环执行“DJNZR7,$”指令,若继续用跟踪法调试程序,还需点击245次才能结束循环,调试效率太低,可用以下的“断点”法调试。
④跟踪及断点调试法。
用鼠标左键点击“DJNZR6,D10MS1”程序行,光标移至该行,点击鼠标右键,打开快捷菜单,选择“执行到光标处”,观察“=>”和程序执行时间的变化。
继续点击跟踪快捷图标4次,每次均观察CPU窗口R6、R7的变化,从第4次开始又进入“DJNZR6,D10MS1”循环。
至此,根据程序执行情况,已可判断10mS延时程序编写基本正确,用鼠标左键点击D10mS子程序的“RET”行,选择“执行到光标处”,观察观察CPU窗口R6、R7的变化和执行时间。
点击跟踪快捷图标,执行“RET”,结束子程序调用,观察SP值的变化和程序的转向,这些情况反映子程序返回时的断点击栈情况。
继续点击跟踪快捷图标5次,每次均观察CPU窗口变化,第5次执行“CJNEA,#50H,DELAY1”指令,“=>”指向“DELAY1:
ACALLD10MS”,由于前面的调试已表明D10MS子程序正确,若再采用前述的调试方法,调试效率太低,可采用以下的单步调试方法。
⑤单步调试法。
点击单步快捷图标1次,观察“=>”的指向和执行时间;继续点击单步快捷图标5次,每次均观察CPU窗口的变化。
至此,500mS延时子程序调试基本完成,仅剩(30H)单元十进制加1的算法逻辑是否正确无法判断,采用以下方法可提高调试效率。
先双击CPU窗口的XR1,将XR1值修改为49H,然后继续点击单步快捷图标,并观察CPU窗口的变化,直至执行“DELAY”子程序的返回指令“RET”。
至此500mS延时子程序调试完毕。
返回主程序以后,继续重复点击单步快捷图标,观察每一单步执行的结果和执行时间,判断主程序的逻辑是否正确。
⑥模块化程序的调试
程序设计通常采用模块化的结构,因此程序调试一般也按模块进行调试。
通常先调试子程序,再逐模块调试各功能模块,在子程序或模块程序调试时,常采用修改CPU的状态,设定模块程序的入口条件,再调试程序,如调试双加法子程序时,往往先设定RAM中存放被加数和加数的单元,然后再进行调试。
四、实验内容
1.掌握“WAVE3.2”的基本功能
按“实验原理”中所述,完成“从P1.0口输出1Hz方波”程序的项目创建、编译程序、程序调试等内容。
2.6位无符号压缩BCD码加法子程序设计与调试
设两个6位BCD码相加,设加数、被加数已经按压缩BCD码从高位到低位存放在内存单元中,被加数存于RAM的30H、31H、32H,加数存于33H、34H、35H,和存于R2、R3、R4中,进位位保存在C中。
试进行算法设计,画出程序流图,写出汇编语言源程序。
按“实验原理”中所述,完成该程序的项目创建、编译程序、程序调试等内容。
五、实验报告要求
实验报告要求写明实验目的,并提交以下内容。
1.提交“实验内容2”中的程序流图、汇编语言源程序清单。
2.简述“实验内容2”中的程序的调试方法。
实验二、I/O口输入输出实验――循环灯程序设计
一、实验目地
1.掌握51系列单片机I/O端口操作方法,I/O端口控制程序的编写。
2.了解数码管动态显示的工作原理,了解按键抖动的现象。
3.掌握51系列单片机目标程序的下载方法。
4.掌握循环速度可键控循环灯控制程序设计方法。
二、实验设备
PC兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE3.2”和下载器驱动软件。
三、实验原理
1.AT89S52单片机实验板简介
本实验采用自制实验板,实验板硬件原理图参见附录二。
该实验板的主芯片为AT89S52,含有稳压电源电路、CPU及时钟电路、复位电路、在线编程接口电路、独立键盘电路、数码显示电路、矩阵键盘电路、循环灯(指示灯)电路、工频交流电同步电路、温度测量电路、加热功率调整电路、扩展EEPROM电路、扩展串口电路、扩展数字电位器(或D/A)电路、扩展四通道A/D转换器电路。
其中稳压电源电路、CPU及时钟电路、复位电路、在线编程接口电路、独立键盘电路都是典型电路,其原理不再赘述,其它模块将在实验二至六中使用,各模块电路的工作原理在各实验中介绍。
2.循环灯(指示灯)电路工作原理
表2.1:
发光管真值表
CS4
P0.0
LD1
H
-
灭
L
H
灭
L
L
亮
图2.1:
循环灯电路工作原理
如图2.1所示,8只红色发光管LED接成共阳极形式,开关管T5控制8只共阳极发光管的电源,当CS4(P2.4)引脚输出0时,T5导通,发光管阳极得到5V电源,CS4为循环灯(或指示灯)模块的选择控制端。
各发光管的阴极分别经限流电阻R7~14后由P0口控制,当CS4=0时,P0口某位(如P0.0)为0时,与该端口相连接的发光管(如LD1)点亮,反之发光管熄灭。
循环灯(指示灯)真值表如表2.1所示。
当CS4=0,P0.0=0时,LD1点亮,若忽略开关管T5和P0.0口内部MOS管的饱和电压降,则流过LD1的正向电流为
式中
为发光管正向导通电压,红色发光管的
,因此
。
若只发光管全部点亮,则通过开关管T5的电流为54.4mA,T5选用9012(200mA/50V)可以满足要求。
当CS4(P2.4)=0时,若P2.4引脚内部MOS管的饱和电压降,则T5基极控制电流为0.9mA,该基极电流要驱动54.4mA的集电极电流,T5管的放大倍数需超过60倍,通常9012均能满足此要求。
发光管的亮度与流过发光管的正向电流大小有关,也与发光管的发光效率有关,按发光效率区分,光发管通常可分为超高亮度(用于室外)、高亮度(用于室内)、普通亮度(用于较暗背景)3种,根据不同的亮度要求,Φ3发光管的正向电流可设定在
范围内。
3.定速循环灯的软件设计
若采用软件延时的方法使8盏LED灯从右至左(LD1→LD2→…LD8→LD1→…)循环点亮,循环速度固定,每盏灯亮的时间0.5秒。
根据循环灯控制要求和真值表2.1,用RAM的1个单元(如记为P0S,地址31H)来记录8个LED的状态,P0S的每位对应有尽有只LED,从低位到高位分别对应LD1到LD8,某位的逻辑值为0表示相应LED为亮(负逻辑)。
P0S的初始值为0FEH(LD1亮,其它灭),每隔0.5秒P0S的值左循移1位,并将P0S的值从P1口输出,从而实现循环灯控制,程序流图如图2.2所示,程序清单如下
;==程序首“ORG0000H”前定义各变量==
CS4BITP2.4
P0SEQU31H;P0口的输出状态
;============
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
CLRCS4
MOVP0,#0FFH;LED灯全灭
MOVP0S,#0FEH;右边第一个亮
MLOOP:
MOVA,P0S
MOVP0,A
RLA
MOVP0S,A
LCALLDELAY;延时0.5秒
AJMPMLOOP
;======延时子程序======
DELAY:
MOVR5,#200;延时((2*R7+3)*R6+5)*R5≈0.5S
DL00:
MOVR6,#05
DL01:
MOVR7,#250
DL02:
DJNZR7,DL02
DJNZR6,DL01
DJNZR5,DL00
RET
END
4.
图2.2:
独立键盘接口电路
独立健盘使用
实验板中配有两个独立按键,如图2.2所示。
由于P1口内部有上拉电阻(20~40kΩ),当按键SW1(或SW2)按下时,端口P1.6(或P1.7)为低电平,而按键松开时,端口P1.6为高电平。
将P1口的状态读至ACC,可以判断是否有键按下,ACC.6=0(或ACC.7=0)表示有SW1(或SW2)键下,此种状态表示为负逻辑表示,A求反后可得正逻辑表示。
若用RAM的1个单元(如记为KEY,地址30H)来记录独立按键的状态,则可采用以下子程序读取、并保存按键的状态。
;==程序首“ORG0000H”前定义各变量==
KEYEQU20H;保存按键的状态
SW1BITKEY.6;SW1键要内部RAM的映射
SW2BITKEY.7;SW2键要内部RAM的映射
;======读独立键盘子程序======
RDKEY:
ORLP1,#0C0H;读I/O,先置1再读入
MOVA,P1
XRLA,#0C0H;第6和7位求反,转为正逻辑
MOVKEY,A;保存键状态
RET
四、实验内容
1.定速循环灯项目调试
⑴建立定速循环灯项目
建立工作文件夹“E:
\学号\实验二”,采用实验一所述方法完成以下任务,建立定速循环灯项目、建立源程序文件、编辑源程序、编译。
⑵按实验一所述方法,使用伟福软件模拟器对定速循环灯项目进行模拟仿真。
⑶将软件模拟调试通过的目标程序下载到目标实验板的CPU(AT89S52)上,下载方法参见附录三。
取下下载器,上电试运行,观察循环灯运行情况。
2.循环速度可键控循环灯项目设计
设计一个可以用按键控制循环灯循环速度的工程项目,该项目可实现以下功能:
①开始时,循环灯从右到左循环点亮,每盏灯亮的时间为2.5mS,采用软件延时的方法实现;②通过独立按键SW1和SW2可改变循环灯循环速度,每盏灯亮的时间从2.5mS至0.5S可步进调整,每按一次SW1键,每盏灯亮的时间增加2.5mS;每按一次SW2键,每盏灯亮的时间减少2.5mS。
本设计项目算法的核心是编写一个延时时间可调的延时子程序,延时时间从2.5mS至0.5S可键控步进调整,步进值2.5mS。
可采用以下方法实现:
①在内部RAM中定义1个变量,如TDL、地址30H、初值为#01H,在主程序的每一次循环中都读一次独立按键的状态,并根据SW1(或SW2)键的状态对TDL进行加1(或减1)控制;②将“定速循环灯”控制程序中延时子程序的“MOVR5,#200”指令改为“MOVR5,TDL”,即可实现循环灯循环速度键控。
项目程序设计完后,完成以下任务:
⑴建立循环速度可键控循环灯项目,建立项目、建立源程序文件、编辑源程序、编译。
⑵使用伟福软件模拟器对循环速度可键控循环灯项目进行模拟仿真。
⑶将软件模拟调试通过和目标程序下载到目标实验板的CPU(AT89S52)上,取下下载器,上电试运行,观察循环灯运行情况、按键SW1和SW2对循环速度的控制作用。
⑷注意观察以下现象。
其一是,当总循环周期为20mS(每盏灯亮的时间为2.5mS)时,循环灯亮成一条直线,当循环周期大于40mS时,循环灯或逐个点亮、或亮成一条抖动的直线(即频闪现象)。
其二是,点击SW1和SW2键时,单片机有时可检测到按键,有时检测不到按键。
其三是,点击一次按键时,单片机有时会检测到多次按键。
五、实验报告要求
实验报告要求写明实验目的,并提交以下内容。
1.简述“循环速度可键控循环灯”控制算法原理,提交程序流图、汇编语言源程序清单。
2.对在实验板运行“循环速度可键控循环灯”项目目标程序所观察到的现象进行分析,解释其原因。
3.回答思考题。
六、思考题
1.调整哪些电路参数可以调整循环灯的亮度。
2.如果8只LED发光二极管改为8只LED数码管,使用类似于循环灯方式,循环点亮8只LED数码管,若要正常显示没有频闪,每只LED数码管显示的时间不能超过毫秒?
实验三、I/O口输入输出实验
――LED数码管动态显示与按键去抖程序设计
一、实验目地
1.掌握LED数码管动态显示电路工作原理及其驱动程序设计方法。
2.掌握软件处理按键去抖动的算法原理及其程序设计方法。
3.学习模块化程序设计方法。
二、实验设备
PC兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE3.2”和下载器驱动软件。
三、实验原理
1.LED数码管动态显示电路工作原理
在实验二中,我们观察到当循环灯的总循环周期为20mS(每盏灯亮的时间为2.5mS)时,循环灯亮成一条直线。
这个现象是由于眼睛有视觉惰性,即光像一旦在视网膜上形成,视觉将会对这个光像的感觉维持一个有限的时间,这种生理现象叫做视觉暂留性,光亮度越大视觉暂留时间越长,对中等亮度的光刺激,视觉暂留时间约为0.05至0.2秒。
循环灯完成一次循环称为一帧图像,由于LED的亮度较低,当每秒超过40帧图像时,循环灯亮成一条直线,无频闪感觉。
图3.1LED数码管动态显示电路
LED数码管动态显示电路如图3.1所示,其工作原理也是基于眼睛的视觉暂留效应,与循环灯的工作原理相似。
在图3.1中,SEG1~4为4只共阳极数码管,8只LED指示灯LD1