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

Re: Interrupt 2, INT_2 Kategorie: Programmierung Basic (von Joerg - 21.09.2010 11:48)
Als Antwort auf Interrupt 2, INT_2 von Klaus - 20.09.2010 21:56
Ich nutze:
C-Control Pro Mega128
> Hallo
>
> Ich verwende die Mega32 für eine eigene Anwendung mit dem
> Project Board und IDE1.71. (Nur auf einem Rechner läuft
> überhaupt noch WindowsME, das nicht mt den neueren IDE Versionen
> zusammen arbeiten will.)
>
> Die Tastatur(en) sind über PCF8574 angeschlossen. Durch
> einen Tastendruck wird zunächst ein Interrupt ausgelöst, der das
> Programm zum Erkennen der betätigten Taste startet.
>
> Damit über den I2C Bus andere Anwendungen ungestört bearbeitet
> werden können, möchte ich den Interrupt unterbinden, wenn der Bus
> belegt ist. Dazu wollte ich das Kommando Ext_IntDisable(2) benutzen.
> Das scheint aber nicht zu funktionieren, wie das unten stehende
> Programm zeigt. Ist der Interrupt 2 einmal aktiviert, kann er nicht
> mehr abgeschaltet werden.
>
> Ist das Verhalten mit den neuen IDE Versionen anders?
> Liegt ein Fehler vor?
>
> Klaus
>
>
> Dim Text(30) As Char
> Dim irqcnt As Byte
>
> Sub Zeiten()
> Text ="doch anders"
> irqcnt = Irq_GetCount(2)
>
> End Sub
>
> Sub main()
> ' Definition Interrupt Eingang
>  Port_DataDirBit(10,0)  'Interrupt Eingang
>  Port_WriteBit(10,1)    'interner Pullup eingeschaltet
>
>  I2C_Init(I2C_100kHz)
>  Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD19200)
>  AbsDelay (50)
>
>  ' Interrupt definieren
>  Irq_SetVect(2,Zeiten)
>  Ext_IntEnable(2,0) 'Interrupt 2, fallende Flanke
>
> '  PCF8574 vorbereiten für externen Interrupt
> '  Tastendruck erzeugt Interrupt
>  I2C_Start()
>  I2C_Write(70)      'eingestellte Adresse
>  I2C_Write(&H0F)    'setzen für fallende Flanke = Interrupt
>  I2C_Stop()
>
>  Text ="Text soll gleich bleiben"
> ' externer Interrupt wird abgeschaltet
>  Ext_IntDisable(2)
>
>     Do
>         Serial_WriteText(0,Text)
>         Serial_Write(0,&H0D)
>         Serial_Write(0,&H0A)
>     Loop While True
> End Sub
> /*
> Ergebnis vor Druck auf Taste des Tastatur
>
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> Text soll gleich bleiben
> doch anders
> doch anders
> doch anders
> doch anders
>
> Ext_IntDisable verhindert nicht, daÃ? der Sprung ins Interrupt
> Programm "Zeiten" stattfindet.
>
> */
>


Hallo Klaus,

ich plane zurzeit auch den Einsatz des PCF8574 und die Benutzung des Interrupts.
Daher interessiert mich das ganze. In dem Datenblatt steht,
das bei jeder �nderung am Eingang (fallende oder steigende Flanke) ein Interrupt ausgelöst wird.

Ich verstehe die folgende Anweisung und dessen Kommentar nicht:

I2C_Write(&H0F)    'setzen für fallende Flanke = Interrupt

Anhand des Befehls würde ich sagen,  du setzt die 4 unteren Bits auf High,
damit Du sie über einen Taster nach Null ziehen kannst.
Aber was hat das mit einen fallenden Interrupt zu tun?

Ich würde mal das Demo für EXT_INT1 nehmen,
und dort den Befehl Ext_IntDisable einbauen und sehen, wie es sich verhält.

Grü�e Jörg



    Antwort schreiben


Antworten:

Re: Interrupt 2, INT_2 (von Klaus - 21.09.2010 17:37)