Hy @ all bin neu im programmieren von Assembler, habe bereits Bücher über Assembler doch nun bräuchte ich eine kleine Inspiration. Ich möchte nämlich meinen PIC16F84 als Art Kleinsteuerung verwenden und würde gerne logikbausteine einprogrammieren. Wäre jemand so nett und könnte mir ein kurzes ASM File schreiben mit ein paar Logik-Verknüpfungen wie in meinem Anhang abgebildet. Mfg Veterano
Na, dann mache ich mal den Anfang. Nur LG1:
1 | bcf PORTB, 0 |
2 | movf PORTA, W |
3 | andlw 0x03 |
4 | xorlw 0x03 |
5 | btfsc STATUS, Z |
6 | bsf PORTB, 0 |
...besser
1 | movf PORTA, W |
2 | andlw 0x03 |
3 | xorlw 0x03 |
4 | btfsc STATUS, Z |
5 | bsf PORTB, 0 |
6 | btfss STATUS, Z |
7 | bcf PORTB, 0 |
Hy danke schon mal für die mühe hier ist mein fertiges prog: list p=16f84 #include <P16f84.INC> __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC Init movf PORTA, W andlw 0x03 xorlw 0x03 btfsc STATUS, Z bsf PORTB, 0 btfss STATUS, Z bcf PORTB, 0 End MPLAB hat es ohne probleme assembilier doch dann auf dem PIC passierte garnichts. Als ich 5V an RA.0 und RA.1 anlegte passierte leider nichts. besteht noch irgendeinen Fehler den ich eingebaut habe. Mfg Veterano
1. Willst Du wirklich eine 16F84 nehmen, der ist uralt und sauteuer. 2. Da wird die Logik nur ein einziges Mal nach dem Start durchgeführt, dann versinkt der PIC im Nirwana ... ausserdem fehlt die init-Routine, die dem PIC sagt, was Eingang und was Ausgang ist etc. Besser ist folgendes: org 0x00 init bsf STATUS, RP0 crlf TRISA bsf TRISA, 0 bsf TRISA, 1 crlf TRISB bcf STATUS, RP0 crlf PORTA crlf PORTB start movf PORTA, W andlw 0x03 xorlw 0x03 btfsc STATUS, Z bsf PORTB, 0 btfss STATUS, Z bcf PORTB, 0 goto start end
Hy habe eben versuch das Programm zu schreiben, doch leider kam dauernt die Fehlermeldung: Error [122] Illegal opcode in der Zeile 8, 11, 13, 14 könntet ihr mir bitte helfen. Mfg Veterano
Veterano S. schrieb: > Hy > habe eben versuch das Programm zu schreiben, doch leider kam dauernt die > Fehlermeldung: Error [122] Illegal opcode > in der Zeile 8, 11, 13, 14 > könntet ihr mir bitte helfen. > > Mfg > Veterano Hallo, den Befehl crlf gibts nicht, das heisst clrf (clear f). Gruss Reinhard
In Deinem Fall Beitrag "Probleme mit dem programmieren PIC16F84A" Beitrag "Welchen Assembler kann ch benutzen?" ist es am Besten, Du freundest Dich doch mit Parsic an.
Ja da hast du recht dass Parsic für mich besser wäre da ich ja nur Logikfunktionen mit meinem PIC programmieren möchte, doch leider kam ich nicht weit mit parsic, da ich da nicht ganz durchgestiegen bin wo meine Fehler sind. Deshalb möchte ich mir die Assembler sprache anlernen. Mfg Veterano
Hey habe eben das gleiche Programm in Parsic geschrieben doch da kam folgendes raus: PROCESSOR 16F84A INCLUDE P16F84A.INC RADIX DEC __IDLOCS H'0100' __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; Diverses ZERO EQU Z ; ZERO-Flag CARRY EQU C ; CARRY-Flag ; Variable RAM = 12 ; located in Bank 0, 1 ERRORLEVEL -302 ; disable warning (Bankswitching) ERRORLEVEL -306 ; disable warning (Pageswitching) ;**************************************** ;Programmanfang ;**************************************** ORG 0 CLRF STATUS ; switch to RAM-Bank 0 GOTO SYS_INIT NOP NOP RETURN ;**************************************** ; Subroutines ;**************************************** ;**************************************** ;Initialisierung ;**************************************** SYS_INIT MOVLW B'00000000' MOVWF INTCON ; Set output before direction BSF STATUS,RP0 ; Bank 1 MOVLW B'00000000' MOVWF PORTA MOVLW B'00000000' MOVWF PORTB MOVLW 15 MOVWF OPTION_REG ; Richtung setzen MOVLW B'11111111' MOVWF TRISA MOVLW B'11111110' MOVWF TRISB ; init vars ; Clear RAM MOVLW 12 MOVWF FSR CR1 CLRF INDF INCF FSR,F MOVFW FSR SUBLW 80 BTFSS STATUS,ZERO GOTO CR1 ;********************************** ;******* Haupt-Programm *********** ;********************************** MAIN ;*************************************************** ; UND - Gatter -> LG1 ;*************************************************** LABEL_LG1_1 BSF STATUS,RP0 ; Bank 1 BTFSS PORTA,0 GOTO LABEL_LG1_FALSE LABEL_LG1_2 BTFSS PORTA,1 GOTO LABEL_LG1_FALSE LABEL_LG1_TRUE BSF PORTB,0 GOTO LABEL_LG1_ENDE LABEL_LG1_FALSE BSF STATUS,RP0 ; Bank 1 BCF PORTB,0 LABEL_LG1_ENDE ;**************************************** GOTO MAIN END Doch leider läuft dieses Programm nicht, worin liegt der Fehler. Mfg Veterano
Also gut, aber das hatten wir doch schon einmal. Ich kenne Parsic nicht, aber es sieht so aus als ob dieses Programm ein Problem mit der Bankumschaltung hat und deshalb keinen korrekten Assemblercode erstellt. Grundsätzlich ist die Idee mit einem PIC16F84 Assembler zu erlernen gar nicht so schlecht, weil dieser µC einen sehr übersichtlichen Befehlssatz sowie nur eine Handvoll von Registern hat. Aber bevor Du anfängst zu programmieren, m u s s t Du Dir das Datenblatt durchlesen. Du m u s s t wissen wofür die Register gut sind und was die einzelnen Instruktionen bedeuten. Mit diesem Wissen kannst Du dann den von Parsic erstellten Code reparieren, oder auch ganze eigene Programme erstellen. Bisher hast Du nur Programme ( oder Teile davon ) die jemand anders erstellt hat (Parsic oder Forenmitglieder) in "deine" Sourcen kopiert und festgestellt, das es so nicht funktioniert. Das ist ganz normal, kein Programm wird auf Anhieb fehlerfrei laufen. Aber Du musst Dir die Mühe machen das fehlerhafte Programm zu analysieren und zu debuggen. Aber um soweit zu kommen: Lies das Datenblatt, lies das Datenblatt (!) mfg
Ok vielen Dank schon mal. Ich muss mich in dieses Thema erstmal richtig einarbeiten, da ich ja keine vorerfahrung mit µC habe, sondern nur in SPS und da läuft das ganze ein wenig einfacher;) Mfg Veterano
Spasseshalber hab ich ein bisschen geg**elt. Wenn Du aus der SPS Ecke kommst, könnte das hier interessant sein http://cq.cx/ladder-de.html mfg
jap ladderlogic habe ich auch schon, doch leider is das Programm nicht für de 16F84A. Mfg Veterano
Und bei PIC16F und Assembler hilft immer wieder www.sprut.de. Da ist das wichtigste alles in Deutsch erklärt. Wenn du das alles verstanden hast, kommst du auch mit dem Rest und dem Datenblatt klar.
Hey weis jemand vill was dieser code bedeutet un was er bezwegt: 0b00001011. Ich musste ihn in mein programm schreiben damit es funktioniert. Mfg Veterano
Würde ich als Binärzahl interpretieren dezimal 11; hexadezimal 0x0B; Ausdruck wird gerne verwendet um einzelne Bits dediziert zu setzen.
Kein Problem ;-) Machst Du das eigentlich als Hobby und daher gewissermassen freiwillig oder ist das eine Aufgabe für eine Facharbeit ? mfg
Ich mache das als Hobby ;-) Beruflich bin ich Mechatroniker. Mfg Veterano
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.