Autor Tema: Ajuda com Programa em pic c compiler  (Leído 2110 veces)

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

Desconectado macs.61

  • PIC10
  • *
  • Mensajes: 1
Ajuda com Programa em pic c compiler
« en: 09 de Junio de 2011, 16:11:21 »
Boa tarde Pessoal.

Desculpem não escrever em espanhol, mas acho que da para entender.
Estou tentando compilar um programa em C para o Pic 16F628A de um site, mas o mesmo da vários erros.
Não entendo de linguagem C, mas já deu para perceber que falta O que colocar nos INCLUDES. Também já observei que a necessidade de mudanças de pinos na biblioteca LCD.C.
Mesmo incluindo o Pic e, incluindo os drivers lcd.c e kbd.c, fazendo as alterações, ainda da erros como, por exemplo: undefined identifier ..lcd_enviar.
Ficaria grato se alguém pudesse ajudar.

Abraços.

Sergio.


O programa segue abaixo e o link do programa é esse: http://www.micropic.es/index.php?opt...ctos&Itemid=62


Programa:

// Debe recordarse que las líneas RA0-RA2 actúan ahora como salida de señales de control
// hacia el LCD. Al estar conectadas con sendos interruptores en la MicroPIC Trainer,
// estos deben estar a nivel lógico "1" permanentemente, es decir en la posicion
//marcada como 0 en la placa
//Datos del LCD conectado al puerto B
// Teclado conectado al puerto B: Columna 0,1,2 a B5,B6 y B7. Fila 0,1,2 y 3 a B1, B2,B3 y B4
//RA3 conecto la salida para el motor. En un principi funciona como salida de enable. Se puede
//estudiar posibilidad de implementar un control PWM para la velocidad.
//RA4 entrada para el Timer0
#include
#include




#FUSES NOWDT //No Watch Dog Timer
#FUSES XT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT
#use delay(clock=4000000)

#use fast_io(A)
#use fast_io(B)

#include
#include

#bit puertoA3 = 5.3 //Usado para control on/off motor

void menu1(void);
void menu2 (void);
int16 contar(void);
int16 introducir_valor(void);

char cadena1[]={"\f1-Contar Vuelt\n2-Introd. Vuelt"};
int desbordamiento=0;

void main()
{


char caracter;



port_b_pullups(TRUE);
lcd_init();
kbd_init();
set_tris_a(0x10); //A4 como entrada
puertoA3=0; //inicializo motor con 0

//lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); No activo cursor ni blinker

setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);

printf (lcd_putc,"Contador de Pulsos\n By Rober ",);

do
caracter=kbd_getc();
while (caracter=='\0');

printf(lcd_putc,"%s",cadena1);
while (1)
{
caracter=kbd_getc();

switch (caracter)
{
case '1':
desbordamiento=0;
set_timer0(0);
menu1();
printf(lcd_putc,"%s",cadena1);
break;
case '2':
desbordamiento=0;
set_timer0(0);
menu2();
printf(lcd_putc,"%s",cadena1);
break;
case '*':
printf(lcd_putc,"\f BY BY");
sleep();
}
};

}

int16 contar()
{
int cuenta=0;
int16 n;


cuenta=get_timer0();

if (cuenta==255)
{
set_timer0(0);
desbordamiento++;
}
n=256*desbordamiento+cuenta;

lcd_gotoxy(10,2);
printf(LCD_PUTC,"%Lu",n);

return(n);
}



void menu1()
{
char caracter;
int contador_parcial=0;
int motor_off=1;
int tecla_enter=0; //control de la tecla asterisco pulsada primera vez=1, pulsada outra vez =0
printf(lcd_putc,"\f* Motor On/off\n# salir");

do
{
caracter=kbd_getc();

switch (caracter)
{
case '*':
if (tecla_enter==0)
{
printf(lcd_putc,"\fMotor ON\n cuenta:");
set_timer0(contador_parcial);
tecla_enter=1;
motor_off=0;
set_tris_a(0x10);
puertoA3=1; //activo motor
}
else
{
lcd_gotoxy(1,1);
contador_parcial=get_timer0();
printf(lcd_putc,"Motor OFF");
motor_off=1;
tecla_enter=0;
set_tris_a(0x10);
puertoA3=0; // motor apagado
}
break;
case '#':
tecla_enter=0;
motor_off=1;
set_tris_a(0x10);
puertoA3=0;
break;
}

if (tecla_enter)
contar();
}while (caracter!='#');
}

int16 introducir_valor()
{
char caracter;
char numeros[6];
int contador_caracter=0;
int16 vueltas;

printf(lcd_putc,"\fN. Vueltas (4cifras)\n ");

lcd_enviar(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker

do
{

caracter=kbd_getc();

if (caracter!='\0')
{
printf(lcd_putc,"%c"caracter);
numeros[contador_caracter]=caracter;
contador_caracter++;
}
}
while (caracter!='#'&amp;&amp;contador_caracter<=4);
numeros[contador_caracter]='\0';
vueltas=atol(numeros);

lcd_enviar(LCD_COMANDO,LCD_CLEAR);
lcd_enviar(LCD_COMANDO,LCD_HOME);

printf(lcd_putc,"\f* Motor On/off\n# salir");
return (vueltas);
}


void menu2()
{
char caracter;
int16 vueltas;
int motor_off=1;
int tecla_enter=0; //*es la tecla enter y asi controlo si la he pulsado 1 o ninguna vez

int16 n;

vueltas=introducir_valor();

do
{
caracter=kbd_getc();

switch (caracter)
{
case '*':
if (tecla_enter==0)
{
tecla_enter=1;
motor_off=0;
printf(lcd_putc,"\fON Fin: %Lu\ncuenta:",vueltas);
set_tris_a(0x10);
puertoA3=1; //Activo motor
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Off Fin: %Lu\n cuenta:",vueltas);
motor_off=1;
tecla_enter=0;
set_tris_a(0x10);
puertoA3=0; //motor apagado
}
break;
case '#':
tecla_enter=0;
motor_off=1;
set_tris_a(0x10);
puertoA3=0; //motor apagado
break;
}

if (tecla_enter)
{
n=contar();

if (vueltas==n) /*debo parar motor*/
{
motor_off=2; /*Usado para salir de la función*/
set_tris_a(0x10);
puertoA3=0; //apago motor
}
}
}while (caracter!='#'&amp;&amp;motor_off!=2);
if (motor_off==2)
{
printf(lcd_putc,"\fSe han Bobinado: \n %Lu Vueltas",n);
do
caracter=kbd_getc();
while (caracter=='\0');
}
}


 

anything