TODOPIC

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
  1. #byte PORTC  =  0x0F82
  2. #byte TRISC    =  0x0F94
  3.  
  4. #bit PORT_1W1 = PORTC.1
  5. #bit TRIS_1W1 = TRISC.1
  6.  
  7. void outputlow1W(){
  8.  
  9.                 PORT_1W1=0;
  10.                 TRIS_1W1=0;
  11.  
  12. }


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
  1. variable = variable | 0b00000010;
  2. set_tris_b(variable);

  Para borrar dicho bit y dejar el resto como está se puede recurrir a...

Código: C
  1. variable = variable & 0b11111101;
  2. 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
  1. #use Fast_io(PORTB)

  No recuerdo si está escrito en la forma correcta, tendrás que buscar en la ayuda del compilador