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 xxx11001 por el Puerto B deberá aparecer 00000110 ;************************* ;************************************** ************************* ********************* ********* ;Zona de Datos******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE
; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************** 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; TRISA; Mueve w al registro f ; Cero si es salida y uno si es entrada Rutina bcf STA STATUS,RP0; TUS,RP0 ; Sale del modo de configuracion de los puertos movf PORTA,W; carga el registro del puerto A en (W) COMF PORT PORTA,W ; Esta instrucción instrucción complementa un registro, registro, es decir, decir, los unos por 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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************** puertos********************************* *************** ** clrf TRISB; LAS LINEAS DEL PUERTO PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00011111'; Las lineas del puerto A configuradas como entrada movwf TRISA; TRISA; Mueve w al registro f ; Cero si es salida y uno si es entrada Rutina bcf STA STATUS,RP0; TUS,RP0 ; Sale del modo de configuracion de los puertos ; Inicio del programa de Bucle********************* Bucle********************************** ************************ *********** movf PORTA,W; carga el registro del puerto A en (W) addwf PORT P ORTA,W; A,W; SUMA S UMA 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 manera tal, que: ;Si RA0=1, se encienden todos los LEDs de salida ;Si RA0=0, se encienden sólo los LEDs del nibble alto
;************************* ;************************************** ************************* ********************* ********* ;Zona de Datos******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************** puertos********************************* *************** ** clrf TRISB; LAS LINEAS DEL PUERTO PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00000001'; Las lineas del puerto A configuradas como entrada movwf TRISA; 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********************* Bucle********************************** ************************ *********** Principal
; Inicio del bucle del programa
BTFSC PORTA, 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 Prin Princi cipa pal1 l1
movl movlw w b'1 b'11110 1000 000' 0';; Mand Mandaa a ence encend nder er los los nibl nibles es de arri arriba ba
Movwf PORTB; manda w a los registros de B GOTO Principal ; Envia al inicio del del programa Principal2 Principa l2
movlw b'111 b'111111 11111'; 11'; 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********************* datos********************************** ************************* ************ __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de codigos******************* codigos******************************* ************************* ************* bsf STATUS,RP STATUS,RP0; 0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************* 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 al registro f bcf STA STATUS,RP0; TUS,RP0 ; Sale del modo de configuracion de los puertos ;
Inicio del programa de Bucle*********************** 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 END; Fi Fin ddel el prog rogram rama
.
;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,
;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 R B2 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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado. INCLUDE ; Definicion algunos Operados utilizados. CBLOCK 0x0C; Definimos algunas algunas constantes y etiqutas etiqutas ENDC ; Salimos del modo de definicon. SEC1 SEC1 equ equ b'00 b'0000 0000 0000 00';';Ca Cada da un unaa de esta estass etiq etique ueta tass SEC2 SEC2 equ equ b'10 b'1000 0000 0000 00';';ti tien enee asig asignnado ado un movi movim mento ento SEC3 SEC3 equ equ b'00100 10000 00000';de ';de la secu secuan anci ciaa ddes esea eada da.. SEC4 SEC4 equ equ b'00 b'0010 1000 0000 00';';Se Se inic inicia ia todo todoss los los pu puer erto toss a cero cero SEC5 SEC5 equ equ b'00 b'0001 0100 0000 00';';pa para ra qu quee la la sec secue uenc ncia ia no se desf desfas ase. e. 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 SEC1 6 equ b'1111111 b'11111111' 1' ;Zona de Codigos ************************************* ******************************************* ****** ORG 0;Indica 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. 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 ;Biblioteca ;Biblioteca de retardos. END; Fin del programa. ;Programa Selector. 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******************** Datos********************************* ************************** *************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados CBLOCK 0x 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 código por debajo de ella debe alojarse a partir de la posición de memoria 0 del PIC Inicio bsf STA STATUS,RP0 ; Entra al modo de configuracion 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 STA STATUS,RP0 ;Sale del modo de configuracion 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 información válida. movwf ContadorTiempo ; Lo pasa al contador movwf GuardaContador ; y a su copia. movf ContadorTiemp empo,F ; Comprueba si es cero. btfsc STA STATUS,Z ; Si es cero sale fuera. goto Fin movlw movlw TablaFi ablaFin-T n-Tabl ablaIn aInici icioo ; Calcul Calculaa la longi longitud tud de de la tabla tabla y la la carga carga en movwf TablaLongitud ; este re registro qquue ac actuará com comoo co contador. clrf TablaPosicion ; Apunta a la primera posición de la tabla. VisualizaOtraPosicion movf 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 Guarda ardaCo Cont ntad adoor,W ; Rec Recup uper eraa el el val valoor del del con contador ador.. movwf movwf ContadorT ContadorTiempo iempo MantieneVisualizacion ; Durante un tiempo igual a (ContadorTiempo)x100 ms. call Retardo_100ms decfs ecfszz Conta ontado dorT rTiiempo empo,F ,F ;apl aplica ica el ret retardo ardo.. goto goto Mant Mantie iene neV Visua isuali liza zaci cion on;; aplic aplicaa el bucl buclee incf TablaPosicion,F ; apunta a la siguiente posición por visualizar. decfsz TablaLongitud,F ; ¿Ha terminado la tabla? goto goto Visuali isualizaO zaOtra traPos Posici icion on ; No, pue puess visual visualiza iza la siguie siguient ntee pposi osició ción. n. Fin goto Principal ; aplica el bucle infinito desde principal ; Subrutina "LeeTabla" "LeeTabla" ------------------------------------------------------------------
; LeeTabla addwf TablaInicio retl retlw w retl retlw w retlw retlw retlw retlw retlw retlw retlw retlw retlw etlw retlw retlw retlw etlw
PCL,F b'00 b'0000 0000 0000 00'' b'00 b'0000 0000 0001 01'' b'00000001' b'00000010' b'00000011' b'00000101' b'00001000' b'00001101' b'00010101' b'00100010' b'001 '00110 101111' b'01011001' b'10010000' b'11 '1110 1010 1001 01''
; Indica la posición inicial de la tabla. ; Cada Cada un unoo de los los sigu siguie ient ntes es valo valore ress es ; for form ma par parte te de la suce sucesi sion on de fibo fibona nacc ccii ; en binario
TablaFin
; Indica la posición final de la tabla.
INCL INCLUD UDE E C>;; END.
Util Utiliz izaa la bibl biblio iote teca ca de reta retard rdos os
;Programa Contador. 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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** ORG 0 bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************** puertos********************************* *************** ** clrf TRISB; LAS LINEAS DEL PUERTO PUERTO B CONFIGURADAS COMO SALIDAS movlw b'00011111'; Las lineas del puerto A configuradas como entrada movwf TRISA; 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********************* Bucle********************************** ************************g ***********g CBLOCK 0X0C ; Define a numero Numero ENDC movl ovlw d' d'0' ; Muev Muevee num numer eroo al al reg regis isttro w movwf Numero ; Mueve Numero a F Rutina suma incfsz incfsz Numero,f; Numero,f; incrementa incrementa una una unidad unidad a numero, numero, si es es mayor mayor que 255 255 salta salta a la la siguient siguientee intruccion intruccion goto Bucle goto Bucle2
; Envia a salida del puerto B ; Es mas de 255 y envia a la resta
Bucle Bucle movf movf Numero Numero,W ,W ; mueve mueve numero numero a W movwf PORTB ; Mueve w al puerto B CALL Retardo_50ms ; Llama Llama a retardo retardo de 50 ms goto Rutina ; Envia al inicio de la suma Bucle2 Bucle2 decfsz decfsz Numero,f ; Decrece en una unidad si es diferente diferente de 0 sigue si igual a cero salta a la siguiente siguiente instruccion goto Bucle3 ; Envia a la salida del puerto B goto suma ; Como es cero envia a la suma Bucle3 Bucle3 movf Numero,W Numero,W ;Envia ;Envia numero numero a W movwf PORTB ;Envia W al puerto B (salida) CALL CALL Reta Retardo rdo_50 _50ms ms ;Llam ;Llamaa a retar retardo do de de 50 ms ms goto Bucle2 ;Manda a la resta
END
INCLUDE ; Incluye la libreria de retardos ; Fin Fin del Pro Program gramaa
;Programa Selector. Selector. ;Compara el numero definido '21', con el numero asignado con las entradas ;del puerto A. ;************************* ;************************************** ************************* ********************** ********** ;Zona de Datos******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado. INCLUDE ; Definicion algunos Operados utilizados.
;Zona de Codigos ************************************* ******************************************* ****** ORG 0 ; ind indica ica a la memo emoria ria en en qu que pos posiicion cion ini inicia ciar. bsf STATUS,RP0; Entra al modo de configuracion de los puertos. ;Conconfiguracion de puertos********************* 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; 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********************* 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 Numero, W ; hace la resta PORTA PORTA - numero menor movlw movlw b'0000 b'000011 1111 11';Sup ';Supone one que la entrada entrada es menor btfss STA STATUS,C; Verifica Verifica el valor el C de la resta si es C=1 C=1 salta al siguiente comando comando goto salida ; Envia a la salida igual igual
movlw movlw b'111 b'11111 1111 111'; 1'; Supone Supone que que los dos dos numeros numeros son iguale igualess son iguale igualess btfsc STA STATUS,Z ; Ve Ve si Z=0 si es cero salta a siguiente siguiente comando goto salida ; si Z=1 son iguales y envia a la salida
mayor movlw b'111 b'11110000' 10000' ; Z=0 y entonces no no son iguales, iguales, por lo tanto tanto la entrada es mayor salida movwf PORTB PORTB ;Envia a salida Goto Rutina; Bucle de proceso infinito
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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** CBLOCK 0x0C ;Define Variable GuardaDato Numero ENDC ;Termina definir va variable.
; Inicio del programa de Bucle********************* 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
Sum Suma ;Sub ;Subru ruti tina na Sum Suma movf GuardaDato,W addlw 3
;pone el dato de entrada en W ;le suma 3
call RS232_E RS232_EnviaD nviaDato ato ;llama ;llama a la subrutina subrutina Goto Principal
;bucle infinito
END
INCLUDE ; Incluye libreria de conexion INCLUDE .INC> ; Incluye Incluye libreria de de LCD INCL INCLUD UDE E > ; Inc Inclu luyye la la lib librreria eria de reta retard rdos os ; Fin Fin del Pro Program gramaa
;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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** CBLOCK 0X0C ENDC RetornoCarro EQ EQU .1 .13 CambioLinea EQU .10
;Inicimos el valor de etiquetas. ;Definimos el el va valor de de la las et etiquetas.
; Inicio del programa de Bucle********************* 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
Goto Principal
; Mueve Mensaje a W
call call RS23 RS232_M 2_Mens ensaje aje
; Llama Llama a subr subruti utina na de Mensaj Mensajee
call Retardo_1s
; Llama a retardo de un 1s ; Envia a Principal
;Configuración de Mensaje ************************ ************************************* ************************** ************************** ***************** **** Mensajes
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 "Mi nom nombr bree es es Eri Erick ck""
; Env Envia ia a pan panta tall llaa Mi Mi nom nombr bree es es Eri Erick ck
DT CambioLinea, CambioLinea, CambioLinea, CambioLinea, 0X00 0X00 ; Envia a pantalla 3 espacios espacios
END
INCLUDE ; Incluye libreria de conexion INCLUDE ;Incluye libreria libreria de conexion INCLUDE .INC> ; Incluye Incluye libreria de de LCD INCL INCLUD UDE E > ; Inc Inclu luyye la la lib librreria eria de reta retard rdos os ; Fin Fin del Pro Program gramaa
;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******************** Datos********************************* ************************** ************************* ********************** ********** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados CBLOCK 0x0C TeclaPulsada MensajeApuntado 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 dirección del mensaje apuntado. PORTB,7 PORTB,7 PORTB,6 PORTB,6 PORTB,5 PORTB,4 PORTB,3 PORTB,2 PORTB,1 PORTB,0
TECLA1_ON EQU '1' ; Código de las teclas utilizadas. TECLA1_OFF EQU '0'
; Define puerto de salidas ; Define dónde se sitúa cada una de las salidas.
;Zona de Codigos ************************** *************************************** ************************** ************************* ************** ORG 0 ; Inicio del programa de Bucle********************* Bucle********************************** ************************ *********** Inicio call LCD_Inicializa ; Inicializa el display LCD RS232_Inicializa ; Inicializa RS232 STATUS,RP0 STATUS,RP0 ; Configura Configur a como salidas las 8 líneas 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 carácter. carácter. call TesteaTeclado ; Verifica caracter caracte r 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 btfs c STATUS, STATUS,Z Z ; goto R1_ON ; Sí, se desea movimiento hacia adelante. call bsf bcf bcf bcf bcf
movf TeclaPulsada,W xorlw TECLA1_OFF btfsc btfs c STATUS, STATUS,Z 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 atrás? ; ; Sí, se desea movimiento hacia atrás.
;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
;Mantiene todas las salidas apagadas
Parado bcf Salida1 bcf Salida2 bcf Salida3 bcf Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8
;Mantiene todas las salidas apagadas, el sistema se encuentra detenido
Fin return INCLUDE INCLUDE INCLUDE
;Librerias utilizadas.
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******************** Datos********************************* ************************** ************************* ********************** ********** __CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC _WDT_OFF&_PWRTE_ON&_XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados CBLOCK 0x0C TeclaPulsada MensajeApuntado MensajeApuntado ENDC
; Va a guardar el contenido de la tecla pulsada. ; Va a guarda la dirección del mensaje apuntado.
#DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE
Salida1 Salida2 Salida3 Salida4 Salida5 Salida6 Salida7 Salida8
PORTB,7 PORTB,7 PORTB,6 PORTB,6 PORTB,5 PORTB,4 PORTB,3 PORTB,2 PORTB,1 PORTB,0
; Define puerto de salidas ; Define dónde se sitúa cada una de las salidas.
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********************* Bucle********************************** ************************ *********** Inicio call LCD_Inicializa ; Inicializa el display LCD RS232_Inicializa ; Inicializa RS232 STATUS,RP0 STATUS,RP0 ; Configura Configur a como salidas las 8 líneas 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 carácter. carácter. call TesteaTeclado ; Verifica caracter caracte r 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 btfs c STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z Z goto L2_ON
; ¿Es la tecla del movimiento hacia atrás? ; ; 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 btfs c STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z Z ; goto L6_ON ; Sí, se desea movimiento hacia adelante. movf xorlw btfsc btfs c goto
TeclaPulsada,W SieteLed STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z 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
;Definimos el modo en que deseamos ;cada una de las salidas, desde un solo led encendido ; hasta los 8 mas una rutina rutina donde todos se encuentran encuentran ; apagados y otra donde donde no se realiza alguna accion accion
;Un led encendido Salida1 Salida2 Salida3
bcf
Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin
L2_ON bsf bsf bcf bcf
;Dos led encendidos
L3_ON bsf bsf bsf bcf
;Tres led encendidos
L4_ON bsf bsf bsf bsf
;Cuatro led encendidos
L5_ON bsf bsf bsf bsf
;Cinco led encendidos
L6_ON bsf
;Seis Led encendidos
Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin Salida1 Salida2 Salida3 Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin Salida1 Salida2 Salida3 Salida4 bsf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 goto Fin Salida1
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.
Parado
;Todos apagados
Salida1 Salida2 Salida3 Salida4 bsf Salida5 bsf Salida6 bsf Salida7 bcf Salida8 goto Fin
bcf Salida1 bcf Salida2 bcf Salida3 bcf Salida4 bcf Salida5 bcf Salida6 bcf Salida7 bcf Salida8 Lomismo
;no hace algun cambio.
Fin
;Regresa return
INCLUDE INCLUDE INCLUDE 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 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********************** datos*********************************** ************************* ************************* ************************** ************************** ************* *** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P= P=16F84A ;PIC usado INCLUDE ;Paqueteria usada. #DEFINE Sa 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 En EntradaSentido PORTA,1 #DEFINE EntradaSentido2 PORTA,3 ; ZONA DE CÓDIGOS ************************** ************************************** ************************* ************************** ****************** ***** ORG
0
;El programa incia en el bit cero de la memoria
Inicio bsf bsf bsf bsf bsf bcf bcf bcf bcf bcf Principal btfsc goto bcf Principal2 btfsc goto bcf Principal3 btfsc tfsc goto bcf Principal4 btfsc goto bcf ;goto Gira bsf goto
STA STATUS,RP0 EntradaMarcha EntradaSentido EntradaMarcha2 EntradaSentido2 SalidaMarcha SalidaSentido SalidaMarcha2 SalidaSentido2 STA STATUS,RP0
;Entramos al modo de configuracion configuracion de puertos. puertos. ; Configura las líneas líneas de entrada y salida.
EntradaMarcha Gira SalidaMarcha
; Co Comprueba el el es estado de del in interruptor de de fu funcionami amiento. ; Si el interruptor esta encendido, envia a la subrutina. ; Para el motor, motor, poniendo a cero la línea de habilitacion. habilitacion.
EntradaMarcha2 Gira2 SalidaMarcha2 Entrad tradaS aSen enttido ido Gira3 SalidaSentido
; Comprueba el estado del del interruptor de funcionamiento. funcionamiento. ; Para el motor, motor, poniendo a cero la línea de habilitacion. habilitacion. ; Co Com mprue pruebba el esta estado do del del inte interr rrup upto torr de fun funcio cionamie amiennto. to. ; Para el motor, motor, poniendo a cero la línea de habilitacion. habilitacion.
EntradaSentido2 Gira4 SalidaSentido2 Fin3
; Comprueba el estado del del interruptor de funcionamiento. funcionamiento.
SalidaMarcha Fin
; Pone en marcha el motor. motor.
; Para el motor, motor, poniendo a cero la línea de habilitacion. habilitacion. ; habilitación y sale.
Gira2 bsf goto
SalidaMarcha2 Fin2
bsf goto
SalidaSentido Fin3
bsf goto
SalidaSentido2 Fin4
; Pone en marcha el motor. motor.
Gira3 Gira4 Fin goto Fin2 goto Fin3 goto Fin4 goto
; Pone en marcha el motor. motor. ;Inicia los bucles infinitos.
Principal2 Principal3 Principal4 Principal
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 máxima Los motores se mueven a velocidad máxima
;************************* ;************************************** ************************* ********************** ********** ;Zona de Datos******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados ;Zona de Codigos ************************************* ******************************************* ****** ORG 0 bsf STATUS,RP0; Entra al modo de configuracion de los puertos ;Configuracion de puertos******************** puertos********************************* *************** **
clrf TRISB; LAS LINEAS DEL PUERTO 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 movl ovlw d' d'0' ; Muev Muevee num numer eroo al al reg regis isttro w movwf GuardaEntrada ; Mueve Numero a F ;Definicion de Teclas EnciendeTodos ApagaTodos TodosDerecha TodosIzquierda DerechaIzquierda MitadV MaximaV
EQU '1'
; Código de las teclas utilizadas. EQU '0' EQU 'd' EQU 'i' EQU 'm' EQU 'l' 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
movwf TeclaPulsada xorlw EnciendeT Enciende Todos btfsc btfs c STATUS, STATUS,Z Z ; goto TodosEncendidos movf xorlw btfsc btfs c goto
TeclaPulsada,W ApagaTodos STATUS, STATUS,Z Z TodosApagados
; Guarda el contenido de la tecla pulsada. ; ¿Es la tecla del encendido? encendid o? ; 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 btfs c STATUS, STATUS,Z Z ; goto Derecha ; Sí movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada. xorlw TodosIzquierda ; ¿Es la tecla de todos izquierda? btfsc btfs c STATUS, STATUS,Z Z ; goto Izquierda ; Sí movf TeclaPulsada,W xorlw DerechaIzquierda btfsc btfs c STATUS, STATUS,Z 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 btfs c STATUS, STATUS,Z Z ; goto MediaVelocidad ; Sí movf xorlw btfsc btfs c goto
TeclaPulsada,W MaximaV STATUS, STATUS,Z Z AltaVelocidad AltaVelocidad
; Guarda el contenido de la tecla pulsada. ; ¿Es la tecla de maxima velocidad? ; ; Sí
TodosEncendidos movlw b'10100110'
; envia a todos encendidos
goto ActivaSalida
; envia a la sailida de puerto
TodosApagados clrf PORTB goto ActivaSalida Derecha
; Apaga los motores ; envia a salida de puerto
movlw b'10100110'
; Los motores hacia la derecha
goto ActivaSalida
; envia a la salida de puerto
movlw b'01100101'
; los dos motores hacia la izquierda
goto ActivaSalida
; encia a salida de puerto
movl ovlw b'01100110'
; Un moto otor hacia la derecha y otro en direccion opuesta
goto ActivaSalida
; envia sa s alida de puerto
Izquierda
DI
MediaVelocidad 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' b'10100110' movwf PORTB call Retardo_5ms decfsz Ciclos_ON,F goto motor_ON+2
;Enciende los motores ; Llama a un retardo de 5ms ;Si es 0 salta a la siguiente instruccion ; envia a motor encendido +2
motor_OFF clrf PORTB call Retardo_5ms decf decfsz sz Cicl Ciclos os_O _OFF FF,F ,F goto motor_OFF+1 goto ActivaSalida
;pone a ceros el puerto b ;llama a un retardo de 5ms ;ver ;verif ific icaa si cicl ciclos os off off es 0 si es asi asi salt saltaa a la sigu siguie ient ntee inst instru rucc ccio ionn ;envia a motor off +1 ; envia a salida
movlw b'10100110'
;Enciende los dos motores a maxima velocidad
goto ActivaSalida
; Envia a Salida del puerto
AltaVelocidad
; Salida de Puerto ************************* ************************************** ************************* ****************** ****** ActivaSalida movwf PORTB return
;Manda a la salida del puerto B ;termina subrutina Crea un bucle cerrado e infinito
INCLUDE INCLUDE INCLUDE END END
; Incluye libreria de conexion
; Fin Fin del del Prog rogram rama
;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******************** Datos********************************* ************************** ************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A; Procesador Utilizado INCLUDE ; Definicion algunos Operados utilizados #DEF #D EFIN INE E Ent Entra rada daMa Marc rcha ha POR PORTA,0
;De Defi finne el el pu puerto erto y su su ut utiliz ilizac ació iónn (en (ence cend ndiido o ap apagad agado) o)
#DEF #D EFIN INE E Entr Entrad adaS aSen enti tido do POR PORTA,1 A,1
;Def ;Defin inee el puer puerto to y su util utiliz izac ació iónn (gir (giroo dere derech chaa o izqu izquie ierd rda) a)
;Zona de Codigos ************************************* ******************************************* ****** ORG 0 Inicio 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 STA STATUS,RP0 Principal clrw btfsc EntradaMarcha goto ActivaSalida
;Con esta combinacion se detiene el motor ;Comprueba el estado del del interruptor de funcionamiento funcionamiento
movlw b'00000110'
;Gira en un sentido
btfsc EntradaSentido 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 borde derecho: sensor sensor izquierdo sobre sobre negro y derecho derecho sobre ; blanco sigue en hacia delante. ; - Si el sensor de la derecha detecta detecta línea negra gira hacia la derecha buscando el borde, ; independientemente independientemente de como esté el sensor de la izquierda. ; - Si el microbot tiene los dos sensores fuera de 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 transistor saturado --> entrada al inversor inversor "0" --> RAx = "1". ; (No está encima de la línea línea negra, se ha salido de de la pista) ; - Color Negro Negro --> transistor transistor en corte --> entrada al inversor "1" --> RAx = "0". ; (Está encima de de la línea negra, está está dentro dentro de la pista) pista) ; ; ZONA DE DATOS ********************************************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE #DEFINE SensorDerecha #DEFINE SensorIzquierda
PORTA,0 PORTA,1
; Sensor óptico Derecho. ; Sensor óptico Izquierdo.
; ZONA DE CÓDIGOS ************************** ************************************** ************************* ************************** ***************** **** ORG
0
bsf bsf
STA STATUS,RP0 SensorDerecha
Inicio ; Selecciona Banco 1 de registros. registros. ; Estas líneas se configuran configuran como entrada.
bsf clrf bcf Principal movlw btfss goto movlw btfss movlw ActivaSalida movw movwff goto
SensorIzquierda PORTB STA STATUS,RP0 b'00001110' SensorDerecha ActivaSalida b'00000111' SensorIzquierda b'00001111'
; Las líneas del Puerto B se configuran como salidas. ; Selecciona Banco 0 de registros. registros. ; Para girar a la derecha. ; ¿Ha salido por la derecha?, derecha?, ¿detecta blanco? ; No, el el detector derecho está encima de la línea ; negra, gira a la derecha. ; Para girar a la izquierda. ; ¿Ha salido también también por la izquierda? ; No, está en el borde derecho. Sigue recto.
POR PORTB 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 sensor el microbot gira gira siempre a la derecha. ; - Si los dos sensores sensores detectan detectan portadora portadora el microbot microbot avanza avanza hacia adelante. adelante. ; - Si se detecta detecta portadora portadora en el sensor sensor de la izquierda izquierda y no en el de la derecha derecha el ; micro microbo bott gir giraa a la izqu izquie ierd rdaa has hasta ta qu quee los los do doss sens sensor ores es dete detect cten en la bali baliza za.. ; - Si se detect detectaa port portado adora ra en el el sens sensor or de la derech derechaa y no en el de la izqui izquierd erdaa el el ; micr microb obot ot gira ira a la la dder erec echa ha hast hastaa qque ue los los dos dos sens sensoores res det detec ecte tenn la la bbal aliz iza. a. ; ; ZONA DE DATOS ********************************************************************* __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE #DEFINE SensorDerecha #DEFINE SensorIzquierda
PORTA,2 PORTA,3
; Sensor Derecho. ; Sensor Izquierdo.
; ZONA DE CÓDIGOS ************************** ************************************** ************************* ************************** ****************** ***** ORG
0
bsf bsf bsf clrf
STA STATUS,RP0 SensorDerecha SensorIzquierda PORTB
Inicio ; Selecciona Banco 1 de registros. registros. ; Estas líneas se configuran configuran como entrada. ; Las líneas del Puerto B se configuran como salidas.
bcf Principal btfsc goto btfsc goto movlw goto Ver_Izquierda btfsc goto GiroIzquierda movlw goto GiroDerecha movlw ActivaSalida movw movwff goto END
STA STATUS,RP0
; Selecciona Banco 0 de registros. registros.
SensorDerecha Ver_Izquierda SensorIzquierda GiroDerecha b'00001111' ActivaSalida
; ¿Ha detectado señal por por la derecha? ; No recibe por la derecha. ; Sí, ¿también señal por la izquierda? izquierda? ; No, solo señal por la derecha, gira a derecha. ; Sí, re recibe po por lo los do dos se sensores. Si Sigue re recto.
SensorIzquierda GiroDerecha
; Por la derecha no recibe. ¿Y por la izquierda? ; Tampoco, ni ni por la la ddeerecha ni por la la izquierda.
b'00000111' ActivaSalida
; Gira a la izquierda.
b' b'00001110'
; Gira a la derecha.
POR PORTB Principal