技术热线: 4007-888-234

ST套件上时钟小时分钟轮换显示,24小时误差5秒以内

更新时间: 2019-03-26
阅读量:2128

ST套件上时钟,小时与分钟每2秒轮换显示,按S2调整分钟,按S3调整小时 ;显示小时时DP,分钟时DP不亮 ;实际测试与手机时间对比,现已运行11个小时,较准确 ;mplab模拟,计算每天可能要慢5秒以内(STOPWACH) ;初学PIC第二个程序,by wonderfulsf 12/12/2004

LIST P=16F84A,R=DEC __CONFIG B'11111111110001'

;--------------------------------

RTCC EQU 01H PC EQU 02H STATUS EQU 03H PORTA EQU 05H PORTB EQU 06H INTCON EQU 0BH OPTION_REG EQU 1H TRISA EQU 5H TRISB EQU 6H

;-----------------------STATUS C EQU 0 Z EQU 2 RP0 EQU 5

;-----------------------INTCON T0IF EQU 2 T0IE EQU 5 GIE EQU 7

;-----------------------IN PROGRAME VAR C0 EQU 10H C1 EQU 11H C2 EQU 12H TABADD EQU 13H FLAGS EQU 14H ;显示标志寄存,1位高/低位扫描 ;2位小时/分钟显示标志 ;34位分别为分钟/小时调整态标志 DIS_H EQU 15H ;显示位缓存 DIS_L EQU 16H SEC EQU 17H ;秒位 MIN_H EQU 18H ;分钟 MIN_L EQU 19H HOU_H EQU 1AH ;小时 HOU_L EQU 1BH W_T EQU 1CH ST_T EQU 1DH DIGMS EQU 1EH ;5ms计数 ;------------------------

ORG 0000H GOTO MAIN ORG 004H TIME MOVWF W_T SWAPF STATUS,W MOVWF ST_T

MOVLW 100 MOVWF RTCC BCF INTCON,T0IF

MOVLW 0FFH ;关闭数码管 MOVWF PORTB ;B口高电平 BSF PORTA,1 ;A口高电平 BSF PORTA,2

BTFSC FLAGS,3 ;3位调整分钟时只显示分钟不切换显示 BSF FLAGS,2 BTFSC FLAGS,4 ;4位调整小时时只显示小时 BCF FLAGS,2 MOVFW MIN_H ;显示分钟或小时,由FLAG(2)位决定 BTFSS FLAGS,2 ;1时显示分种 MOVFW HOU_H MOVWF DIS_H

MOVFW MIN_L BTFSS FLAGS,2 MOVFW HOU_L MOVWF DIS_L

MOVLW TABLE ;B口显示数据,高低位由FLAGS(1)位决定 MOVWF TABADD MOVFW DIS_L BTFSS FLAGS,1 MOVFW DIS_H ADDWF TABADD,W CALL CONVERT MOVWF PORTB BTFSS FLAGS,2 ;显示小时时DPBCF PORTB,7 BTFSS FLAGS,1 BCF PORTA,1 BTFSC FLAGS,1 BCF PORTA,2 MOVLW 00000010B XORWF FLAGS,1

;------------------------------------显示完成,FLAGS(1)取反 INCF DIGMS,1 ;5ms计时,200次进秒 MOVLW 200 XORWF DIGMS,0 BNZ TIMEND CLRF DIGMS

INCF SEC,1 BCF FLAGS,2 BTFSS SEC,1 BSF FLAGS,2 ;2秒种,小时/分钟交换 MOVLW 60 XORWF SEC,0 BNZ TIMEND CLRF SEC INCF MIN_L,1 MOVLW 10 XORWF MIN_L,0 BNZ TIMEND CLRF MIN_L

INCF MIN_H,1 MOVLW 6 XORWF MIN_H,0 BNZ TIMEND CLRF MIN_H

MOVLW 2 XORWF HOU_H,0 BZ HOU1 INCF HOU_L,1 MOVLW 10 XORWF HOU_L,0 BNZ TIMEND CLRF HOU_L INCF HOU_H,1 GOTO TIMEND HOU1 INCF HOU_L,1 MOVLW 4 XORWF HOU_L,0 BNZ TIMEND CLRF HOU_L CLRF HOU_H

TIMEND SWAPF ST_T,W MOVWF STATUS SWAPF W_T,F SWAPF W_T,W RETFIE

;-------------------------------------- MAIN CLRF PORTA CLRF PORTB

BSF STATUS,RP0 MOVLW 00011000B MOVWF TRISA MOVLW 00000000B MOVWF TRISB MOVLW 10000100B MOVWF OPTION_REG BCF STATUS,RP0

MOVLW 100 MOVWF RTCC MOVLW 0FFH MOVWF PORTB BSF PORTA,1 BSF PORTA,2 CLRF DIGMS CLRF DIS_L CLRF DIS_H CLRF MIN_L CLRF MIN_H CLRF HOU_L CLRF HOU_H BCF INTCON,T0IF BSF INTCON,T0IE BSF INTCON,GIE ;---------------------------------------- LOOP BCF FLAGS,3 BCF FLAGS,4 BTFSS PORTA,3 GOTO SET_1 BTFSS PORTA,4 GOTO SET_2 GOTO LOOP ;----------------------------------- SET_1 BTFSC PORTA,3 ;S2按下,去抖动后,调整分钟 GOTO LOOP CALL DELAY BTFSC PORTA,3 GOTO LOOP

BSF FLAGS,3 INCF MIN_L,1 MOVLW 10 XORWF MIN_L,0 BNZ SET_1 CLRF MIN_L

INCF MIN_H,1 MOVLW 6 XORWF MIN_H,0 BNZ SET_1 CLRF MIN_H GOTO SET_1 ;----------------------------------- SET_2 BTFSC PORTA,4 ;S3按下后调整小时 GOTO LOOP CALL DELAY BTFSC PORTA,4 GOTO LOOP

BSF FLAGS,4 MOVLW 2 XORWF HOU_H,0 BZ HOU2 INCF HOU_L,1 MOVLW 10 XORWF HOU_L,0 BNZ SET_2 CLRF HOU_L INCF HOU_H,1 GOTO SET_2 HOU2 INCF HOU_L,1 MOVLW 4 XORWF HOU_L,0 BNZ SET_2 CLRF HOU_L CLRF HOU_H GOTO SET_2

;----------------------------------- DELAY MOVLW 150 ;延时0.1S MOVWF C1 L2 MOVLW 255 MOVWF C2 L3 DECFSZ C2,1 GOTO L3 DECFSZ C1,1 GOTO L2 RETLW 0 ;----------------------------------- CONVERT MOVWF PC TABLE RETLW 081H RETLW 0E7H RETLW 092H RETLW 0A2H RETLW 0E4H RETLW 0A8H RETLW 088H RETLW 0E3H RETLW 080H RETLW 0A0H ;----- -------------------------------------- END