您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 跑马灯1秒间隔闪烁---运用定时中断方法控制P1口亮灯实验
实验三运用定时中断方法控制P1口亮灯实验姓名:郑旅军学号:0656061指导老师:邹慧兰成绩:一、实验目的1学习内部定时/计数器的使用2学习定时中断处理程序的编程方法二、实验内容P1口作为输出口,接发光二极管,编写相应的程序使发光二极管点亮。发光二极管亮灭的时间间隔可以由定时中断子程序进行控制。要求0.5S中亮一个。三、实验预备知识1.P1口是准双向口,可以定义为输入,也可以定义为输出2.本实验中采用定时器来实现中断四、程序框图五、实验电路图P1.0--------LED0P1.1--------LED1P1.2--------LED2P1.3--------LED3P1.4--------LED4P1.5--------LED5P1.6--------LED6P1.7--------LED7六、实验步骤1.按要求编写相应的程序#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintuintnum=4;ucharXX=0x01;voidtimer0()interrupt1{num--;TH0=0x0B;TL0=0xDC;//重新设置初值if(num==0){XX=_crol_(XX,1);//或者是XX=XX1num=4;}}voidmain(){TMOD=0x01;//setmodeloneTH0=0x0B;TL0=0xDC;//设置初值EA=1;//总中断允许ET0=1;//定时中断允许TR0=1;//定时开始for(;;){P1=XX;//计时溢出时,退出循环,跳到中断子程序}}由于晶振是6MHz,所以机器周期为s2,延时0.5S,则是延时ss25.0=250000个机器周期,超出了计时器162,所以考虑将250000分开4次循环计时,设置计数器num。这里选用定时器T0,工作于方式1,无门控.要开启中断,必须将EA(总中断允许)和ET0(定时器T0中断允许)置1,程序中用“EA=1;”和“ET0=1;”来实现。在做完这些工作以后,就用for(;;){P1=XX}让主程序进入循环中,边计数,边执行P1=XX,当溢出时,跳到中断去。中断的一个操作num--完成后,判断一下,不符合,跳回主程序,边计数,边执行P1=XX,如此反复4次。2.连接实验电路图3.调试并运行程序,观察结果五、实验要求完成实验报告,简要写出相应的实验现象和结果。(如遇到的问题以及解决问题的方法)一开始对中断的实现过程不够理解,尤其是用C语言,开始的设计思路是这样的:主函数设初值,在初值的基础上开始计时(一个机器周期加1),同时执行for()里面的语句,当计到TH0=ff,TL0=ff,产生中断,退出for(),跳到timer(),执行timer()里面的语句,并判断num,不满足,就回到主函数产生中断的地方去重新执行计时操作,如此反复4次。中途有个疑问,中断子程序是否需要每次都赋初值??答案是在采用除定时器工作方式3外的其它方式外都需要重新赋值,这个问题在老师讲的相关练习课上得到解决。上机实验时出现了一个错误,提示在中断子程序中没有定义变量XX,怀疑是因为没有把XX定义为全局变量,而只在主函数voidmain()中定义,所以出错。改正程序后,程序正常运行,并观察到正确实验现象:LED等循环被点亮,时间间隔为0.5S。
本文标题:跑马灯1秒间隔闪烁---运用定时中断方法控制P1口亮灯实验
链接地址:https://www.777doc.com/doc-5426007 .html