Cómo programar lámparas de agua en lenguaje ensamblador
ORG 0000H
LJMP PRINCIPAL
ORG 000BH
T0MS EQU NOT 50000 50 mS cristal 12.000 MHz
PJSBZ EQU 20H
PJSBZY EQU 21H
PST0: MOV TL0, #LOW T0MS; interrupción T0
MOV TH0, #HIGH T0MS
SETB PJSBZ; bandera de 50 mS
DJNZ R6, PST02
MOV R6, #40; 50 mS * 40 = 2 S
SETB PJSBZY; Bandera S
PST02: RETI
PRINCIPAL: MOV TMOD, #01H
MOV IE, #82H Activar interrupción T0
MOV SP, #30H
MOV TL0, #LOW T0MS; A 50MS tiempo de interrupción 0
MOV TH0, #HIGH T0MS
SETB TR0
MOV R6, #40; Valor de temporización inicial
PRINCIPAL1: MOV A, #7FH
PRINCIPAL2: JNB PJSBZ, $ 50 mS
CLR PJSBZ
RR A ; Desplazamiento a la derecha
MOV P1, A
JNB PJSBZY, MAIN2 S
CLR PJSBZY
PRINCIPAL3: JNB PJSBZ, $; 50 mS
CLR PJSBZ
RL A; Desplazamiento a la izquierda
MOV P1, A
JNB PJSBZY, PRINCIPAL3; 2 S
CLR PJSBZY
AJMP PRINCIPAL1
FIN