Página 1 de 1

Como checar flag de interrupção em pic18 no ccs?

MensagemEnviado: 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?

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

MensagemEnviado: 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

MensagemEnviado: 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

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

Ric

MensagemEnviado: 01 Dez 2006 09:18
por Renie
Olá Marcelo!

PIR1 é 0xF9E e não 0xF6E!

MensagemEnviado: 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.

+++

MensagemEnviado: 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