Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;PORT ADDRESS
- ;P0 EQU 0x80
- P0_0 EQU 0x80
- P0_1 EQU 0x81
- P0_2 EQU 0x82
- P0_3 EQU 0x83
- P0_4 EQU 0x84
- P0_5 EQU 0x85
- P0_6 EQU 0x86
- P0_7 EQU 0x87
- ;P1 EQU 0x90
- P1_0 EQU 0x90
- P1_1 EQU 0x91
- P1_2 EQU 0x92
- P1_3 EQU 0x93
- P1_4 EQU 0x94
- P1_5 EQU 0x95
- P1_6 EQU 0x96
- P1_7 EQU 0x97
- ;P2 EQU 0xA0
- P2_0 EQU 0xA0
- P2_1 EQU 0xA1
- P2_2 EQU 0xA2
- P2_3 EQU 0xA3
- P2_4 EQU 0xA4
- P2_5 EQU 0xA5
- P2_6 EQU 0xA6
- P2_7 EQU 0xA7 ;P3 EQU 0xB0
- P3_0 EQU 0xB0
- P3_1 EQU 0xB1
- P3_2 EQU 0xB2
- P3_3 EQU 0xB3
- P3_4 EQU 0xB4
- P3_5 EQU 0xB5
- P3_6 EQU 0xB6
- P3_7 EQU 0xB7
- FLAGS DATA 20H
- LASTREAD BIT FLAGS.0
- BITCNT DATA 21H
- BYTECNT DATA 22H
- SECS DATA 24H
- MINS DATA 25H
- HRS DATA 26H
- DATE DATA 28H
- MONTH DATA 29H
- YEAR DATA 2AH
- CONTROL DATA 2BH
- ALM_HOUR DATA 2CH
- ALM_MIN DATA 2DH
- ALM_CNTRL DATA 2EH
- LCD_DATA EQU 0A0H
- LCD_DB0 EQU 0A0H
- LCD_DB1 EQU 0A1H
- LCD_DB2 EQU 0A2H
- LCD_DB3 EQU 0A3H LCD_DB4 EQU 0A4H
- LCD_DB5 EQU 0A5H
- LCD_DB6 EQU 0A6H
- LCD_DB7 EQU 0A7H
- LCD_RS EQU 0B0H
- LCD_RW EQU 0B1H
- LCD_E EQU 0B6H
- UP_BTTN BIT 0xB1
- DOWN_BTTN BIT 0xB2
- ALARM_ON BIT 0x92
- _12_24 BIT 0x93
- T2EX BIT 0x91
- SET_HRS_BT BIT 0x80
- SET_MINS_BT BIT 0x81
- SET_SECS_BT BIT 0x82
- SET_DATES_BT BIT 0x83
- SET_MONTHS_BT BIT 0x84
- SET_YEARS_BT BIT 0x85
- ALARM_SET_HOURS_BT BIT 0x86
- ALARM_SET_MINS_BT BIT 0x87
- BUZZER BIT 0x94
- CONFIG EQU 38H
- ENTRYMODE EQU 6
- OFFCUR EQU 0AH
- BLINKCUR EQU 09H
- CLRDSP EQU 01H
- ONDSP EQU 0CH
- IEN0 EQU 0xA8
- MOV R0,00000000b
- MOV IEN0,@R0
- IPL0 EQU 0xB8
- MOV R0,00000101b
- MOV IPL0,@R0
- IPH0 EQU 0xB7
- MOV R0,00000101b
- MOV IPH0,@R0
- sbit TimerFlag2 = 0c8h^7 ;Naming the TF2 bit in the T2CON register, this register handles timer2
- delay1sec:
- MOV 0cch,#0H ;Setting TL2 with 00001110b
- MOV 0cdh,#0H ;Setting TH2 with whatever we want
- MOV 0cah,#0H ;Setting RCAP2L
- MOV 0cbh,#0H ;Setting RCAP2H
- MOV 0c9h,#1H ;To set if the counter counts up or down
- MOV R0,#0xA8 ;
- X2: MOV 0c8h,#4H ; Timer 2 is set
- X3: JNB TimerFlag2,X3 ;Counter has started and it will wait till it reaches FFFFh, and after that it will come out of
- the loop
- CPL TimerFlag2
- MOV 0c8h,#0H ;Disable timer2
- DJNZ R0, X2 ;
- ACALL TIME_UPDATE_SEC
- RET
- START:
- MOV YEAR,#97H ; SET YEAR TO 1997 ON BOOT
- MOV MONTH,#01H ; SET MONTH TO 01 ON BOOT
- MOV DATE,#01H ; SET DATE TO 01 ON BOOT
- MOV HRS,#00H ; SET HOUR TO 00 ON BOOT
- MOV SECS,#00H ; SET SECOND TO 00 ON BOOT
- MOV MINS,#00H ; SET MINUTE TO 00 ON BOOT
- ACALL OFF ; ALARM OFF ON BOOT
- MOV SP,#2FH ; POSITION STACK ABOVE BUFFER
- MOV IE,#0 ; DISABLE INTERUPTS
- SHOW_TIME:
- MOV A,#1
- MOV B,#7
- ACALL CUR_POS ; PLACE CURSOR FOR MONTH
- MOV A,MONTH ; LOAD MONTH DATA
- ACALL WRITE_BCD
- MOV A,#1
- MOV B,#10 ; PLACE CURSOR FOR DATE
- ACALL CUR_POS
- MOV A,DATE
- ACALL WRITE_BCD
- MOV A,#1
- MOV B,#13
- ACALL CUR_POS
- MOV A,YEAR
- ACALL WRITE_BCD
- MOV A,#2
- MOV B,#4
- ACALL CUR_POS MOV A,HRS
- ACALL WRITE_BCD
- MOV A,#2
- MOV B,#7
- ACALL CUR_POS
- MOV A,MINS
- ACALL WRITE_BCD
- MOV A,#2
- MOV B,#10
- ACALL CUR_POS
- MOV A,SECS
- ACALL WRITE_BCD
- ACALL CHECK_ALARM_TIME
- ACALL delay1sec
- SJMP SHOW_TIME
- INCREMENT_TIME:
- ACALL MDELAY
- MOV R0,00000000b
- MOV IEN0,@R0
- JNB SET_HRS_BT , Y1
- JMP UP_HOUR ; GOTO SET TIME IF PUSHED
- Y1:
- JNB SET_MINS_BT,Y2 ; GOTO SET TIME IF PUSHED
- JMP UP_MIN
- Y2:
- JNB SET_SECS_BT, Y3 ; GOTO SET TIME IF PUSHED
- JMP UP_SEC
- Y3:
- JNB SET_DATES_BT, Y4
- JMP UP_DATE Y4:
- JNB SET_MONTHS_BT,Y5
- JMP UP_MONTH
- Y5:
- JNB SET_YEARS_BT,Y6
- JMP UP_YEAR
- Y6:
- JNB ALARM_SET_HOURS_BT,Y7 ; GOTO SET ALARMS ELSE SHOW TIME
- JMP ALARMS
- Y7:
- JB ALARM_SET_MINS_BT,Y8 ; GOTO SET ALARMS ELSE SHOW TIME
- JMP ALARMS
- Y8:
- ACALL SHOW_TIME
- DECREMENT_TIME:
- ACALL MDELAY
- ACALL MDELAY
- MOV R0,00000000b
- MOV IEN0,@R0
- JNB SET_HRS_BT , W1
- JMP DOWN_HOUR ; GOTO SET TIME IF PUSHED
- W1:
- JNB SET_MINS_BT,W2 ; GOTO SET TIME IF PUSHED
- JMP DOWN_MIN
- W2:
- JNB SET_SECS_BT, W3 ; GOTO SET TIME IF PUSHED
- JMP DOWN_SEC
- W3:
- JNB SET_DATES_BT, W4
- JMP DOWN_DATE
- W4: JNB SET_MONTHS_BT,W5
- JMP DOWN_MONTH
- W5:
- JNB SET_YEARS_BT,W6
- JMP DOWN_YEAR
- W6:
- JNB ALARM_SET_HOURS_BT,W7 ; GOTO SET ALARMS ELSE SHOW TIME
- JMP ALARMS
- W7:
- JB ALARM_SET_MINS_BT,W8 ; GOTO SET ALARMS ELSE SHOW TIME
- JMP ALARMS
- W8:
- ACALL SHOW_TIME
- OK_MONTH: ; PLACES NEW MONTH DATA INTO REGISTER
- MOV MONTH,A
- ACALL UPDATE
- AJMP SHOW_TIME
- UP_MONTH: ; CHANGES MONTH DATA UP BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#0
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB ' ',0 ; PRINT '*' FOR MONTH
- MOV A,#1
- MOV B,#6
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0
- MOV R1,#MONTH MOV A,@R1
- MOV R4,A
- ACALL CHECK_BCD
- CJNE A,#13H,OK_MONTH
- MOV A,#1
- MOV MONTH,A
- ACALL UPDATE
- AJMP SHOW_TIME
- DOWN_MONTH: ; CHANGES MONTH DATA DOWN BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#0
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB ' ',0 ; PRINT '*' FOR MONTH
- MOV A,#1
- MOV B,#6
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0
- MOV R1,#MONTH
- MOV A,@R1
- MOV R4,A
- ACALL CHECK_BCD_DOWN
- DEC A
- CJNE A,#0,OK_MONTH
- MOV A,#12H
- MOV MONTH,A
- ACALL UPDATE
- AJMP SHOW_TIME
- OK_DATE: ; PLACES NEW DATE DATA INTO REGISTER
- MOV DATE,A
- ACALL UPDATE
- AJMP SHOW_TIME
- UP_DATE: ; CHANGES DATE DATA UP BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#6
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB ' ',0 ; ERASE '*' BY MONTH
- MOV A,#1
- MOV B,#9
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0 ; PRINT '*' BY DATE
- MOV R1,#DATE
- MOV A,@R1
- MOV R4,A
- ACALL CHECK_BCD
- CJNE A,#32H,OK_DATE
- MOV A,#1
- MOV DATE,A
- ACALL UPDATE
- AJMP SHOW_TIME
- DOWN_DATE: ; CHANGES DATE DATA DOWN BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#6 ACALL CUR_POS
- ACALL PRINT_LCD
- DB ' ',0 ; ERASE '*' BY MONTH
- MOV A,#1
- MOV B,#9
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0 ; PRINT '*' BY DATE
- MOV R1,#DATE
- MOV A,@R1
- MOV R4,A
- ACALL CHECK_BCD_DOWN
- DEC A
- CJNE A,#0,OK_DATE
- MOV A,#31H
- MOV DATE,A
- ACALL UPDATE
- AJMP SHOW_TIME
- OK_YEAR: ; PLACES NEW YEAR DATA INTO REGISTER
- MOV YEAR,A
- ACALL UPDATE
- AJMP SHOW_TIME
- UP_YEAR: ; CHANGES YEAR DATA UP BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#9
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '-',0 ; PRINT '-' BESIDE DATE
- MOV A,#1 MOV B,#12
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0 ; PRINT '*' BESIDE YEAR
- MOV R1,#YEAR
- MOV A,@R1
- INC A
- CJNE A,#9AH,OK_YEAR
- MOV A,#97H
- MOV YEAR,A
- ACALL UPDATE
- AJMP SHOW_TIME
- DOWN_YEAR: ; CHANGES YEAR DATA DOWN BY 1
- ACALL MDELAY
- MOV A,#1
- MOV B,#9
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '-',0 ; PRINT '-' BESIDE DATE
- MOV A,#1
- MOV B,#12
- ACALL CUR_POS
- ACALL PRINT_LCD
- DB '*',0 ; PRINT '*' BESIDE YEAR
- MOV R1,#YEAR
- MOV A,@R1
- DEC A
- CJNE A,#96H,OK_YEAR
- MOV A,#99H
- MOV YEAR,A ACALL UPDATE
- AJMP SHOW_TIME
Advertisement
Add Comment
Please, Sign In to add comment