# Opiniones y ayuda (HI-TECH C)



## iDan (Feb 26, 2010)

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


----------



## electrodan (Feb 26, 2010)

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.


----------



## Beamspot (Feb 27, 2010)

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.


----------



## Meta (Feb 27, 2010)

*HI-TECH C* tiene un sierto grado de fama y no es de www.Microchip.com

Busca el C18 o el CCS.


----------



## Vegetal Digital (Feb 27, 2010)

Proba con el CCS.

ccs-c-programas-hechos-mplab-proyecto-completo

Saludos


----------



## iDan (Mar 4, 2010)

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  se me genero un pequeño problema; cuando compilo este pequeño codigo que hice:


```
#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!!


----------



## Vegetal Digital (Mar 4, 2010)

hola, te faltan abrir las llaves del else y cerrar las del main. Proba acomodandolo y contanos.
A otra cosa proba no protegiendo el codigo


----------



## iDan (Mar 5, 2010)

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??


----------



## ByAxel (Mar 10, 2010)

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.


----------



## iDan (Mar 12, 2010)

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:


```
#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.


----------



## Pablet (Mar 12, 2010)

este compilador es bastante parecido al C18. .  prueba de esta forma PORTBbits.RB0=1
Un saludo


----------



## iDan (Mar 12, 2010)

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!!


----------



## ByAxel (Mar 13, 2010)

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.


----------



## iDan (Mar 14, 2010)

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   si por alguna razon me ataca otra duda (es la desgracia de ser un novato en este compilador ) espero por si dispones de tiempo pueda preguntarte...!!


Sinceramente Gracias!!


Saludos!!


----------



## davidkepar (Oct 14, 2010)

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


----------



## MARLOBOTS (Jun 2, 2012)

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);
}
}


----------



## Kalamarus (Jul 2, 2012)

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.


----------

