Forum: Mikrocontroller und Digitale Elektronik Problem mit 16F627


von Manuel Fellner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich habe folgendes Problem:
Ich möchte im folgenden Programmteil die Betriebszeit einstellen.
Das soll so funktionieren: Wenn Sch1 an RA0 gedrückt wird,  soll der
Wert in der Adresse 0x22 (Zeit) um 5 erhöht werden. Das soll dann die
Betrieszeit von 5 bis 30 min sein. Damit man weiß, welche Zeit gerade
eingestellt ist, werden Leds eingeschaltet. z.B. 5min = Led1, 10 min =
Led2, usw.
Soweit die Theorie.
Wenn ich es mit MPLAB SIM durchlaufen lasse, funktioniert alles.
In der Praxis sieht es so aus:
Wenn ich den Taster drücke, leuchtet die Led1, wenn ich den Taster
wieder loslasse, geht die Led wieder aus.
Kann man in die Adresse 0x22 nicht einfach Zahlen hineinschreiben und
wieder abfragen? Habe das Gefühl, dass der Wert nicht gespeichert
wird.

Hier die wichtigsten Programmteile:

list      p=16f627            ; list directive to define processor
  #include <p16f627.inc>        ; processor specific variable
definitions
.
.
.
 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC &
_MCLRE_OFF & _LVP_OFF
.
.
.
Zeit  Equ  0x22  ; Zeitspeicher Betriebszeit
.
.
.
Reset  movlw  B'00000111'  ;Komperator ausschalten
    movwf  CMCON
    bsf    STATUS,RP0  ;In das Register Bank 1 schalten
    clrf  INTCON    ;Interrupts ausschalten
    movlw  B'00000000'
    movwf  TRISB    ;Alle RB Ports sind Ausgänge
    movlw  B'11111111'
    movwf  TRISA    ;Alle RA Ports sind Eingänge
    bsf     OPTION_REG, INTEDG ; 0-1-Flanke an RB0
    bcf    STATUS,RP0  ;Zurückschalten auf Bank 0
    clrf  PORTB
      bsf     INTCON, INTE       ; RB0-interupt erlauben
        bcf     INTCON, GIE        ; Interrupt generell nicht erlauben

;*********************************************************
; Zeit einstellen: 5min, 10min, 15min, 20min, 25min, 30min
time     movlw  D'0'
    movwf  Zeit
    movlw  B'00011110'
    movwf  PORTB
time1  btfsc  PORTA, Sch2  ;Starttaster überprüfen
    goto  Start
    btfss  PORTA, Sch1  ;Zeittaster überprüfen
    goto  time1
    movlw  D'5'
    addwf  Zeit,1    ;5 in Zeit schreiben
    movlw  D'5'
    subwf  Zeit,0    ;Zeit minus 5
    btfss  STATUS,Z  ;nächste Zeile wird übersprungen, wenn Zero-Flag = 
1
    goto  LED2
    movlw  B'00110110'  ;LED1
    movwf  PORTB
LED2  movlw  D'10'
    subwf  Zeit,0
    btfss  STATUS,Z
    goto  LED3
    movlw  B'01010110'  ;LED2
    movwf  PORTB
LED3  movlw  D'15'
    subwf  Zeit,0
    btfss  STATUS,Z
    goto  LED4
    movlw  B'10010110'  ;LED3
    movwf  PORTB
LED4  movlw  D'20'
    subwf  Zeit,0
    btfss  STATUS,Z
    goto  LED5
    movlw  B'00101110'  ;LED4
    movwf  PORTB
LED5  movlw  D'25'
    subwf  Zeit,0
    btfss  STATUS,Z
    goto  LED6
    movlw  B'01001110'  ;LED5
    movwf  PORTB
LED6  movlw  D'30'
    subwf  Zeit,0
    btfss  STATUS,Z
    goto  LED1
    movlw  B'10001110'  ;LED6
    movwf  PORTB
LED1;  goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  Wai100
    goto  time1

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.