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

Programación de LEDs con PIC16F628A

El documento contiene varios ejemplos de código en lenguaje ensamblador para PIC que controlan LEDs usando puertos digitales. Los ejemplos incluyen programas para encender y apagar LEDs individualmente o en grupos, usar bucles para parpadear LEDs, implementar semáforos y discotecas usando varios LEDs, y realizar comparaciones lógicas con entradas/salidas digitales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
66 vistas5 páginas

Programación de LEDs con PIC16F628A

El documento contiene varios ejemplos de código en lenguaje ensamblador para PIC que controlan LEDs usando puertos digitales. Los ejemplos incluyen programas para encender y apagar LEDs individualmente o en grupos, usar bucles para parpadear LEDs, implementar semáforos y discotecas usando varios LEDs, y realizar comparaciones lógicas con entradas/salidas digitales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

PIC16F628A

cmcon = 7 ;apaga los comparadores de voltaje del puerto A y los convierte en digitales

PIC16F877A ; poner en salidas digitales los puertos.


Alldigital

led VAR portb.3 ; etiqueta asignada al pin 17 o Puerto RA0


inicio: ; nombre de subrutina inicio
HIGH led ; enciende el led que está conectado en el pin 17
PAUSE 1000 ; espera un segundo
LOW led ; apaga el led
PAUSE 1000 ; espera un segundo
GOTO inicio ; continúa el programa para siempre
END

led VAR portb.3 ; etiqueta asignada al pin 3 o Puerto RB3


inicio: ; nombre de subrutina inicio
LOW led ; apaga el led que está conectado en el pin 3
PAUSE 1000 ; espera un segundo
TOGGLE led ; cambia el estado de portb.3 de on a off o viceversa
PAUSE 1000 ; espera un segundo
GOTO inicio ; continúa el programa para siempre

Trisb = %00000000 ; indica que todos lo pines del puerto B son de salida
Trisb=0
Trisb=1
Trisb=%11111111
Trisb=%11111000 ; rb0,rb1 y rb2 son salidas y rb3,rb4,rb5,rb6,rb7 son entradas
Trisb=%11001110
inicio: ; nombre de subrutina inicio
portb = %00000001 ; aunque controla todo el puerto B, sólo enciende el B0
PAUSE 1000 ; espera un segundo
portb = %00000000 ; obliga a apagarse a todos los pines del puerto B
PAUSE 1000 ; espera un segundo
GOTO inicio ; continúa el programa para siempre

Trisb =% 00101000 ; indica que sólo el puerto RB.0 es de salida


Trisb=$28
Trisb=40
inicio: ; nombre de subrutina inicio
portb.0 = 1 ; sacar un uno lógico por el puerto RB.0
PAUSE 1000 ; espera un segundo
Portb.0 = 0 ; hacer cero lógico el puerto RB.0
PAUSE 1000 ; espera un segundo
GOTO inicio ; continúa con la línea de nombre inicio

END
PROYECTOS CON LEDS

led VAR portb.0 ; etiqueta para el puerto B.0


pepe: ; nombre de subrutina pepe
HIGH led ; enciende el led que está conectado en el pin 6
PAUSE 1000 ; espera un segundo
LOW led ; apaga el led
PAUSE 1000 ; espera un segundo
GOTO pepe ; continúa el programa desde pepe para siempre
END ; fin de las instrucciones

TRISB=0
led VAR portb.0 ; etiqueta para el puerto B.0
pepe: ; nombre de subrutina pepe
HIGH led ; enciende el led que está conectado en el pin 6
PAUSE 1000 ; espera un segundo
LOW led ; apaga el led
GOTO pepe ; continúa el programa desde pepe para siempre
END ; fin de las instrucciones

SEMAFORO
trisb=0 ;indica que todos los pines del puerto B son de salida
semaforo: ;nombre de la línea semáforo
portb=%100001 ;encender rojo del 1er semáforo y verde del 2do semáforo
PAUSE 9000 ;esperar 9 segundos
portb=%100010 ;cambiar en el 2do semáforo de verde a amarillo
PAUSE 3000 ;esperar 3 segundos
portb=%001100 ;cambiar a verde en el 1er semáforo y rojo el 2do semáforo
PAUSE 9000 ;esperar 9 segundos
portb=%010100 ;cambiar en el 1er semáforo de verde a amarillo
PAUSE 3000 ;esperar 3 segundos
GOTO semaforo ;continuar con el ciclo para siempre
END ; fin de la programación
rojo1 VAR portb.5 ; etiquetas para los puertos
amarillo1 VAR portb.4
verde1 VAR portb.3
rojo2 VAR portb.2
amarillo2 VAR portb.1
verde2 VAR portb.0

semaf:
HIGH rojo1 : HIGH verde2 ;primer semáforo en rojo y 2do en verde
PAUSE 9000 ;esperar 9 segundos
LOW verde2 : HIGH amarillo2 ;2do semáf. Pasa de verde a amarillo
PAUSE 3000 ;esperar 3 segundos
LOW amarillo2 : LOW rojo1 : HIGH verde1 : HIGH rojo2 ;1er semáf. Verde 2do se. rojo
PAUSE 9000 ;esperar 9 segundos
LOW verde1 : HIGH amarillo1 ;1er semáforo cambia de verde a amarillo
PAUSE 3000 ;esperar 3 segundos
GOTO semaf ;continuar el programa desde semaf
END ;fin de la programación

Prueba1:
Portb=%00000001
PAUSE 1000
Portb=%00000010
PAUSE 1000
Portb=%00000100
PAUSE 1000
GOTO prueba1

Prueba2:
Portb=%00000001
GOSUB pablo
Portb=%00000010
GOSUB pablo
Portb=%00000100
GOSUB pablo
GOTO prueba2
Pablo:
PAUSE 1000
RETURN
DISCOTECA
Trisb=%00000000 ;convierte todos los pines del puerto B en salidas
discoteca: ;nombre de la subrutina
Portb=%00000001 ;enciende el puerto B.0, los demás permanecen apagados
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00000010 ;enciende el puerto B.1, los demás les apaga
GOSUB pedro ; ir a subrutina tiempo y volver cuando diga RETURN
Portb=%00000100 ;enciende el puerto B.2, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00001000 ;enciende el puerto B.3, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00010000 ;enciende el puerto B.4, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00100000 ;enciende el puerto B.5, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%01000000 ;enciende el puerto B.6, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%10000000 ;enciende el puerto B.7, los demás les apaga
GOSUB pedro ; ir a subrutina pedro y volver cuando diga RETURN
GOTO discoteca ; ir al inicio del programa
pedro: ;esta es la subrutina pedro
PAUSE 200 ;retardo de 200 milisegundos, aquí podemos cambiarlo
RETURN ;volver al GOSUB que le envió

Peter VAR BIT ; crea una variable y asigna un tamaño de un bit es decir 0 o 1
Peter VAR BYTE ; crea una variable y asigna un tamaño de 8 bits es decir de 0 a 255
Peter VAR WORD ; crea una variable y asigna un tamaño de 2 bytes es decir de 0 a 65535

repe VAR BYTE ;crea la variable repe y le asigna un espacio de memoria de 0 a 255
Led1 VAR portb.0 ;asigna el nombre de led1 al pin B.0
programa: ;nombre de la línea programa
FOR repe = 1 TO 5 ;para repeticiones de 1 a 5 veces
HIGH led1 ; encender el LED
PAUSE 500 ; esperar 0,5 segundos
LOW led1 ; apagar el LED
PAUSE 500 ; esperar 0,5 segundos
NEXT ; siguiente repetición hasta que sea repe = 5
PAUSE 2000 ; esperar 2 segundos
FOR repe = 1 TO 3 ;para repeticiones de 1 a 3 veces
HIGH led1 ; encender el LED
LEDS = LEDS << 1 equivale a multiplicar por 2 y se desplaza uno a uno, también podemos
LEDS = LEDS << 2 equivale a multiplicar por 4 y se desplaza de dos en dos
LEDS = LEDS >> 1 equivale a dividir por 2 y se desplaza uno a uno hacia la derecha.

AUTO FANTASTICO

x VAR BYTE ;creamos la variable x y le asignamos tamaño de 255


LEDS VAR PORTB ;todo el puerto B se llamará LEDS
TRISB = 0 ; hacemos salidas a todo el puerto B
LEDS = 1 ;Cargamos el puerto B con 1 (%00000001)
PROG:
FOR x = 1 TO 7 ;repetir 7 veces
LEDS = LEDS << 1 ;desplazar uno a uno a la izquierda
PAUSE 200 ;esperar 200 milisegundos
NEXT ;repetir hasta que x sea = a 7
FOR x = 1 TO 7 ;repetir 7 veces
LEDS = LEDS >> 1 ;desplazar uno a uno a la derecha
PAUSE 200 ;esperar 200 milisegundos
NEXT ;repetir hasta que x sea = a 7
GOTO PROG ; ir a PROG
END ; fin de la programación

IF portb.6= 1 THEN juan ; ir a juan si la entrada portb.6 es 1 lógica

IF portb.0 =0 THEN ;si la comparación es verdadera ejecuta todo el contenido que

HIGH porta.2 ; se encuentra entre el THEN y el ENDIF


PAUSE 1000
LOW porta.2
ENDIF

IF portb3 =0 THEN ; si la comparación es verdadera ejecuta el contenido entre


………… ;
THEN y ELSE y si es falsa ejecuta el contenido entre ELSE
ELSE ;y ENDIF
……….
ENDIFF portb.0 = 0 THEN Pablo ;ir a Pablo si la entrada portb.0 es cero lógico

También podría gustarte