TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: aripod en 17 de Octubre de 2006, 14:49:24
-
Estuve buscando en el foro, viendo ejemplos...entonces agarre el MPLAB, seleccion como compilador el CC5.....y escribi rapidamente esto:
#use delay(clock=4000000)
void main(void)
{
TRISA.1=0;
while(1)
{
PORTA.1=1;
delay_ms(50);
PORTA.1=0;
delay_ms(50);
}
}
Y me tira el error:
#use delay(clock=4000000)
^------
Error[1] C:\Documents and Settings\Ariel\Escritorio\Delay\Delay.c 1 : Preprocessor error
(The source line starting with '#' contains invalid syntax or context
dependent syntax)
Dentro de este tengo la libreria 16F84.h pero..no pasa nada.....
Alguna idea?Gracias!!
-
Soy novato pero en la configuración inicial faltan cosas como el PIC a utilizar, los fuses, uso de los puertos... algo así como:
#include <16f676.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use fast_io(a)
//PROGRAMA
Además con un delay de 50 milisegundos no se si el led se verá claramente que se enciende y apaga, en caso de tener un led conectado.
-
Exacto te falta incluir esta directiva
#include <16F877.h>
Además no entiendo porque pones TRISA.1=0; que es el .1?
El compilador no te va a reconocer esa directiva tenes que quitarle el .1
-
#include <16f676.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use fast_io(a)
Segun me enseñaron, no hace falta hace los include....lo de los #fuses no tengo idea ke sera....calculo ke el compilador lo hace automaticamente...nose...en todo caso lo pondre...
el problema es que me da un error con el #use...
Hago TRISA.1 para poner ke el puerto RA1 es salida....no me tira ningun error...al contrario...
Y por ultimo, no puedo incluir 16F877.h, porke estoy usando el 16F84 :D. Dentro de esa libreria esta el delay? No se lo podria agregar a la del 16F84???
-
Perdon perdon
La directiba que te falta es esta #include <16f84.h>
Los fuses te definen que oscilador vas a utilizar (generalmente es un cristal (XT)) si vas a proteger el codigo o no si activaras el perro guardián (WDT) o no
Esta directiva #use delay (clock=4000000) indica a que frecuencia vas a usar el clock del pic (el cristal externo)
Por ultimo es verdad que no es imprescindible la directiva #include <16f676.h> pero si no la utilizas tenes que realizar toda la configuracion de lo que vas a utilizar vos (por ejemplo la dirección de los puertos) no te pone error porque aun no a llegado a analizar esa linea
En cuanto a lo del tris me refiero a que esta mal escrito es set_tris_a(00000010) el valor que esta entre parentesis es para configurar cada pin del puerto como entrada o salida dependiendo de si vale 0 o 1
En fin aca tenes buenos ejemplos de como configurar un puerto
http://www.todopic.com.ar/foros/index.php?topic=4530.0
-
No tengo problemas en declarar los puertos, ya que en el compilador que estoy aprendiendo en el curso es el CC5X y lo hacemos asi.
El rpboelma del #use es que en ese compilador no esta definido...pero...viene la libreria DELAY.C
/*
DELAYS AND TIMING
=================
Delays are frequently used. There are various
ways to generate them:
1. Instruction cycle counting
2. Using the TMR0 timer
3. Watchdog timeout for low power consumption
4. Using variables achieves longer delays
*/
void delay_ms( uns16 millisec)
// Delays a multiple of 1 milliseconds at 4 MHz
// using the TMR0 timer
{
char next = 0;
OPTION = 2; // prescaler divide TMR0 rate by 8
TMR0 = 2; // deduct 2*8 fixed instruction cycles delay
do {
next += 125;
clrwdt(); // needed only if watchdog is enabled
while (TMR0 != next) // 125 * 8 = 1000 (= 1 ms)
;
} while ( -- millisec != 0);
}
void delay10( char n)
/*
Delays a multiple of 10 milliseconds using the TMR0 timer
Clock : 4 MHz => period T = 0.25 microseconds
1 IS = 1 Instruction Cycle = 1 microsecond
error: 0.16 percent
*/
{
char i;
OPTION = 7;
do {
clrwdt(); // only if watchdog enabled
i = TMR0 + 39; /* 256 microsec * 39 = 10 ms */
while ( i != TMR0)
;
} while ( --n > 0);
}
void _delay10( char x)
/*
Delays a multiple of 10 milliseconds
using instruction cycle counting
Clock : 32768 Hz => period T = 30.518 microseconds
1 Instruction Cycle = 1 IS = 4 * T = 122 microseconds
10 ms = 82 IS (81.92) => error: 0.1 percent
*/
{
do {
char i = 26; /* 2 IS */
do ; while ( --i > 0); /* 26 * 3 - 1 = 77 IS */
} while ( --x > 0); /* 3 IS */
}
char counter;
void main( void)
{
if ( TO == 1) {
/* power up or MCLR */
PORTA = 0; /* write output latch first */
TRISA = 0; /* all outputs */
TRISB = 0xFF; /* all inputs */
}
else {
/* watchdog wakeup */
if ( --counter > 0) {
OPTION = 0x0B; /* WDT divide by 16 */
sleep(); /* waiting 16 * 18 ms =
288 ms = 0.288 seconds */
}
}
// ..
delay_ms( 5500); /* 5.5 seconds */
// ..
delay10( 100); /* 1 second */
// ..
counter = 7; // 7 * 0.288 sec. = 2 sec. totally
OPTION = 0x0B; // 0 1011: WDT divide by 16
// main terminates by sleep();, allows low power consumption
// waiting for watchdog timeout: approx. 16*18 ms = 288 ms
}
Pero cuando la agrego al copilador, en vez de ubicarse dentro de header files con la 16f84.h se agrega con las de source file, junto con mi_codigo.c....esto es porke es DELAY.C?
Entonces, hago #include <DELAY.C> en la primer linea del programa,,,pero cuando compilo...no me tira ningun error...salvo que la compilacion no fue exitosa.....
Se le puede cambiar la extension al DELAY.C a DELAY.H??
-
Problema solucionado......
En un .h puse la funcion de delay y listo:
void delay_ms( uns16 millisec)
// Delays a multiple of 1 milliseconds at 4 MHz
// using the TMR0 timer
{
char next = 0;
OPTION = 2; // prescaler divide TMR0 rate by 8
TMR0 = 2; // deduct 2*8 fixed instruction cycles delay
do {
next += 125;
clrwdt(); // needed only if watchdog is enabled
while (TMR0 != next) // 125 * 8 = 1000 (= 1 ms)
;
} while ( -- millisec != 0);
}
Tema cerrado.. gracias a los ke ayudaron!!!
-
Ojo!!! el código del compilador CCS no es compatible con otros compiladores, tenemos que adecuarlo, digo esto ya que los trozos de código que se han expuesto son para el CCS y no para el CC5X, lo conveniente es que mires en el manual del compilador.
Suerte!!! ;)