Re: Interrupt 2, INT_2 Kategorie: Programmierung Basic (von Klaus - 21.09.2010 17:37) | ||
Als Antwort auf Re: Interrupt 2, INT_2 von Joerg - 21.09.2010 11:48 | ||
| ||
> > 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 > Hallo Jörg Vier I/O's sind dann 1 und vier sind 0. Die 16 Tasten sind in 4 ViererGruppen verschaltet. Egal welche der 16 Tasten betätigt wird, einer der High I/O's wird beim Betätigen einer Taste nach Null gezogen und löst damit den Interrupt aus. Anschlie�end mu� gescannt werden, welche Taste betätigt ist. Das habe ich in dem Programm zu Demonstration des Ext_IntDisable weggelassen. Für Int_1 mu� ich die Interrupt Leitung umlegen. Werde ich eventuell in den nächsten Tagen probieren. Klaus | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum