方案、预案—--三位倒计时器pic单片机课程设计含全部汇编程序清单.doc
《方案、预案—--三位倒计时器pic单片机课程设计含全部汇编程序清单.doc》由会员分享,可在线阅读,更多相关《方案、预案—--三位倒计时器pic单片机课程设计含全部汇编程序清单.doc(45页珍藏版)》请在咨信网上搜索。
课程设计报告 课程名称:单片机原理与接口技术课程设计 设计题目: 三位倒计时器 院 系: 机电工程学院 班 级: 2012级电气工程及其自动化专业 姓 名: XXX 学 号: 2012XXXX 指导教师: XXXX 设计时间: 2014年X月X日 出勤 实物 报告 总分 I 目录 前言 1 第一章 设计方案 1 1.1 设计内容及要求 1 1.1.1 设计内容 1 1.1.2设计要求 1 1.1.3功能设计 2 1.2硬件设计 2 1.2.1 矩阵键盘电路设计 2 1.2.2数码管电路设计 3 1.2.3 LED及蜂鸣器电路设计 4 1.2.4单片机主电路设计 4 1.2.5上电电路的设计 5 1.2.6总电路图 5 1.3总体方案 6 第二章 软件设计 7 2.1 倒计时部分 7 2.1.1 键盘扫描子程序 8 2.1.2 0到9按键功能子程序和键盘显示子程序 9 2.1.3 一位转多位十进制子程序 12 2.1.4 TMR0中断服务子程序 13 2.1.5 倒计时显示子程序 15 2.2 附加功能部分 15 2.2.1 暂停和继续 16 2.2.2 计数功能 17 2.2.3 复位和归零 17 2.3 结束提示部分 18 2.4 程序部分总结 18 第三章 实物照片 19 3.1 实验板照片 19 3.2 脱机运行照片 19 第四章 问题与体会 21 结论 22 参考文献 23 附录:程序清单 24 三位倒计时器 前言 此次课程设计的内容为三位数的倒计时器的设计。目前倒计时器的发展已经相当先进,我做这次设计的主要目的是想更进一步了解基本电路的设计流程,以提高自己的设计理念,使自己的动手动脑能力有更进一步提高。通过解决现实生活中的问题,巩固和加深单片机课程中所学的理论知识和实验能力,加深对单片机软硬件知识的理解,以获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,能够提高自己的动手能力和设计能力,以培养自己的创新能力,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式有了更深层次的了解。 另外,倒计时器在生活中应用广泛,因此它的功能灵活性和精度的要求就更加显得重要。通过此次练习,我为自己设下了很多要求,力求此倒计时器的功能完美性和精度精细性,以加深自己对电子产品设计的认知。 第一章 设计方案 1.1 设计内容及要求 1.1.1 设计内容 本次设计的倒计时器需要由4*4矩阵键盘、3位数码管、LED小灯和蜂鸣器等有关输入输出器件组成,要求倒计时的初始值和控制按键均由键盘输入,数码管显示倒计时的时间,小灯和蜂鸣器负责终止提示。 因此,本次的设计内容包括硬件设计,流程框图及软件的编写与调试。 1.1.2设计要求 根据以上设计内容的介绍及我们的设计目的,总结出以下的设计要求: 1.能够实现255以内数的倒计时; 2.倒计时结束,报警提示; 3.通过按键设置倒计时的初始值; 4.精度为微秒级的计时; 5.具有“开始”、“暂停”、“继续”、“加一”、“减一”、“复位”等功能键; 6.计时结束具有重新开始的功能。 1.1.3功能设计 为实现使用的灵活性和计数的精准性,我们采用TMR0定时器计时,功能键包括计时开始、暂停、继续、加一、减一和复位。实现过程如下:当从键盘输入任意三位以内包括三位数,数码管显示输入数值,按下键A倒计时开始,按下键B倒计时暂停,按下键C倒计时继续;当发现计时过程中需要调整计时时,可以在暂停或非暂停情况下按下键D或键E实现计数加一和减一的功能。键F的主要功能为当计时需要停止和重新再来时,按下它,计时器重新工作。 当倒计时到0时,小灯立即闪烁,同时蜂鸣器鸣叫,小灯闪烁3次以后,倒计时器恢复初始状态,无需复位可以重新使用。 按键过程中为确保使用人员知道键是否按下,按下时蜂鸣器应该响起以示提醒。 1.2硬件设计 我们设计的倒计时器需要由键盘任意输入255以内三位数,并显示于数码管上,计时按钮及相关功能均由键盘键入,同时为保证键盘按下的准确性,加入按下蜂鸣器提示功能,计时结束需有小灯和蜂鸣器提醒。因此,设计电路图时必须涉及到键盘,4位数码管,蜂鸣器,LED小灯,同时上电电路和单片机控制电路为必须加入的。 1.2.1 矩阵键盘电路设计 一般键盘控制有4*4、5*5等类型方式,考虑到功能所需和单片机引脚的限制,我们采用4*4矩阵键盘。该键盘有4个输入端,4个输出端,我们习惯于把它连接在单片机的RC端口。因此,我们将RC的低四位与键盘的输入相连,高四位与输出相连,以实现键盘的正确扫描。 图1-1 键盘设计电路图 1.2.2数码管电路设计 数码管显示需送入位选和段选,我们所需为3位显示,采用4个数码管,因此需要将4个位选联入单片机中,同时还将有8条段选联入其中。习惯上,我们将段选接入RD的8个端口,4个位选接入RB的1到4位。 图1-2 数码管设计电路图 1.2.3 LED及蜂鸣器电路设计 蜂鸣器的设计就简单许多,只需将其一端接入高电平,另一端接入单片机,为保证其正常工作,接入100欧姆的电阻。接入单片机的一端我们可以设为RE5。 小灯同蜂鸣器相似,只需考虑接入的引脚,实验中我们接入3种颜色的小灯,其引脚分别连至单片机的RE端口的0、1、2位。 图1-3 LED及蜂鸣器电路连接图 1.2.4单片机主电路设计 本次设计采用的单片机为PIC16F887,其功能强大,应用灵活。在使用它进行工作的前提是对其基本的引脚进行分配,这里我们只考虑VCC和GND以及晶振的接入,晶振选择4MHz的晶振。其具体电路图如下: 图1-4 单片机接线图 1.2.5上电电路的设计 上电电路采用已有的设计好的电路,由USB接口供电,其电路图如下: 图1-5 上电电路 1.2.6总电路图 总电路图如下图1-6: 图1-6 总电路图 1.3总体方案 由以上设计可知,系统的硬件原理图如下所示: 图1-7 硬件原理图 设计时可采用模块化程序设计方法。模块划分时应遵循下述原则: 1.每个模块应具有独立的功能,能产生一个明确的结果; 2.模块之间的控制参数应尽量简单,数据参数应尽量少; 3.根据模块的划分原则,将该程序划分成6个模块,如图1-8所示。 主程序 键盘扫描模块 键盘显示模块 TMR0定时模块 动态显示模块 倒计时结束提示模块 附加功能模块 图1-8 程序模块 第二章 软件设计 基于硬件工作的软件部分的编写是通过汇编语言实现的。由以上分析可知,该部分大致包括键盘扫描,键盘显示,TMR0定时器,动态显示,结束提示和其他功能模块等六大部分,其中每大部分又包括不等的若干小部分,下面通过总体到局部的过程介绍它的工作原理。 2.1 倒计时部分 该软件由键入到倒计时的工作过程可由下面框图表示,此处省略了附加功能部分,只体现出其一般工作状态。 图2-1 倒计时器工作流程图 该流程图表示了软件工作的大体过程,具体的过程如下子章节。 2.1.1 键盘扫描子程序 键盘连接有4个输入端和4个输出端,输入端连在RC低四位,输出端连在RC高四位,先让低四位赋值低电平,若有键按下,高四位必有低电平出现,之后继续判断具体哪个键被按下。以RC0为0为例,若令RC0=0,即判断第一行是否有键按下,依次判断高四位是否为低电平,若为低电平,则该键被按下,转入相应功能子程序。 以RC0=0为例,框图如下: 图2-2 键盘扫描流程图 程序及注释如下: JIANPAN MOVLW 00H ;RC口低四位输出低电平 MOVWF PORTC MOVLW 0F0H ANDWF PORTC,W ;屏蔽低四位 SUBLW 0F0H BTFSC STATUS,Z ;判断高四位是否为全1 RETURN ;是,无键输入,返回继续判断 CALL DELAY10MS ;否,有可能有键输入,延时20毫秒 CALL DELAY10MS MOVLW 0F0H ;再判断一次是否键入 ANDWF PORTC,W SUBLW 0F0H BTFSC STATUS,Z RETURN ;虚假输入,返回 BCF PORTB,5 ;确实有键输入,蜂鸣器鸣叫 MOVLW 0FEH ;逐行判断哪个键输入,首先RC0=0 MOVWF PORTC BTFSS PORTC,4 ;判断键0 GOTO JIAN0 ;是,跳至键0功能子程序 BTFSS PORTC,5 ;判断键1 GOTO JIAN1 ;是,跳至键1功能子程序 BTFSS PORTC,6 ;判断键2 GOTO JIAN2 ;是,跳至键2功能子程序 BTFSS PORTC,7 ;判断键3 GOTO JIAN3 ;是,跳至键3功能子程序 2.1.2 0到9按键功能子程序和键盘显示子程序 0到9按键的主要作用是输入我们倒计时的初值,当这些按键按下时,会调用键盘显示子程序,将键入的数字通过数码管显示出来。为了判断按下的次数,设置变量KEFLAG,每调用一次键子程序变量左移一位,当需要显示时,只需判断KEFLAG的第几位为1,就可判断该键入的数字在数码管的哪一个位上显示。同时,键入的位数不同会调用不同的键盘显示子程序,我们设计的三位倒计时器有三个键盘显示子程序,当按下一个数时,调用XIANSHI1,为静态显示;当按下第二个数时,数码管动态扫描,显示两位数,就需要调用XIANSHI2,同理按下3位数调用3位显示子程序XIANSHI3。 0到9按键功能子程序的另一个作用就是将该按键的标号放入指定的变量带回,为之后的动态倒计时显示提供十进制转换所需的数字。 该子程序如下,以0到1为例: ;0到9按键,用于键入数字 JIAN0 CALL SFANG ;释放 MOVLW 00H ;将0放入W寄存器 MOVWF NUM8 ;NUM8带0返回 CALL CHABIAO ;调用查表子程序 MOVWF BIAN ;BIAN带0显示码返回 RLF KEYFLAG,1 ;键按下一次,KEYFLAG左移一位 RETURN JIAN1 CALL SFANG ;释放 MOVLW 01H ;将1放入W寄存器 MOVWF NUM8 ;NUM8带1返回 CALL CHABIAO ;调用查表子程序 MOVWF BIAN ;BIAN带1显示码返回 RLF KEYFLAG,1 ;键按下一次,KEYFLAG左移一位 RETURN 该倒计时器将键盘键入数字的显示和倒计时时数字的显示分开,即两者的显示不是在同一个显示子程序里。因此这里需要简要的介绍一下键盘显示子程。 左图展示了键的输入在数码管显示的具体流程,其核心便是三个显示子程序。 对于显示1子程序,由0到9按键功能子程序知,送到这里的变量为该按键的显示码值,由于为一位显示,只需将第一位位选打开,将码值送入,关闭位选即可。由于多位显示同样需要该位的码值,且新键入的变量相同,所以我们应将该码值备份两份,为多位显示做准备。 图2-3 选择第几个显示子程序 显示2子程序和显示3子程序与显示1子程序相似,只是送入两个数进行动态扫描。其程序代码及注释如下,这里以两位显示为例。 ;键盘显示2子程序,用于2位数的键入显示 XIANSHI2 BCF PORTB,1 ;个位位选打开 MOVF BIAN,W ;送入段选 MOVWF PORTD MOVWF NUM4 ;同时复制到NUM4,为3位显示所用 CALL DELAY ;延时 BSF PORTB,1 ;个位位选关闭 BCF PORTB,2 ;十位位选打开 MOVF NUM,W ;送入段选 MOVWF PORTD CALL DELAY ;延时 BSF PORTB,2 ;位选关闭 ;2个数组合成十进制两位数 MOVF NUM8,W ;将NUM8放入NUM6,为送数所用 MOVWF NUM6 MOVLW 00H ;十位是否为0 SUBWF NUM5,F BTFSS STATUS,Z CALL JIASHI1 ;否,调用加十1子程序 MOVF NUM9,W ;将NUM9与NUM6相加 ADDWF NUM6,W MOVWF NUMB ;放入显示变量里 RETURN ;加十1子程序 JIASHI1 MOVLW .10 ;NUM9加十 ADDWF NUM9,F DECF NUM5,F ;NUM5减1 BTFSS STATUS,Z ;判断是否为0 GOTO JIASHI1 ;否,继续加十 RETURN ;是,返回 2.1.3 一位转多位十进制子程序 由键盘显示子程序我们发现其后多出一个多个一位数转化为一个多位数的转化子程序,它的作用是,在键入之后将该多位数送入倒计时显示子程序开始倒计时,这是由倒计时显示子程序决定的,只要送入任意一个三位数,它都能够实现准确的显示。 该程序的原理是:首先判断键入几位数,最初键入的数在十位,十位还是百位,然后对其相应的加一百或时循环,最后把所有的转化之后的数加起来,实现多位数的转化。以三个数转化为三位数为例。现在已知NUM11为第一次键入的数,NUM6为第二次键入的数,NUM8为第三次键入的数,NUM10初值为0,其流程如下。 图2-4 多位数转化流程图 程序: ;进行三个数到十进制三位数的转换 MOVF NUM8,W ;将NUM8复制到MUM7 MOVWF NUM7 MOVLW 00H ;判断百位数是否为0 SUBWF NUM11,F BTFSS STATUS,Z CALL JIABAI ;不为0,调用加百子程序 MOVLW 00H ;为0,继续判断十位数是否为0 SUBWF NUM6,F BTFSS STATUS,Z CALL JIASHI2 ;不为0,调用加十2子程序 MOVF NUM10,W ;将个位数与NUM10相加 ADDWF NUM7,W MOVWF NUMB ;组成的数放入显示变量NUMB RETURN ;加百子程序 JIABAI MOVLW .100 ;NUM10加100 ADDWF NUM10,F DECF NUM11,F ;NUM11减1 BTFSS STATUS,Z ;判断是否为0 GOTO JIABAI ;不为0,返回加百 RETURN ;为0,返回 ;加十2子程序 JIASHI2 MOVLW .10 ;NUM10加10 ADDWF NUM10,F DECF NUM6,F ;NUM6减1 BTFSS STATUS,Z ;是否为0 GOTO JIASHI2 ;否,继续加十 RETURN ;是,返回 2.1.4 TMR0中断服务子程序 为实现精准定时,我们采用TMR0定时器,它能够实现精确到微秒的计时。但是TMR0定时器所能定时的最长时间为65毫秒,为实现1秒的定时,我们选择其定时50毫秒,循环20次的方法。由定时时间=分屏比*指令周期*(256-初值),我们能够算出当分频比为1:256时使其定时50毫秒时的初值为3DH,当TMR0送入初值时该计时器开始计时,当计时循环20次时计数变量减1,这就是它工作的基本原理。 有关TMR0的中断控制寄存器主要有OPTION_REG和INTCON,前者可以控制其分频比,后者用来控制中断的使能位,为使其正常工作,总中断和它的使能位必须同时打开。基于此原理,我们写出程序如下: 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 movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt 主程序中有关部分为: BSF STATUS,RP0 ;进入体1 MOVLW 07H ;分频比为1:256 MOVWF OPTION_REG 2.1.5 倒计时显示子程序 基本的输入及辅助程序准备完毕,接下来是主体的显示程序。前面提到过,显示程序分为两部分,前面一部分负责键盘的显示,这一部分负责计数变量变化时其显示的变化。由前面的多个数转化为多位数的准备,我们易知该子程序应该具有将多位数分解为多个数并分别送入各个位选显示的功能。其分解子程序工作过程如下,除初值外,其他参数初值均为0。 图2-5 分解流程图 当送入的数值被分解之后,调用3位数码管显示子程序,实现3位数的动态扫描,当计时器计时时间到1秒之后,变量值减1,分解子程序分解,送入显示,数码管显示三位数减1,实现了1秒倒计时功能。 其子程序在总程序中可查,不再多说。 2.2 附加功能部分 为增加该倒计时器工作的灵活性,我们增加了一些比如暂停,继续,加一,减一,复位和归零后重新开始等附加功能。 2.2.1 暂停和继续 倒计时的功能是通过TMR0定时器实现的,定时器时间到后显示变量减1,因此,可通过控制定时器来实现暂停和继续功能。控制定时器的中断开关是本节的关键。 图2-6 中断控制流程图 程序代码: ;B键,用于计数暂停 JIANB CALL SFANG ;释放 BCF INTCON,5 ;T0使能关闭,计数停止 RETURN ;C键,用于计数继续 JIANC CALL SFANG ;释放 BSF INTCON,5 ;T0使能打开,计数继续 RETURN 2.2.2 计数功能 计数功能的实现是对计数变量的控制,运行过程中,变量加一实现显示加一,变量减一实现显示减一。其程序如下: ;D键,用于计数加一 JIAND CALL SFANG ;释放 INCF NUMB ;显示变量加一 RETURN ;E键,用于计数减一 JIANE CALL SFANG ;释放 DECF NUMB ;显示变量减一 RETURN 2.2.3 复位和归零 所谓复位,是指该键按下后一切恢复初始状态,计时器可以重新工作。其主要操作是使定时器关闭,有关变量初始化,并跳转到按键大循环。 ;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初始化 MOVWF KEYFLAG CLRF NUM9 ;中间变量的初始化 CLRF NUM10 GOTO LOOP ;跳转至LOOP大循环,重新开始工作 2.3 结束提示部分 当计时到0时,三色小灯各亮灭一次,且小灯亮起蜂鸣器响起,亮灯关闭蜂鸣器停止鸣叫。 图2-7 提醒子程序流程图 程序在主程序中可查,不再赘述。 2.4 程序部分总结 介绍完所有子程序的工作原理之后,还要将其有机的组合起来。这里采用大循环的方式,不停地对程序进行扫描,当扫描到某一部分发现需要调用或跳转时会相应的调用或跳转至其他子程序。这样就把以上所设计的子程序连接起来,组成一个整体。 第三章 实物照片 3.1 实验板照片 将元件按照电路设计图焊接完成后如下图: 图3-1 焊接实物图 3.2 脱机运行照片 将程序烧写进实验板中,从键盘输入初值123,按下开始键,开始倒计时,图为开始时、计时到119、计时到116时暂停的照片。 图3-2 键入初值显示 图3-3 计时过程记录 图3-4 计时过程中暂停 第四章 问题与体会 两周的单片机课程设计转瞬即逝,这两周是我感觉过的最快的两周。因为每天大部分时间都用在设计上,而我们对单片机的设计还不够熟练,总是花上大量的时间弄明白一个小小的问题,有时一个错误会耽误上半天而无法发现,所以,当我们取得一点点进步之后才会发现已经过去了很长的时间。这两周里我们体验了从焊板到编写程序,再到烧写、调试程序,最终完成我们的设计的艰辛历程。 回首整个过程,我会发现自己的许多不足。首先是对编程软件的使用不够熟练,刚开始编写程序常常不能够灵活的新建工程,添加文件,遇到意外问题也会不知所措,经过两天的熟悉之后,终于能够解决这些基本问题。第二个问题是编程过程中经常出现理想思维,以为自己的思路能够走通但是调试之后才发现无法实现,经过无数遍的理顺之后才发现有些地方是明显的错误,有时是语言的使用错误,有时是思路的局限,然而经过不断的发现问题、解决问题我们的程序逐渐完善。还有一个很严重的问题就是焊接问题,由于焊接的不够熟练,焊出的焊点不够圆润饱满,偶尔还会出现虚焊的情况。另外,焊接用的导线不够简洁,看起来比较混乱。 纵使有许多的不足与遗憾,这次课程设计我还是学到了很多的东西。不仅复习了课本上所学的内容,还把理论付诸于实践,并使我们切身的体会到理论用于实践时会出现的各种问题,通过解决这些问题,我们处理实际问题的能力有了很大的提高。通过这次课程设计我了解了电子设计的基本流程,熟练的掌握了编程软件和汇编语言的使用,同时锻炼了我的编程思维,让我在以后的编程过程中少走一些弯路。学习到这些的同时,它也对我的心态起到了锻炼的作用,遇到问题时不能一味的抱怨,而是应该静下心来仔细的分析问题产生的原因,并且找到解决的办法。它也让我意识到团队协作的重要性,在这次两周的设计过程中,我和我的队友密切协作才能够完成最终的结果。 这次课程设计提高了我们解决实际问题的能力,为我们积累了宝贵的实践经验。相信这次PIC的单片机课程设计也促进了我能够触类旁通的能力,为其他类型的单片机设计甚至所有电子类设计打下了坚实的基础。 结论 本次设计实现了最初的设计要求,实际运行结果与理想一致,计时精准,使用简单。能够灵敏的显示所要输入的数字,并能够精确的计时,有很广泛的应用前景,可以应用于跑步计时、辩论赛的计时等各种需要计时的比赛场合,有很强的现实意义。 但是该计时器局限于255秒以内的的计时,计时长度有限制;而且体积较大,线路较为复杂,不适合携带。出于这些问题,只要时间足够,可以设置两个内存空间用于存放计时变量,且把数码管扩展为4位甚至更多,就能够实现多达65535秒的计时,当然实际生活中很少用到这么长时间的秒用计时。对于后者,只要电路板的编排合理,就可以省去导线连接的步骤,而且能够实现各种形状的制作,有助于广大使用者的喜爱。 参考文献 1. 李荣正. PIC单片机原理及应用[M]. 北京航空航天大学出版社,2005 2. 刘和平.PIC16F887单片机程序设计及应用[M].北京航天航空大学出版社,2005 3. 王有绪.单片机接口技术及应用系统设计[M].高等教育出版社,2000 4. 李学海.PIC单片机实用教程—基础篇[M]. 北京航天航空大学出版社,2002 5. 窦振中.PIC系列单片机原理和程序设计[M].北京航空航天大学出版社,2000 23 附录:程序清单 list p=16f887 ; list directive to define processor #include <p16f887.inc> ; processor specific variable definitions __CONFIG _CONFIG1,_LVP_OFF&_IESO_OFF&_BOR_OFF&_PWRTE_ON&_WDT_OFF&_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 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 pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt MAIN ;主程序 ; remaining code goes here BSF STATUS,RP1 ;16F887初始化 BSF STATUS,RP0 CLRF ANSEL CLRF ANSELH BCF STATUS,RP1 BCF STATUS,RP0 CLRF BIAN ;变量的初始化 CLRF NUM4 CLRF NUM CLRF NUM8 CLRF NUM9 CLRF NUM10 MOVLW 01H ;KEYFLAG初始化,为1 MOVWF KEYFLAG BSF STATUS,RP0 ;进入体1 CLRF TRISD ;RD设为输出 MOVLW 07H ;分频比为1:256 MOVWF OPTION_REG MOVLW 0C1H ;RB的位1,2,3,4,5设为输出 MOVWF TRISB MOVLW 0F0H ;RD低四位输入,高四位输出 MOVWF TRISC MOVLW 08H ;RE位1,2,3输出 MOVWF TRISE BCF STATUS,RP0 ;进入体0 MOVLW B'10100000' ;打开总中断和T0中断使能位 MOVWF INTCON MOVLW .20 ;送入中断循环次数初值为20 MOVWF COUNTER MOVLW 0FFH ;RB,RD关闭 MOVWF PORTD MOVWF PORTB MOVLW 07H ;RE关闭 MOVWF PORTE CLRF NUM5 ;清空变量 CLRF NUM6 CLRF NUM7 GOTO LOOP ;跳至大循环 ;动态计数显示子程序,用于倒计时数的显示 LOOP6 CALL CALC ;调用分解子程序 CALL DISPLAY ;调用显示子程序 CALL JIANPAN ;调用键盘扫描子程序 MOVLW 00H ;计数变量是否为0 SUBWF NUMB,W BTFSC STATUS,Z CALL LIGHT ;是,调用为0提示及恢复子程序 GOTO LOOP6 ;否,返回循环 ;提示子程序,用于计时为0时的提示和程序的重初始化 LIGHT BCF INTCON,5 ;关闭T0使能,计时器停止工作 CALL SHANSHU ;调用小灯闪烁子程序 MOVLW 01H ;KEYFLAG初始化 MOVWF KEYFLAG CLRF NUM9 ;中间变量的初始化 CLRF NUM10 GOTO LOOP ;跳转至LOOP大循环,重新开始工作 ;分解子程序,多位数的分解 CALC MOVF NUMB,W ;显示变量送入W寄存器 CALL DIV10 ;调用除十子程序 MOVWF GE ;将返回数送入GE,用于个位显示 MOVF SHANG,W ;变量SHANG送如W寄存器 CALL DIV10 ;调用除十子程序 MOVWF SHI ;返回数送入SHI,用于十位的显示 MOVF SHANG,W ;SHANG送入BAI,用于百位的显示 MOVWF BAI RETURN ;显示子程序 DISPLAY MOVF GE,W ;个位数送入W寄存器 CALL CHABIAO ;查表子程序 MOVWF PORTD ;码值送入段选 BCF PORTB,1 ;个位位选打开 CALL DELAY ;延时 BSF PORTB,1 ;位选关闭 MOVF SHI,W CALL CHABIAO ;十位数查表 MOVWF PORTD ;送入段选 BCF PORTB,2 ;十位位选打开 CALL DELAY ;延时 BSF PORTB,2 ;位选关闭 MOVF BAI,W CALL CHABIAO ;百位数查表 MOVWF PORTD ;送入段选 BCF PORTB,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方案 预案 三位 计时器 pic 单片机 课程设计 全部 汇编程序 清单
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文