0% encontró este documento útil (0 votos)
4 vistas5 páginas

Código ASM para Control de Secuencias LED

Este programa controla cuatro secuencias de encendido de LEDs mediante tablas y permite cambiar entre ellas y entre modos de funcionamiento de semáforo mediante pulsadores. El programa incluye subrutinas para retardos y para pausar la secuencia al pulsar un botón.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas5 páginas

Código ASM para Control de Secuencias LED

Este programa controla cuatro secuencias de encendido de LEDs mediante tablas y permite cambiar entre ellas y entre modos de funcionamiento de semáforo mediante pulsadores. El programa incluye subrutinas para retardos y para pausar la secuencia al pulsar un botón.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

D:\Users\Alejandro\Documents\UNEXPO\7mo semestre 2012-1\microprocesadores y microcontroladores\practicas de lab\[Link] LIST P=18F4550 #INCLUDE "P18F4550.

INC" CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG FOSC=HS PWRT=ON LVP=OFF MCLRE=OFF PBADEN=OFF WDT=OFF

; PORT B Analogic Digital Enable ; CICLO INFINITO, QUE SE RESETEE AUTOMATICAMENTE

; DECLARACIN DE VARIABLES CONT1 EQU 50H CONT2 EQU 51H CONT3 EQU 52H SIZETABLA EQU 53H SIZERETARDO EQU 54H ;TABLAS CON ESTADOS DE LAS SECUENCIAS Y DEL SEMFORO ORG 0X400 SEC1: DB 0X01,0X02,0X04,0X08,0X10,20H,40H,80H SEC2: DB 1H,3H,7H,0x0F,1FH,3FH,0X7F,0XFF SEC3: DB 0H,18H,24H,42H,81H,42H,24H,18H SEC4: DB 0H,18H,3CH,7EH,0XFF,7EH,3CH,18H SEMNORMAL: DB 0X98,0X98,0X98,0X28,0X28,0X28,0X28,0X28,0X28,0X28,0X28,0X48,0X48,0X89,0X89,0X89,0X82,0X82,0X82,0X82 ,0X82,0X84,0X84 SEMAINT: DB 0XFF,0X00 ORG 0X00 GOTO INICIO INICIO: MOVLW 0X00 MOVWF TRISD MOVLW 0XFF MOVWF TRISB CLRF PORTB MOVLW 0X00 MOVWF TRISC

;PUERTO DE SALIDA ;LOS TERMINALES DEL PUERTO B; (B0,B1,B2) SON LAS ENTRADAS DE LOS PULSADORES ;SALIDAS DE LOS LEDs INDICADORES DE LA SECUENCIA Y MODO DEL SEMFORO

SECUENCIA1: BTFSS PORTB,1 ;CHEQUEA EL PULSADOR DE CAMBIO DE SECUENCIA SI ESTA EN ALTO, PARA EVITAR QUE CAMBIE DE SECUENCIA DE MANERA INDESEADA POR PULSAR DEMAS GOTO SECUENCIA1 BTFSS PORTB,0 GOTO SECUENCIA1 MOVLW 0X00 ;LEDs INDICADORES APAGADOS MOVWF PORTC MOVLW UPPER SEC1 ;PARTE SUPERIOR DE LA TABLA MOVWF TBLPTRU MOVLW HIGH SEC1 ;PARTE ALTA DE LA TABLA MOVWF TBLPTRH MOVLW LOW SEC1 ;PARTE INFERIOR DE LA TABLA MOVWF TBLPTRL MOVLW .8 MOVWF SIZETABLA READSEC1: TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO ESTADO DE SECUENCIA CHEQUEO1: BTFSC PORTB,0 GOTO CHEQUEO21 GOTO SEMFORO CHEQUEO21: BTFSC PORTB,1 GOTO CHEQUEO31 GOTO SECUENCIA2 CHEQUEO31: BTFSC PORTB,2 GOTO RETARDO1 ;LEE E INCREMENTA LA POSICIN DE LA TABLA ;TRASLADA LO CARGADO EN EL ARCHIVO TABLAT HACIA EL PUERTO D(SALIDA) ;VARIABLE QUE DETERMINA LAS VECES QUE SE LLAMA A RETARDO GENERAL POR CADA ;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SEMFORO ;CHEQUEA EL PULSADOR 2, PARA CAMBIAR DE SECUENCIA SIGUIENTE

;CHEQUEA EL PULSADOR 3, PARA PAUSAR LA SECUENCIA

D:\Users\Alejandro\Documents\UNEXPO\7mo semestre 2012-1\microprocesadores y microcontroladores\practicas de lab\[Link] CALL PREPAUSA REGRESO1: ;SE CHEQUEA EL PIN DEL PULSADOR DE PAUSA DE MANERA QUE SI SE ENCUENTRA PULSADO NO PUEDA SEGUIR ;CON LA EJECUCIN DEL PROGRAMA HASTA QUE SE DEJE DE PULSAR PARA EVITAR QUE ENTRE EN PAUSA NUEVAMENTE BTFSS PORTB,2 GOTO REGRESO1 RETARDO1: CALL RETARDOGENERAL DECFSZ SIZERETARDO ;AL PRODUCIRSE EL LLAMADO DEL RETARDO AL RETORNAR SE DECREMENTA ESTA VARIABLE GOTO CHEQUEO1 ;SI LA VARIABLE ANTERIOR NO ES CERO ENTONCES SIGNIFICA QUE LE FALTA UN TIEMPO EN EL ESTADO ACTUAL ;POR TANTO SE RETORNA AL CHEQUEO Y POSTERIORMENTE A LOS RETARDOS FALTANTES DECFSZ SIZETABLA GOTO READSEC1 GOTO SECUENCIA1 SECUENCIA2: BTFSS PORTB,1 GOTO SECUENCIA2 MOVLW 0X01 MOVWF PORTC MOVLW UPPER SEC2 MOVWF TBLPTRU MOVLW HIGH SEC2 MOVWF TBLPTRH MOVLW LOW SEC2 MOVWF TBLPTRL MOVLW .8 MOVWF SIZETABLA READSEC2: TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO CHEQUEO2: BTFSC PORTB,0 GOTO CHEQUEO22 GOTO SEMFORO CHEQUEO22: BTFSC PORTB,1 GOTO CHEQUEO32 GOTO SECUENCIA3 CHEQUEO32: BTFSC PORTB,2 GOTO RETARDO2 CALL PREPAUSA REGRESO2: BTFSS PORTB,2 GOTO REGRESO2 RETARDO2: CALL RETARDOGENERAL DECFSZ SIZERETARDO GOTO CHEQUEO2 DECFSZ SIZETABLA GOTO READSEC2 GOTO SECUENCIA2

;LED 9 ENCENDIDO

;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SEMFORO

;CHEQUEA EL PULSADOR 2, PARA CAMBIAR DE SECUENCIA SIGUIENTE

;CHEQUEA EL PULSADOR 3, PARA PAUSAR LA SECUENCIA

SECUENCIA3: BTFSS PORTB,1 GOTO SECUENCIA3 MOVLW 0X02 ;LED 10 ENCENDIDO MOVWF PORTC MOVLW UPPER SEC3 MOVWF TBLPTRU MOVLW HIGH SEC3 MOVWF TBLPTRH MOVLW LOW SEC3 MOVWF TBLPTRL MOVLW .8 MOVWF SIZETABLA READSEC3: 2

D:\Users\Alejandro\Documents\UNEXPO\7mo semestre 2012-1\microprocesadores y microcontroladores\practicas de lab\[Link] TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO CHEQUEO3: BTFSC PORTB,0 GOTO CHEQUEO23 GOTO SEMFORO CHEQUEO23: BTFSC PORTB,1 GOTO CHEQUEO33 GOTO SECUENCIA4 CHEQUEO33: BTFSC PORTB,2 GOTO RETARDO3 CALL PREPAUSA REGRESO3: BTFSS PORTB,2 GOTO REGRESO3 RETARDO3: CALL RETARDOGENERAL DECFSZ SIZERETARDO GOTO CHEQUEO3 DECFSZ SIZETABLA GOTO READSEC3 GOTO SECUENCIA3 SECUENCIA4: BTFSS PORTB,1 GOTO SECUENCIA4 MOVLW 0X03 MOVWF PORTC MOVLW UPPER SEC4 MOVWF TBLPTRU MOVLW HIGH SEC4 MOVWF TBLPTRH MOVLW LOW SEC4 MOVWF TBLPTRL MOVLW .8 MOVWF SIZETABLA

;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SEMFORO

;CHEQUEA EL PULSADOR 2, PARA CAMBIAR DE SECUENCIA SIGUIENTE

;CHEQUEA EL PULSADOR 3, PARA PAUSAR LA SECUENCIA

;LEDs INDICADORES ENCENDIDOS

READSEC4: TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO CHEQUEO4: BTFSC PORTB,0 GOTO CHEQUEO24 GOTO SEMFORO CHEQUEO24: BTFSC PORTB,1 GOTO CHEQUEO34 GOTO SECUENCIA1 CHEQUEO34: BTFSC PORTB,2 GOTO RETARDO4 CALL PREPAUSA REGRESO4: BTFSS PORTB,2 GOTO REGRESO4 RETARDO4: CALL RETARDOGENERAL DECFSZ SIZERETARDO GOTO CHEQUEO4 DECFSZ SIZETABLA GOTO READSEC4 GOTO SECUENCIA4 RETARDOGENERAL: MOVLW .6 MOVWF CONT1 RETA3: MOVLW .125 MOVWF CONT2

;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SEMFORO(NORMAL)

;CHEQUEA EL PULSADOR 2, PARA CAMBIAR DE SECUENCIA SIGUIENTE

;CHEQUEA EL PULSADOR 3, PARA PAUSAR LA SECUENCIA

; RETARDO DE UN TERCIO DE SEGUNDO APROXIMADAMENTE

D:\Users\Alejandro\Documents\UNEXPO\7mo semestre 2012-1\microprocesadores y microcontroladores\practicas de lab\[Link]

RETA2: MOVLW .155 MOVWF CONT3 RETA1: DECFSZ CONT3 GOTO RETA1 DECFSZ CONT2 GOTO RETA2 DECFSZ CONT1 GOTO RETA3 RETURN

SEMFORO: SEMFORONORMAL: BTFSS PORTB,0 GOTO SEMFORO BTFSS PORTB,2 GOTO SEMFORO MOVLW 0X02 MOVWF PORTC MOVLW UPPER SEMNORMAL MOVWF TBLPTRU MOVLW HIGH SEMNORMAL MOVWF TBLPTRH MOVLW LOW SEMNORMAL MOVWF TBLPTRL MOVLW .23 MOVWF SIZETABLA READSEMNORMAL: TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO CHEQUEO1N: BTFSC PORTB,0 GOTO CHEQUEO2N GOTO SECUENCIA1 CHEQUEO2N: BTFSC PORTB,1 GOTO RETARDOSEMAFORO1 GOTO SEMFOROINTERMITENTE RETARDOSEMAFORO1: CALL RETARDOGENERAL DECFSZ SIZERETARDO GOTO CHEQUEO1N DECFSZ SIZETABLA GOTO READSEMNORMAL GOTO SEMFORONORMAL SEMFOROINTERMITENTE: BTFSS PORTB,1 GOTO SEMFOROINTERMITENTE MOVLW 0X01 MOVWF PORTC MOVLW UPPER SEMAINT MOVWF TBLPTRU MOVLW HIGH SEMAINT MOVWF TBLPTRH MOVLW LOW SEMAINT MOVWF TBLPTRL MOVLW .2 MOVWF SIZETABLA READSEMAINT: TBLRD*+ MOVFF TABLAT,PORTD MOVLW .3 MOVWF SIZERETARDO CHEQUEO1I: BTFSC PORTB,0 GOTO CHEQUEO3I GOTO SECUENCIA1

;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SECUENCIA

;CHEQUEA EL PULSADOR 2, PARA CAMBIAR A SEMFOROINTERMITENTE

;CHEQUEA EL PULSADOR 1, Y SI ESTA PULSADO PASA AL MODO SECUENCIA

D:\Users\Alejandro\Documents\UNEXPO\7mo semestre 2012-1\microprocesadores y microcontroladores\practicas de lab\[Link] CHEQUEO3I: BTFSC PORTB,2 GOTO RETARDOSEMAFORO GOTO SEMFORONORMAL RETARDOSEMAFORO: CALL RETARDOGENERAL DECFSZ SIZERETARDO GOTO CHEQUEO1I DECFSZ SIZETABLA GOTO READSEMAINT GOTO SEMFOROINTERMITENTE ;CHEQUEA EL PULSADOR 3, PARA CAMBIAR A SEMFORONORMAL

PREPAUSA: ;ESTA SUBRUTINA EVITA QUE AL SER PULSADO EL PULSADOR DE PAUSA SE DESACTIVE INMEDIATAMENTE LA PAUSA BTFSS PORTB,2 GOTO PREPAUSA PAUSA: ;ESTA SUBRUTINA ES UN CICLO CERRADO QUE SALE SOLO AL SER PULSADO EL PULSADOR DE PAUSA BTFSC PORTB,2 GOTO PAUSA RETURN END

También podría gustarte