单片机原理实验
ADD A,#01H DA A MOV 30H,A
CJNE A,#50H,DELAY1 RET
D10MS: MOV R6,#20 ;延时(2*R7+4)*R6+5=10005机器周 D10MS1: MOV R7,#248
NOP DJNZ R7,$ DJNZ R6,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 汇编(或编译)程序
选择菜单[项目|编译]功能或按编译快捷图标,编译你的项目。在编译过程中,如果源程序有语法错误,将自动弹出信息窗口,显示错误所在行号及错误编号等信息,双击错误信息,可以在源程序中定位所在行。纠正错误后,再次编译直到没有错误。
3
单片机原理实验
在编译之前,软件会自动将项目和程序存盘。在编译没有错误后,打开工作文件夹,可以看到文件夹中产生eg1.lst、project.bin、project.hex三个文件,第1个是源程序eg1.asm的汇编列表文件,可用记事本编辑器打开该文件,解读该文件提供的信息;第2和3个文件是该工程项目的二种格式的目标程序(.bin和.hex格式)。
3.3 汇编程序的仿真调试方法和观察窗口的使用
如前所述,模拟仿真调试的方法是在PC机上模拟目标程序的运行,并显示虚拟单片机内部RAM和特殊功能寄存器的值,程序员通过分析虚拟单片机内部RAM和特殊功能寄存器的值仅能判断与硬件无关的那部分软件的正确与否。常用先打开合适的观察窗口,用跟踪、单步、执行到光标处等方式来调试程序。比如
① 打开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单元、堆
4
单片机原理实验
栈(60H~7FH),为了便于观察这些单元的内容变化,可在CPU窗口中关闭无关的SFR的显示,添加R6、R7、30H单元的显示。
选择菜单[仿真器|设置汇编预定义符号]功能,弹出符号定义对话框;例如要关闭DPL,则双击DPL,将DPL的用途由“预定义符号+SFR窗口显示”改为“预定义符号”,确认修改;例如要添加R6,则点击“添加”钮,输入名称――R6、地址――06H,用途选择为“预定义符号+SFR窗口显示”,确认修改。所有修改完后,关闭CPU窗口,再重新打开CPU窗口,此时窗口第二、三栏的显示内容如图1.5所示,添加30H单元时,将该单元取名为XR1。
图1.5:经修改后CPU窗口 ③跟踪法调试程序。
中的第二、三栏 在“=>”指向“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窗口的变化。至此,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+5VLD8LD7LD6LD5LD4LD3LD2LD1T5接成共阳极形式,开关管T5控制8只共 9012R19阳极发光管的电源,当CS4(P2.4)引hfgedcba4K7脚输出0时,T5导通,发光管阳极得到
CS45V电源,CS4为循环灯(或指示灯)模
R7~14块的选择控制端。各发光管的阴极分别470经限流电阻R7~14后由P0口控制,当CS4=0时,P0口某位(如P0.0)为0时, 与该端口相连接的发光管(如LD1)点
图2.1:循环灯电路工作原理 亮,反之发光管熄灭。循环灯(指示灯)
真值表如表2.1所示。当CS4=0,P0.0=0时,LD1点表2.1:发光管真值表 亮,若忽略开关管T5和P0.0口内部MOS管的饱和电CS4 P0.0 LD1 压降,则流过LD1的正向电流为 H - 灭 ILD1?5?VF R7P00P01P02P03P04P05P06P07L L abcdefghH L 灭 亮 式中VF为发光管正向导通电压,红色发光管的
VF?1.8V,因此ILD1?6.8mA。若只发光管全部点亮,则通过开关管T5的电流为
7