Kezdőoldal » Számítástechnika » Programozás » PIC programozás MPLabban....

PIC programozás MPLabban. Egyszerű program, mégsem azt csinálja amit kell, miért?

Figyelt kérdés

#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.



2012. jún. 19. 19:42
 1/5 iostream ***** válasza:

if ( (INTCONbits.TMR0IF) && (INTCONbits.TMR0IE) )


Ha ide beírsz egy || true-t, akkor sem villog?

2012. jún. 19. 20:13
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
Nem...a főprogram meg sem szakítódik. Az a függvény amelyik megszakításkor kéne végrehajtódjon, meg sem hívódik.
2012. jún. 19. 20:24
 3/5 anonim ***** válasza:

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.

2012. jún. 20. 10:21
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
Az "OPTION_REG"-et visszavonom, most látom a típust. :)
2012. jún. 20. 10:28
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

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.

2012. jún. 20. 11:48

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!