您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC16F877A动态数码时钟显示实验参考程序 正文
PIC16F877A动态数码时钟显示实验参考程序

PIC16F877A动态数码时钟显示实验参考程序

点击数:7340 次   录入时间:03-04 11:51:55   整理:http://www.55dianzi.com   PIC单片机
;动态数码时钟显示实验参考程序 ;使用资源: ;1,TMRO定时器。确定显示的位,及显示延时。 ;2,TMR1定时器。秒信号产生。 ;3,PORTA端口。六共阳极位数码管的位选信号,低电平有效 ;4,PORTC端口。数码管的七段,RC7不用。 ;功能说明: ;1.六位数码管动态扫描显示时间(格式为:HHMMSS,24小时制)。 ;2.时钟信号由单片机内部定时器硬件单元编程产生。 ;本实战的目的是让大家进一步熟悉定时器的编程,多位数码管动态扫描显示的编程。 ;硬件接法: ;1.实验板上拨码开关S4、S5的所有位必须置ON,其他都可以关闭。 ;2.最好把93C46跟24CXX存储器从板上取下。 ;本实例原提供者:pic16论坛会员 leef728 ,在此鸣谢leef728同志共享本实例. ;由深圳市乾龙盛电子科技有限公司技术部钟闺田(工程师)(论坛网名:zhongruntian)验正并加于整理、注释. ;网站:PIC单片机学习网 http://www.55dianzi.com 讨论论坛:http://pic16.com/bbs/ ;版权所有,转载请注明出处,并不能去掉或改变文件中的说明文字。 ;程序文件名&#8220;TIME.ASM" ;程序清单如下: ;************************************ LIST P=16F877A INCLUDE"P16F877A.INC" ERRORLEVEL -302 ;*********************************** __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC; ;***************文件寄存器定义************** CBLOCK 0X20 WAW YIW BAW QIW GEW SHW TEMP COUNTER S3 DAA STATUS_TMP W_TMP ENDC ;********************程序开始**************** ORG 0000H NOP ;复位地址 GOTO MAIN ORG 0004H ;********************中断处理程序*********** MOVWF W_TMP SWAPF STATUS,W CLRF STATUS MOVWF STATUS_TMP ;以上4条指令为中断现场保护 BCF INTCON,2 ;清除TMRO中断标志位 MOVF TEMP,W ;时间存放单元的地址 MOVWF FSR MOVF INDF,W ;取得某一位的时间值 CALL BMA ;查表得时间的显示代码 MOVWF PORTC ;送数码管显示 COMF DAA,W ;位码取反 MOVWF PORTA ;点亮相应的数码管 RLF DAA,F ;准备点亮下一位 INCF TEMP,F ;下一时间存放单元地址 BTFSS DAA,6 ;是否显示完六位 GOTO RT MOVLW 01H ;是,重新开始新一轮显示 MOVWF DAA MOVLW 20H ;重新获取时间单元的地址 MOVWF TEMP RT SWAPF STATUS_TMP,W ;中断现场恢复 MOVWF STATUS SWAPF W_TMP,F SWAPF W_TMP,W MOVLW 0XE0 ;赋定时器初值 MOVWF TMR0 RETFIE ;*******************主程序开始**************** MAIN BANKSEL TRISA ;选择体1 MOVLW 00H MOVWF TRISA ;PORTA设置为输出 MOVWF TRISC ;PORTC设置为输出 MOVLW 06H MOVWF ADCON1 ;设置A口为普通数字口 BANKSEL INTCON MOVLW 00H MOVWF YIW MOVWF WAW MOVWF QIW MOVWF BAW MOVWF SHW MOVWF GEW ;以上7条指令清零时间 MOVWF DAA MOVLW 20H MOVWF TEMP ;时间存放单元地址 BSF STATUS,RP0 MOVLW 0X05 MOVWF OPTION_REG ;分频器给TMR0做定时用,且分频比1:4 BCF STATUS,RP0 BSF INTCON,7 ;开启中断总允许位GIE BSF INTCON,5 ;开启TMRO中断允许位 BCF INTCON,2 ;清除TMRO中断标志位 MOVLW 0XE0 ;TMRO赋初值 MOVWF TMR0 CLRF DAA INCF DAA,F ;显示位设置 ;************************************************************** KS CALL DELAY ;调用200ms定时程序 CALL DELAY CALL DELAY CALL DELAY CALL DELAY ;调用5次,刚好1s INCF GEW,F MOVF GEW,W ;判断秒的个位是否够10 XORLW .10 BTFSS STATUS,Z GOTO KS ;是,秒的个位清0,秒的十位加1 INCF SHW,F CLRF GEW CLRF STATUS MOVF SHW,W XORLW .6 ;判断秒的十位是否为6(1分钟60秒) BTFSS STATUS,Z GOTO KS INCF BAW,F ;是,秒的十位清0,分的个位加1 CLRF SHW CLRF STATUS MOVF BAW,W XORLW .10 ;判断分的各位是否够10 BTFSS STATUS,Z GOTO KS INCF QIW,F ;是,分的个位清0,分的十位加1 CLRF BAW CLRF STATUS MOVF QIW,W XORLW .6 ;判断分的十位是否够6(1小时60分) BTFSS STATUS,Z GOTO KS INCF WAW,F ;是,分的十位清0,时的个位加1 CLRF QIW CLRF STATUS MOVF WAW,W XORLW .4 ;判断时的个位是否够4(24小时制) BTFSS STATUS,Z GOTO KS INCF YIW,F ;是,时的个位清0,时的十位加1 CLRF WAW CLRF STATUS MOVF YIW,W XORLW .2 ;判断时的十位是否够2 BTFSS STATUS,Z GOTO KS CLRF GEW ;是,使时间回到00-00-00 CLRF SHW CLRF BAW CLRF QIW CLRF WAW CLRF YIW GOTO KS ;循环显示 ;**************************200ms延时程序******************** DELAY NOP BANKSEL PIE1 BCF PIE1,0 ;禁止TMR1中断 BANKSEL T1CON MOVLW 24H ;TMR1分频1:4 MOVWF T1CON BCF PIR1,0 MOVLW 0X3C MOVWF TMR1H MOVLW 0XB0 MOVWF TMR1L ;TMR1赋初值0X3CB0 BSF T1CON,0 LOP BTFSS PIR1,0 ;查询是否定时时间到 GOTO LOP RETURN ;********************************************************** BMA ADDWF PCL,F ;考察偏移量 RETLW 0XC0 ;"0" 编码 RETLW 0XF9 ;"1" 编码 RETLW 0XA4 ;"2" 编码 RETLW 0XB0 ;"3" 编码 RETLW 0X99 ;"4" 编码 RETLW 0X92 ;"5" 编码 RETLW 0X82 ;"6" 编码 RETLW 0XF8 ;"7" 编码 RETLW 0X80 ;"8" 编码 RETLW 0X98 ;"9" 编码 RETLW 0XFF ;********************************************************** END ;源程序结束 ;*********************************************************** ; 进入该实战演练的工序流程如下: ; 1.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用<a target="_blank" href="http://www.xinyun.org/" class="UBBWordLink">Windows</a>附件中的&#8221;记事本&#8221; ; 这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的 ; 分号&#8221;;&#8221;必须用西文半角输入;二是必须用&#8221;.asm&#8221;扩展名存储到事先建立的一个专用子目录下. ; 2.打开MPLAB集成开发环境:首先在<a target="_blank" href="http://www.xinyun.org/" class="UBBWordLink">WINDOWS</a>环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB ; 并进入MPLAB的桌面. ; 3.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将 ; 用记事本创建的源文件加入到该项目中. ; 4.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目 ; 文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).


本文关键字:动态  程序  PIC单片机单片机-工控设备 - PIC单片机