ST套件上时钟小时分钟轮换显示,24小时误差5秒以内
;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位小时/分钟显示标志
;3位4位分别为分钟/小时调整态标志
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 ;显示小时时DP亮
BCF 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