# Problema con TRIS en simulación Proteus



## jmth (Jun 16, 2013)

Hace ya tiempo que estoy intentando meterme en la programación de PICs en C. Hoy por fin he conseguido compilar, porque tenía problemas con las librerías y eso... Y simulando en el Proteus me salta un error que dice "TRISB instruction is deprecated for PIC1684", y el tiempo sigue corriendo pero no hace nada.

He investigado sobre ello y se debe a que en algunos PIC la función TRISX no funciona correctamente (en la práctica), y por ello sale como error en el simulador. Sin embargo, supuestamente el 16f84A no tiene éste problema.

Estoy utilizando el CCS C compiler y hay gente que lo ha solucionado entrando en tools, device editor, seleccionando el uC, other features y cambiando la pestaña de TRIS a TRUE. Ya lo he hecho pero me sigue dando el mismo error.

Por si puede servir adjunto el código del programa. Es el típico "enciende y apaga el puerto B". Da igual si tiene algún error a parte del dicho, la cuestión es saltar ése primer obstáculo.

#include <16f84a.h>
#use delay(clock=4000000)
#byte port_b=0x06
#fuses NOWDT

int contador;

void main(){
set_tris_b(0xff);
port_b=0;

while(true){
contador=0xff;
port_b=contador;
delay_ms(1500);
contador=0;
port_b=contador;
delay_ms(1500);
}
}

Éste post es tanto por aquellos que buscan la solución de éste error como por preguntar si alguien más sabe cómo solucionar mi caso particular. Gracias otra vez que ya es la segunda vez que pregunto hoy


----------



## Eduardo (Jun 16, 2013)

jmth dijo:


> ...
> Estoy utilizando el CCS C compiler y hay gente que lo ha solucionado entrando en tools, device editor, seleccionando el uC, other features y *cambiando la pestaña de TRIS a false*. Ya lo he hecho pero me sigue dando el mismo error.


 ¿Como a FALSE?  Si querés que acepte TRIS tiene que ser TRUE.


----------



## jmth (Jun 16, 2013)

Eduardo dijo:


> ¿Como a FALSE?  Si querés que acepte TRIS tiene que ser TRUE.



Cierto, me he hecho un lío, ya lo he cambiado. De todas formas no funciona ni en un modo ni en otro.


----------



## Eduardo (Jun 16, 2013)

jmth dijo:


> Cierto, me he hecho un lío, ya lo he cambiado. De todas formas no funciona ni en un modo ni en otro.



Mientras declares el puerto B como 8 entradas (set_tris_b(*0xff*) ; ) difícilmente puedas puedas sacar algo por ahí.


----------



## D@rkbytes (Jun 16, 2013)

jmth dijo:


> Hace ya tiempo que estoy intentando meterme en la  programación de PICs en C. Hoy por fin he conseguido compilar, porque  tenía problemas con las librerías y eso... Y simulando en el Proteus me  salta un error que dice "TRISB instruction is deprecated for PIC1684", y  el tiempo sigue corriendo pero no hace nada.
> 
> He investigado sobre ello y se debe a que en algunos PIC la función  TRISX no funciona correctamente (en la práctica), y por ello sale como  error en el simulador. Sin embargo, supuestamente el 16f84A no tiene  éste problema.
> 
> ...


Para evitar que aparezca esa advertencia en proteus usando el PIC16F84/A,
en vez de utilizar la instrucción set_tris_x(); utiliza las siguientes declaraciones en la cabecera del programa..
#byte TRISA = getenv("SFR:TRISA")
#byte TRISB = getenv("SFR:TRISB")

Y ahora utiliza TRISA y TRISB en el main para configurar los puertos.
Por ejemplo...
TRISB = 0;

Nota que en tu código estás configurando el puerto B como entradas y quieres usarlo cómo salidas.

Saludos.


----------



## jmth (Jun 16, 2013)

Genial, funciona! Era la respuesta que necesitaba, gracias a todos otra vez. Lo del =0xff es lo que pasa cuando has aprendido en casa y llevas 3 meses sin programar.


----------

