16F84, IRQ's und Sleep

Gast #35531
Lesenswert?

Hi,

ich habe nur die externen IRQ's belegt. Habe dabei den normalen ext. IRQ 
und den Upper 4 Pin IRQ aktiviert. Geht leider nicht. Wenn ich in einer 
Endlosschleife laufe, dann komme ich in die IRQ Routine rein. Im Sleep 
Mode nicht. Ich möchte damit eine Fernbedienung bauen. Möchte aber 
zeitgleich keine große ext. Hardware haben. Soll eine Fernbedienung für 
den Schlüsselbund mit max. 5 Tasten werden. Somit würden die 5 IRQ 
Leitungen reichen und ich bräuchte nur die Taster als ext. Hardware. Im 
Sleep Mode reicht die Batterie dann auch 10 mal so lange.

Gruß Binnesmann
Gast #35532
Lesenswert?

Hallo,
das geht  sogar aus mehreren Zuständen herraus! Einer davon ist der gut
zu nutzende Change On Port IRQ auf Portb. Allerdings ist zu beachten,
daß das Anlaufen dauert (bis zu Sekunden). Mit dem  Scope mal den Osz
Pin beobachten und die Zeit ablesen.
Steht aber alles im Datenblatt gut beschrieben.

MfG  Manfred Glahe
Gast #35534
Lesenswert?

Habe endlich meinen Internetzugang wieder hinbekommen.

;Pic Initialisierung
    org     0      ;Programmstart

    jmp  Init

    org  4      ;Start nach Interrupt

    jmp  senden

Init    mov     !ra,#00000b    ;Port A Ausgabe
    mov     !rb,#0ffh    ;Port B Eingabe
    mov     ra,#00000b    ;Port A alles low
    mov     rb,#00h                 ;Port B alles low

    setb  ActivLED    ;Ich bin wach
    setb  DataOut      ;Breakpegel beenden

    mov  TasteRet,#00h
    clrb  INTCON.0    ;Upper 4 Bits / Port B Interruptflag
    clrb  INTCON.1    ;Ext. IRQ Flag
    clrb  INTCON.2    ;RTCC Overflowflag
    setb  INTCON.3    ;PortB Interrupt zulassen
    setb  INTCON.4    ;Externen Interrupt zulassen
    clrb  INTCON.5    ;RTCC Interrupt disable
    clrb  OPTION.6    ;Externen Interrupt bei Wechsel von High nach Low
    setb  INTCON.7    ;Interupts zulassen

    clrb    ActivLED    ;Ich geh wieder schlafen

    sleep

In der Routine mache ich nichts anderes als die Initialisierung. Das
klappt auch alles wenn ich statt dem sleep eine Endlosschleife
reinsetze. In dieser Version lande ich allerdings nie in der
Interruptroutine.

Gruß Binnesmann

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren