PIC 16F84A problem beim Assemblieren

Gast #1626087
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
#1628576
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

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