平年闰年计算,已实际应用
;//===============================================================================
;//********************************平闰年处理函数*********************************
;//===============================================================================
FlatLeapYear_Handle:
MOVR R_Month,A
ADDAR PCL,R
GOTO FlatLeapYear_Handle_END
GOTO Day_31
GOTO Month_2
GOTO Day_31
GOTO Day_30
GOTO Day_31
GOTO Day_30
GOTO Day_31
GOTO Day_31
GOTO Day_30
GOTO Day_31
GOTO Day_30
GOTO Day_31
Day_31:
JBTS0 b_DayAddSub_Flag
GOTO Day_31_1
MOVIA 31
JLAR R_Day
GOTO FlatLeapYear_Handle_END
MOVIA 0x01
MOVAR R_Day
JBTS0 b_MonthSet_Flag
INCR R_Month,R
GOTO FlatLeapYear_Handle_END
Day_31_1:
MOVIA 0
JNCMPAR R_Day
GOTO Day_31_2
GOTO FlatLeapYear_Handle_END
Day_31_2:
MOVIA 31
MOVAR R_Day
GOTO FlatLeapYear_Handle_END
Day_30:
JBTS0 b_DayAddSub_Flag
GOTO Day_30_1
MOVIA 30
JLAR R_Day
GOTO FlatLeapYear_Handle_END
MOVIA 0x01
MOVAR R_Day
JBTS0 b_MonthSet_Flag
INCR R_Month,R
GOTO FlatLeapYear_Handle_END
Day_30_1:
MOVIA 0
JNCMPAR R_Day
GOTO Day_30_2
GOTO FlatLeapYear_Handle_END
Day_30_2:
MOVIA 30
MOVAR R_Day
GOTO FlatLeapYear_Handle_END
Month_2:
CALL FlatLeapYearLoop
MOVIA 0
JCMPAR R_REMAINDER0
GOTO FlatLeapYear
JCMPAR R_REMAINDER2
GOTO Day_29
FlatLeapYear:
JCMPAR R_REMAINDER1
GOTO Day_28
GOTO Day_29
Day_29:
JBTS0 b_DayAddSub_Flag
GOTO Day_29_1
MOVIA 29
JLAR R_Day
GOTO FlatLeapYear_Handle_END
MOVIA 0x01
MOVAR R_Day
JBTS0 b_MonthSet_Flag
INCR R_Month,R
GOTO FlatLeapYear_Handle_END
Day_29_1:
MOVIA 0
JNCMPAR R_Day
GOTO Day_29_2
GOTO FlatLeapYear_Handle_END
Day_29_2:
MOVIA 29
MOVAR R_Day
GOTO FlatLeapYear_Handle_END
Day_28:
JBTS0 b_DayAddSub_Flag
GOTO Day_28_1
MOVIA 28
JLAR R_Day
GOTO FlatLeapYear_Handle_END
MOVIA 0x01
MOVAR R_Day
JBTS0 b_MonthSet_Flag
INCR R_Month,R
GOTO FlatLeapYear_Handle_END
Day_28_1:
MOVIA 0
JNCMPAR R_Day
GOTO Day_28_2
GOTO FlatLeapYear_Handle_END
Day_28_2:
MOVIA 28
MOVAR R_Day
; ; ; GOTO FlatLeapYear_Handle_END
FlatLeapYear_Handle_END:
RETURN
FlatLeapYearLoop:
MOVR R_Year_L,A
MOVAR R_Temp0
MOVR R_Year_H,A
MOVAR R_Temp1
MOVIA 4
MOVAR R_Temp3
CALL TwoByteDivOneByte
MOVR R_Temp2,A
MOVAR R_REMAINDER0 ;//年份除4取余
MOVIA 100
MOVAR R_Temp3
CALL TwoByteDivOneByte
MOVR R_Temp2,A
MOVAR R_REMAINDER1 ;//年份除400取余
MOVR R_Year_L,A
MOVAR R_Temp0
MOVR R_Year_H,A
MOVAR R_Temp1
MOVIA 100
MOVAR R_Temp3
CALL TwoByteDivOneByte
MOVR R_Temp2,A
MOVAR R_REMAINDER2 ;//年份除100取余
RETURN