Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Interrupt-Problem Kategorie: Programmierung Basic (von erzgebirgler47 - 1.03.2010 18:56)
Ich nutze:
C-Control Pro Mega128
Hallo Mitstreiter,

ich habe ein Problem mit Hardwareinterrupts, die scheinbar nicht richtig abgearbeitet werden.
Das Prog aus den Beispielen erstellt:

'Int 7 auf Port PE7 , Flanke fallend!
#define LF 0x0A
#define CR 0x0D
Dim zaehler1 As Integer
Dim zaehler2 As Integer

Sub Ext_ISR()
'zaehler1=zaehler1 + 1           'interrupts zählen > geht nicht
zaehler1++                           '=zaehler1 + 1 'interrupts zählen >geht auch nicht
zaehler2=Irq_GetCount(INT_7)
End Sub

Sub main()
Dim text(20) As Char
zaehler1 = 0
zaehler2 = 0
Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600)
    AbsDelay(50)
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
Serial_WriteText(0,"Gestartet")
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
'IRQ-Pin auf Eingang setzen
Port_DataDirBit(39,0)  '0=Eingang
'Pullup einschalten
Port_WriteBit(39,1)
'ISR definieren
Irq_SetVect(INT_7,Ext_ISR)
'Mode setzen und aktivieren
Ext_IntEnable(7,2)'Mode Flanke fallend
Serial_WriteText(0,"Int ein")
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
Thread_Delay(10000)'10 sek warten
Ext_IntDisable(7)
Serial_WriteText(0,"Fertig")
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
Serial_WriteText(0,"Zähler1=")
Str_WriteInt(zaehler1,text,0)
Serial_WriteText(0,text)
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
Serial_WriteText(0,"Zähler2=")
Str_WriteInt(zaehler2,text,0)
Serial_WriteText(0,text)
Serial_Write(0,CR)                       ' CR und LF ausgeben
Serial_Write(0,LF)
End Sub

Keine Fehlermeldungen vom Compiler.
Start ĂĽber die Taste Reset/Run.
Mit einem StĂĽck Draht ein paar mal von PE7 auf GND.
Ergebnis im Terminalprog:
Gestartet
Int ein
Fertig
Zähler1=1
Zähler2=229
Das ich in einer so hohen Frequenz schon zittrig bin, war mir gar nicht bewuĂ?t,
aber trotzdem hätte m.E. der Zähler1 mehr als 1 anzeigen müssen. Ich habe beide Arten der
Zählererhöhung probiert. Natürlich Zähler 2 immer unterschiedlich, je nachdem wie zittrig ich
war, aber Zähler1 immer = 1.

Kann mir hier einer helfen?

Mfg
Erzgebirgler47


    Antwort schreiben


Antworten: