ADCs dos PICs

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
*****************************************************
*****************************************************
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