Wenn die Taste gedrückt wird, soll ins Unterprogramm verzweigt werden, wenn die Taste ruht, dann soll nichts passieren.
Dann auf jden Fall den Start Adc weglassen. Das startet eine Analog-Digital-Wandlung, die du gar nicht brauchst und die auch gar nicht näher initialisiert ist. Keine Ahnung, was so passiert...
In den Unterprogrammen auf keinen Fall alle Bits von Portb setzen, sondern nur das Bit, dessen zugehörigen Ausgang du setzen willst. Sonst schaltest du bei den Eingängen die Pullup-Widerstände, die du zuvor mühsam gesetzt hast, wieder aus.
Also z.B. Portb.3 = 1
Also folgendermaßen:
Code: Alles auswählen
$hwstack = 20 'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny13.DAT"
$crystal = 128000 'Frequenz des internen Oszillators
Config Portb = &B00011000 'Pinb.4+3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B00000110 'Ausgänge auf Low setzen
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
Wdtcr = &B11010011 'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts 'Interrupts freigeben
Do
Reset Watchdog
Powerdown
If Pinb.1 = 0 Then
Gosub A
End If
If Pinb.2 = 0 Then
Gosub B
End If
Loop
A:
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Return
B:
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Return
End
