You are on page 1of 29

Ejemplos de lenguaje ensamblador para PIC 16f84.

;Programa entrenador04 ;Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y los ceros. Por ejemplo si por el Puerto A se introduce xxx11001 por el Puerto B deber aparecer 00000110 ;*********************************************************** ;Zona de Datos********************************************** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos*********************************** movlw b'11100000';LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS movwf TRISB; se mueve al puerto B movlw b'00011111'; Las lineas del puerto A configuradas como entrada movwf TRISA; Mueve w al registro f ; Cero si es salida y uno si es entrada Rutina bcf STATUS,RP0; Sale del modo de configuracion de los puertos movf PORTA,W; carga el registro del puerto A en (W) COMF PORTA,W ; Esta instruccin complementa un registro, es decir, los unos por ceros y los ceros por unos movwf PORTB; El contenido de W se deposita en el puerto de salida goto Rutina; Crea un bucle cerrado e infinito END; Fin del programa

;Programa entrenador03 ;Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2, es necesario poner 5 switches en todos los pines del puerto A ;Zona de Datos********************************************** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos*********************************** clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00011111'; Las lineas del puerto A configuradas como entrada movwf TRISA; Mueve w al registro f ; Cero si es salida y uno si es entrada Rutina bcf STATUS,RP0; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle********************************************* movf PORTA,W; carga el registro del puerto A en (W) addwf PORTA,W; SUMA EL CONTENIDO DEL PUERTO A CON W movwf PORTB; El contenido de W se deposita en el puerto de salida goto Rutina; Crea un bucle cerrado e infinito END; Fin del programa. ;Programa entrenador02 ;El Puerto B, que acta como salida, es controlado por el bit 0 del Puerto A, que acta como entrada. De manera tal, que: ;Si RA0=1, se encienden todos los LEDs de salida ;Si RA0=0, se encienden slo los LEDs del nibble alto

;*********************************************************** ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos*********************************** clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00000001'; Las lineas del puerto A configuradas como entrada movwf TRISA; Mueve w al registro f ; Cero si es salida y uno si es entrada bcf STATUS,RP0; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle********************************************* Principal ; Inicio del bucle del programa

BTFSC PORTA, 0; Instruccion para elejir una opcion dependiendo del bit 0 en el puerto A GOTO Principal1; Envia a los nibbles de arriba GOTO Principal2; Envia a todos los nibbles Principal1 movlw b'11110000'; Manda a encender los nibles de arriba

Movwf PORTB; manda w a los registros de B GOTO Principal ; Envia al inicio del programa Principal2 movlw b'11111111'; Manda a encender todos los leds

Movwf PORTB; Manda a las Salidas

GOTO Principal; Crea un bucle cerrado e infinito END; Fin del programa ;Programa entrenador01 ;enciende el nibble alto de la barra de LEDS ;y apaga el nibble bajo ;*********************************************************** ;Zona de datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de codigos******************************************** bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos*********************************** movlw b'00000000'; Las lineas del puerto B configuradas como salidas movwf TRISB; Mueve w al registro f movlw b'00000001'; Registra todos los puertos de A como salidas movwf TRISA; Mueve w al registro f bcf STATUS,RP0; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle*********************************************

INICIO ; Inicio del bucle del programa movlw b'11110000'; manda a las salidas a w Movwf PORTB; manda w a los registros de B END; Fin del programa .

;Programa tiempos03. ;Los puertos A y B se usaran como salidas, ;debe de haber conectados 13 leds, ;inicialmente se deben encender los leds conectados a RA0 y a RB7, ;despus de medio segundo deben de apagarse y encenderse los leds conectados a RA1 y RB6,

;medio segundo despus, se apagan y se encienden los leds conectados a RA2 y RB5, ;medio segundo mas tarde, se apagan y encienden los leds de RA3 y RB4, el proceso sigue as, ;para RA4 y RB3, RB1 y RB2, cuando se apaguen RB1 y RB2 debe pasar un segundo, ;y deben encenderse todos los leds por 2 segundos, apagarse por 2 segundos, ;encenderse por un segundo, apagarse un segundo, encenderse por medio segundo, ;apagarse, esperar un segundo y volver a repetir desde el principio. ;*********************************************************** ;Zona de Datos********************************************** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado. INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados. CBLOCK 0x0C; Definimos algunas constantes y etiqutas ENDC ; Salimos del modo de definicon. SEC1 equ b'00000000';Cada una de estas etiquetas SEC2 equ b'10000000';tiene asignado un movimento SEC3 equ b'01000000';de la secuancia deseada. SEC4 equ b'00100000';Se inicia todos los puertos a cero SEC5 equ b'00010000';para que la secuencia no se desfase. SEC6 equ b'00001000' SEC7 equ b'00000110' SEC8 equ b'00000000' SEC9 equ b'00000001' SEC10 equ b'00000010' SEC11 equ b'00000100' SEC12 equ b'00001000' SEC13 equ b'00010000' SEC14 equ b'00000000' SEC15 equ b'00000000' SEC16 equ b'11111111' ;Zona de Codigos ******************************************* ORG 0;Indica en que parte de la memoria incia el programa. BSF STATUS,5 ; activa la pagina 1 MOVLW B'00000' ; carga 00000 en W MOVWF TRISA ; puerto A se configura como salida MOVLW B'00000000' ; carga 00000000 en W MOVWF TRISB ; puerto B se configura como salida BCF STATUS,5 ; volvemos a la pagina 0 CLRF PORTA; ponemos a cero el puerto A CLRF PORTB ; ponemos a cero el puerto B Inicio ; inicio del programa de bucle.

Repetir. ;Etiqueta de la secuencia deseada MOVLW SEC8 ; carga el valor de SEC8 en W MOVWF PORTA; carga w en el puerto A MOVLW SEC1 ; carga el valor de SEC1 en W MOVWF PORTB; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC9 ; carga el valor de SEC9 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC2 ; carga el valor de SEC2 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC10 ; carga el valor de SEC10 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC3 ; carga el valor de SEC3 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC11 ; carga el valor de SEC11 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC4 ;carga el valor de SEC4 en W MOVWF PORTB ;carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC12 ; carga el valor de SEC12 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC5 ;carga el valor de SEC5 en W MOVWF PORTB ;carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC13 ; carga el valor de SEC13 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC6 ;carga el valor de SEC6 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC14 ; carga el valor de SEC14 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC7 ;carga el valor de SEC7 en W MOVWF PORTB ;carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_1s ; demora de 500ms MOVLW SEC16 ; carga el valor de SEC16 en W MOVWF PORTA ; carga w en el puerto B MOVLW SEC16 ; carga el valor de SEC16 en W

MOVWF PORTB ; carga el valor de W al puerto B CALL Retardo_2s ; demora de 500ms MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_2s ; demora de 500ms MOVLW SEC16 ; carga el valor de SEC16 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC16 ; carga el valor de SEC16 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_1s ; demora de 500ms MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_1s ; demora de 500ms MOVLW SEC16 ; carga el valor de SEC16 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC16 ;carga el valor de SEC16 en W MOVWF PORTB ;carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms MOVLW SEC15 ; carga el valor de SEC15 en W MOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga SEC15 en W MOVWF PORTB ; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms GOTO Inicio INCLUDE <RETARDOS.INC>;Biblioteca de retardos. END; Fin del programa. ;Programa Selector. ;Por la barra de LEDS conectada al puerto de salida se visualiza un juego de luces con ;la secuencia expresada en binario 1,1,2,3...233, es decir los nmeros de la sucesin ;de Fibonacci. La velocidad del movimiento ser fijada por la lectura de 3 switches ;conectados al puerto A de manera que se visualice cada posicin durante un tiempo: ;Si (PORTA)=0, cada posicin se visualiza durante 0x100 ms=0 ms ;Si (PORTA)=1, cada posicin se visualiza durante 1x100 ms=100 ;Si (PORTA)=2, cada posicin se visualiza durante 2x100 ms=200 ;Si (PORTA)=3, cada posicin se visualiza durante 3x100 ms=300 ;Si (PORTA)=4, cada posicin se visualiza durante 4x100 ms=400 ;Si (PORTA)=7, cada posicin se visualiza durante 7x100 ms=700 ;*********************************************************** ;Zona de Datos**********************************************

__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados CBLOCK 0x0C TablaLongitud TablaPosicion ContadorTiempo GuardaContador ENDC ;define el valo de una cosntante o vector ;etiquetas ;etiquetas ;etiquetas ;etiqutas ;termina c

;Zona de Codigos ******************************************* ORG 0 ;indica al compilador que el cdigo por debajo de ella debe alojarse a partir de la posicin de memoria 0 del PIC Inicio bsf STATUS,RP0 ; Entra al modo de configuracion de puertos. clrf PORTB ; Limpia el puerto B. movlw b'00000111' ; El puerto A se configura como entrada. movwf PORTA ;Mueve el valor al puerto A. bcf STATUS,RP0 ;Sale del modo de configuracion de puertos. Principal clrf PORTB ; El puerto de salida esta apagado. movf PORTA,W ; Lee el puerto de entrada. andlw b'00000111' ; Almacena la informacin vlida. movwf ContadorTiempo ; Lo pasa al contador movwf GuardaContador ; y a su copia. movf ContadorTiempo,F ; Comprueba si es cero. btfsc STATUS,Z ; Si es cero sale fuera. goto Fin movlw TablaFin-TablaInicio ; Calcula la longitud de la tabla y la carga en movwf TablaLongitud ; este registro que actuar como contador. clrf TablaPosicion ; Apunta a la primera posicin de la tabla. VisualizaOtraPosicion movf TablaPosicion,W ; Aqu posicin a leer de la tabla. call LeeTabla ; Visualiza la posicin de la tabla. movwf PORTB ; El resultado se visualiza por la salida. movf GuardaContador,W ; Recupera el valor del contador. movwf ContadorTiempo MantieneVisualizacion ; Durante un tiempo igual a (ContadorTiempo)x100 ms. call Retardo_100ms decfsz ContadorTiempo,F ;aplica el retardo. goto MantieneVisualizacion; aplica el bucle incf TablaPosicion,F ; apunta a la siguiente posicin por visualizar. decfsz TablaLongitud,F ; Ha terminado la tabla? goto VisualizaOtraPosicion ; No, pues visualiza la siguiente posicin. Fin goto Principal ; aplica el bucle infinito desde principal ; Subrutina "LeeTabla" ------------------------------------------------------------------

; LeeTabla addwf TablaInicio retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw TablaFin

PCL,F b'00000000' b'00000001' b'00000001' b'00000010' b'00000011' b'00000101' b'00001000' b'00001101' b'00010101' b'00100010' b'00110111' b'01011001' b'10010000' b'11101001' ; Indica la posicin inicial de la tabla. ; Cada uno de los siguientes valores es ; forma parte de la sucesion de fibonacci ; en binario

; Indica la posicin final de la tabla. Utiliza la biblioteca de retardos

INCLUDE <RETARDOS.INC>; END.

;Programa Contador. ;Se pone el 0 en binario, y en incrementos de 50 milisegundos, muestra sucesivamente ;el 1,2,3,4255 en binario, una vez que llegue al 255 que son los 8 leds encendidos, ;comienza la cuenta regresiva 254,253,252,0 y de ah comenzar nuevamente el ;programa. ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* ORG 0 bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos*********************************** clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00011111'; Las lineas del puerto A configuradas como entrada movwf TRISA; Mueve w al registro f

; Cero si es salida y uno si es entrada bcf STATUS,RP0; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle*********************************************g CBLOCK 0X0C ; Define a numero Numero ENDC movlw d'0' ; Mueve numero al registro w movwf Numero ; Mueve Numero a F Rutina suma incfsz Numero,f; incrementa una unidad a numero, si es mayor que 255 salta a la siguiente intruccion goto Bucle goto Bucle2 ; Envia a salida del puerto B ; Es mas de 255 y envia a la resta

Bucle movf Numero,W ; mueve numero a W movwf PORTB ; Mueve w al puerto B CALL Retardo_50ms ; Llama a retardo de 50 ms goto Rutina ; Envia al inicio de la suma Bucle2 decfsz Numero,f ; Decrece en una unidad si es diferente de 0 sigue si igual a cero salta a la siguiente instruccion goto Bucle3 ; Envia a la salida del puerto B goto suma ; Como es cero envia a la suma Bucle3 movf Numero,W ;Envia numero a W movwf PORTB ;Envia W al puerto B (salida) CALL Retardo_50ms ;Llama a retardo de 50 ms goto Bucle2 ;Manda a la resta INCLUDE <RETARDOS.INC> ; Incluye la libreria de retardos ; Fin del Programa

END

;Programa Selector. ;Compara el numero definido '21', con el numero asignado con las entradas ;del puerto A. ;************************************************************ ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado. INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados.

;Zona de Codigos ******************************************* ORG 0 ; indica a la memoria en que posicion iniciar. bsf STATUS,RP0; Entra al modo de configuracion de los puertos. ;Conconfiguracion de puertos*********************************** clrf TRISB; Las lineas del perto B se configuran como salidas. movlw b'00011111'; Las lineas del puerto A configuradas como entradas. movwf TRISA; Mueve w al registro f. ; Cero si es salida y uno si es entrada. bcf STATUS,RP0; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle********************************************* CBLOCK 0X0C ; Definimos etiquetas y constantes. Numero ;Etiqueta. ENDC ;Sale del modo de definicion. movlw d'21'; Mueve numero al registro w movwf Numero ; Mueve Numero a F Rutina movf PORTA,W ; mueve el valor del puerto A a W subwf Numero,W ; hace la resta PORTA - numero menor movlw b'00001111';Supone que la entrada es menor btfss STATUS,C; Verifica el valor el C de la resta si es C=1 salta al siguiente comando goto salida ; Envia a la salida igual movlw b'11111111'; Supone que los dos numeros son iguales son iguales btfsc STATUS,Z ; Ve si Z=0 si es cero salta a siguiente comando goto salida ; si Z=1 son iguales y envia a la salida mayor movlw b'11110000' ; Z=0 y entonces no son iguales, por lo tanto la entrada es mayor salida movwf PORTB ;Envia a salida Goto Rutina; Bucle de proceso infinito

END; Fin del programa ;Programa Suma. ;Programa donde desde la computadora se teclea un nmero, ;lo manda al pic, y el pic regresa el numero mas 3. Los nmeros ;que se introducen son del 0 al 6. ;************************************************************ ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* CBLOCK 0x0C ;Define Variable GuardaDato Numero ENDC ;Termina definir variable.

; Inicio del programa de Bucle********************************************* Inicio ORG 0 call LCD_Inicializa ;Llama a la sub rutina de LCD call RS232_Inicializa ; Inicia la comunicacin con el puerto Principal call RS232_LeeDato movwf GuardaDato call LCD_Caracter Suma ;Subrutina Suma movf GuardaDato,W addlw 3 ;pone el dato de entrada en W ;le suma 3 ; Envia a subrutina para leer dato ; Lo envia a GuardaDato ; Se visualiza el dato en pantalla

call RS232_EnviaDato ;llama a la subrutina Goto Principal ;bucle infinito

END

INCLUDE <RS232.INC> ; Incluye libreria de conexion INCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCD INCLUDE <RETARDOS.INC> ; Incluye la libreria de retardos ; Fin del Programa

;Programa Mundo ;Guarda un mensaje en el PIC, por ejemplo: ;Hola Mundo ;Mi nombre es:Erick. Y lo despliega en el monitor de la computadora repetidamente a intervalos de 1 segundo. ;************************************************************ ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* CBLOCK 0X0C ENDC RetornoCarro EQU .13 CambioLinea EQU .10 ;Inicimos el valor de etiquetas. ;Definimos el valor de las etiquetas.

; Inicio del programa de Bucle********************************************* Inicio call LCD_Inicializa ;Llama a la sub rutina de LCD call RS232_Inicializa ; Inicia la comunicacin con el puerto Principal movlw Mensaje0 call RS232_Mensaje call Retardo_1s Goto Principal ; Mueve Mensaje a W ; Llama a subrutina de Mensaje ; Llama a retardo de un 1s ; Envia a Principal

;Configuracin de Mensaje ******************************************************************* Mensajes

addwf PCL,F Mensaje0 DT RetornoCarro DT "Hola Mundo"

; Suma PCL a F

; Envia a pantalla un espacio ;Envia el mensaje Hola Mundo

DT RetornoCarro, CambioLinea ; Envia a pantalla un espacio DT "Mi nombre es Erick" ; Envia a pantalla Mi nombre es Erick

DT CambioLinea, CambioLinea, CambioLinea, 0X00 ; Envia a pantalla 3 espacios INCLUDE <RS232.INC> ; Incluye libreria de conexion INCLUDE <RS232MEN.INC> ;Incluye libreria de conexion INCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCD INCLUDE <RETARDOS.INC> ; Incluye la libreria de retardos ; Fin del Programa

END

;Programa Leds. ;Hacer un programa que desde la computadora mande una seal para prender 8 leds y ;otra para apagarlos. Con 1 que se enciendan y con 0 que se apaguen ;********************************************************************************* ;Zona de Datos******************************************************************** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados CBLOCK 0x0C TeclaPulsada MensajeApuntado ENDC #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE Salida1 Salida2 Salida3 Salida4 Salida5 Salida6 Salida7 Salida8 ; Va a guardar el contenido de la tecla pulsada. ; Va a guarda la direccin del mensaje apuntado. PORTB,7 PORTB,6 PORTB,5 PORTB,4 PORTB,3 PORTB,2 PORTB,1 PORTB,0 ; Define puerto de salidas ; Define dnde se sita cada una de las salidas.

TECLA1_ON EQU '1' ; Cdigo de las teclas utilizadas. TECLA1_OFF EQU '0'

;Zona de Codigos ***************************************************************** ORG 0 ; Inicio del programa de Bucle********************************************* Inicio call LCD_Inicializa ; Inicializa el display LCD RS232_Inicializa ; Inicializa RS232 STATUS,RP0 ; Configura como salidas las 8 lneas del Salida1 ; del Puerto B Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 bcf STATUS,RP0 ;Sale de la configuracion de puertos call Parado ;En un pricipio los leds deben estar apagados Principal ; apagados. call RS232_LeeDato ; Espera a recibir un carcter. call TesteaTeclado ; Verifica caracter recibido y ejecuta accion goto Principal ; Loop Infinito ;**************************************************************************** ;* Testea Teclado * ;* * ;* Verifica caracer recibido y decide que accion ejecutar * ;**************************************************************************** TesteaTeclado movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada. xorlw TECLA1_ON ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto R1_ON ; S, se desea movimiento hacia adelante. call bsf bcf bcf bcf bcf movf TeclaPulsada,W xorlw TECLA1_OFF btfsc STATUS,Z goto R1_OFF goto Fin R1_ON bsf bsf bsf bsf Salida1 Salida2 Salida3 Salida4 bsf Salida5 bsf Salida6 bsf Salida7 bsf Salida8 goto Fin ; Recupera el contenido de la tecla pulsada. ; Es la tecla del movimiento hacia atrs? ; ; S, se desea movimiento hacia atrs.

;Mantiene todas las salidas prendidas

R1_OFF bcf Salida1 bcf Salida2 bcf Salida3 bcf Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin Parado bcf bcf bcf bcf Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 return

;Mantiene todas las salidas apagadas

;Mantiene todas las salidas apagadas, el sistema se encuentra detenido

Fin

INCLUDE <RS232.INC> INCLUDE <RETARDOS.INC> INCLUDE <LCD_4BIT.INC> END

;Librerias utilizadas.

;Fin del programa

;Programa Encendido. ;Hacer un programa que desde la computadora mande un numero entre 1 y 8 ;de acuerdo con esto se enciendan 1 led, 2 led y asi hasta 8 ;cualquier otra tecla no debe generar algun efecto. ;********************************************************************************* ;Zona de Datos******************************************************************** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados CBLOCK 0x0C TeclaPulsada MensajeApuntado ENDC ; Va a guardar el contenido de la tecla pulsada. ; Va a guarda la direccin del mensaje apuntado.

#DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE

Salida1 Salida2 Salida3 Salida4 Salida5 Salida6 Salida7 Salida8

PORTB,7 PORTB,6 PORTB,5 PORTB,4 PORTB,3 PORTB,2 PORTB,1 PORTB,0

; Define puerto de salidas ; Define dnde se sita cada una de las salidas.

UnLed EQU '1' ; Cdigo de las teclas utilizadas. DosLed EQU '2' TresLed EQU '3' CuatroLed EQU '4' CincoLed EQU '5' SeisLed EQU '6' SieteLed EQU '7' OchoLed EQU '8' ;Zona de Codigos ***************************************************************** ORG 0 ; Inicio del programa de Bucle********************************************* Inicio call LCD_Inicializa ; Inicializa el display LCD RS232_Inicializa ; Inicializa RS232 STATUS,RP0 ; Configura como salidas las 8 lneas del Salida1 ; del Puerto B Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 bcf STATUS,RP0 ;Sale de la configuracion de puertos call Parado ;En un pricipio los leds deben estar apagados Principal ; apagados. call RS232_LeeDato ; Espera a recibir un carcter. call TesteaTeclado ; Verifica caracter recibido y ejecuta accion goto Principal ; Loop Infinito ;**************************************************************************** ;* Testea Teclado * ;* * ;* Verifica caracer recibido y decide que accion ejecutar * ;**************************************************************************** TesteaTeclado movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada. xorlw UnLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L1_ON ; S, se desea movimiento hacia adelante. call bsf bcf bcf bcf bcf movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.

xorlw DosLed btfsc STATUS,Z goto L2_ON

; Es la tecla del movimiento hacia atrs? ; ; S, se desea movimiento hacia atrs.

movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw TresLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L3_ON ; S, se desea movimiento hacia adelante. movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw CuatroLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L4_ON ; S, se desea movimiento hacia adelante. movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw CincoLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L5_ON ; S, se desea movimiento hacia adelante. movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw SeisLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L6_ON ; S, se desea movimiento hacia adelante. movf xorlw btfsc goto TeclaPulsada,W SieteLed STATUS,Z L7_ON ; Guarda el contenido de la tecla pulsada. ; Es la tecla del movimiento hacia adelante? ; ; S, se desea movimiento hacia adelante.

movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw OchoLed ; Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L8_ON ; S, se desea movimiento hacia adelante. ; goto Lomismo ;tecla no valida

L8_ON que se ejecute bsf Salida1 bsf Salida2 bsf Salida3 bsf Salida4 bsf Salida5 bsf Salida6 bsf Salida7 bsf Salida8 goto Fin L1_ON bsf bcf bcf Salida1 Salida2 Salida3

;Definimos el modo en que deseamos ;cada una de las salidas, desde un solo led encendido ; hasta los 8 mas una rutina donde todos se encuentran ; apagados y otra donde no se realiza alguna accion

;Un led encendido

bcf

Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin L2_ON bsf bsf bcf bcf ;Dos led encendidos Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin ;Tres led encendidos Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin ;Cuatro led encendidos Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin ;Cinco led encendidos Salida1 Salida2 Salida3 Salida4 bsf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin ;Seis Led encendidos Salida1

L3_ON bsf bsf bsf bcf

L4_ON bsf bsf bsf bsf

L5_ON bsf bsf bsf bsf

L6_ON bsf

bsf bsf bsf

Salida2 Salida3 Salida4 bsf Salida5 bsf Salida6 bcf Salida7 bcf Salida8 goto Fin L7_ON bsf bsf bsf bsf ;Siete eld encendidos. Salida1 Salida2 Salida3 Salida4 bsf Salida5 bsf Salida6 bsf Salida7 bcf Salida8 goto Fin ;Todos apagados bcf Salida1 bcf Salida2 bcf Salida3 bcf Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 Lomismo Fin return INCLUDE <RS232.INC> INCLUDE <RETARDOS.INC> INCLUDE <LCD_4BIT.INC> END ;Fin del programa ;no hace algun cambio. ;Regresa

Parado

;Programa Motores. ;Dos motores estn conectados al pic mediante el driver L293B (usar en la simulacin el L293D) ;Se usan 4 interruptores, un interruptor para determinar el sentido de giro de cada uno de los motores. ;Las combinaciones de los otros dos interruptores, deben seguir la siguiente tabla. ;Interruptor 1 Interruptor 2 Motor 1 Motor 2 ;1 1 Encendido Encendido ;0 1 Encendido Apagado ;1 0 Apagado Encendido ;0 0 Apagado Apagado

; ****************************************************************************************** ************ ;Zona de datos************************************************************************************** *** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ;PIC usado INCLUDE <P16F84A.INC> ;Paqueteria usada. #DEFINE SalidaSentido PORTB,0 ; Definimos el valor de cada uno de los bits #DEFINE SalidaSentido2 PORTB,7 #DEFINE SalidaMarcha PORTB,1 #DEFINE SalidaMarcha2 PORTB,6 #DEFINE EntradaMarcha PORTA,0 #DEFINE EntradaMarcha2 PORTA,4 #DEFINE EntradaSentido PORTA,1 #DEFINE EntradaSentido2 PORTA,3 ; ZONA DE CDIGOS ********************************************************************* ORG Inicio bsf bsf bsf bsf bsf bcf bcf bcf bcf bcf Principal btfsc goto bcf Principal2 btfsc goto bcf Principal3 btfsc goto bcf Principal4 btfsc goto bcf ;goto Gira bsf goto STATUS,RP0 EntradaMarcha EntradaSentido EntradaMarcha2 EntradaSentido2 SalidaMarcha SalidaSentido SalidaMarcha2 SalidaSentido2 STATUS,RP0 EntradaMarcha Gira SalidaMarcha EntradaMarcha2 Gira2 SalidaMarcha2 EntradaSentido Gira3 SalidaSentido EntradaSentido2 Gira4 SalidaSentido2 Fin3 SalidaMarcha Fin ;Entramos al modo de configuracion de puertos. ; Configura las lneas de entrada y salida. 0 ;El programa incia en el bit cero de la memoria

; Comprueba el estado del interruptor de funcionamiento. ; Si el interruptor esta encendido, envia a la subrutina. ; Para el motor, poniendo a cero la lnea de habilitacion. ; Comprueba el estado del interruptor de funcionamiento. ; Para el motor, poniendo a cero la lnea de habilitacion. ; Comprueba el estado del interruptor de funcionamiento. ; Para el motor, poniendo a cero la lnea de habilitacion. ; Comprueba el estado del interruptor de funcionamiento. ; Para el motor, poniendo a cero la lnea de habilitacion. ; habilitacin y sale. ; Pone en marcha el motor.

Gira2 bsf goto Gira3 bsf goto Gira4 bsf goto Fin goto Fin2 goto Fin3 goto Fin4 goto END ;Laboratorio de Robotica y control ;Programa:Motor compu ;Desde la computadora, dependiendo de la tecla, se obtiene lo siguiente: ;Tecla Efecto ;1 ;0 ;D ;I ;M ;L ;A Enciende todos los motores Apaga todos los motores Los motores giran a la derecha Los motores giran a la izquierda Un motor gira a la derecha y otro a la izquierda Los motores se mueven a la mitad de la velocidad mxima Los motores se mueven a velocidad mxima SalidaSentido2 Fin4 ; Pone en marcha el motor. ;Inicia los bucles infinitos. Principal2 Principal3 Principal4 Principal SalidaSentido Fin3 SalidaMarcha2 Fin2 ; Pone en marcha el motor.

;************************************************************ ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados ;Zona de Codigos ******************************************* ORG 0 bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos***********************************

clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS

; Cero si es salida y uno si es entrada bcf STATUS,RP0; Sale del modo de configuracion de los puertos ;Zona de Codigos ******************************************* CBLOCK 0x0C ;Define Variable TeclaPulsada Ciclos_ON Ciclos_OFF GuardaEntrada ENDC movlw d'0' ; Mueve numero al registro w movwf GuardaEntrada ; Mueve Numero a F ;Definicion de Teclas EnciendeTodos ApagaTodos TodosDerecha TodosIzquierda DerechaIzquierda MitadV MaximaV call call EQU '1' ; Cdigo de las teclas utilizadas. EQU '0' EQU 'd' EQU 'i' EQU 'm' EQU 'l' EQU 'a'

LCD_Inicializa RS232_Inicializa ; Inicia la comunicacin con el puerto

Principal call RS232_LeeDato call TesteaTeclado ; Envia a subrutina para leer dato ;; Verifica caracter recibido y ejecuta accion

goto Principal ;**************************************************************************** ;* Teclado * ;* * ;* Verifica caracer recibido y decide que accion ejecutar * ;**************************************************************************** TesteaTeclado

movwf TeclaPulsada xorlw EnciendeTodos btfsc STATUS,Z ; goto TodosEncendidos movf TeclaPulsada,W xorlw ApagaTodos btfsc STATUS,Z goto TodosApagados

; Guarda el contenido de la tecla pulsada. ; Es la tecla del encendido? ; S ; Recupera el contenido de la tecla pulsada. ; Es la tecla de todos apagados?

; ; S

movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw TodosDerecha ; Es la tecla de todos derecha? btfsc STATUS,Z ; goto Derecha ; S movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw TodosIzquierda ; Es la tecla de todos izquierda? btfsc STATUS,Z ; goto Izquierda ; S movf TeclaPulsada,W xorlw DerechaIzquierda btfsc STATUS,Z ; goto DI ; Guarda el contenido de la tecla pulsada. ; Es la tecla de uno derecha y otro opuesto? ; S

movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw MitadV ; Es la tecla de mitad de velocidad? btfsc STATUS,Z ; goto MediaVelocidad ; S movf xorlw btfsc goto TeclaPulsada,W MaximaV STATUS,Z AltaVelocidad ; Guarda el contenido de la tecla pulsada. ; Es la tecla de maxima velocidad? ; ; S

TodosEncendidos movlw b'10100110' goto ActivaSalida TodosApagados clrf PORTB goto ActivaSalida Derecha ; Apaga los motores ; envia a salida de puerto ; envia a todos encendidos ; envia a la sailida de puerto

movlw b'10100110' goto ActivaSalida Izquierda movlw b'01100101' goto ActivaSalida DI movlw b'01100110' goto ActivaSalida MediaVelocidad

; Los motores hacia la derecha ; envia a la salida de puerto

; los dos motores hacia la izquierda ; encia a salida de puerto

; Un motor hacia la derecha y otro en direccion opuesta ; envia salida de puerto

movlw Ciclos_OFF ; Mueve ciclos a w movf GuardaEntrada,W; envia guardar dato a w movwf Ciclos_ON ; Envia ciclos on a f motor_ON movlw b'10100110' movwf PORTB call Retardo_5ms decfsz Ciclos_ON,F goto motor_ON+2 motor_OFF clrf PORTB call Retardo_5ms decfsz Ciclos_OFF,F goto motor_OFF+1 goto ActivaSalida AltaVelocidad movlw b'10100110' goto ActivaSalida ;Enciende los dos motores a maxima velocidad ; Envia a Salida del puerto ;pone a ceros el puerto b ;llama a un retardo de 5ms ;verifica si ciclos off es 0 si es asi salta a la siguiente instruccion ;envia a motor off +1 ; envia a salida ;Enciende los motores ; Llama a un retardo de 5ms ;Si es 0 salta a la siguiente instruccion ; envia a motor encendido +2

; Salida de Puerto ******************************************************** ActivaSalida movwf PORTB return ;Manda a la salida del puerto B ;termina subrutina Crea un bucle cerrado e infinito

INCLUDE <RS232.INC> INCLUDE <RETARDOS.INC> INCLUDE <LCD_4BIT.INC> END

; Incluye libreria de conexion

; Fin del Programa

;Robotica y control ;Programa:Giro ;Programa para controlar un motor de corriente directa (DC) ;El puerto A se define como entrada, se conectaran 2 interruptores ;El puerto B se usara como salida ;El interruptor RA0 si manda 1, el motor se mueve, si manda 0, el motor se detiene ;El interruptor RA1 determina si el giro es para la derecha o para la izquierda. ;************************************************************ ;Zona de Datos********************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados #DEFINE EntradaMarcha PORTA,0 #DEFINE EntradaSentido PORTA,1 ;Define el puerto y su utilizacin (encendido o apagado) ;Define el puerto y su utilizacin (giro derecha o izquierda)

;Zona de Codigos ******************************************* ORG 0 Inicio bsf STATUS,RP0; Entra al modo de configuracion de los puertos bsf EntradaMarcha bsf EntradaSentido clrf PORTB bcf STATUS,RP0 Principal clrw btfsc EntradaMarcha goto ActivaSalida ;Con esta combinacion se detiene el motor ;Comprueba el estado del interruptor de funcionamiento ; Las lineas del puerto B configuradas como salidas

movlw b'00000110' btfsc EntradaSentido movlw b'00000101' ActivaSalida movwf PORTB goto Principal END; Fin del programa ;Robotica y control. ;Programa:robot seguidor.

;Gira en un sentido

;Gira en otro sentido

;Manda a la salida del puerto B ; Crea un bucle cerrado e infinito

; Programa de control para el microbot TRASTO, el cual se desplaza siguiendo una lnea negra ; marcada sobre fondo blanco a modo de pista. ; ; Los sensores pticos de reflexin CNY70 estn situados en la parte delantera inferior del ; microbot: El sensor de la derecha est conectado a RA0 y el sensor de la izquierda a RA1. ; ; El programa adopta la estrategia de seguir la lnea por el borde derecho: ; - Si detecta que est en el borde derecho: sensor izquierdo sobre negro y derecho sobre ; blanco sigue en hacia delante. ; - Si el sensor de la derecha detecta lnea negra gira hacia la derecha buscando el borde, ; independientemente de como est el sensor de la izquierda. ; - Si el microbot tiene los dos sensores fuera de la lnea, se le hace girar a la izquierda ; hasta que vuelva a encontrarla. ; ; La seal de los sensores CNY70 se aplican a las entradas del microcontrolador a travs de un ; inversor 40106 de manera tal, que para color: ; - Color Blanco --> transistor saturado --> entrada al inversor "0" --> RAx = "1". ; (No est encima de la lnea negra, se ha salido de la pista) ; - Color Negro --> transistor en corte --> entrada al inversor "1" --> RAx = "0". ; (Est encima de la lnea negra, est dentro de la pista) ; ; ZONA DE DATOS ********************************************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> #DEFINE SensorDerecha #DEFINE SensorIzquierda PORTA,0 PORTA,1 ; Sensor ptico Derecho. ; Sensor ptico Izquierdo.

; ZONA DE CDIGOS ******************************************************************** ORG Inicio bsf bsf STATUS,RP0 SensorDerecha ; Selecciona Banco 1 de registros. ; Estas lneas se configuran como entrada. 0

bsf clrf bcf Principal movlw btfss goto movlw btfss movlw ActivaSalida movwf goto END

SensorIzquierda PORTB STATUS,RP0 b'00001110' SensorDerecha ActivaSalida b'00000111' SensorIzquierda b'00001111' PORTB Principal

; Las lneas del Puerto B se configuran como salidas. ; Selecciona Banco 0 de registros. ; Para girar a la derecha. ; Ha salido por la derecha?, detecta blanco? ; No, el detector derecho est encima de la lnea ; negra, gira a la derecha. ; Para girar a la izquierda. ; Ha salido tambin por la izquierda? ; No, est en el borde derecho. Sigue recto.

;Robotica y control. ;Programa:robot baliza ; Programa de control para Microbot TRASTO el cual detecta una baliza que genera ; una seal infrarroja modulada a 38 kHz. ; ; Los sensores pticos SFH5110 estn situados en la parte frontal del microbot: ; El sensor de la derecha est conectado a RA2 y el sensor de la izquierda a RA3. ; ; Cuando el sensor SFH5110 detecta luz infrarroja modulada, proporciona un nivel bajo en su ; lnea de salida. ; ; El programa adopta la estrategia siguiente: ; - Si no se detecta la baliza por ningn sensor el microbot gira siempre a la derecha. ; - Si los dos sensores detectan portadora el microbot avanza hacia adelante. ; - Si se detecta portadora en el sensor de la izquierda y no en el de la derecha el ; microbot gira a la izquierda hasta que los dos sensores detecten la baliza. ; - Si se detecta portadora en el sensor de la derecha y no en el de la izquierda el ; microbot gira a la derecha hasta que los dos sensores detecten la baliza. ; ; ZONA DE DATOS ********************************************************************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> #DEFINE SensorDerecha #DEFINE SensorIzquierda PORTA,2 PORTA,3 ; Sensor Derecho. ; Sensor Izquierdo.

; ZONA DE CDIGOS ********************************************************************* ORG Inicio bsf bsf bsf clrf STATUS,RP0 SensorDerecha SensorIzquierda PORTB ; Selecciona Banco 1 de registros. ; Estas lneas se configuran como entrada. ; Las lneas del Puerto B se configuran como salidas. 0

bcf Principal btfsc goto btfsc goto movlw goto Ver_Izquierda btfsc goto GiroIzquierda movlw goto GiroDerecha movlw ActivaSalida movwf goto END

STATUS,RP0 SensorDerecha Ver_Izquierda SensorIzquierda GiroDerecha b'00001111' ActivaSalida SensorIzquierda GiroDerecha b'00000111' ActivaSalida b'00001110' PORTB Principal

; Selecciona Banco 0 de registros. ; Ha detectado seal por la derecha? ; No recibe por la derecha. ; S, tambin seal por la izquierda? ; No, solo seal por la derecha, gira a derecha. ; S, recibe por los dos sensores. Sigue recto. ; Por la derecha no recibe. Y por la izquierda? ; Tampoco, ni por la derecha ni por la izquierda. ; Gira a la izquierda. ; Gira a la derecha.

You might also like