Autor Tema: INICIO CON CCS  (Leído 1875 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
INICIO CON CCS
« en: 30 de Septiembre de 2011, 16:11:45 »
 :) buenas a todos, me inicie con la programacion de pic, todo lo que he hecho en assembler lo hago ahora en CCS, pero tengo problema con algo trivial que en assembler me seria facil que es la lectura de puertos, ejemplo: digamos que configuro del PORTA, a RA0,RA1,RA2 como entradas, entonces tendre una entrada de 3 bits, lo cual es igual a 8 posibles combinaciones de entradas y las quiero leer, para segun la combinacion de entrada ejecutar una accion, en assembler con una mascara andlw b'00000111' lo logro facil, pero en CCS como seria? espero esa pequeña ayuda a esta sencillez que me tiene algo cabreado =) gracias.
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INICIO CON CCS
« Respuesta #1 en: 30 de Septiembre de 2011, 16:35:13 »
En C, por ejemplo:

Código: C
  1. if((input_a()&0b000111)==0b110){
  2.  
  3. }

& seria la operación AND

Ojo, en CCS hay 3 maneras de configurar al compilador con respecto al manejo de puertos. El modo default es STANDARD_IO, lo que significa que cada vez que se realice una operación sobre un puerto actualizará el TRIS del mismo. Para trabajarlo como se acostumbra en ASM, sería FAST_IO, de esa manera el programador configura el registro TRIS y no se modifica en ningún caso automáticamente, para ello hay que colocar al inicio:

#use FAST_IO(A)
#use FAST_IO(B)
etc....


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
Re: INICIO CON CCS
« Respuesta #2 en: 30 de Septiembre de 2011, 19:19:52 »
comprendo suky eso es verdad. ahorita prove lo siguiente en ccs, pero no me funciona del todo, por que cuando presiono los interruptores no lee la nueva entrada de datos, si no que se queda la anterior que leyo al iniciar el programa

Código: [Seleccionar]
void main (){
int8 valor;
TRISB=0x00;
TRISA=0x03; //ra0 y ra1 como entrada//
PORTB=0x00; //comienza apagado portb//
valor=(PORTA&0x03);
while(1){
if (valor==0)
PORTB=0;

else if (valor==1){
PORTB=1;}

else if (valor==2){
PORTB=2;}

else if (valor==3){
PORTB=3;}
}
}

no se si esta bien, pero no me funciona como quiero, es decir, cuando simulo en proteus si los dos interruptes estan pasados sera leido como "'0" y se cumplira la primera y estara apagado portb, pero en plena ejecucicon de simulacion cuando comienzo con los interruptores pasados, y digamos que dejo abierto uno que se leera como "1" no cambia la respuesta en portb, en assembler seria asi:
Código: [Seleccionar]
movf PORTA,W
andlw 0x03
addwf PCL,F
goto cero
goto uno
goto dos
goto tres

cero
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INICIO CON CCS
« Respuesta #3 en: 30 de Septiembre de 2011, 19:21:23 »
Eso ocurre porque el while no incluye la lectura del puerto, se lee una sola vez  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
Re: INICIO CON CCS
« Respuesta #4 en: 30 de Septiembre de 2011, 19:23:44 »
aaaaaah!! es verdad no siempre el argumento del while es un true, entonces como seria suky?
aver seria asi


while (valor=(PORTA&0x03)){
............
..........
.........
}
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INICIO CON CCS
« Respuesta #5 en: 30 de Septiembre de 2011, 19:26:07 »
No! Si colocas eso, saldrá del ciclo while cuando no se de la condición especificada. A lo que me refiero es que, si necesitas leer constantemente el valor del puerto, debes incluirlo dentro del while:


Código: C
  1. while(1){
  2. valor=(PORTA&0x03);
  3. if (valor==0)
  4. PORTB=0;
  5.  
  6. else if (valor==1){
  7. PORTB=1;}
  8.  
  9. else if (valor==2){
  10. PORTB=2;}
  11.  
  12. else if (valor==3){
  13. PORTB=3;}
  14. }



Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
Re: INICIO CON CCS
« Respuesta #6 en: 30 de Septiembre de 2011, 19:33:11 »
siiii funciona tienes razon suky, tenia mal puesta la variable, deb estar dentro del bucle while gracias man, con eso ya puedo avanzar mucho y aunque paresca algo trivial, la lectura de puerto siempre es fundamental en proyectos =) espero contar con vos para futuras consultas. saludos y viva la electronica =) y todo lo que envuelve.
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein