tnt.fet
23-08-2011, 11:55 AM
#include <p18f46k20.h>
#pragma config FOSC = HS, WDTEN = OFF, PBADEN = OFF, MCLRE = ON, LVP = OFF
char id = 0;
void main(void);
void init_timer0();
void interrupt_handler(void);
void main(void)
{
TRISD = 0x00;
LATD = 0x00;
INTCON = 0x20; //disable global and enable TMR0 interrupt
INTCON2 = 0x84; //TMR0 high priority
RCONbits.IPEN = 1; //enable priority levels
TMR0H = 0; //clear timer
TMR0L = 0; //clear timer
T0CON = 0x82; //set up timer0 - prescaler 1:8
INTCONbits.GIEH = 1; //enable interrupts
while(1);
}
#pragma code interrupt_vector = 0x08
void interrupt_vector(void)
{
_asm
goto interrupt_handler
_endasm
}
#pragma interrupt interrupt_handler
void interrupt_handler(void)
{
INTCONbits.TMR0IF=0;
id++;
if(id==2)
{
id = 0;
LATD++;
}
}
Ai gải thích dùm em mỗi dòng trong đoạn code trên với ạ. Đoạn này dùng trong nháy 7Led. Em đang học VDK p18f46k20 mà lại vướng mắc ở phần interrgupt và timer.
#pragma config FOSC = HS, WDTEN = OFF, PBADEN = OFF, MCLRE = ON, LVP = OFF
char id = 0;
void main(void);
void init_timer0();
void interrupt_handler(void);
void main(void)
{
TRISD = 0x00;
LATD = 0x00;
INTCON = 0x20; //disable global and enable TMR0 interrupt
INTCON2 = 0x84; //TMR0 high priority
RCONbits.IPEN = 1; //enable priority levels
TMR0H = 0; //clear timer
TMR0L = 0; //clear timer
T0CON = 0x82; //set up timer0 - prescaler 1:8
INTCONbits.GIEH = 1; //enable interrupts
while(1);
}
#pragma code interrupt_vector = 0x08
void interrupt_vector(void)
{
_asm
goto interrupt_handler
_endasm
}
#pragma interrupt interrupt_handler
void interrupt_handler(void)
{
INTCONbits.TMR0IF=0;
id++;
if(id==2)
{
id = 0;
LATD++;
}
}
Ai gải thích dùm em mỗi dòng trong đoạn code trên với ạ. Đoạn này dùng trong nháy 7Led. Em đang học VDK p18f46k20 mà lại vướng mắc ở phần interrgupt và timer.