Escribir código de cronómetro electrónico en lenguaje ensamblador
El cronómetro se puede implementar mediante temporizador, por ejemplo:
KEYVAL EQU 30H
DAT EQU 33H
SCANLED EQU 39H
p>CLK EQU 77H
SEC EQU 78H
SEC1 EQU 79H
SEC2 EQU 7AH
PUNTO BIT 00H< / p>
ORG 0000H
LJMP PRINCIPAL
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR ;Temporización de 50 ms
ORG 001BH
LJMP T1ISR ;Pantalla de escaneo
ORG 0030H
PRINCIPAL:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H , #10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0 p >
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
BUCLE:
MOV A,KEYVAL
BUCLE1:
JNZ LOOP2 ;Inicio
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
p>JNZ LOOP3 ;Pausa
CLR TR0
CLR ET0
SJMP LOOP
LOOP3: p>
DEC A
JNZ LOOP ;Borrar
MOV 36H,#0
MOV 35H,#0
MOV 34H, #0
MOV 33H,#0
BUCLE SJMP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC p> p>
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,# DAT
MOV A,ESCANEADO
AÑADIR A,R0
MOV R0,A
MOV A,ESCANEADO
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
p>DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR PUNTO
T1DIS:
MOV A,@ R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC ESCANEADO
MOV A,ESCANEADO
CJNE A,#4, T1END
MOV ESCANEADO,#0
T1END:
POP ACC
RETI
LEDTAB: DB 0FCH ;"0" 00H
DB 60H ; "1" 01H
DB 0DAH ; "2" 02H
DB 0F2H ; >
DB 66H; "4" 04H
DB 0B6H; "5" 05H
DB 0BEH; 7" 07H
DB 0FEH ; "8" 08H
DB 0F6H ; "9" 09H
DB 0EEH ; "A" 0AH
DB 3EH ;"B" 0BH
DB
9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH p>
DB 00H ;" " 10H
FIN