📄 s2.asm
字号:
;*************************************************
;寄存器定义部分
;*************************************************
#INCLUDE P16F877A.INC
#DEFINE LCD_E PORTA,1
#DEFINE LCD_RW PORTA,2
#DEFINE LCD_RS PORTA,3
CBLOCK 21H
MS_J,MS_J1,SECOND_J,SECOND_J1,MINUTE_J,MINUTE_J1
R0,R1,R2,HOUR_J,HOUR_J1,HOUR_N,MINUTE_N,MS,MS_1,SECOND,MINUTE
HOUR,DAY,MONTH,YEAR,BCD_H,BCD_L,NZ_MINUTE,NZ_HOUR
SECOND_1,MINUTE_1,HOUR_1,YEAR_H,YEAR_L,YEAR_L1,MONTH_1,TEMP0,YEAR_H1
BCD_R0,BCD_R1
H_BYTE,L_BYTE,RH,RL,RM,NT,TEMP,COUNT,YWAR_H1,YEAR_HW,N_HOUR,N_MINUTE
W1,W2,W3,W10,W11,W21,W31,BW,SW,GW,SECOND1,MINUTE1,MINUTEQ,
HOUR1,DAY1,MONTH1,YEAR_LP,BZ0,TTT0,MONTHD
ENDC
W_TEMP EQU 71H
STATUS_TEMP EQU 72H
PCLATH_TEMP EQU 73H
ORG 000H
NOP
GOTO MAIN
;*************************************************
;中断服务子程序
;*************************************************
ORG 004H
MOVWF W_TEMP ;寄存器保护
SWAPF STATUS,W
MOVWF STATUS_TEMP
MOVF PCLATH,W
MOVWF PCLATH_TEMP
BCF PIE1,TMR1IF
INCF MS,F
BCF PIE1,TMR1IF
CALL TMR1_CSH ;调用TMR1初始化程序
;**********************************************
CALL SHIJIAN_JS ;调用时间日期记述数子程序
MOVLW .3
SUBWF MS,W
BTFSC STATUS,C
GOTO MB1
GOTO MB2
MB1 CALL SJXS2
GOTO JS_JISHU
MB2
CALL SJXS
GOTO JS_JISHU ;时间显示刷新
;8***************************************************8
;记时器时器功能插在中断中的片段
;******************************************************
JS_JISHU INCF MS_J,F
MOVF MS_J,W ;秒计数
MOVWF MS_1
MOVLW .10
SUBWF MS_1,F
BTFSS STATUS,C
GOTO JM_JISHU
INCF SECOND_J
CLRF MS_J
JM_JISHU MOVF SECOND_J,W ;分计数
MOVWF SECOND_1
MOVLW .60
SUBWF SECOND_1,F
BTFSS STATUS,C
GOTO JH_JISHU
INCF MINUTE_J
CLRF SECOND_J
JH_JISHU MOVF MINUTE_J,W ;时计数
MOVWF MINUTE_1
MOVLW .60
SUBWF MINUTE_1,F
BTFSS STATUS,C
GOTO MBN
INCF HOUR_J
CLRF MINUTE_J
MBN NOP
RLJ3 MOVF HOUR,W ;闹钟判别子程序
SUBWF N_HOUR,W
BTFSS STATUS,C
GOTO R10
MOVF N_HOUR,W
SUBWF HOUR,W
BTFSS STATUS,C
GOTO R10
MOVF N_MINUTE,W
SUBWF MINUTE,W
BTFSS STATUS,C
GOTO R10
MOVF MINUTE,W
SUBWF N_MINUTE,W
BTFSS STATUS,C
GOTO R10
CALL PWM
BTFSC PORTB,0
GOTO R10
CALL DELAY_10MS
BTFSC PORTB,0
GOTO R10
MOVLW .1
SUBWF N_HOUR,F
R10 MOVF N_MINUTE,W
MOVWF MINUTEQ
MOVF MINUTE,W
SUBWF MINUTEQ,W
BTFSS STATUS,C
GOTO R13
GOTO R11
R13 BTFSC BZ0,0
GOTO R12
GOTO R11
R12 MOVLW .1
ADDWF N_HOUR,F
BCF BZ0,0
R11 MOVF PCLATH_TEMP,W ;寄存器恢复
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;*************************************************
;主程序
;*************************************************
MAIN
CALL TMR1_CSH
BSF STATUS,RP0
BSF TRISB,0
MOVLW B'11111111'
MOVWF TRISA
;GOTO $
;BSF TRISA,4
BCF STATUS,RP0
CALL CSH
CALL LCD_CSH
; CALL SJXS
; CALL NZXS
; CALL PWM
; CALL RQXS2
; CALL SJRQXG
; CALL RQXS
; GOTO $
;*************************************************
;键盘扫描程序
;*************************************************
DDR BTFSS PORTB,0
GOTO DDR
CALL DELAY_10MS
BTFSS PORTB,0
GOTO DDR
RB0
BTFSC PORTB,0
GOTO RA4
CALL DELAY_10MS
BTFSC PORTB,0
GOTO RA4
CALL DELAY_2S
BTFSC PORTB,0
GOTO GN3 ;进入日期显示
CALL DELAY_10MS
BTFSC PORTB,0
GOTO GN3 ;进入日期显示
GOTO GN4 ;进入时间、日期\闹钟设置功能
RA4 BTFSC PORTA,4
GOTO RB0
CALL DELAY_10MS
BTFSC PORTA,4
GOTO RB0
CALL DELAY_2S
BTFSC PORTA,4
GOTO GN5 ;闹钟时间显示
CALL DELAY_10MS
BTFSC PORTA,4
GOTO GN5 ;闹钟时间设置
GOTO GN6 ;记时期功能
GN3 CALL RQXS ;进入日期显示
GOTO RB0
GN4 BTFSS PORTB,0
GOTO GN4
CALL DELAY_10MS
BTFSS PORTB,0
GOTO GN4
CALL SJRQXG ;进入时间、日期设置功能
BB4 BTFSS PORTB,0
GOTO BB4
CALL DELAY_10MS
BTFSS PORTB,0
GOTO BB4
CALL DELAY_1S
CALL NZSZ ;闹钟设置
GOTO RB0
GN5 CALL NZXS ;闹钟时间显示
GOTO RB0
GN6 NOP
N1 BTFSS PORTA,4
GOTO N1
CALL DELAY_10MS
BTFSS PORTA,4
GOTO N1
CALL JSQ ;记时期功能
GOTO RB0
;*************************************************
;时间、日期 计数子程序
;*************************************************
SHIJIAN_JS INCF MS,F
S_JISHU MOVF MS,W ;秒计数
MOVWF MS_1
MOVLW .10
SUBWF MS_1,F
BTFSS STATUS,C
GOTO M_JISHU
INCF SECOND
CLRF MS
M_JISHU MOVF SECOND,W ;分计数
MOVWF SECOND_1
MOVLW .60
SUBWF SECOND_1,F
BTFSS STATUS,C
GOTO H_JISHU
INCF MINUTE
CLRF SECOND
H_JISHU MOVF MINUTE,W ;时计数
MOVWF MINUTE_1
MOVLW .60
SUBWF MINUTE_1,F
BTFSS STATUS,C
GOTO D_JISHU
INCF HOUR
CLRF MINUTE
D_JISHU MOVF HOUR,W ;TIAN计数
MOVWF HOUR_1
MOVLW .24
SUBWF HOUR_1,F
BTFSS STATUS,C
GOTO M_1
INCF DAY
CLRF HOUR
M_1 MOVLW .2 ;YUE
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_2
CALL MONTH_31
M_2 MOVLW .3
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_3
CALL MONTH_2YUE
M_3 MOVLW .4
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_4
CALL MONTH_31
M_4 MOVLW .5
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_5
CALL MONTH_30
M_5 MOVLW .6
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_6
CALL MONTH_31
M_6 MOVLW .7
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_7
CALL MONTH_30
M_7 MOVLW .8
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_8
CALL MONTH_31
M_8 MOVLW .9
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_9
CALL MONTH_31
M_9 MOVLW .10
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_10
CALL MONTH_30
M_10 MOVLW .11
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_11
CALL MONTH_31
M_11 MOVLW .12
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_12
CALL MONTH_30
M_12 MOVLW .13
SUBWF MONTH,W
BTFSC STATUS,C
GOTO M_0
CALL MONTH_31
M_0 MOVF MONTH,W ;年计数
MOVWF MONTH_1
MOVLW .13
SUBWF MONTH_1,W
BTFSS STATUS,C
GOTO RL6
INCF YEAR_L,F
MOVLW .1
MOVWF MONTH
MOVLW .100
SUBWF YEAR_L,W
BTFSS STATUS,C
GOTO RL6
CLRF YEAR_L
RL6 RETURN
MONTH_2YUE MOVLW .1
MOVWF YEAR_L1
BTFSC STATUS,C
GOTO L831
MOVF YEAR_H,W
MOVWF YEAR_H1
MOVLW .4
L432 SUBWF YEAR_H1,F
BTFSC STATUS,C
GOTO L432
INCF TEMP0 ;YEAR_H1的前以为积存器要家1
MOVLW .252 ;是否该换为十六进制的?
SUBWF YEAR_H1
BTFSC STATUS,C
CALL MONTH_28
CALL MONTH_29
GOTO LR_0
L831 MOVLW YEAR_L
MOVWF YEAR_L1
MOVLW .4
L322 SUBWF YEAR_L1,F
BTFSC STATUS,C
GOTO L322
INCF YEAR_L1
MOVLW .252
SUBWF YEAR_L1
BTFSC STATUS,C
CALL MONTH_28
CALL MONTH_29
LR_0 RETURN
MONTH_28 MOVLW .29
SUBWF DAY,W
BTFSS STATUS,C
GOTO R28
INCF MONTH
MOVLW .0
MOVWF DAY
R28 RETURN
MONTH_29 MOVLW .30
SUBWF DAY,W
BTFSS STATUS,C
GOTO R29
INCF MONTH
MOVLW .0
MOVWF DAY
R29 RETURN
MONTH_30 MOVLW .31
SUBWF DAY,W
BTFSS STATUS,C
GOTO R30
INCF MONTH
MOVLW .0
MOVWF DAY
R30 RETURN
MONTH_31 MOVLW .32
SUBWF DAY,W
BTFSS STATUS,C
GOTO R31
INCF MONTH
MOVLW .0
MOVWF DAY
R31 RETURN
;*************************************************
;时间、日期 修改子程序
;*************************************************
SJRQXG
CALL RQXS2
CALL XG_YEAR
CALL XG_MONTH
L32 BTFSC PORTB,0
GOTO L32
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L32
O2 BTFSS PORTB,0
GOTO O2
CALL DELAY_10MS
BTFSS PORTB,0
GOTO O2
CALL XG_DAY
L33 BTFSC PORTB,0
GOTO L33
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L33
O3 BTFSS PORTB,0
GOTO O3
CALL DELAY_10MS
BTFSS PORTB,0
GOTO O3
CALL XG_HOUR
L34 BTFSC PORTB,0
GOTO L34
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L34
O4 BTFSS PORTB,0
GOTO O4
CALL DELAY_10MS
BTFSS PORTB,0
GOTO O4
CALL XG_MINUTE
L35 BTFSC PORTB,0
GOTO L35
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L35
O5 BTFSS PORTB,0
GOTO O5
CALL DELAY_10MS
BTFSS PORTB,0
GOTO O5
CALL XG_SECOND
RETURN
XG_YEAR BTFSC PORTA,4 ; 修改年
GOTO L41
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L41
L410 BTFSS PORTA,4 ;RA4有没释放
GOTO L410
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L410
INCF YEAR_L,F
CALL RQXS2
MOVLW .100
SUBWF YEAR_L,W
BTFSS STATUS,C
GOTO L41
CLRF YEAR_L
CALL RQXS2
L41 BTFSC PORTB,0
GOTO XG_YEAR
CALL DELAY_10MS
BTFSC PORTB,0
GOTO XG_YEAR
O6 BTFSS PORTB,0
GOTO O6
CALL DELAY_10MS
BTFSS PORTB,0
GOTO O6
RETURN
XG_MONTH
BTFSS PORTB,0
GOTO XG_MONTH
CALL DELAY_10MS
BTFSS PORTB,0
GOTO XG_MONTH
D1 BTFSC PORTA,4 ; 修改月
GOTO L51
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L51
L411 BTFSS PORTA,4 ;RA4有没释放
GOTO L411
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L411
MOVF YEAR_L,W
MOVWF TTT0
INCF MONTH,F
; MOVF MONTH,W
; MOVWF MONTH1
MOVF TTT0,F
MOVWF YEAR_L
CALL RQXS2
MOVLW .13
SUBWF MONTH,W
BTFSS STATUS,C
GOTO L51
MOVLW .1
MOVWF MONTH
; MOVF MONTH,W
; MOVWF MONTH1
CALL RQXS2
L51 BTFSC PORTB,0
GOTO D1
CALL DELAY_10MS
BTFSC PORTB,0
GOTO D1
MOVF MONTH,W
MOVWF MONTHD
RETURN
XG_DAY NOP ;修改日
M_121 MOVLW .12
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_111
CALL XIU_31
GOTO TT0
M_111 MOVLW .11
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_101
CALL XIU_30
GOTO TT0
M_101 MOVLW .10
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_91
CALL XIU_31
GOTO TT0
M_91 MOVLW .9
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_81
CALL XIU_30
GOTO TT0
M_81 MOVLW .8
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_71
CALL XIU_31
GOTO TT0
M_71 MOVLW .7
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_61
CALL XIU_31
GOTO TT0
M_61 MOVLW .6
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_51
CALL XIU_30
GOTO TT0
M_51 MOVLW .5
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_41
CALL XIU_31
GOTO TT0
M_41 MOVLW .4
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_31
CALL XIU_30
GOTO TT0
M_31 MOVLW .3
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_21
CALL XIU_31
GOTO TT0
M_21 MOVLW .2
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_11M
CALL XIU_2YUE
GOTO TT0
M_11M MOVLW .1
SUBWF MONTH,W
BTFSS STATUS,C
GOTO M_0S1
CALL XIU_31
GOTO TT0
TT0 NOP
M_0S1
RETURN
XIU_2YUE MOVLW .1
SUBWF YEAR_L,W
BTFSC STATUS,C
GOTO L8311
MOVF YEAR_H,W
MOVWF YEAR_H1
MOVLW .4
L4321 SUBWF YEAR_H1,F
BTFSC STATUS,C
GOTO L4321
MOVLW .4
ADDWF TEMP0 ;YEAR_H1的前以为积存器要家1
MOVLW .252
SUBWF YWAR_H1,W
BTFSC STATUS,C
CALL XIU_28
CALL XIU_29
GOTO LR_01
L8311 MOVF YEAR_L,W
MOVWF YEAR_L1
MOVLW .4
L3221 SUBWF YEAR_L1,F
BTFSC STATUS,C
GOTO L3221
INCF YEAR_L1,F
MOVLW .252
SUBWF YEAR_L1
BTFSC STATUS,C
CALL XIU_28
CALL XIU_29
LR_01 RETURN
XIU_28 NOP
L820 BTFSC PORTA,4
GOTO L810
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L810
L412 BTFSS PORTA,4;RA4有没释放
GOTO L412
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L412
INCF DAY
; MOVF DAY,W
; MOVWF DAY1
CALL RQXS2
MOVLW .29
SUBWF DAY,W
BTFSS STATUS,C
GOTO L810
MOVLW .1
MOVWF DAY
; MOVLW .1
; SUBWF MONTH,F
L810 CALL RQXS2
; MOVWF DAY1
BTFSC PORTB,0
GOTO L820
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L820
BTFSC PORTB,0
GOTO L820
RETURN
XIU_29 NOP
L829 BTFSC PORTA,4
GOTO L819
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L819
L413 BTFSS PORTA,4;RA4有没释放
GOTO L413
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L413
INCF DAY,F
; MOVF DAY,W
; MOVWF DAY1
CALL RQXS2
MOVLW .30
SUBWF DAY,W
BTFSS STATUS,C
GOTO L819
MOVLW .1
MOVWF DAY
; MOVLW .1
; SUBWF MONTH,F
CALL RQXS2
; MOVWF DAY1
L819 CALL RQXS2
BTFSC PORTB,0
GOTO L829
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L829
RETURN
XIU_30 NOP
L823 BTFSC PORTA,4
GOTO L813
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L813
L414 BTFSS PORTA,4;RA4有没释放
GOTO L414
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L414
INCF DAY,F
; MOVF DAY,W
; MOVWF DAY1
CALL RQXS2
MOVLW .31
SUBWF DAY,W
BTFSS STATUS,C
GOTO L813
MOVLW .1
MOVWF DAY
; MOVLW .1
; SUBWF MONTH,F
CALL RQXS2
; MOVF DAY,W
; MOVWF DAY1
L813 CALL RQXS2
BTFSC PORTB,0
GOTO L823
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L823
BTFSC PORTB,0
GOTO L823
RETURN
XIU_31 NOP
L824 BTFSC PORTA,4
GOTO L814
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L814
L415 BTFSS PORTA,4;RA4有没释放
GOTO L415
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L415
INCF DAY,F
; MOVF DAY,W
; MOVWF DAY1
CALL RQXS2
MOVLW .32
SUBWF DAY,W
BTFSS STATUS,C
GOTO L814
MOVLW .1
MOVWF DAY
; MOVLW .1
; SUBWF MONTH,F
CALL RQXS2
; MOVWF DAY1
CALL RQXS2
L814
BTFSC PORTB,0
GOTO L824
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L824
BTFSC PORTB,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -