Buenas! soy nuevo en este mundo, la verdad es que no tengo ni zorra y tengo una duda que me esta volviendo loco y seguramente sera la mayor chorrada del mundo, pero bueno os la explico.
Tengo 4 entradas y 4 salidas en el puerto B y una entrada y otra salida en el puerto A para la comunicacion por puerto serie. De RB0-RB3 son entradas y el resto las salidas. El programa lo que tiene que hacer es detecar un cambio de interruptores de entrada y al detectarlo enviar los estados de esas interruptores por puerto serie. El ordenador las interpretara y devolvera una secuencia de 8 bits que sera la instruccion de salida. Esta información despues la quiero poner en el puerto B. El problema que tengo es que simulando el codigo en mplab funciona bien pero al probarlo no funciona el detector de cambio de entradas y siempre esta enviando datos no se queda en el bucle. El codigo es el sigiente:
Por ejemplo, si tengo las 4 entradas a cero se queda en en bucle. RB0 se pone a uno, sale del bucle y envia 00000001. El pc interpreta y devuelve por ejemplo 10110000. Estos datos se guardan en W y los muevo al puerto B ya que los primeros 4 bit son d salida.
Tengo 4 entradas y 4 salidas en el puerto B y una entrada y otra salida en el puerto A para la comunicacion por puerto serie. De RB0-RB3 son entradas y el resto las salidas. El programa lo que tiene que hacer es detecar un cambio de interruptores de entrada y al detectarlo enviar los estados de esas interruptores por puerto serie. El ordenador las interpretara y devolvera una secuencia de 8 bits que sera la instruccion de salida. Esta información despues la quiero poner en el puerto B. El problema que tengo es que simulando el codigo en mplab funciona bien pero al probarlo no funciona el detector de cambio de entradas y siempre esta enviando datos no se queda en el bucle. El codigo es el sigiente:
Código:
main:
bsf STATUS, RP0
bcf tx_port, tx_pin ; Pin T como salida
movlw b'00001111'
movwf TRISB
bcf STATUS, RP0
clrf AUX
bsf PORTA,tx_pin ;a 1 para la salida de puerto serie
loop: movf PORTB,W ;quiero esperar asta que cambien
subwf AUX,W ;las entradas y cuando cambien
btfsc STATUS,2 ;acer el salto para enviarlas por puerto serie
goto loop
movf PORTB,W
call send_b ;enviamos los 8bits de W
call recv_b ;espera hasta recivir un dato y lo guarda en W
movwf PORTB
movf PORTB,0
movwf AUX
goto loop
end
Por ejemplo, si tengo las 4 entradas a cero se queda en en bucle. RB0 se pone a uno, sale del bucle y envia 00000001. El pc interpreta y devuelve por ejemplo 10110000. Estos datos se guardan en W y los muevo al puerto B ya que los primeros 4 bit son d salida.