hola gente . necesito que me den una mano , necesito cambiar el valor de mi duty de mi pwm por medio de #int_RDA ........ya tengo casi todo listo pero el problema es que el valor que le envió no me lo guarda en la variable que le asigno. estoy usando el ccs y probando en el proteus..acá les dejo el programa haber si ustedes me pueden dar una mano.
#include "D:\Walter\facu\picc\16Frs232\UART.h"
#include <stdlib.h>
#int_RDA
void RDA_isr(void) //Interrupción de recepción de dato por la UART
{
unsigned int adc0; //Declaramos variables a usar.
char ingreso[4];
signed long dato;
signed long dato2;
signed long dato3;
delay_us(200);
dato=getc(); //Recogemos dato recibido.
delay_us(200);
switch(dato){
case '1': output_toggle(PIN_B1); //Cambio el estado del LED1
break;
case '2': output_toggle(PIN_B2); //Cambio el estado del LED2
break;
case 'a': adc0=read_adc(); //Lemos el ADC0
printf("ADC0 %u \n\r",adc0); //Envío el valor del ADC0
printf("Introduce el valor de duty, y pulsa enter:\r ");
gets(ingreso);
dato2=atol(ingreso);
if (dato2>0){// sieldato ingresado es mayor a 0 se guarda en dato3
dato3=dato2;
printf("dato3: %ld \n\r",dato3);
}
else{
printf("dato2: %ld \n\r",dato2);
}
break;
default: break;
}
}
#int_EXT
void ext_isr() //Interrupción RB0
{
printf("Se ha pulsado el boton\n\r"); //Envía un mensaje cuando se pulsa el botón conectado a RB0
delay_ms(200);
}
//Programa principal
void main(){
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(ccp_pwm);
enable_interrupts(INT_EXT);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
{
signed long duty=200lu;
signed long dato3;
puts ("bocha conectado");
//Configuracion de puertos E/S
//SET_TRIS_C(0x00);//Configura el puerto B: 0=Salida; 1=Entrada
//output_c(0x00); //Limpia el registro del puerto
while(TRUE){
//set_adc_channel(0); //selecciona el canal 1 del adc
// delay_us(20);
//duty=read_adc();
//delay_us(20);
printf("dato3 vale: %ld \n\r",dato3);
if (dato3!=duty){ // si el dato3 es dinto a duty este pasa a ser mi nuevo duty
duty=dato3;
set_pwm1_duty(duty);
printf("duty vale: %ld \n\r",duty);
}
else{
//printf("duty vale: %ld \n\r",duty);
set_pwm1_duty(duty);
output_high(pin_c5);//Pone en alto a led
delay_us(100);
output_low(pin_c5);//Pone en bajo a led
delay_us(100);
//printf("el conversor vale %lu\r",duty);
}
}
}
}