Ejemplos de lenguaje ensamblador para pic 16f84

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 instrucción 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

description

Una serie de ejercicios realizados en mplab, donde se ejemplifica la gran variedad de usos que puede tener el pic 16f84

Transcript of Ejemplos de lenguaje ensamblador para pic 16f84

Page 1: Ejemplos de lenguaje ensamblador para pic 16f84

Ejemplos de lenguaje ensamblador para PIC16f84.

;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 seintroduce 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 instrucción complementa un registro, es decir, los unos por ceros y los ceros porunos

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

Page 2: Ejemplos de lenguaje ensamblador para pic 16f84

;Programa entrenador03 ;Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2, es necesario poner 5 switches en todos lospines 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 actúa como salida, es controlado por el bit 0 del Puerto A, que actúa como entrada. De maneratal, que:

;Si RA0=1, se encienden todos los LEDs de salida;Si RA0=0, se encienden sólo los LEDs del nibble alto

Page 3: Ejemplos de lenguaje ensamblador para pic 16f84

;***********************************************************

;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 arribaGOTO 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

Page 4: Ejemplos de lenguaje ensamblador para pic 16f84

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, ;después de medio segundo deben de apagarse y encenderse los leds conectados a RA1 y RB6,

Page 5: Ejemplos de lenguaje ensamblador para pic 16f84

;medio segundo después, 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 etiqutasENDC ; Salimos del modo de definicon.

SEC1 equ b'00000000';Cada una de estas etiquetasSEC2 equ b'10000000';tiene asignado un movimentoSEC3 equ b'01000000';de la secuancia deseada.SEC4 equ b'00100000';Se inicia todos los puertos a ceroSEC5 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 ACLRF PORTB ; ponemos a cero el puerto B

Inicio ; inicio del programa de bucle.

Page 6: Ejemplos de lenguaje ensamblador para pic 16f84

Repetir. ;Etiqueta de la secuencia deseada

MOVLW SEC8 ; carga el valor de SEC8 en WMOVWF PORTA; carga w en el puerto A MOVLW SEC1 ; carga el valor de SEC1 en WMOVWF PORTB; carga el valor de W en el puerto B CALL Retardo_500ms ; demora de 500ms

MOVLW SEC9 ; carga el valor de SEC9 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC2 ; carga el valor de SEC2 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC10 ; carga el valor de SEC10 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC3 ; carga el valor de SEC3 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC11 ; carga el valor de SEC11 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC4 ;carga el valor de SEC4 en WMOVWF PORTB ;carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC12 ; carga el valor de SEC12 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC5 ;carga el valor de SEC5 en WMOVWF PORTB ;carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC13 ; carga el valor de SEC13 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC6 ;carga el valor de SEC6 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC14 ; carga el valor de SEC14 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC7 ;carga el valor de SEC7 en WMOVWF PORTB ;carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_1s ; demora de 500ms

MOVLW SEC16 ; carga el valor de SEC16 en WMOVWF PORTA ; carga w en el puerto B MOVLW SEC16 ; carga el valor de SEC16 en W

Page 7: Ejemplos de lenguaje ensamblador para pic 16f84

MOVWF PORTB ; carga el valor de W al puerto BCALL Retardo_2s ; demora de 500ms

MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_2s ; demora de 500ms

MOVLW SEC16 ; carga el valor de SEC16 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC16 ; carga el valor de SEC16 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_1s ; demora de 500ms

MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_1s ; demora de 500ms

MOVLW SEC16 ; carga el valor de SEC16 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC16 ;carga el valor de SEC16 en WMOVWF PORTB ;carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500ms

MOVLW SEC15 ; carga el valor de SEC15 en WMOVWF PORTA ; carga w en el puerto A MOVLW SEC15 ; carga SEC15 en WMOVWF PORTB ; carga el valor de W en el puerto BCALL Retardo_500ms ; demora de 500msGOTO 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 números de la sucesión;de Fibonacci. La velocidad del movimiento será fijada por la lectura de 3 switches;conectados al puerto A de manera que se visualice cada posición durante un tiempo:;Si (PORTA)=0, cada posición se visualiza durante 0x100 ms=0 ms;Si (PORTA)=1, cada posición se visualiza durante 1x100 ms=100;Si (PORTA)=2, cada posición se visualiza durante 2x100 ms=200;Si (PORTA)=3, cada posición se visualiza durante 3x100 ms=300;Si (PORTA)=4, cada posición se visualiza durante 4x100 ms=400;Si (PORTA)=7, cada posición se visualiza durante 7x100 ms=700

;***********************************************************

;Zona de Datos**********************************************

Page 8: Ejemplos de lenguaje ensamblador para pic 16f84

__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC

LIST P=16F84A; Procesador Utilizado

INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados

CBLOCK 0x0C ;define el valo de una cosntante o vectorTablaLongitud ;etiquetasTablaPosicion ;etiquetasContadorTiempo ;etiquetasGuardaContador ;etiqutasENDC ;termina c

;Zona de Codigos *******************************************

ORG 0 ;indica al compilador que el código por debajo de ella debealojarse a partir de la posición de memoria 0 del PICInicio

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.

Principalclrf PORTB ; El puerto de salida esta apagado.movf PORTA,W ; Lee el puerto de entrada.andlw b'00000111' ; Almacena la información válida.movwf ContadorTiempo ; Lo pasa al contadormovwf GuardaContador ; y a su copia.movf ContadorTiempo,F ; Comprueba si es cero.btfsc STATUS,Z ; Si es cero sale fuera.goto Finmovlw TablaFin-TablaInicio ; Calcula la longitud de la tabla y la carga enmovwf TablaLongitud ; este registro que actuará como contador.clrf TablaPosicion ; Apunta a la primera posición de la tabla.

VisualizaOtraPosicionmovf TablaPosicion,W ; Aquí posición a leer de la tabla.call LeeTabla ; Visualiza la posición 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_100msdecfsz ContadorTiempo,F ;aplica el retardo.goto MantieneVisualizacion; aplica el bucle incf TablaPosicion,F ; apunta a la siguiente posición por visualizar.decfsz TablaLongitud,F ; ¿Ha terminado la tabla?goto VisualizaOtraPosicion ; No, pues visualiza la siguiente posición.

Fin goto Principal ; aplica el bucle infinito desde principal

; Subrutina "LeeTabla" ------------------------------------------------------------------

Page 9: Ejemplos de lenguaje ensamblador para pic 16f84

;LeeTabla

addwf PCL,FTablaInicio ; Indica la posición inicial de la tabla.

retlw b'00000000' ; Cada uno de los siguientes valores es retlw b'00000001' ; forma parte de la sucesion de fibonacciretlw b'00000001' ; en binarioretlw b'00000010'retlw b'00000011'retlw b'00000101'retlw b'00001000'retlw b'00001101'retlw b'00010101'retlw b'00100010'retlw b'00110111'retlw b'01011001'retlw b'10010000'retlw b'11101001'

TablaFin ; Indica la posición final de la tabla.

INCLUDE <RETARDOS.INC>; Utiliza la biblioteca de retardosEND.

;Programa Contador.;Se pone el 0 en binario, y en incrementos de 50 milisegundos, muestra sucesivamente;el 1,2,3,4…255 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

Page 10: Ejemplos de lenguaje ensamblador para pic 16f84

; 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 NumeroENDCmovlw d'0' ; Mueve numero al registro wmovwf 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 ; Envia a salida del puerto Bgoto Bucle2 ; Es mas de 255 y envia a la resta

Bucle movf Numero,W ; mueve numero a Wmovwf PORTB ; Mueve w al puerto BCALL Retardo_50ms ; Llama a retardo de 50 msgoto 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 siguienteinstruccion

goto Bucle3 ; Envia a la salida del puerto Bgoto suma ; Como es cero envia a la suma

Bucle3 movf Numero,W ;Envia numero a Wmovwf PORTB ;Envia W al puerto B (salida)

CALL Retardo_50ms ;Llama a retardo de 50 msgoto Bucle2 ;Manda a la resta

INCLUDE <RETARDOS.INC> ; Incluye la libreria de retardosEND ; Fin del Programa

;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.

Page 11: Ejemplos de lenguaje ensamblador para pic 16f84

;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 púerto 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 wmovwf 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

Page 12: Ejemplos de lenguaje ensamblador para pic 16f84

END; Fin del programa

;Programa Suma.;Programa donde desde la computadora se teclea un número, ;lo manda al pic, y el pic regresa el numero mas 3. Los números ;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 VariableGuardaDatoNumeroENDC ;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 comunicación con el puerto

Principal

call RS232_LeeDato ; Envia a subrutina para leer dato

movwf GuardaDato ; Lo envia a GuardaDato

call LCD_Caracter ; Se visualiza el dato en pantalla

Suma ;Subrutina Suma

movf GuardaDato,W ;pone el dato de entrada en W

addlw 3 ;le suma 3

call RS232_EnviaDato ;llama a la subrutina

Goto Principal ;bucle infinito

Page 13: Ejemplos de lenguaje ensamblador para pic 16f84

INCLUDE <RS232.INC> ; Incluye libreria de conexion INCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCDINCLUDE <RETARDOS.INC> ; Incluye la libreria de retardos

END ; 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 ;Inicimos el valor de etiquetas.ENDC

RetornoCarro EQU .13 ;Definimos el valor de las etiquetas.CambioLinea EQU .10

; Inicio del programa de Bucle*********************************************

Inicio

call LCD_Inicializa ;Llama a la sub rutina de LCD

call RS232_Inicializa ; Inicia la comunicación con el puerto

Principal

movlw Mensaje0 ; Mueve Mensaje a W

call RS232_Mensaje ; Llama a subrutina de Mensaje

call Retardo_1s ; Llama a retardo de un 1s

Goto Principal ; Envia a Principal

;Configuración de Mensaje *******************************************************************

Mensajes

Page 14: Ejemplos de lenguaje ensamblador para pic 16f84

addwf PCL,F ; Suma PCL a F

Mensaje0

DT RetornoCarro ; Envia a pantalla un espacio

DT "Hola Mundo" ;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 conexionINCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCDINCLUDE <RETARDOS.INC> ; Incluye la libreria de retardos

END ; Fin del Programa

;Programa Leds.;Hacer un programa que desde la computadora mande una señal 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 ; Va a guardar el contenido de la tecla pulsada. MensajeApuntado ; Va a guarda la dirección del mensaje apuntado. ENDC #DEFINE Salida1 PORTB,7 ; Define puerto de salidas #DEFINE Salida2 PORTB,6 ; Define dónde se sitúa cada una de las salidas. #DEFINE Salida3 PORTB,5 #DEFINE Salida4 PORTB,4 #DEFINE Salida5 PORTB,3 #DEFINE Salida6 PORTB,2 #DEFINE Salida7 PORTB,1 #DEFINE Salida8 PORTB,0

TECLA1_ON EQU '1' ; Código de las teclas utilizadas. TECLA1_OFF EQU '0'

Page 15: Ejemplos de lenguaje ensamblador para pic 16f84

;Zona de Codigos *****************************************************************

ORG 0

; Inicio del programa de Bucle*********************************************

Inicio call LCD_Inicializa ; Inicializa el display LCD

call RS232_Inicializa ; Inicializa RS232 bsf STATUS,RP0 ; Configura como salidas las 8 líneas del bcf Salida1 ; del Puerto B bcf Salida2 bcf Salida3 bcf 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 carácter.call TesteaTeclado ; Verifica caracter recibido y ejecuta acciongoto 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. movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada. xorlw TECLA1_OFF ; ¿Es la tecla del movimiento hacia atrás? btfsc STATUS,Z ; goto R1_OFF ; Sí, se desea movimiento hacia atrás. goto Fin R1_ON bsf Salida1 ;Mantiene todas las salidas prendidas bsf Salida2 bsf Salida3 bsf Salida4

bsf Salida5 bsf Salida6 bsf Salida7 bsf Salida8

goto Fin

Page 16: Ejemplos de lenguaje ensamblador para pic 16f84

R1_OFF bcf Salida1 ;Mantiene todas las salidas apagadas bcf Salida2 bcf Salida3 bcf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

Parado bcf Salida1 ;Mantiene todas las salidas apagadas, el sistema se encuentra detenido bcf Salida2 bcf Salida3 bcf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

Finreturn

INCLUDE <RS232.INC> ;Librerias utilizadas.INCLUDE <RETARDOS.INC>

INCLUDE <LCD_4BIT.INC>

END ;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 ; Va a guardar el contenido de la tecla pulsada. MensajeApuntado ; Va a guarda la dirección del mensaje apuntado. ENDC

Page 17: Ejemplos de lenguaje ensamblador para pic 16f84

#DEFINE Salida1 PORTB,7 ; Define puerto de salidas #DEFINE Salida2 PORTB,6 ; Define dónde se sitúa cada una de las salidas. #DEFINE Salida3 PORTB,5 #DEFINE Salida4 PORTB,4 #DEFINE Salida5 PORTB,3 #DEFINE Salida6 PORTB,2 #DEFINE Salida7 PORTB,1 #DEFINE Salida8 PORTB,0

UnLed EQU '1' ; Código 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

call RS232_Inicializa ; Inicializa RS232 bsf STATUS,RP0 ; Configura como salidas las 8 líneas del bcf Salida1 ; del Puerto B bcf Salida2 bcf Salida3 bcf 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 carácter.call TesteaTeclado ; Verifica caracter recibido y ejecuta acciongoto 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. movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.

Page 18: Ejemplos de lenguaje ensamblador para pic 16f84

xorlw DosLed ; ¿Es la tecla del movimiento hacia atrás? btfsc STATUS,Z ; goto L2_ON ; Sí, se desea movimiento hacia atrás.

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 TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw SieteLed ; ¿Es la tecla del movimiento hacia adelante? btfsc STATUS,Z ; goto L7_ON ; 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 ;Definimos el modo en que deseamosque se ejecute bsf Salida1 ;cada una de las salidas, desde un solo led encendido bsf Salida2 ; hasta los 8 mas una rutina donde todos se encuentran bsf Salida3 ; apagados y otra donde no se realiza alguna accion bsf Salida4

bsf Salida5 bsf Salida6 bsf Salida7 bsf Salida8

goto Fin

L1_ON ;Un led encendido bsf Salida1 bcf Salida2 bcf Salida3

Page 19: Ejemplos de lenguaje ensamblador para pic 16f84

bcf Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

L2_ON ;Dos led encendidos bsf Salida1 bsf Salida2 bcf Salida3 bcf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

L3_ON ;Tres led encendidos bsf Salida1 bsf Salida2 bsf Salida3 bcf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

L4_ON ;Cuatro led encendidos bsf Salida1 bsf Salida2 bsf Salida3 bsf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

L5_ON ;Cinco led encendidos bsf Salida1 bsf Salida2 bsf Salida3 bsf Salida4

bsf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

goto Fin

L6_ON ;Seis Led encendidos bsf Salida1

Page 20: Ejemplos de lenguaje ensamblador para pic 16f84

bsf Salida2 bsf Salida3 bsf Salida4

bsf Salida5 bsf Salida6 bcf Salida7 bcf Salida8

goto Fin

L7_ON ;Siete eld encendidos. bsf Salida1 bsf Salida2 bsf Salida3 bsf Salida4

bsf Salida5 bsf Salida6 bsf Salida7 bcf Salida8

goto Fin Parado ;Todos apagados bcf Salida1 bcf Salida2 bcf Salida3 bcf Salida4

bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8

Lomismo ;no hace algun cambio.

Fin ;Regresareturn

INCLUDE <RS232.INC>INCLUDE <RETARDOS.INC>

INCLUDE <LCD_4BIT.INC>

END ;Fin del programa

;Programa Motores.;Dos motores están conectados al pic mediante el driver L293B (usar en la simulación 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

Page 21: Ejemplos de lenguaje ensamblador para pic 16f84

;******************************************************************************************************;Zona dedatos***************************************************************************************** __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 CÓDIGOS *********************************************************************

ORG 0 ;El programa incia en el bit cero de la memoriaInicio

bsf STATUS,RP0 ;Entramos al modo de configuracion de puertos.bsf EntradaMarcha ; Configura las líneas de entrada y salida.bsf EntradaSentidobsf EntradaMarcha2bsf EntradaSentido2bcf SalidaMarchabcf SalidaSentidobcf SalidaMarcha2bcf SalidaSentido2bcf STATUS,RP0

Principal btfsc EntradaMarcha ; Comprueba el estado del interruptor de funcionamiento.

goto Gira ; Si el interruptor esta encendido, envia a la subrutina.bcf SalidaMarcha ; Para el motor, poniendo a cero la línea de habilitacion.

Principal2btfsc EntradaMarcha2 ; Comprueba el estado del interruptor de funcionamiento.goto Gira2bcf SalidaMarcha2 ; Para el motor, poniendo a cero la línea de habilitacion.

Principal3 btfsc EntradaSentido ; Comprueba el estado del interruptor de funcionamiento.

goto Gira3bcf SalidaSentido ; Para el motor, poniendo a cero la línea de habilitacion.

Principal4btfsc EntradaSentido2 ; Comprueba el estado del interruptor de funcionamiento.goto Gira4bcf SalidaSentido2 ; Para el motor, poniendo a cero la línea de habilitacion.;goto Fin3 ; habilitación y sale.

Girabsf SalidaMarcha ; Pone en marcha el motor.goto Fin

Page 22: Ejemplos de lenguaje ensamblador para pic 16f84

Gira2bsf SalidaMarcha2 ; Pone en marcha el motor.goto Fin2

Gira3bsf SalidaSentidogoto Fin3

Gira4bsf SalidaSentido2 ; Pone en marcha el motor.goto Fin4

Fin ;Inicia los bucles infinitos.goto Principal2Fin2goto Principal3Fin3goto Principal4Fin4goto Principal

END

;Laboratorio de Robotica y control;Programa:Motor compu;Desde la computadora, dependiendo de la tecla, se obtiene lo siguiente:

;Tecla Efecto

;1 Enciende todos los motores;0 Apaga todos los motores;D Los motores giran a la derecha;I Los motores giran a la izquierda;M Un motor gira a la derecha y otro a la izquierda;L Los motores se mueven a la mitad de la velocidad máxima ;A Los motores se mueven a velocidad máxima

;************************************************************

;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***********************************

Page 23: Ejemplos de lenguaje ensamblador para pic 16f84

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 VariableTeclaPulsadaCiclos_ONCiclos_OFFGuardaEntradaENDC

movlw d'0' ; Mueve numero al registro wmovwf GuardaEntrada ; Mueve Numero a F

;Definicion de Teclas

EnciendeTodos EQU '1' ; Código de las teclas utilizadas. ApagaTodos EQU '0' TodosDerecha EQU 'd' TodosIzquierda EQU 'i' DerechaIzquierda EQU 'm' MitadV EQU 'l' MaximaV EQU 'a'

call LCD_Inicializa

call RS232_Inicializa ; Inicia la comunicación con el puerto

Principal

call RS232_LeeDato ; Envia a subrutina para leer dato

call TesteaTeclado ;; Verifica caracter recibido y ejecuta accion

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

TesteaTeclado

Page 24: Ejemplos de lenguaje ensamblador para pic 16f84

movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada. xorlw EnciendeTodos ; ¿Es la tecla del encendido? btfsc STATUS,Z ; goto TodosEncendidos ; Sí movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada. xorlw ApagaTodos ; ¿Es la tecla de todos apagados? btfsc STATUS,Z ; goto TodosApagados ; 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 ; Guarda el contenido de la tecla pulsada. xorlw DerechaIzquierda ; ¿Es la tecla de uno derecha y otro opuesto? btfsc STATUS,Z ; goto DI ; 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 TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw MaximaV ; ¿Es la tecla de maxima velocidad? btfsc STATUS,Z ; goto AltaVelocidad ; Sí

TodosEncendidos

movlw b'10100110' ; envia a todos encendidos

goto ActivaSalida ; envia a la sailida de puerto

TodosApagados

clrf PORTB ; Apaga los motores

goto ActivaSalida ; envia a salida de puerto

Derecha

Page 25: Ejemplos de lenguaje ensamblador para pic 16f84

movlw b'10100110' ; Los motores hacia la derecha

goto ActivaSalida ; envia a la salida de puerto

Izquierda

movlw b'01100101' ; los dos motores hacia la izquierda

goto ActivaSalida ; encia a salida de puerto

DI

movlw b'01100110' ; Un motor hacia la derecha y otro en direccion opuesta

goto ActivaSalida ; envia salida de puerto

MediaVelocidad

movlw Ciclos_OFF ; Mueve ciclos a wmovf GuardaEntrada,W; envia guardar dato a wmovwf Ciclos_ON ; Envia ciclos on a f

motor_ON

movlw b'10100110' ;Enciende los motoresmovwf PORTBcall Retardo_5ms ; Llama a un retardo de 5msdecfsz Ciclos_ON,F ;Si es 0 salta a la siguiente instrucciongoto motor_ON+2 ; envia a motor encendido +2

motor_OFF

clrf PORTB ;pone a ceros el puerto bcall Retardo_5ms ;llama a un retardo de 5msdecfsz Ciclos_OFF,F ;verifica si ciclos off es 0 si es asi salta a la siguiente instrucciongoto motor_OFF+1 ;envia a motor off +1goto ActivaSalida ; envia a salida

AltaVelocidad

movlw b'10100110' ;Enciende los dos motores a maxima velocidad

goto ActivaSalida ; Envia a Salida del puerto

; Salida de Puerto ********************************************************

ActivaSalida

movwf PORTB ;Manda a la salida del puerto B

return ;termina subrutina Crea un bucle cerrado e infinito

Page 26: Ejemplos de lenguaje ensamblador para pic 16f84

INCLUDE <RS232.INC> ; Incluye libreria de conexion INCLUDE <RETARDOS.INC>INCLUDE <LCD_4BIT.INC>

END ; 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 el puerto y su utilización (encendido o apagado)

#DEFINE EntradaSentido PORTA,1 ;Define el puerto y su utilización (giro derecha o izquierda)

;Zona de Codigos *******************************************

ORG 0Inicio bsf STATUS,RP0; Entra al modo de configuracion de los puertos

bsf EntradaMarcha

bsf EntradaSentido

clrf PORTB ; Las lineas del puerto B configuradas como salidas

bcf STATUS,RP0

Principal

clrw ;Con esta combinacion se detiene el motor

btfsc EntradaMarcha ;Comprueba el estado del interruptor de funcionamiento

goto ActivaSalida

Page 27: Ejemplos de lenguaje ensamblador para pic 16f84

movlw b'00000110' ;Gira en un sentido

btfsc EntradaSentido

movlw b'00000101' ;Gira en otro sentido

ActivaSalida

movwf PORTB ;Manda a la salida del puerto B

goto Principal ; Crea un bucle cerrado e infinito

END; Fin del programa

;Robotica y control.;Programa:robot seguidor.

; Programa de control para el microbot TRASTO, el cual se desplaza siguiendo una línea negra; marcada sobre fondo blanco a modo de pista.;; Los sensores ópticos de reflexión CNY70 están 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 línea 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 línea 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 línea, se le hace girar a la izquierda; hasta que vuelva a encontrarla.;; La señal de los sensores CNY70 se aplican a las entradas del microcontrolador a través 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 línea negra, se ha salido de la pista); - Color Negro --> transistor en corte --> entrada al inversor "1" --> RAx = "0".; (Está encima de la línea negra, está dentro de la pista);; ZONA DE DATOS **********************************************************************

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>

#DEFINE SensorDerecha PORTA,0 ; Sensor óptico Derecho.#DEFINE SensorIzquierda PORTA,1 ; Sensor óptico Izquierdo.

; ZONA DE CÓDIGOS ********************************************************************

ORG 0Inicio

bsf STATUS,RP0 ; Selecciona Banco 1 de registros.bsf SensorDerecha ; Estas líneas se configuran como entrada.

Page 28: Ejemplos de lenguaje ensamblador para pic 16f84

bsf SensorIzquierdaclrf PORTB ; Las líneas del Puerto B se configuran como salidas.bcf STATUS,RP0 ; Selecciona Banco 0 de registros.

Principalmovlw b'00001110' ; Para girar a la derecha.btfss SensorDerecha ; ¿Ha salido por la derecha?, ¿detecta blanco?goto ActivaSalida ; No, el detector derecho está encima de la línea

; negra, gira a la derecha.movlw b'00000111' ; Para girar a la izquierda.btfss SensorIzquierda ; ¿Ha salido también por la izquierda?movlw b'00001111' ; No, está en el borde derecho. Sigue recto.

ActivaSalidamovwf PORTBgoto Principal

END

;Robotica y control.;Programa:robot baliza; Programa de control para Microbot TRASTO el cual detecta una baliza que genera; una señal infrarroja modulada a 38 kHz.;; Los sensores ópticos SFH5110 están 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; línea de salida.;; El programa adopta la estrategia siguiente:; - Si no se detecta la baliza por ningún 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_OSCLIST P=16F84AINCLUDE <P16F84A.INC>

#DEFINE SensorDerecha PORTA,2 ; Sensor Derecho.#DEFINE SensorIzquierda PORTA,3 ; Sensor Izquierdo.

; ZONA DE CÓDIGOS *********************************************************************

ORG 0Inicio

bsf STATUS,RP0 ; Selecciona Banco 1 de registros.bsf SensorDerecha ; Estas líneas se configuran como entrada.bsf SensorIzquierdaclrf PORTB ; Las líneas del Puerto B se configuran como salidas.

Page 29: Ejemplos de lenguaje ensamblador para pic 16f84

bcf STATUS,RP0 ; Selecciona Banco 0 de registros.Principal

btfsc SensorDerecha ; ¿Ha detectado señal por la derecha?goto Ver_Izquierda ; No recibe por la derecha.btfsc SensorIzquierda ; Sí, ¿también señal por la izquierda?goto GiroDerecha ; No, solo señal por la derecha, gira a derecha.movlw b'00001111' ; Sí, recibe por los dos sensores. Sigue recto.goto ActivaSalida

Ver_Izquierdabtfsc SensorIzquierda ; Por la derecha no recibe. ¿Y por la izquierda?goto GiroDerecha ; Tampoco, ni por la derecha ni por la izquierda.

GiroIzquierdamovlw b'00000111' ; Gira a la izquierda.goto ActivaSalida

GiroDerechamovlw b'00001110' ; Gira a la derecha.

ActivaSalidamovwf PORTBgoto Principal

END