单片机实验报告——LED灯控制器_第1页
单片机实验报告——LED灯控制器_第2页
单片机实验报告——LED灯控制器_第3页
单片机实验报告——LED灯控制器_第4页
单片机实验报告——LED灯控制器_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机实验报告led灯控制器指导教师: 专业班级 :姓名:学号: 联系方式:一、 任务要求 实验目的:加深对定时/计数器、中断、io端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。实验内容:利用c8051f310单片机设计一个led灯控制器主要功能和技术指标要求:1. led灯外接于p0.0端。2. led灯分别按2hz,1hz和0.5hz三种不同频率闪动,各持续10s。3. 在led灯开始和停止闪烁时蜂鸣器分别鸣响1次。4. 利用单片机内部定时器定时,要求采用中断方式。 提高要求:使用按键(kint)控制led灯闪烁模式的切换。二、 设计思路c8051f310单片机片上晶

2、振为24.5mhz,采用8分频后为3.0625mhz ,输入时钟信号为48个机器周期,所以t1定时器采用定时方式1,单次定时最长可以达到的时间为1.027s,可以满足0.5hz是的定时要求。基础部分:给tmod赋值10h,即选用t1定时器采用定时方式1,三种频率对应的半周期时间为0.25s、0.5s、1s。计算得需给th1和tl1为c1h、b1h;83h、63h;06h、c6h。要使闪烁持续10s,三种模式需要各循环40、20、10次。用loop3:mov c,psw.5 ;psw.5为标志位,进定时器中断后置一jnc loop3 代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。为了

3、减少代码长度,可以采用循环结构,循环主题中,将r1、r2分别赋给th1、tl1,r7为循环次数(用djnz语句实现);定时中断里,重新给th1、tl1赋值时同理。这样,循环时只要把定时时间和循环次数赋给r1、r2、r7即可,达到减少代码长度的效果。蜂鸣器也采用t1定时方式1,定时一秒。提高部分: 采用外部中断0,下降沿触发。外部中断程序里置标志位psw.1和r0,psw.5用于判断执行完一种模式后,是否跳出循环结束。r0用于判断执行何种模式,每按一次后ro加一,第四次时就将r0和psw.5清零,这样程序就又回到了基础部分的循序执行。因为中断程序执行完后,会回到原来程序中断的地方,继续向下执行而

4、给程序运行带来诸多不便。所以,查看了reti语句的实现形式:将栈顶压入pch,pop后再将栈顶压入pcl,利用这个定义,只要将需要返回的地址压入pch和pcl就能返回到指定地址。三、 资源分配 p0.0:为led灯控制端口,高电平触发。p3.1:为蜂鸣器控制端口,高电平触发。p0.1:为kint键控制端口,下降沿触发。 r1、r2:用于存放计时器计时数据,r1赋给th1、r2赋给tl1。 r7:存放三种模式的循环次数。 r0:在外部中断程序中赋值,用于判断采用何种模式。 psw.1:为标志位,用于等待定时器中断,中断执行完清零,并在中断处向下继续执行程序。 psw.5:为标志位,用于判断执行一

5、种中断还是三种,在外部中断程序中改变。四、 流程图 1.主程序流程图(含提高部分):2.外部中断流程图3.定时器中断流程图五、 源代码 (含文件头说明、资源使用说明、语句行注释);*;filename: led灯闪烁.asm;decription: led led灯分别按2hz,1hz和0.5hz三种不同频率闪动,各持续10s。; 在led灯开始和停止闪烁时蜂鸣器分别鸣响1次。按一次按钮,led以; 2hz 频率闪动;按第二次以1hz频率闪动;按第二次以0.5hz频率闪动;; 第四次时又顺序执行三种模式(可以在任何时候按按钮,不必等上一模; 式闪烁完) ;designed by: gxy;da

6、te: 2012.10.31;*$include (c8051f310.inc)led bit p0.0 ;led灯控制端口beep bit p3.1 ;蜂鸣器控制端口kint bit p0.1 ;kint按钮端口org 0000h ;复位入口ljmp mainorg 0003h ;外部中断0入口ljmp t_kintorg 001bh ;定时器1入口ljmp time1main: lcall init_device ;初始化配置 mov r0,#00h clr led ;关led灯 clr beep clr psw.1 ;标志位1清零 clr psw.5 ;标志位2清零 setb ea ;允

7、许总中断 setb ex0 ;外部中断0允许 setb it0 ;下降沿延触发 mov tmod,#10h ;置t1为定时方式1 setb et1 ;定时器t1允许中断;*;外部中断返回处,选择模式;*choo: cjne r0,#02h,loop ;选择模式 ljmp case2 ;r0等于02h,跳转到模式2loop: jc case1 ;r0小于02h,跳转到模式1 ljmp case3 ;r0大于02h,跳转到模式3;*;模式1,2hz闪烁10s;*case1:mov r1,#0c1h mov r2,#0b1h mov r7,#28h ljmp start;*; 模式2,1hz闪烁10

8、s;*case2:mov r1,#83h mov r2,#63h mov r7,#14h ljmp start;*; 模式3,0.5hz闪烁10s;*case3:mov r1,#06h mov r2,#0c6h mov r7,#0ah ljmp start;*;闪烁控制程序;*start:lcall voice ;蜂鸣1s mov th1,r1 mov tl1,r2 mov a,r7back: setb tr1 ;开定时loop1:mov c,psw.5 ;等待中断,中断会置一标志位psw.5 jnc loop1 ;中断结束,继续向下运行 clr psw.5 ;清零标志位 djnz r7,ba

9、ck ;循环,使闪烁达到10s mov c,psw.1 jc there ; psw.1为1则只执行一种模式跳转到there等待外;部中断 cjne a,#14h,loop2 ;顺序执行时,判断下一模式 ljmp case3 ;a=14h则跳转到模式3loop2:jc there ljmp case2 ;a14h则跳转到模式2there:lcall voice ;蜂鸣1s sjmp $ ;踏步,等待外部中断;*;蜂鸣器响1s;*voice:setb beep ;开蜂鸣 mov th1,#06h mov tl1,#0c6h clr psw.5 setb tr1 ;开定时器1loop3:mov c

10、,psw.5 ;等待中断 jnc loop3 clr beep ;关蜂鸣 ret;*;外部中断0;*t_kint:setb psw.1 ;标志位1置一,用于判断是否顺序执行三种模式 inc r0 ;r0加一,用于判断何种模式 cjne r0,#04h,k_ret clr psw.1 ;r0到04h时清零标志位和r0 mov r0,#00hk_ret: clr tr1 ;关定时器1 pop sp pop sp ;出栈两次 mov dptr,#0036h ;0036h为选择处地址 push dpl ;dpl压入栈顶 push dph ;dph压入栈顶 reti ;返回到知道位置;*;定时器1中断;

11、*time1: mov th1,r1 mov tl1,r2 ;重新置数 setb psw.5 ;标志位置一 clr tr1 ;关定时 cpl led ;led取反 reti;*;初始化配置;*pca_init: ;关闭看门狗 anl pca0md, #0bfh mov pca0md, #000h rettimer_init: ;定时器1初始化配置 mov tmod, #010h mov ckcon, #002h retport_io_init: ;端口初始化配置 mov xbr1, #040h retinterrupts_init: ;中断初始化配置 mov ie, #009h retinit

12、_device: lcall pca_init lcall timer_init lcall port_io_init lcall interrupts_init retend 六、 程序测试方法与结果、软件性能分析1 、软件调试总体界面:2 、定时器1测试 软件调试时 利用标志位用loop1:mov c,psw.5 jnc loop1语句,可以在中断返回后,在中断处继续向下执行代码硬件调试时,可以顺序以2hz,1hz和0.5hz三种不同频率闪动,各持续10s,并且蜂鸣器鸣叫1s正常3、定时循环代码测试:例如执行模式1定时0.25s,要循环40次才能跳出一次循环后r7为27h开始时,r7为28

13、h跳出循环时,r7为0所以,定时循环程序正常4、外部中断测试 如图,软件调试时,进入中断程序执行到reti后,dptr被赋为0036h,pc在00ach处再执行一步pc在0036h处,返回到了指定位置。所以,这说明不管程序运行到了哪里,只要按下kint键,就会返回到指定位置,选择下一种模式运行。program size: data=8.0 xdata=0 code=219代码利用合理空行和注释,不仅在视觉上美化了,而且让各个子段程序的功能一目了然,方便调试和检错硬件调试时,在c8051f310单片机开发板上跑代码:不按kint键时,led灯以2hz,1hz和0.5hz三种不同频率闪动,各持续1

14、0s,在开始、结束和切换模式时,蜂鸣器都响1s,按下一次时,led灯以2hz闪烁10s后结束;按下两次时,led灯以1hz闪烁10s后结束;按下三次时,led灯以0.5hz闪烁10s后结束;当按下第四次时,又切换回顺序执行三种模式,在上述过程,蜂鸣器君鸣叫正常。综上:此次程序,运行正常,很好的完成了要求的基础部分和提高部分七、 思考题.若想实现3种闪耀方式的持续时间在5s-20s范围内可调,且每种方式的持续时间各不相同,应如何设计程序? 答: 三种闪烁方式利用定时器执行,定时时间为0.25s、0.5s、1s 通过循环次数来控制持续时间,所以只要改变循环次数,就能改变持续时间(初始持续时间可设为10s)可以利用矩阵键盘来实现,通过键值扫描程序来判断按下了什么键,再通过键值处理来执行按键的功能可以设置 +键、-键、和输入键按下+键,寄存器如r5加一;按下-键,寄存器如r5减一再按输入键后,模式1循环次数加4* r5;模式1循环次数加2* r5;模式1循环次数加1* r5,再执行程序来达到改变持续时间的功能。八、 实验小结通过本实验,我们一方面熟悉

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论