三位倒计时器pic单片机课程设计(含全部汇编程序清单)(编辑修改稿)内容摘要:

DECFSZ COUNTER。 循环减 1,是否为 0 GOTO RT。 否,中断返回 DECF NUMB。 是,计数变量减 1 MOVLW .20。 循环数赋初值 20 MOVWF COUNTER RT MOVLW 3DH。 50 毫秒时间常数初值 MOVWF TMR0 movf status_temp,w。 retrieve copy of STATUS register movwf STATUS。 restore preisr STATUS register contents swapf w_temp,f swapf w_temp,w。 restore preisr W register contents retfie。 return from interrupt 主程序中有关部分为: BSF STATUS,RP0。 进入体 1 MOVLW 07H。 分频比为 1: 256 MOVWF OPTION_REG 三位倒计时器 15 倒计时显示子程序 基本的输入及辅助程序准备完毕,接下来是主体的显示程序。 前面提到过,显示程序分为两部分,前面一部分负责键盘的显示,这一部分负责计数变量变化时其显示的变化。 由前面的多个数转化为多位数的准备, 我们易知该子程序应该具有将多位数分解为多个数并分别送入各个位选显示的功能。 其分解子程序工作过程如下,除初值外,其他参数初值均为 0。 图 25 分解流程图 当送入的数值被分解之后,调用 3 位数码管显示子程序,实现 3 位数的动态扫描,当计时器计时时间到 1 秒之后,变量值减 1,分解子程序分解,送入显示,数码管显示三位数减 1,实现了 1 秒倒计时功能。 其子程序在总程序中可查,不再多说。 附加功能部分 为增加该倒计时器工作的灵活性,我们增加了一些比如暂停,继续,加一,减一,复位和归零后重新开始等附加功能。 三位倒计时器 16 暂停 和继续 倒计时的功能是通过 TMR0 定时器实现的,定时器时间到后显示变量减 1,因此,可通过控制定时器来实现暂停和继续功能。 控制定时器的中断开关是本节的关键。 图 26 中断控制流程图 程序代码:。 B 键,用于计数暂停 JIANB CALL SFANG。 释放 BCF INTCON,5。 T0 使能关闭,计数停止 RETURN。 C 键,用于计数继续 JIANC CALL SFANG。 释放 BSF INTCON,5。 T0 使能打开,计数继续 RETURN 三位倒计时器 17 计数功能 计数功能的实现是对计数变量的控制,运行过程中,变量加一实现显示加一,变量减一实现显示减一。 其程序如下:。 D 键,用于计数加一 JIAND CALL SFANG。 释放 INCF NUMB。 显示变量加一 RETURN。 E 键,用于计数减一 JIANE CALL SFANG。 释放 DECF NUMB。 显示变量减一 RETURN 复位和归零 所谓复位,是指该键按下后一切恢复初始状态,计时器可以重新工作。 其主要操作是 使定时器关闭,有关变量初始化,并跳转到按键大循环。 F 键,用于清零和重新开始 JIANF CALL SFANG。 调用释放子程序 BCF INTCON,5。 T0 使能关闭,停止计时 MOVLW 01H。 键盘次数判断恢复初始值 MOVWF KEYFLAG CLRF NUM9。 中间变量的初始化 CLRF NUM10 GOTO LOOP。 跳转至 LOOP 大循环 当倒计时为 0 后,指示灯和蜂鸣器发出警示,之后计时器恢复初始状态,可以重新工作。 它的原 理同复位相同,都是参数的初始化。 LIGHT BCF INTCON,5。 关闭 T0 使能,计时器停止工作 CALL SHANSHU。 调用小灯闪烁子程序 MOVLW 01H。 KEYFLAG 初始化 三位倒计时器 18 MOVWF KEYFLAG CLRF NUM9。 中间变量的初始化 CLRF NUM10 GOTO LOOP。 跳转至 LOOP 大循环,重新开始工作 结束提示 部分 当计时到 0 时,三色小灯各亮灭一次,且小灯亮起蜂鸣器响起,亮灯关闭蜂鸣器停止鸣叫。 图 27 提 醒子程序流程图 程序在主程序中可查,不再赘述。 程序部分总结 介绍完所有子程序的工作原理之后,还要将其有机的组合起来。 这里采用大循环的方式,不停地对程序进行扫描,当扫描到某一部分发现需要调用或跳转时会相应的调用或跳转至其他子程序。 这样就把以上所设计的子程序连接起来,组成一个整体。 三位倒计时器 19 第三章 实物照片 实验板照片 将元件按照电路设计图焊接完成后如下图: 图 31 焊接实物图 脱机运行照片 将程序烧写进实验板中,从键盘输入初值 123,按下开始键,开始倒计时,图为开始时、计时到 11计时到 116 时暂停 的照片。 三位倒计时器 20 图 32 键入初值显示 图 33 计时过程记录 图 34 计时过程中暂停 三位倒计时器 21 第四章 问题与体会 两周的单片机课程设计转瞬即逝,这两周是我感觉过的最快的两周。 因为每天大部分时间都用在设计上,而我们对单片机的设计还不够熟练,总是花上大量的时间弄明白一个小小的问题,有时一个错误会耽误上半天而无法发现,所以,当我们取得一点点进步之后才会发现已经过去了很长的时间。 这两周里我们体验了从焊板到编写程序,再到烧写、调试程序,最终完成我们的设计的艰辛历程。 回首整个过程,我会发 现自己的许多不足。 首先是对编程软件的使用不够熟练,刚开始编写程序常常不能够灵活的新建工程,添加文件,遇到意外问题也会不知所措,经过两天的熟悉之后,终于能够解决这些基本问题。 第二个问题是编程过程中经常出现理想思维,以为自己的思路能够走通但是调试之后才发现无法实现,经过无数遍的理顺之后才发现有些地方是明显的错误,有时是语言的使用错误,有时是思路的局限,然而经过不断的发现问题、解决问题我们的程序逐渐完善。 还有一个很严重的问题就是焊接问题,由于焊接的不够熟练,焊出的焊点不够圆润饱满,偶尔还会出现虚焊的情况。 另外,焊 接用的导线不够简洁,看起来比较混乱。 纵使有许多的不足与遗憾,这次课程设计我还是学到了很多的东西。 不仅复习了课本上所学的内容,还把理论付诸于实践,并使我们切身的体会到理论用于实践时会出现的各种问题,通过解决这些问题,我们处理实际问题的能力有了很大的提高。 通过这次课程设计我了解了电子设计的基本流程,熟练的掌握了编程软件和汇编语言的使用,同时锻炼了我的编程思维,让我在以后的编程过程中少走一些弯路。 学习到这些的同时,它也对我的心态起到了锻炼的作用,遇到问题时不能一味的抱怨,而是应该静下心来仔细的分析问题产生的原因 ,并且找到解决的办法。 它也让我意识到团队协作的重要性,在这次两周的设计过程中,我和我的队友密切协作才能够完成最终的结果。 这次课程设计提高了我们解决实际问题的能力,为我们积累了宝贵的实践经验。 相信这次 PIC 的单片机课程设计也促进了我能够触类旁通的能力,为其他类型的单片机设计甚至所有电子类设计打下了坚实的基础。 三位倒计时器 22 结论 本次设计实现了最初的设计要求,实际运行结果与理想一致,计时精准,使用简单。 能够灵敏的显示所要输入的数字,并能够精确的计时,有很广泛的应用前景,可以应用于跑步计时、辩论赛的计时等各种需要计时的比赛场合,有很强的现实意义。 但是该计时器局限于 255 秒以内的的计时,计时长度有限制;而且体积较大,线路较为复杂,不适合携带。 出于这些问题,只要时间足够,可以设置两个内存空间用于存放计时变量,且把数码管扩展为 4 位甚至更多,就能够实现多达 65535 秒的计时,当然实际生活中很少用到这么长时间的秒用计时。 对于后者,只要电路板的编排合理,就可以省去导线连接的步骤,而且能够实现各种形状的制作,有助于广大 使用者的喜爱。 三位倒计时器 23 参考 文献 1. 李荣正 . PIC 单片机原理及应用 [M]. 北京航空航天大学出版社 ,2020 2. 刘和平 .PIC16F887 单片机程序设计及应用 [M].北京航天航空大学出版社 ,2020 3. 王有绪 .单片机接口技术及应用系统设计 [M].高等教育出版社 ,2020 4. 李学海 .PIC 单片机实用教程 — 基础篇 [M]. 北京航天航空大学出版社 ,2020 5. 窦振中 .PIC 系列单片机原理和程序设计 [M].北京航空航天大学出版社 ,2020 三位倒计时器 24 附录:程序清单 list p=16f887。 list directive to define processor include。 processor specific variable definitions __CONFIG _CONFIG1,_LVP_OFFamp。 _IESO_OFFamp。 _BOR_OFFamp。 _PWRTE_ONamp。 _WDT_OFFamp。 _XT_OSC。 ***** VARIABLE DEFINITIONS w_temp EQU 0x71。 variable used for context saving status_temp EQU 0x72。 variable used for context saving BIAN EQU 0X40。 键盘显示中间变量 KEYFLAG EQU 0X43 NUM EQU 0X44 NUM4 EQU 0X48 NUMB EQU 0X49。 计数变量 GE EQU 0X50 SHI EQU 0X51 BAI EQU 0X52 SHANG EQU 0X53 YUSHU EQU 0X54 COUNTER EQU 0X55 NUM5 EQU 0X56 NUM6 EQU 0X57 NUM7 EQU 0X58 NUM8 EQU 0X59 NUM9 EQU 0X60 三位倒计时器 25 NUM10 EQU 0X61 NUM11 EQU 0X62。 ********************************************************************** ORG 0x000。 processor reset vector clrf PCLATH。 ensure page bits are cleared goto MAIN。 go to beginning of program ORG 0x004。 interrupt vector location movwf w_temp。 save off current W register contents movf STATUS,w。 move status register into W register movwf status_temp。 save off contents of STATUS register BCF INTCON,T0IF。 清 TMR0 溢出标志位 DECFSZ COUNTER。 循环减 1,是否为 0 GOTO RT。 否,中断返回 DECF NUMB。 是,计数变量减 1 MOVLW .20。 循环数赋初值 20 MOVWF COUNTER RT MOVLW 3DH。 50 毫秒时间常数初值 MOVWF TMR0。 isr code can go here or be located as a call subroutine elsewhere movf status_temp,w。 retrieve copy of STATUS register movwf STATUS。 restore preisr STATUS register contents。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。