- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: PIC syntax - help needed!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    Zürich
    Beiträge
    50

    PIC syntax - help needed!

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Ich habe vor 3 Tagen PICs kennengelernt, habe mir das Board K8048 besorgt und schon einige kleine Programme geschrieben (hatte vor 15 Jahren mal ein wenig Assembler gelernt). Diese konnte ich auch erfolgreich 'brennen' und laufen lassen.

    Zu meiner komischen Frage - was bedeutet die folgende Syntax, insbesondere das Zeichen '^':

    bcf TRISB ^ 0x080, 1 ; Enable RB1 for Output

    Kann ich das auch anders schreiben?

    Ich benutze die gputils mit gpsim und PikDev, PIC ist 16F627

    --
    Danke für jegliche Hilfe!
    Sami

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich kann nur raten, Standard ist das nicht.
    TRISB ist in der Bank1 . vielleicht ist der Assembler ein ganz Gescheiter
    und denkt sich da was dabei. Keine Doku da ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    Also die richtige Syntax dafür ist eigentlich:

    Code:
    bcf TRISB,1
    wobei TRISB durch ein beliebiges Register ausgetauscht werden kann (z.B. PORTB, PORTA, TRISA,...) und die "0" gibt das Bit an, welches Gesetzt werden soll.

    Code:
    bcf TRISB ^ 0x080, 1 ; Enable RB1 for Output
    Das hab ich noch nie gesehen, noch nichtmal bei Beispiel-Codes von Microchip!! *g*
    Allerdings würde es mich mal interresieren ob das bei dir funktioniert.

    Ach nochwas der Befehl alleine "Enabled" nicht RB1 als Ausgang, wenn du nicht vorher die richtige Bank für TRISB ausgewählt hast....

    Gruß
    Stefan

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    Zürich
    Beiträge
    50
    Der code läuft, macht was ich will. Hier ist das gesamt code segement:


    bsf STATUS, RP0 ; switch to bank1
    bcf TRISB ^ 0x80, 0 ; set on port B pin 0 as output
    bcf STATUS, RP0 ; switch back to bank0
    movlw b'00000001' ;set bit 0 high in work reg
    movwf PORTB ; move work reg to PORTB

    Wie kann ich das denn noch schreiben, d.h. ohne das Zeichen '^'

    --
    Vielen Dank für die Hilfe.
    Gruss
    Sami

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    Zürich
    Beiträge
    50
    Wenn ich es folgendermassen schreibe dann bekomme ich eine Fehlermeldung:

    bsf STATUS, RP0
    bcf TRISB,1
    bcf STATUS, RP0
    movlw b'00000000'
    movwf PORTB

    Fehlermeldung ist:
    template.asm:93:Message [302] Register in operand not in bank 0. Ensure bank bits are correct.

    --
    Danke für jegliche Hilfe.
    Sami

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    02.05.2005
    Beiträge
    67
    Muss das nicht heißen:

    bsf STATUS, RP0 ; auf Bank 1 umschalten
    movlw B'00000000' ; PortB alle output
    movwf TRISB
    bcf STATUS, RP0 ; auf Bank 0 schalten

    Hab ich von sprut.de

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    jepp, ist keine Fehlermeldung, sondern nur eine Warnung. Funktionieren tut es normalerweise schon.

    Ich glaub wenn du folgendes in den Quellcode eingibst müsste die Meldung unterdrückt werden.

    Code:
    ERRORLEVEL      -302        ;SUPPRESS BANK SELECTION MESSAGES
    keine Ahnung warum der Assembler die Meldung immerwieder ausspuckt, obwohl es eigentlich stimmt. Macht er bei mir auch.
    Naja...

    Viel Spaß beim noch beim rumspielen!

    Gruß
    Stefan

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    ach nochwas.....das von Sprut stimmt eigentlich fast immer...*ggg*

    bsf STATUS, RP0 ; auf Bank 1 umschalten
    movlw B'00000000' ; PortB alle output
    movwf TRISB
    bcf STATUS, RP0 ; auf Bank 0 schalten
    Das ist eigentlich Ok, eine bessere und "schnellere" möglichkeit wäre noch diese:

    Code:
    bsf STATUS, RP0 ; auf Bank 1 umschalten 
    clrf TRISB
    bcf STATUS, RP0 ; auf Bank 0 schalten

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    Zürich
    Beiträge
    50
    Korrket, es ist eine Warnung, alles läuft normal und wenn ich

    ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES

    eingebe, dann erscheint auch die warning message nicht mehr.

    Es ist einfach nicht schön, wenn eine warning kommt und diese nicht stimmt od einfach ignoriert werden kann.
    Mhh wenn man das mit dem ^ Zeichen macht, dann kommt eben keine warning...evt ist das der Sinn!

    Uebrigens es muss TRISB,0 heissen.

    --
    Vielen Dank für die rasche Aufklärung der Situation - echt super!!
    Sami

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    TRISB,0 --> RB0 output
    TRISB,1 --> RB1 output
    TRISB,2 --> RB2 output
    ....
    TRISB,7 --> RB7 output


    Ich weis auch nicht warum die meldung kommt und warum Microchip noch nicht dafür gesorgt hat, dass die Meldung nicht mehr kommt.

    Schau dir mal das Disassembling an. Ob da vielleicht etwas anders bei dem ^ als bei nur dem TRISB.....wäre vielleicht zur aufklärung interresant. *g*

    Gruß
    Stefan

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress