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

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

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

Mensagempor Marcelo_SP » 30 Nov 2006 12:36

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
Marcelo_SP
Nibble
 
Mensagens: 92
Registrado em: 27 Out 2006 07:21

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

Mensagempor andre_luis » 30 Nov 2006 12:44

usa #INTxxxx, dá na mesma....
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor ric_vas » 30 Nov 2006 14:05

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
ric_vas
Nibble
 
Mensagens: 93
Registrado em: 11 Out 2006 22:22
Localização: RS

Mensagempor Marcelo_SP » 01 Dez 2006 07:16

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
Marcelo_SP
Nibble
 
Mensagens: 92
Registrado em: 27 Out 2006 07:21

Mensagempor ric_vas » 01 Dez 2006 07:31

Se possível, coloque o restante do código para ajudar.

Ric
ric_vas
Nibble
 
Mensagens: 93
Registrado em: 11 Out 2006 22:22
Localização: RS

Mensagempor Renie » 01 Dez 2006 09:18

Olá Marcelo!

PIR1 é 0xF9E e não 0xF6E!
[]'s
Renie
-------------------------------------------------------------------------------------------------------------
Meu velho site com eletrônica praticamente parado http://www.reniemarquet.com
Nosso Blog http://artemadeiraevida.blogspot.com.br
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor andre_luis » 01 Dez 2006 09:52

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.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor leoabubauru » 04 Dez 2006 11:10

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
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo


Voltar para PIC

Quem está online

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

cron

x