TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: GM-23 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
-
Te lo paso al basic del PicSimulatorIDE, no es el tuyo pero ya tienes un principio.
'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