Autor Tema: Pasar de MikroC a PIC C Compiler  (Leído 2807 veces)

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

Desconectado robo_z

  • PIC10
  • *
  • Mensajes: 16
Pasar de MikroC a PIC C Compiler
« en: 05 de Enero de 2020, 21:57:00 »
Hola Amigos

Estoy Tratando de Pasar Un Codigo que Encontre en la WEB, Este Esta Hecho en Mikro C y Me Gustaria poder Pasarlo a CCS.

El Codigo en Cuestion es Este:

Código: [Seleccionar]
sbit Output_LED at GP5_bit;
unsigned short i, TIME_UP;
 
void interrupt(void){
  if(PIR1.TMR1IF) {
    i ++;
    if(i == 3) TIME_UP = 1;  // Time Up in 1.5 sec
    PIR1.TMR1IF = 0;
 }
}
 
void main() {
  TRISIO = 0b00000011 ;
  ANSEL = 0x00;
  INTCON = 0b11000000 ; // Enable GIE and PEIE for Timer1 overflow interrpt
  PIE1 = 0b00000001 ;   // Enable TMR1IE
 
  // Configure Comparator module
  // CIN- pin is configured as analog,
  // CIN+ pin is configured as I/O,
  // COUT pin is configured as I/O,
  // Comparator output available internally,
  // CVREF is non-inverting input
  // CINV is set to 1
  CMCON0 = 0b00010100;
  VRCON  = 0b10100011;  // Vref is set to VDD/8
  Output_LED = 0;
  do{
     TMR1H = 0x00;
     TMR1L = 0x00;
     TIME_UP = 0;
     i = 0;
     T1CON = 0b00110000;   // Configure Timer 1
     if(CMCON0.COUT){      // First clap detected
       Delay_ms(100);
       T1CON.TMR1ON = 1;   // Start Timer1
       while(!CMCON0.COUT && !TIME_UP); // Wait until second clap is
       T1CON.TMR1ON = 0;                      // detected or Timer1 overflows
       if(CMCON0.COUT && !TIME_UP) Output_LED = ~Output_LED;
       Delay_ms(100);
     }
  }  while(1);
}

Esto es lo que Tengo:
Código: [Seleccionar]
#include <12F675.h>
#device ADC=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES PUT                      //Power Up Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES PROTECT                  //Code protected from reads
#FUSES CPD                      //Data EEPROM Code Protected

#use delay(internal=4MHz)

#use fast_io(A)

#define ACT_RELE     PIN_A5 //Aqui Conectamos la Etapa del RELE

unsigned int Contador;
unsigned short TiempoTerminado;

#INT_TIMER1
void  TIMER1_isr(void)
{
   Contador++;

   if ( Contador == 3 )
   {
    TiempoTerminado = 1;
   }
}

void main()
{
   set_tris_a(0x02);
   setup_comparator(A1_VR | COMP_INVERT); //Configuramos el Comparador A1 vs Vref e Invertimos la Salida
   setup_vref(VREF_HIGH | 12); //Configuramos el Vref a 3.13v
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //524 ms overflow
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);

   output_a(0x00);

   while(TRUE)
   {

set_timer1(0);
Contador = 0;
TiempoTerminado = 0;     

if ( C1OUT == 1 ) //Detectamos el Primer Aplauso
      {
        delay_ms(100);
       
      }
   }
}

OJO He Cambiado El Valor de Vref que traia Originalmente para adecuarlo a mis Necesidades, Donde Me Quedo Atorado es en las Instrucciones :

- TMR1ON
- !CMCON0.COUT && !TIME_UP
- CMCON0.COUT && !TIME_UP

De Antemano Agradesco Su Ayuda :).
« Última modificación: 05 de Enero de 2020, 22:02:25 por robo_z »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Pasar de MikroC a PIC C Compiler
« Respuesta #1 en: 05 de Enero de 2020, 22:07:34 »
Para cuando T1ON es 0, significa que esta parado el Timer, lo logras con:

Código: C
  1. setup_timer_1 ( T1_DISABLED );

Si queres activarlo, usas el setup timer del comienzo.

Código: C
  1. !CMCON0.COUT

Este va a estar complicado, seguramente sea mejor definir el bit con #BIT, aunque lo mismo podes hacer para lo del timer...

Y respecto al !TIME_UP no tiene nada de CCS.


Desconectado robo_z

  • PIC10
  • *
  • Mensajes: 16
Re:Pasar de MikroC a PIC C Compiler
« Respuesta #2 en: 05 de Enero de 2020, 22:27:50 »
Para cuando T1ON es 0, significa que esta parado el Timer, lo logras con:

Código: C
  1. setup_timer_1 ( T1_DISABLED );

Primeramente muchas gracias por tomarte un tiempo para ayudarme.

Es Cierto TIME_UP, es una Variable pero para el caso de "!CMCON0.COUT" me parece que puede ser asi "!C1OUT" y su equivalente seria "C1OUT != 1", Alguien que me Corrija.

Y para el Caso de "PIR1.TMR1IF = 0" (Limpiar la Bandera del Timer 1) seria "clear_interrupt(int_timer1)"; de igual manera si estoy mal alguien que me corrija.

Nuevamente Muchas Gracias por la Ayuda.

« Última modificación: 05 de Enero de 2020, 22:29:59 por robo_z »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Pasar de MikroC a PIC C Compiler
« Respuesta #3 en: 05 de Enero de 2020, 23:21:21 »
Es correcto, solo necesitas definir ese bit... ya que CCS busca que no toques los registros, pero te da la posibilidad de hacerlo con #BIT y #BYTE


 

anything