- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Kleines Problem mit Assembler

  1. #1
    Destroyer
    Gast

    Kleines Problem mit Assembler

    Anzeige

    E-Bike
    ;************************************************* *********************
    ; This file is a basic code template for object module code *
    ; generation on the PIC16F54. This file contains the *
    ; basic code building blocks to build upon. *
    ; *
    ; Refer to the MPASM User's Guide for additional information on *
    ; features of the assembler and linker. *
    ; *
    ; Refer to the respective PIC data sheet for additional *
    ; information on the instruction set. *
    ; *
    ;************************************************* *********************
    ; *
    ; Filename: BioPic_V01.asm *
    ; Date: *
    ; File Version: *
    ; *
    ; Author: *
    ; Company: *
    ; *
    ;************************************************* *********************
    ; *
    ; Files required: P16F54.INC *
    ; *
    ; *
    ; *
    ;************************************************* *********************
    ; *
    ; Notes: *
    ; *
    ; *
    ; *
    ; *
    ;************************************************* *********************

    list p=16F54 ; list directive to define processor
    #include <p16F54.inc> ; processor specific variable definitions

    __CONFIG _CP_ON & _WDT_ON & _HS_OSC

    ; '__CONFIG' directive is used to embed configuration word within .asm file.
    ; The lables following the directive are located in the respective .inc file.
    ; See respective data sheet for additional information on configuration word.

    ;***** VARIABLE DEFINITIONS
    TEMP_VAR UDATA
    HeizTime0 res 1
    HeizTime1 res 1
    Sekunde res 1
    HeizTime3 res 1
    PrellTime res 1


    ;************************************************* *********************
    RESET_VECTOR CODE 0x1FF ; processor reset vector
    goto start

    MAIN CODE 0x000
    start
    Init
    CLRWDT ; Watchdog zurücksetzen
    movlw 0x0C ; Definition für Port A laden
    tris PORTA ; Definitioon in Port A eintragen
    movlw 0x9F ; Definition für Port B laden
    tris PORTB ; Definitioon in Port B eintragen
    movlw 0x07 ; Definition für Option Register laden
    option ; Definitioon in Option eintragen
    CLRWDT ; Watchdog zurücksetzen

    ;==================================
    ;=== ===
    ;=== Hauptporogramm Schleife ===
    ;=== ===
    ;==================================
    Anfang
    goto Schritt_1_abfrage
    CLRWDT ; Watchdog zurücksetzen ; Watchdog zurücksetzen
    goto Anfang

    ;==================================
    ;=== ===
    ;=== Ansteuerung Summer wenn OK ===
    ;=== ===
    ;==================================

    Schritt_1_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt1_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_1

    goto Schritt_1_abfrage

    Schritt1_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_8
    goto Schritt_1_abfrage

    Schritt_2_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt2_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_2
    goto Schritt_2_abfrage

    Schritt2_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_1
    goto Schritt_2_abfrage

    Schritt_3_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt3_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_3
    goto Schritt_3_abfrage

    Schritt3_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_2
    goto Schritt_3_abfrage



    Schritt_4_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt4_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_4
    goto Schritt_4_abfrage

    Schritt4_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_3
    goto Schritt_4_abfrage



    Schritt_5_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt5_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_5
    goto Schritt_5_abfrage

    Schritt5_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_4
    goto Schritt_5_abfrage

    Schritt_6_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt6_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_6
    goto Schritt_6_abfrage

    Schritt6_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_5
    goto Schritt_6_abfrage


    Schritt_7_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt7_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_7
    goto Schritt_7_abfrage

    Schritt7_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_6
    goto Schritt_7_abfrage

    Schritt_8_abfrage
    CLRWDT
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt8_links ; beginne Schritte
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_8
    goto Schritt_8_abfrage

    Schritt8_links
    CLRWDT
    BTfsc PORTB,1 ;Step auf 1?
    goto schritt_7
    goto Schritt_8_abfrage





    schritt_1
    CLRWDT
    BSF PORTA,0
    BCF PORTA,1
    BCF PORTB,5
    BSF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell1
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_2_abfrage
    goto schritt_1

    Schritt_prell1
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_1_abfrage
    goto schritt_1

    schritt_2
    CLRWDT
    BSF PORTA,0
    BCF PORTA,1
    BCF PORTB,5
    BCF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell2
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_3_abfrage
    goto schritt_2

    Schritt_prell2
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_2_abfrage
    goto schritt_2







    schritt_3
    CLRWDT
    BSF PORTA,0
    BSF PORTA,1
    BCF PORTB,5
    BCF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell3
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_4_abfrage
    goto schritt_3

    Schritt_prell3
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_3_abfrage
    goto schritt_3





    schritt_4
    CLRWDT
    BCF PORTA,0
    BSF PORTA,1
    BCF PORTB,5
    BCF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell4
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_5_abfrage
    goto schritt_4

    Schritt_prell4
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_4_abfrage
    goto schritt_4


    schritt_5
    CLRWDT
    BCF PORTA,0
    BSF PORTA,1
    BSF PORTB,5
    BCF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell5
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_6_abfrage
    goto schritt_5

    Schritt_prell5
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_5_abfrage
    goto schritt_5

    schritt_6
    CLRWDT
    BCF PORTA,0
    BCF PORTA,1
    BSF PORTB,5
    BCF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell6
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_7_abfrage
    goto schritt_6

    Schritt_prell6
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_6_abfrage
    goto schritt_6


    schritt_7
    CLRWDT
    BCF PORTA,0
    BCF PORTA,1
    BSF PORTB,5
    BSF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell7
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_8_abfrage
    goto schritt_7

    Schritt_prell7
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_7_abfrage
    goto schritt_7
    schritt_8
    CLRWDT
    BCF PORTA,0
    BCF PORTA,1
    BCF PORTB,5
    BSF PORTB,6
    BTfss PORTB,0 ; Dir auf 0?
    goto Schritt_prell8
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_1_abfrage
    goto schritt_8

    Schritt_prell8
    CLRWDT
    BTfss PORTB,1 ;Step auf 0?
    goto Schritt_8_abfrage
    goto schritt_8



    RETLW 0
    ; remaining code goes here
    END ; directive 'end of program'

  2. #2
    Habe ein Kleines Programm geschrieben eine Art Schrittmotor Treiber
    jedoch scheint das Programm irgendwo einen Fehler zu haben den ich nicht entdecke
    habe an die 4 Ausgänge LEDs gehängt und von Start an Leuchten nur die erste und letzte
    komm daher nicht weiter
    vielleicht kann mir ja hier jemand helfen
    mfg Destro

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Destroyer667 Beitrag anzeigen
    von Start an Leuchten nur die erste und letzte
    Die erste und die letzte LED werden in Schritt 1 gesetzt, also bleibt deine Schrittkette wohl in Schritt 1 hängen. Sorry, wenn ich keinen Spaß am korrigieren Deines Code habe. Als Tipp: ich benutze für solche Fälle den Simulator in MPLAB und takte mich durch die Schritte mit simulierten IO-Pins durch. So kannst du die Software-Schrittkette auch ohne Hardware testen. Ein Flußdiagramm (PAD) mit klarer Übersicht der Schritte und der dazugehörigen Ausgänge und Schaltbedingungen würde vielleicht von vornherein helfen, Fehler zu vermeiden und die Fehlersuche zu erleichtern. Sonst wird einem von dem rauf/runterscrollen in dem unkommentierten Spaghetti-Code schwindelig.

    Möglicherweise liegt abe die Ursache gar nicht in der Software, sondern in der Beschaltung? Auch ein elektrisches Problem könnte verhindern, dass die Takte erkannt werden und die MCU weiterschaltet. Wie ist die Taktung an PORTB,1 (Pin 8 des 16F54) angeschlossen?

    Gruß
    witkatz

    - - - Aktualisiert - - -

    Dein Thread ist als ERLEDIGT markiert, ich vermute, dass es unabsichtlich passiert ist. Wenn das Problem aber wirklich erledigt ist, dann kannst du ja mal schreiben, was die Ursache war.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Damit wir uns nicht falsch verstehen, ich selber habe nicht die Zeit und Muße, dein Code zu testen. Ich kann dir nur mit ein paar vielleicht nützlichen Tipps helfen, dein Code selbst ans laufen zu bringen. Die Kommentare im Quelltext sollen dir selbst helfen dein eigenes Code zu verstehen und Fehlersuche zu erleichtern.
    Zitat Zitat von Destroyer667 Beitrag anzeigen
    Die beiden Eingänge hängen an einem Pullup 10K und werden von mir zurzeit mit einer Drahtbrücke auf Masse geschaltet.
    OK, damit kannst du in jedem Step die Weiterschaltbedingungen manuell vorgeben und überlegen, warum es nicht weiterschaltet. So als Tipp, ich fange neue Projekte meistens mit kleinen Testroutinen z.B. 1Hz Blinken auf allen Ausgängen oder Zuweisung der Eingänge auf Ausgänge. So teste ich, ob die MCU anläuft, die Konfiguration, die Ein- und Ausgänge iO sind.
    Zitat Zitat von Destroyer667 Beitrag anzeigen
    die Ausgänge hängen direkt an 4 LEDs.
    (An Vorwiderstände gedacht?) Das ist ok zum Testen, damit hast du eine Debug-Ausgabe, in welchem Schritt deine MCU vermutlich gerade loopt oder zuletzt war. Jetzt kannst du selbst überlegen, warum die Schrittkette bei Signalwechsel an RB1 nicht weitergeht. Noch anschaulicher ist der Debug-Modus, in dem man alle Zustände der MCU Zeile für Zeile beobachten kann. Ich weiß nicht, ob mit dem PIC16F54 das In-Circuit-Debugging möglich ist. Ich kann dir dafür die Simulation in MPLAB nochmal ans Herz legen.

    - - - Aktualisiert - - -
    @ Destroyer667: Warum hast du deinen letzter Beitrag, aus dem ich zitiert habe ersatzlos gelöscht? Vielleicht hätte noch jemand anders deinen kommentierten Code anschauen und dir Tipps dazu geben können?
    Geändert von witkatz (18.11.2014 um 15:10 Uhr)

  5. #5
    Habe das Problem gefunden^^
    war meine eigene Blödheit der Code läuft hatte nur immer dieselbe TestVersion auf den PIC gespielt und da ging noch nichts
    habe jetzt aber ein anderes Problem oder eher an anliegen....
    Ich möchte gerne die Ausgänge anders belegen
    undzwar möchtie ich gerne PORTB,4 - PORTB,7 als Augänge nutzen
    verstehe nur nicht wie ich die I/Os konfiguriere
    habe im Internet bis jetzt auch noch nichts verlümpftiges dazu gefunden

    danke für die hilfe im Voraus

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Destroyer667 Beitrag anzeigen
    ...verstehe nur nicht wie ich die I/Os konfiguriere...
    Du konfigurierst in deinem Programm die I/Os dieses Mikrocontrollers (PIC16F54) mit dem TRIS-Befehl. Der Befehl ist in dem Datenblatt des Mikrocontrollers genau beschrieben.

Ähnliche Themen

  1. Kleines Problem mit dem Ansteuern 3er L293D
    Von PsychoElvis64 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 17.12.2006, 20:00
  2. Kleines Problem mit Motor
    Von cb01 im Forum Mechanik
    Antworten: 10
    Letzter Beitrag: 31.07.2006, 17:47
  3. Kleines Problem mit der Uhrzeit-Anzeige
    Von OEP im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 14.11.2005, 19:15
  4. Kleines Problem mit Daten über RS232 einlesen, input get...
    Von RCO im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 30.10.2004, 16:11
  5. Kleines Problem mit der Fernsteuerung
    Von Maro im Forum Robby CCRP5
    Antworten: 9
    Letzter Beitrag: 15.08.2004, 17:35

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests