bragas
Newbie level 5
hi all.ı try to write asm code for up-down(0000-9999) stopwatch with 8052.but ı have some problems about down stopwatch.can you offer a powerful algorithm for this problem?ı attached .hex .asm .dsn(proteus) files.you can see problem.for example; when you see 0130 in displays,open "up-down switch".displays will crazy :-? ı wait your helps.
Code:
OFF EQU 0FFH
INIT EQU 0EEH
DIGITS EQU 04H
DISP EQU P0
SEGS EQU P1
DIGIT_1 EQU 20H
DIGIT_2 EQU 21H
DIGIT_3 EQU 22H
DIGIT_4 EQU 23H
COUNT1 EQU 24H
COUNT2 EQU 24H
ORG 0000H
LJMP SWATCH
ORG 000BH
LJMP INT
ORG 0100H
SWATCH: MOV DIGIT_1,#09H
MOV DIGIT_2,#09H
MOV DIGIT_3,#09H
MOV DIGIT_4,#09H
MOV COUNT1,#00H
MOV COUNT2,#00H
MAIN:
MOV TMOD,#01H ;;16 BIT TIMER MOD-1
MOV TH0,#0CCH
MOV TL0,#12H
MOV IE,#82H
JB P2.1,TIMER_OFF ;FOR PAUSE BUTTON
SETB TR0
SJMP DISPLAY
TIMER_OFF: CLR TR0
DISPLAY: MOV B,#INIT
MOV R2,#DIGITS
MOV R0,#DIGIT_1
NEXT: MOV DISP,#OFF
MOV A,@R0
LCALL LOOK_UP
MOV SEGS,A
INC R0
MOV DISP,B
LCALL DELAY
MOV A,B
RL A
MOV B,A
DJNZ R2,NEXT
LJMP MAIN
DELAY: MOV R7,#0AH
MOV R6,#00H
LOOP2: DJNZ R6,LOOP2
DJNZ R7,LOOP2
RET
LOOK_UP: MOV DPTR,#TABLE
MOVC A,@A+DPTR
RET
ORG 0300H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH
INT: MOV TH0,#0CCH
MOV TL0,#12H
CLR TF0
JB P2.0,DOWN ;FOR UP-DOWN BUTTON
UP: INC COUNT1
MOV A,COUNT1
SUBB A,#03H
JNZ END1
MOV COUNT1,#00H
INC DIGIT_1
MOV A,DIGIT_1
SUBB A,#0AH
JNZ END1
MOV DIGIT_1,#00H
INC DIGIT_2
MOV A,DIGIT_2
SUBB A,#0AH
JNZ END1
MOV DIGIT_2,#00H
INC DIGIT_3
MOV A,DIGIT_3
SUBB A,#0AH
JNZ END1
MOV DIGIT_3,#00H
INC DIGIT_4
MOV A,DIGIT_4
SUBB A,#0AH
JNZ END1
MOV DIGIT_4,#00H
LJMP END1
DOWN: INC COUNT2
MOV A,COUNT2
SUBB A,#03H
JNZ END1
MOV COUNT2,#00H
DEC DIGIT_1
MOV A,DIGIT_1
SUBB A,#00H
JNZ END1
MOV DIGIT_1,#0AH
DEC DIGIT_2
MOV A,DIGIT_2
SUBB A,#00H
JNZ END1
MOV DIGIT_2,#0AH
DEC DIGIT_3
MOV A,DIGIT_3
SUBB A,#00H
JNZ END1
MOV DIGIT_3,#0AH
DEC DIGIT_4
MOV A,DIGIT_4
SUBB A,#00H
JNZ END1
MOV DIGIT_4,#0AH
LJMP END1
END1:
RETI
END