Ola!
Fui no datasheet do seu microcontrolador e o procedimento que ele indica é esse aqui.
Pagina 127 seção 11.0
1. Configure the A/D module:
• Configure analog pins/voltage reference and
digital I/O (ADCON1)
• Select A/D input channel (ADCON0)
• Select A/D conversion clock (ADCON0)
• Turn on A/D module (ADCON0)
3. Wait the required acquisition time.
4. Start conversion:
• Set GO/DONE bit (ADCON0)
5. Wait for A/D conversion to complete by either:
• Polling for the GO/DONE bit to be cleared
(interrupts disabled); OR
• Waiting for the A/D interrupt
6. Read A/D Result register pair
(ADRESH:ADRESL), clear bit ADIF if required.
7. For the next conversion, go to step 1 or step 2
as required. The A/D conversion time per bit is
defined as TAD.
Recomendo que você crie algumas funções tais como:
- Código: Selecionar todos
inicializa_modulo_ad();
unsigned int le_ad(unsigned char canal); /*essa função retorna o valor do respectivo canal*/
vão simplificar sua vida rs...
Não gosto de trabalhar com interrupção de canal analógico, lembro que alguns amigos diziam que atrasava muito o microcontrolador, podendo ele até travar, não sei se é verdade, portanto prefiro sempre criar uma rotina que eu faço a atualização por demanda e não por interrupção de conversão.... Não sei qual o seu Objetivo.
Com as conversões dos sinais analógicos funcionando como você estipula, faça um rotina que apresente o valor adc cru, é a hora de dar inicio a configuração da porta serial.
Na pagina 110 do seu datasheet para você ver as configurações da sua porta serial, configure ela do jeito que você quer, transmitir/receber/baud rate/ data bits e pariedade essas coisas.
O importante lembrar que a porta serial só suporta um byte por transmissão, então para enviar os valores você terá de quebrar o valor da conversão. e transmiti-lo
No caso:
- Código: Selecionar todos
unsigned int valor_adc;
unsigned char temp
adc_valor = le_ad(1);
temp = valor_adc>> 8; // joga parte alta do valor do adc na variavel temp
transmite_uart(temp); // envia a parte alta de temp
temp = valor_adc; // joga parte baixa de valor_adc em temp
transmite_uart(temp); // envia a parte baixa
Quaisquer duvidas, tamos aew!