void main() { unsigned int leitura; ANSEL = 0x51; // GP0 como porta analógica CMCON0 = 7; // Desabilita comparadores ADCON0 = 0x00; // Desativa comparadores GPIO = 0x00; // Saídas = 0 TRISIO.GP0 = 1; // Entrada TRISIO.GP2 = 0; // Sáida (PWM) PR2 = 255; // Contagem timer2 CCPR1L = 0; // Ininica duty cycle = 0 // Habilitação do timer2 com prescaler 1:16 (relacionado com a frequência do PWM) T2CON.TMR2ON = 1; T2CON.T2CKPS1 = 1; T2CON.T2CKPS0 = 1; // Ativação do modo PWM CCP1CON.CCP1M3 = 1; CCP1CON.CCP1M2 = 1; while(1){ leitura = ADC_Read(GP0); // Leitura de RA0 delay_ms(150); CCPR1L = leitura >> 2; // 8 MSB do duty cyle CCP1CON.DC1B1 = leitura && 0x02; // 2º LSB do duty cyle CCP1CON.DC1B0 = leitura && 0x01; // 1º LSB do duty cyle } }