您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 微机原理课程实验指导书150914
1/22微机原理课程实验指导书(XL600实验仪)机电系摘录2015.81/22实验一P1口实验及延时子程序设计一、实验目的与要求利用单片机的P0口、P1口作为I/O口进行实验验证,掌握利用P0口、P1口作为输入口和输出口的编程方法,理解并掌握延时子程序的设计方法。实验要求:(1)编写一段程序,用P0口作为输出口,利用延时子程序达到控制LED输出跑马灯的效果。(2)编写一段程序,用P1输入拨动开关的状态来控制P0口输出状态。二、实验参考步骤1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T1a.uv2)。CPU型号可选择Atmel\at89c52;无需添加标准文件头。2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test1a.asm,然后将其加入到源程序组1中(在sourcegroupet右键点击菜单然后选中addfilestogroup‘sourcegroup1’,注意文件扩展名为.asm)。3、在工程菜单的选项“目标1属性”(optionsfortarget‘target1’)中设置相应的选项,包括“输出(output)\产生hex文件(creathex)”选项以便汇编生成HEX代码供编程器使用,在“调试(debug)\使用KeilMonitor-51Driver”的设置中选择相应的串口号。4、使用“工程”(Project)中的“编译全部文件”(rebuildalltargetfiles)完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T1a.hex。如果提示有编译错误请自行修改源程序然后再重新编译。5、用8PIN连线将P0(JP51)连接到8路指示灯部分的JP32,再完成仿真器与计算机之间的连线并通电。6、在KEIL软件中启动“调试(debug)\开启仿真模式(start\stopdebugsession)”,然后用“运行”(run)命令实现全速运行的仿真。7、记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”(先halt退出运行再StopDebugging,不要点击得太快!)退出仿真,选择“工程(project)\关闭工程”(closeproject)可关闭当前工程。8、参考步骤1-4完成参考源程序2的建立与输入,如新项目T1b.uv2和新的源程序test1b.asm,完成编译与仿真设置。9、用8PIN连线将P0(JP51)连接到8路指示灯部分的JP32,将P1口连接到JP40的拨动开关。10、仿真运行,注意拨动不同开关位观察指示灯的变化状态,记录后中断调试并退出仿真状态.11、根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。三、参考程序2/221、用P0口作为输出口,利用延时子程序达到控制LED输出跑马灯的效果。ORG0000HLJMPMAINORG0100HMAIN:MOVA,#0FFH;初值全1,灯全灭MOVP0,A;送P0口显示CLRC;CY清零,循环中通过移位指令使灯亮MAIN_LP:LCALLDELAY;延时RLCA;循环移位MOVP0,A;新值送P0口,点亮下一个LEDJMPMAIN_LP;不停循环;=========================================DELAY:MOVR7,#0FFH;延时子程序MOVR6,#0FFHDLY_LP:NOPNOPDJNZR6,DLY_LPMOVR6,#0FFHDJNZR7,DLY_LPRETEND2、编写一段程序,用P1口输入控制P0口输出状态,试用P1口控制P0口输出学生自己学号的最后两位数码的组合BCD码(如38表示为00111000),试验成功后请拍照作为实验现象的原始数据。ORG0000HLJMPMAINORG0100HMAIN:MOVA,#0FFH;初值全1MOVP1,A;置位P1口准备输入MOVA,P1;将拨动开关状态通过P1口输入OUTP0:MOVP0,A;新值送P0口JMPMAIN;不停循环END思考与拓展:试根据参考程序1中多个状态变化的累计时间估算出延时子程序的时间并进行验算,通过修改R6和R7的赋值使每个状态变换的时间为N*10ms(其中N值为学号的最后两位数值,如恰好是00则取值为50)。3/22实验二定时器实验一、实验目的与要求利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。掌握实验基础内容后根据参考源程序进行修改和拓展,自行设计程序目标并编程验证。二、实验参考步骤1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51Driver”的设置中选择相应的串口号。4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。如果提示有编译错误请自行修改源程序然后再重新编译。5、用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。6、完成仿真器与计算机之间的连线并通电。7、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。8、观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。9、参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。10、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。11、输入程序并仿真运行,注意数码管的显示内容。12、根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。4/22三、参考程序1、利用定时器控制产生占空比可变的PWM波,通过按K01可PWMH值增加,则占空比增加,LED灯渐暗。按K2,PWM值减小,则占空比减少,LED灯渐亮。PWMHDATA40H;高电平脉冲的个数PWMDATA41H;PWM周期COUNTERDATA42H;TEMPDATA43HOUTPWMEQUP1.0;PWM波输出引脚OUTPWMbEQUP1.1;PWM波输出引脚b,用于外接示波器探头INCKEYEQUP1.6;K01,PWMH值增加键。DECKEYEQUP1.7;K02,PWMH值减小键。ORG0000HAJMPMAINORG000BHAJMPINTT0ORG0100HMAIN:MOVSP,#60H;给堆栈指针赋初值MOVPWMH,#02H;赋初值MOVCOUNTER,#01HMOVPWM,#15HMOVTMOD,#02H;定时器0在模式2下工作MOVTL0,#38H;每200μs产生一次溢出MOVTH0,#38H;自动重装初值SETBET0;使能定时器0中断SETBEA;使能总中断SETBTR0;开始计时KSCAN:SETBINCKEY;端口输入状态,扫描按键SETBDECKEYJNBINCKEY,K1CHECK;扫描K01,如果按下跳转到KEY1处理程序JNBDECKEY,K2CHECK;扫描K02,如果按下跳转到KEY2处理程序SJMPKSCANK1CHECK:JBINCKEY,K1HANDLE;若按下K01后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序SJMPK1CHECKK1HANDLE:MOVA,PWMH;CJNEA,PWM,K1H0;判断是否到达上边界SJMPKSCAN;是,则不进行任何操作K1H0:MOVA,PWMHINCACJNEA,PWM,K1H1;如果在加1后到达最大值5/22CLRTR0;定时器停止SETBOUTPWM;置输出为高电平SETBOUTPWMbSJMPK1H2K1H1:CJNEA,#02H,K1H2;如果加1后到达下边界SETBTR0;重开定时器K1H2:INCPWMH;增加占空比SJMPKSCANK2CHECK:JBDECKEY,K2HANDLE;若按下K02后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序SJMPK2CHECKK2HANDLE:MOVA,PWMH;CJNEA,#01H,K2H0;判断是否到达下边界,是,则不进行任何操作SJMPKSCAN;K2H0:MOVA,PWMH;MOVTEMP,PWMDECACJNEA,#01H,K2H1;如果在减1后到达下边界CLRTR0;定时器停止CLROUTPWM;输出为低电平CLROUTPWMbSJMPK2H2K2H1:DECTEMP;CJNEA,TEMP,K2H2;如果到达上边界SETBTR0;启动定时器K2H2:DECPWMHSJMPKSCAN;降低占空比INTT0:PUSHPSWPUSHACCINCCOUNTERMOVA,COUNTERCJNEA,PWMH,INTT01CLROUTPWMCLROUTPWMbINTT01:CJNEA,PWM,INTT02MOVCOUNTER,#01HSETBOUTPWMSETBOUTPWMbINTT02:POPACCPOPPSWRETIEND6/222、数码管显示演示程序:在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGITEQU40H;位选通值,传送到P2口用于选通当前数码管的数值,;如等于0xfe时,选通P2.0口数码管DIS_INDEXDATA41H;显示索引,用于标识当前显示的数码管和缓冲区的偏移量DIS_BUFDATA50H;显于缓冲区起始地址ORG0000HAJMPMAINORG000BHAJMPINTT0ORG0100HMAIN:MOVP0,#0FFH;初始化I/O口MOVP2,#0FFHMOVTMOD,#02H;定时器0在模式2下工作MOVTL0,#38H;每200μs产生一次溢出MOVTH0,#38H;自动重装初值SETBET0;使能定时器0中断SETBEA;使能总中断MOVDPTR,#DIS_CODE;设定显示初值为1-8MOVA,#1;初值为1,以后顺序加1MOVCA,@A+DPTRMOVDIS_BUF,AMOVA,#2MOVCA,@A+DPTRMOVDIS_BUF+01H,AMOVA,#3MOVCA,@A+DPTRMOVDIS_BUF+02H,AMOVA,#4MOVCA,@A+DPTRMOVDIS_BUF+03H,AMOVA,#5MOVCA,@A+DPTRMOVDIS_BUF+04H,AMOVA,#6MOVCA,@A+DPTRMOVDIS_BUF+05H,AMOVA,#7MOVCA,@A+DPTR7/22MOVDIS_BUF+06H,AMOVA,#8MOVCA,@A+DPTRMOVDIS_BUF+07H,ADISPLAY:MOVDIS_DIGIT,#0FEH;初始从第一个数码管开始扫描MOVDIS_INDEX,#0SETBTR0;启动定时器0,开始动态扫描显示MAIN_LP:NOP;主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容SJMPMAIN_LP;=====================================================INTT0:;定时器0中断
本文标题:微机原理课程实验指导书150914
链接地址:https://www.777doc.com/doc-3153980 .html