ORG 0H ; GENERATE 1MACHINE CYCLE WHENVER 1SEC HAS PASSED VIA INTERRUPT
JMP MAIN
ORG 000BH ;Timer 0 int. vector table
LJMP ISR_T0 ;jump to ISR---> LINE 4
ORG 0003H
LJMP ISR_INT0
ISR_T0:
CLR TF0
CPL P3.2
RETI ; PROBLEM LIES HERE I.E IT JUMPS TO 'AGAIN' LOOP , AS OVERFLOW IS SET NEXT, JUMPS TO ISRT ,THEN ; TO 'AGAIN'LOOP...KEEPS ON DOING IT. NEVER FINISHES? ?
ISR_INT0:
CLR TF0
CPL P3.2
;SETB P2.3
RETI
SUBRT:
CLR TR0
CLR TF0
MOV TL0,#026H ; VALUES FITTED TO RUN FOR
MOV TH0,#0FCH ; 1 MACHINE CYCLE
SETB TR0
LOOP: JNB TF0, LOOP
RET
SUBRT2:
INC R5 ;holds no. of seconds passed.
INC R3
MOV A,R3
SUBB A,R4
JZ SUBRT3
RET
SUBRT3: ;generate pulse of 1machinecyle if 1sec has passed.
CLR TR0
CLR TF0
CLR P2.3
MOV TL0,#0FFH ; keep 65535 to genrate pulse of 1machhine cycle i.e 1.085micro sec
MOV TH0,#0FFH
SETB TR0
SETB P2.3
RET
SUBRT4:
MOV TL0,#026H
MOV TH0,#0FFH
SETB TR0
LOOP: JNB TF0, LOOP ; after overflow will jump to ISR_INT0
RET
MAIN:
MOV R4,#1
;MOV IE,#82H
SETB IE.0
SETB IE.1
SETB IE.7
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV TMOD,#051H
MOV R2,#1 ; keep the no. of seconds want to run i.e 60 cos 60 sec =1min
L2:MOV R0,#2 ;keep 10
L1:MOV R1,#2 ;keep 100 cos 10*100=1000 i.e 1sec
L3: LCALL SUBRT
DJNZ R1, L3
LCALL SUBRT
SETB TR1 ; starting timer1 as counter and
ACALL SUBRT4 ; calling subroutine.
DJNZ R0,L1
LCALL SUBRT2 ;keep count of seconds passed.
DJNZ R2,L2
;LCALL SUBRT
CLR TR0
CLR TF0
END