www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16F84A problem beim Assemblieren


Autor: Sir_Wuerde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
Ich beschäftige mich seid einigen Tagen mit der PIC programmierung in 
Assembler. Als Controller hab ich mich für den PIC16F84A entschieden. 
Als Entwicklungsumgebung kommt MPLAB 8.4 zum einsatz.

Das Problem:
Das Programm soll lediglich PORTB auf 0x0F setzen. Beim build kommt 
keine Fehlermeldung. Nach 20min warten hab ich dann den Build-Prozess 
über den Task Mananger beendet. Andere Programme lassen sich ohne 
probleme assemblieren.

Das Programm:
;==========P_B_Aus.asm==========


  list  p=16f84A    ;Typ des Pic
  radix  hex
  __idlocs  0x001    ;Device ID
  __CONFIG  0x3ff1    ;konfiguration des Pic
  
status  equ  0x03    ;Statusregister
rp0  equ  0x05    ;Bit 5 ist RP0
portb  equ  0x06    ;Port B liegt in Bank 1
trisb  equ  0x86    ;Tristate-Reg.Port B in Bank 1

  org  0x000    
  
start   clrf  portb    ;nach Reset unbekannter Inhalt
  movlw  0x00    ;Port B als Ausgang
  bsf  status,rp0  ;Bank 1 auswählen
  movlw  trisb    ;Ein-Ausgänge definieren
  bcf  status,rp0  ;bank 0 auswählen
  movlw  0x0f    
  movwf  portb
circle  goto  circle

  end 

Ich bin für jede Hilfe dankbar und hoffe das mir hier geholfen wird.

MFG
Jan

Autor: hro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Device ID steht ab Adr. 2000
Config Bits ab Adr. 2007

Gruss hro

Autor: Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst sicher das W Register nach TRISB laden und nicht die Adresse 
von TRISB nach W laden. Deshalb würde ich movwf TRISB schreiben und 
nicht movlw TRISB.

Autor: Mario G. (rodenberger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jan.

Noch zwei Möglichkeiten die das Leben etwas leichter machen.

Statt
__CONFIG  0x3ff1    ;konfiguration des Pic
kannst Du auch beispielsweise schreiben:

__CONFIG  _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & 
_LVP_OFF & _MCLRE_ON & _HS_OSC

Was bei den PICs geht, findest Du im entsprechenden Header-File 
(P16Fxxx.INC).
Ich finde das ist übersichtlicher.


Für
  bsf  status,rp0  ;Bank 1 auswählen
kannst Du auch schreiben:
    BANKSEL 1 ;Bank 1 auswählen
oder noch einfacher, Du gibst das Register an.
    BANKSEL TRISB

MPLAB sucht dann automatisch die richtige Bank.
Möglicherweise wird das Programm dann aber jeweils 1-2 Byte länger, da 
es immer beide Bits setzt, denn es kennt die vorhergehenden Werte von 
RP0 und RP1 ja nicht.

Ich finde das macht es einfacher, gerade wenn man später auf einen 
anderen PIC umsteigt und die Register in einer anderen Bank liegen.

Gruß Mario

Autor: Mario G. (rodenberger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WICHTIGER NACHTRAG

BANKSEL 1 funktioniert nicht!!!!
die direkte Angabe der Bank ist so nicht möglich!!!

BANKSEL TRISB beispielsweise funktioniert aber so.

Entschuldigt meinen Fehler, ich kann den Beitrag nicht mehr korrigieren.

Gruß Mario

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.