Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: al9 en 11 de Agosto de 2012, 08:58:43
Título: Acceso puertos directamente CCS en pic 18f4550
Publicado por: al9 en 11 de Agosto de 2012, 08:58:43
Hola. Estoy programando con el CCS pero quiero acceder a los registros de los puertos diréctamente, por velocidad y por que no encuentro manera de cambiar el registro TRIS bit a bit. He probado con assembler pero tengo un poco de lio con los modos de direccionamiento. También he probado asi:
Código: CSS
#byte PORTC = 0x0F82
#byte TRISC = 0x0F94
#bit PORT_1W1 = PORTC.1
#bit TRIS_1W1 = TRISC.1
void outputlow1W(){
PORT_1W1=0;
TRIS_1W1=0;
}
Pero esto causa problemas en la estabilidad del programa :huh:
Podeis ayudarme? Gracias.
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: AngelGris en 11 de Agosto de 2012, 10:10:21
Usando "set_tris" con el valor adecuado debería funcionar. ¿Estás usando la sentencia #use fast_io? ya que si no la usas, CCS configurará el tris según lo crea necesario.
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: al9 en 11 de Agosto de 2012, 12:43:07
Si pero set_tris no actua sobre un bit individual..
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: AngelGris en 11 de Agosto de 2012, 12:54:48
Es verdad, pero se podría buscar la forma combinando operaciones sobre una variable y luego llevar el valor de la variable al registro TRIS.
¿No tenía CCS las funciones set_bit y clear_bit? De existir, tal vez las puedas usar con tus definiciones.
Por ejemplo para setear el bit 1 y dejar el resto como está podrías hacer lo siguiente...
Código: C
variable = variable |0b00000010;
set_tris_b(variable);
Para borrar dicho bit y dejar el resto como está se puede recurrir a...
Código: C
variable = variable &0b11111101;
set_tris_b (variable);
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: pajaro en 11 de Agosto de 2012, 15:00:47
Hola
como dice AngelGris puedes usar las funciones de ccs bit_clear(var,bit), bit_set(var,bit), bit_text(var,bit); segun la version se van incrementando mas y mas, y tambine los bug en ellas. :mrgreen:
bit_clear(PORTA,1);
mira estos enlace para el manual de referencia de ccs:
http://www.ccsinfo.com/content.php?page=compilers
http://www.ccsinfo.com/downloads.php
de todas formas si defines :
PORTA
no recuerdo si era con #define, o #byte PORTA 0xzzzz --> este numero "zzzz" lo puedes encontrar en el mapeo del data del pic
despues puedes hacer PORTA.1=valor;
tambien lo puedes redefinir, no recuerdo si era con #define, o #bit
LED0 porta.1
Espero haber sido de ayuda.
Un cordial saludo.
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: al9 en 11 de Agosto de 2012, 18:27:55
Si Pajaro, eso es lo que hago.. la duda esta en si haciéndolo asi tengo que cambiar algun banco de registros como hace el assembler. Por cierto, cómo e haría en assembler?
Título: Re: Acceso puertos directamente CCS en pic 18f4550
Publicado por: AngelGris en 11 de Agosto de 2012, 18:38:33
Cuando programas en C, no tienes que estar pendiente del cambio de banco -al menos en la teoría-, después dependerá un poco del código que genere el compilador.
Lo que sí tienes que tener en cuenta es que si quieres manejar a tu antojo el TRIS, debes colocar la sentencia
Código: C
#use Fast_io(PORTB)
No recuerdo si está escrito en la forma correcta, tendrás que buscar en la ayuda del compilador