Como crear un tipo de IF y AND con el PIC16F84?

Muchas gracias por aclarar varias de mis dudas, estoy haciendo ya mis pruebas, una duda mas, por ejemplo hay algo que parezca un if y un and??

algo asi como por ejemplo que si la entrada (ra0,ra1,ra2,ra3) es 1101 prende los puertos rb1,rb2,rb3, que si (ra0,ra1,ra2,ra3) es 1000 prende los puertos rb4,rb5

en C seria algo como

if(ra0==1&&ra1==1&&ra2==0&&ra3==1){
rb1=1;
rb2=1;
rb3=1;
}

if(ra0==1&&ra1==0&&ra2==0&&ra3==0){
rb4=1;
rb5=1;
}


por ejemplo vi que una instruccion que parece un tipo de IF

BTFSC PORTA,1 ;Comprueba la entrada (RA1), si es "0"

pero ahi se le podria poner un tipo de AND???

Estoy asi como que ultraverde en la programacion a pics :(

Gracias por sus comentarios :D
 
una de la varias formas seria :

Código:
movf    PORTA,w
andlw   h'0F'

sublw    b'00001101'  ; aqui  resta de w primer valor : k - w -> w
btfss    STATUS, Z ; compara con cero
goto siguiente
 movlw b'00001110'  ; si es igual a 1101 enciende 1110 en PtoB
 movwf PORTB

siguiente:  
      ; aqui va lo demas
 
:D hola.
otra forma de hacer lo que nesesitas en:

list p=12f675
#include <p16f84a.inc>
;*********************************************
;programa ejemplo
;*********************************************
;si la entrada (ra0,ra1,ra2,ra3) es 1101 prende los puertos rb1,rb2,rb3
;que si (ra0,ra1,ra2,ra3) es 1000 prende los puertos rb4,rb5
;*********************************************
;Las enterupciones estan desabilitadas
;*********************************************

org 0000h

;******************************************
; inicializando los puertos
;******************************************

bsf STATUS,5 ;banck_1
movlw 0ff
movwf TRISA ;port_a como entarda de datos
movlw 00
movwf TRISB ;port_b como salida de datos
bcf STATUS,5 ;banck_0
;*******************************************
inicio movfw PORTA ;registro w = (valor de prta)
xorlw 0B ;1011b (ra3,ra2,ra1,ra0)= 0Bh
;se hace un or exclusivo con el valor que se quiere
;comparar, si el valor de PORTA es igual a 1011b (0Bh)
;el resultado de esta operacion logica sera 0
;luego testeamos en en registro STATUZ el bit Z
btfsc STATUS,Z ;si Z es cero, salta una instruccion
goto salida_1 ;salta a la etiqueta salida_1
movfw PORTA ;registro w = (valor de prta)
xorlw 01 ;0001b (ra3,ra2,ra1,ra0)= 01h
btfsc STATUS,Z ;si Z es cero, salta una instruccion
goto salida_2 ;salta a la etiqueta salida_2
movlw 00 ;w=00h
movwf PORTB ;borra el puerto
goto inicio ;salta a la etiqueta inicio

salida_2 movlw 30 ;110000b (rb5,rb4,rb3,rb2,rb1,rb0)= 30h
movwf PORTB ;PORTB=1110b (rb3,rb2,rb1,rb0)
goto inicio


salida_1 movlw 0E ;1110b (rb3,rb2,rb1,rb0)= 0Eh
movwf PORTB ;PORTB=1110b (rb3,rb2,rb1,rb0)
goto inicio
end
;*********************************************
Si tienes el simulador PROTEUS, estonces puedes bafar este archibo para verlo funcionar.
 

Adjuntos

  • ej_930.rar
    25.1 KB · Visitas: 26
Atrás
Arriba