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


von Sir_Wuerde (Gast)


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:
1
;==========P_B_Aus.asm==========
2
3
4
  list  p=16f84A    ;Typ des Pic
5
  radix  hex
6
  __idlocs  0x001    ;Device ID
7
  __CONFIG  0x3ff1    ;konfiguration des Pic
8
  
9
status  equ  0x03    ;Statusregister
10
rp0  equ  0x05    ;Bit 5 ist RP0
11
portb  equ  0x06    ;Port B liegt in Bank 1
12
trisb  equ  0x86    ;Tristate-Reg.Port B in Bank 1
13
14
  org  0x000    
15
  
16
start   clrf  portb    ;nach Reset unbekannter Inhalt
17
  movlw  0x00    ;Port B als Ausgang
18
  bsf  status,rp0  ;Bank 1 auswählen
19
  movlw  trisb    ;Ein-Ausgänge definieren
20
  bcf  status,rp0  ;bank 0 auswählen
21
  movlw  0x0f    
22
  movwf  portb
23
circle  goto  circle
24
25
  end

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

MFG
Jan

von hro (Gast)


Lesenswert?

Device ID steht ab Adr. 2000
Config Bits ab Adr. 2007

Gruss hro

von Besucher (Gast)


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.

von Mario G. (rodenberger)


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

von Mario G. (rodenberger)


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

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
Noch kein Account? Hier anmelden.