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

Upload: athena

Post on 15-Dec-2014

891 views

Category:

Documents


19 download

DESCRIPTION

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

TRANSCRIPT

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