Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MPLAB program w asm - pomocy

sys-kom 11 Sty 2010 13:29 1290 2
  • #1 11 Sty 2010 13:29
    sys-kom
    Poziom 12  

    Mam program napisany w asm . i nie bardzo go rozumiem

    Czy ktoś może mi to troszkę wytłumaczyć

    jest to cześć programu do testowania płytki z silniczkiem ,

    na dobrą sprawę nie wiem czy program jest napisany poprawnie , z innymi częściami dałem sobie rade ale z tą mam problem





    generalnie nie rozumiem komendy BTFSC


    proszę o wyrozumiałość ale do tej pory to ja używałem tylko bascoma do Atmeli


    Global MOTORTEST ;Programm zum Testen des Motors

    ; Daten-Variablen


    ;**********************************************************************
    ;* externe Variablen-Deklarationen *
    ;**********************************************************************

    ; Programm-Variablen:

    EXTERN TIMER2_WAIT ;Programm zum Warten bis Zeit abgelaufen

    ; Daten-Variablen


    ;**********************************************************************
    ;* Include-Dateien *
    ;**********************************************************************

    #include "P16F877a.INC" ;Register-Definitionen
    #include "PORTS.INC" ;Port-Definitionen

    ;**********************************************************************
    ;* Register-Adressen *
    ;**********************************************************************

    gpr0 UDATA

    ;**********************************************************************
    ;* Programm zum Testen des Motorausgangs und der Reed-Sensoren *
    ;**********************************************************************

    SUBR CODE

    ; Initialisiere Motoransteuerung auf "Aus"

    MOTORTEST:

    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    BSF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BSF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen



    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    BCF PIEZO_PORT,PIEZO_BIT ;Lösche Piezo-Ansteuerung
    CLRW ;Lade Wartezeit
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen





    ; Prüfen ob Riegel hinten = 0, Riegel vorn = 0, Tuer = 0, Batterie = 0

    BTFSS SWITCH_PORT,RIEGEL_HINTEN ;Skip, wenn Riegel hinten = 1 zamkniety
    BTFSC SWITCH_PORT,RIEGEL_VORN ;Skip, wenn Riegel hinten = 0 zamkniety
    GOTO MOTORTEST ;Springe im Fehlerfall
    BTFSS SWITCH_PORT,BATTERIE ;Skip, wenn Batterie = 1
    BTFSC SWITCH_PORT,TUER ;Skip, wenn Türkontakt = 0
    GOTO MOTORTEST ;Springe im Fehlerfall

    ; Hilfsausgang auf 1 setzen

    BSF PIEZO_PORT,PIEZO_BIT ;Setze Piezo-Ansteuerung
    CLRW ;Lade Wartezeit
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    ; Prüfen ob Riegel hinten = 1, Riegel vorn = 1, Tuer = 1, Batterie = 0

    BTFSC SWITCH_PORT,RIEGEL_HINTEN ;Skip, wenn Riegel hinten = 0 otwarty
    BTFSS SWITCH_PORT,RIEGEL_VORN ;Skip, wenn Riegel hinten = 1 otwarty
    GOTO MOTORTEST ;Springe im Fehlerfall
    BTFSS SWITCH_PORT,BATTERIE ;Skip, wenn Batterie = 1
    BTFSS SWITCH_PORT,TUER ;Skip, wenn Türkontakt = 1
    GOTO MOTORTEST ;Springe im Fehlerfall

    ; Setze Motor Zufahren

    BSF MOTOR_PORT,MOTOR_ZU ;Setze Motor zu
    CLRW ;Lade Wartezeit
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    ; Prüfen ob Riegel hinten = 0, Riegel vorn = 1, Tuer = 1, Batterie = 1

    BTFSS SWITCH_PORT,RIEGEL_HINTEN ;Skip, wenn Riegel hinten = 1
    BTFSS SWITCH_PORT,RIEGEL_VORN ;Skip, wenn Riegel hinten = 1
    GOTO MOTORTEST ;Springe im Fehlerfall
    BTFSC SWITCH_PORT,BATTERIE ;Skip, wenn Batterie = 0
    BTFSS SWITCH_PORT,TUER ;Skip, wenn Türkontakt = 1
    GOTO MOTORTEST ;Springe im Fehlerfall

    ; Setze Motor Auffahren & Zufahren

    BSF MOTOR_PORT,MOTOR_AUF ;Setze Motor auf
    CLRW ;Lade Wartezeit
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    ; Prüfen ob Riegel hinten = 0, Riegel vorn = 0, Tuer = 1, Batterie = 0

    BTFSS SWITCH_PORT,RIEGEL_HINTEN ;Skip, wenn Riegel hinten = 1
    BTFSC SWITCH_PORT,RIEGEL_VORN ;Skip, wenn Riegel hinten = 0
    GOTO MOTORTEST ;Springe im Fehlerfall
    BTFSS SWITCH_PORT,BATTERIE ;Skip, wenn Batterie = 1
    BTFSS SWITCH_PORT,TUER ;Skip, wenn Türkontakt = 1
    GOTO MOTORTEST ;Springe im Fehlerfall

    ; Setze Motor Auffahren

    BCF MOTOR_PORT,MOTOR_ZU ;Lösche Motor zu
    CLRW ;Lade Wartezeit
    CALL TIMER2_WAIT ;Wartenzeit ablaufen lassen

    ; Prüfen ob Riegel hinten = 1, Riegel vorn = 0, Tuer = 1, Batterie = 1

    BTFSC SWITCH_PORT,RIEGEL_HINTEN ;Skip, wenn Riegel hinten = 0
    BTFSC SWITCH_PORT,RIEGEL_VORN ;Skip, wenn Riegel hinten = 0
    GOTO MOTORTEST ;Springe im Fehlerfall
    BTFSC SWITCH_PORT,BATTERIE ;Skip, wenn Batterie = 0
    BTFSS SWITCH_PORT,TUER ;Skip, wenn Türkontakt = 1
    GOTO MOTORTEST ;Springe im Fehlerfall

    ; Prüfsequenz abschliessen

    BCF MOTOR_PORT,MOTOR_AUF ;Lösche Motor auf
    BCF PIEZO_PORT,PIEZO_BIT ;Lösche Piezo-Ansteuerung
    RETURN ;Rücksprung
    END

    0 2
  • #2 11 Sty 2010 15:58
    michalko12
    Specjalista - Mikrokontrolery

    sys-kom napisał:


    generalnie nie rozumiem komendy BTFSC


    Przeskocz jeśli bit w rejestrze jest wyzerowany.

    PRZESKOCZ to znaczy nie wykonuj następnej instrukcji tylko jeszcze następną.

    BTFSC x,y
    CALL xx
    BCF z,v

    CALL wykona tylko jeśli bit y w rejestrze x będzie równy 1

    0
  • #3 11 Sty 2010 18:07
    sys-kom
    Poziom 12  

    Dziękuję , bardzo mi to pomogło

    0