PIC 16f84a Programmieren

Gast #174941
Lesenswert?

Hallo

Ich muss einen PIC 16f84a in Assembler programmiern und das habe ich
noch nie gemacht.
Der PORTA ist mit einem Schalter(4er) angeschlossen.und PORTB als
Ausgang.
es muss so programmiert werden dass beim schalten von  zb:(A0 und A3)
dh (PORTA.0 und PORTA.3) der Ausgang PORTB an bleibt und nach einer
wait wieder aus. Die Warteschleife Wait liegt schon vor.
Danke
mfg
Gast #174942
Lesenswert?

warum muss es in Assembler sein? Kann es nicht auch in C sein?

Ich hab erst gestern mit meinem PIC16LF84A die steuerung meines
Belichtungsgerätes gebaut. Und da hab ich auch die Taster an
PORTA(A0-A3) hängen und an PORTB hängen meine Leds.
Gast #174943
Lesenswert?

Willst jetzt den Code dafür haben oder wie?

Aber abgesehen davon, warum nimmst nicht PORTB als Eingang und PORTA
als Ausgang? Port B Pins RB7..RB4 können als Interruptquelle (interrupt
on change feature) verwendet werden, sobald sich etwas am Eingang ändert
wird ein Interruptflag gesetzt, also ideal für das was du eigentlich
machen willst. Ersparst dir somit das Pollen...
Gast #174945
Lesenswert?

das mit der Steurung von Belichtungsgerät ist genau was ich machen
soll.Ich habe die Platine fertig gebaut und muss jetzt den PIC
programmieren.und da ich fruher nicht viel programmiert habe. bekomme
ich ein paar Probleme.
Gast #174949
Lesenswert?

achja... ich weis nicht obs du auch den PIN RA4 benutzt. Falls du diesen
doch benutzt, dann beachte das das ein Open-Drain ausgang ist. Hat bei
mir schwierigkeiten geben, da ich das übersehen habe.
Gast #174952
Lesenswert?

Danke Schoaschi.
Ich wolte am Anfang auch mit CCS Compiler,da ich nur eine Dimo
version hab,war die Datei '16f84a.h' nicht dabei.ist diesen Compiler
nur für bestimmte Controller geeignet?
mfg
Gast #174954
Lesenswert?

Ya da ist PIC16f84a auch dabei.Ich arbeite mit einem Demo Version aber
er meldet viel Fehler da er vielleicht die Datei '16f84a.h'nicht
hat.und auch 'Belichtung.h'kann er nicht erkennen.
hast eine Idee?
mfg
Gast #174955
Lesenswert?

Hier ist mal die header. wobei du diese selbst auch erstellen hättest
können. und wenn du die Header für deinen PIC nocht hast, dann wirds
auch nicht hinhaun ;-).diese kannst du dir aber relativ leicht selbst
schreiben. vorallem brauchst du bei meinem Programm eh nur geringfügige
änderungen machen, dann kommst du ganz ohne aus.
Angehängte Dateien:
Gast #174957
Lesenswert?

ya Ich habe ein kleines Programm probiert:

#include <16F84A.h>
#use delay(clock=4000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT
#byte  PORTA   =   0x05
#byte  PORTB   =   0x06

int x;

void main()
{
   SET_TRIS_A(15);
   SET_TRIS_B(0);


   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);






while(1)
  {
  if(x=1)
  {
    x=0;
    if(!input(PIN_A0))
    {
      output_HIGH(PIN_B0);
      Delay_ms(5000);
      output_Low(PIN_B0);
         }


  }//Ende while-Schleife
} //Ende main
}

aber wenn ich A0 schalte dann bleibt Led(B0)ganz Zeit an.musste
eigentlich nur 5sec leuchten.
woran könnte das liegen?
Gast #174959
Lesenswert?

ähm... das ganze programm würde ich nicht so schreiben ;-) denn das
funktioniert nur zufäll irgendwie :D

zuerst musst du mals x initialisieren, weil sonst steht in x irgendein
wert drinn und er spring nie ins if rein. ausserdem musst
du schreiben x==1 ( mit = wird ein wert auf die variable gschrieben und
nicht verglichen ;-))
und wie kommst du bitte auf 15? A0 ist doch an stelle 0 also müsste es
1 sein oda nicht?!

void main()
{
   SET_TRIS_A(1);
   SET_TRIS_B(0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

while(1)
  {
    if(!input(PIN_A0))
    {
      output_HIGH(PIN_B0);
      Delay_ms(5000);
      output_Low(PIN_B0);
    }
  }//Ende while-Schleife
} //Ende main

wenn ich mich nicht irre sollte es vl so funktionieren.. kanns momentan
aber leider nicht überprüfen, da ich nicht zu hause bin.

mfg schoasch
Gast #174961
Lesenswert?

Beim PIC wird aber empfohlen, dass alle PINs die nicht benutzt werden,
als ausgang definiert werden sollen wenn ich mich recht entsinne. Denn
es kann zu problemen kommen wenn unbeschaltene PINS als eingang
definiert sind.
Gast #174962
Lesenswert?

Ich hab jetzt ein PIC16C554 programmiert.hat das erste mal
funktioniert,dann bekomme ich beim Brennen des Programms(2.mal) einen
Fehler:

Device is not Blank:
Program memory
Configuration Bits

und dann kann das Brennen nicht bis zu Ende gehen?
Gast #174963
Lesenswert?

Alle PIC mit einem "C" in der Typenbezeichnung (ausser 16C84) haben
einen sogenannten OTP-Speicher und lassen sich nicht mehr löschen.
Einmal programmiert, kann man sie nur benutzen oder wegwerfen, neu
programmieren ist nicht möglich.

Dieter
Gast #174964
Lesenswert?

Das stimmt was dds5 sagt. Wenn du eine Programm fertig hast und es nicht
mehr verändern willst, dann kannst du einen C-Typ verwenden. aber das
ist alles aus dem Informationen auf der Microchip seite und aus dem
Datenplatt und von www.sprut.de oder www.fernando-heitor.de zu
entnehmen ;-)
Gast #174965
Lesenswert?

Guten Tag allerseits,
ich suche die datei 16F84A.h und 16F877.h für den CCS-Compiler.
Ich muss in der Schule einen solchen PIC in C programmieren, leider hab
ich nur die Demo-version vom CCS-Compiler.
Danke für jede Hilfe
Gruss Edouin

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