Racing
1
INC R3 ACALL DECIMAL JB P1.6,MAX_HORA MOV MAXIMO,#60H MAX_HORA: MOV A,R3 CJNE A,MAXIMO,SALTO24H MOV R3,#00H MOV A,#00H SALTO24H MOV @R0,A AJMP PETICION BOTON2: CPL P1.6 MOV R3,#00H INC R0 CJNE @R0,#0FFH,PETICION AJMP SETUP_OK BOTON3: MOV A,R0 CLR C RRC A JC PETICIONSETUP_OK MOV @R0,#0FFH MOV 89H,#02H MOV 88H,#10H MOV 8CH,#0FEH INICIALIZAR: MOV R0,#30H MOV R2,#32H MOV CONTADOR, 89H
2
PUESTA0 MOV R6,#01H MOV R7,#01H INC SEG MOV A,SEG CJNE A,#3CH,CUENTA MOV SEG,R4 AJMP MINUTOS CUENTA: ACALL DISPLAYS−MANDAR ACALL CHEQUEO MOV A,88H CJNE A,#30H,CUENTA MOV 88H,#10H DJNZ R7,CUENTA MOV R7,#01H DJNZ R6,CUENTA AJMP PUESTA0 MINUTOS: INC MIN CLR 90H.0 MOV A, MINCJNE A,#60H, CONVERTIR_MIN AJMP HORAS CONVERTIR_MIN MOV R3,MIN ACALL DECIMAL MOV MIN,R3 MOV A,MIN CJNE A,#60H, CUENTA
3
HORAS: MOV MIN,R4 INC HORA MOV A, HORA CJNE A,#24H, CONVERTIR_HORA MOV HORA,R4 AJMP INICIALIZAR CONVERTIR_HORA MOV R3,HORA ACALL DECIMAL MOV HORA,R3 MOV A,HORA CJNE A,#24H, CUENTA AJMP INICIALIZAR ACTIVAR: SETB 90H.0 INC R2 INC R2 MOV A,R2 MOV R0,A CJNE@R0,#0FFH,FIN_ALARMAS MOV R2,#32H FIN_ALARMAS: MOV R0,#30H RET CHEQUEO: MOV R0,#30H MOV A, R2 MOV R1,A BUCLE: MOV A, @R0 XRL A, @R1
4
JNZ SALIR DJNZ CONTADOR, BUCLE1 ACALL ACTIVAR BUCLE1: INC R0 INC R1 AJMP BUCLE ACALL ACTIVAR SALIR: MOV R0,#30H MOV CONTADOR, #02H RET DECIMAL: MOV A,#0AH ANL A,R3 CJNE A,#0AH, NO_TOCAR MOV A,R3 ADD A,#06H XCH A,R3 NO_TOCAR RET DISPLAYS ACALL NPN MOV A,#0F0H ANL A,@R0 SWAP AACALL MANDAR ACALL NPN MOV A,#0FH ANL A,@R0 ACALL MANDAR
5
RET MANDAR MOVC A, @A+DPTR MOV P2,A RET DISPLAYS−MANDAR: ACALL DISPLAYS INC R0 ACALL DISPLAYS DEC R0 RET NPN: MOV A,R5 MOV P3,A MOV P3,R4 RR A SEGUIR MOV R5,A RET END . PARTES DEL PROGRAMA Todo el funcionamiento del reloj esta escrito en ensamblador, es decir, en lenguaje de bajo nivel con un limite de 256 bytes de memoria interna porchip (8052). En el programa se puede diferenciar 6 partes diferentes: −Inicializacion de datos. −Configuracion de las horas y minutos. −Configuracion de registros para emular un segundo(TIMERS). −Algoritmo del reloj y activacion dela alarma. −Codificador de hexadecimal a decimal. −Codificador de decimal a 7 segmentos. INICIALIZACION DE DATOS 6
La funcion de esta parte es la de almacenar unosdatos en la memoria para poner en marcha al reloj. Hay dos clases de datos en nuestro programa: • Datos temporales. • Constantes. Los datos temporales se utilizan para poner en marcha el reloj. Estos datos cambiaran continuamente según el algoritmo empleado. Un ejemplo de dato temporal puede ser el registro que contiene la direccion de la ultima alarma programada. Las constantes son datos que novan a cambiar en el transcurso del programa y que nos sirven de referencia. Un ejemplo de constantes es la tabla de datos correspondiente a la excitación de los displays de 7 segmentos. TABLA DE DATOS DE EXCITACIÓN DISPLAY 7 SEGMENTOS. USES 80537 ORG 00H DB 63D,06D,91D,79D,102D,109D,125D,07D,255D,111D ASIGNACIONES DE MEMORIA. HORA EQU 30H HORA ACTUAL MIN EQU 31H MINUTO ACTUAL SEG EQU 28H SEGUNDOS...
Regístrate para leer el documento completo.