ADCs dos PICs

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

ADCs dos PICs

Mensagempor lmdmendes » 20 Set 2007 16:19

Eu estou iniciando em PICs, estou a testar a forma de usar os portos ADCs, do 18F452, contudo num programa exemplo, vejo isto:

*****************************************************
*****************************************************
unsigned char ch;
int t;
unsigned short tcc;
char *tc, cflag;
long tlong;

void interrupt()
{
t = Adc_Read(1); // get ADC value from 2nd channel
cflag = 1;
PIR1.TMR1IF = 0;
}


void Display_Adc(int adcval)
{
long longadc;
char ch;

PIR1.TMR1IE = 0;

longadc = adcval * 5000; // use int multiplication instead of long
asm{ // and fill the upper two bytes manually
MOVFF STACK_2, FLOC_Display_Adc+2
MOVFF STACK_3, FLOC_Display_Adc+3
}
adcval = longadc >> 10;
ch = adcval / 1000; // prepare value for diplay

Lcd_Custom_Chr(2, 10, 48 + ch); // write ASCII at 2nd row, 9th column
Lcd_Custom_Chr_CP('.');
ch = (adcval / 100) % 10;
Lcd_Custom_Chr_Cp(48 + ch);

ch = (adcval / 10) % 10;
Lcd_Custom_Chr_Cp(48 + ch);

ch = adcval % 10;
Lcd_Custom_Chr_Cp(48 + ch);
Lcd_Custom_Chr_Cp('V');
PIR1.TMR1IE = 1;

}//~

*****************************************************
Tem mais código, depois
*****************************************************

Quanto ao resultado da operação: PIR1.TMR1IF, sendo PIR1 um registo e TMR1IF um Bit desse registo, compreendo que esta apenas a alterar o dado desse Bit, desse porto.

Mas quanto a outra instruçao semelhante que é:
PIR1.TMR1IE = 1;

Não consigo compreender, pois PIR1 é um Registo e TMR1IE é uma Bit de outro registo diferente.

Afinal o que faz estas operação?

Alguém me pode ajudar?




Um Abraço
lmdmendes
Bit
 
Mensagens: 46
Registrado em: 13 Out 2006 13:29
Localização: Portugal

Re: ADCs dos PICs

Mensagempor SoMeWhErE » 20 Set 2007 16:55

Sou novato ainda, mas vou tentar explicar,

O Bit TRM1IF é o flag sinalizador da interrupção do TIMER1 que é setado quando o contador do TIMER1 estoura, e está localizado no registro PIR1.

No final da interrupção esse flag tem que ser limpo por software, por isso PIR1.TRM1IF = 0.

O Bit TRM1IE é o flag que habilita a interrupção do TIMER1, ou seja, a interrupção somente ocorrerá se esse flag estiver em nivel alto.

No inicio da função void Display_Adc(int adcval) a interrupção do TIMER1 é desabilitada, por isso PIR1.TMR1IE = 0;, para que ela não venha a interferir nessa parte do programa, e continua executando a função e no final volta a ativá-la, por isso PIR1.TMR1IE = 1; nessa parte é permitido que a interrupção interfira no programa.

Axu que é isso, se estiver errado ou cometi algum equivoco, alguem por favor me corrija.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor lmdmendes » 20 Set 2007 17:03

Ok, na situação do PIR1.TRM1IF = 0, compreend q esta a por a "0" o bit desses registo, mas na situação do PIR1.TMR1IE = 1; o que me espanta é q o bit ou flag TMR1IE, não faz parte do registo PIR1, mas sim do registo PIE1.

Dai eu n compreender, pois de o TMR1IE fosse um registo do PIR1, tudo muito bem, estava a por a 1 esse bit q por sua vez corresponde au m flag, agora, como n é n compreendo como funciona essa função.

Um Abraço
lmdmendes
Bit
 
Mensagens: 46
Registrado em: 13 Out 2006 13:29
Localização: Portugal

Mensagempor SoMeWhErE » 20 Set 2007 17:43

Ok, corrigindo o que eu disse, esta certo o bit TRM1IE faz parte do registro PIE1, o que deve ter ocorrido no programa ae, deve ter sido algum erro de digitação.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor lmdmendes » 21 Set 2007 14:59

Pois, tera que ser, pois não tinha grande logica igualar a um valor uma função di tipo "registos_X.Bit_do_registo_=0y" dai perguntei para queria, o mais engraçado é que esse programa exemplo esta a funcionar na perfeição :P

Alguma explicação? ou n será necessario colocar a '1' o bit TMR1IE????
lmdmendes
Bit
 
Mensagens: 46
Registrado em: 13 Out 2006 13:29
Localização: Portugal


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x