Autor Tema: novato, como configurar los puertos del 16f628 usando C?  (Leído 3688 veces)

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

Desconectado yakers

  • PIC10
  • *
  • Mensajes: 6
novato, como configurar los puertos del 16f628 usando C?
« en: 16 de Septiembre de 2014, 09:11:18 »
hola Amig@s
Antes que nada desde ya las gracias por su tiempo.
Resulta que recien empieso y agatas se algo de assembler con el casi jubilado 16f84a, nunca me meti con C
Encontre un programa en C usando el 16f628 que casi hace lo que yo quiero, asique me dispuse a meterle mano y aca me quede sin poder resolver la configuracion del puerto. Busque varios ejemplos pero todos hablan de como configurar todo el puerto como i/o, lo que quiero es que en el mismo puerto algunos pin sean entrada y otros salida, esto lo se hacer con asm en el 16f84 pero aca en C con el 16f628 no la termino de entender,

el codigo que tengo es este, donde por lo que leo cuando lo documentan, dice que puerto b esta como salida, pero sin embargo en el esquematico del proteus el RB7 esta como entrada y se activa con un pulsador, y funciona muy bien. Consegui en PIC-C Compiler y funciona bien cuando compilo y con el proteus la simulacion tambien funciona, asique voy probando.
yo quiero que en el pueto A el RA0, RA1, RA2, Y RA3 sean salidas y los demas entradas, y vi que en este micro se puede configurar usando el Osc interno y dejando asi libres los RA7 y RA6 para usarlos como i/o lo mismo con el MCLR RA5 se lo puede usar como i/o, entiendo que usando los FUSES se logra esto,pero no se como agregarle a los FUSES esta indicacion, me parece que ya estan los FUSES como yo quiero, lo que no se es como definir que pin es entrada o salida.
Gracias maig@s




#include <16F628A.h>
#INCLUDE <STDLIB.H>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(int=4000000,RESTART_WDT)
char Pulsado,i,DecMil,Mil=4,Decena=2,Centena=3,Unidad=1;//Numero sorteado
Unsigned int Numero1,Numero=0;
#include <Sorteador.c>       
#include <Display.c>     
void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
#use delay (clock=4000000)         //Fosc=4Mhz
//#use fast_io(B)
//#use fast_io(A)
   set_tris_b(0x80);            //portb como salida
   set_tris_a(0x00);            //porta como Entrada
   disable_interrupts(GLOBAL);//desactivadas interrupciones
   Sorteo();
   while(1){
      if(!input(PIN_B7)){
      Delay_ms(150);
      Pulsado=1;}
      if(Pulsado){
      For(i=1;i<100;++i)
      Mostrar_Numero();//Muestra en el display
      Pulsado=0;
      }
      else{
      Sorteo();//Sortea un numero de 4 cifras
      Mostrar_Numero();}//Muestra en el display
      }
   //TODO: User Code
}

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: novato, como configurar los puertos del 16f628 usando C?
« Respuesta #1 en: 16 de Septiembre de 2014, 17:46:33 »
Que tal amigo,

El CCS cuenta con algunas directivas que indican como se comportarán los pines del microcontrolador, por defecto es STANDARD_IO. Esta directiva automaticamente configura los pines dependiendo de como se utiliza el pin en el codigo (entrada o salida) es decir, pone el codigo en ensamblador para ello (TRIS y PORT [LAT]).

Ejemplo:

Código: [Seleccionar]
output_high(PIN_A1); //Genera codigo para que sea salida (TRIS = 0, PORT = 1)
state = input(PIN_A1); //Genera codigo para que sea entrada (TRIS = 1, PORT = valor_externo [0, 1])

En pocas palabras, aunque tu indiques que quieres que el pin sea salida mediante el TRIS, el CCS se encarga de modificarlo si lo que intentas hacer en el codigo es utilizarlo como entrada, cuando utilizas la directiva por defecto claro.

Espero esto te ayude, saludos.

Saludos.

Desconectado yakers

  • PIC10
  • *
  • Mensajes: 6
Re: novato, como configurar los puertos del 16f628 usando C?
« Respuesta #2 en: 18 de Septiembre de 2014, 00:32:10 »
Hola Man3s

Ahhh... con razon no vi ningun ejemplo de como asignar pin a pin su valor, listo el codigo en c lo hace automatico cuando esta en STANDARD_IO , el satandar se debe configurar con los fuses, sabes de algun manual del  16F628A en castellano, no encontre.
Otra preguntita, recuerdo aver visto que insertaron codigo asm destro de un codigo ccs, esto se puede hacer?
Gracias

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: novato, como configurar los puertos del 16f628 usando C?
« Respuesta #3 en: 18 de Septiembre de 2014, 12:16:58 »
cBueeno, no es que el lenguaje C lo haga automaticamente si no que el CCS nos lo "facilita" insertando el codigo por nosotros (nos lo oculta  :mrgreen:). Tampoco es un "fuse" si no una directiva, los fuses controlan ciertas cosas del micro y el de los pines no es el caso, #STANDARD_IO es una directiva al igual que la que te mencionaré a continuación:

Código: [Seleccionar]
#asm
movlw 0xFF
movwf PORTB
#endasm

Supongo se entiende que con ella puedes para poner codigo en ensamblador  :D.

EDITO:
Se me olvidaba, existe un libro muy bueno que te puede ayudar a entrar el mundo de C y como extra aprender a utilizar muchas herramientas del simulador Proteus, su nombre: "Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC", yo se que podras conseguirlo ya que no es posible compartirlo por derechos de autor, etc, ya sabes.

Ese micro es muy común, en el aprendi a programar muchas cosas ajaja, en internet hay bastante info. Es recomendable que almenos "mastiques" [entiendas] el inglés basico, te hará mas facil la vida ajaja, pero siempre puedes checar en el foro.

Saludos.
« Última modificación: 18 de Septiembre de 2014, 12:21:21 por man3s »