单片机时钟报告Word格式文档下载.docx
《单片机时钟报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机时钟报告Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
通过编程可设定工作于某种方式。
四种工作方式为:
13位定时\计数器、16位定时\计数器、8位自动重置定时\计数器、两个8位定时\计数器(只有T0有)
(4)、每一个定时计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。
3.2中断系统
(1)、MCS-51单片机提供5个硬件中断源,2个外部中断源,2个定时计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。
(2)、MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。
中断允许寄存器IE的字节地址为A8H,可以进行位寻址。
系统复位时,中断允许寄存器IE的内容为00H,如果要开放某个中断源,则必须使IE中的总控置位和对应的中断允许位置“1”。
(3)、MCS-51单片机有5个中断源,为了处理方便,每个中断源有两级控制,高优先级和低优先级。
通过由内部的中断优先级寄存器IP来设置,中断优先级寄存器IP的字节地址为B8H,可以进行位寻址。
如果某位被置“1”,则对应的中断源被设为高优先级;
如果某位被清零,则对应的中断源被设为低优先级。
对于同级中断源,系统有默认的优先权顺序,从高到低优先权顺序为外部中断0、定时计数器T0中断、外部中断1、定时计数器T1中断、串行口中断。
通过设置中断优先级寄存器IP能够改变系统默认的优先级顺序。
3.24、MCS-51单片机响应中断的条件为:
中断源有请求且中断允许。
3.3键盘和LED数码管显示器
键盘是单片机应用系统中最常用的输入设备,在单片机应用系统中,操作人员一般都是通过键盘向单片机系统输入指令、地址和数据,实现简单的人机通信。
键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
键盘的结构形式一般有两种:
独立式键盘和矩阵式键盘。
矩阵式键盘的工作方式有3种:
查询工作方式、定时扫描工作方式和中断工作方式。
LED数码管显示器:
在单片机应用系统中,经常用到LED数码管作为显示输出设备,LED数码管显示器虽然显示信息简单,但它具有显示清晰、亮度高、使用电压低、寿命长、与单片机接口方便等特点,基本上能够满足单片机应用系统的需要,所以在单片机应用系统中经常用到。
LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。
在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种。
所谓译码方式是指由显示字符转换得到对应的字段码的方式。
对于LED数码管显示器,通常的译码方式有两种:
硬件译码方式和软件译码方式。
LED数码管在显示时,通常有两种显示方式:
静态显示方式和动态显示方式。
在使用时可以把它们组合起来。
在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。
4软件设计
电子时钟的软件系统由主程序和子程序组成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等。
4.1主程序
主程序执行流程如图1所示,主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
4.2.数码管显示模块
本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。
采用软件译码动态显示。
4.3.定时器/计数器T0中断服务程序
定时器/计数器T0用于时间计时。
选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;
分单元加到60则对时单元加1,同时分单元清0;
时单元加到24则对时单元清0,标志一天时间计满。
在对各单元计数的同时,把它们的值放到存储单元的指定位置。
定时器/计数器T0中断服务程序流程图如图2所示。
4.4按键处理模块
MCS-51单片机实现时钟计时显示的基本方法
①首先要计算计数初值
时钟计时的关键问题是秒的产生,因为秒是最小时钟单位,但使用MMCS-51的定时器/计数器进行定时,即使按工作方式1,其最大定时时间也只能达到131毫秒,离1秒还差好远。
为此,我们把秒计时用硬件定时和软件计数相结合的方法实现,即:
把定时器的定时时间定为125毫秒,这样当计数溢出8次就可得到1秒,而8次计数可用软件方法实现。
为得到125ms定时,我们可使用定时器/计数器0,以工作方式1进行,当设定单片机为6MHz晶振,设计数初值为X,则有如下等式:
(216-X)×
2us=125000us
计算得计数初值X=3036,二进制表示为0000101111001101,十六进制表示为0BCDH。
②定时器定时采用中断方式完成,以便于通过中断服务程序进行溢出次数(每次125毫秒)的累计,计满8次即得到秒计时。
③通过在程序中的数值累加和数值比较来实现从秒到分和从分到时的计时
④设置时钟显示及显示缓冲区
假定时钟时间在六位LED数码管(LED5~LED0)上进行显示(时、分、秒各占两位)。
为此,要在内部RAM中设置显示缓冲区,共6个单元(79H~7EH),与数码管的对应关系为:
LED5→7EH、LED4→7DH、LED3→7CH、LED2→7BH、LED1→7AH、LED0→79H。
即显示缓冲区从左向右依次存放时、分、秒的数值。
⑤假定已有LED显示程序为SMXS可供调用
程序流程
①主程序(MAIN)
主程序的主要功能是进行定时器/计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。
②中断服务程序(PIT0)
中断服务程序的主要功能是进行计时操作。
程序开始先判断计数溢出是否满了8次,不满8次表明还没达到最小计时单位秒,中断返回;
如满8次则表明已达到最小计时单位秒,程序继续向下执行,进行计时操作。
③加1子程序(DAAD1)
加1子程序用于完成对秒、分和时的加1操作,中断服务程序中在秒、分、时加1时共有三处调用此子程序。
加1操作共包括以下三项内容:
合数:
由于每位LED显示器对应一个8位的缓冲单元,因此由两位BCD码表示的时间值各占用一个缓冲单元,且只占其低4位。
为此在加1运算之前需把两个缓冲单元中存放的数值合并起来,构成一个字节,然后才能进行加1运算。
合字之说由此而来。
十进制调整:
对加1并进行十进制调整;
分数:
把加1后的时间值再拆分成两个字节,送回各自的缓冲单元中。
按键处理设置为:
如没有按键,则时钟正常走时。
当按下K0按键时,进入调分状态,时钟停止走动;
按K1可K2按键可进行加1或减1操作;
继续按K0键可分别进行分和小时的调整;
最后按K0键将退出调整状态,时钟开始计时运行。
流程图如下所示:
开始
显示单元清零
T0、T1设为16位计数模式
允许T0中断
调用显示子程序
进入功能程序
按下键否?
否
是
现场保护,重置初值
启动下一个50ms
50ms计数器加1
秒单元加1,50ms计数器清0,秒写入秒个位和秒十位
50ms计数器=20?
分单元加1,秒单元清0,分写入分个位和分十位
秒单元=60?
时单元加1,分单元清0,时写入时个位和时十位
分单元=60?
时单元清0
时单元=24?
中断返回
1、主程序流程图2、定时器/计数器T0中断服务程序流程图
5仿真分析
在ProteusISIS的80C51中载入程序生成的HEX文件,按开始符号运行,在数码管上观察程序运行结果,系统仿真结果如图5.1所示。
设计功能如下:
(1)、初始状态:
未按键之前,上电,数码显示00-00-00。
程序运行后,从秒针开始自动运行。
当秒数到59后,下一秒自动变为00,分针变为01,以此类推。
(2)、调整状态:
仿真运行过程中,按p0键,系统暂停,此时,继续按p0无效。
第三次按p0,又开始,如此循环。
(3)、设置状态:
按下p0暂停后,按p1,则时针加一,按下p2,则时针减一;
按两下p0,在按下p1,则分针加一,按下p2,则分针减一。
时间显示格式为:
时分秒;
误差分析:
实际程序到实验板中的电子钟显示存在一定的误差,误差来源可能为三个方面:
第一,在程序运行过程中,时钟周期的不精确导致机器周期与理论值存在一定的差别;
第二在中断一秒显示过程中,一些指令需要消耗一定的机器周期,使得一秒延时比实际要长;
第三在键抖动的反应程度在运行中比较慢。
5.1实例仿真
6课程设计总结
通过这次的课程设计我认识到我对单片机的知识学的太少了,对于书本上很多知识还不能灵活运用,都需要去巩固加强,我会在以后的学习中弥补我的不足。
我也了解了80C51集成环境和PROTEUS仿真软件的使用,用此软件练习电子时钟的设计,不仅使我熟悉了软件的使用方法,而且复习了单片机编程的相关知识。
在使用中,我体验到了单片机的神奇之处,也激发了我不少的兴趣,引领着我不断的探索单片机的未知世界。
本次的课程设计,我也学到了一些更重要的东西,那就是如何从理论到实践的转化,怎样将所学到的知识运用于实践。
大学的课堂只是在学习专业知识,而我们应当把所学的知识用到我们现实的生活中去。
此次的的电子时钟设计给我奠定了一个实践基础,我会在以后的学习生活中磨练自己,使自己变得更加优秀。
在本次的设计中,特别感谢张老师和王老师的指导,在老师的讲解和指导下,我成功的解决了设计中的许多问题,也使我知道了认真的重要性。
也感谢同学给我的帮助,没有他们的帮助,我一个人是无法完成的,他们让我明白了学问的真正含义。
参考文献
[1]戴梅萼,史嘉权编著.微型计算机技术及应用(第三版).北京:
清华大学出版社,2003
[2]周明德编著.微型计算机系统原理及应用(第四版).北京:
清华大学出版社,2002
[3]李顺增,吴国东,赵河明等.微机原理及接口技术.北京:
机械工业出版社,2006
[4]杨立新.微型计算机原理和应用[M].北京:
科学技术文献出版社,1986.11
[5]李大友.微型计算机原理[M].北京:
清华大学出版社,1998.7
[6]眭碧霞.微型计算机原理与组成[M].人民邮电出版社,2003.8
附录(源程序清单)
OUTBITEQU08002H;
位控制口
OUTSEGEQU08004H;
段控制口
INCEQU08001H;
键盘读入口
LEDBUFEQU60H;
显示缓冲
HOUREQU40H
MINUTEEQU41H
SECONDEQU42H
C100USEQU43H
TICKEQU10000
T100USEQU256-50
LJMPSTART
ORG000BH
T0INT:
PUSHPSW
PUSHACC
MOVA,C100US+1
JNZGOON
DECC100US
GOON:
DECC100US+1
MOVA,C100US
ORLA,C100US+1
JNZEXIT
MOVC100US,#HIGH(TICK)
MOVC100US+1,#lOW(TICK)
INCSECOND
MOVA,SECOND
CJNEA,#60,EXIT
MOVSECOND,#0
INCMINUTE
MOVA,MINUTE
MOVMINUTE,#0
INCHOUR
MOVA,HOUR
CJNEA,#24,EXIT
MOVHOUR,#0
EXIT:
POPACC
POPPSW
RETI
DELAY:
MOVR7,#0;
延时子程序
DELAULOOP:
DJNZR7,DELAYLOOP
DJNZR6,DELAYLOOP
RET
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6dH,7DH,07H;
八段管显示码
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DISPLAYLED:
MOVR0,#LEDBUF
MOVR1,#6;
共6个八段管
MOVR2,#00100000B;
从左边开始显示
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;
关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG
MOVX@DPTR,A
MOVA,R2
显示一位八段管
MOVR6,#1
CALLDELAY
MOVA,R2;
显示下一位
RRA
MOVR2,A
INCR0
DJNZR1,LOOP
RET
;
===============================================
TOLED:
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
RET
START:
MOVTMOD,#02H;
模式2,定时器
MOVTH0,#T100US
MOVTL0,#T100US
MOVIE,#10000010B;
EA=1,IT0=1
MOVC100US+1,#LOW(TICK)
SETBTR0;
启动定时器0
MLOOP:
MOVB,#10
DIVAB
CALLTOLED
MOVLEDBUF,A
MOVA,B
CALLToLED
ORLA,#80H
MOVLEDBUF+1,A
MOVB,#10
DIVAB
MOVLEDBuf+2,A
MOVLEDBuf+3,A
MOVLEDBuf+4,A
MOVLEDBuf+5,A
CALLDisplayLED
LJMPMLoop
END