Programación con MikroC

como te explicaron antes, debes poner tu codigo dentro de un mismo lazo, algo asi:

Código:
void main() {
     int i;
     TRISA = 0;
     TRISB = 0;
     PORTA = 0;
     PORTB = 0;

     while(1){
        PORTA = ~PORTA;
        for (i = 0; i <= 7; i++){
            PORTB = 1<<i;
            Delay_ms(200);
        }
     }
}
 
Tengo un problema con Mikroc, cada vez que escribo una letra o modifico algo de mi codigo, se apaga la imagen del monitor de la pc y luego vuelve a encender, es muy molesto, es como si se estuviera por ejecutar algo en DOS, es un problema en la maquina del laburo, en otros lados no lo hace, probe de desactivar antivirus y otros soft pero sigue haciendo lo mismo, no se si le paso a alguien mas y lo pudieron solucionar
 
Buenas Noches, Les agradecería si me pudieran echar una mano en esto, Yo trabajo en MiKroC pro.
Estoy tratando de realizar una comunicación serial entre dos pic.
Tengo entendido que cuando se escribe por ejemplo esto:

UART1_Write_Text("Dato");
UART1_Write(10);
UART1_Write(13);

Convierte el pic la palabra "dato" en una serie de ceros y unos que transmite a través de la linea tx los datos para ser recibidos por otro pic.

El problema es que necesito convertir esos ceros y unos de nuevo a la palabra "dato" para poder transmitirla a un LCD y no se como hacer eso.
Mi programa es este:
Código:
char dato ;
sbit LCD_RS at Rb0_bit;
sbit LCD_EN at Rb3_bit;
sbit LCD_D7 at Rb7_bit;
sbit LCD_D6 at Rb6_bit;
sbit LCD_D5 at Rb5_bit;
sbit LCD_D4 at Rb4_bit;

sbit LCD_RS_Direction at TRISb0_bit;
sbit LCD_EN_Direction at TRISb3_bit;
sbit LCD_D7_Direction at TRISb7_bit;
sbit LCD_D6_Direction at TRISb6_bit;
sbit LCD_D5_Direction at TRISb5_bit;
sbit LCD_D4_Direction at TRISb4_bit;


void main() {
Delay_ms(100);
cmcon = 7 ;
trisa = 0 ;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  UART1_Init(2404);
  Delay_ms(100);


while (1) {
if(UART1_Data_Ready()== 1) {
      dato = UART1_Read();
      Lcd_out_cp(dato);
      Lcd_Cmd(_LCD_CLEAR);
      dato = 0 ;
      delay_ms (1000) ;
      }
}

De antemano gracias.
 
Última edición por un moderador:
estoy haciendo un código en mikroC para enviar datos por usb pero me sale un error en esta linea de codigo

//Función de rutina USB
//dentro de las interrupciones.
void HID_Inte( void )
{
asm CALL _Hid_InterruptProc //esta parte sale marcada de rojo
asm nop
}

y en el error me sale

undeclarer identifier '_Hid_interruptProc' in expresion

y no doy con el problema
 
gente aquí les dejo un tutorial acerca de como crear un nuevo proyecto en mikroc espero que les sea útil saludos
 

Adjuntos

  • es_1st_project_c_pro_pic_v101.pdf
    671.6 KB · Visitas: 220
Última edición por un moderador:
estoy haciendo un código en mikroC para enviar datos por usb pero me sale un error en esta linea de codigo

//Función de rutina USB
//dentro de las interrupciones.
void HID_Inte( void )
{
asm CALL _Hid_InterruptProc //esta parte sale marcada de rojo
asm nop
}

y en el error me sale

undeclarer identifier '_Hid_interruptProc' in expresion

y no doy con el problema

Se esta haciendo una llamada a un procedimiento NO declarado (_Hid_InterruptProc)

gemte aki les dejo un tutorial acerca de como crear un nuevo projecto en mikroc espero q les sea util saludos

Gracias por el aporte
 
Buenas, estoy trabajando con mikroc 2012, estoy imprimiendo una cadena pero me sobre escribe lo que esta a un lado y no se porq.

Código:
int valor;
char prueba;
valor=EEPROM_Read(0x30);
IntToStr(valor,prueba);
Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);//este da el problema, probe colocando un texto y aparece justo
//en la cuarta linea del LCD tambien probe char prueba[5], *prueba[5] pero imprimen
//caracteres raros

asdas-472289.jpg


Como vez alli el primer cuadro es colocando un texto directo.

El segundo qda alejado mas si suma(operacion que realizo) que es lo importante pero sobreescribe max o lo que esta a la derecha.

El tercer cuadro es colocandolo prueba[5] o *prueba [5], este me muestra caracteres raros ademas del simbolo de grados que parece que lo copiara de la linea de arriba.


Y en el segundo cuadro para poder que se vean los numeros tuve que eliminar la impresion del max ya que lo tapaba.
 
Última edición:
Muy buenas, esta librería tenía sus cositas, yo las dejé de usar por el tema este, si usas un int te reserva 7 espacios que va rellenado por la derecha menos el ultimo que lo pone como 0x00 que intdica que es un string, en el caso de usar un byte o char te reserva 4, pero ya no te sirve con valores mayores a 255

Puedes provar con la conversión byte si tus valores no superan este:
Código:
char valor;
char prueba[4];
valor=EEPROM_Read(0x30);
ByteToStr(valor, prueba);
Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);

Si este no te sirve (pinsa que el 4º digito es nulo y borrará lo que tengas) solo te quedan 2 alternativas, usar estas librerias y luego tratar la matriz (creando una nueva mas corta y solo poniento los bytes que necesites) o crearte tu propia librería.

esto es lo que hay.

Ah y recuerda (no se si lo puse en este hilo y no se si en nuevas versiones de mikroc ya está arreglado que me parece que no), cuando usas la librería Lcd_Out(x,x,x); el texto que pones consume memoria ram, y si vas a crear un menú con mucho texto constante (tipo: "Menu:", "Configuración", .....) la ram te va a volar y tenemos poca. Pues tienes que usar esto:
Código:
void Lcd_Out2(char fila, char col, const char *dat)
{
     while(*dat)
     {
         Lcd_Chr(fila,col++, *dat++);
     }
}
Con esto usas la rom en lugar de la ram.Lo pones ahi arriba en tu codigo y se usa de la misma manera:
Lcd_Out2(2, 1, "Hola mundo");
Pero solo para texto constante, no variables.

Un saludo
 
Última edición:
Muy buenas, esta librería tenía sus cositas, yo las dejé de usar por el tema este, si usas un int te reserva 7 espacios que va rellenado por la derecha menos el ultimo que lo pone como 0x00 que intdica que es un string, en el caso de usar un byte o char te reserva 4, pero ya no te sirve con valores mayores a 255

Puedes provar con la conversión byte si tus valores no superan este:
Código:
char valor;
char prueba[4];
valor=EEPROM_Read(0x30);
ByteToStr(valor, prueba);
Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);

Si este no te sirve (pinsa que el 4º digito es nulo y borrará lo que tengas) solo te quedan 2 alternativas, usar estas librerias y luego tratar la matriz (creando una nueva mas corta y solo poniento los bytes que necesites) o crearte tu propia librería.

esto es lo que hay.

Ah y recuerda (no se si lo puse en este hilo y no se si en nuevas versiones de mikroc ya está arreglado que me parece que no), cuando usas la librería Lcd_Out(x,x,x); el texto que pones consume memoria ram, y si vas a crear un menú con mucho texto constante (tipo: "Menu:", "Configuración", .....) la ram te va a volar y tenemos poca. Pues tienes que usar esto:
Código:
void Lcd_Out2(char fila, char col, const char *dat)
{
     while(*dat)
     {
         Lcd_Chr(fila,col++, *dat++);
     }
}
Con esto usas la rom en lugar de la ram.Lo pones ahi arriba en tu codigo y se usa de la misma manera:
Lcd_Out2(2, 1, "Hola mundo");
Pero solo para texto constante, no variables.

Un saludo


Hice lo de ByteToStr y me salio asi
as.jpg

Lo que me parecio bien, el unico detallito que no entiendo es por que sale el simbolo de grados (°).

En cuanto a la memoria RAM no se si esto te diga algo, uso un 16f887

0 1141 Used RAM (bytes): 70 (20%) Free RAM (bytes): 282 (80%) Used RAM (bytes): 70 (20%) Free RAM (bytes): 282 (80%)
 
Última edición:
Buenas otra vez, con el simbolo de grados ni idea, no recuerdo que me pasara nunca, habría que ver el codigo entero y segun se vea hacer un debug para ver donde mete ese simbolo, lo malo de mikroc es que sus librerías son cerradas y no sabemos realmente como funcionan.
Sobre el tema de la RAM de momento tienes de sobra, pero puede llegar el caso que utilices mucho texto en el lcd y en ese caso sí te sería mas util la función.

Un saludo
 
Hola, estoy programando en MikroC 4.6 y 5.4. Tengo un problema con el mismo. Cada vez que agrego la llave de cierre se agrega automáticamente las barras "//" para comentarios. ¿Hay alguna forma de quitarlos? Muchas gracias!
 
Hola a todos.
Pregunta para quien me pueda ayudar. Cualquier código que intento montar (Bild) en MikroC, siempre me devuelve el Finished (with error) en la linea 0 error 102. Según tengo entendido no es problema del compilador ni el código tiene error alguno, es un problema del sistema pero llevo todo el dia recomponiendo el registro del sistema y demás cosas que se me han podido ocurrir y he consultado en la red pero nada. No sé por donde continuar. ¿Alguien me puede orientar como salir de ésta?.
Gracias de antemano.
 
Hola desde hace tiempo busco un programa hecho en Mickro C pro for compiler, para un PIC16F628
para hacer un contador con punto decimal, para que en el LCD 2x16 aparesca los digitos 000.000

si alguin tiene algo les agradeceria su ayuda gracias. ...
 
Buenas noches, estoy trabajando con el compilador mikroC y estoy intentando programar el teclado matricial 4x4 con una lcd 128x64, en las librerias aparece pero con una lcd mas pequeña, pero con una lcd mas grande no veo como funciona ya que veo que no tiene los mismos comandos.

Les agradeceria bastante, gracias ...
 
Hola.
No programo en MikroC, pero te puedo asegurar que no todos los LCDs se controlan con la misma librería, ni con el mismo protocolo. Según imagino, es de 128x64 caracteres, pero no debe tener el mismo driver que los demás LCDs, o los más conocidos de 16x2.

Saludos.
 
Hola a todos.
A ver si me pueden ayudar con este código en mikroc, apenas me estoy iniciando en lenguaje C, por lo tanto no consigo dar con la solución.

En si; lo que quiero hacer es mostrar por la LCD el Numero 11 en "Binario, Decimal, Hexadecimal y Punto Flotante"

N = 11
Binario = 1011
Decimal = 11
Hexadecimal = B
Punto Flotante = 11.00

Aquí esta el código a ver si me echan una mano:

Código:
//Definición de pines del LCD
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

//Definición de los TRIS del LCD
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End de la Configuracion
// *************************************************

char Text1[] = "Bienvenido";
char Text2[] = "Bin";
char Text3[] = "Dec";
char Text4[] = "Hex";
char Text5[] = "Punt.F";

char Text6[16];
char Text7[16];
char Text8[16];
char Text9[16];

//Impresión de el Numero 11 en Binario, Decimal, Hexadecimal y Punto Flotante
unsigned int v1 = 1011;
unsigned int v2 = 11;
unsigned int v3, v4;
unsigned float v5 = 11.00;

void main()
{
//Inicio del LCD.
Lcd_Init();
//Borrado del cursor.
Lcd_Cmd(_LCD_CURSOR_OFF);
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR);
//Impresión de Text1 durante 1 segundo.
Lcd_Out(1, 4, Text1);
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
// Impresión de Textos "Text2, Text3, Text4, Text5"
Lcd_Out(1,0, Text2);
Lcd_Out(1,9, Text3);
Lcd_Out(2,0, Text4);
Lcd_Out(2, 6, Text5);
// Conversión de decimal a Binario
IntToStr(v1, Text6);
Lcd_Out(1,4, Text6);
// Conversion de entero a cadena de caracteres para mostrar decimal = 11
IntToStr(v2, Text7);
Lcd_Out(1, 13, Text7);
// Conversión de decimal a hexadecimal
v3 = 11;
v4 = Dec2Bcd16(v3);
IntToStr(v4,Text8);
Lcd_Out(2,4, Text8);
// Conversion de Decimal a Punto Flotante
FloatToStr(v5, Text9);
Lcd_Out(2,10, Text9);
}

:confused::confused::confused::confused:
 
Hola a todos.
A ver si me pueden ayudar con este código en mikroc, apenas me estoy iniciando en lenguaje C, por lo tanto no consigo dar con la solución.

En si; lo que quiero hacer es mostrar por la LCD el Numero 11 en "Binario, Decimal, Hexadecimal y Punto Flotante"

N = 11
Binario = 1011
Decimal = 11
Hexadecimal = B
Punto Flotante = 11.00

Prueba con esta modificación del código al cual le agregué una rutina para convertir de decimal a binario (4 Bits)
Código:
//Definición de pines del LCD
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

//Definición de los TRIS del LCD
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End de la Configuracion
// *************************************************

//Impresión de el Numero 11 en Binario, Decimal, Hexadecimal y Punto Flotante

void main()
{
char bin_buffer[5];
char Text1[3];
char Text2[5];
char Text3[9];

unsigned int i,valor;
unsigned int v1 = 11;
float v2 = 11.00;
//Inicio del LCD.
    Lcd_Init();
//Borrado del cursor.
    Lcd_Cmd(_LCD_CURSOR_OFF);
    Lcd_Cmd(_LCD_CLEAR);
//Impresión de Texto durante 1 segundo.
    Lcd_Out(1, 4, "Bienvenido");
    delay_ms(1000);
    Lcd_Cmd(_LCD_CLEAR);

// Conversión de Decimal a Binario (4 Bits)
   valor = v1;
   for (i = 0; i < 4; i++)
   {
   if (valor & 0x08)    // Se comprueba el MSB (Bit mas significante "Bit3")
      bin_buffer[i] = '1'; // Si este es uno, colocar un 1 en el buffer
   else
      bin_buffer[i] = '0'; // Si este es cero, colocar un 0 en el buffer
   valor <<= 1;         // Rotar los Bits a la izquierda 1 Bit
   }
   lcd_out(1,1,"Bin:");
   Lcd_Out(1,6, bin_buffer);
// Conversion de entero a cadena de caracteres para mostrar decimal = 11
   lcd_out(2,1,"Dec:");
   ByteToStr(v1, Text1);
   Lcd_Out(2,5, Text1);
   delay_ms(2000);
// Conversión de decimal a hexadecimal
   Lcd_Cmd(_LCD_CLEAR);
   lcd_out(1,1,"Hex:");
   IntToHex(v1,Text2);
   Lcd_Out(1,6, Text2);
// Conversion de Decimal a Punto Flotante
   lcd_out(2,1,"Flt:");
   FloatToStr(v2, Text3);
   Lcd_Out(2,6, Text3);
}
Suerte.
 
Atrás
Arriba