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

下载本文档

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

文档简介

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

2、要求: 使用按键(kint)控制 led 灯闪烁模式的切换。 二、 设计思路 c8051f310 单片机片上晶振为 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 次

3、。 用 loop3:mov c,psw、5 ;psw、5 为标志位,进定时器中断后置一 jnc loop3 代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。 为了减少代码长度,可以采用循环结构,循环主题中,将 r1、r2 分别赋给 th1、tl1,r7 为循环次数(用 djnz 语句实现);定时中断里,重新给 th1、tl1 赋值时同理。这样,循环时只要把定时时间与循环次数赋给 r1、r2、r7 即可,达到减少代码长度的效果。 蜂鸣器也采用 t1 定时方式 1,定时一秒。 提高部分: : 采用外部中断 0,下降沿触发。外部中断程序里置标志位 psw、1 与 r0,psw、5 用于判断

4、执行完一种模式后,就是否跳出循环结束。r0 用于判断执行何种模式,每按一次后 ro 加一,第四次时就将 r0 与 psw、5 清零,这样程序就又回到了基础部分的循序执行。 因为中断程序执行完后,会回到原来程序中断的地方,继续向下执行而给程序运行带来诸多不便。所以,查瞧了 reti 语句的实现形式:将栈顶压入 pch,pop 后再将栈顶压入 pcl ,利用这个定义,只要将需要返回的地址压入 pch 与 pcl 就能返回到指定地址。 三、 资源分配 p0、0:为 led 灯控制端口,高电平触发。 p3、1:为蜂鸣器控制端口,高电平触发。 p0、1:为 kint 键控制端口,下降沿触发。 r1、r2

5、:用于存放计时器计时数据,r1 赋给 th1、r2 赋给 tl1。 r7:存放三种模式的循环次数。 r0:在外部中断程序中赋值,用于判断采用何种模式。 psw、1:为标志位,用于等待定时器中断,中断执行完清零,并在中断处向下继续执行程序。 psw、5:为标志位,用于判断执行一种中断还就是三种,在外部中断程序中改变。 四、 流程图 1、主程序流程图(含提高部分): 开 开 始初 初 始 始 化允 允 许 许 外 外 部 部 中 中 断 0 , , 下 下 降 降 沿 沿 触 触 发允 允 许 许 定 定 时 时 器 1 中 中 断 断 , , 定 定 时 时 方 方 式 1r0=02hr002h

6、r1 ¬ 0 0c1h r2 ¬0 0b1hr7 ¬2 28h r1 ¬8 83h r2 ¬6 63hr7 ¬ 1 14hr1 ¬0 06h r2 ¬0 0c6hr7 ¬0 0ahynnycase1 case2 case3蜂 蜂 鸣 1sth1 ¬r r1tl1 ¬r r2a ¬r r7开 开 定 定 时等 等 待 待 中 中 断r7 ¬r r7-1r7=0nypsw.1=0 a=14ha14h蜂 蜂 鸣 1s等 等 待 待 外 外 部 部 中 中 断ynnnyy

7、跳 跳 转 转 到 case2跳 跳 转 转 到 case3 2、外部中断流程图 kint 键 键 按 按 下psw.1 置 1r0 ¬r r0+1r0=04hpsw.1 清 清 零r0 清 清 零关 关 定 定 时 时 器 1pop 出 出 栈 栈 两 两 次dptr ¬0 0036hdpl 先 先 压 压 入 入 栈 栈 顶dph 再 再 压 压 入 入 栈 栈 顶返 返 回 回 主 主 程 程 序ny 3、定时器中断流程图 定 定 时 时 器 器 溢 溢 出触 触 发 发 中 中 断重 新 赋 值th1 ¬r r1tl1 ¬r r2标 标 志 志

8、位psw.1 置 置 一关 关 定 定 时led(p0.0) 取 取 反返 返 回 回 主 主 程 程 序 五、 源代码 (含文件头说明、资源使用说明、语句行解释) ;* ;: led 灯闪烁、asm ;decription: led led 灯分别按 2hz,1hz 与 0、5hz 三种不同频率闪动,各持续 10s。 ; 在 led 灯开始与停止闪烁时蜂鸣器分别鸣响 1 次。按一次按钮,led 以 ; 2hz 频率闪动;按第二次以 1hz 频率闪动;按第二次以 0、5hz 频率闪动; ; 第四次时又顺序执行三种模式(可以在任何时候按按钮,不必等上一模 ; 式闪烁完) ;designed by

9、: gxy ;date: 2021、10、31 ;* $include (c8051f310、inc) led bit p0、0 ;led 灯控制端口 beep bit p3、1 ;蜂鸣器控制端口 kint bit p0、1 ;kint 按钮端口 org 0000h ;复位入口 ljmp main org 0003h ;外部中断 0 入口 ljmp t_kint org 001bh ;定时器 1 入口 ljmp time1 main: lcall init_device ;初始化配置 mov r0,#00h clr led ;关 led 灯 clr beep clr psw、1 ;标志位 1

10、清零 clr psw、5 ;标志位 2 清零 setb ea ;允许总中断 setb ex0 ;外部中断 0 允许 setb it0 ;下降沿延触发 mov tmod,#10h ;置 t1 为定时方式 1 setb et1 ;定时器 t1 允许中断 ;* ;外部中断返回处,选择模式 ;* choo: cjne r0,#02h,loop ;选择模式 ljmp case2 ;r0 等于 02h,跳转到模式 2 loop: jc case1 ;r0 小于 02h,跳转到模式 1 ljmp case3 ;r0 大于 02h,跳转到模式 3 ;* ;模式 1,2hz 闪烁 10s ;* case1:mo

11、v r1,#0c1h mov r2,#0b1h mov r7,#28h ljmp start ;* ; 模式 2,1hz 闪烁 10s ;* 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,r7 back: setb tr1 ;开定时 loop1:

12、mov c,psw、5 ;等待中断,中断会置一标志位 psw、5 jnc loop1 ;中断结束,继续向下运行 clr psw、5 ;清零标志位 djnz r7,back ;循环,使闪烁达到 10s mov c,psw、1 jc there ; psw、1 为 1 则只执行一种模式跳转到 there 等待外 ;部中断 cjne a,#14h,loop2 ;顺序执行时,判断下一模式 ljmp case3 ;a=14h 则跳转到模式 3 loop2:jc there ljmp case2 ;a14h 则跳转到模式 2 there:lcall voice ;蜂鸣 1s sjmp $ ;踏步,等待外部

13、中断 ;* ;蜂鸣器响 1s ;* voice:setb beep ;开蜂鸣 mov th1,#06h mov tl1,#0c6h clr psw、5 setb tr1 ;开定时器 1 loop3:mov c,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,#00h k_ret: clr t

14、r1 ;关定时器 1 pop sp pop sp ;出栈两次 mov dptr,#0036h ;0036h 为选择处地址 push dpl ;dpl 压入栈顶 push dph ;dph 压入栈顶 reti ;返回到知道位置 ;* ;定时器 1 中断 ;* time1: mov th1,r1 mov tl1,r2 ;重新置数 setb psw、5 ;标志位置一 clr tr1 ;关定时 cpl led ;led 取反 reti ;* ;初始化配置 ;* pca_init: ;关闭瞧门狗 anl pca0md, #0bfh mov pca0md, #000h ret timer_init: ;定

15、时器 1 初始化配置 mov tmod, #010h mov ckcon, #002h ret port_io_init: ;端口初始化配置 mov xbr1, #040h ret interrupts_init: ;中断初始化配置 mov ie, #009h ret init_device: lcall pca_init lcall timer_init lcall port_io_init lcall interrupts_init ret end 六、 程序测试方法与结果、软件性能分析 1 、软件调试总体界面: 2 、定时器 1 测试 软件调试时 利用标志位用 loop1:mov c,p

16、sw、5 jnc loop1 语句,可以在中断返回后,在中断处继续向下执行代码 硬件调试时,可以顺序以 2hz,1hz 与 0、5hz 三种不同频率闪动,各持续 10s,并且蜂鸣器鸣叫 1s 正常 3、定时循环代码测试: 例如执行模式 1 定时 0、25s,要循环 40 次才能跳出 开始时,r7 为 28h 一次循环后 r7 为 27h 跳出循环时,r7 为 0 所以,定时循环程序正常 4、外部中断测试 如图,软件调试时,进入中断程序执行到 reti 后,dptr 被赋为 0036h,pc 在 00ach 处 再执行一步 pc 在 0036h 处,返回到了指定位置。所以,这说明不管程序运行到了

17、哪里,只要按下 kint 键,就会返回到指定位置,选择下一种模式运行。 program size: data=8、0 xdata=0 code=219 代码利用合理空行与解释,不仅在视觉上美化了,而且让各个子段程序的功能一目了然,方便调试与检错 硬件调试时,在 c8051f310 单片机开发板上跑代码: 不按 kint 键时,led 灯以 2hz,1hz 与 0、5hz 三种不同频率闪动,各持续 10s,在开始、结束与切换模式时,蜂鸣器都响 1s, 按下一次时,led 灯以 2hz 闪烁 10s 后结束; 按下两次时,led 灯以 1hz 闪烁 10s 后结束; 按下三次时,led 灯以 0、

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

温馨提示

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

评论

0/150

提交评论