Вы находитесь на странице: 1из 40

$mod51

RB0
EQU
RB1
EQU
RB2
EQU

00H
08H
10H

; Select Register Bank 0


; Select Register Bank 1 ...poke to PSW to use
; Select Register Bank 1 ...poke to PSW to use

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ROW1
EQU
P3.0
ROW2
EQU
P3.1
ROW3
EQU
P3.2
ROW4
EQU
P3.3
COL1
EQU
P3.4
COL2
EQU
P3.5
COL3
EQU
P3.6
KEYS
EQU
P3
;RELAYS EQU
RL1
EQU

P1
P1.7

TIMES

80

EQU

SDA1
EQU
P2.0
SCL1
EQU
P2.1
WTCMD EQU 10100000B
RDCMD EQU 10100001B
SDA
SCL

EQU
EQU

DS1307W
DS1307R

EQU
EQU

;SDA=PIN5
;SCL=PIN6
;WRITE DATA COMMAND Note 3
;READ DATA COMMAND Note 3

P2.0 ;SDA=PIN5
P2.1
;SCL=PIN6
0D0H
0D1H

; SLAVE ADDRESS 1101 000 + 0 TO WRITE


; SLAVE ADDRESS 1101 000 + 1 TO READ

; ***MACRO'S***
SCL_HIGH MACRO
SETB SCL
; SET SCL HIGH
JNB
SCL,$
; LOOP UNTIL STRONG 1 ON SCL
ENDM
;'WTCMD1 EQU 10100010B
;WRITE DATA COMMAND Note 3
;RDCMD1 EQU 10100011B
;READ DATA COMMAND Note 3
; ***LCD
LCD_RS
LCD_E
LCD_DB4
LCD_DB5
LCD_DB6
LCD_DB7

CONTROL***
EQU
P0.0
EQU
P0.2
EQU
P2.4
EQU
P2.5
EQU
P2.6
EQU
P2.7

;LCD REGISTER SELECT LINE


;LCD ENABLE LINE
;PORT 2 IS USED FOR DATA
;USED FOR DATA
;FOR DATA
;FOR DATA

; ***CURSOR CONTROL INSTRUCTIONS***


OFFCUR
EQU
BLINKCUR EQU

0CH
0DH

; ***DISPLAY CONTROL INSTRUCTIONS***


CLRDSP
ONDSP

EQU
EQU

01H
0CH

; ***SYSTEM INSTRUCTIONS***
CONFIG
EQU
ENTRYMODE EQU

28H
6

; 4-BIT DATA,2 LINES,5X7 MATRIX LCD


; INCREMENT CURSOR DON'T SHIFT DISPLAY

KEYB_CLOCK
KEYB_DATA

EQU
EQU

DSEG
ORG

; This is internal data memory


; Bit adressable memory

20H

FLAGS: DS
LASTREAD
SQW
ACKS
BUS_FLT
_2W_BUSY
COMM
AM
AMS

BIT
BIT
BIT
BIT
BIT
BIT

P0.7
P0.6

1
FLAGS.0
FLAGS.4
FLAGS.5
FLAGS.6
FLAGS.7
FLAGS.2
BIT
FLAGS.1
BIT
FLAGS.3

FLAGSS: DS
1
TMP BIT
FLAGSS.0
ON_TMP BIT FLAGSS.1
SECS:
MINS:
HRS:
DAY:
DATE1:
MONTH:
YEAR:
R30:
COUNT: DS
KEY:
KEY1:
VAL_1:
VAL_2:
VAL_3:
VAL_4:
VAL_5:
DEVICE:

DS
DS
DS
DS
DS
DS
DS
1
1
1
1
1
1
1
1
1
DS
DS

1
1
1

DS
DS
DS

1
1
1
25

DS

75

;
;

'
'
1

DS
DS

STACK: DS
ALARMTIME:

1
1

DS

DS
DS
DS
DS
DS
DS

ALM_HOUR:
ALM_MIN:
ALM_AM: DS
TIM:
TIME_DELAY:
TIM_DEL:

1
1
1
1

' SECONDS STORAGE


; ' MINUTES '
; ' HOURS
'
; ' DAY
'
DATE
'
'
MONTH
'
'
; ' YEAR

RAM
'
'
'

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CSEG
; Code begins here
; ---------==========----------==========---------=========--------; Main routine. Program execution starts here.
; ---------==========----------==========---------=========--------ORG
00H
; Reset
AJMP MAIN_PROG
ORG 001BH
AJMP RELAY_OFF
RELAY_OFF:
DJNZ TIM,BACK
MOV TIM,#16
MOV A,TIM_DEL
ADD A,#01H
DA A
MOV TIM_DEL,A
CJNE A,TIME_DELAY,BACK
CLR TR1
CLR EA
CLR RL1
RETI
BACK:
MOV TL1,#08H
MOV TH1,#01H
SETB TR1
RETI
MAIN_PROG:
MOV PSW,#RB0
MOV SP,#STACK
MOV P1,#00H

; Select register bank 0

MOV TMOD,#10H
MOV TIM,#16
MOV TL1,#08H
MOV TH1,#01H
SETB ET1

;count for timer1

CALL RESETLCD4
CALL TITLES
CALL CHECK_RTC
CALL READ_ALARMS
SETB COL1
CLR ROW4
TOP:

CALL READ_CLOCK
CALL RTCLOCK

Rr3:
Rr1:
Rr2:

MOV R0,#02H
MOV R1,#0FFH
MOV R2,#0FFH
JNB COL1,KEYBOARD_ROUTINE11

;READ CLOCK

DJNZ R2,Rr2
DJNZ R1,Rr1
DJNZ R0,Rr3
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
;
CHECK FOR TIME IS EQUAL
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
JB AM,SXD1
MOV ALM_AM,#00H
AJMP SDX1
SXD1:
MOV ALM_AM,#0FFH
SDX1:
MOV R1,#ALARMTIME
MOV R0,#25
DVB1:
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC

A,@R1
VAL_1,A
R1
A,@R1
VAL_2,A
R1
A,@R1
VAL_3,A
R1

MOV ALM_HOUR,VAL_1
MOV ALM_MIN,VAL_2

SETB TMP
MOV A,ALM_HOUR
CJNE A,#00H,VBN1
MOV A,ALM_MIN
CJNE A,#00H,VBN1
CLR TMP
VBN1:
JNB TMP,CHKK2
MOV A,ALM_AM
CJNE A,VAL_3,CHKK2
MOV A,HRS
CJNE A,ALM_HOUR,CHKK2
MOV A,MINS
CJNE A,ALM_MIN,CHKK2
MOV A,SECS
CJNE A,#00H,CHKK1
MOV TIM_DEL,#00H
SETB RL1
SETB TR1
SETB EA
AJMP CHKK2

;Time Is Equal

CHKK1:
CJNE A,#01H,CHKK2
MOV TIM_DEL,#00H
SETB RL1

;Time Is Equal

SETB TR1
SETB EA
CHKK2:
DJNZ R0,DVB1

RS3:
RA1:
RS2:

TOPD:

MOV R0,#02H
MOV R1,#0FFH
MOV R2,#0FFH
JNB COL1,KEYBOARD_ROUTINE11
DJNZ R2,RS2
DJNZ R1,RA1
DJNZ R0,RS3
AJMP TOP

KEYBOARD_ROUTINE11:
MOV R1,#0FFH
DJNZ R1,$
JB COL1,TOPD
AJMP KEYBOARD_ROUTINE1
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
;************************************************************************
KEYBOARD_ROUTINE1:
CALL DEV_NUMM
SETB COMM
KEYBOARD_ROUTINE:
MOV COUNT,#00H
KEYBOARD:
CALL DELAY
MOV KEY,#00H
SETB COL1
SETB COL2
SETB COL3
K11:
CLR ROW1
CLR ROW2
CLR ROW3
CLR ROW4
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,K11
K2:
ACALL DEALAY
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,OVER
SJMP K2
OVER: ACALL DEALAY
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,OVER1
SJMP K2
OVER1: MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW1
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,ROW_1

;check till all keys released


;call 20 msec delay
;see if any key is pressed
;mask unused bits
;key pressed, await closure

MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW2
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,ROW_2
MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW3
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,ROW_3
MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW4
MOV A,KEYS
ANL A,#11110000B
CJNE A,#11110000B,ROW_4
LJMP K2
ROW_1: RLC A
JC MAT1
MOV KEY,#03H
AJMP K1
MAT1: RLC A
JC MAT2
MOV KEY,#02H
AJMP K1
MAT2: RLC A
JC K1
MOV KEY,#01H
AJMP K1
ROW_2: RLC A
JC MAT3
MOV KEY,#06H
AJMP K1
MAT3: RLC A
JC MAT4
MOV KEY,#05H
AJMP K1
MAT4: RLC A
JC K1
MOV KEY,#04H
AJMP K1
ROW_3: RLC A
JC MAT5
MOV KEY,#09H
AJMP K1
MAT5: RLC A
JC MAT6
MOV KEY,#08H
AJMP K1
MAT6: RLC A
JC K1

MOV KEY,#07H
AJMP K1
ROW_4: RLC A
JC MAT7
MOV KEY,#5FH
AJMP K1
MAT7: RLC A
JC MAT8
MOV KEY,#00H
AJMP K1
MAT8: RLC A
JC K1
MOV KEY,#0AH
MOV R4,#0CH
CALL WRLCDCOM4
CALL MDELAY
CALL READ_CLOCK
CALL RTCLOCK
CALL DELAYS
AJMP TOP
GET_TIMS:
K1:

;#

;for 0

;*

;READ CLOCK

AJMP GET_TIM

JNB COMM,GET_TIMS
MOV A,COUNT
CJNE A,#00H,FG1
MOV A,KEY
SWAP A
MOV KEY1,A
CALL DEV1_ONTIME1
INC COUNT
KEYB:
AJMP KEYBOARD
FG1:CJNE A,#01H,KEYB
MOV A,KEY
ORL A,KEY1
MOV KEY,A
CJNE A,#00H,HJ0
CALL ENTER_NEW_TIME
CALL DELAYS
CALL READ_CLOCK
CALL RTCLOCK
MOV R4,#0FH
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#81H
CALL WRLCDCOM4
CALL MDELAY
MOV DEVICE,KEY
CLR COMM
AJMP KEYBOARD_ROUTINE
HJ0:CJNE A,#01H,HJ1
CALL DEV1_ONTIME

;READ CLOCK

CLR COMM
MOV R0,#ALARMTIME
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ1:CJNE A,#02H,HJ2
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+3
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ2:CJNE A,#03H,HJ3
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+6
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ3:CJNE A,#04H,HJ4
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+9
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ4:CJNE A,#05H,HJ5
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+12
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ5:CJNE A,#06H,HJ6
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+15
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ6:CJNE A,#07H,HJ7
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+18
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ7:CJNE A,#08H,HJ8
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+21
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ8:CJNE A,#09H,HJ9
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+24
CALL DISP_ALM_TIME
MOV DEVICE,KEY

AJMP KEYBOARD_ROUTINE
HJ9:CJNE A,#10H,HJ10
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+27
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ10:CJNE A,#11H,HJ11
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+30
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ11:CJNE A,#12H,HJ12
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+33
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ12:CJNE A,#13H,HJ13
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+36
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ13:CJNE A,#14H,HJ14
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+39
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ14:CJNE A,#15H,HJ15
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+42
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ15:CJNE A,#16H,HJ16
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+45
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ16:CJNE A,#17H,HJ17
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+48
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ17:CJNE A,#18H,HJ18
CALL DEV1_ONTIME
CLR COMM

MOV R0,#ALARMTIME+51
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ18:CJNE A,#19H,HJ19
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+54
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ19:CJNE A,#20H,HJ20
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+57
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ20:CJNE A,#21H,HJ21
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+60
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ21:CJNE A,#22H,HJ22
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+63
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ22:CJNE A,#23H,HJ23
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+66
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ23:CJNE A,#24H,HJ24
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+69
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ24:CJNE A,#25H,HJ25
CALL DEV1_ONTIME
CLR COMM
MOV R0,#ALARMTIME+72
CALL DISP_ALM_TIME
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ25:CJNE A,#26H,HJ26
CALL DEV1_ONTIMESGF
CLR COMM
MOV DEVICE,KEY
AJMP KEYBOARD_ROUTINE
HJ26:
AJMP KEYBOARD_ROUTINE

GET_TIM:
MOV A,DEVICE
CJNE A,#00H,CVB0
JMP GET_TIME
CVB0:
MOV A,KEY
CJNE A,#5FH,CVB
CALL STORE_ALARMS
CALL TIME_STORED
CALL DELAYS
MOV R4,#0CH
CALL WRLCDCOM4
CALL MDELAY
CALL READ_CLOCK
CALL RTCLOCK
CALL DELAYS
AJMP TOP
CVB:
MOV A,COUNT
CJNE A,#00H,CVB1
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
AJMP KEYBOARD
CVB1:
CJNE A,#01H,CVB2
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
AJMP KEYBOARD
CVB2:
CJNE A,#02H,CVB3
MOV A,KEY
MOV VAL_3,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
AJMP KEYBOARD
CVB3:
CJNE A,#03H,CVB4
MOV A,KEY
MOV VAL_4,A
ADD A,#30H

;READ CLOCK

MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
AJMP KEYBOARD
CVB4:
CJNE A,#04H,CVB5
MOV A,KEY
CJNE A,#01H,CVB7
MOV VAL_5,#00H
MOV R4,#'A'
CALL WRLCDDATA
CALL MDELAY
AJMP CVB6
CVB7:
MOV VAL_5,#0FFH
MOV R4,#'P'
CALL WRLCDDATA
CALL MDELAY
CVB6:
MOV COUNT,#00H
MOV R4,#0C4H
CALL WRLCDCOM4
CALL MDELAY
AJMP KEYBOARD
CVB5:
AJMP KEYBOARD
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DISP_ALM_TIME:
MOV A,@R0
ANL A,#0F0H
SWAP A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,@R0
ANL A,#0FH
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#':'
CALL WRLCDDATA
CALL MDELAY
INC R0
MOV A,@R0
ANL A,#0F0H
SWAP A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,@R0
ANL A,#0FH

ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#' '
CALL WRLCDDATA
CALL MDELAY
INC R0
MOV A,@R0
CJNE A,#00H,DCF1
MOV R4,#'A'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#'M'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#0FH
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#0C4H
CALL WRLCDCOM4
CALL MDELAY
RET
DCF1:
MOV R4,#'P'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#'M'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#0FH
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#0C4H
CALL WRLCDCOM4
CALL MDELAY
RET
;##########################################################
;
DISPLAY ROUTINES
;##########################################################
TITLES:
MOV DPTR,#MSAG
CALL LCD_MSG
RET
MSAG:
DB 1H,82H,'College Bell',0C5H,'Timer',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEV1_ONTIME1:
MOV DPTR,#MSG1
CALL LCD_MSG
MOV A,KEY
ANL A,#0FH
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
RET

MSG1:
DB 1H,83H,'ON Time ',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEV1_ONTIME:
ANL A,#0FH
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#0C4H
CALL WRLCDCOM4
CALL MDELAY
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEV1_ONTIMESGF:
MOV DPTR,#MSTG1
CALL LCD_MSG
MOV A,TIME_DELAY
ANL A,#0F0H
SWAP A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,TIME_DELAY
ANL A,#0FH
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#0FH
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#8DH
CALL WRLCDCOM4
CALL MDELAY
RET
MSTG1:
DB 1H,81H,'Time Delay: ',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEV_NUMM:
MOV DPTR,#MSG3
CALL LCD_MSG
RET
MSG3:
DB 1H,82H,'Enter Time',0C5H,'Number',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIME_STORED:
MOV DPTR,#MSG10
CALL LCD_MSG
RET
MSG10:

DB 1H,80H,'Time Updated...',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;((((((((((((((((((((((((((((((((
DEALAY:
MOV R1,#70
REPP2: NOP
DJNZ R1,REPP2
RET
;((((((((((((((((((((((((((((((((
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
S_DELAY:
MOV R1,#04H
RU1:
MOV R2,#0FFH
RU:
NOP
DJNZ R2,RU
DJNZ R1,RU1
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY:
MOV R1,#0FFH
RE1:
MOV R2,#0FFH
RE:
NOP
DJNZ R2,RE
DJNZ R1,RE1
RET
;**********************************************************
DELAYS:MOV R0,#05H
RY2:
MOV R1,#0FFH
RY1:
MOV R2,#0FFH
RY:
NOP
DJNZ R2,RY
DJNZ R1,RY1
DJNZ R0,RY2
RET
;**********************************************************
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DELAYSS:
;One second delay routine
MOV R0,#18H
RF3:
MOV R1,#0FFH
RF1:
MOV R2,#0FFH
RF2:
NOP
DJNZ R2,RF2
DJNZ R1,RF1
DJNZ R0,RF3
RET
;**********************************************************
; INITIALIZE THE LCD 4-BIT MODE
;**********************************************************
INITLCD4:
CLR
LCD_RS
; LCD REGISTER SELECT LINE
CLR
LCD_E
; ENABLE LINE
MOV
R4, #CONFIG; FUNCTION SET - DATA BITS,
; LINES, FONTS
CALL
WRLCDCOM4
MOV
R4, #ONDSP ; DISPLAY ON
CALL
WRLCDCOM4
MOV
R4, #ENTRYMODE ; SET ENTRY MODE
CALL
WRLCDCOM4 ; INCREMENT CURSOR RIGHT, NO SHIFT
MOV
R4, #CLRDSP; CLEAR DISPLAY, HOME CURSOR

CALL
WRLCDCOM4
RET
; **********************************************************
; SOFTWARE VERSION OF THE POWER ON RESET
; **********************************************************
RESETLCD4:
CLR
LCD_RS
; LCD REGISTER SELECT LINE
CLR
LCD_E
; ENABLE LINE
CLR
LCD_DB7
; SET BIT PATTERN FOR...
CLR
LCD_DB6
; ... POWER-ON-RESET
SETB
LCD_DB5
SETB
LCD_DB4
SETB
LCD_E
; START ENABLE PULSE
CLR
LCD_E
; END ENABLE PULSE
MOV
A, #4
; DELAY 4 MILLISECONDS
CALL
MDELAY
SETB
LCD_E
; START ENABLE PULSE
CLR
LCD_E
; END ENABLE PULSE
MOV
A, #1
; DELAY 1 MILLISECOND
CALL
MDELAY
SETB
LCD_E
; START ENABLE PULSE
CLR
LCD_E
; END ENABLE PULSE
MOV
A, #1
; DELAY 1 MILLISECOND
CALL
MDELAY
CLR
LCD_DB4
; SPECIFY 4-BIT OPERATION
SETB
LCD_E
; START ENABLE PULSE
CLR
LCD_E
; END ENABLE PULSE
MOV
A, #1
; DELAY 1 MILLISECOND
CALL
MDELAY
MOV
R4, #CONFIG; FUNCTION SET
CALL
WRLCDCOM4
MOV
R4, #08H ; DISPLAY OFF
CALL
WRLCDCOM4
MOV
R4, #1
; CLEAR DISPLAY, HOME CURSOR
CALL
WRLCDCOM4
MOV
R4,#ENTRYMODE ; SET ENTRY MODE
ACALL
WRLCDCOM4
JMP INITLCD4
; **********************************************************
; SUB RECEIVES A COMMAND WORD TO THE LCD
; COMMAND MUST BE PLACED INSS R4 BY CALLING PROGRAM
; **********************************************************
WRLCDCOM4:
CLR
LCD_E
CLR
LCD_RS
; SELECT READ COMMAND
PUSH
ACC
; SAVE ACCUMULATOR
MOV
A, R4
; PUT DATA BYTE INSS ACC
MOV
C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS
MOV
LCD_DB4, C ; ONE BIT AT A TIME USING...
MOV
C, ACC.5 ; BIT MOVE OPERATOINS
MOV
LCD_DB5, C
MOV
C, ACC.6
MOV
LCD_DB6, C
MOV
C, ACC.7
MOV
LCD_DB7, C
SETB
LCD_E
; PULSE THE ENABLE LINE
CLR
LCD_E
MOV
C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE
MOV
LCD_DB4, C

MOV
C, ACC.1
MOV
LCD_DB5, C
MOV
C, ACC.2
MOV
LCD_DB6, C
MOV
C, ACC.3
MOV
LCD_DB7, C
CLR
LCD_E
SETB
LCD_E
; PULSE THE ENABLE LINE
CLR
LCD_E
CALL MADELAY
POP
ACC
RET
; **********************************************************
; SUB TO RECEIVE A DATA WORD TO THE LCD
; DATA MUST BE PLACED INSS R4 BY CALLING PROGRAM
; **********************************************************
WRLCDDATA:
CLR
LCD_E
SETB
LCD_RS
; SELECT READ DATA
PUSH
ACC
; SAVE ACCUMULATOR
MOV
A, R4
; PUT DATA BYTE INSS ACC
MOV
C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS
MOV
LCD_DB4, C ; ONE BIT AT A TIME USING...
MOV
C, ACC.5 ; BIT MOVE OPERATOINS
MOV
LCD_DB5, C
MOV
C, ACC.6
MOV
LCD_DB6, C
MOV
C, ACC.7
MOV
LCD_DB7, C
SETB
LCD_E
; PULSE THE ENABLE LINE
CLR
LCD_E
MOV
C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE
MOV
LCD_DB4, C
MOV
C, ACC.1
MOV
LCD_DB5, C
MOV
C, ACC.2
MOV
LCD_DB6, C
MOV
C, ACC.3
MOV
LCD_DB7, C
CLR
LCD_E
SETB
LCD_E
; PULSE THE ENABLE LINE
CLR
LCD_E
NOP
NOP
POP
ACC
RET
; **********************************************************
; SUB TAKES THE STRING IMMEDIATELY FOLLOWING THE CALL AND
; DISPLAYS ON THE LCD. STRING MUST BE TERMINATED WITH A
; NULL (0).
; **********************************************************
LCD_MSG:
CLR A
; Clear Index
MOVC A,@A+DPTR
; Get byte pointed by Dptr
INC DPTR
; Point to the next byte
JZ LCD_Msg9
; Return if found the zero (end of stringz)
CJNE A,#01H,Lcd_Msg1
; Check if is a Clear Command
MOV R4,A
CALL WRLCDCOM4
;If yes, RECEIVE it as command to LCD

JMP

LCD_MSG

;Go get next byte from stringz

Lcd_Msg1: CJNE A,#0FFH,FLL


MOV R4,A
CALL WRLCDDATA
JMP LCD_MSG
FLL: CJNE A,#080h,$+3
JC
Lcd_Msg_Data
MOV R4,A
CALL WRLCDCOM4
JMP Lcd_Msg
Lcd_Msg_Data:
MOV R4,A
CALL WRLCDDATA
JMP Lcd_Msg
Lcd_Msg9:
RET

;Check for displaying full character

; Data or Address? If => 80h then is address.


; Carry will be set if A < 80h (Data)
; Carry not set if A=>80, it is address
; Go get next byte from stringz
;
; It was data, RECEIVE it to Lcd
; Go get next byte from stringz
; Return to Caller

; **********************************************************
; 1 MILLISECOND DELAY ROUTINE
; **********************************************************
MDELAY:
PUSH
MOV

ACC
A,#0A6H

INC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
JNZ
NOP
POP
RET

PUSH
MOV

ACC
A,#036H

INC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
JNZ
NOP
POP
RET

MD_OLP:

MD_OLP
ACC

MADELAY:
MAD_OLP:

MAD_OLP
ACC

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

;
READ DATA FROM EEPROM
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
READ_EEPROM:
MOV A,#WTCMD

;LOAD WRITE COMMAND TO SEND ADDR

CALL OUTS
MOV A,R4
CALL OUT
MOV A,#RDCMD
CALL OUTS

;SEND IT
;GET LOW BYTE ADDRESS
;SEND IT
;LOAD READ COMMAND
;SEND IT
;READ DATA
;STORE DATA
;INCREMENT DATA POINTER
;DECREMENT LOOP COUNTER
;IF DONE, ISSUE STOP CON

ESS

BRDLP: CALL IN
MOV @R1,a
INC R1
DJNZ R6,AKLP
CALL STOP
DITION
RET

;DONE, EXIT ROUT

INE
AKLP:

CLR SDA1 ;NOT DONE, ISSUE ACK


SETB SCL1
NOP ;NOTE 1
NOP
NOP
NOP ;NOTE 2
NOP
CLR SCL1
JMP BRDLP ;CONTINUE WITH READS
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
STORE DATA IN EEPROM
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
STORE_EEPROM:
MOV A,#WTCMD
CALL OUTS
MOV A,R4
CALL OUT
BTLP:

MOV A,@R1

;LOAD WRITE COMMAND


;SEND IT
;GET LOW BYTE ADDRESS
;SEND IT
;GET DATA
;SEND IT
;INCREMENT DATA POINTER
;LOOP TILL DONE
;SEND STOP CONDITION

CALL OUT
INC R1
DJNZ R6,BTLP
CALL STOP
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;***********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF THE ACCUMULATOR
; to the EEPROM and includes START condition. Refer to the data sheets
; for discussion of START and STOP conditions.
;***********************************************************************
OUTS:

MOV
SETB
SETB
NOP
NOP
NOP
CLR
NOP
NOP
NOP

R2,#8
SDA1
SCL1

SDA1

;LOOP COUNT -- EQUAL TO BIT COUNT


;INSURE DATA IS HI
;INSURE CLOCK IS HI
;NOTE 1
;START CONDITION -- DATA = 0
;NOTE 1

CLR
OTSLP: RLC
JNC
SETB
JMP
BITLS: CLR
OTSL1: SETB
NOP
NOP
NOP

SCL1
A
BITLS
SDA1
OTSL1
SDA1
SCL1

;CLOCK = 0
;SHIFT BIT

CLR
DJNZ
SETB
NOP

SCL1
R2,OTSLP
SDA1

;CLOCK LOW
;DECREMENT COUNTER
;TURN PIN INTO INPUT
;NOTE 1

SETB
NOP
NOP
NOP

SCL1

;CLOCK ACK
;NOTE 1

CLR
RET

SCL1

;DATA = 1
;CONTINUE
;DATA = 0
;CLOCK HI
;NOTE 1

;**********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF ACCUMLATOR TO EEPROM
; without sending a START condition.
;**********************************************************************
OUT:
OTLP:

BITL:
OTL1:

STOP:

MOV
RLC
JNC
SETB
JMP
CLR
SETB
NOP
NOP
NOP

R2,#8
A
BITL
SDA1
OTL1
SDA1
SCL1

;LOOP COUNT -- EQUAL TO BIT COUNT


;SHIFT BIT

CLR
DJNZ
SETB
NOP

SCL1
R2,OTLP
SDA1

;CLOCK LOW
;DECREMENT COUNTER
;TURN PIN INTO INPUT
;NOTE 1

SETB
NOP
NOP
NOP

SCL1

;CLOCK ACK
;NOTE 1

CLR
RET

SCL1

CLR
NOP
NOP
NOP

SDA1

;STOP CONDITION SET DATA LOW


;NOTE 1

SETB

SCL1

;SET CLOCK HI

;DATA = 1
;CONTINUE
;DATA = 0
;CLOCK HI
;NOTE 1

NOP
NOP
NOP

;NOTE 1

SETB
SDA1
;SET DATA HIGH
RET
;*******************************************************************
; THIS ROUTINE READS A BYTE OF DATA FROM EEPROM
; From EEPROM current address pointer.
; Returns the data byte in R1
;*******************************************************************
CREAD: MOV
A,#RDCMD
;LOAD READ COMMAND
CALL
OUTS
;SEND IT
CALL
IN
;READ DATA
MOV
R1,A
;STORE DATA
CALL
STOP
;SEND STOP CONDITION
RET
;**********************************************************************
; THIS ROUTINE READS IN A BYTE FROM THE EEPROM
; and stores it in the accumulator
;**********************************************************************
IN:
INLP:

INL1:

MOV
SETB
CLR
NOP
NOP
NOP
NOP

R2,#8
SDA1
SCL1

;LOOP COUNT
;SET DATA BIT HIGH FOR INPUT
;CLOCK LOW
;NOTE 1

SETB
CLR
JNB
CPL
RLC
DJNZ
CLR
RET

SCL1
C
SDA1,INL1
C
A
R2,INLP
SCL1

;CLOCK HIGH
;CLEAR CARRY
;JUMP IF DATA = 0
;SET CARRY IF DATA = 1
;ROTATE DATA INTO ACCUMULATOR
;DECREMENT COUNTER
;CLOCK LOW

;**********************************************************
;
INITILIZE RTC
;**********************************************************
CHECK_RTC:
SETB SDA
; ENSURE SDA HIGH
SCL_HIGH
; ENSURE SCL HIGH
CLR ACKS
; CLEAR STATUS FLAGS
CLR BUS_FLT
CLR _2W_BUSY
CLR SQW
CALL OSC_CONTROL
;Initilize the RTC
CALL SQW_CONTROL_1HZ
LCALL SEND_START
; SEND 2WIRE STA
RT CONDITION
MOV A,#DS1307W
; SEND DS1307 WRITE COMMAND
LCALL SEND_BYTE
MOV A,#08H
; SET POINTER TO REG 08H ON DS1307
LCALL SEND_BYTE
LCALL SEND_STOP
; SEND STOP CONDITION

LCALL SEND_START
; SEND START CONDITION
MOV A,#DS1307R
; SEND DS1307 READ COMMAND
LCALL SEND_BYTE
LCALL READ_BYTE
; READ A BYTE OF DATA
MOV R1,A
LCALL SEND_STOP
; SEND 2WIRE STOP CONDITION
CJNE A,#0AAH,STORE_TIM
RET
STORE_TIM:
MOV MINS,#00H
MOV HRS,#10H
MOV DAY,#06H
MOV DATE1,#01H
MOV MONTH,#01H
MOV YEAR,#10H
CLR AM
CALL STORE_RTC
RET
; **********************************************************
;
CHECK FOR ENTER THE TIME
; **********************************************************
SET_RTC:
ret
; **********************************************************
; SUB SETS THE DS1307 OSCILLATOR
; **********************************************************
OSC_CONTROL:
CALL
SEND_START ; GENERATE START CONDITION
MOV
A,#DS1307W ; 1101 0000 ADDRESS + WRITE-BIT
CALL
SEND_BYTE ; SEND BYTE TO 1307
MOV
A,#00H
; ADDRESS BYTE TO REGISTER 00H
CALL
SEND_BYTE ; SECONDS REGISTER, ALWAYS LEAVE
SETB
LASTREAD ; REG 00H-BIT #7 = 0 (LOW)
CALL
SEND_STOP ; IF REG 00H-BIT #7 = 1 CLOCK
CALL
SEND_START ; OSCILLATOR IS OFF.
MOV
A,#DS1307R ; 1101 0001 ADDRESS + READ-BIT
CALL
SEND_BYTE ;
CALL
READ_BYTE ; READ A BYTE FROM THE 1307
CLR
ACC.7
; CLEAR REG 00H-BIT #7 TO ENABLE
OSC_SET:
; OSCILLATOR.
PUSH
ACC
; SAVE ON STACK
CALL
SEND_STOP ;
CALL
SEND_START ;
MOV
A,#DS1307W ; SETUP TO WRITE
CALL
SEND_BYTE ;
MOV
A,#00H
; REGISTER 00H ADDRESS
CALL
SEND_BYTE ;
POP
ACC
; GET DATA TO START OSCILLATOR
CALL
SEND_BYTE ; SEND IT
CALL
SEND_STOP
RET
; **********************************************************
; THIS SUB CONTROLS THE SQW OUTPUT 1HZ
; **********************************************************
SQW_CONTROL_1HZ:
LCALL SEND_START
; SEND START CONDITION
MOV A,#DS1307W
; SET POINTER TO REG 07H ON
; DS1307
LCALL SEND_BYTE

MOV A,#07H
LCALL SEND_BYTE
MOV A,#90H
; SQW/OUTSS ON AT 1HZ
JNB SQW,SQW_SET
; JUMP IF SQW BIT IS ACTIVE
MOV A,#80H
; TURN SQW/OUTSS OFF
OFF HIGH
SQW_SET:
LCALL SEND_BYTE
LCALL SEND_STOP
RET
; **********************************************************
; THIS SUB READS ONE BYTE OF DATA FROM THE DS1307
; **********************************************************
READ_BYTE:
MOV
MOV
SETB
READ_BITS:
SCL_HIGH
MOV
RLC
CLR
DJNZ
JB
CLR

R6,#08H; SET COUNTER FOR 8-BITS DATA


A,#00H
SDA
; SET SDA HIGH TO ENSURE LINE
; FREE
; TRANSITION SCL LOW-TO-HIGH
C,SDA
; MOVE DATA BIT INTO CARRY
A
; ROTATE CARRY-BIT INTO ACC.0
SCL
; TRANSITION SCL HIGH-TO-LOW
R6,READ_BITS
; LOOP FOR 8-BITS
LASTREAD,ACKN
; CHECK TO SEE IF THIS IS
; THE LAST READ
SDA
; IF NOT LAST READ SEND ACK-BIT

ACKN:
SCL_HIGH
CLR
RET

SCL

; PULSE SCL TO TRANSMIT ACKNOWLEDGE


; OR NOT ACKNOWLEDGE BIT

; **********************************************************
; SUB SENDS START CONDITION
; **********************************************************
SEND_START:
SETB
CLR
CLR
JNB
JNB
SETB
SCL_HIGH
CLR
CALL
CLR
RET
FAULT:
SETB
RET

_2W_BUSY ; INDICATE THAT 2-WIRE


ACKS
; OPERATION IS INSS PROGRESS
BUS_FLT
; CLEAR STATUS FLAGS
SCL,FAULT
SDA,FAULT
SDA
; BEGIN START CODITION
SDA
DEELAY
SCL
BUS_FLT

; **********************************************************
; SUB SENDS STOP CONDITION
; **********************************************************
SEND_STOP:
CLR
SDA

SCL_HIGH
SETB
SDA
CLR
_2W_BUSY
RET
; **********************************************************
; SUB DELAYS THE BUS
; **********************************************************
DEELAY:
NOP
; DELAY FOR BUS TIMING
RET
; **********************************************************
; THIS SUB SENDS 1 BYTE OF DATA TO THE DS1307
; CALL THIS FOR EACH REGISTER SECONDS TO YEAR
; ACC MUST CONTAIN DATA TO BE SENT TO CLOCK
; **********************************************************
SEND_BYTE:
MOV
R6,#08H; SET COUNTER FOR 8-BITS
SB_LOOP:
JNB
ACC.7,NOTONE; CHECK TO SEE IF BIT-7 OF
SETB
SDA
; ACC IS A 1, AND SET SDA HIGH
JMP
ONE
NOTONE:
CLR
SDA
; CLR SDA LOW
ONE:
SCL_HIGH
; TRANSITION SCL LOW-TO-HIGH
RL
A
; ROTATE ACC LEFT 1-BIT
CLR
SCL
; TRANSITION SCL LOW-TO-HIGH
DJNZ
R6,SB_LOOP; LOOP FOR 8-BITS
SETB
SDA
; SET SDA HIGH TO LOOK FOR
SCL_HIGH
; ACKNOWLEDGE PULSE
CLR
ACKS
JNB
SDA,SB_EX ; CHECK FOR ACK OR NOT ACK
SETB
ACKS
; SET ACKNOWLEDGE FLAG FOR
; NOT ACK
SB_EX:
CALL
DEELAY
; DELAY FOR AN OPERATION
CLR
SCL
; TRANSITION SCL HIGH-TO-LOW
CALL
DEELAY
; DELAY FOR AN OPERATION
RET
; **********************************************************
; SUB READS THE CLOCK AND WRITES IT TO THE SCRATCHPAD MEMORY
; ON RETURN FROM HERE DATE & TIME DATA WILL BE STORED INSS THE
; DATE & TIME REGISTERS FROM 24H (SECS) TO 2AH (YEAR)
; ALARM SETTINGS INSS REGISTERS 2CH(HRS) AND 2DH(MINUTES).
; **********************************************************
READ_CLOCK:
MOV
R1,#SECS ; SECONDS STORAGE LOCATION
MOV
R30,#00H
CLR
LASTREAD
CALL
SEND_START
MOV
A,#DS1307W
CALL
SEND_BYTE
MOV
A,#00H
CALL
SEND_BYTE
CALL
SEND_STOP
CALL
SEND_START
MOV
A,#DS1307R
CALL
SEND_BYTE
READ_LOOP:

MOV
CJNE
SETB

A,R30
A,#09H,NOT_LAST
LASTREAD

NOT_LAST:
CALL
READ_BYTE
MOV
@R1,A
MOV
A,R30
CJNE
A,#00H,NOT_FIRST
MOV
A,@R1
CLR
ACC.7
; ENSURE OSC BIT=0 (ENABLED)
MOV
@R1,A
NOT_FIRST:
INC
R1
INC
R30
MOV
A,R30
CJNE
A,#07H,READ_LOOP
CALL
SEND_STOP
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;
DISPLAY CLOCK ON LCD
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RTCLOCK:
MOV R4,#01H
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#81H
CALL WRLCDCOM4
CALL MDELAY
MOV R3,DATE1
CALL SPLIT_DATA
MOV R4,#'-'
CALL WRLCDDATA
CALL MDELAY
MOV R3,MONTH
CALL SPLIT_DATA
MOV R4,#'-'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#'2'
CALL WRLCDDATA
CALL MDELAY
MOV R4,#'0'
CALL WRLCDDATA
CALL MDELAY
MOV R3,YEAR
CALL SPLIT_DATA

TGY1:
TGY2:

MOV A,DAY
CJNE A,#01H,TGY1
CALL SUN
JMP TGY
CJNE A,#02H,TGY2
CALL MON
JMP TGY
CJNE A,#03H,TGY3
CALL TUE
JMP TGY

TGY3:
TGY4:
TGY5:
TGY6:

CJNE A,#04H,TGY4
CALL WED
JMP TGY
CJNE A,#05H,TGY5
CALL THU
JMP TGY
CJNE A,#06H,TGY6
CALL FRI
JMP TGY
CJNE A,#07H,TGY
CALL SAT
JMP TGY

TGY:

DCF3:
DCF2:

MOV R4,#0C3H
CALL WRLCDCOM4
CALL MDELAY
MOV A,HRS
JNB ACC.5,DCF3
SETB AM
JMP DCF2
CLR AM
ANL A,#00011111B
MOV HRS,A
MOV R3,A
CALL SPLIT_DATA
MOV R4,#':'
CALL WRLCDDATA
CALL MDELAY
MOV R3,MINS
CALL SPLIT_DATA
MOV R4,#':'
CALL WRLCDDATA
CALL MDELAY
MOV R3,SECS
CALL SPLIT_DATA
MOV R4,#' '
CALL WRLCDDATA
CALL MDELAY

;PM

JB AM,DCF0
MOV R4,#'A'
CALL WRLCDDATA
CALL MDELAY
JMP DCF4
DCF0:

MOV R4,#'P'
CALL WRLCDDATA
CALL MDELAY

DCF4:

MOV R4,#'M'
CALL WRLCDDATA
CALL MDELAY
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SPLIT_DATA:
MOV A,R3
ANL A,#0F0H
SWAP A

ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,R3
ANL A,#0FH
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUN:
MOV DPTR,#MAG1
CALL LCD_MSG
RET
MAG1:
DB ' SUN',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MON:
MOV DPTR,#MAG2
CALL LCD_MSG
RET
MAG2:
DB ' MON',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TUE:
MOV DPTR,#MAG3
CALL LCD_MSG
RET
MAG3:
DB ' TUE',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WED:
MOV DPTR,#MAG4
CALL LCD_MSG
RET
MAG4:
DB ' WED',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
THU:
MOV DPTR,#MAG5
CALL LCD_MSG
RET
MAG5:
DB ' THU',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FRI:
MOV DPTR,#MAG6
CALL LCD_MSG
RET
MAG6:
DB ' FRI',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SAT:
MOV DPTR,#MAG7
CALL LCD_MSG
RET
MAG7:
DB ' SAT',00H

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
;
STORE THE TIME TO RTC CHIP
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
STORE_RTC:
LCALL SEND_START
; SEND 2WIRE START CONDITION
MOV A,#DS1307W
; LOAD DS1307 WRITE COMMAND
LCALL SEND_BYTE
; SEND WRITE COMMAND
MOV A,#08H
; SET DS1307 DATA POINTER TO BEGINNING
LCALL SEND_BYTE
; OF USER RAM 08H
MOV A,#0AAH
; WRITE BYTE TO ENTIRE RAM SPACE
LCALL SEND_BYTE
LCALL SEND_STOP
; SEND 2WIRE STOP CONTION
LCALL SEND_START
MOV A,#DS1307W
LCALL SEND_BYTE
MOV A,#01H
LCALL SEND_BYTE
MOV A,MINS
LCALL SEND_BYTE

;
;
;
;
;
;

SEND 2WIRE START CONDITION


LOAD DS1307 WRITE COMMAND
SEND WRITE COMMAND
SET DS1307 DATA POINTER TO BEGINNING
OF 00H
Send min

JNB AMS,H6K7
ORL HRS,#00100000B
AJMP H6K8
H6K7: ANL HRS,#11011111B
H6K8:
MOV A,HRS
;send hr
SETB ACC.6
;12 HR MODE
CLR ACC.5
JNB AM,SXK
SETB ACC.5
SXK:
LCALL SEND_BYTE
MOV A,DAY
; Send Day
LCALL SEND_BYTE
MOV A,DATE1
; Send date
LCALL SEND_BYTE
MOV A,MONTH
; Send month
LCALL SEND_BYTE
MOV A,YEAR
; Send yr
LCALL SEND_BYTE
LCALL SEND_STOP
; SEND 2WIRE STOP CONTION
RET
;##########################################################
GET_RTC:
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ENTER_NEW_TIME:
MOV DPTR,#MSAG1
CALL LCD_MSG
RET
MSAG1:
DB 1H,80H,'Plz Enter the',0C0H,'Date & Time',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLOCK_UPDATED:
MOV DPTR,#MSG11

CALL LCD_MSG
RET
MSG11:
DB 1H,0C2H,'Clock Updated...',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BLANK:
MOV DPTR,#MSG12
CALL LCD_MSG
RET
MSG12:
DB 1H,80H,'Press keys',0C0h, 00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
READ_ALARMS:
MOV R1,#ALARMTIME
MOV R4,#10H

;GET DATA IN BYTES(RAM)


;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+6
MOV R4,#20H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM

;NUMBER OF BYTES

MOV R1,#ALARMTIME+12

;GET DATA IN BYT

MOV R4,#30H

;DATA ADDRESS IN

MOV R6,#6
CALL READ_EEPROM

;NUMBER OF BYTES

ES(RAM)
EEPROM

MOV R1,#ALARMTIME+18
MOV R4,#40H

;GET DATA IN BYTES(RAM)


;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+24
MOV R4,#50H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+30
MOV R4,#60H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+36
MOV R4,#70H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+42
MOV R4,#80H
EEPROM

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+48
MOV R4,#90H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+54
MOV R4,#0A0H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+60
MOV R4,#0B0H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+66
MOV R4,#0C0H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#6
CALL READ_EEPROM
MOV R1,#ALARMTIME+72
MOV R4,#0D0H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#3
CALL READ_EEPROM
MOV R1,#TIME_DELAY
MOV R4,#0E0H

;NUMBER OF BYTES
;GET DATA IN BYTES(RAM)
;DATA ADDRESS IN

EEPROM
MOV R6,#1
CALL READ_EEPROM
RET

;NUMBER OF BYTES

STORE_ALARMS:
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV VAL_1,A
MOV A,VAL_3
SWAP A
ORL A,VAL_4
MOV VAL_2,A
MOV A,DEVICE
CJNE A,#01H,JKL1
MOV R1,#ALARMTIME
A IN BYTES(RAM)
MOV
INC
MOV
INC
MOV

@R1,VAL_1
R1
@R1,VAL_2
R1
@R1,VAL_5

;GET DAT

MOV R1,#ALARMTIME

;GET DAT

MOV R4,#10H

;DATA AD

MOV R6,#3

;NUMBER

A IN BYTES(RAM)
DRESS IN EEPROM
OF BYTES
CALL STORE_EEPROM
RET
JKL1:

CJNE A,#02H,JKL2
MOV R1,#ALARMTIME+3
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+3
A IN BYTES(RAM)
MOV R4,#13H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
RET
JKL2: CJNE A,#03H,JKL3
MOV R1,#ALARMTIME+6
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+6
A IN BYTES(RAM)
MOV R4,#20H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
RET
JKL3: CJNE A,#04H,JKL4
MOV R1,#ALARMTIME+9
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+9
A IN BYTES(RAM)
MOV R4,#23H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
RET
JKL4: CJNE A,#05H,JKL5
MOV R1,#ALARMTIME+12
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

MOV @R1,VAL_5
MOV R1,#ALARMTIME+12

;GET DAT

MOV R4,#30H

;DATA AD

MOV R6,#3

;NUMBER

A IN BYTES(RAM)
DRESS IN EEPROM
OF BYTES
CALL STORE_EEPROM
RET
JKL5: CJNE A,#06H,JKL6
MOV R1,#ALARMTIME+15
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+15
A IN BYTES(RAM)
MOV R4,#33H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
RET
JKL6: CJNE A,#07H,JKL7
MOV R1,#ALARMTIME+18
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+18
A IN BYTES(RAM)
MOV R4,#40H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
RET
JKL7: CJNE A,#08H,JKL8
MOV R1,#ALARMTIME+21
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+21
A IN BYTES(RAM)
MOV R4,#43H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL8: CJNE A,#09H,JKL9
MOV R1,#ALARMTIME+24
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

MOV R1,#ALARMTIME+24

;GET DAT

MOV R4,#50H

;DATA AD

MOV R6,#3

;NUMBER

A IN BYTES(RAM)
DRESS IN EEPROM
OF BYTES
CALL STORE_EEPROM
CJNE A,#10H,JKL10
MOV R1,#ALARMTIME+27
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+27
A IN BYTES(RAM)
MOV R4,#53H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL10:CJNE A,#11H,JKL11
MOV R1,#ALARMTIME+30
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+30
A IN BYTES(RAM)
MOV R4,#60H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL11:CJNE A,#12H,JKL12
MOV R1,#ALARMTIME+33
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+33
A IN BYTES(RAM)
MOV R4,#63H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL12:CJNE A,#13H,JKL13
MOV R1,#ALARMTIME+36
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+36
ES(RAM)
MOV R4,#70H
DRESS IN EEPROM
JKL9:

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

;GET DAT
;DATA AD
;NUMBER

;GET DATA IN BYT


;DATA AD

MOV R6,#3

;NUMBER

OF BYTES
CALL STORE_EEPROM
JKL13:CJNE A,#14H,JKL14
MOV R1,#ALARMTIME+39
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+39
A IN BYTES(RAM)
MOV R4,#73H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL14:CJNE A,#15H,JKL15
MOV R1,#ALARMTIME+42
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+42
ES(RAM)
MOV R4,#80H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL15:CJNE A,#16H,JKL16
MOV R1,#ALARMTIME+45
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+45
MOV R4,#83H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL16:CJNE A,#17H,JKL17
MOV R1,#ALARMTIME+48
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+48
MOV R4,#90H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL17:CJNE A,#18H,JKL18
MOV R1,#ALARMTIME+51
MOV @R1,VAL_1

;GET DAT
;DATA AD
;NUMBER

;GET DATA IN BYT


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

INC
MOV
INC
MOV
MOV
MOV

R1
@R1,VAL_2
R1
@R1,VAL_5
R1,#ALARMTIME+51
R4,#93H

;GET DATA IN BYTES(RAM)


;DATA AD

DRESS IN EEPROM
MOV R6,#3

;NUMBER

OF BYTES
CALL STORE_EEPROM
JKL18:CJNE A,#19H,JKL19
MOV R1,#ALARMTIME+54
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+54
MOV R4,#0A0H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL19:CJNE A,#20H,JKL20
MOV R1,#ALARMTIME+57
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+57
MOV R4,#0A3H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL20:CJNE A,#21H,JKL21
MOV R1,#ALARMTIME+60
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+60
MOV R4,#0B0H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL21:CJNE A,#22H,JKL22
MOV R1,#ALARMTIME+63
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+63
MOV R4,#0B3H
DRESS IN EEPROM
MOV R6,#3

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

OF BYTES
CALL STORE_EEPROM
JKL22:CJNE A,#23H,JKL23
MOV R1,#ALARMTIME+66
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+66
MOV R4,#0C0H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL23:CJNE A,#24H,JKL24
MOV R1,#ALARMTIME+69
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+69
MOV R4,#0C3H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL24:CJNE A,#25H,JKL25
MOV R1,#ALARMTIME+72
MOV @R1,VAL_1
INC R1
MOV @R1,VAL_2
INC R1
MOV @R1,VAL_5
MOV R1,#ALARMTIME+72
MOV R4,#0D0H
DRESS IN EEPROM
MOV R6,#3
OF BYTES
CALL STORE_EEPROM
JKL25:CJNE A,#26H,JKL26
MOV TIME_DELAY,VAL_1
MOV R1,#TIME_DELAY
MOV R4,#0E0H
DRESS IN EEPROM
MOV R6,#1
OF BYTES
CALL STORE_EEPROM
JKL26:RET

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)


;DATA AD
;NUMBER

;GET DATA IN BYTES(RAM)

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4
GET_TIME:
MOV A,KEY
CJNE A,#5FH,CEB
CALL STORE_RTC
CALL TIME_STORED
CALL DELAYS

;DATA AD
;NUMBER

MOV R4,#0CH
CALL WRLCDCOM4
CALL MDELAY
CALL READ_CLOCK
CALL RTCLOCK
CALL DELAYS
JMP TOP
CEB:
MOV A,COUNT
CJNE A,#00H,COB1
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
JMP KEYBOARD
COB1:
CJNE A,#01H,COB2
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV DATE1,A
JMP KEYBOARD
COB2:
CJNE A,#02H,COB3
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
JMP KEYBOARD
COB3:
CJNE A,#03H,COB4
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#14H

;READ CLOCK

CALL WRLCDCOM4
CALL MDELAY
INC COUNT
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV MONTH,A
JMP KEYBOARD
COB4:
CJNE A,#04H,COB5
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
JMP KEYBOARD
COB5:
CJNE A,#05H,COB6
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV YEAR,A
JMP KEYBOARD
COB6:
CJNE A,#06H,COB7
MOV A,KEY
MOV R4,#10H
CALL WRLCDCOM4
CALL MDELAY
CJNE A,#01H,TTY1
CALL SUN
JMP TTY
TTY1:
CJNE A,#02H,TTY2
CALL MON
JMP TTY
TTY2:
CJNE A,#03H,TTY3
CALL TUE
JMP TTY
TTY3:
CJNE A,#04H,TTY4
CALL WED
JMP TTY
TTY4:
CJNE A,#05H,TTY5
CALL THU
JMP TTY
TTY5:
CJNE A,#06H,TTY6
CALL FRI
JMP TTY
TTY6:
CJNE A,#07H,TTY

TTY:

CALL SAT
JMP TTY
MOV DAY,KEY
MOV R4,#0C3H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
JMP KEYBOARD

COB7:
CJNE A,#07H,COB8
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
JMP KEYBOARD
COB8:
CJNE A,#08H,COB9
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV HRS,A
JMP KEYBOARD
COB9:
CJNE A,#09H,COB10
MOV A,KEY
MOV VAL_1,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
INC COUNT
JMP KEYBOARD
COB10:
CJNE A,#0AH,COB11
MOV A,KEY
MOV VAL_2,A
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY

MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
MOV R4,#14H
CALL WRLCDCOM4
CALL MDELAY
INC COUNT
MOV A,VAL_1
SWAP A
ORL A,VAL_2
MOV MINS,A
JMP KEYBOARD
COB11:
CJNE A,#0BH,COB12
MOV A,KEY
CJNE A,#01H,CAB0
CLR AM
MOV R4,#'A'
CALL WRLCDDATA
CALL MDELAY
JMP KEYBOARD
CAB0:
SETB AM
MOV R4,#'P'
CALL WRLCDDATA
CALL MDELAY
JMP KEYBOARD
COB12:
JMP KEYBOARD
END

Вам также может понравиться