单片机实验报告LED灯控制器.docx

上传人:b****3 文档编号:4936516 上传时间:2022-12-11 格式:DOCX 页数:14 大小:232.70KB
下载 相关 举报
单片机实验报告LED灯控制器.docx_第1页
第1页 / 共14页
单片机实验报告LED灯控制器.docx_第2页
第2页 / 共14页
单片机实验报告LED灯控制器.docx_第3页
第3页 / 共14页
单片机实验报告LED灯控制器.docx_第4页
第4页 / 共14页
单片机实验报告LED灯控制器.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机实验报告LED灯控制器.docx

《单片机实验报告LED灯控制器.docx》由会员分享,可在线阅读,更多相关《单片机实验报告LED灯控制器.docx(14页珍藏版)》请在冰豆网上搜索。

单片机实验报告LED灯控制器.docx

单片机实验报告LED灯控制器

《微机实验》报告

 

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:

MOVC,PSW.5;PSW.5为标志位,进定时器中断后置一

JNCLOOP3

代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。

为了减少代码长度,可以采用循环结构,循环主题中,将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.主程序流程图(含提高部分):

2.外部中断流程图

3.定时器中断流程图

 

五、源代码(含文件头说明、资源使用说明、语句行注释)

;*****************************************************************

;Filename:

LED灯闪烁.asm

;Decription:

LEDLED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s。

;在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。

按一次按钮,LED以

;2Hz频率闪动;按第二次以1Hz频率闪动;按第二次以0.5Hz频率闪动;

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

;式闪烁完)

;Designedby:

gxy

;Date:

2012.10.31

;*****************************************************************

$include(C8051F310.inc)

LEDBITP0.0;LED灯控制端口

BEEPBITP3.1;蜂鸣器控制端口

KINTBITP0.1;KINT按钮端口

ORG0000H;复位入口

LJMPMAIN

ORG0003H;外部中断0入口

LJMPT_KINT

ORG001BH;定时器1入口

LJMPTIME1

MAIN:

LCALLInit_Device;初始化配置

MOVR0,#00H

CLRLED;关led灯

CLRBEEP

CLRPSW.1;标志位1清零

CLRPSW.5;标志位2清零

SETBEA;允许总中断

SETBEX0;外部中断0允许

SETBIT0;下降沿延触发

MOVTMOD,#10H;置T1为定时方式1

SETBET1;定时器T1允许中断

;*****************************************************************

;外部中断返回处,选择模式

;*****************************************************************

CHOO:

CJNER0,#02H,LOOP;选择模式

LJMPCASE2;R0等于02H,跳转到模式2

LOOP:

JCCASE1;R0小于02H,跳转到模式1

LJMPCASE3;R0大于02H,跳转到模式3

;*****************************************************************

;模式1,2Hz闪烁10s

;*****************************************************************

CASE1:

MOVR1,#0C1H

MOVR2,#0B1H

MOVR7,#28H

LJMPSTART

;*****************************************************************

;模式2,1Hz闪烁10s

;*****************************************************************

CASE2:

MOVR1,#83H

MOVR2,#63H

MOVR7,#14H

LJMPSTART

;*****************************************************************

;模式3,0.5Hz闪烁10s

;*****************************************************************

CASE3:

MOVR1,#06H

MOVR2,#0C6H

MOVR7,#0AH

LJMPSTART

;*****************************************************************

;闪烁控制程序

;*****************************************************************

START:

LCALLVOICE;蜂鸣1s

MOVTH1,R1

MOVTL1,R2

MOVA,R7

BACK:

SETBTR1;开定时

LOOP1:

MOVC,PSW.5;等待中断,中断会置一标志位PSW.5

JNCLOOP1;中断结束,继续向下运行

CLRPSW.5;清零标志位

DJNZR7,BACK;循环,使闪烁达到10s

MOVC,PSW.1

JCTHERE;PSW.1为1则只执行一种模式跳转到THERE等待外

;部中断

CJNEA,#14H,LOOP2;顺序执行时,判断下一模式

LJMPCASE3;A=14H则跳转到模式3

LOOP2:

JCTHERE

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

 

THERE:

LCALLVOICE;蜂鸣1s

SJMP$;踏步,等待外部中断

;*****************************************************************

;蜂鸣器响1s

;*****************************************************************

VOICE:

SETBBEEP;开蜂鸣

MOVTH1,#06H

MOVTL1,#0C6H

CLRPSW.5

SETBTR1;开定时器1

LOOP3:

MOVC,PSW.5;等待中断

JNCLOOP3

CLRBEEP;关蜂鸣

RET

;*****************************************************************

;外部中断0

;*****************************************************************

T_KINT:

SETBPSW.1;标志位1置一,用于判断是否顺序执行三种模式

INCR0;R0加一,用于判断何种模式

CJNER0,#04H,K_RET

CLRPSW.1;R0到04H时清零标志位和R0

MOVR0,#00H

K_RET:

CLRTR1;关定时器1

POPSP

POPSP;出栈两次

MOVDPTR,#0036H;0036H为选择处地址

PUSHDPL;DPL压入栈顶

PUSHDPH;DPH压入栈顶

RETI;返回到知道位置

;*****************************************************************

;定时器1中断

;*****************************************************************

TIME1:

MOVTH1,R1

MOVTL1,R2;重新置数

SETBPSW.5;标志位置一

CLRTR1;关定时

CPLLED;LED取反

RETI

;*****************************************************************

;初始化配置

;*****************************************************************

PCA_Init:

;关闭看门狗

anlPCA0MD,#0BFh

movPCA0MD,#000h

ret

Timer_Init:

;定时器1初始化配置

movTMOD,#010h

movCKCON,#002h

ret

Port_IO_Init:

;端口初始化配置

movXBR1,#040h

ret

Interrupts_Init:

;中断初始化配置

movIE,#009h

ret

Init_Device:

lcallPCA_Init

lcallTimer_Init

lcallPort_IO_Init

lcallInterrupts_Init

ret

END

六、程序测试方法与结果、软件性能分析

1、软件调试总体界面:

2、定时器1测试

软件调试时

利用标志位用LOOP1:

MOVC,PSW.5

JNCLOOP1

语句,可以在中断返回后,在中断处继续向下执行代码

硬件调试时,可以顺序以2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s,并且蜂鸣器鸣叫1s正常

3、定时循环代码测试:

例如执行模式1定时0.25s,要循环40次才能跳出

一次循环后R7为27H

开始时,R7为28H

 

跳出循环时,R7为0

所以,定时循环程序正常

4、外部中断测试

如图,软件调试时,进入中断程序执行到RETI后,DPTR被赋为0036H,pc在00ACH处

再执行一步

Pc在0036H处,返回到了指定位置。

所以,这说明不管程序运行到了哪里,只要按下KINT键,就会返回到指定位置,选择下一种模式运行。

ProgramSize:

data=8.0xdata=0code=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端口的理解,通过编写代码,我们也掌握了定时/计数器、中断的应用编程技术。

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1