您的当前位置:首页正文

单片机定时器

2020-05-05 来源:榕意旅游网


摘 要

定时器是MSC-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性。而定时器是单片机应用中解决某类复杂问题的最为有效的方法,因此其应用非常广泛。

本次课设是采用定时器0,工作方式2在伟福硬件仿真系统环境下设计程序控制外部流水灯。要求让8个流水灯循环点亮,每秒只有一个发光二极管点亮,发光的同时喇叭发出声响。我们采用P3.2口控制发光二极管和喇叭,P1.0——P1.7口接发光二极管,P3.1口接喇叭。

我们还对这次课设内容还进行了延展,利用八段数码显示管实验所提供的显示电路动态显示一行数据。在此次课程设计程序中,首先将十六进制转换为BCD码,然后将其转换为段码,用P1口控制其位码,P3口控制其段码,以此在LED显示器上显示。为了使不同的显示器同时显示,每一时刻使一位显示器位选线选通,其他位关闭,然后送该位段码。适当选取延时时间,轮流选通LED显示器进行显示,从最低位开始显示的动态显示状态。

目录

引言 ……………………………………………………………… 3 设计任务 ………………………………………………………… 4 设计原理 ………………………………………………………… 4 程序设计 ………………………………………………………… 7 1、程序流程图 ………………………………………………… 7 2、程序代码 …………………………………………………… 8程序运行结果 ………………………………………………… 11 心得体会 …………………………………………………………12 参考文献 …………………………………………………………13

1

引 言

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本次课程设计就是用51单片机定时器控制流水灯和喇叭发声的实验,课设延展是利用动态显示法显示一行数据。这主要是软件编程,其次还有硬件电路。通过本实验可以进一步了解软件和硬件的切合点,从而初步了解智能控制过程,从而深入理解单片机原理。

本次课设是在老师的悉心指导和同学们的共同努力下得以顺利完成,借此机会向张老师表示感谢。最后由于我们的能力有限,课设中难免存在着疏漏及欠妥之处,恳请老师指正。

2

定时器流水灯设计

第一部分 设计任务 设计任务及要求

1、 设计目标

(1) 熟练运用汇编语言编程,并且掌握内部定时器中断技术。 (2) 熟悉伟福硬件仿真系统,熟练应用该系统调试软件。 (3) 熟悉单片机应用系统的组成,并能运用程序控制外部流水灯。 (4)了解数码管动态显示原理,使用总线方式控制数码管显示。 2、 设计要求

(1) 采用定时器0,方式2,定时100us时间,总时间1秒,每1秒让一个发

光二极管亮一次,发光二极管由P3.2口控制,同时控制喇叭,发光同时发声。

(2) 熟悉单片机应用系统的组成,并能运用程序控制外部流水灯。 (3) 利用八段数码显示管实验所提供的显示电路动态显示一行数据。 (4) 熟悉伟福硬件仿真系统,熟练应用该系统调试软件。

第二部分 设计原理

3

设计原理图(图一)

(1)定时器流水灯硬件控制

定时器流水灯主要要求是用定时器定时一秒,每一秒让一个灯亮,但是定时器T0方式2达不到一秒,只能用内循环和外循环俩个循环实现,每个循环都是100次,内外共计1000次,从而实现一秒定时,而且用P3.1口控制,用P3,2口产生脉冲使得喇叭每隔一秒发声,而且和LED灯的步骤一致。用循环左移一位来实现LED灯的每隔一秒亮一个的流水灯样。

(2)定时器T0初值的计算

方式2:M=28=256 fosc=12MHz

(M-X)*12/ fosc=100us ——> X=09CH

4

(3)七段数码管的字型代码表

显示字形 0 1 2 3 4 5 6 7 8 9 A B C D E F

(4)LED动态显示原理

动态显示电路的段码输出线是公用的。8段发光二极管数码显示器需8根线,由8051的一个I/O口控制。N位显示器需要N根位选线,由8051的令一个I/O口控制。共需要8+N根连线。

为了是不同的显示器同时显示,每一时刻使一位显示器位选线选通,其他位关闭,然后送该位段码。适当选取扫描频率,轮流选通LED显示器进行显示,使人感觉显示器是同时点亮。

运用查表法所编写的LED显示程序,能够实现所给任意数据的显示。我们首

5

g 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 f 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 e 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 d 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 c 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 b 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 a 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 段码 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 7fh 6fh 77h 7ch 39h 5eh 79h 71h

先把要显示的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。TAB标号处的数据表可以根据实现效果的要求任意修改。

第三部分 程序设计 一、 程序流程图

开 始 定时 100us 定时 1秒

是 判断是否等于 P3.11 否 产生脉冲并

给P1口赋值 LED灯灭 左 移 结束

定时器流水灯程序图(图二)

6

开 始 输出位选通信号 初始化显示参数 延时 关所有位显示 位选通信号移位 取显示数据 指向下一个显示数据 输出段码数据 6位完返 回 数码管显示流程图(图三)

二、程序代码

定时器程序代码 org 0000h ljmp main org 000bh ljmp next org 0100h main: mov a,#01h next4:mov r0,#64h next2:mov r1,#64h next1:mov sp,#60h mov p1,a mov tmod,#02h

7

mov th0,#9ch mov tl0,#9ch setb tr0 setb ea setb et0 next: djnz r1,next1 djnz r0,next2 cpl p3.1 setb p3.2 jnb p3.2,next3 rl a mov p1,a mov r2,a ljmp next4 next3:mov p1,#00h reti end

LED数码管显示程序 org 0000h ajmp main

org 0025h

main: a_bit equ 30h b_bit equ 31h c_bit equ 32h

temp equ 33h

star:

mov temp,#0

stlop:

8

acall display inc temp mov a,temp cjne a,#1000,next

mov temp,#0

next:

ljmp stlop

display: mov a,temp mov b,#100 div ab mov c_bit,a mov a,b mov b,#10 div ab mov b_bit,a mov a_bit,b mov dptr,#numtab

mov r0,#4

dpl1:mov r1,#250 dplop:mov a,a_bit movc a,@a+dptr mov p1,a setb p3.0 acall d1ms clr p3.0 mov a,b_bit movc a,@a+dptr

mov p1,a

9

setb p3.1 acall d1ms

clr p3.1 mov a,c_bit movc a,@a+dptr mov p1,a setb p3.2 acall d1ms clr p3.2 djnz r1,dplop

djnz r0,dpl1

d1ms:mov r2,#80 djnz r2,$

ret

numtab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh db 77h,7ch,39h,5eh,79h,71h

end

第四部分 设计运行结果

10

实验现象图1

实验现象图2

第五部分 心得体会

作为学习电子信息科学与技术的学生,用汇编语言编写程序设计是必需要掌握的知识内容,所以这学期我们用两周的时间来完成用汇编语言编写定时器系统的程序,具体的课设内容是采用定时器0,工作方式2,在伟福硬件仿真系统环境下,设计程序控制外部流水灯,要求让8个流水灯循环点亮,每秒只有一个发光二极管点亮,发光的同时喇叭发出声响。我们采用P3.2口控制发光二极管和喇叭,P1.0—P1.7口接发光二极管,P3.1口接喇叭。这就需要我们综合运用所学的单片机知识,通过具体仔细的分析来解决它,也是对我们实际动手能力进行训练的一个重要过程。

在设计的过程中难免会遇到过各种各样的问题,如该用哪些指令去实现我们所需要的功能,选好后又该如何将这些指令具体应用到程序中,这都是我们在设计过程中需要考虑的问题。所以我们这次课设的程序编写是分块完成的,即先伟福的条件下编写控制8个流水灯循环点亮的程序,然后再编写控制LED显示器从

11

1到F的依次显示,程序中应用了定时器控制的程序、BCD码转换成十进制码、子程序的调用以及查表指令等等。在思考这些问题的时候,我发现自己的不足之处,也学到很多以前上课时没怎么接触过的知识内容。

在短短两星期的日子里,我们从理论到实践的去完成它,虽然很累,但在我们组员不懈的努力与团结合作下我们终于完成了任务。我们在编写程序时,遇到不理解的知识就通过去图书馆查阅参考书或者通过网络查询弄明白,但由于时间和资料有限,更多的还是需要自己独立思考,当然团队的合作也是不可缺少的,在设计过程中经常会出现一些问题,但是和其他的同学讨论后,逐渐理解了此次设计的基本原理,最终编写出正确的程序,得到最终的答案。

总体来说,这次课程设计使我受益匪浅,它不仅培养了我的设计思维,也提高了我的个人实际操作能力,让我在体会程序设计艰辛的同时也体会到成功的喜悦。同时,我也感谢张老师,正是因为在张老师的辛勤指导下我们才能顺利完成此次的课程设计。

参考文献

1 伟福Lab6000系列单片机仿真使用说明书,南京伟福实业有限公司 2 李珍,单片机原理与应用技术,清华大学出版社,2003年

3 李建忠,单片机原理及应用,西安电子科技大学出版社,2008年 4 严 洁,单片机原理及其接口技术,机械工业出版社,2010年1月

12

因篇幅问题不能全部显示,请点此查看更多更全内容