单片机原理实验讲义(2)

2019-01-27 18:58

单片机原理实验

栈(60H~7FH),为了便于观察这些单元的内容变化,可在CPU窗口中关闭无关的SFR的显示,添加R6、R7、30H单元的显示。

选择菜单[仿真器|设置汇编预定义符号]功能,弹出符号定义对话框;例如要关闭DPL,则双击DPL,将DPL的用途由“预定义符号+SFR窗口显示”改为“预定义符号”,确认修改;例如要添加R6,则点击“添加”钮,输入名称――R6、地址――06H,用途选择为“预定义符号+SFR窗口显示”,确认修改。所有修改完后,关闭CPU窗口,再重新打开CPU窗口,此时窗口第二、三栏的显示内容如图1.5所示,添加30H单元时,将该单元取名为XR1。

③跟踪法调试程序。

在“=>”指向“MOV SP,#60H”时,点击跟踪快捷图标1次,观察CPU窗口中SP值的变化,及该指令的执行时间;

再点击跟踪快捷图标1次,执行“XRL P1,#01H”指令,观察端口P1的变化; 继续点击跟踪快捷图标1次,执行“ACALL DELAY”指令,观察程序的转移及CPU窗口SP值的变化及RAM窗口60H、61H内容的变化,这些变化反映子程序调用时断点地址的进栈保护;

继续点击踪快捷图标1次,执行“MOV 30H,#0”,由于执行前XR1的值为0,因此CPU窗口中XR1的值没有变化,仍为黑色;

继续点击踪快捷图标1次,执行“ACALL D10MS”,观察程序的转移、CPU窗口SP值的变化及RAM窗口62H、63H内容的变化,这些变化反映子程序二级嵌套的断点保护。 继续点击跟踪快捷图标6次,每次均观察CPU窗口的变化,从第5次开始,循环执行“DJNZ R7,$”指令,若继续用跟踪法调试程序,还需点击245次才能结束循环,调试效率太低,可用以下的“断点”法调试。

④跟踪及断点调试法。

用鼠标左键点击“DJNZ R6,D10MS1”程序行,光标移至该行,点击鼠标右键,打开快捷菜单,选择“执行到光标处”,观察“=>”和程序执行时间的变化。

继续点击跟踪快捷图标4次,每次均观察CPU窗口R6、R7的变化,从第4次开始又进入“DJNZ R6,D10MS1”循环。至此,根据程序执行情况,已可判断10mS延时程序编写基本正确,用鼠标左键点击D10mS子程序的“RET”行,选择“执行到光标处”,观察观察CPU窗口R6、R7的变化和执行时间。点击跟踪快捷图标,执行“RET”,结束子程序调用,观察SP值的变化和程序的转向,这些情况反映子程序返回时的断点击栈情况。

继续点击跟踪快捷图标5次,每次均观察CPU窗口变化,第5次执行“CJNE A,#50H,DELAY1”指令,“=>”指向“DELAY1: ACALL D10MS”,由于前面的调试已表明D10MS子程序正确,若再采用前述的调试方法,调试效率太低,可采用以下的单步调试方法。

5

图1.5:经修改后CPU窗口

中的第二、三栏

单片机原理实验

⑤单步调试法。

点击单步快捷图标1次,观察“=>”的指向和执行时间;继续点击单步快捷图标5次,每次均观察CPU窗口的变化。至此,500mS延时子程序调试基本完成,仅剩(30H)单元十进制加1的算法逻辑是否正确无法判断,采用以下方法可提高调试效率。先双击CPU窗口的XR1,将XR1值修改为49H,然后继续点击单步快捷图标,并观察CPU窗口的变化,直至执行“DELAY”子程序的返回指令“RET”。至此500mS延时子程序调试完毕。

返回主程序以后,继续重复点击单步快捷图标,观察每一单步执行的结果和执行时间,判断主程序的逻辑是否正确。

⑥模块化程序的调试 程序设计通常采用模块化的结构,因此程序调试一般也按模块进行调试。通常先调试子程序,再逐模块调试各功能模块,在子程序或模块程序调试时,常采用修改CPU的状态,设定模块程序的入口条件,再调试程序,如调试双加法子程序时,往往先设定RAM中存放被加数和加数的单元,然后再进行调试。

四、 实验内容

1. 掌握“WAVE 3.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”中的程序的调试方法。

6

单片机原理实验

实验二、I/O口输入输出实验――循环灯程序设计

一、

实验目地

1. 掌握51系列单片机I/O端口操作方法,I/O端口控制程序的编写。 2. 了解数码管动态显示的工作原理,了解按键抖动的现象。 3. 掌握51系列单片机目标程序的下载方法。

4. 掌握循环速度可键控循环灯控制程序设计方法。

二、 实验设备

PC 兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”和下载器驱动软件。

三、 实验原理

1. AT89S52单片机实验板简介

本实验采用自制实验板,实验板硬件原理图参见附录二。该实验板的主芯片为AT89S52,含有稳压电源电路、CPU及时钟电路、复位电路、在线编程接口电路、独立键盘电路、数码显示电路、矩阵键盘电路、循环灯(指示灯)电路、工频交流电同步电路、温度测量电路、加热功率调整电路、扩展EEPROM电路、扩展串口电路、扩展数字电位器(或D/A)电路、扩展四通道A/D转换器电路。其中稳压电源电路、CPU及时钟电路、复位电路、在线编程接口电路、独立键盘电路都是典型电路,其原理不再赘述,其它模块将在实验二至六中使用,各模块电路的工作原理在各实验中介绍。

2. 循环灯(指示灯)电路工作原理 如图2.1所示,8只红色发光管LED接成共阳极形式,开关管T5控制8只共阳极发光管的电源,当CS4(P2.4)引脚输出0时,T5导通,发光管阳极得到5V电源,CS4为循环灯(或指示灯)模块的选择控制端。各发光管的阴极分别CS4=0时,P0口某位(如P0.0)为0时,与该端口相连接的发光管(如LD1)点亮,反之发光管熄灭。循环灯(指示灯)P00P01P02P03P04P05P06P07+5VT59012R194K7CS4LD8LD7LD6LD5LD4LD3LD2LD1 hfgedcbaabcdefghR7~14470经限流电阻R7~14后由P0口控制,当

图2.1:循环灯电路工作原理 表2.1:发光管真值表 CS4 P0.0 LD1 H - 灭 L H 灭 L L 亮

真值表如表2.1所示。当CS4=0,P0.0=0时,LD1点亮,若忽略开关管T5和P0.0口内部MOS管的饱和电

压降,则流过LD1的正向电流为

ILD1?5?VF R7式中VF为发光管正向导通电压,红色发光管的

VF?1.8V,因此ILD1?6.8mA。若只发光管全部点亮,则通过开关管T5的电流为

7

单片机原理实验

54.4mA,T5选用9012(200mA/50V)可以满足要求。当CS4(P2.4)=0时,若P2.4引脚内部MOS管的饱和电压降,则T5基极控制电流为0.9mA,该基极电流要驱动54.4mA的集电极电流,T5管的放大倍数需超过60倍,通常9012均能满足此要求。

发光管的亮度与流过发光管的正向电流大小有关,也与发光管的发光效率有关,按发光效率区分,光发管通常可分为超高亮度(用于室外)、高亮度(用于室内)、普通亮度(用于较暗背景)3种,根据不同的亮度要求,Φ3发光管的正向电流可设定在1~10mA范围内。

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所示,程序清单如下

;==程序首“ORG 0000H”前定义各变量== CS4 P0S

BIT P2.4 EQU 31H ORG 0000H LJMP MAIN ORG 0030H

;LED灯全灭

;P0口的输出状态

开始(转主程入口) 选择循环灯模块(CS4=0) 熄灭所有LED P0S赋初值 P0S值从P1输出 P0S左循移 延时0.5秒 ;============

MAIN: CLR CS4 MOV P0,#0FFH

MLOOP: MOV A,P0S MOV P0,A

RL A

MOV P0S,A LCALL DELAY

MOV P0S,#0FEH ;右边第一个亮

图2.2:循环灯流程图

;延时0.5秒

AJMP MLOOP ;======延时子程序====== DELAY: MOV R5,#200 ;延时((2*R7+3)*R6+5)*R5≈0.5S DL00: DL01: DL02:

MOV R6,#05 MOV R7,#250 DJNZ R7,DL02 DJNZ R6,DL01 DJNZ R5,DL00 RET

8

单片机原理实验

END

4. 独立健盘使用

实验板中配有两个独立按键,如图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)来

P1.6SW1P1.7SW2 图2.2:独立键盘接口电路 记录独立按键的状态,则可采用以下子程序读取、并保存按键的状态。 ;==程序首“ORG 0000H”前定义各变量== KEY SW1 SW2

EQU 20H BIT KEY.6 BIT KEY.7

;保存按键的状态

;SW1键要内部RAM的映射 ;SW2键要内部RAM的映射 ;读I/O,先置1再读入 ;第6和7位求反,转为正逻辑 ;保存键状态

;======读独立键盘子程序====== RDKEY: ORL P1,#0C0H MOV A,P1 XRL A,#0C0H MOV KEY,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)控制;②

9


单片机原理实验讲义(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:考研政治知识结构框架图

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: