首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 单片机实验报告——LED灯控制器,(2)

    时间:2020-09-03 11:36:29 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:单片机 控制器 实验

     《微机实验》报告

     LED 灯控制器

      指导教师:

     专业班级 : 姓名: 学号:

     联系方式:

     一、 任务要求

     实验目的:加深对定时/计数器、中断、IO 端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。

     实验内容:利用 C8051F310 单片机设计一个 LED 灯控制器 主要功能与技术指标要求: 1、 LED 灯外接于 P0、0 端。

     2、 LED 灯分别按 2Hz,1Hz 与 0、5Hz 三种不同频率闪动,各持续 10s。

     3、 在 LED 灯开始与停止闪烁时蜂鸣器分别鸣响 1 次。

     4、 利用单片机内部定时器定时,要求采用中断方式。

     提高要求: 使用按键(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 次。

     用 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 用于判断执行完一种模式后,就是否跳出循环结束。R0 用于判断执行何种模式,每按一次后 RO 加一,第四次时就将 R0 与 PSW、5 清零,这样程序就又回到了基础部分的循序执行。

     因为中断程序执行完后,会回到原来程序中断的地方,继续向下执行而给程序运行带来诸多不便。所以,查瞧了 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:为标志位,用于判断执行一种中断还就是三种,在外部中断程序中改变。

      四、 流程图

     1、主程序流程图(含提高部分):

     开 开 始初 初 始 始 化允 允 许 许 外 外 部 部 中 中 断 0 , , 下 下 降 降 沿 沿 触 触 发允 允 许 许 定 定 时 时 器 1 中 中 断 断 , , 定 定 时 时 方 方 式 1R0=02HR0>02HR1   0C1H

     R2  0B1HR7  28H R1  83H

     R2  63HR7   14HR1  06H

     R2  0C6HR7  0AHYNNYCASE1 CASE2 CASE3蜂 蜂 鸣 1sTH1  R1TL1  R2A  R7开 开 定 定 时等 等 待 待 中 中 断R7  R7-1R7=0NYPSW.1=0 A=14HA>14H蜂 蜂 鸣 1s等 等 待 待 外 外 部 部 中 中 断YNNNYY 跳 跳 转 转 到 case2跳 跳 转 转 到 case3

     2、外部中断流程图 KINT 键 键 按 按 下PSW.1 置 1R0  R0+1R0=04HPSW.1 清 清 零R0 清 清 零关 关 定 定 时 时 器 1POP 出 出 栈 栈 两 两 次DPTR  0036HDPL 先 先 压 压 入 入 栈 栈 顶DPH 再 再 压 压 入 入 栈 栈 顶返 返 回 回 主 主 程 程 序NY

     3、定时器中断流程图 定 定 时 时 器 器 溢 溢 出触 触 发 发 中 中 断重 新 赋 值TH1  R1TL1  R2标 标 志 志 位PSW.1 置 置 一关 关 定 定 时LED(P0.0) 取 取 反返 返 回 回 主 主 程 程 序

     五、 源代码 (含文件头说明、资源使用说明、语句行注释) ;***************************************************************** ;: LED 灯闪烁、asm ;Decription: LED LED 灯分别按 2Hz,1Hz 与 0、5Hz 三种不同频率闪动,各持续 10s。

     ;

     在 LED 灯开始与停止闪烁时蜂鸣器分别鸣响 1 次。按一次按钮,LED 以 ;

      2Hz 频率闪动;按第二次以 1Hz 频率闪动;按第二次以 0、5Hz 频率闪动; ;

     第四次时又顺序执行三种模式(可以在任何时候按按钮,不必等上一模 ;

      式闪烁完)

     ;Designed by: gxy ;Date:

      2012、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 清零

     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:MOV

     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: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

     ;A<14H 则跳转到模式 2

      THERE:LCALL VOICE

      ;蜂鸣 1s

      SJMP $

     ;踏步,等待外部中断 ;***************************************************************** ;蜂鸣器响 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 TR1

      ;关定时器 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:

     ;定时器 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,PSW、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 处,返回到了指定位置。所以,这说明不管程序运行到了哪里,只要按下 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、5Hz 闪烁 10s 后结束; 当按下第四次时,又切换回顺序执行三种模式, 在上述过程,蜂鸣器君鸣叫正常。

     综上:此次程序,运行正常,很好的完成了要求的基础部分与提高部分

     七、 思考题 、 若想实现 3 种闪耀方式的持续时间在 5s-20s 范围内可调,且每种方式的持续时间各不相同,应如何设计程序?

     答:

     三种闪烁方式利用定时器执行,定时时间为 0、25s、0、5s、1s

      通过循环次数来控制持续时间,所以只要改变循环次数,就能改变持续时间(初始持续时间可设为 10s) 可以利用矩阵键盘来实现,通过键值扫描程序来判断按下了什么键,再通过键值处理来执行按键的功能 可以设置 ‘+’键、‘-’键、与输入键 按下‘+’键,寄存器如 R5 加一;按下‘-’键,寄存器如 R5 减一 再按输入键后,模式 1 循环次数加 4* R5;模式 1 循环次数加 2* R5;模式 1 循环次数加 1* R5,再执行程序来达到改变持续时间的功能。

     八、 实验小结 通过本实验,我们一方面熟悉了 C8051F310 单片机开发板的结构、芯片间的连接方法,同时也掌握了简单的配置方法;另一方面,我们又加深对定时/计数器、中断、IO 端口的理解,通过编写代码,我们也掌握了定时/计数器、中断的应用编程技术。

     程序写完后,调试就是一定会出现很多问题,在软件调试时,我们一定要掌握利用断点来单步调试的方法,这样比较容易找出错误,而且节约大量时间,在代码量较多时,效果尤为明显。

     写代码时,一定要合理布局,及时写上注释,这样也避免写下面程序时出现错误,同时也方便调试时查错。

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识