PIC programozás MPLabban. Egyszerű program, mégsem azt csinálja amit kell, miért?
#include <p18f4620.h>
#pragma udata access UNear
#pragma idata access INear
near unsigned char Tick_100ms = 0;
void ISRHighHandler( void );
#pragma interrupt ISRHighHandler
void HandleTMR0Tick( void );
#pragma code ISRHighVector=0x0008
#pragma code
void ISRHighVector( void )
{
_asm
GOTO ISRHighHandler
_endasm
}
void ISRHighHandler( void )
{
if ( (INTCONbits.TMR0IF) && (INTCONbits.TMR0IE) )
{
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 0;
TMR0L = TMR0L;
TMR0H += 0x85;
TMR0L += 0xEE;
Tick_100ms = 1;
INTCONbits.TMR0IE = 1;
}
}
void HandleTMR0Tick( void )
{
LATDbits.LATD0 = !LATDbits.LATD0;
}
void main ()
{
TRISDbits.TRISD0 = 0;
T0CON = 0b10000100;
TMR0H = 0x85;
TMR0L = 0xEE;
INTCON2bits.TMR0IP = 1;
INTCONbits.TMR0IE = 1;
while (1)
{
if ( Tick_100ms )
{
Tick_100ms = 0;
HandleTMR0Tick();
}
}
}
Szintaktikailag helyes a program, csak nem azt csinálja amit kéne. A D0-s lábára kötött led kéne villogjon, de csak felgyúl. A főprogram meg sem szakítódik. Miért?...első megszakításos programom. Csak próbából írtam. Megköszönném ha segítene valaki.
if ( (INTCONbits.TMR0IF) && (INTCONbits.TMR0IE) )
Ha ide beírsz egy || true-t, akkor sem villog?
Csak tippek:
- OPTION_REG, INTCON, stb. regiszterek jól vannak beállítva? (Mindegyik bitet ellenőrizd.)
- Próbáld ki a timert és a megszakítást valami sokkal egyszerűbb progival.
Megvan a hiba. A "#pragma code " a "void ISRHighHandler( void ) " elé kell. És még a Global Interrupt Enable-t is egyre kellett állítsam.
Köszönöm a segítségeteket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!