Autor Tema: Pasar de lenguaje C a PIC BASIC pic 16f877a  (Leído 1788 veces)

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

Desconectado GM-23

  • PIC10
  • *
  • Mensajes: 1
Pasar de lenguaje C a PIC BASIC pic 16f877a
« en: 15 de Diciembre de 2013, 01:59:53 »
hola, me gustaría saber si alguien me pudiera ayudar en pasar este código a pic basic puesto que apenas estoy familiarizado con el lenguaje para pic basic en microcontroladores y no se manejar en C.
este es el cod.
sbit bit_PWM at RB0_bit;
unsigned int PWM=0;
unsigned int Pulso_PWM=0;
unsigned int valor=0;
const float numero=0.195;

void interrupt() {
if(TMR0IF_bit){
 Pulso_PWM++;              //contador de interrupciones cada 10us
 if(Pulso_PWM==2000){      //si llega a 20ms
  Bit_PWM=1;
  Pulso_PWM=0;
  }
 if(Pulso_PWM==PWM){       //si Pulso_PWM es igual a PWM
  Bit_PWM=0;
  }
 TMR0=255;                 //cargamos TMR0 con 255
 TMR0IF_bit=0;             //salimos de interrupcion
}
}

void main() {
ADCON1=0;           //Activo las entradas analógicas
PORTB=0;            // Puerto B como salida
TRISB=0x00;
PORTA=0;            // Puerto A como entrada
TRISA=0x01;
OPTION_REG=0x83;    //prescaler del TMR0 = 1:16
GIE_bit=1;          // activamos las interrupciones globales
TMR0IE_bit=1;       // activamos interrupcion del TMR0
TMR0IF_bit=0;       // borramos el flag de desbordamiento del TMR0
TMR0=255;           //cargamos el TMR0=255 para generar 10us

while(1){
 valor=ADC_read(0);   // leemos el canal analógico 0
 valor=numero*valor;  // multiplicamos el valor de ADC por 0.195
 valor=valor+50;
 PWM=valor;           // cargamos la variable PWM con el valor calculado
 }
}

De antemano, muchas gracias

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Pasar de lenguaje C a PIC BASIC pic 16f877a
« Respuesta #1 en: 15 de Diciembre de 2013, 19:34:38 »
Te lo paso al basic del PicSimulatorIDE, no es el tuyo pero ya tienes un principio.

Código: [Seleccionar]
'sbit bit_pwm at rb0_bit;
Symbol bit_pwm = RB0
'unsigned int pwm=0;
Dim pwm As Word
pwm = 0
'unsigned int pulso_pwm = 0;
Dim pulso_pwm As Word
pulso_pwm = 0

'unsigned int valor = 0;
Dim valor1 As Word
Dim valor As Single
valor = 0

'Const float numero = 0.195;
Const numero = 0.195

void_main:  '() {
ADCON1 = 0  '; / / activo las entradas analógicas
PORTB = 0  '; / / puerto b como salida
TRISB = 0x00  ';
PORTA = 0  '; / / puerto a como entrada
TRISA = 0x01  ';
OPTION_REG = 0x83  '; / / prescaler del TMR0 = 1: 16
INTCON.GIE = 1  'gie_bit = 1  '; / / activamos las interrupciones globales
INTCON.TMR0IE = 1  'tmr0ie_bit = 1  '; / / activamos interrupcion del TMR0
INTCON.TMR0IF = 0  'tmr0if_bit = 0  '; / / borramos el flag de desbordamiento del TMR0
TMR0 = 255  '; / / cargamos el TMR0 = 255 para generar 10us

Dim x As Byte
While x = x  '{
Adcin 0, valor1  '(Adcin solo permite enteros)'valor = adc_read(0)  '; / / leemos el canal analógico 0
valor = numero * valor1  '; / / multiplicamos el valor de adc por 0.195
valor = valor + 50  ';
pwm = valor  '; / / cargamos la variable pwm con el valor calculado
Wend  '}

End  '}                                          
On Interrupt
If INTCON.TMR0IF = True Then
pulso_pwm = pulso_pwm + 1  '; / / contador de interrupciones cada 10us
If pulso_pwm = 2000 Then  '{ / / si llega a 20ms
bit_pwm = 1  ';
pulso_pwm = 0  ';
Endif
If pulso_pwm = 1 Then  '){       //si pulso_pwm es igual a pwm
bit_pwm = 0  ';
Endif
TMR0 = 255  ';                 //cargamos TMR0 con 255
INTCON.TMR0IF = 0  ';             //salimos de interrupcion
Endif
Resume
Saludos desde Granada, España.