Opiniones y ayuda (HI-TECH C)

Hola a todos


Esta vez me he topado con el compilador HI-TECH C y me intereso bastante, la programacion es en lenguaje C pero el inconveniente que tengo es que no he encontrado ejemplos o la referencia del lenguaje (sintaxis) para este compilador; alguien me podria ayudar con algunos ejemplos en este compilador o la sintaxis del mismo?? ya tengo un poco de conocimiento en la programacion en C por el compilador Mikro C...


Saludos
 
No se nada de esos compiladores, pero por lógica supongo que si el compilador puede compilar ANSI C, su sintaxis debería de ser la misma en todos los compiladores.
 
Eso de que el C es portable es como decir que los programas ejecutables de un PC se pueden ejecutar en Windows y en Linux a la vez.

He trabajado con el ImageCraft, IAR y GNUGCC, y en ninguno de ellos hay una manera estándar de trabajar con los bits directamente ni de escribir las rutinas de interrupción. Así que lo de la sintaxis creo que viene mucho a cuento... Pero no puedo ayudar con este compilador, pues no lo conozco.
 
Hola a todos de nuevo

Gracias por responder a mi duda... ahora mismo hare un pequeño codigo en base a lo que e podido ver en los enlaces que hay en los mensajes...


Gracias...

Tal parece que no todo hiba bien :LOL: se me genero un pequeño problema; cuando compilo este pequeño codigo que hice:

Código:
#include <htc.h>
#include "delay.h"
__CONFIG(WDTE=0);
__CONFIG((FOSC0 && FOSC1)=01);
__CONFIG(PWRTE=1);
__CONFIG(CP=1);
__CONFIG(MCLR_OFF);
__CONFIG(XT=4000000);
void
main(void)
{
TRISB=0;
TRISA=1;
while(1)
{
if(PORTA==1)
{	
PORTB=18;
DelayMs(5000);
PORTB=0;
DelayMs(5000);
}
else
PORTB=128;
}
}

Me aparece un error como si el compilador esta mal instalado, cosa que no pasa cuando no trabajo con retardos; hay algo que tenga mal configurado?? gracias por su ayuda!!
 
Última edición:
Gracias Vegetal Digital

Ya lo probe de nuevo... las llaves del else no las pongo ya que el else solo esta manejando una linea de codigo, y aun poniendoselas tampoco... tambien cambie el modo de codigo protegido y tampoco... algo mas para solucionar este problema del retardo??
 
Hola iDan soy nuevo en este foro pero se manejar ese compilador:

El compilador de HI-TECH para PIC es un puro ANSI C, supongo que instalaste el Hi-Tide junto con uno de los compiladores para PIC http://www.htsoft.com/downloads/demos.php

Sobre los manuales; cuando instalas los compiladores para PIC también se agregan unos archivos en PDF, te diriges a la carpeta adecuada, buscas "Quickstart guide", "User Manual" para te guíes; pero ten en cuanta que el manual para los PIC16 y PIC18 tienen ciertas diferencias así que al momento de programar usa el adecuado.
Otros manuales como el C18 de microchip también sirve ya que es ANSI C pero otro como el compilador PICC de CCS no te servirá de mucho ya que el C que usa no es el estándar ANSI, por ende no es compatible con el Hi-tech.

En el Hi-Tide todo es en base a proyectos así que necesariamente al crear un programa debes hacerlo desde "File" -> "New" -> "Project" de lo contrario no te va a compilar nada,
el proyecto que creas debe ser en base al Hi-Tech.
En "Project" desactiva la opción "Build Automatically".

Luego para mayor facilidad de la configuración de los fuses, pines de I/O o módulos del PIC te recomiendo usar el C-Wiz, lo encuentras en "Tools" -> "C-Wiz Editor".

__CONFIG(XT & WDTDIS & PWRTDIS & BOREN & LVPDIS & WRTEN & DEBUGDIS & DUNPROT & UNPROTECT);

Ten en cuenta que el C-Wiz ayuda mucho pero en cosa de tiempos como los "delay" no sirve de nada poner XT=4000000, ya que aparte de generar error el compilador no le interesa la velocidad del cristal que vas a usar a menos que la librería que estés usando requiera de ese valor para calcular una constante de tiempo como usan las librerías de los "delay" y para eso la declaración seria #define _XTAL_FREQ 4000000 antes del #include "delay,h". Pero te aviso que el delay como librería no lo tiene el hitech (revisar manual), entonces para eso hay que crear una librería y luego llamarla desde el programa o le puedes dar uso a los ejemplos de esta web que también trae las librerías para los delay http://www.microchipc.com/sourcecode/#delay16x

Por último para poder usar todas las librerías que dispone el hi-tech se debe incluir el Patch o ruta de las librerías al proyecto para que pueden ser llamadas desde la linea de código con mayor facilidad ya que un simple "#include" a sus librerías te va a dar dolores de cabeza; para eso te vas a "Project" -> "Properties", luego en el árbol buscas "C/C++ Build" -> Seleccionas "Settings", es ahi en "Include Patch" donde agregas la ruta de la libreria(s). Con eso ya puedes usar el #include a las librerías respectivas.
 
Hola Carlos Alexis

Te agradezco mucho por tu respuesta

Con ella he aprendido a manejar un poco mejor el compilador ya que ni a palos me acostumbro, tengo un pequeño problema ya que e bajado la libreria de la pagina que me indicaste pero esta no la reconoce y muestra un error al compilar, al utilizar la que esta en los ejemplos me funciona PERO solo con microsegundos Us y no con milisegundos Ms;
e realizado un pequeño programa:

Código:
#define _XTAL_FREQ 4000000
#include "init.h"    // included by C-Wiz
#include "delay.h"
#include <htc.h>
void
main(void)
{
init();    // Function call inserted by C-Wiz
TRISA=0;
TRISB=0;
while(1)
{
    PORTA=0;
    PORTB=1;
    DelayUs(500000);
    PORTA=1;
    PORTB=0;
    DelayUs(500000);
}
}

Con lo que tu me haz indicado y me funciona bien, pero al momento de ponerle un retardo mayor éste no lo reconoce y lo hace mas pequeño, y al hacer el programa solo para que la pata 1 del Puerto A se apague y se encienda con retardo no lo hace bien y hace los retardos muy cortos... espero que me puedas ayudar en éste problemón que se me ha armado al aprender sobre éste compilador; otra cosa: yo cuando programo en MikroC para manejar individualmente las patas del PIC pongo por ejemplo: PORTB.F2=1; para que la pata 2 del Puerto B se encienda, ahora como hago eso en el HI-TECH C para manejar individualmente las patas sin poner o escribir en todo el puerto (PORTB=0b0000001)??

Gracias por tu ayuda y tu tiempo.
 
Hola Pablet


Gracias por tu respuesta... estoy buscando algunos manuales del C18 por la afirmacion que me haces... gracias por el dato!!


Lo de manejar individualmente las patas de los puertos no me da resultado... e visto por el foro que utilizan tambien en otros compiladores: #bit RA0=0x05.0 pero tampoco me da resultado... hay alguna otra manera de probar??


Saludos y gracias!!
 
Hola iDan:
Te recuerdo que la mayor parte esta en los manuales que están en la carpeta del Hi-tech y del compilador PIC correspondiente.
Para el manejo de bit's debes de ver el archivo que corresponde al PIC que está usando, que lo encuentras en "C:\Program Files\HI-TECH Software\PICC\PRO\9.60\include" para los PIC16F, te puse un ejemplo adjunto donde explico la manera.

Pero básicamente seria así:
RB0 = 1; // A "1" el pin 0 del PORTB, tal y como dice en el archivo, para eso debes revisarlo ya que ahí están todas las declaraciones.

Igual revisa el ejemplo adjunto y me avisas que tal te fue.

PD: En el ejemplo estoy usando la misma librería que bajé de la página, solamente le he cambiado el nombre.
 

Adjuntos

  • HiTechDelay1.rar
    987.4 KB · Visitas: 329
  • HiTechDelay2.rar
    1.1 MB · Visitas: 126
Hola Carlos Alexis


De verdad enormes gracias por tu respuesta; ya que con tus ejemplos y explicaciones ya pude controlar los delays y cada pata del PIC... te agradezco por tu paciencia y por compartir tus conocimientos conmigo ;) :apreton: si por alguna razon me ataca otra duda (es la desgracia de ser un novato en este compilador :LOL:) espero por si dispones de tiempo pueda preguntarte...!!


Sinceramente Gracias!!


Saludos!!
 
Alguien sabe porque me pasa??
Gracias

Hola, podriais adjuntar un programa que funcione donde se vea como definir los pines de un puerto individualmente???

ya que este programa no me funciona ??

#include <htc.h>
#include <pic12f6x.h>
#define __PRO__ 2
__CONFIG(INTIO & WDTDIS & PWRTDIS & BORDIS & MCLRDIS & UNPROTECT);
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif
//#define SDA GPIO0
//#define SCL GPIO1

unsigned char x;

//**************************************************************************
void main(void)
{
TRISIO=0x08;
IOCB=0x00;
GIE=0;
PEIE=0;
ANSEL=0x00;
CMCON=0x00;
GPIO=0x00;
GPPU=0;
while(1)
{


GPIO0=0;
for (x=0;x<10;x++)
{ //delay 1 seg
__delay_ms(100);
}
GPIO1=0;
for (x=0;x<10;x++)
{ //delay 1 seg
__delay_ms(100);
}


GPIO0=1;
for (x=0;x<10;x++)
{ //delay 1 seg
__delay_ms(100);
}
GPIO1=1;
for (x=0;x<10;x++)
{ //delay 1 seg
__delay_ms(100);
}


}
}





ya que GPIO0 se pone a "1" y cuando le toca a GPIO1 ponerse a "1" se pone pero borrandome GPIO0 a "0"


Alguien sabe porque me pasa??
Gracias
 
Última edición:
tengo el mismo problema lo peor es q yo si soy novato el codigo que estoy usando es pequeñisimo y de aprendisaje lo peor es que al prefe le sale pero en mi compu no funciona cuando agrego el delay sin el delay todo normal probaje con las librerias gracias

#include <htc.h>

#define _XTAL_FREQ 4000000

void main(void)
{
TRISB=0X00;// 1 representa Entrada y 0 representa salida
for(;;)
{
PORTB^=1;
__delay_ms(1000);
}
}
 
A mi me pasa siempre que programo un delay superior a 256. Si quieres hacer un delay mayor, prueba de concatenar varios delays la suma de los cuales te ofrezca el tiempo que necesites.
 
Atrás
Arriba