ei voitu pysäyttää Interrupt

G

garg29

Guest
Hei ystävät,

Seuraavassa koodi en ole käytössä ulkoinen keskeytys vielä prosessori on hyväksyä se En voi ymmärtää, miksi haluta hankkia etsiä: -
Koodi:/ ** Sisältää ********************************************** ************/

# Include <p18cxxx.h>

# Include <stdlib.h># Include "delay.h".

.

.

.

.

.

.

.

.

.

.
extern void _startup (void); / / Katso c018i.c oman C18 kääntäjän dir
//------------------------------------------------ ----------------------------

/ / Ensisijainen keskeyttää vektori# Pragma koodi InterruptVectorHigh = 0x0800

mitätön

InterruptVectorHigh (void)

(

_asm

goto InterruptHandlerHigh / hyppää keskeyttää rutiini

_endasm

)//------------------------------------------------ ----------------------------

/ / Ensisijainen keskeyttää rutiini//------------------------------------------------ ----------------------------

/ / Ensisijainen keskeyttää rutiini# Pragma koodi

# Pragma keskeyttää InterruptHandlerHighmitätön

InterruptHandlerHigh ()

(

jos (INTCONbits.INT0IF)

(

CountPulse ;/ / INTCONbits.PEIE = 1;

/ / INTCONbits.INT0IE = 1;

INTCONbits.INT0IF = 0; / / selvä keskeyttää lippu)

jos (INTCONbits.TMR0IF) / / tarkista TMR0 ylivuoto

(/ / INTCONbits.PEIE = 0;TMR0H = 0xD6;

TMR0L = 0x0C;Display7Segment ();INTCONbits.TMR0IF = 0;

/ / INTCONbits.PEIE = 1;)

)////////////////////////////////////////////////// /////////////.

.

.

.

.

.

.

.

.

.
/ ** JULISTUKSET ********************************************** ****/

# Pragma koodivoid main (void)

(unsigned int i;RCONbits.IPEN = 1;CMCON | = 0x07;

ADCON1 | = 0x0F;

CVRCON = 0;

INTCON2 = 0x04;

OSCCONbits.IOFS = 1;

INTCONbits.INT0IE = 0;

INTCONbits.RBIE = 0;

INTCONbits.RBIF = 0;T0CON = 0x08;

TMR0H = 0x3C;

TMR0L = 0xB0;

INTCONbits.TMR0IF = 0;

INTCONbits.TMR0IE = 1;

T0CONbits.TMR0ON = 1;INTCONbits.PEIE = 0;

INTCONbits.GIE = 1;
TRISA = 0x00;

PORTA = 0x00;

Lata = 0x00;TRISB = 0x01;

PORTB = 0x01;

LATB = 0x01;TRISC = 0x00;

PORTC = 0x00;

LATC = 0x00;TRISD = 0x00;

PORTD = 0x00;

Latd = 0x00;TRISE = 0x00;

PORTE = 0x00;

LATE = 0x00;CountPulse = 0;while (1)

(DataForDisplay (CountPulse);DelayMs (100);) / / End taas

) / / End tärkein
 
Yksi asioista on oikea otsikot ovat:

# Include <p18cxxx.h>

se olisi todellista laitteen tunnus (esim. P18F4550.h tai vastaava).

 
lukemisen helpottamiseksi olen poistanut muuttujaesittelyjä ja näyttö toimii.määrä on työskentely hienosti ja näyttö toimii hyvin vain keskeyttää aiheuttaa ongelman ........................,

 
Kokeile seuraavia sisältä sinun Interrupt rutiini:
jos (INTCONbits.INT0IF & & INTCONbits.INT0IE) sijasta, jos (INTCONbits.INT0IF)

Syy: keskeytä lippu vahvistetaan aina vaikka estää INT0IE ja päästä keskeyttää rutiini kautta voit ajastin keskeyttää (TMR0IF).

Toivottavasti tämä auttaa sinua.

ystävällisin terveisin

 
Kiitos C-Man olin liian miettinyt samaa, mutta ei ollut varma, onko tämä oikea tapa.
Kuten sanoit,

Koodi:

Syy: keskeytä lippu vahvistetaan aina vaikka estää INT0IE ja päästä keskeyttää rutiini kautta voit ajastin keskeyttää (TMR0IF).

 
Ei, tämä ei ole bugi.
Se voi olla varsin hyödyllistä käyttää keskeyttää liput (äänestäen) ja käytä keskeyttää.
Liput ovat aina asetettu kaiken keskeyttää onko keskeyttää käytössä vai ei.
Voit silti käyttää niitä ja niiden selvittäminen.
Kun ymmärrätte tämän, olen varma, että löydät niitä hyödyllisinä melko paljon tilanteita.

 
Ilman tätä ominaisuutta, keskeytykset, jotka saapuvat kun olet huollon toinen keskeyttää olisi menetetty, koska GIE on nollattu (tehty 0), jonka laitteisto tapauksessa keskeyttää.

 

Welcome to EDABoard.com

Sponsor

Back
Top