Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Myslide - Es Ejemplos de Lenguaje Ensamblador para Pic 16f84
Myslide - Es Ejemplos de Lenguaje Ensamblador para Pic 16f84
16f84.
;Programa entrenador04
;Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y los ceros. Por ejemplo si por el Puerto A se
introduce xxx11001 por el Puerto B deber aparecer 00000110
;***********************************************************
;Zona de Datos**********************************************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
;Zona de Codigos *******************************************
INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos
;Configuracion de puertos***********************************
movlw b'11100000';LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS
movwf TRISB; se mueve al puerto B
movlw b'00011111'; Las lineas del puerto A configuradas como entrada
movwf TRISA; Mueve w al registro f
; Cero si es salida y uno si es entrada
Rutina bcf STATUS,RP0; Sale del modo de configuracion de los puertos
movf PORTA,W; carga el registro del puerto A en (W)
COMF PORTA,W ; Esta instruccin complementa un registro, es decir, los unos por ceros y los ceros por
unos
movwf PORTB; El contenido de W se deposita en el puerto de salida
goto Rutina; Crea un bucle cerrado e infinito
END; Fin del programa
;Programa entrenador03
;Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2, es necesario poner 5 switches en todos los
pines del puerto A
;Zona de Datos**********************************************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
;Zona de Codigos *******************************************
INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos
;Configuracion de puertos***********************************
clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS
movlw b'00011111'; Las lineas del puerto A configuradas como entrada
movwf TRISA; Mueve w al registro f
; Cero si es salida y uno si es entrada
Rutina bcf STATUS,RP0; Sale del modo de configuracion de los puertos
; Inicio del programa de Bucle*********************************************
movf PORTA,W; carga el registro del puerto A en (W)
addwf PORTA,W; SUMA EL CONTENIDO DEL PUERTO A CON W
movwf PORTB; El contenido de W se deposita en el puerto de salida
goto Rutina; Crea un bucle cerrado e infinito
END; Fin del programa.
;Programa entrenador02
;El Puerto B, que acta como salida, es controlado por el bit 0 del Puerto A, que acta como entrada. De manera
tal, que:
;Si RA0=1, se encienden todos los LEDs de salida
;Si RA0=0, se encienden slo los LEDs del nibble alto
;***********************************************************
;Zona de Datos**********************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
;Zona de Codigos *******************************************
INICIO bsf STATUS,RP0; Entra al modo de configuracion de los puertos
;Configuracion de puertos***********************************
clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS
movlw b'00000001'; Las lineas del puerto A configuradas como entrada
movwf TRISA; Mueve w al registro f
; Cero si es salida y uno si es entrada
bcf STATUS,RP0; Sale del modo de configuracion de los puertos
; Inicio del programa de Bucle*********************************************
Principal
BTFSC PORTA, 0; Instruccion para elejir una opcion dependiendo del bit 0 en el puerto A
GOTO Principal1; Envia a los nibbles de arriba
GOTO Principal2; Envia a todos los nibbles
Principal1
;Programa tiempos03.
;Los puertos A y B se usaran como salidas,
;debe de haber conectados 13 leds,
;inicialmente se deben encender los leds conectados a RA0 y a RB7,
;despus de medio segundo deben de apagarse y encenderse los leds conectados a RA1 y RB6,
;medio segundo despus, se apagan y se encienden los leds conectados a RA2 y RB5,
;medio segundo mas tarde, se apagan y encienden los leds de RA3 y RB4, el proceso sigue as,
;para RA4 y RB3, RB1 y RB2, cuando se apaguen RB1 y RB2 debe pasar un segundo,
;y deben encenderse todos los leds por 2 segundos, apagarse por 2 segundos,
;encenderse por un segundo, apagarse un segundo, encenderse por medio segundo,
;apagarse, esperar un segundo y volver a repetir desde el principio.
;***********************************************************
;Zona de Datos**********************************************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A; Procesador Utilizado.
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados.
CBLOCK 0x0C; Definimos algunas constantes y etiqutas
ENDC
; Salimos del modo de definicon.
SEC1 equ
b'00000000';Cada una de estas etiquetas
SEC2 equ
b'10000000';tiene asignado un movimento
SEC3 equ
b'01000000';de la secuancia deseada.
SEC4 equ
b'00100000';Se inicia todos los puertos a cero
SEC5 equ
b'00010000';para que la secuencia no se desfase.
SEC6 equ
b'00001000'
SEC7 equ
b'00000110'
SEC8 equ
b'00000000'
SEC9 equ b'00000001'
SEC10 equ
b'00000010'
SEC11 equ
b'00000100'
SEC12 equ
b'00001000'
SEC13 equ
b'00010000'
SEC14 equ
b'00000000'
SEC15 equ b'00000000'
SEC16 equ b'11111111'
;Zona de Codigos *******************************************
ORG 0;Indica en que parte de la memoria incia el programa.
BSF STATUS,5 ; activa la pagina 1
MOVLW B'00000' ; carga 00000 en W
MOVWF TRISA ; puerto A se configura como salida
MOVLW B'00000000' ; carga 00000000 en W
MOVWF TRISB ; puerto B se configura como salida
BCF STATUS,5 ; volvemos a la pagina 0
CLRF PORTA; ponemos a cero el puerto A
CLRF PORTB ; ponemos a cero el puerto B
Inicio
;
LeeTabla
addwf
TablaInicio
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
PCL,F
b'00000000'
b'00000001'
b'00000001'
b'00000010'
b'00000011'
b'00000101'
b'00001000'
b'00001101'
b'00010101'
b'00100010'
b'00110111'
b'01011001'
b'10010000'
b'11101001'
TablaFin
INCLUDE <RETARDOS.INC>;
END.
;Programa Contador.
;Se pone el 0 en binario, y en incrementos de 50 milisegundos, muestra sucesivamente
;el 1,2,3,4255 en binario, una vez que llegue al 255 que son los 8 leds encendidos,
;comienza la cuenta regresiva 254,253,252,0 y de ah comenzar nuevamente el
;programa.
;Zona de Datos**********************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
;Zona de Codigos *******************************************
ORG 0
bsf STATUS,RP0; Entra al modo de configuracion de los puertos
;Configuracion de puertos***********************************
clrf TRISB; LAS LINEAS DEL PUERTO B CONFIGURADAS COMO SALIDAS
movlw b'00011111'; Las lineas del puerto A configuradas como entrada
movwf TRISA; Mueve w al registro f
incfsz Numero,f; incrementa una unidad a numero, si es mayor que 255 salta a la siguiente intruccion
goto Bucle
goto Bucle2
END
;Programa Selector.
;Compara el numero definido '21', con el numero asignado con las entradas
;del puerto A.
;************************************************************
;Zona de Datos**********************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A; Procesador Utilizado.
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados.
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
movwf GuardaDato
; Lo envia a GuardaDato
call LCD_Caracter
;bucle infinito
END
INCLUDE <RS232.INC>
; Incluye libreria de conexion
INCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCD
INCLUDE <RETARDOS.INC>
; Incluye la libreria de retardos
; Fin del Programa
;Programa Mundo
;Guarda un mensaje en el PIC, por ejemplo:
;Hola Mundo
;Mi nombre es:Erick. Y lo despliega en el monitor de la computadora repetidamente a intervalos de 1 segundo.
;************************************************************
;Zona de Datos**********************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
;Zona de Codigos *******************************************
CBLOCK 0X0C
ENDC
RetornoCarro EQU .13
CambioLinea EQU .10
Goto Principal
; Mueve Mensaje a W
call RS232_Mensaje
call Retardo_1s
; Llama a retardo de un 1s
; Envia a Principal
addwf PCL,F
; Suma PCL a F
Mensaje0
DT RetornoCarro
DT "Hola Mundo"
END
INCLUDE <RS232.INC>
; Incluye libreria de conexion
INCLUDE <RS232MEN.INC> ;Incluye libreria de conexion
INCLUDE <LCD_4BIT.INC> ; Incluye libreria de LCD
INCLUDE <RETARDOS.INC>
; Incluye la libreria de retardos
; Fin del Programa
;Programa Leds.
;Hacer un programa que desde la computadora mande una seal para prender 8 leds y
;otra para apagarlos. Con 1 que se enciendan y con 0 que se apaguen
;*********************************************************************************
;Zona de Datos********************************************************************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
CBLOCK 0x0C
TeclaPulsada
MensajeApuntado
ENDC
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
Salida1
Salida2
Salida3
Salida4
Salida5
Salida6
Salida7
Salida8
TECLA1_ON
EQU '1'
; Cdigo de las teclas utilizadas.
TECLA1_OFF EQU '0'
movf TeclaPulsada,W
xorlw TECLA1_OFF
btfsc STATUS,Z
goto R1_OFF
goto
Fin
R1_ON
bsf
bsf
bsf
bsf
Salida1
Salida2
Salida3
Salida4
bsf
Salida5
bsf
Salida6
bsf
Salida7
bsf
Salida8
goto
Fin
R1_OFF
bcf
Salida1
bcf
Salida2
bcf
Salida3
bcf
Salida4
bcf
Salida5
bcf
Salida6
bcf
Salida7
bcf
Salida8
goto
Fin
Parado
bcf
bcf
bcf
bcf
Salida1
Salida2
Salida3
Salida4
bcf
Salida5
bcf
Salida6
bcf
Salida7
bcf
Salida8
Fin
return
INCLUDE <RS232.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
;Librerias utilizadas.
END
;Programa Encendido.
;Hacer un programa que desde la computadora mande un numero entre 1 y 8
;de acuerdo con esto se enciendan 1 led, 2 led y asi hasta 8
;cualquier otra tecla no debe generar algun efecto.
;*********************************************************************************
;Zona de Datos********************************************************************
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A; Procesador Utilizado
INCLUDE <P16F84A.INC>; Definicion algunos Operados utilizados
CBLOCK 0x0C
TeclaPulsada
MensajeApuntado
ENDC
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
Salida1
Salida2
Salida3
Salida4
Salida5
Salida6
Salida7
Salida8
PORTB,7
PORTB,6
PORTB,5
PORTB,4
PORTB,3
PORTB,2
PORTB,1
PORTB,0
UnLed
EQU '1'
; Cdigo de las teclas utilizadas.
DosLed
EQU '2'
TresLed
EQU '3'
CuatroLed
EQU '4'
CincoLed
EQU '5'
SeisLed
EQU '6'
SieteLed
EQU '7'
OchoLed
EQU '8'
;Zona de Codigos *****************************************************************
ORG 0
; Inicio del programa de Bucle*********************************************
Inicio
call
LCD_Inicializa
; Inicializa el display LCD
RS232_Inicializa
; Inicializa RS232
STATUS,RP0
; Configura como salidas las 8 lneas del
Salida1
; del Puerto B
Salida2
Salida3
Salida4
bcf
Salida5
bcf
Salida6
bcf
Salida7
bcf
Salida8
bcf
STATUS,RP0
;Sale de la configuracion de puertos
call
Parado
;En un pricipio los leds deben estar apagados
Principal
; apagados.
call RS232_LeeDato
; Espera a recibir un carcter.
call TesteaTeclado
; Verifica caracter recibido y ejecuta accion
goto Principal
; Loop Infinito
;****************************************************************************
;*
Testea Teclado
*
;*
*
;* Verifica caracer recibido y decide que accion ejecutar
*
;****************************************************************************
TesteaTeclado
movwf TeclaPulsada
; Guarda el contenido de la tecla pulsada.
xorlw UnLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L1_ON
; S, se desea movimiento hacia adelante.
call
bsf
bcf
bcf
bcf
bcf
movf
TeclaPulsada,W
xorlw DosLed
btfsc STATUS,Z
goto L2_ON
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw TresLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L3_ON
; S, se desea movimiento hacia adelante.
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw CuatroLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L4_ON
; S, se desea movimiento hacia adelante.
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw CincoLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L5_ON
; S, se desea movimiento hacia adelante.
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw SeisLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L6_ON
; S, se desea movimiento hacia adelante.
movf
xorlw
btfsc
goto
TeclaPulsada,W
SieteLed
STATUS,Z
L7_ON
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw OchoLed
; Es la tecla del movimiento hacia adelante?
btfsc STATUS,Z
;
goto L8_ON
; S, se desea movimiento hacia adelante.
;
goto Lomismo
;tecla no valida
L8_ON
que se ejecute
bsf
Salida1
bsf
Salida2
bsf
Salida3
bsf
Salida4
bsf
Salida5
bsf
Salida6
bsf
Salida7
bsf
Salida8
goto
Fin
L1_ON
bsf
bcf
bcf
bcf
Salida4
bcf
Salida5
bcf
Salida6
bcf
Salida7
bcf
Salida8
goto
Fin
L2_ON
bsf
bsf
bcf
bcf
L3_ON
bsf
bsf
bsf
bcf
L4_ON
bsf
bsf
bsf
bsf
L5_ON
bsf
bsf
bsf
bsf
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
L6_ON
bsf
bsf
bsf
bsf
Salida2
Salida3
Salida4
bsf
Salida5
bsf
Salida6
bcf
Salida7
bcf
Salida8
goto
Fin
L7_ON
bsf
bsf
bsf
bsf
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
Fin
;Regresa
return
INCLUDE <RS232.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
END
;Programa Motores.
;Dos motores estn conectados al pic mediante el driver L293B (usar en la simulacin el L293D)
;Se usan 4 interruptores, un interruptor para determinar el sentido de giro de cada uno de los motores.
;Las combinaciones de los otros dos interruptores, deben seguir la siguiente tabla.
;Interruptor 1
Interruptor 2
Motor 1
Motor 2
;1
1
Encendido
Encendido
;0
1
Encendido
Apagado
;1
0
Apagado
Encendido
;0
0
Apagado
Apagado
;
******************************************************************************************
************
;Zona
de
datos**************************************************************************************
***
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
;PIC usado
INCLUDE <P16F84A.INC>
;Paqueteria usada.
#DEFINE SalidaSentido
PORTB,0
; Definimos el valor de cada uno de los bits
#DEFINE
SalidaSentido2
PORTB,7
#DEFINE SalidaMarcha
PORTB,1
#DEFINE
SalidaMarcha2
PORTB,6
#DEFINE EntradaMarcha
PORTA,0
#DEFINE
EntradaMarcha2
PORTA,4
#DEFINE EntradaSentido
PORTA,1
#DEFINE
EntradaSentido2
PORTA,3
; ZONA DE CDIGOS *********************************************************************
ORG
Inicio
bsf
bsf
bsf
bsf
bsf
bcf
bcf
bcf
bcf
bcf
Principal
btfsc
goto
bcf
Principal2
btfsc
goto
bcf
Principal3
btfsc
goto
bcf
Principal4
btfsc
goto
bcf
;goto
Gira
bsf
goto
STATUS,RP0
EntradaMarcha
EntradaSentido
EntradaMarcha2
EntradaSentido2
SalidaMarcha
SalidaSentido
SalidaMarcha2
SalidaSentido2
STATUS,RP0
EntradaMarcha
Gira
SalidaMarcha
EntradaMarcha2
Gira2
SalidaMarcha2
EntradaSentido
Gira3
SalidaSentido
EntradaSentido2
Gira4
SalidaSentido2
Fin3
SalidaMarcha
Fin
Gira2
bsf
goto
SalidaMarcha2
Fin2
bsf
goto
SalidaSentido
Fin3
bsf
goto
SalidaSentido2
Fin4
Gira3
Gira4
Fin
goto
Fin2
goto
Fin3
goto
Fin4
goto
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
;************************************************************
;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***********************************
EQU '1'
LCD_Inicializa
RS232_Inicializa ; Inicia la comunicacin con el puerto
Principal
call RS232_LeeDato
call TesteaTeclado
goto Principal
;****************************************************************************
;*
Teclado
*
;*
*
;* Verifica caracer recibido y decide que accion ejecutar
*
;****************************************************************************
TesteaTeclado
movwf TeclaPulsada
xorlw EnciendeTodos
btfsc STATUS,Z
;
goto TodosEncendidos
movf TeclaPulsada,W
xorlw ApagaTodos
btfsc STATUS,Z
goto TodosApagados
;
; S
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw TodosDerecha
; Es la tecla de todos derecha?
btfsc STATUS,Z
;
goto Derecha
; S
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw TodosIzquierda
; Es la tecla de todos izquierda?
btfsc STATUS,Z
;
goto Izquierda
; S
movf TeclaPulsada,W
xorlw DerechaIzquierda
btfsc STATUS,Z
;
goto DI
movf TeclaPulsada,W
; Guarda el contenido de la tecla pulsada.
xorlw MitadV
; Es la tecla de mitad de velocidad?
btfsc STATUS,Z
;
goto MediaVelocidad
; S
movf
xorlw
btfsc
goto
TeclaPulsada,W
MaximaV
STATUS,Z
AltaVelocidad
TodosEncendidos
movlw b'10100110'
goto ActivaSalida
TodosApagados
clrf PORTB
goto ActivaSalida
Derecha
movlw b'10100110'
goto ActivaSalida
movlw b'01100101'
goto ActivaSalida
movlw b'01100110'
goto ActivaSalida
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'
movwf PORTB
call Retardo_5ms
decfsz Ciclos_ON,F
goto motor_ON+2
motor_OFF
clrf PORTB
call Retardo_5ms
decfsz Ciclos_OFF,F
goto motor_OFF+1
goto ActivaSalida
movlw b'10100110'
goto ActivaSalida
AltaVelocidad
INCLUDE <RS232.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
END
;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
bcf STATUS,RP0
Principal
clrw
btfsc EntradaMarcha
goto ActivaSalida
movlw b'00000110'
;Gira en un sentido
btfsc EntradaSentido
movlw b'00000101'
ActivaSalida
movwf PORTB
goto Principal
PORTA,0
PORTA,1
bsf
bsf
STATUS,RP0
SensorDerecha
Inicio
; Selecciona Banco 1 de registros.
; Estas lneas se configuran como entrada.
bsf
clrf
bcf
Principal
movlw
btfss
goto
SensorIzquierda
PORTB
STATUS,RP0
movlw
btfss
movlw
ActivaSalida
movwf
goto
b'00000111'
SensorIzquierda
b'00001111'
b'00001110'
SensorDerecha
ActivaSalida
PORTB
Principal
END
;Robotica y control.
;Programa:robot baliza
; Programa de control para Microbot TRASTO el cual detecta una baliza que genera
; una seal infrarroja modulada a 38 kHz.
;
; Los sensores pticos SFH5110 estn situados en la parte frontal del microbot:
; El sensor de la derecha est conectado a RA2 y el sensor de la izquierda a RA3.
;
; Cuando el sensor SFH5110 detecta luz infrarroja modulada, proporciona un nivel bajo en su
; lnea de salida.
;
; El programa adopta la estrategia siguiente:
; - Si no se detecta la baliza por ningn sensor el microbot gira siempre a la derecha.
; - Si los dos sensores detectan portadora el microbot avanza hacia adelante.
; - Si se detecta portadora en el sensor de la izquierda y no en el de la derecha el
;
microbot gira a la izquierda hasta que los dos sensores detecten la baliza.
; - Si se detecta portadora en el sensor de la derecha y no en el de la izquierda el
;
microbot gira a la derecha hasta que los dos sensores detecten la baliza.
;
; ZONA DE DATOS *********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
#DEFINE SensorDerecha
#DEFINE SensorIzquierda
PORTA,2
PORTA,3
; Sensor Derecho.
; Sensor Izquierdo.
bsf
bsf
bsf
clrf
STATUS,RP0
SensorDerecha
SensorIzquierda
PORTB
Inicio
; Selecciona Banco 1 de registros.
; Estas lneas se configuran como entrada.
; Las lneas 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
movwf
goto
END
STATUS,RP0
SensorDerecha
Ver_Izquierda
SensorIzquierda
GiroDerecha
b'00001111'
ActivaSalida
SensorIzquierda
GiroDerecha
b'00000111'
ActivaSalida
; Gira a la izquierda.
b'00001110'
; Gira a la derecha.
PORTB
Principal