www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16F84 Logik Programm erstellen


Autor: Steven B. (veterano)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: weißgradnich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, dann mache ich mal den Anfang.
Nur LG1:
bcf PORTB, 0
movf PORTA, W
andlw 0x03
xorlw 0x03
btfsc STATUS, Z
bsf PORTB, 0

Autor: weißgradnich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...besser
movf PORTA, W
andlw 0x03
xorlw 0x03
btfsc STATUS, Z
bsf PORTB, 0
btfss STATUS, Z
bcf PORTB, 0

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stephan_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steven B. (veterano)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jap ladderlogic habe ich auch schon, doch leider is das Programm nicht 
für de 16F84A.

Mfg
Veterano

Autor: fresh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...dann schau Dir mal flowcode an.

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde ich als Binärzahl interpretieren

dezimal 11; hexadezimal 0x0B;

Ausdruck wird gerne verwendet um einzelne Bits dediziert zu setzen.

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK vielen Dank

Mfg
Veterano

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem ;-)

Machst Du das eigentlich als Hobby und daher gewissermassen freiwillig
oder ist das eine Aufgabe für eine Facharbeit ?

mfg

Autor: Steven B. (veterano)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mache das als Hobby ;-)
Beruflich bin ich Mechatroniker.

Mfg
Veterano

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.