Shock Media

Navigatie

Interrupt 16F628A

Forum > Digitaal > Interrupt 16F628A
Naam Bericht
dutchmania

Hallo,

ik ben al een tijdje bezig met de microcontrollers maar krijg de werking en de instellingen van Interrupts nog niet door,

ik heb de datasheet van de 16F628A al door gekeken maar wordt hier ook niet echt wijzer van...

ik wil als eerste test gewoon een ledje laten knipperen en als ik een schakelaar indruk moet een ander ledje gaan knipperen, Heeft iemand nog een voorbeeld programma liggen of kan iemand even voor mij wat in elkaar knutselen...

alvast bedankt,
Mike

ps. Ik weet dat dit het zoveelste topic is maar het is mij nog niet duidelijk.
MMSoft

Er zijn diverse 'dingen' die een interupt kunnen veroorzaken.

Het gaat dus over een input interrupt.

Zoek eens in de datasheet naar register INTCON
en kijk dan bij de bit's INTE en INTF
[Bericht gewijzigd door MMSoft op 28 augustus 2008 18:13:54]
Geregistreerd mikroC gebruiker
crazyhellos

Ik weet niet welke taal je gebruikt, maar ik zelf picbasic
en dit is een stukje dat ik gebruik als ik verandering
van poort een interrupt wil laten verookzaken.

code:
ON_INTERRUPT GoTo Interrupt_Handler
 
;Soorten interrupten en flags die benaming krijgen  
Symbol RBIF = INTCON.0 ' RB Port Interrupt Flag
Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol RBIE = INTCON.3 ' RB Port Change Interrupt Enable
Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7  ' Global Interrupt Enable

;Waarden van de interrupten en flags
RBIF = 0
INTF = 0
T0IF = 0
RBIE = 1
INTE = 0
T0IE = 0
PEIE = 0
GIE = 1

GoTo Hoofdprogramma


'Interrupt routine start 
Interrupt_Handler:
   Context SAVE	   		  	   			  ;Alle geheugen opslaan
   If PORTB.5 = 0 Then
      Inc Speed                 		  ;Teller verhogen       
      RBIE = 0							  ;Interrupt uitzetten
	  ontdender = Ontdenderloops 		  ;Ontdender instellen
   ElseIf PORTB.6 = 0 Then
      Inc Auto  	  	  	  	          ;Automatische fadesnelheid
	  RBIE = 0							  ;Interrupt uitzetten
	  Teller = Auto + 6
	  ontdender = Ontdenderloops		  ;Ontdender instellen
   EndIf
	  
      RBIF = 0	  						  ;Interruptflag legen
	  
   While RBIF = 1						  ;Zolang interruptflag nog de
         RBIF = 0						  ;waarde een heeft hier blijven
   Wend	 	  							  ;tot deze echt leeg is
    Context Restore


En onderaan of waar je wilt zet je de ontdender weer terug
zodat de interrupt weer wordt ingeschakelt. Dat kan bv zo

code:
If ontdender > 1 Then				      ;Als ontdender nog geen 1 is dan
		Dec ontdender					  ;min 1 
	ElseIf ontdender = 1 Then			  ;Als ontdender 1 is dan de 
		RBIF = 0		 				  ;interruptflag 0 maken en de 
		RBIE = 1		   				  ;interrupt weer inschakelen
	EndIf


Misschien heb je er iets aan
Zoeken in topic