@PicNick
Den INT-Pin am M128 habe ich nicht explizit als Eingang definiert.
Der folgende Code läuft fast richtig:
Fast deshalb, weil nach ein paar Tastendrücken der Port 0 desCode:' TestInt5.bas ' ------------ ' PCF 8574 : P0 <- Taster gegen GND ' P4 -> grüne LED -> R -> VCC ' P5 -> gelbe LED -> R -> VCC ' P5 -> rote LED -> R -> VCC ' INT -> 10K -> VCC ' ' M128 :PE5 (INT5) <- CD4050 <- INT von PCF8574 $regfile = "m128def.dat" $hwstack = 64 $framesize = 64 $swstack = 64 $crystal = 16000000 'Quarzfrequenz 16 MHz $baud = 19200 'Baudrate COM1 $baud1 = 19200 'Baudrate COM2 Const PCF_Adr = &H40 Dim PCF_Port As Byte Dim B As Byte Dim i As Integer Config Sda = Portd.1 Config Scl = Portd.0 I2cinit 'I2C-Bus initialisieren Waitms 250 '1.Hardware UART 'keine Definition notwendig (Ausgaben mit einfachem Print möglich) '2.Hardware UART Open "Com2:" For Binary As #1 'alle LED's aus (invertiertes Schalten) PCF_Port = &B11111111 I2CSend PCF_Adr , PCF_Port Config Int5 = Rising On Int5 INT5_ISR Enable Interrupts Enable Int5 i = 0 Print #1 , "Start ..." Do Print #1 , i ; "->" ; Bin(PCF_Port) 'Tastenstatus lesen I2CReceive PCF_Adr , PCF_Port 'gelbe LED an Port P5 einschalten PCF_Port.5 = 0 I2CSend PCF_Adr , PCF_Port Waitms 250 'grüne LED an Port P4 einschalten PCF_Port.4 = 0 I2CSend PCF_Adr , PCF_Port Waitms 250 'gelbe & grüne LED aus PCF_Port.5 = 1 PCF_Port.4 = 1 I2CSend PCF_Adr , PCF_Port Waitms 500 Loop Close #1 End 'Service-Routine für INT5 INT5_ISR: Incr i 'Tastenstatus lesen, mit entprellen I2CReceive PCF_Adr , PCF_Port Waitms 50 I2CReceive PCF_Adr , B If PCF_Port.0 = B.0 then 'rote LED an Port P6 umschalten Toggle PCF_Port.6 I2CSend PCF_Adr , PCF_Port End if Return
PCF8574 (also der Port, wo der Taster angeschlossen ist) immer
auf 0 stehen bleibt ... also kein Interrupt mehr ausgelöst wird.
Grundsätzlich kann' s doch nicht so schwer sein .... Kann jemand
vielleicht noch mal über den Code schauen?
Gruß: - Reinhard -







Zitieren

Lesezeichen