Hallo, ich habe vor längerer Zeit ein Schülerpraktikum besucht, in dem es um die Programmierung eines PIC16F84A ging, mit dem eine LED-Anzeigeplatine (siehe Bild) angesteuert wurde. Jetzt möchte ich mich wieder mit diesem Thema beschäftigen und wieder mit der einfachen Programmierung eines PIC beginnen. Programmierbefehle sind mir noch bekannt, das einzige Problem das ich habe, ist das "Startgerüst" meines Programms (Assembler). Also die Portkonfiguration usw. Sobald der eigentliche Programmstart, also das was ich individuell programmiere, kommt, komm ich wieder damit klar. Kann mir jemand evtl. diesen Anfangsteil (von Zeile 1 bis zum Start meines Programms) zur Verfügung stellen bzw. kurz erklären was ich wie und wo festlegen muss/kann. Vielen Dank im voraus. Gruß Michael
Das hier sollte als "Beispiel" dienen: http://sprut.de/electronic/pic/programm/lauflicht/lauflich.htm Ansonsten findest du bei Sprut auch sonst alle Erklärungen in Sachen Assembler: http://www.Sprut.de Falls du es mal mit C und den größeren PIC18 versuchen magst, kannst du hier rein schauen: http://www.PIC-Projekte.de Viele Grüße
Das heißt für ein einfaches Lauflicht, oder um die LEDs blinken zu lassen brauch ich zu Beginn nur: list p=16f84 #include <p16f84.inc> __CONFIG PWRTE_ON & _WDT_OFF & _XT_OSC (wenn ich bis 4MHz Takte) loops equ 0x22 (Die variable könnte ich auch anders benennen oder? für was steht equ und 0x22?) Init bsf STATUS, RP0 movlw B'00000000' movwf TRISB bcf STATUS, RP0 clrf PORTB Was macht Init? (Einfach nur PORTB als Ausgang festlegen??)Eine kurze Erklärung zu den einzelnen Befehlen würde bereits helfen. Mit der Warteschleife "Wait" lasse ich den PIC ja im Prinzip nur sinnlos zählen um eine Zeitverzögerung zu erreichen oder?
Hallo Micha. Falls Du als Entwicklungsumgebung „MPLAB“ verwendest. MPLAB bringt für jeden Controller ein Grundgerüst mit. Es liegt als asm- file im Ordner Template bereit. C:\Program Files\Microchip\MPASM Suite\Template\Code Das entsprechende file öffnen, den Code rauskopieren und in deinem laufenden Projekt einfügen. Schau es Dir einfach mal an. In Sachen Portkonfiguration kannst Du auch mal einen Blick ins Datenblatt werfen. > Ansonsten findest du bei Sprut auch sonst alle Erklärungen in Sachen > Assembler: http://www.Sprut.de Die ist auch zu empfehlen. L.G. Micha
Das Datenblatt für den 16F84( inklusive einer komplette Übersicht und Erklärung der Befehle) findest du hier: http://ww1.microchip.com/downloads/en/DeviceDoc/30430D.pdf
Vielleicht hätte ich diesen Link noch beifügen sollen, da geht es genau um den Grundaufbau eines Assembler Programmes für einen PIC: http://sprut.de/electronic/pic/assemble/assembler.html Mit equ sagst du dem Assembler, dass die Speicherzelle, in dem Fall 0x22, zukünftig mit dem "Label" oder "Namen" angesprochen werden kann. Und ja, bei dem kurzen Teil, bei dem der Bankwechsel notwendig ist, wird der Port B initialisiert. Steht auch alles auf der Seite.
Michael Zöller schrieb: > Was macht Init? Ich merke schon, daß die Assembler-Syntax, wie sie von Microchip gepflegt wird, immer noch gräßlich und anfängerverwirrend ist. 1. Init Also "Init" macht garnix. Das ist, so wie ich das sehe, eine Marke (oder Label oder Identifier oder Name, wie du es nennen willst). 2. Was ist 'equ'? Sehr einfach, nämlich die Definition eines Wertes. Beispiel: Ottokar equ 123 Karlheinz equ 54 sozusagen "Ottokar ist gleich hundertdreiundzwanzig" später kannst du dann anstelle MOVLW 123 besser lesbar schreiben MOVLW Ottokar Aber da geb ich dem Anliegen hinter deinen Fragen Recht: Diese Art, Speichervariablen zu definieren, ist schlecht. Bei mir sehen die Anfänge von PIC Quellen etwa so aus: INCLUDE P16F627.PIC ; Definitionen zum benutzten PIC einfügen SEG RAM ; was folgt, sind Vereinbarungen im RAM ORG 20h ; Adress-Zähler auf 20h stellen Otto: DS 1 ; eine Speicherzelle namens Otto reservieren Emil: DS 1 Anna: DS 32 ; Feld aus 32 Bytes reservieren und so weiter. dann: SEG CODE ; jetzt kommt alles für den Codebereich ORG 2000h ; hier sind die Id-Bytes DATA 0Ah ; ein Codewort mit dem Wert 10 (=0Ah) DATA 'I' DATA 'C' DATA 'H' ORG 2007h ; hier ist das Konfigurationswort Config: DATA 11111100100001b ORG 2100h ; hier ist der EEPROM (wenn vorhanden) Meldung: DATA 'M','C','P','-','3','5','5','1',0 ORG 0 ; hier geht das Programm los CLRF Status CLRF PCLATH GOTO Start ORG 4 Interrupt: MOVWF RetteW ; W retten SWAPF Status,W ; Flags in W holen BCF RP0 MOVWF RetteFlags ; Flags retten MOVF FSR,W MOVWF RetteFSR hier ist der Nutzbereich des Interrupts MOVF RetteFSR,W MOVWF FSR SWAPF RetteFlags,W ; gerettete Flags in W MOVWF Status ; Flags restaurieren SWAPF RetteW,F ; W restaurieren SWAPF RetteW,W RETFIE ; hier Kaltstart, alles neu aufsetzen Start: MOVLW wf_PortA ; mußt du dir selbst definieren MOVWF PortA MOVLW wf_PortB ; mußt du dir selbst definieren MOVWF PortB BSF RP0 MOVLW wf_TrisA ; mußt du dir selbst definieren MOVWF TrisA ; wfXX heißt bei mir "Wert_Für_XX" MOVLW wf_TrisB ; mußt du dir selbst definieren MOVWF TrisB MOVLW B'01111111' ; nur Pullups MOVWF OptionReg BCF RP0 hier beginnst du mit all den Befehlen, die du den PIC ausführen lassen willst So. Das sollte als Anhaltspunkt für einen Quellcodeanfang ausreichen. Allerdings benutze ich meinen eigenen Assembler und der unterscheidet sich ein bissel von dem von Microchip. So kann ich mit Willibald: BIT PortA,3 das Bit 3 vom Port A mit dem Namen Willibald versehen und brauche später im Code nur BSF Willibald zu schreiben. Ebenso gibt's bei mir SKIP Willibald und SKIP NOT Willibald was ne besser lesbare Version von BTFSS und BTFSC ist. W.S.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.