Forum: Mikrocontroller und Digitale Elektronik probleme beim umschreiben vom 84A auf 887


von Lars S. (Gast)


Lesenswert?

Guten Morgen =)

Ich hatte ein Projekt wo eine variable programmierbare wechselspannung 
erzeug werden sollte. Da entschied ich mich für den PIC 16F84A und habe 
mit einem D/A wandler und ein zwei verstärkern eine funktionfähige 
schaltung gebaut mit denen man Frequenzen erzeugen kann...

Dies zum geschichtlichem... Nun sind die anforderungen gestiegen und es 
sollen 2 Frequenzen erzeugt werden könne die sowohl synchron als auch 
unsynchorn laufen können, je nach programmierung.

Da entschied ich mich meien schaltung für den 16F84A einfach zu 
duplizieren, einen PIC mit mehr ports zu nehmen und dann das programm 
anpassen und umändern. Da wir hier im institut nur den 16F887 noch da 
haben und alles ander bestellt werden musste entschied ich mich für ihn 
da ehr mehr als genug ports hat.

Aber allein bei der config file verliesen sie ihn... zB steht im 
datenblatt das in CONFIG1 das DEBUG Bit auf 1 gesetz werden muss damit 
RB6 und RB7 normale I/O ports sind. Sobald ich dies in der config file 
so einstelle hängt sich der pic auf.
Ich habe dan zum test ein kleines programm geschreiben was einfach nur 
ein paar ports setzt oder löscht bzw incrementiert... siehe unten... der 
pic hing sich dabei auf.


  list    p=16f887    ; PIC Typ festlegen
  #include   <p16f887.inc>  ; Include Dateien initialisieren
  __CONFIG  _CONFIG1, _DEBUG_ON & _LVP_OFF & _FCMEN_OFF & _IESO_ON & 
_BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & 
_XT_OSC
  __CONFIG  _CONFIG2, 0700
  errorlevel  -302

  org  0x0000    ;Einsprungadresse bei Start/Reset
  goto  Initialisierung

  org  0x0004    ;Einsprungadresse für den Interrupt
  retfie

  org    0x0050

Initialisierung:
  bsf  STATUS,RP0
  bcf  STATUS,RP1  ;Bank 1
  clrf  TRISA    ;PORTA,B,C,D auf Ausgang setzen
  clrf  TRISB    ;PORTB = AC1
  clrf  TRISC    ;PORTC = AC2
  clrf  TRISD    ;PORTD = 7-Segment, DC1, DC2
  bsf  TRISA,1    ;RA1 = UP
  bsf  TRISA,2    ;RA2 = DOWN - Taster
  clrf  WPUB    ;Pull-up PORTB off
  bsf  STATUS,RP1  ;Bank 3
  clrf  ANSEL    ;PORTA und B auf Digital Input
  clrf  ANSELH
  bcf  STATUS,RP0
  bcf  STATUS,RP1  ;Bank 0

lol
  bsf  PORTA,4
  bsf  PORTA,3
  incf  PORTC,F
  incf  PORTB,F
  call  Warte_1ms
  bcf  PORTA,4
  bcf  PORTA,3
  incf  PORTC,F
  incf  PORTB,F
  call  Warte_1ms
  goto  lol

Warte_1ms:
  movlw  D'248'
  movwf  Zaehler3
Loop
  goto  $+1
  goto  $+1
  goto  $+1
  nop
  decfsz  Zaehler3,F
  goto  Loop
  return

  end

;---------------------------------------------------------------------

als ich aber dan den CALL befehl ausklammerte funktionierte es. Kann mir 
jemand sagen warum? ich treffe in Datenblatt auf keien weiteren 
erkenntnisse... überlese ich was? und was mich am meisten verwirrt... 
warum kann ich RB6 / 7 nicht als I/O diklarieren? warum hängt er sich 
dabei auf...

Vielen dank schonmal... ich hoffe ich hab genug infos gegeben^^

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.