单片机课程设计(论文)-马拉松比赛计时器设计.doc_第1页
单片机课程设计(论文)-马拉松比赛计时器设计.doc_第2页
单片机课程设计(论文)-马拉松比赛计时器设计.doc_第3页
单片机课程设计(论文)-马拉松比赛计时器设计.doc_第4页
单片机课程设计(论文)-马拉松比赛计时器设计.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

马拉松比赛计时器设计一. 设计目的 掌握单片机定时器/计数器的使用方法 掌握单片机中断服务程序的应用 熟悉单片机外围数码管显示电路的设计方法二. 相关知识1. 定时器/计数器定时器/计数器简称定时器,其作用主要用于产生各种时间间隔,记录外部脉冲与事件的数量等,是微机中最常用的部件之一。89c51单片机有2个16位的定时器/计数器o(to)和定时器1(t1)。to由2个定时寄存器tho和tlo构成,t1则由th1和tl1构成,他们都分别映射在特殊功能计数器中,从而可以通过对特殊功能寄存器的读/写来实现对这两个定时器的操作。作为定时器。每个机器周期定时寄存器自动加1.,所以定时器也可看成是计量机器周期的计数器。由于每个机器周帏12个时钟振荡周期,所以定时的分辨率是时钟振荡频率的1/12。作为计数器,只要在单片机外部引脚to(ti)有从1到0电平的负跳变,计数器就自动加1。计数的最高频率一般为振荡频率的1/24,例如,选用12mhz晶振,则最高技术频率为0.5mhz。2. 中端系统 当中央处理器cpu正在执行某程序时,由于某种原因,外界向cpu发出暂停目前工作去处理更重要事情的请求,程序被打断;cpu响应改请求并转入响应的处理程序,处理程序完成以后,再返回原来程序被打断的位置,继续原来的工作,这一过程成为中断。实现中断功能的部件称为中断系统,或者称为中断控制逻辑系统。 89c52单片机的中断系统简单实用。其基本特点是:有6个固定的可屏蔽中断源,4个在片内,2个在片外,他们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;6个中断源有两个优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的编程。 若某个中断源通过编程设置,处于被打开的状态,并满足中断响应的条件,而且满足如下3个条件时,单片机响应此中断: 当前正在执行的那条指令已被执行完。 不在操作ie,ip中断控制寄存器或执行reti中断指令在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器中期终端的到响应后,自动清除中断请求标志(对串行i/o端口的中断标志,要用软件清除),将断点即计数器之值(pc)压入堆栈(已被灰复用);然后把相应的中断入口地址装入pc,使程序转入相应的中断服务程序中去执行。各个中断源在程序存储器中的中断入口地址如表1-1所示 表1-1 89c52单片机中断入口地址表中断源入口地址into(外部中断0)0003htfo(to中断)000bhint1(外部中断1)0013htf1(t1中断)001bhri/ti(串行口中断)0023htf2(t2中断)002bh各个中断入口地址相隔很近,不便于存放各个较长的中断服务程序,故通常将中断服务程序存放在另外方便存放的地方,而在中断入口地址开始的二三个单元中,安排一条转移类指令,以转入中方端服务程序。由于6个中断源各有其中断请求标志ieo,tfo,ie1,ri/ti以及tf2,在中断源满足中断请求的条件下,个标志自动加1,向cpu请求中断。如果某个中断源提出中断请求后,cpu不能立即响应,只要该中断请求标志不被软件人为清除,中断请求的状态就将一直保持,直到cpu响应此中断为止。对串行口中断而言,这一过程与其他五个中断的不同之处在于,及时cpu响应了中断,其中断标志ri/ti也不会自动清零,必须在中断服务程序中设置清除ri/ti的指令后,才有可能再一次提出中断请求。cpu的现场保护和恢复必须有由被响应的中断服务程序去执行,当执行ri/ti中断返回指令后,断点值自动从栈顶2字节弹出并装入pc寄存器,使cpu继续执行被打断的程序。三. 设计任务利用单片机内部定时器to实现时、分、秒计时且在6个数码管上同时显示时、分、秒计时时间,并能通过按键对时间进行重新设置四. 设计方案 1,.系统硬件电路设计系统硬件电路设计原理图1-1所示 图1-1 计时电路结构框图图1-12系统软件设计(1) 主程序(start) 在主程序中只完成系统的初始化,同时进行时分秒按键的扫描。如果有按键按下,则做相应时分秒计数数据的加1处理。主程序执行流程图按图1-2所示(2)定时器中端服务程序(timero) 定时器to用于时间计时。定时计数个数为5000,由于采用12mhz晶体振荡器,所以定时溢出中断周期为5000微秒=5毫秒。为了保证计时的准确性,进入中断服务程序时应立即重设计数初始值。在中断程序中还要判断是否计时1s,若是,还应通过调用其他子程序作时分秒值的相应处理。(3) 显示子程序(disp) 该子程序通过在中断服务程序中被调用而执行。每一次中断程序调用一次,其作用是根据扫描指针循环驱动各个数码管。(4) 时钟调整子程序(clk_change) 当中断程序中判断出计时1s时,该程序即被调用执行。其作用为将秒的计数初值加1,同时判断是否应对十分作相应的修改。(5) 数据转换子程序(covert) 当中断程序中判断出计时1s时,该程序及被调用执行。由于时分秒的计数值分别保存在一个字节里,而每一个计数值实际是一个2位的十进制数。在驱动显示时必须将这个2位数拆开以分别去扫描个位和十位,该子程序就是完成这个的,并把拆分结果存储在从20h开始的显示寄存器单元里。(6) 延时子程序(delay) 用于键盘的延时去斗五. 程序清单 org 0000h ;复位起始地址 ajmp start ;跳转至主程序 org 000bh ;timero中断矢量地址 ajmp timero ;跳转至to中断子程序timerostart: mov so,#6fh ;设置堆栈从6fh开始 mov 30h,#00h ;显示位码寄存器处置为00 mov 2ah,#00h ;“时” 寄存器初值为00h mov 2bh,#00h ;“分” 寄存器初值为00h mov 2ch,#00h ;“秒” 寄存器初值为000h mov tmod,#01h ;设to为工作方式1,即16位定时 ;器 mov tho,#oech ;计时器计时中断时间为5000微秒 mov tlo,78h mov ie,#82h ;to中断使能总的中断使能 mov r4,#200 ;5000微秒中断200次,实现计时 ;1s功能 setb tro ;启动定时器to;loop段为主程序中用于循环地扫描按键以检测外界输入对时分秒的设置和修改loop: jb p0.0,next2 ;p0.0(秒值修改键)是否被按下? ;不是,则跳至next2检查po.1 acall delay ;去抖动 jb po.o,next2;po.o ;po.o(秒值修改键)不是真正被 ;按下则跳转至next2检查po.1 main: jnb po.o,next1 ;po.0(秒值修改键)是否放开? mov a,2ch ;将秒寄存器的值放入a add a#01 ;a的内容加1 da a ;十进制调整 mov 2ch,a ;将a的值放回秒寄存器 cjne a,#60h,next2 ;是否等于60秒?不是,则跳至 ;next2 mov 2ch,#00 ;是则重新设置秒寄存器的值为 ;00next2: jb po.1,next4 ;po.1(分值修改键)是否被按下? ;不是则跳至next4检查po.2 acall delay ;去抖动 jb po.1,next4 ;po.1(分值修改键)不是真正被 ;按下,则跳转至next4检查 ;po.2next3: jnb po.1,next3 ;(分值修改键)是否已放开? mov a,2bh ;将分寄存器的值修改,类同秒 ;的处理 add a,#01 ; da a mov 2bh,a cjne a,#60h,next4 ;是否等于60分?不是,则跳 ;转至;next4 mov 2bh,#00 ;是,则重新设置分寄存器的 ;值为00next4: jb po.2,loop ;po.2(时值修改键)是否被按 ;下?不是,;则跳转至loop acall delay ;去抖动 jb po.2,loop ;po.2(时值修改键)不是真正 ;被按下,则跳转至loop重 ;复检查 next5: jnb po.2,next5 ;po.2(时值修改键)是否已放 ;开? mov a,2ah ;将时寄存器的值修改,类同分 ;秒的处理 add a,#01h da a mov 2ah,a cjne ,#24h,loop ;是否等于24时?不是,则跳 ;至loop mov 2ah,#00 ;是,则重新设置时寄存器的 ;值为00 ajmp loop;to中断子程序。每5000微秒中断一次,在该子程序 中判断是否1秒计时到,并做相应调;整和处理(clk_change子程序和convert子程序),同时实现每5000微秒的显示;更新timero: mov tho,#oech ;重设定时器中断计时5000 ;微秒 mov tlo,#78h push acc ;保留现场的值 push psw djnz r4,timlp1 ;计时1s到否?不到1s,则 ;跳转至;timlp1 mov r4,#200 acall clk_change ;调用计时子程序clk_change acall convert ;调用数码转换及存储convert ;子程序timlp1: acall disp ;调用显示子程序disp pop psw ;恢复现场的值 pop acc reti;disp子程序实现时分秒计时值在数码管上的输出驱动显示。每一次调用(相隔5000微秒);只驱动显示6个数码管中的一个disp mov a,30h ;扫描显示位码载入a add a,#20h ;扫描显示位码作为偏移量, ;再加上显示缓冲区首地址 ;20h,得待显示数据的实际 mov r1,a ;存入扫描显示位指针r1 mov a,30h ;扫描显示位码载入a swap a ;a中低四位交换到高四位(p1 ;高四位显示位码,低四位显 ;示数据值) orl a,r1 ;得“显示位码-显示段码“ mov p1,a ;输出至p1显示 inc 30h ;扫面偏移量指针加1 mov a,30h cjne a,#6,dspend ;扫描显示完否?不是,则跳 ;至dspend mov 30h,#0 ;是,则扫描显示位偏移量置 ;为0dspend:ret ;clk_change子程序为计时1s到各时分秒数据的处理程序clk_change: mov a,2ch ;2ch单元为秒寄存器 add a,#1 ;加1秒 da a ;十进制调整 mov 2ch,a ;存入秒寄存器 cjne a,#60,clkend ;是否超过60秒?不是, ;则跳至clkend mov 2ch,#00 ;是,则重设为00 mov a,2bh ;2bh单元为分寄存器, ;其处理类同秒处理 add a,#1 da a mov bh,a cjne a,#60,clkend ;是否超过60分?不是, ;则跳至clkendmov 2bh,#00 ;是,则重设为00 mov a,2ah ;2ah单元为时寄存器,其 ;处理类同秒分处理 add a,#1 da a mov 2ah,a cjne a,#24,clkend ;是否超过24时?不是, ;则跳至clkend mov 2ah,#00 ;是,则重设为00clkend:ret;convert子程序实现时分秒计时值转换为bcd码并存储在以20h为起始地址的显示;输出数据存储在单元里,即显示缓冲区20h至25h单元convert: mov r1,#20 ;送显示缓冲区首地址值 ;到r1指针 mov a,2ch ;将秒寄存器的内容存入 ;a anl a,#ofh ;取秒值的个位,并存入 ;20h单元 mov r1,a inc r1 ;目标地址指针修改 mov a,2ch ;将秒寄存器的内容存入a anl a,#0f0h ;取秒值的十位,并存入 ;21h单元 swap a mov r1,a inc r1 ;目标地址指针修 ;改 mov a,2bh ;分值的处理,类似 ;于秒的处理 anl a,#0fh mov r1,a inc r1 mov a,2bh anl a,#0f0h swap a mov r1。a inc r1 mov a,2ah ;时值的处理,类似 ;于分秒的处理 anl a,#0fh mov r1,a inc r1 mov a,2ah anl a,#0f0h swap a mov r1,a retdelay: mov r6,#10 ; 延时约5ms(以 ;晶振为12mhz计) d1: mov r7,#250 djnz r7,$ djnz r6,d1 ret end 六心得体会:通过本次单片机课程设计的锻炼,让我深刻的了解到了单片机技术在日常生活中所扮演的角色以及其在高科技领域所占有的地位,其次是单片机作为我们生活中比较常见的东西他给我们带来了很多方便,学好单片机不仅仅是对自己科学文化知识的提高,更是对这个世界上更多深奥的东西的爱好,激发了我对一些事物的好奇之心,更是提高了我的积极动手能力和实践能力,充实了我的生活,开阔了我的世界,让我领略了科技的无穷。虽然本次课程设计都是从网上和图书馆的一些资料上积累的,但是我还是非常开心,因为这是我自己从前辈们的身上学到的知识,感谢我身边在这次设计中给我提供帮助的老师和同学,也感谢提供这些设计材料的人士!我会在此基础上更加努力学习,为将来的道路造一盏指明灯!七参考文献 片机系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论