单片机实验报告——LED灯控制器. 下载本文

内容发布更新时间 : 2024/5/19 1:57:03星期一 下面是文章的全部内容请认真阅读。

《微机实验》报告

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.主程序流程图(含提高部分):