Ir ao conteúdo
  • Cadastre-se

Interrupção TIMER1, compilador C18


carlos.camj

Posts recomendados

Ola pessoal,

Estou iniciando um curso de microcontrolador, e fiz um programa em c com compilador c18, utilizando a interrupção do TIMER1, e esta dando um erro dizendo que as PORDTbits não estão identificado.

O program é este.

#include <p18f4520.h>

//Frequencia do oscilador 8Mhz.

//Ciclo de maquina 1/(FOSC/4) = 0,5us.

#pragma config OSC = HS //Habilita oscilador a cristal.

#pragma config WDT = OFF //Desabilita Watchdog Timer (WDT).

#pragma config PWRT = ON //Habilita power-up timer (PWRT).

#pragma config BOREN = ON //Habilita Brown-out reset.

#pragma config BORV = 1 //Tensão de BOR igual a 4,33V.

#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital

#pragma config LVP = OFF //Desabilita low voltage progam.

int conta_RD0, conta_RD1_1, conta_RD2_1, conta_RD3_1, conta_RD1_0, conta_RD2_0, conta_RD3_0 = 0;

#pragma code int_pr = 0x000008 //Vetor de interrupção de alta prioridade.

#pragma interrupt trata_TIMER1 /*Define trata_TIMER1 como rotina de tratamento da

...da interrupcao TIMER1*/

void trata_TIMER1(void)

{

PORTDbits. RD0 = 1; //Ascende led do RD0;

{

conta_RD0 ++; //Incrementa conta_RD0.

conta_RD1_1 ++; //Incrementa conta_RD1_1.

conta_RD2_1 ++; //Incrementa conta_RD2_1.

conta_RD3_1 ++; //Incrementa conta_RD3_1.

conta_RD1_0 ++; //Incrementa conta_RD1_0.

conta_RD2_0 ++; //Incrementa conta_RD2_0.

conta_RD3_0 ++; //Incrementa conta_RD3_0.

}

if(conta_RD1_1 >= 2) //Se conta_RD1 for igual a 2.

{

PORDTbits. RD1 = 1; //Ascende led do RD1.

}

if(conta_RD2_1 >= 3) //Se conta_RD2 for igual a 3.

{

PORTDbits. RD2 = 1; //Ascende led do RD2.

}

if(conta_RD3_1 >= 4) //Se conta_RD3 for iguala a 4.

{

PORDTbits. RD3 = 1; //Ascende led do RD3.

}

if(conta_RD3_0 >= 5) //Se conta_RD3_0 for maior igual.

{

PORDTbits.RD3 = 0; //Apaga led do RD3.

}

if(conta_RD2_0 >= 6) //Se conta_RD2_0 for maior igual.

{

PORTDbits. RD2 = 0; //Apaga led do RD2.

}

if(conta_RD1_0 >=7 ) //Se conta_RD1_0 for maior igual.

{

PORTDbits. RD1 = 0; //Apaga led de RD1.

}

if(conta_RD0 >= 8) // Se conta_RD0 for maior igual.

{

PORTDbits. RD0 =0; //Apaga led de RD0.

conta_RD1_1 = 0; //Zera conta_RD1_1.

conta_RD2_1 = 0; //Zera conta_RD2_1.

conta_RD3_1 = 0; //Zera conta_RD3_1.

conta_RD1_0 = 0; //Zera conta_RD1_0.

conta_RD2_0 = 0; //Zera conta_RD2_0.

conta_RD3_0 = 0; //Zera conta_RD3_0.

}

PIR1bits. TMR1IF = 0; //Limpa o flag da interrupção do TIMER1.

TMR1L = 0xFF; //Valor incial para para os registradores do TIMER1 = 65526

TMR1H = 0xF6;

}

void main()

{

TRISD = 0x00; //configura toda porta D como saida.

PORTD = 0x00; //Zera toda porta D dos leds.

T1CON = 0b00000111; /*RD16 = 0 -> Leitura e escrita em 8 bits

T1RUN = 0

T1CKPS1 e T1CKPS0 = 0 -> prescaler 1:1

T1OSCEN = 0 -> osilador externo desabilitado

T1SYNC = 1 -> sincronismo desligado

TMR1CS = 1 -> incremento pelo sinal externo via RC0 na borda de subida

TMR1ON = 1 -> habilita operação do TIMER1 */

PIE1bits.TMR1IE = 1; //Habilita interrupção do TIMER1.

INTCONbits. GIEH = 1; //Habilita interrupção global.

INTCONbits. PEIE = 1; //Habilita interrupção dos perifericos.

TMR1L = 0xFF; //Valor incial para para os registradores do TIMER1 igual 65526.

TMR1H = 0xF6;

while(1);

}

Link para o comentário
Compartilhar em outros sites

Carlos,a palavra 'PORDTbits',não é uma palavra reservada do compilador.

Ou voce reserva algum siginificado para ela ou voce escreveu errado.

Como parece que voce escreveu errado,para os PORTs a palavra seria(no caso PORTD),'PORTDbits'


#include <p18f4520.h>

//Frequencia do oscilador 8Mhz.
//Ciclo de maquina 1/(FOSC/4) = 0,5us.

#pragma config OSC = HS //Habilita oscilador a cristal.
#pragma config WDT = OFF //Desabilita Watchdog Timer (WDT).
#pragma config PWRT = ON //Habilita power-up timer (PWRT).
#pragma config BOREN = ON //Habilita Brown-out reset.
#pragma config BORV = 1 //Tensão de BOR igual a 4,33V.
#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital
#pragma config LVP = OFF //Desabilita low voltage progam.

int conta_RD0, conta_RD1_1, conta_RD2_1, conta_RD3_1, conta_RD1_0, conta_RD2_0, conta_RD3_0 = 0;

#pragma code int_pr = 0x000008 //Vetor de interrupção de alta prioridade.
#pragma interrupt trata_TIMER1 /*Define trata_TIMER1 como rotina de tratamento da
...da interrupcao TIMER1*/
void trata_TIMER1(void)
{
PORTDbits. RD0 = 1; //Ascende led do RD0;
{
conta_RD0 ++; //Incrementa conta_RD0.
conta_RD1_1 ++; //Incrementa conta_RD1_1.
conta_RD2_1 ++; //Incrementa conta_RD2_1.
conta_RD3_1 ++; //Incrementa conta_RD3_1.
conta_RD1_0 ++; //Incrementa conta_RD1_0.
conta_RD2_0 ++; //Incrementa conta_RD2_0.
conta_RD3_0 ++; //Incrementa conta_RD3_0.
}

if(conta_RD1_1 >= 2) //Se conta_RD1 for igual a 2.
{
PORTDbits.RD1 = 1; //Ascende led do RD1.
}

if(conta_RD2_1 >= 3) //Se conta_RD2 for igual a 3.
{
PORTDbits. RD2 = 1; //Ascende led do RD2.
}

if(conta_RD3_1 >= 4) //Se conta_RD3 for iguala a 4.
{
PORTDbits. RD3 = 1; //Ascende led do RD3.
}

if(conta_RD3_0 >= 5) //Se conta_RD3_0 for maior igual.
{
PORTDbits.RD3 = 0; //Apaga led do RD3.
}

if(conta_RD2_0 >= 6) //Se conta_RD2_0 for maior igual.
{
PORTDbits. RD2 = 0; //Apaga led do RD2.
}

if(conta_RD1_0 >=7 ) //Se conta_RD1_0 for maior igual.
{
PORTDbits. RD1 = 0; //Apaga led de RD1.
}

if(conta_RD0 >= 8) // Se conta_RD0 for maior igual.
{
PORTDbits. RD0 =0; //Apaga led de RD0.
conta_RD1_1 = 0; //Zera conta_RD1_1.
conta_RD2_1 = 0; //Zera conta_RD2_1.
conta_RD3_1 = 0; //Zera conta_RD3_1.
conta_RD1_0 = 0; //Zera conta_RD1_0.
conta_RD2_0 = 0; //Zera conta_RD2_0.
conta_RD3_0 = 0; //Zera conta_RD3_0.
}


PIR1bits. TMR1IF = 0; //Limpa o flag da interrupção do TIMER1.
TMR1L = 0xFF; //Valor incial para para os registradores do TIMER1 = 65526
TMR1H = 0xF6;
}


void main()
{

TRISD = 0x00; //configura toda porta D como saida.
PORTD = 0x00; //Zera toda porta D dos leds.


T1CON = 0b00000111; /*RD16 = 0 -> Leitura e escrita em 8 bits
T1RUN = 0
T1CKPS1 e T1CKPS0 = 0 -> prescaler 1:1
T1OSCEN = 0 -> osilador externo desabilitado
T1SYNC = 1 -> sincronismo desligado
TMR1CS = 1 -> incremento pelo sinal externo via RC0 na borda de subida
TMR1ON = 1 -> habilita operação do TIMER1 */


PIE1bits.TMR1IE = 1; //Habilita interrupção do TIMER1.
INTCONbits. GIEH = 1; //Habilita interrupção global.
INTCONbits. PEIE = 1; //Habilita interrupção dos perifericos.


TMR1L = 0xFF; //Valor incial para para os registradores do TIMER1 igual 65526.
TMR1H = 0xF6;


while(1);

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!