Computing">
Nothing Special   »   [go: up one dir, main page]

Ejercicios Con Pic 16F84

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Ejemplos de programación con PIC16F84

Mplab IDE – Intermitencia de un LED


Este ejercicio explora las directivas básicas de programación y la utilización de las
instrucciones más habituales.

Entradas y salidas: en este caso no hay entradas solo una salida donde se
conectara un diodo LED, elegimos el puerto “B” en su pin RB0 como salida de
datos.

Pseudocódigo:

INICIA:
CONFIGURAR PUERTOS:
PUERTO B SALIDA DE DATOS
PUERTO A  ENTRADA
RUTINA: BORRAR EL PUERTO B
BIT 0 PUERTO B  1
LLAMAR RUTINA DE RETARDO
BIT 0 PUERTO B  0
LLAMAR RUTINA DE RETARDO
SALTAR A RUTINA
TERMINA

SUBRUTINA “RETARDO”:
REGISTRO TEMPORAL1=VALOR1
TRES REGISTRO TEMPORAL2=VALOR2
DOS REGISTRO TEMPORAL3=VALOR3
DECREMENTE REGISTRO TEMPORAL 3
UNO IF TEMPORAL3=0
THEN DECREMETNE TEMPORAL2
IF TEMPORAL2=0
THEN DECREMENTE TEMPORAL1
IF TEMPORAL1=0
THEN RETORNE
ELSE SALTAR A  TRES
ELESE SALTAR A  DOS
ELSE SALTAR A  UNO
TERMINA
Diagrama de flujo:

Montaje:

Código ensamblador

TITLE "PIC16F84A EEPROM PROGRAM"


LIST P=16F84A,F=INHX32
#INCLUDE <P16F84A.INC>
;INGENIERO ELECTRONICO HECTOR URIEL VILLAMIL GONZALEZ
;ENCENDIDO INTERMITENTE DE UN LED (PARA EFECTOS PRACTICOS SE INCORPORA UN RETARDO)
;PINES DE SALIDA LEDS ==> B0
;PINES DE ENTRADA ==> "NINGUNO"
;-----------------------------------------------------------------------------------------------
;REGISTROS DE PROPOSITO ESPECIAL MAS UTILIZADOS
INDF EQU 00H ;REGISTRO PARA DIRECCIONAMIENTO INDIRECTO
TMR0 EQU 01H ;REGISTRO TIMER 0
PCL EQU 02H ;PROGRAM COUNTER PARTE BAJA
STATUS EQU 03H ;REGISTRO DE ESTADO DEL PIC
FSR EQU 04H ;REGISTRO UTILIZADO COMO APUNTADOR EN DIR. INDIRECTO
PTA EQU 05H ;PUERTO A DEL PIC
PTB EQU 06H ;PUERTO B DEL PIC
EEDATA EQU 08H ;DATO IN/OUT EN EEPROM
EEADR EQU 09H ;DIRECCION DE IN/OUT DE EEPROM
PCLATCH EQU 0AH ;CERROJO PARTE ALTA DEL PROGRAM COUNTER
INTCON EQU 0BH ;REGISTRO DE INTERRUPCIONES
OPCION EQU 81H ;OPCIONES DE CONFIGURACION INT TMP PULLUP PREESCALER
TRISA EQU 85H ;RA0,RA1,RA2,RA3,RA4 ENTRADAS
TRISB EQU 86H ;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7 COMO SALIDAS
EECON1 EQU 88H ;B4=EEIF/FIN WR/*B3=WRERR/ERROR WR/*B2=WREN/PERMISO
WR/*B1/WR/*B0/RD/
EECON2 EQU 89H ;REG SEGURIDAD PROCESO EEPROM
;-----------------------------------------------------------------------------------------------
;DEFINICION REGISTROS DE PROPOSITO GENERAL PARA ESTE PROGRAMA
TMP1 EQU 0CH ;REGISTRO TEMPORAL 1 SIRVE AL CICLO MAS EXTERNO DEL RETARDO
TMP2 EQU 0DH ;REGISTRO TEMPORAL 2 SIRVE AL CICLO INTERMEDIO DEL RETARDO
TMP3 EQU 0EH ;REGISTRO TEMPORAL 3 SIRVE AL CICLO MAS INTERNO DEL RETARDO
;-----------------------------------------------------------------------------------------------
;DEFINICION DE BITS
W EQU 0 ;REGISTRO DE TRABAJO
F EQU 1 ;REGISTRO
C EQU 0 ;FLAG DE CARRY
Z EQU 2 ;FLAG DE CERO
RD EQU 0 ;RD=1 CICLO DE LECTRURA DE LA EEPROM
WR EQU 1 ;WR=1 CICLO DE ESCRITURA DE LA EEPROM
WREN EQU 2 ;WREN=1 AUTORIZA PERMISO DE ESCRITURA EN LA EEPROM
B0 EQU 0 ;BIT 0
B1 EQU 1 ;BIT 1
B2 EQU 2 ;BIT 2
B3 EQU 3 ;BIT 3
B4 EQU 4 ;BIT 4
B5 EQU 5 ;BIT 5
B6 EQU 6 ;BIT 6
B7 EQU 7 ;BIT 7
;-----------------------------------------------------------------------------------------------
;DEFINICION DE CONSTANTES
VAL1 EQU 20H ;CONSTANTE DE RETARDO RECARGA AL REGISTRO TMP1
VAL2 EQU 30H ;CONSTANTE DE REATRDO RECARGA AL REGISTRO TMP2
VAL3 EQU 40H ;CONSTANTE DE RETARDO RECARGA AL REGISTRO TMP3
;-----------------------------------------------------------------------------------------------
;MACROS
#DEFINE BANK1 BSF STATUS, 5 ;ENCARGADO DE PASAR AL BANCO DE MEMORIA CERO
#DEFINE BANK0 BCF STATUS, 5 ;ENCARGADO DE PASAR AL BANCO DE MEMORIA UNO
;-----------------------------------------------------------------------------------------------
;INICIO DEL PROGRAMA
;-----------------------------------------------------------------------------------------------
ORG 00H
;-----------------------------------------------------------------------------------------------
;CONFIGURACION DE PUERTOS
;-----------------------------------------------------------------------------------------------
BANK1
MOVLW 00H ;SALIDA DE DATOS POR LOS PINES B7 B6 B5 B4 B3 B2 B1 B0
MOVWF TRISB
MOVLW 1FH ;ENTRADA DE DATOS A4 A3 A2 A1 A0
MOVWF TRISA
BANK0
;-----------------------------------------------------------------------------------------------
;PROGRAMA DE INICIO
;-----------------------------------------------------------------------------------------------
INICIO CLRF PTB ;BORRAR EL PUERTO SE APAGAN LOS LEDs
RUTIN BSF PTB,0 ;COLOCA UN UNO EN EL BIT CERO DE PUERTO B
CALL RET ;LLAMAR A RUTINA DE RETARDO
BCF PTB,0 ;COLOCA UN CERO EN EL BIT CERO DE PUERTO B
CALL RET ;LLAMAR A RUTINA DE RETARDO
GOTO RUTIN ;COMENZAR DE NUEVO LA RUTINA
;-----------------------------------------------------------------------------------------------
;LLAMA LA RUTINA DE RETARDO ESPECIAL VARIABLE
;-----------------------------------------------------------------------------------------------
RET MOVLW VAL1 ;VALOR MAXIMO / MINIMO VARIABLE DE TEMPORIZADOR
MOVWF TMP1 ;REGISTRO TEMPORAL 1 TIEMPOS GRANDES
TRES MOVLW VAL2 ;VALOR FIJO
MOVWF TMP2 ;REGISTRO TEMPORAL 2 TIEMPOS MEDIANOS
DOS MOVLW VAL3 ;VALOR FIJO
MOVWF TMP3 ;REGISTRO TEMPORAL 3 TIEMPOS PEQUEÑOS
UNO DECFSZ TMP3, F
GOTO UNO
DECFSZ TMP2, F
GOTO DOS
DECFSZ TMP1, F
GOTO TRES
RETURN
;-----------------------------------------------------------------------------------------------
END
;-----------------------------------------------------------------------------------------------

Mplab IDE – Encendido y Apagado de un LED utilizando un interruptor


Este ejercicio propone recibir la señal de un pulsador y reflejar este estado
mediante el encendido de un LED en caso de ser pulsado y apagar el LED en
caso de soltar el pulsador.

Entradas y salidas: para este ejercicio existe un pulsador el cual es conectado al


puerto a en su pin RA0, hay una salida donde se conectara un diodo LED,
elegimos el puerto “B” en su pin RB0 como salida de datos.
Pseudocódigo:

INICIA:
CONFIGURAR PUERTOS:
PUERTO B SALIDA DE DATOS
PUERTO A  ENTRADA
INICIO: BORRAR EL PUERTO B
SCAN: IF PUERTO A  1
THEN ENCENDER EL LED PTB=1
SALTAR A SCAN
ELSE SALTAR A INICIO
TERMINA

Diagrama de flujo:
Montaje

Código ensamblador

TITLE "PIC16F84A EEPROM PROGRAM"


LIST P=16F84A,F=INHX32
#INCLUDE <P16F84A.INC>
;INGENIERO ELECTRONICO HECTOR URIEL VILLAMIL GONZALEZ
;ENCENDIDO DE UN LED POR ACCION DE UN PULSADOR(PARA EFECTOS PRACTICOS SE INCORPORA UN
RETARDO)
;PINES DE SALIDA LEDS ==> B0
;PINES DE ENTRADA ==> A0 PULSADOR
;-----------------------------------------------------------------------------------------------
;REGISTROS DE PROPOSITO ESPECIAL
INDF EQU 00H ;REGISTRO PARA DIRECCIONAMIENTO INDIRECTO
TMR0 EQU 01H ;REGISTRO TIMER 0
PCL EQU 02H ;PROGRAM COUNTER PARTE BAJA
STATUS EQU 03H ;REGISTRO DE ESTADO DEL PIC
FSR EQU 04H ;REGISTRO UTILIZADO COMO APUNTADOR EN DIR. INDIRECTO
PTA EQU 05H ;PUERTO A DEL PIC
PTB EQU 06H ;PUERTO B DEL PIC
EEDATA EQU 08H ;DATO IN/OUT EN EEPROM
EEADR EQU 09H ;DIRECCION DE IN/OUT DE EEPROM
PCLATCH EQU 0AH ;CERROJO PARTE ALTA DEL PROGRAM COUNTER
INTCON EQU 0BH ;REGISTRO DE INTERRUPCIONES
OPCION EQU 81H ;OPCIONES DE CONFIGURACION INT TMP PULLUP PREESCALER
TRISA EQU 85H ;RA0=PULSADOR,RA1,RA2,RA3,RA4 ENTRADAS
TRISB EQU 86H ;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7 COMO SALIDAS
EECON1 EQU 88H ;B4=EEIF/FIN WR/*B3=WRERR/ERROR WR/*B2=WREN/PERMISO WR/*B1/WR/*B0/RD/
EECON2 EQU 89H ;REG SEGURIDAD PROCESO EEPROM
;-----------------------------------------------------------------------------------------------
;DEFINICION REGISTROS DE PROPOSITO GENERAL
TMP1 EQU 0CH ;REGISTRO TEMPORAL 1 SIRVE AL CICLO MAS EXTERNO DEL RETARDO
TMP2 EQU 0DH ;REGISTRO TEMPORAL 2 SIRVE AL CICLO INTERMEDIO DEL RETARDO
TMP3 EQU 0EH ;REGISTRO TEMPORAL 3 SIRVE AL CICLO MAS INTERNO DEL RETARDO
;-----------------------------------------------------------------------------------------------
;DEFINICION DE BITS
W EQU 0 ;REGISTRO DE TRABAJO
F EQU 1 ;REGISTRO
C EQU 0 ;FLAG DE CARRY
Z EQU 2 ;FLAG DE CERO
RD EQU 0 ;RD=1 CICLO DE LECTRURA DE LA EEPROM
WR EQU 1 ;WR=1 CICLO DE ESCRITURA DE LA EEPROM
WREN EQU 2 ;WREN=1 AUTORIZA PERMISO DE ESCRITURA EN LA EEPROM
B0 EQU 0 ;BIT 0
B1 EQU 1 ;BIT 1
B2 EQU 2 ;BIT 2
B3 EQU 3 ;BIT 3
B4 EQU 4 ;BIT 4
B5 EQU 5 ;BIT 5
B6 EQU 6 ;BIT 6
B7 EQU 7 ;BIT 7
;-----------------------------------------------------------------------------------------------
;DEFINICION DE CONSTANTES
VAL1 EQU 20H ;CONSTANTE DE RETARDO RECARGA AL REGISTRO TMP1
VAL2 EQU 30H ;CONSTANTE DE REATRDO RECARGA AL REGISTRO TMP2
VAL3 EQU 40H ;CONSTANTE DE RETARDO RECARGA AL REGISTRO TMP3
;-----------------------------------------------------------------------------------------------
;MACROS
#DEFINE BANK1 BSF STATUS, 5 ;ENCARGADO DE PASAR AL BANCO DE MEMORIA CERO
#DEFINE BANK0 BCF STATUS, 5 ;ENCARGADO DE PASAR AL BANCO DE MEMORIA UNO
;-----------------------------------------------------------------------------------------------
;INICIO DEL PROGRAMA
;-----------------------------------------------------------------------------------------------
ORG 00H
;-----------------------------------------------------------------------------------------------
;CONFIGURACION DE PUERTOS
;-----------------------------------------------------------------------------------------------
BANK1
MOVLW 00H ;SALIDA DE DATOS POR LOS PINES B7 B6 B5 B4 B3 B2 B1 B0
MOVWF TRISB
MOVLW 1FH ;ENTRADA DE DATOS A4 A3 A2 A1 A0
MOVWF TRISA
BANK0
;-----------------------------------------------------------------------------------------------
;PROGRAMA DE INICIO
;-----------------------------------------------------------------------------------------------
INICIO CLRF PTB ;BORRADO DEL PUERTO B
SCAN BTFSS PTA, B0 ;PRUEBE BIT 0 DEL PUERTO A (RA0)
GOTO INICIO ;SI ES CERO SALTA A INICIO Y NO ENCIENDE EL LED
BSF PTB, B0 ;SI ES UNO ENCIENDE EL LED
GOTO SCAN ;SALTAR A LA RUTINA DE TESTEO

;-----------------------------------------------------------------------------------------------
END
;-----------------------------------------------------------------------------------------------

Mplab IDE – Manejo de puertos “secuencias de LEDs controladas por


botones”
Para el desarrollo de esta implementación se comparte el código fuente y el
circuito, se infiere que el estudiante debe deducir el pseudocódigo o algoritmo
utilizado siguiendo el desarrollo del programa y su documentación como ejercicio
de aprendizaje y comprensión de las instrucciones y funcionamiento del
dispositivo.
Figura 110. Diagrama de conexión

C2

22p
X1
CRYSTAL
C3
U1
16 17 D2
15
OSC1/CLKIN RA0
18
R3
22p
OSC2/CLKOUT RA1
1
4
RA2
2
1k D3
MCLR RA3
3
R4 LED-RED
RA4/T0CKI
6
1k D4
RB0/INT
7
R5 LED-RED
RB1
R1 R2 RB2
8
1k D5
10k D1 100R RB3
9 R6 LED-RED
1N4148 10
RB4
11
RB5
12
1k D6
RB6 R7 LED-RED
13
RB7
PIC16F84A
1k D7
R8 LED-RED
C1 PROGRAM=Ejercicio01.HEX
10u 1k D8
R9 LED-RED

1k D9
R10 LED-RED

1k
LED-RED

Código fuente para la implementación de la secuencia de LEDs

TITLE "PIC16F84A EEPROM PROGRAM"


LIST P=16F84A,F=INHX32
#INCLUDE <P16F84A.INC>
;INGENIERO ELECTRONICO HECTOR URIEL VILLAMIL GONZALEZ
;SECUENCIA DE LEDS PINES DE SALIDA LEDS ==> B7 B6 B5 B4 B3 B2 B1
;ORDENES A0=INCREMENTA SECUENCIA A1=DECREMENTA SECUENCIAS A2=INCREMENTA VELOCIDAD
;A3=DECREMENTA VELOCIDAD ===>PULSADORES SE UTILIZAN COMO ENTRADAS
PCL EQU 02H ;PROGRAM COUNTE PARTE BAJA
STATUS EQU 03H ;REGISTRO DE ESTADO DEL PIC
PTA EQU 05H ;PUERTO A DEL PIC
PTB EQU 06H ;PUERTO B DEL PIC
EEDATA EQU 08H ;DATO IN/OUT EN EEPROM
EEADR EQU 09H ;DIRECCION DE IN/OUT DE EEPROM
INTCON EQU 0BH ;REGISTRO DE INTERRUPCIONES
OPCION EQU 81H ;OPCIONES DE CONFIGURACION INT TMP PULLUP PREESCALER
TRISA EQU 85H ;/RA7-RA6-RA5=NOP/RA4=RXRS(CABL-ESCL)/RA3=TEST SENSORES/RA2-RA1-
RA0=TECLD
TRISB EQU 86H ;/RB7=TXRS232/RB6=CLK2/RB5=CLK1/RB4-RB3-RB2-RB1=(MULTIPLX-'D')/RB0=INT/
EECON1 EQU 88H ;B4=EEIF/FIN WR/*B3=WRERR/ERROR WR/*B2=WREN/PERMISO WR/*B1/WR/*B0/RD/
EECON2 EQU 89H ;REG SEGURIDAD PROCESO EEPROM
;DEFINICION REGISTROS FSR
SEC EQU 0CH ;REGISTRO CONTROLADOR DE SECUENCIAS
BOT EQU 0DH ;BORRAR REGISTRO DE ALMACENAMIENTO Y CONTROL DE PULSADORES
CONRT EQU 0EH ;REGISTRO DE CONTROL DE RUTINAS
VMAX EQU 0FH ;SUB-RUTINA DE VELOCIDAD MAXIMA
TMP1 EQU 10H ;REGISTRO TEMPORAL 1 TIEMPOS MEDIANOS
TMP2 EQU 11H ;REGISTRO TEMPORAL 2 TIEMPOS MEDIANOS
TMP3 EQU 12H ;REGISTRO TEMPORAL 3 TIEMPOS MEDIANOS
CONT EQU 13H ;REGISTRO CONTADOR PARA VALORES DE LA TABLA
;DEFINICION DE BITS
W EQU 0 ;REGISTRO DE TRABAJO
F EQU 1 ;REGISTRO
C EQU 0 ;FLAG DE CARRY
Z EQU 2 ;FLAG DE CERO
RD EQU 0 ;RD=1 CICLO DE LECTRURA DE LA EEPROM
WR EQU 1 ;WR=1 CICLO DE ESCRITURA DE LA EEPROM
WREN EQU 2 ;WREN=1 AUTORIZA PERMISO DE ESCRITURA EN LA EEPROM
B0 EQU 0 ;BIT 0
B1 EQU 1 ;BIT 1
B2 EQU 2 ;BIT 2
B3 EQU 3 ;BIT 3
B4 EQU 4 ;BIT 4
B5 EQU 5 ;BIT 5
B6 EQU 6 ;BIT 6
B7 EQU 7 ;BIT 7
;DEFINICION DE CONSTANTES
VAL1 EQU 20H
VAL2 EQU 10H
;DEFINICION DE DIRECCIONES EEPROM
STAEE EQU 00H ;/B7=NOP/B6=NOP/B5=NOP/B4=OFF*LCD/B3=LIGHT*LCD/B2=ALAR*ON:OFF/B1-
B2=CLAVOPC
;MACROS
#DEFINE BANK1 BSF STATUS, 5
#DEFINE BANK0 BCF STATUS, 5
;INICIO DEL PROGRAMA
;INICIO DEL PROGRAMA
ORG 00H
CALL CONFIG
GOTO INICIO
ORG 10H
;CONFIGURACION DE PUERTOS
CONFIG BANK1
MOVLW 00H ;SALIDA DE DATOS POR LOS PINES B7 B6 B5 B4 B3 B2 B1 DATOS CONSIGNADOS EN
LA EEPROM
MOVWF TRISB
MOVLW 1FH ;ENTRADA DE DATOS A ALMACENAR BOTONES A3 A2 A1 A0
MOVWF TRISA ;===> A4 =AUTORIZACION DE ESCRITURA EN EEPROM
BANK0
RETURN
;PROGRAMA DE INICIO Y CONTROL DE TX RS232
INICIO MOVLW 64H
MOVWF VMAX ;VALOR INICIAL DEL RETARDO
CLRF CONRT ;VALOR DE RUTINA INICIAL
CLRF SEC ;REGISTRO CONTROLADOR DE SECUENCIAS
CLRF BOT ;BORRAR REGISTRO DE ALMACENAMIENTO Y CONTROL DE PULSADORES
MENU MOVF CONRT, W ;REGISTRO DE CONTROL DE RUTINAS
XORLW 01H
BTFSC STATUS, Z ;¿PRIMERA RUTINA?
GOTO RUT1
MOVF CONRT, W ;REGISTRO DE CONTROL DE RUTINAS
XORLW 02H
BTFSC STATUS, Z ;¿SEGUNDA RUTINA?
GOTO RUT2
MOVF CONRT, W ;REGISTO DE CONTROL DE RUTINAS
XORLW 03H
BTFSC STATUS, Z ;¿TERCERA RUTINA?
GOTO RUT3
MOVF CONRT, W ;REGISTRO DE CONTROL DE RUTINAS
XORLW 04H
BTFSC STATUS, Z ;¿CUARTA RUTINA?
GOTO RUT4
CALL BOTN ;RUTINA DE LLAMADO Y CONTROL DE PULSADORES PUERTO A
CLRF BOT
GOTO MENU
;RUTINA DE EVALUACION DE BOTONES PULSADORES UP - DW ** VELMAX - VEL MIN
BOTN MOVF PTA, W
XORLW 00H
BTFSC STATUS, Z ;¿SE TIENE PULSADO ALGUNA TECLA?
GOTO BOTN3
BTFSC BOT, B4 ;¿YA FUE PULSADO EL TECLADO?
GOTO BOTN1
MOVF PTA, W
MOVWF BOT ;REISTRO GUARDA LOS ESTADOS DE LOS PULSADORES
CALL MENU2 ;MENU DE VELOCIDAD Y SECUENCIA
BOTN1 BSF BOT, B4 ;AJUSTE EL BIT DE CONTROL DE TECLADO !!!BOTON PULSADO!!
MOVF PTA, W
XORLW 00H
BTFSS STATUS, Z ;¿SE TIENE PULSADA ALGUNA TECLA?
BOTN2 RETURN
BOTN3 MOVF BOT, W ;LAS TECLAS NO ESTAN OPRIMIDAS
ANDLW B'00010000'
MOVWF BOT
GOTO BOTN2
;MENU DE VELOCIDAD Y SECUENCIA
MENU2 MOVF BOT, W
ANDLW 0FH
BTFSC BOT, B0 ;¿INCREMENTAR LA SECUENCIA?
GOTO UP ;SUB-RUTINA AUMENTA LA SECUENCIA
MOVF BOT, W
ANDLW 0FH
BTFSC BOT, B1 ;¿DECREMENTA LA SECUENCIA?
GOTO DOW ;SUB-RUTINA DECREMENTA LA SECUENCIA
MOVF BOT, W
ANDLW 0FH
BTFSC BOT, B2 ;¿INCREMENTA LA VELOCIDAD DE LA SECUENCIA?
GOTO VELMX ;SUB-RUTINA DE VELOCIDAD MAXIMA
MOVF BOT, W
ANDLW 0FH
BTFSC BOT, B3 ;¿DECREMENTA LA VELOCIDAD DE LA SECUENCIA?
GOTO VELMIN ;SUBRUTINA DE VELOCIDAD MINIMA
MENU21 RETURN
;SUB-RUTINA AUMENTA LA SECUENCIA
UP INCF CONRT, F ;INCREMENTA EL VALOR DE SECUENCIA
MOVF CONRT, W
XORLW 05H ;MAXIMO NUMERO DE SECUENCIAS
BTFSC STATUS, Z ;¿YA LLEGO AL MAXIMO NUMERO DE SECUENCIAS?
CLRF CONRT ;PONE EN CERO LAS RUTINAS INCREMENTA EL VALOR DE SECUENCIA
GOTO MENU21
;SUB-RUTINA DECREMENTA LA SECUENCIA
DOW DECF CONRT, F ;INCREMENTA EL VALOR DE SECUENCIA
MOVF CONRT, W
SUBLW 00H ;DETERMINA SI EL VALOR DE LA RUTINA ES MENOR DE CERO
BTFSC STATUS, C ;¿YA LLEGO A CERO EL VALOR DE SECUENCIA?
GOTO MENU21
MOVLW 04H ;MAXIMO NUMERO DE SECUENCIA
MOVWF CONRT ;INCREMENTA EL VALOR DE SECUENCIA
GOTO MENU21
;SUB-RUTINA DE VELOCIDAD MAXIMA
VELMX MOVLW 05H
ADDWF VMAX, F ;INCREMENTA EL VALOR DE SECUENCIA
MOVF VMAX, W ;REGISTRO DE MANEJO DE VELOCIDAD DE TEMPORIZADOR
XORLW 0C8H ;MAXIMO NUMERO DE TEMPORIZADOR
BTFSS STATUS, Z ;¿YA LLEGO AL MAXIMO NUMERO DE TEMPORIZADOR?
GOTO MENU21
MOVLW 0C3H ;REINICIAR AL MAXIMO - 5
MOVWF VMAX ;REGISTRO DE MANEJO DE VELOCIDAD DE TEMPORIZADOR
GOTO MENU21
;SUBRUTINA DE VELOCIDAD MINIMA
VELMIN MOVLW 05H
SUBWF VMAX, F ;DECREMENTA EL VALOR DE SECUENCIA
MOVF VMAX, W ;REGISTRO DE MANEJO DE VELOCIDAD DE TEMPORIZADOR
XORLW 0AH ;MINIMO VALOR DE RETARDO
BTFSS STATUS, Z ;¿YA LLEGO A CERO EL VALOR DE SECUENCIA?
GOTO MENU21
MOVLW 0FH ;MINIMO NUMERO DE TEMPORIZADOR + 1
MOVWF VMAX ;REGISTRO DE MANEJO DE VELOCIDAD DE TEMPORIZADOR
GOTO MENU21
;RUTINA DE SALIDA DE DATOS POR PUERTOS DE PINES PTB
OUT MOVF SEC, W ;CARGA LA SECUENCIA EN EL ACUMULADOR
MOVWF PTB ;CARGA EL VALOR DE SECUENCIA DEL ACUMULADOR A LOS PINES DEL
PUERTOB
CALL RET ;LLAMA LA RUTINA DE RETARDO ESPECIAL VARIABLE
RETURN
;RUTINA 1 SECUENCIA DE LEDS A LA DERECHA
RUT1 BCF STATUS, C ;BORRAY EL BIT DE CARRY
CLRF SEC ;INICIA REGISTRO DE SECUENCIAS
BSF SEC, B7 ;COMIENZO DE RUTINA
CALL SECU1 ;RUTINA DE LA SECUENCIA UNO
GOTO MENU ;RETORNO AL MENU PRINCIPAL
;RUTINA 2 SECUENCIA DE LEDS A LA IZQUIERDA
RUT2 BCF STATUS, C ;BORRAY EL BIT DE CARRY
CLRF SEC ;INICIA REGISTRO DE SECUENCIAS
BSF SEC, B0 ;COMIENZO DE RUTINA
CALL SECU2 ;RUTINA DE LA SECUENCIA UNO
GOTO MENU ;RETORNO AL MENU PRINCIPAL
;RUTINA 3 SECUENCIA DE LEDS CENTRO A FUERA
RUT3 CLRF CONT
CALL SECU3 ;RUTINA DE LA SECUENCIA UNO
GOTO MENU ;RETORNO AL MENU PRINCIPAL
;RUTINA 4 SECUENCIA DE LEDS FUERA A CENTRO
RUT4 MOVLW 04H
MOVWF CONT
CALL SECU4 ;RUTINA DE LA SECUENCIA UNO
GOTO MENU ;RETORNO AL MENU PRINCIPAL
;SECUENCIA 1 MOVIMIENTO DE LEDS A LA DERECHA EN SECUENCIA UNO A UNO
SECU1 CALL OUT ;RUTINA DE SALIDA DE DATOS POR PUERTOS DE PINES PTB
RRF SEC, F ;ROTA UN BIT A LA DERECHA DEL REGISTRO SEC
BTFSC STATUS, C ;¿EL CARRY ES UNO?
SECU11 RETURN
CALL BOTN ;RUTINA DE LLAMADO Y CONTROL DE PULSADORES PUERTO A
MOVF BOT, W ;EVALUAR EL REGISTRO BOT
XORLW 10H ;MASCARA PROTEGE EL VALOR DEL 4 BIT DE REGISTRO BOT==>INDICA
TECLA
BTFSS STATUS, Z ;¿SE OPRIMIO ALGUNA TECLA?
GOTO SECU1
BTFSS BOT, B4 ;¿EL BIT DE TECLADO OPRIMIDO ESTA ACTIVO?
GOTO SECU1
CLRF BOT ;BORRA EL ESTADO DE BOT===>HAY UNA NUEVA RUTINA
GOTO SECU11
;SECUENCIA 1 MOVIMIENTO DE LEDS A LA DERECHA EN SECUENCIA UNO A UNO
SECU2 CALL OUT ;RUTINA DE SALIDA DE DATOS POR PUERTOS DE PINES PTB
RLF SEC, F ;ROTA UN BIT A LA IZQUIERDA DEL REGISTRO SEC
BTFSC STATUS, C ;¿EL CARRY ES UNO?
SECU21 RETURN
CALL BOTN ;RUTINA DE LLAMADO Y CONTROL DE PULSADORES PUERTO A
MOVF BOT, W ;EVALUAR EL REGISTRO BOT
XORLW 10H ;MASCARA PROTEGE EL VALOR DEL 4 BIT DE REGISTRO BOT==>INDICA
TECLA
BTFSS STATUS, Z ;¿SE OPRIMIO ALGUNA TECLA?
GOTO SECU2
BTFSS BOT, B4 ;¿EL BIT DE TECLADO OPRIMIDO ESTA ACTIVO?
GOTO SECU2
CLRF BOT ;BORRA EL ESTADO DE BOT===>HAY UNA NUEVA RUTINA
GOTO SECU21
;RUTINA DE TABLA DE SECUENCIAS
TABLA MOVF CONT, W
ADDWF PCL, F
RETLW 00H
RETLW 18H
RETLW 24H
RETLW 42H
RETLW 81H
;RUTINA 3 SECUENCIA DE LEDS CENTRO A FUERA
SECU3 INCF CONT, F ;AUMENTAR VALOR DE TABLA
CALL TABLA ;RUTINA DE TABLA DE SECUENCIAS
MOVWF SEC
CALL OUT ;RUTINA DE SALIDA DE DATOS POR PUERTOS DE PINES PTB
MOVF CONT, W
XORLW 04H ;NUMERO DE SECUENCIAS
BTFSC STATUS, Z ;¿FIN DE SECUENCIA?
SECU31 RETURN
CALL BOTN ;RUTINA DE LLAMADO Y CONTROL DE PULSADORES PUERTO A
MOVF BOT, W ;EVALUAR EL REGISTRO BOT
XORLW 10H
BTFSS STATUS, Z ;¿SE OPRIMIO ALGUNA TECLA?
GOTO SECU3
BTFSS BOT, B4 ;¿EL BIT DE TECLADO OPRIMIDO ESTA ACTIVO?
GOTO SECU3
CLRF BOT ;BORRA EL ESTADO DE BOT===>HAY UNA NUEVA RUTINA
GOTO SECU31
;RUTINA 4 SECUENCIA DE LEDS FUERA A CENTRO
SECU4 CALL TABLA ;RUTINA DE TABLA DE SECUENCIAS
MOVWF SEC
CALL OUT ;RUTINA DE SALIDA DE DATOS POR PUERTOS DE PINES PTB
MOVF CONT, W
XORLW 00H ;NUMERO DE SECUENCIAS
BTFSC STATUS, Z ;¿FIN DE SECUENCIA?
SECU41 RETURN
DECF CONT, F ;AUMENTAR VALOR DE TABLA
CALL BOTN ;RUTINA DE LLAMADO Y CONTROL DE PULSADORES PUERTO A
MOVF BOT, W ;EVALUAR EL REGISTRO BOT
XORLW 10H
BTFSS STATUS, Z ;¿SE OPRIMIO ALGUNA TECLA?
GOTO SECU4
BTFSS BOT, B4 ;¿EL BIT DE TECLADO OPRIMIDO ESTA ACTIVO?
GOTO SECU4
CLRF BOT ;BORRA EL ESTADO DE BOT===>HAY UNA NUEVA RUTINA
GOTO SECU41
;LLAMA LA RUTINA DE RETARDO ESPECIAL VARIABLE
RET MOVF VMAX, W ;VALOR MAXIMO / MINIMO VARIABLE DE TEMPORIZADOR
MOVWF TMP1 ;REGISTRO TEMPORAL 1 TIEMPOS GRANDES
TRES MOVLW VAL1 ;VALOR FIJO
MOVWF TMP2 ;REGISTRO TEMPORAL 2 TIEMPOS MEDIANOS
DOS MOVLW VAL2 ;VALOR FIJO
MOVWF TMP3 ;REGISTRO TEMPORAL 3 TIEMPOS PEQUEÑOS
UNO DECFSZ TMP3, F
GOTO UNO
DECFSZ TMP2, F
GOTO DOS
DECFSZ TMP1, F
GOTO TRES
RETURN
END

También podría gustarte