Página 1 de 1
Como checar flag de interrupção em pic18 no ccs?

Enviado:
30 Nov 2006 12:36
por Marcelo_SP
Olá pessoal;
Como faço para chegar um flag de interrupção na família 18f?
Por exemplo, o bit ccp1if, que está no registro pir1, que tem o endereço F6Eh?? No datasheet constam 8 bits com falgs, mas o registro tem 16.
[]´s
Marcelo
Re: Como checar flag de interrupção em pic18 no ccs?

Enviado:
30 Nov 2006 12:44
por andre_luis
usa #INTxxxx, dá na mesma....

Enviado:
30 Nov 2006 14:05
por ric_vas
Algo assim:
#byte PIR1 = 0xF6E
#bit CCP1IF= PIR1.0
Agora pode usar o CCP1IF. Verifique os valores e posições certas para os dados acima, não sei qual o processador você está usando, é apenas um exemplo.
Ric

Enviado:
01 Dez 2006 07:16
por Marcelo_SP
Olá
Estou usando o 18F452
Fiz as definições:
cpp code
#byte PIR1 = 0xF6E
#bit CCP1IF= PIR1.2
um teste desta forma:
cpp code
if (ccp1if) output_low (pin_b0)
else output_high (pin_b0)
Simulando no mplab e alterando o registro PIR1 o pino pin_b0 não muda de estado, ficando sempre em 1.
Tem mais algum ajuste?
[]´s
Marcelo

Enviado:
01 Dez 2006 07:31
por ric_vas
Se possível, coloque o restante do código para ajudar.
Ric

Enviado:
01 Dez 2006 09:18
por Renie
Olá Marcelo!
PIR1 é 0xF9E e não 0xF6E!

Enviado:
01 Dez 2006 09:52
por andre_luis
Pessoal,
A grande virtude do CCS é voce não precisar mais manipular registreadores.
É tudo feito por funçoes API ou vetor de interrupção.
Voce pode 'literalmente' programar sem sequer conhecer o datasheet do uC.
+++

Enviado:
04 Dez 2006 11:10
por leoabubauru
Quando vc faz
#INT_CCP1
void TRATA_INTCCP1 (void)
{
DISABLE_INTERRUPTS(INT_CCP1); // evita que outra int de CCP1 acontece sem terminar o tratamento da atual
faz alguma coisa;
ENABLE_INTERRUPTS(INT_CCP1); // reabilita int de CCP1
{
vc não precisa ter acesso ao flag. O código acima diz ao compilador que a rotina que está após #INT_CCP1 é a interrupção do CCP1. O CCS mascara tudo e vc evita os testes de flag... Verifique o HELP e procure por #INT_xxxx e por ENABLE_INTERRUPTS();
Abraço
Laercio