;====================================================================
; ??????? - ??8051????
; ??:????????????????????
;====================================================================
; ?????
TIME EQU 30H ; ????????(7??: ???????)
DISBUF EQU 37H ; ?????(8??)
MODE EQU 3FH ; ????(1=??,2=??,3=??1,4=??2)
ITEM EQU 40H ; ?????(0=???,1-3=?????)
FLASH EQU 41H ; ?????
ALARM EQU 42H ; ????
ALARM1H EQU 43H ; ??1??
ALARM1M EQU 44H ; ??1??
ALARM2H EQU 45H ; ??2??
ALARM2M EQU 46H ; ??2??
ALARM1E EQU 47H ; ??1????
ALARM2E EQU 48H ; ??2????
KEYCNT EQU 49H ; ?????
ALCNT EQU 4AH ; ?????
; I/O????
PORTD EQU P0 ; ?????
PORTE EQU P2 ; ?????
; ???
LSA BIT P2.2 ; ?????A
LSB BIT P2.3 ; ?????B
LSC BIT P2.4 ; ?????C
BZ BIT P2.5 ; ?????
KEY1 BIT P3.0 ; ?????
KEY2 BIT P3.1 ; ????/????
KEY3 BIT P3.2 ; ????
KEY4 BIT P3.3 ; ????
DSIO BIT P3.4 ; DS1302??
RST BIT P3.5 ; DS1302??
SCLK BIT P3.6 ; DS1302??
; ????
MODE_TIME EQU 1 ; ?????
MODE_DATE EQU 2 ; ?????
MODE_ALARM1 EQU 3 ; ??1
MODE_ALARM2 EQU 4 ; ??2
; ??????
SEGCODE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,77H ; 0-9,-,A
;====================================================================
; ???
;====================================================================
ORG 0000H
LJMP MAIN ; ??????
; ???0??????
ORG 000BH
LJMP TIMER0_ISR
;====================================================================
; ???????
;====================================================================
MAIN: ; ?????
MOV SP, #60H
; ?????
MOV MODE, #MODE_TIME
MOV ITEM, #0
MOV FLASH, #0
MOV ALARM, #0
MOV ALARM1H,#7 ; ??1??7:30
MOV ALARM1M,#30
MOV ALARM2H,#12 ; ??2??12:00
MOV ALARM2M,#0
MOV ALARM1E,#1 ; ??1??
MOV ALARM2E,#1 ; ??2??
; ???DS1302??
MOV R0, #TIME
MOV @R0, #0 ; ?
INC R0
MOV @R0, #0 ; ?
INC R0
MOV @R0, #12 ; ?(BCD)
INC R0
MOV @R0, #1 ; ?
INC R0
MOV @R0, #1 ; ?
INC R0
MOV @R0, #2 ; ??
INC R0
MOV @R0, #23 ; ?(BCD)
ACALL DS1302_INIT
; ??????0 (10ms??)
MOV TMOD, #01H ; ???0??1
MOV TH0, #0DCH ; 10ms??
MOV TL0, #00H
SETB ET0 ; ?????0??
SETB TR0 ; ?????0
SETB EA ; ????
; ???
MAIN_LOOP:
ACALL DS1302_READTIME ; ????
ACALL KEY_PROCESS ; ????
ACALL UPDATE_DISPLAY ; ???????
ACALL DISPLAY_DIGITS ; ?????
SJMP MAIN_LOOP
;====================================================================
; DS1302??????
;====================================================================
; ?DS1302?????
DS1302_WRITE:
; ??: R0=??, R1=??
CLR RST
NOP
CLR SCLK
NOP
SETB RST
NOP
; ???
MOV R2, #8
DS1302_W_ADDR:
MOV A, R0
RRC A
MOV DSIO, C
SETB SCLK
NOP
CLR SCLK
NOP
DJNZ R2, DS1302_W_ADDR
; ???
MOV R2, #8
DS1302_W_DATA:
MOV A, R1
RRC A
MOV DSIO, C
SETB SCLK
NOP
CLR SCLK
NOP
DJNZ R2, DS1302_W_DATA
CLR RST
NOP
RET
; ?DS1302?????
DS1302_READ:
; ??: R0=??
; ??: R1=??
CLR RST
NOP
CLR SCLK
NOP
SETB RST
NOP
; ???
MOV R2, #8
DS1302_R_ADDR:
MOV A, R0
RRC A
MOV DSIO, C
SETB SCLK
NOP
CLR SCLK
NOP
DJNZ R2, DS1302_R_ADDR
; ???
MOV R1, #0
MOV R2, #8
DS1302_R_DATA:
SETB SCLK
NOP
MOV C, DSIO
RRC A
MOV R1, A
CLR SCLK
NOP
DJNZ R2, DS1302_R_DATA
; ????,??RRC???,?DS1302??????
MOV A, R1
MOV B, #0
MOV R2, #8
BIT_REVERSE:
RRC A
RLC B
DJNZ R2, BIT_REVERSE
MOV R1, B
CLR RST
NOP
SETB SCLK
NOP
CLR DSIO
NOP
SETB DSIO
NOP
RET
; ???DS1302
DS1302_INIT:
; ?????
MOV R0, #8EH
MOV R1, #0
ACALL DS1302_WRITE
; ??????
MOV R0, #WRITE_ADDR
MOV R1, #TIME
MOV R2, #7
DS1302_INIT_LOOP:
MOV A, @R0
MOV R3, A
MOV A, @R1
; ???BCD?
ACALL DEC_TO_BCD
MOV R4, A
ACALL DS1302_WRITE
INC R0
INC R1
DJNZ R2, DS1302_INIT_LOOP
; ?????
MOV R0, #8EH
MOV R1, #80H
ACALL DS1302_WRITE
RET
; ??DS1302??
DS1302_READTIME:
MOV R0, #READ_ADDR
MOV R1, #TIME
MOV R2, #7
DS1302_RT_LOOP:
MOV A, @R0
MOV R3, A
ACALL DS1302_READ
MOV A, R1
; ?BCD???????
ACALL BCD_TO_DEC
MOV @R1, A
INC R0
INC R1
DJNZ R2, DS1302_RT_LOOP
RET
; DS1302???
READ_ADDR: DB 81H,83H,85H,87H,89H,8BH,8DH
WRITE_ADDR: DB 80H,82H,84H,86H,88H,8AH,8CH
;====================================================================
; ???????
;====================================================================
; ???????
UPDATE_DISPLAY:
; ???????
MOV R0, #DISBUF
MOV R2, #8
CLR_DISBUF:
MOV @R0, #0
INC R0
DJNZ R2, CLR_DISBUF
; ??????????
MOV A, MODE
CJNE A, #MODE_TIME, CHECK_DATE
ACALL UPDATE_TIME_DISPLAY
LJMP UPDATE_DONE
CHECK_DATE:
CJNE A, #MODE_DATE, CHECK_ALARM1
ACALL UPDATE_DATE_DISPLAY
LJMP UPDATE_DONE
CHECK_ALARM1:
CJNE A, #MODE_ALARM1, CHECK_ALARM2
ACALL UPDATE_ALARM1_DISPLAY
LJMP UPDATE_DONE
CHECK_ALARM2:
ACALL UPDATE_ALARM2_DISPLAY
UPDATE_DONE:
RET
; ??????
UPDATE_TIME_DISPLAY:
; ???????
MOV A, TIME+2 ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+0, A ; ???
MOV DISBUF+1, B ; ???
MOV DISBUF+2, #10 ; ??
MOV A, TIME+1 ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+3, A ; ???
MOV DISBUF+4, B ; ???
MOV DISBUF+5, #10 ; ??
MOV A, TIME ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+6, A ; ???
MOV DISBUF+7, B ; ???
; ????
MOV A, ITEM
JZ NO_FLASH_TIME
MOV A, FLASH
CJNE A, #25, NO_FLASH_TIME
MOV A, ITEM
CJNE A, #1, CHECK_MIN_TIME
; ???
MOV DISBUF+0, #0
MOV DISBUF+1, #0
LJMP NO_FLASH_TIME
CHECK_MIN_TIME:
CJNE A, #2, CHECK_SEC_TIME
; ???
MOV DISBUF+3, #0
MOV DISBUF+4, #0
LJMP NO_FLASH_TIME
CHECK_SEC_TIME:
; ???
MOV DISBUF+6, #0
MOV DISBUF+7, #0
NO_FLASH_TIME:
RET
; ??????
UPDATE_DATE_DISPLAY:
; ???????
MOV A, TIME+6 ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+0, A ; ???
MOV DISBUF+1, B ; ???
MOV DISBUF+2, #10 ; ??
MOV A, TIME+4 ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+3, A ; ???
MOV DISBUF+4, B ; ???
MOV DISBUF+5, #10 ; ??
MOV A, TIME+3 ; ?(???)
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+6, A ; ???
MOV DISBUF+7, B ; ???
; ????
MOV A, ITEM
JZ NO_FLASH_DATE
MOV A, FLASH
CJNE A, #25, NO_FLASH_DATE
MOV A, ITEM
CJNE A, #1, CHECK_MONTH_DATE
; ???
MOV DISBUF+0, #0
MOV DISBUF+1, #0
LJMP NO_FLASH_DATE
CHECK_MONTH_DATE:
CJNE A, #2, CHECK_DAY_DATE
; ???
MOV DISBUF+3, #0
MOV DISBUF+4, #0
LJMP NO_FLASH_DATE
CHECK_DAY_DATE:
; ???
MOV DISBUF+6, #0
MOV DISBUF+7, #0
NO_FLASH_DATE:
RET
; ????1??
UPDATE_ALARM1_DISPLAY:
; ????1??
MOV A, ALARM1H
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+0, A ; ???
MOV DISBUF+1, B ; ???
MOV DISBUF+2, #10 ; ??
MOV A, ALARM1M
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+3, A ; ???
MOV DISBUF+4, B ; ???
; ??????
MOV A, ALARM1E
JZ ALARM1_DISABLED
MOV DISBUF+5, #11 ; 'A'????
LJMP CHECK_ALARM1_FLASH
ALARM1_DISABLED:
MOV DISBUF+5, #10 ; '-'????
CHECK_ALARM1_FLASH:
; ????
MOV A, ITEM
JZ NO_FLASH_ALARM1
MOV A, FLASH
CJNE A, #25, NO_FLASH_ALARM1
MOV A, ITEM
CJNE A, #1, CHECK_MIN_ALARM1
; ???
MOV DISBUF+0, #0
MOV DISBUF+1, #0
LJMP NO_FLASH_ALARM1
CHECK_MIN_ALARM1:
; ???
MOV DISBUF+3, #0
MOV DISBUF+4, #0
NO_FLASH_ALARM1:
RET
; ????2??
UPDATE_ALARM2_DISPLAY:
; ????2??
MOV A, ALARM2H
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+0, A ; ???
MOV DISBUF+1, B ; ???
MOV DISBUF+2, #10 ; ??
MOV A, ALARM2M
MOV B, A
MOV A, B
MOV B, #10
DIV AB
MOV DISBUF+3, A ; ???
MOV DISBUF+4, B ; ???
; ??????
MOV A, ALARM2E
JZ ALARM2_DISABLED
MOV DISBUF+5, #11 ; 'A'????
LJMP CHECK_ALARM2_FLASH
ALARM2_DISABLED:
MOV DISBUF+5, #10 ; '-'????
CHECK_ALARM2_FLASH:
; ????
MOV A, ITEM
JZ NO_FLASH_ALARM2
MOV A, FLASH
CJNE A, #25, NO_FLASH_ALARM2
MOV A, ITEM
CJNE A, #1, CHECK_MIN_ALARM2
; ???
MOV DISBUF+0, #0
MOV DISBUF+1, #0
LJMP NO_FLASH_ALARM2
CHECK_MIN_ALARM2:
; ???
MOV DISBUF+3, #0
MOV DISBUF+4, #0
NO_FLASH_ALARM2:
RET
; ???????
DISPLAY_DIGITS:
MOV R0, #DISBUF
MOV R2, #8
MOV R3, #0 ; ????
DISPLAY_LOOP:
; ????
MOV A, R3
JZ DISP_BIT0
CJNE A, #1, CHECK_BIT2
SETB LSA
CLR LSB
CLR LSC
LJMP DISP_CONT
CHECK_BIT2:
CJNE A, #2, CHECK_BIT3
CLR LSA
SETB LSB
CLR LSC
LJMP DISP_CONT
CHECK_BIT3:
CJNE A, #3, CHECK_BIT4
SETB LSA
SETB LSB
CLR LSC
LJMP DISP_CONT
CHECK_BIT4:
CJNE A, #4, CHECK_BIT5
CLR LSA
CLR LSB
SETB LSC
LJMP DISP_CONT
CHECK_BIT5:
CJNE A, #5, CHECK_BIT6
SETB LSA
CLR LSB
SETB LSC
LJMP DISP_CONT
CHECK_BIT6:
CJNE A, #6, CHECK_BIT7
CLR LSA
SETB LSB
SETB LSC
LJMP DISP_CONT
CHECK_BIT7:
SETB LSA
SETB LSB
SETB LSC
LJMP DISP_CONT
DISP_BIT0:
CLR LSA
CLR LSB
CLR LSC
DISP_CONT:
; ????
MOV A, @R0
MOV DPTR, #SEGCODE
MOVC A, @A+DPTR
MOV PORTD, A
; ??
MOV R7, #2
DISP_DELAY:
NOP
NOP
NOP
NOP
DJNZ R7, DISP_DELAY
; ??
CLR PORTD
; ???
INC R0
INC R3
DJNZ R2, DISPLAY_LOOP
RET
;====================================================================
; ????
;====================================================================
; ????
KEY_PROCESS:
; ??KEY1 - ?????
JB KEY1, CHECK_KEY2
ACALL KEY_DEBOUNCE
JB KEY1, CHECK_KEY2
; ??KEY1??
MOV A, ITEM
JNZ KEY1_SETTING_MODE ; ??????
; ??????
MOV A, MODE
CJNE A, #MODE_ALARM1, CHECK_ALARM2_KEY1
; ??1?? - ????1??
CPL ALARM1E
LJMP KEY1_DONE
CHECK_ALARM2_KEY1:
CJNE A, #MODE_ALARM2, KEY1_ENTER_SETTING
; ??2?? - ????2??
CPL ALARM2E
LJMP KEY1_DONE
KEY1_ENTER_SETTING:
; ???? - ????
MOV ITEM, #1
LJMP KEY1_DONE
KEY1_SETTING_MODE:
; ?????? - ?????
MOV A, MODE
CJNE A, #MODE_TIME, CHECK_DATE_KEY1
; ????
INC ITEM
MOV A, ITEM
CJNE A, #4, KEY1_DONE
MOV ITEM, #0
LJMP KEY1_DONE
CHECK_DATE_KEY1:
CJNE A, #MODE_DATE, CHECK_ALARM1_KEY1
; ????
INC ITEM
MOV A, ITEM
CJNE A, #4, KEY1_DONE
MOV ITEM, #0
LJMP KEY1_DONE
CHECK_ALARM1_KEY1:
CJNE A, #MODE_ALARM1, CHECK_ALARM2_KEY1_SET
; ??1??
INC ITEM
MOV A, ITEM
CJNE A, #3, KEY1_DONE
MOV ITEM, #0
LJMP KEY1_DONE
CHECK_ALARM2_KEY1_SET:
; ??2??
INC ITEM
MOV A, ITEM
CJNE A, #3, KEY1_DONE
MOV ITEM, #0
KEY1_DONE:
; ??????
KEY1_WAIT_RELEASE:
JB KEY1, CHECK_KEY2
SJMP KEY1_WAIT_RELEASE
CHECK_KEY2:
; ??KEY2 - ????/????
JB KEY2, CHECK_KEY3
ACALL KEY_DEBOUNCE
JB KEY2, CHECK_KEY3
; ??KEY2??
MOV A, ITEM
JNZ KEY2_EXIT_SETTING ; ?????? - ????
; ?????? - ????
INC MODE
MOV A, MODE
CJNE A, #5, KEY2_DONE
MOV MODE, #1
LJMP KEY2_DONE
KEY2_EXIT_SETTING:
; ??????
MOV ITEM, #0
; ?????DS1302
MOV A, MODE
CJNE A, #MODE_TIME, CHECK_DATE_KEY2
; ????
MOV R0, #8EH
MOV R1, #0
ACALL DS1302_WRITE ; ?????
MOV R0, #80H ; ???
MOV R1, #TIME
MOV R2, #3 ; ???????
SAVE_TIME_LOOP:
MOV A, @R0
MOV R3, A
MOV A, @R1
; ???BCD?
ACALL DEC_TO_BCD
MOV R4, A
ACALL DS1302_WRITE
INC R0
INC R0
INC R1
DJNZ R2, SAVE_TIME_LOOP
MOV R0, #8EH
MOV R1, #80H
ACALL DS1302_WRITE ; ?????
LJMP KEY2_DONE
CHECK_DATE_KEY2:
CJNE A, #MODE_DATE, KEY2_DONE
; ????
MOV R0, #8EH
MOV R1, #0
ACALL DS1302_WRITE ; ?????
MOV R0, #86H ; ???
MOV R1, #TIME+3
MOV R2, #3 ; ???????
SAVE_DATE_LOOP:
MOV A, @R0
MOV R3, A
MOV A, @R1
; ???BCD?
ACALL DEC_TO_BCD
MOV R4, A
ACALL DS1302_WRITE
INC R0
INC R0
INC R1
DJNZ R2, SAVE_DATE_LOOP
MOV R0, #8EH
MOV R1, #80H
ACALL DS1302_WRITE ; ?????
KEY2_DONE:
; ??????
KEY2_WAIT_RELEASE:
JB KEY2, CHECK_KEY3
SJMP KEY2_WAIT_RELEASE
CHECK_KEY3:
; ??KEY3 - ????
JB KEY3, CHECK_KEY4
ACALL KEY_DEBOUNCE
JB KEY3, CHECK_KEY4
; ??KEY3?? - ????????
MOV A, ITEM
JZ KEY3_DONE
MOV A, MODE
CJNE A, #MODE_TIME, CHECK_DATE_KEY3
; ????
MOV A, ITEM
CJNE A, #1, CHECK_MIN_INC
; ?+1
MOV A, TIME+2
INC A
MOV B, #24
CJNE A, B, CHECK_HOUR_INC
MOV TIME+2, #0
LJMP KEY3_DONE
CHECK_HOUR_INC:
MOV TIME+2, A
LJMP KEY3_DONE
CHECK_MIN_INC:
CJNE A, #2, CHECK_SEC_INC
; ?+1
MOV A, TIME+1
INC A
MOV B, #60
CJNE A, B, CHECK_MIN_INC_DONE
MOV TIME+1, #0
LJMP KEY3_DONE
CHECK_MIN_INC_DONE:
MOV TIME+1, A
LJMP KEY3_DONE
CHECK_SEC_INC:
; ?+1
MOV A, TIME
INC A
MOV B, #60
CJNE A, B, CHECK_SEC_INC_DONE
MOV TIME, #0
LJMP KEY3_DONE
CHECK_SEC_INC_DONE:
MOV TIME, A
LJMP KEY3_DONE
CHECK_DATE_KEY3:
CJNE A, #MODE_DATE, CHECK_ALARM1_KEY3
; ????
MOV A, ITEM
CJNE A, #1, CHECK_MONTH_INC
; ?+1
MOV A, TIME+6
INC A
MOV B, #100
CJNE A, B, CHECK_YEAR_INC
MOV TIME+6, #0
LJMP KEY3_DONE
CHECK_YEAR_INC:
MOV TIME+6, A
LJMP KEY3_DONE
CHECK_MONTH_INC:
CJNE A, #2, CHECK_DAY_INC
; ?+1
MOV A, TIME+4
INC A
MOV B, #13
CJNE A, B, CHECK_MONTH_INC_DONE
MOV TIME+4, #1
LJMP KEY3_DONE
CHECK_MONTH_INC_DONE:
MOV TIME+4, A
LJMP KEY3_DONE
CHECK_DAY_INC:
; ?+1
MOV A, TIME+3
INC A
MOV B, #32
CJNE A, B, CHECK_DAY_INC_DONE
MOV TIME+3, #1
LJMP KEY3_DONE
CHECK_DAY_INC_DONE:
MOV TIME+3, A
LJMP KEY3_DONE
CHECK_ALARM1_KEY3:
CJNE A, #MODE_ALARM1, CHECK_ALARM2_KEY3
; ??1??
MOV A, ITEM
CJNE A, #1, CHECK_ALARM1_MIN_INC
; ?+1
MOV A, ALARM1H
INC A
MOV B, #24
CJNE A, B, CHECK_ALARM1_HOUR_INC
MOV ALARM1H, #0
LJMP KEY3_DONE
CHECK_ALARM1_HOUR_INC:
MOV ALARM1H, A
LJMP KEY3_DONE
CHECK_ALARM1_MIN_INC:
; ?+1
MOV A, ALARM1M
INC A
MOV B, #60
CJNE A, B, CHECK_ALARM1_MIN_INC_DONE
MOV ALARM1M, #0
LJMP KEY3_DONE
CHECK_ALARM1_MIN_INC_DONE:
MOV ALARM1M, A
LJMP KEY3_DONE
CHECK_ALARM2_KEY3:
; ??2??
MOV A, ITEM
CJNE A, #1, CHECK_ALARM2_MIN_INC
; ?+1
MOV A, ALARM2H
INC A
MOV B, #24
CJNE A, B, CHECK_ALARM2_HOUR_INC
MOV ALARM2H, #0
LJMP KEY3_DONE
CHECK_ALARM2_HOUR_INC:
MOV ALARM2H, A
LJMP KEY3_DONE
CHECK_ALARM2_MIN_INC:
; ?+1
MOV A, ALARM2M
INC A
MOV B, #60
CJNE A, B, CHECK_ALARM2_MIN_INC_DONE
MOV ALARM2M, #0
LJMP KEY3_DONE
CHECK_ALARM2_MIN_INC_DONE:
MOV ALARM2M, A
KEY3_DONE:
; ??????
KEY3_WAIT_RELEASE:
JB KEY3, CHECK_KEY4
SJMP KEY3_WAIT_RELEASE
CHECK_KEY4:
; ??KEY4 - ????
JB KEY4, KEY_DONE
ACALL KEY_DEBOUNCE
JB KEY4, KEY_DONE
; ??KEY4?? - ????????
MOV A, ITEM
JZ KEY4_DONE
MOV A, MODE
CJNE A, #MODE_TIME, CHECK_DATE_KEY4
; ????
MOV A, ITEM
CJNE A, #1, CHECK_MIN_DEC
; ?-1
MOV A, TIME+2
JNZ HOUR_DEC
MOV A, #24
HOUR_DEC:
DEC A
MOV TIME+2, A
LJMP KEY4_DONE
CHECK_MIN_DEC:
CJNE A, #2, CHECK_SEC_DEC
; ?-1
MOV A, TIME+1
JNZ MIN_DEC
MOV A, #60
MIN_DEC:
DEC A
MOV TIME+1, A
LJMP KEY4_DONE
CHECK_SEC_DEC:
; ?-1
MOV A, TIME
JNZ SEC_DEC
MOV A, #60
SEC_DEC:
DEC A
MOV TIME, A
LJMP KEY4_DONE
CHECK_DATE_KEY4:
CJNE A, #MODE_DATE, CHECK_ALARM1_KEY4
; ????
MOV A, ITEM
CJNE A, #1, CHECK_MONTH_DEC
; ?-1
MOV A, TIME+6
JNZ YEAR_DEC
MOV A, #100
YEAR_DEC:
DEC A
MOV TIME+6, A
LJMP KEY4_DONE
CHECK_MONTH_DEC:
CJNE A, #2, CHECK_DAY_DEC
; ?-1
MOV A, TIME+4
CJNE A, #1, MONTH_DEC
MOV A, #13
MONTH_DEC:
DEC A
MOV TIME+4, A
LJMP KEY4_DONE
CHECK_DAY_DEC:
; ?-1
MOV A, TIME+3
CJNE A, #1, DAY_DEC
MOV A, #32
DAY_DEC:
DEC A
MOV TIME+3, A
LJMP KEY4_DONE
CHECK_ALARM1_KEY4:
CJNE A, #MODE_ALARM1, CHECK_ALARM2_KEY4
; ??1??
MOV A, ITEM
CJNE A, #1, CHECK_ALARM1_MIN_DEC
; ?-1
MOV A, ALARM1H
JNZ ALARM1_HOUR_DEC
MOV A, #24
ALARM1_HOUR_DEC:
DEC A
MOV ALARM1H, A
LJMP KEY4_DONE
CHECK_ALARM1_MIN_DEC:
; ?-1
MOV A, ALARM1M
JNZ ALARM1_MIN_DEC
MOV A, #60
ALARM1_MIN_DEC:
DEC A
MOV ALARM1M, A
LJMP KEY4_DONE
CHECK_ALARM2_KEY4:
; ??2??
MOV A, ITEM
CJNE A, #1, CHECK_ALARM2_MIN_DEC
; ?-1
MOV A, ALARM2H
JNZ ALARM2_HOUR_DEC
MOV A, #24
ALARM2_HOUR_DEC:
DEC A
MOV ALARM2H, A
LJMP KEY4_DONE
CHECK_ALARM2_MIN_DEC:
; ?-1
MOV A, ALARM2M
JNZ ALARM2_MIN_DEC
MOV A, #60
ALARM2_MIN_DEC:
DEC A
MOV ALARM2M, A
KEY4_DONE:
; ??????
KEY4_WAIT_RELEASE:
JB KEY4, KEY_DONE
SJMP KEY4_WAIT_RELEASE
KEY_DONE:
RET
; ????
KEY_DEBOUNCE:
MOV R7, #10
KEY_DB_LOOP:
NOP
NOP
NOP
NOP
DJNZ R7, KEY_DB_LOOP
RET
;====================================================================
; ????
;====================================================================
ALARM_CHECK:
; ????
MOV A, TIME+2 ; ?
MOV R4, A
MOV A, TIME+1 ; ?
MOV R5, A
MOV A, TIME ; ?
MOV R6, A
; ????1
MOV A, ALARM1E
JZ CHECK_ALARM2
MOV A, R4
CJNE A, ALARM1H, CHECK_ALARM2
MOV A, R5
CJNE A, ALARM1M, CHECK_ALARM2
MOV A, R6
CJNE A, #0, CHECK_ALARM2
; ??1??
SETB ALARM
LJMP CHECK_ALARM_TIME
CHECK_ALARM2:
; ????2
MOV A, ALARM2E
JZ CHECK_ALARM_TIME
MOV A, R4
CJNE A, ALARM2H, CHECK_ALARM_TIME
MOV A, R5
CJNE A, ALARM2M, CHECK_ALARM_TIME
MOV A, R6
CJNE A, #0, CHECK_ALARM_TIME
; ??2??
SETB ALARM
LJMP CHECK_ALARM_TIME
CHECK_ALARM_TIME:
; ???????
JNB ALARM, ALARM_OFF
; ???? - ?????
INC ALCNT
MOV A, ALCNT
CJNE A, #50, CHECK_ALARM_ON
SETB BZ
LJMP ALARM_CHECK_DONE
CHECK_ALARM_ON:
MOV A, ALCNT
CJNE A, #100, ALARM_CHECK_DONE
CLR BZ
MOV ALCNT, #0
LJMP ALARM_CHECK_DONE
ALARM_OFF:
CLR ALARM
CLR BZ
MOV ALCNT, #0
ALARM_CHECK_DONE:
; ???????
INC FLASH
MOV A, FLASH
CJNE A, #50, AC_DONE
MOV FLASH, #0
AC_DONE:
RET
;====================================================================
; ????
;====================================================================
; BCD?????
BCD_TO_DEC:
; ??: A=BCD?
; ??: A=????
PUSH B
MOV B, #10
MOV R0, A
ANL A, #0F0H
SWAP A
MOV R1, A ; ??BCD
MOV A, R0
ANL A, #0FH ; ??BCD
ADD A, R1 ; ??????
POP B
RET
; ????BCD
DEC_TO_BCD:
; ??: A=????
; ??: A=BCD?
PUSH B
MOV B, #10
MOV R0, A
MOV A, R0
MOV B, #10
DIV AB ; A=??, B=??
SWAP A ; ?????4?
ORL A, B ; ???BCD?
POP B
RET
; ???0??????
TIMER0_ISR:
; ?????????
MOV TH0, #0DCH
MOV TL0, #00H
; ??????
ACALL ALARM_CHECK
; ????
ACALL DISPLAY_DIGITS
; ????
RETI
END 报错assembling 123.a51...
123.a51(193): error A39: REGISTER OPERAND EXPECTED
123.a51(215): warning A52: VALUE HAS BEEN TRUNCATED TO 8 BITS
123.a51(591): error A48: DATA-ADDRESS EXPECTED
123.a51(759): error A51: TARGET OUT OF RANGE
123.a51(761): error A51: TARGET OUT OF RANGE
123.a51(765): error A51: TARGET OUT OF RANGE
123.a51(921): error A51: TARGET OUT OF RANGE
123.a51(923): error A51: TARGET OUT OF RANGE
123.a51(927): error A51: TARGET OUT OF RANGE
123.a51(1083): error A51: TARGET OUT OF RANGE
123.a51(1086): error A51: TARGET OUT OF RANGE
123.a51(1089): error A51: TARGET OUT OF RANGE
123.a51(1092): error A51: TARGET OUT OF RANGE
123.a51(1098): error A8: ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL
123.a51 - 13 Error(s), 1 Warning(s).
最新发布