hey jongens, ik ben bezig met dit schoolproject waarbij ik nu voor het eerst interupts probeer te gebruiken, hulp van me leraar heb ik hier niet bij (die weet er niks van) dus ik heb een tutorial gevolgd en vervolgens mijn eigen programma geschreven, maar de interupt reageert niet. ik heb me source code hieronder geplakt, rb0=interupt, alle 5Ra pinnen zijn output. iemand die een fout ontdekken kan? ik hoor het graag.
<het is een txt file geworden aangezien het programma er niet uitziet zonder spaties>
http://www.uploadarchief.com/Bestanden/d6baf65e0b240ce177cf70da146c8dc…

Heb je de Global Interrupt Enable (GIE) wel aan staan? En misschien moet de Peripheral Interrup Enable (PIE) ook aan.

Er zal vast wel meer mis zijn, maar met je interrupt maak je een grote fout:
Je processor loopt zijn hoofdprogramma af en dan wordt ie onderbroken door een interrupt. Hij springt in die routine en gaat vrolijk instructies uitvoeren en komt terug met retfie.
Maar je piccie heeft maar 1 WREG/STATUS etc..
Wat denk je dat er gebeurt is met die registers wanneer je terug komt in je hoofdprogramma: die zijn gemold en hij vliegt op tilt.
Bij een interrupt moet je dus altijd die registers als eerste bewaren in een interrupt en als laatste terugzetten.
Dat kan je in elk voorbeeldproggie op het internet zien.
En als je heel brutaal bent kijk je in het datasheet: Hoofdstuk 14, paragraaf 7 waarin het ook uitgelegd wordt.
En probeer geen subroutines aan te roepen vanuit je int. die je ook in je hoofdprogramma gebruikt. Dat lukt alleen als je re-entrant code schrijft en dat is een paar jaartjes verder.

[Bericht gewijzigd door JoWi op ]

Op 25 april 2006 10:33:30 schreef JuuL:
Heb je de Global Interrupt Enable (GIE) wel aan staan? En misschien moet de Peripheral Interrup Enable (PIE) ook aan.

als het programma start gaat hij de reset routine door waar dit staat:
BSF INTCON,7 ;GIE global interupt enabled
BSF INTCON,4 ;INTE RB0 word interupt pin
BCF INTCON,1 ;NA EEN INTERUPT IS DEZE BIT SET EN DOEN ANDERE INTERUPTS HET NIET.
het pie register heeft denk ik niks te zeggen over external interupts.

aan JoWi:
het W register heb ik opgeslagen, status niet, dat zal ik dus ff doen. en ik zal ook een 2de delay routine maken special voor de interupt. ik hoop dat dat helpt, op dit moment gaat het programma vrolijk verder en gaat nooit in interupt.

[Bericht gewijzigd door gohan127 op ]

Wat doet die test op PORTA,SW1 in die delay? Je hebt hem als output gedefinieerd. Probeer je de kortsluitbestendigheid van een PIC te testen ?
En genereer je wel een flank (pull-up weerstandje etc..)
Je kan het gewoon testen in de simulator van MP-LAB (aannemende dat je die gebruikt)

ik gebruik een pull up weerstand ja, en die sw1 in de delay was een fout, ik heb die eruit gehaald, zodra ik er een apparte timer bij gemaakt heb deed hij het. ik denk dat het wel gaat lukken zo. als er nog iets mis gaat zal ik wel een nieuw bericht plaatsen indeze topic.
maar hartstikke bedankt voor jullie hulp, ik ben blij dat ik het aan de praat heb!
btw mijn tutorial is van http://www.mstracey.btinternet.co.uk/pictutorial/progtut12.htm
ze zijn héél duidelijk, alleen staat er niks over het opslaan van het status register, alleen die ene interupt bit word weer terug gezet aan het einde van de interupt.

[Bericht gewijzigd door gohan127 op ]