最新单片机实验3PPT课件.ppt
二、实验步骤和内容二、实验步骤和内容 1 1、用、用XL1000XL1000或或XL2000XL2000综合仿真仪进行在线仿真步综合仿真仪进行在线仿真步骤如下:骤如下: (1 1)使用)使用USBUSB线和串口线线和串口线, ,将将XL1000XL1000综合仿真仪与综合仿真仪与微型计算机串行口微型计算机串行口COM1COM1连接起来连接起来; ; (2 2)在)在XL1000XL1000综合仿真仪上综合仿真仪上, ,将将JP13JP13和和JP14JP14两个两个232/USB232/USB通信选择方式端口的跳线帽跳至通信选择方式端口的跳线帽跳至232232的方式的方式, , (3 3)将)将JP17JP17的开关压下的开关压下, ,选择仿真模式选择仿真模式; ; (2 2)8 8路跑马灯参考程序路跑马灯参考程序 org 0000horg 0000hajmp lop2ajmp lop2org 0050h org 0050h Lop2:Lop2: mov p1,#0ffh ;mov p1,#0ffh ;关闭所有灯关闭所有灯clr p1.0 ;clr p1.0 ;点亮灯点亮灯p1.0p1.0lcall delay ;lcall delay ;调延时子程序调延时子程序clr p1.1 clr p1.1 ; ;点亮灯点亮灯p1.1p1.1lcall delaylcall delayclr p1.2 ;clr p1.2 ;点亮灯点亮灯p1.2p1.2lcall delaylcall delayclr p1.3 ;clr p1.3 ;点亮灯点亮灯p1.3p1.3lcall delaylcall delayclr p1.4 ;clr p1.4 ;点亮灯点亮灯p1.4p1.4lcall delaylcall delayclr p1.5 clr p1.5 ; ;点亮灯点亮灯p1.5p1.5lcall delaylcall delayclr p1.6 ;clr p1.6 ;点亮灯点亮灯p1.6p1.6lcall delaylcall delayclr p1.7 ;clr p1.7 ;点亮灯点亮灯p1.7p1.7lcall delaylcall delayAJMP Lop2AJMP Lop2 ; ; 重新运行重新运行delay: mov r5,#20 ;delay: mov r5,#20 ;延时子程序延时子程序d1: mov r6,#40d1: mov r6,#40d2: mov r7,#248d2: mov r7,#248 djnz r7,$djnz r7,$ djnz r6,d2djnz r6,d2 djnz r5,d1djnz r5,d1 retret #include #include void delays() /1S 延时 unsigned char i; for(i=0;i0 x14;i+) /20次 TH1=0 x3c;/延时50ms TL1=0 xb0; TR1=1; while(!TF1); TF1=0; void main( ) unsigned char i,w; TMOD=0 x10; while(1) w=0 x01; for(i=0;i8;i+) P1=w; w=1; delays(); 流水灯控制程序流水灯控制程序(C(C语言实现),定时计数器加软件定时语言实现),定时计数器加软件定时1S1S。(5 5)点击(图标)目标)点击(图标)目标1 1前的前的“+”+”号,出现(号,出现(图标图标)源程序组源程序组1 1,选中并点右键,选,选中并点右键,选“文件增加到源程序组文件增加到源程序组1”1”,选择文件类型,再选要输入的程序名,选择文件类型,再选要输入的程序名. .C C或或ASMASM,点点ADDADD(加入),点确定。(加入),点确定。 此时点击源程序组此时点击源程序组1 1可以看可以看到要输入的程序。到要输入的程序。 (6 6)程序编写后,)程序编写后,可进行系统的仿真;可进行系统的仿真;在仿真前在仿真前, ,需对目标需对目标1 1的属性进行修改的属性进行修改; ;如右图如右图, ,点击点击P P工程工程下拉菜单中的下拉菜单中的”目目标标目标目标11属性属性”;”;(7 7)单击)单击”目标目标”,”,输入仿真器的频率输入仿真器的频率12(MHz);12(MHz); (8 8)选择)选择”输出输出”菜单中的菜单中的”生成生成HEXHEX文件文件”,”,以便汇编后产生以便汇编后产生HEXHEX代码代码, ,供编程器使用供编程器使用; ;(9 9)在)在”调试调试”菜单中菜单中, ,选择如下选择如下箭头所指箭头所指3 3项功能项功能, ,并并”点击设置点击设置”,”,出现右图后按箭头出现右图后按箭头所指进行设置所指进行设置, ,注注意你使用的是那个意你使用的是那个串口串口(Com1(Com1还是其它还是其它的的, ,可以看设备可以看设备管理器管理器);); (1010)全部确定后)全部确定后, ,对程序进行编译和链接对程序进行编译和链接, ,并生成并生成相应的相应的HEXHEX文件后文件后, ,可进行调试可进行调试( (红色的红色的D),D), 如出现错误报告如出现错误报告, ,如要求连上仿真如要求连上仿真仪时仪时, ,请检查有无连接请检查有无连接USBUSB线和串线和串口线口线, ,并按下仿真仪上的复位键并按下仿真仪上的复位键; ; (1111)进入调试窗口)进入调试窗口, ,连接上相关的连接线连接上相关的连接线, ,运行程序运行程序, , 即可观查仿真结果即可观查仿真结果; ; (1212)退出仿真时)退出仿真时, ,按下仿真仪上的复位键就会自动按下仿真仪上的复位键就会自动退到编辑模式下退到编辑模式下, ,修改完毕程序并编译后修改完毕程序并编译后, ,再按下再按下”调试调试”即可进入仿真模式即可进入仿真模式; ;(1313)依次)依次点击屏幕上方左下角的编译和建造目标图点击屏幕上方左下角的编译和建造目标图标标 对文件进行编译和链接,对文件进行编译和链接,观察左下角的调观察左下角的调试程序信息显示,如有错可根据该栏提示的信息进行试程序信息显示,如有错可根据该栏提示的信息进行修改,修改后要重新保存和编译修改,修改后要重新保存和编译, ,直到无错误提示,如直到无错误提示,如下图所示。下图所示。(1414)点击调试图标点击调试图标 ,进入程序调试画面,此时,进入程序调试画面,此时黄箭头所指是将要执行的指令。黄箭头所指是将要执行的指令。 (1515)对汇编语言程序:调试界面分为)对汇编语言程序:调试界面分为4 4部分:部分: 1 1)左上角为)左上角为REGREG和系统显示区;和系统显示区; 2 2)左下角为调试程序时的信息显示;)左下角为调试程序时的信息显示; 3 3)右上角为程序编写和修改区;)右上角为程序编写和修改区; 4 4)右下角为)右下角为C CODEODE(程序存储器)和程序存储器)和D DATA/ATA/X XDATADATA(内内部部/ /外部数据存储器)的显示区。外部数据存储器)的显示区。 如果未出现存储区,设置方式如下:点击如果未出现存储区,设置方式如下:点击 V V视图视图 M M存储器窗口,右下角会出现存储器窗口,右下角会出现4 4个存储区:存储器个存储区:存储器#1-#4#1-#4。可以根据需要设置。点击存储器可以根据需要设置。点击存储器1#1#,在上面地址栏中,在上面地址栏中输入输入C:0000HC:0000H,此时存储器,此时存储器1#1#被设计为被设计为程序存储器程序存储器,地,地址从址从0000H0000H开始。点击存储器开始。点击存储器2#/3#2#/3#,在上面地址栏中,在上面地址栏中输入输入D/X:0000HD/X:0000H,此时存储器,此时存储器2#/3#2#/3#被设计为内部被设计为内部/ /外部外部数据存储器,数据存储器,地址从地址从0000H0000H开始。开始。 设置存储区后,可运行程序设置存储区后,可运行程序 (左图标)或停(左图标)或停止程序(右图标);如果希望单步执行(即一条一条止程序(右图标);如果希望单步执行(即一条一条的执行指令,以便调试程序)可点击的执行指令,以便调试程序)可点击 图标,每点击图标,每点击一次黄箭头会向下移动,指向下一条指令。一次黄箭头会向下移动,指向下一条指令。 观察程序的运行结果:观察程序的运行结果: 在单步调试时,每执行一条在单步调试时,每执行一条指令,都可在屏幕左上方的寄存器区和右下方的存储指令,都可在屏幕左上方的寄存器区和右下方的存储区观察运行的状态。区观察运行的状态。程序存储器中表示的是程序汇编程序存储器中表示的是程序汇编后的二进制代码后的二进制代码,内外数据存储器中表示的运行中数内外数据存储器中表示的运行中数据结果的变化据结果的变化。观察时可在相应存储区的地址栏打入。观察时可在相应存储区的地址栏打入地址即可,如想看内存地址即可,如想看内存20H中的内容,只需在相应存储中的内容,只需在相应存储区的地址栏打入区的地址栏打入 D:0020H。(1616)对)对C C语言程序,调试时需打开以下窗口:语言程序,调试时需打开以下窗口:1 1)变量的查询:)变量的查询: 打开打开V V视图:视图:W W监视监视& &调用堆栈窗,在局部栏中或监调用堆栈窗,在局部栏中或监视视#1#1、2 2中观察结果。中观察结果。2 2)用)用scanfscanf输入,或用输入,或用printfprintf输出时:输出时: 打开打开V V视图:串行口视图:串行口1#1#观察结果。观察结果。 当单步运行时,在当单步运行时,在scanfscanf语句运行后,在串行口语句运行后,在串行口1#1#中光标位置按输入格式要求输入数据后中光标位置按输入格式要求输入数据后回车。回车。 三、自编程序三、自编程序(1 1)修改延时子程序修改延时子程序, ,改变延时时间,观察结果改变延时时间,观察结果(2 2)修改程序修改程序, 改变改变跑马灯的跑马顺序跑马灯的跑马顺序 A:由灯:由灯1至灯至灯8,再由灯,再由灯8回到灯回到灯1 B:由两头到中间,再由中间到两头:由两头到中间,再由中间到两头 C:隔灯亮并跑马:隔灯亮并跑马 观察结果观察结果 四、思考题四、思考题 用二个发光二极管和用二个发光二极管和2个开关个开关 模拟汽车转向灯控模拟汽车转向灯控制,当开关制,当开关1合上左转灯闪烁,开关合上左转灯闪烁,开关2合上右转灯闪合上右转灯闪烁,烁,2个开关全合上,个开关全合上,2个灯闪烁表示故障。个灯闪烁表示故障。+5VC3R1KRSTXTAL1XTAL2C1C212MHZ89C51VCCRD1P1.0P1.1P3.0P3.1模拟汽车左右转向灯控制模拟汽车左右转向灯控制如图:单片机如图:单片机89C5189C51P1.0P1.0、P1.1P1.1口上接口上接2 2个发光二极管,个发光二极管,P3.0P3.0和和P3.1P3.1接开关接开关S0S0和和S1S1。RS0S1P3.0 P3.1 转向灯状态 0 0 2灯同时闪烁故障 0 1 左灯亮 左转 1 0 右灯亮 右转 1 1 未发命令 方向灯逻辑关系 2、参考程序、参考程序:汽车转向灯控制汽车转向灯控制C C程序程序#include sbit P1_0=P10; /定义P1.0引脚位名称为P1_0sbit P1_1=P11; /定义P1.1引脚位名称为P1_1sbit P3_0=P30; /定义P3.0引脚位名称为P3_0sbit P3_1=P31; /定义P3.1引脚位名称为P3_1void delay(unsigned char i); /延时函数声明void main() /主函数 bit left,right; /定义位变量left、right表示左、右状态 while(1) /while循环语句,由于条件一直为真,该语句为无限循环 left=P3_0; /读P3.0引脚的(左转向灯)状态赋给left right=P3_1; /读P3.1引脚的(右转向灯)状态赋给right P1_0=left;/将left的值送至P1.0引脚 P1_1=right;/将right的值送至P1.1引脚 delay(200);/调用延时函数,实际参数为200 P1_0=1; /将P1.0引脚置1输出(熄灭LED) P1_1=1;/将P1.1引脚置1输出(熄灭LED) delay(200);/调用延时函数,实际参数为200 /函数名:delay 函数功能:实现软件延时void delay(unsigned char i) unsigned char j,k;/定义无符号字符型变量j和k for(k=0;ki;k+)/双重for循环语句实现软件延时 for(j=0;j255;j+);27 结束语结束语