PIC16F84 Logik Programm erstellen

OP #1662046
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
Angehängte Dateien:
OP #1662538
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
Gast #1662644
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
Gast #1663086
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
OP #1663970
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
OP #1664015
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
#1664040
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren