STATUS re-curtain W


+ Reply to Thread
Results 1 to 6 of 6
  1. #1
    zugvogel1's Avatar
    zugvogel1 Guest

    Question STATUS re-curtain W

    STATUS re-curtain W and

    needs still help with these order.

    bcf INTCON,INTF
    swapf STATUS_TEMP,W
    movwf STATUS
    SWAPF W_TEMP,F
    SWAPF W_TEMP,W
    retfie

  2. #2
    Join Date
    Mar 2004
    Location
    San Antonio, Texas
    Posts
    9

    Default

    I'm not sure what you are trying to do. If you are trying save the registers in your interrupt routine then here is how I do it.


    movwf _w_save ; Save W register
    swapf STATUS,W ; Swap status to be saved into W
    movwf _s_save ; Save STATUS register
    movfw PCLATH
    movwf _p_save ; Save PCLATH


    place your clr interrupt flag and other code here

    Then restore registers before returning from interrupt

    movfw _p_save
    movwf PCLATH ; Restore PCLATH
    swapf _s_save,W
    movwf STATUS ; Restore STATUS register - restores bank
    swapf _w_save,F
    swapf _w_save,W ; Restore W register
    Last edited by Dick M; - 12th February 2005 at 21:11.

  3. #3
    Join Date
    Feb 2004
    Location
    Germany
    Posts
    762

    Default

    Zugvogel1 & Dick M,

    This is the Pic Basic Pro Category on the Pic Basic Forum.

    What you are discussing here should be in the Off Topic category.

    Zugvogel1

    Why are you starting a new thread every time you have a question regarding a topic you have already posted?
    regards

    Ralph

    _______________________________________________
    There are only 10 types of people:
    Those who understand binary, and those who don't ...
    _______________________________________________



  4. #4
    zugvogel1's Avatar
    zugvogel1 Guest

    Question

    Hello Ralf

    I did not want to have help asm-Befehle know whether for these two variables also this can write in pic Basic.

    F var byte
    W var byte

    or whether there are other commands for that.

    A lot thanks to already once

  5. #5
    zugvogel1's Avatar
    zugvogel1 Guest

    Default isr

    ;Interupt Service Routine ISR

    Meine frage ist ob mann in Pic-Basic die Interupt Service Routine ISR
    so auch einleiten muß oder nicht

    ;Saving STATUS and W

    @ movwf W_TEMP ; W-Register Retten
    @ swapf STATUS,W ; Status-Reg. -> w
    @ movwf STATUS_TEMP ; Status-Reg. Retten

    ......mein code

    und so beenden muß

    @ swapf STATUS_TEMP,W ; in w-Register
    @ movwf STATUS ; w -> Status
    @ SWAPF W_TEMP,F ; W_TEMP -> W, ohne..
    @ SWAPF W_TEMP,W ; .. Z-Flag zu aendern

    retfie
    --------------------------------------------------------




    Service ;Interupt routine ISR

    Mine is asked whether mann in pic Basic the service Interupt must introduce routine ISR or not

    STATUS ;Saving W and

    @ movwf W_TEMP
    @ swapf STATUS,W
    @ movwf STATUS_TEMP

    ... ... my code

    and end

    @ swapf STATUS_TEMP,W
    @ movwf status
    @ SWAPF W_TEMP,F
    @ SWAPF W_TEMP,W

    retfie

  6. #6
    zugvogel1's Avatar
    zugvogel1 Guest

    Default s88.ASM

    Ich werde deine Tip (PICtron) annehmen bin neu hier muß noch lernen.

    Also wie gesagt ich möchte gern mit meinem neuen
    compiler mal rum spielen und will dieses einfache files auf picbasic mal umstellen.

    s88.ASM im anhang

    s88.bas

    und soweit bin ich schon vorgetrungen nun komme ich aber nicht weiter

    ;---------Files Assignment

    SYMBOL C = STATUS.0 ' Carry bit
    ;PortA
    SYMBOL RA0 = PORTA.0 ' Bi-directional I/O port
    SYMBOL RA1 = PORTA.1 ' Bi-directional I/O port
    SYMBOL RA2 = PORTA.2 ' Bi-directional I/O port
    SYMBOL RA3 = PORTA.3 ' Bi-directional I/O port
    SYMBOL RA4 = PORTA.4 ' Bi-directional I/O port
    SYMBOL RA5 = PORTA.5 ' Bi-directional I/O port
    SYMBOL RA6 = PORTA.6 ' Bi-directional I/O port
    SYMBOL RA7 = PORTA.7 ' Bi-directional I/O port
    ;PortB
    SYMBOL B_CLK = PORTB.0 ' Bi-directional I/O port
    SYMBOL B_OUT = PORTB.1 ' Bi-directional I/O port
    SYMBOL B_LED = PORTB.2 ' Bi-directional I/O port
    SYMBOL B_IN = PORTB.6 ' Bi-directional I/O port
    SYMBOL B_PS = PORTB.7 ' Bi-directional I/O port
    ;INTCON
    SYMBOL RBIF = INTCON.0 ' RB Port Interrupt Flag
    SYMBOL INTF = INTCON.1 ' RB0 External Interrupt Flag
    SYMBOL T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
    SYMBOL RBIE = INTCON.3 ' RB Port Change Interrupt Enable
    SYMBOL INTE = INTCON.4 ' RB0 External Interrupt Enable
    SYMBOL T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
    SYMBOL PEIE = INTCON.6 ' Peripheral Interrupt Enable
    SYMBOL GIE = INTCON.7 ' Global Interrupt Enable
    ;CMCON
    SYMBOL CM0 = CMCON.0 ' Comparator mode selection bits
    SYMBOL CM1 = CMCON.1 ' Comparator mode selection bits
    SYMBOL CM2 = CMCON.2 ' Comparator mode selection bits
    SYMBOL CIS = CMCON.3 ' Comparator Input Switch
    SYMBOL C1INV = CMCON.4 ' Comparator 1 output inversion
    SYMBOL C2INV = CMCON.5 ' Comparator 2 output inversion
    SYMBOL C1OUT = CMCON.6 ' Comparator 1 output
    SYMBOL C2OUT = CMCON.7 ' Comparator 2 output
    ;OPTION_REG
    SYMBOL PS0 = OPTION_REG.0 ' Prescaler Rate Select
    SYMBOL PS1 = OPTION_REG.1 ' Prescaler Rate Select
    SYMBOL PS2 = OPTION_REG.2 ' Prescaler Rate Select
    SYMBOL PSA = OPTION_REG.3 ' Prescaler Assignment
    SYMBOL T0SE = OPTION_REG.4 ' TMR0 Source Edge Select
    SYMBOL T0CS = OPTION_REG.5 ' TMR0 Clock Source Select
    SYMBOL INTEDG = OPTION_REG.6 ' Interrupt Edge Select
    SYMBOL NOT_RBPU = OPTION_REG.7 ' PORTB Pull-up Enable

    bit0 var R_DATEN.0 ;ist bit0 von R_DATEN
    bit1 var R_DATEN.1 ;ist bit1 von R_DATEN
    bit2 var R_DATEN.2 ;ist bit2 von R_DATEN
    bit3 var R_DATEN.3 ;ist bit3 von R_DATEN
    bit4 var R_DATEN.4 ;ist bit4 von R_DATEN
    bit5 var R_DATEN.5 ;ist bit5 von R_DATEN
    bit6 var R_DATEN.6 ;ist bit6 von R_DATEN
    bit7 var R_DATEN.7 ;ist bit7 von R_DATEN

    R_DATEN var Byte

    ASM
    R_DATEN equ 20h ; fuer Speichern der Daten und Schieben
    R_OLD equ 25h ; Register for old values
    R_FLAG equ 26h ; Register for flags

    F_PS_RDY equ d'1' ; Ready-Flag

    W_TEMP equ h'40' ; saving W-Register
    STATUS_TEMP equ h'41' ; saving Status-Register

    ;------------Bit Assignment

    ;B_PS equ d'7' ; Port B, PS-Eingang
    B_OUT equ d'1' ;Output ; Port B, Data-OUT
    ;B_IN equ d'6' ; Port B, Data-IN
    ;A_LED equ d'2' ;Output ; Port A, LED-Ansteuerung
    ;B_CLK equ d'0' ; Port B, Clock
    endasm

    goto start
    ;--------Service Routine ISR
    @ org 0004h ; Interupt Vector

    ; ----- Saving STATUS and W ----------------------
    @ movwf W_TEMP ; W-Register Retten
    @ swapf STATUS,W ; Status-Reg. -> w
    @ movwf STATUS_TEMP ; Status-Reg. Retten

    ; ----- IR IB0-Change (negative Edge) ------------
    IF INTF = 0 then
    goto ir_2
    else
    InTF = 0
    endif
    @ btfss R_DATEN,0 ; sofort Ausgabe des
    @ bsf PORTB,B_OUT ; .. Bits #0 von
    @ btfsc R_DATEN,0 ; .. R-Daten an
    @ bcf PORTB,B_OUT ; .. DATA_OUT (invertiert)

    If B_CLK <>1 then
    B_LED =0
    else
    toggle B_LED
    endif
    If B_PS =0 then gosub lesen
    if B_in <> 1 then
    C =1
    Else
    C =0
    Endif
    @ rrf R_DATEN,F ; Daten nachschieben (invertiert)

    ; ----- IR by Timer 0 (idle-state) ------------
    ir_2:
    IF T0IF = 0 then
    goto posret
    else
    T0IF =0
    Endif
    PORTA = ~PORTA ;alle Bits werden invertiert

    ; ----- Restore STATUS and W ---------------------
    posret:
    InTF = 0
    @ swapf STATUS_TEMP,W ; in w-Register
    @ movwf STATUS ; w -> Status
    @ SWAPF W_TEMP,F ; W_TEMP -> W, ohne..
    @ SWAPF W_TEMP,W ; .. Z-Flag zu aendern

    retfie

    ;--------Programm
    @ org 0060h ; Position des Programms

    start:
    ;-------------Konfiguration PORTS

    B_CLK =1
    PortB = %11111111
    TRISB = %11000001
    TRISA = %11111111
    CMCON =%00000111
    OPTION_REG =%10000111
    T2CON =%00000000
    INTCON =%11110000
    PIE1 =%00000000

    ;-------------Main Loop

    loop:
    CLEARWDT ; Watchdog-Timer loeschen
    if B_PS =1 then goto loop2 ; if PS = 1
    @ btfsc R_FLAG,F_PS_RDY ; and PS_RDY not set
    goto loop
    @ movf R_OLD,W ; .. the reload old values
    @ movwf R_DATEN ;
    @ bsf R_FLAG,F_PS_RDY ; .. set FLAG PS_RDY
    goto loop
    loop2:
    @ bcf R_FLAG,F_PS_RDY ; if PS = LOW reset PS_RDY
    goto loop


    ;---------Routine:lesen

    lesen:
    @ clrf R_DATEN
    IF RA2 =1 then
    Bit0 =0
    Else
    ;Bit0 =1
    @ bsf R_DATEN,0
    endif
    IF RA3 =1 then
    Bit1 =0
    Else
    ;Bit1 =1
    @ bsf R_DATEN,1
    endif
    IF RA4 =1 then
    Bit2 =0
    Else
    ;Bit2 =1
    @ bsf R_DATEN,2
    endif
    IF RA5 =1 then
    Bit3 =0
    Else
    ;Bit3 =1
    @ bsf R_DATEN,3
    endif
    IF RA6 =1 then
    Bit4 =0
    Else
    ;Bit4 =1
    @ bsf R_DATEN,4
    endif
    IF RA7 =1 then
    Bit5 =0
    Else
    ;Bit5 =1
    @ bsf R_DATEN,5
    endif
    IF RA0 =1 then
    Bit6 =0
    Else
    ;Bit6 =1
    @ bsf R_DATEN,6
    endif
    IF RA1 =1 then
    Bit7 =0
    Else
    ;Bit7 =1
    @ bsf R_DATEN,7
    endif

    @ movf R_DATEN,W
    @ movwf R_OLD

    return

    END


    so und gehts nicht weiter in files.
    ich wollte noch die resrlichen befehle mit @....
    umwandeln in Pic-Basic

    dank an alle
    Attached Files Attached Files

Similar Threads

  1. Does I2CREAD/I2CWRITE check for bus status?
    By EToscano in forum Serial
    Replies: 4
    Last Post: - 16th October 2009, 17:43
  2. Problem with 16f88 steep motor control
    By ken_23 in forum Off Topic
    Replies: 0
    Last Post: - 4th July 2008, 13:25
  3. rfPIC Serin problem
    By gavo in forum mel PIC BASIC Pro
    Replies: 52
    Last Post: - 11th March 2008, 18:52
  4. PIC16F877A - Timer0 won't interrupt
    By WishMaster^ in forum mel PIC BASIC Pro
    Replies: 19
    Last Post: - 25th April 2007, 09:25
  5. Xin/Xout Status Request
    By JackPollack in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 22nd March 2007, 01:09

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts