⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s2.asm

📁 时钟程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*************************************************
;寄存器定义部分
;*************************************************
#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 + -