mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Abfragen


Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi leute
wie kann ich machen das bei meinem prog der timer abgefragt wird?

ADDWF TMR0,W  ; +1 ergibt 0x00 in w, wenn TMR0=0xFF
BTFSS STATUS,Z  ; Sprung, wenn Z-Flag gesetzt
GOTO TIMER
GOTO NOCHMAL

also das hab ich bisher geschrieben

aber der springt immer auf timer und nie auf nochmal

kann ich auch anders dem sagen das er immer wenn programm zuende ist
das er wieder bei nochmal startet bzw dort hinspringt?

danke im vorraus

mfg
damian

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist nicht dein ernst, oder??

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol

Autor: Andreas Jäger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und dann schimpft wieder alles auf die PIC's

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenns falsch ist dann sagt es bitte
den mir wurde gesagt ich soll das schreiben
und ich habs reingeschrieben weil ich nich weiss wie ichs machen soll
bitte helft und lacht nicht
mir wurde unter roboternetz das so gesagt mit dem add.. usw

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"mir wurde gesagt ich soll das schreiben"

Ich halte es fast für unmöglich, daß man so Programmieren lernen kann.
Wenn Du nicht weißt, warum Du was machst, dann laß es lieber.

Ich rate Dir, erstmal gründlich in der Befehlsbeschreibung nachzulesen,
und dann die einzelenen Befehle im Simulator auszuprobieren.


Der PIC ist allerdings sehr kryptisch und nicht gerade gut für den
Einsteiger geeignet. Viele Dinge haben keine entsprechenden Befehle und
man muß sie "von hinten durch die Brust ins Auge" machen. Daher
brauchts wirklich ne Weile, andere PIC-Programme zu verstehen, man muß
manchmal mächtig um die Ecke denken.

Und bei PIC-Fragen immer zu allererst den genauen Typ angeben, da es
softwaretechnisch erhebliche Unterschiede gibt.


Mit dem Codeschnipsel oben kann jedenfalls keiner was anfangen.
Z.B. wohin gehen denn die GOTOs und was steht zu Anfang in W ?


Peter

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
list      p=16F84A               ; list directive to define processor
#include <p16F84A.inc>            ; processor specific variable
definitions

__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

;***** VARIABLE DEFINITIONS *****
w_temp      Equ     0x0C            ; variable used for context saving
status_temp   Equ     0x0D           ; variable used for context saving

w_copy  Equ     0x20                ; Backup für Akkuregister
s_copy  Equ     0x21                ; Backup für Statusregister

T0SC  Equ    OPTION_REG

    ORG     0x000               ; processor reset vector
      goto    main                ; go to beginning of program

;    Interrupt routine falls diese mal benötigt wird
ORG     0x004               ; interrupt vector location
movwf   w_temp              ; save off current W register contents
movf  STATUS,w             ; move status register into W register
movwf  status_temp          ; save off contents of STATUS register

movf    status_temp,w       ; retrieve copy of STATUS register
movwf  STATUS              ; restore pre-isr STATUS register contents
swapf   w_temp,f
swapf   w_temp,w            ; restore pre-isr W register contents
retfie                       ; return from interrupt

main
;PortA wird hier initialisiert
BCF STATUS, RP0          ; RP0=0
CLRF PORTA            ; Initialisierung von PortA
                  ; durch löschen des Data latches
BSF STATUS, RP0          ; Markiere Bank 1
MOVLW 0x0F            ; nutzen für den DatenVerzeichniss

MOVWF TRISA&0x7f        ; SET RA<3:0> als Input

; SET RA4 als Output
;     PortB wird hier initialisiert
BCF STATUS, RP0          ; RP0=0
CLRF PORTB            ; Initialisierung von PortA

; durch löschen des Data latches
BSF STATUS, RP0          ; Markiere Bank 1
MOVLW 0xCF            ; nutzen für den DatenVerzeichniss

MOVWF TRISB&0x7f        ; SET RA<3:0> als Input

; SET RB<5:4> als Output

; SET RB<7:6> als Output

movwf   w_copy             ; w retten
swapf   STATUS, w            ; STATUS retten
movwf   s_copy            ;

NOCHMAL
BCF STATUS, RP0          ; auf Bank 0 wechseln
MOVLW   0x7D            ; 0x83 = 131 ; 0x7D = 125
MOVWF   TMR0          ; 131 oder 125 müsste hier drin stehen
MOVLW 1
TIMER
BSF STATUS, RP0          ; auf Bank 1 wechseln
;BCF OPTION_REG&0x7f, T0SE    ; bin mir nich sicher ob ichs brauche beim
Vorteiler

;Flanke
BSF OPTION_REG&0x7f, T0SE    ; hier wird für RA4 die Low Flanke gewählt
MOVF T0SE, F            ; hier wird es unter der Speicherzelle gesichert

;movf TMR0, F           ; das ist das Timer-Register

;Vorverteiler Aktivieren
BCF OPTION_REG&0x7f, PSA    ; hier mit wird der Vorverteiler auf 0
gesetzt und aktiviert
BCF OPTION_REG&0x7f, PS2    ; damit man den vorverteiler auf 16/1
einstellt
BSF OPTION_REG&0x7f, PS1    ; hier wird PS1 auf 1 gesetzt
BSF OPTION_REG&0x7f, PS0    ; hier wird PS0 auf 1 gesetzt

;Timer
;BSF OPTION_REG&0x7f, T0CS    ; T0SC wird auf 1 gesetzt damit der
Vorverteiler mit benutzt werden kann
BCF OPTION_REG&0x7f, T0CS     ; hier wird in der Speicherzelle T0SC die
0 gesetzt
MOVF T0CS, F            ; nun wird es unter der Speicherzelle gesichert

NOP
NOP

ADDWF TMR0,W  ; +1 ergibt 0x00 in w, wenn TMR0=0xFF
BTFSS STATUS,Z  ; Sprung, wenn Z-Flag gesetzt
GOTO TIMER
GOTO NOCHMAL

END

also das ist mein code
der soll halt beim überlauf immer bei 125 anfangen damit ich die 2ms
schaffe die ich benötige

mfg
d.stolarek

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und da ich schon sehr versucht habe und das nie funktioniert hat habe
ich in roboternetz nachgefragt und da sagte mir einer das es diese
möglichkeit gibt zum abfragen die ich dann testen wollte
aber dies ging bei mir auch nich
und deswegen frage ich hier mal ob hier einer mehr sagen kann dazu

danke schon im vorraus

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also... räusper

1. Sourcecode dieser länge bitte immer in den Anhang!
2. Die Sprungziele sind wohl nicht ganz korrekt deklariert, fehlt da
nicht überall ein ":"?

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da das assembler ist fehlt das nicht

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sers,

also ich kenn mich zwar mit PIC nich aus, aber ich denke die : solten
schon sein. Wenn man sonst ein ; vergißt hat man ja massig Sprungziele.
Das ist bestimmt nich im Sinne des Erfinders.

list      p=16F84A

Das sind bestimmt schon zwei. Sollte das nich so sein?

.list      p=16F84A

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also der simulator macht keine probs und
in sprut steht das nich mit dem ;
und ich hab bei anderen progs von ihm nur list gelesen
und der simulator sagt da ist dann ein fehler wenn ich vor list ein .
mache

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es geht bei mir alles nur die abfrage nicht
also wenn mir einer sagen wie ich das richtig machen kann
den ich bin ratlos

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was der Befehl:

ADDWF TMR0,W

macht, weißt Du ?

Dann sollte eigentlich klar sein, daß der Kommentar:

; +1 ergibt 0x00 in w, wenn TMR0=0xFF

nur dann stimmt, wenn man vorher W = 1 gesetzt hätte.


Ich kenne jetzt den 16F84A nicht, aber alle MCs, die ich einsetze
(8051, AVR, ARM) haben immer ein Timer-Overflow-Bit.

Und dann ist es besser das Overflow-Bit zu testen, denn leicht kann es
passieren, daß ein Interrupt dazwischen haut und man dadurch den
Zustand TMR0=0xFF verpaßt.

In Deiner Schleife wird auch ständig der Vorteiler rückgesetzt, kann es
sein, daß dadurch der Timer nie weiterzählt ?

Bitte bitte schau doch mal ins Datenblatt, was Du da verzapft hast !!!

Der Simulator zeigt Dir doch TMR0, W, STATUS an oder nicht ?


Peter

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klar
nur der eine meinte das geht so
und ich weiss was addwf bedeutet
das ist zum addieren und ich hab halt auch bemerkt das bei status nie 0
ist nur beim programm start
und das mit w auf 1 setzten ich weiss aber das wird kurz bevor das bei
addwf ankommt verändert
und ausserdem habe ich w oben da wo nochmal ist geändert auf 1

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und der timer zählt weiter nur halt langsamer
da er die zeit von 2ms überbrücken muss
da ist ein 16 vorteiler drin und der zählt rauf

DAS WAS NICH GEHT IST DIE SCHLEIFE

REST FUNKTIONIERT TADELLOS

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob W irgendwo hochdroben mal gesetzt wurde, ist egal.
Wichtig ist nur der Wert direkt vor dem ADDWF.


Simulier doch einfach.

Wird TMR0 überhaupt mal FF ?
Und was steht dann in W drin ?
Was wird damit bezweckt, den Vorteiler ständig rückzusetzen ?


Peter

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja tmr0 wird irgendwann 0xff
und in w steht dann ein zu hoher wert 146
das weiss ich schon aber wie mach ich das richtig das der wirklich dann
wieder bei 125 anfängt?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"und in w steht dann ein zu hoher wert 146"

Und warum kannst Du das nicht 1000 Postings früher sagen, sondern immer
nur "DAS WAS NICH GEHT IST DIE SCHLEIFE" ?

Fehler muß man suchen, die kommen nicht von selber angelaufen.
Mit den falschen Werten kann der Code ja nicht richtig arbeiten.


Du must Dir zuerst einen Programmablaufplan machen, was wann wie
gesetzt und getestet werden soll.
Erst danach kann man sich hinsetzen und den Plan in Code umsetzen. Nur
so wird ein Schuh draus.
Insbesondere um Schleifen richtig zu erkennen ist ein PAP unerläßlich.


Ich würde auch erstmal den ganzen Vorteilerschrunz aus der Schleife
hauen. Sowas hat dort nichts zu suchen, das macht man nur einmal am
Programmstart.


Peter

Autor: Andreas Jäger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug, @Sebastian

Zur Info:
Sprungziele (Label) benötigen kein ":", sie müssen nur in Spalte 1
beginnen. Befehle (Mnemonics) in Spalte 2 oder später. Operanten müssen
von Befehlen mit mind. 1 Leerzeichen getrennt sein.

(Jedenfalls bei MPASM)

Andreas

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter Dannegger
also wusste nich das die werte für dich jetzt so wichtig sind
und pap hab ich gemacht gehabt und ich brauche diese schleife mit der
abfrage um immer beim timer wert 125 zu starten
den wenn er es einmal macht den überlauf mein ich dann startet er bei
dem wert 0 und nicht 125 also hilft mir das was du sagst nicht weiter
den der wert ändert sich nur in w beim addwf und das von 1 auf einen
jetzt sogar höheren wert 212

@all
also wenn einer ahnung hat von assembler und ahnung wie eine schleife
aussehen muss die abfragt ob 0xff beim timer0 sind dann bitte helfen
ich bin so ziemlich ratlos

ich wäre für jede hilfe dankbar

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, ohne sich damit zu beschäftigen, lernst Du es nie.
Was ist denn daran so schlimm, die Befehle im Simulator auszuprobieren
?

Es ist völlig normal, daß Register im Programmverlauf benutzt und
verändert werden.
Wenn man also einen bestimmten Wert im Register benötigt, lädt man ihn
eben hinein.
Aber nicht irgendwo anders, sondern genau an der Stelle, wo er benötigt
wird.

So, hier jetzt alles vorgekaut:

Lade 125:

MOVLW   125
MOVWF   TMR0


Warte auf FF:

WAIT_FF
MOVLW   1
ADDWF TMR0,W
BTFSS STATUS,Z
GOTO WAIT_FF


Peter

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau sowas hab ich doch auch gemacht und noch dazu darauf geachtet das
es mit dem vorteiler geht
das blöde daran ist nur das der trotzdem den wert jedesmal in w ändert
bei addwf der sprang immer sofort auf einen anderen wert

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kleine Randbemerkung :
So, wie du hier schreibst.....ohne Punkt und Komma.....wirst du wohl
auch deinen Code schreiben ??!!
Vielleicht überprüfst du alles nochmal dahingehend......

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also mein code läuft wie ich glaub ich zum hundersten mal sage
hab alles mit simulator überprüft

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur die schleife funktioniert nich wegen dem sofortigem wechsel nach
addwf

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab das hier grad nur zufällig gefunden und vieleicht brauchst du ja
auch keine Hilfe mehr, aber ich sag trotzdem, was mir aufgefallen.

Versuch doch mal das: anstelle btfss btfsc. Bei dir springt er nämlich
immer auf TIMER, weil btfss sagt, er soll den nächsten Befehl
überspringen, wenn das Bit gesetzt ist. Das Zero wird aber nur gesetzt,
wenn die Addition eine Null ergibt.

Jetzt müsste er dann auf NOCHMAL springen, weil der Befehl jetzt
lautet, er soll den nächsten Befehl überspringen, wenn das Bit NICHT
gesetzt ist, was ja den Großteil der Addition so ist.

Probier´s einfach mal. Viel Erfolg!

Gruß
Jen

PS: Kannst ja dann hier noch posten, ob´s richtig war!!

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die antwort
hab das auchprobiert aber jetzt springt der immer auf nochmal und nie
mehr auf den timer mit btfsc kommt der nie auf 255 also nie zum
überlauf
aber danke trotzdem hab schon gedacht das keiner mir hier mehr helfen
will

liebe grüße
damian stolarek

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab auch grad meine Probleme mit Assembler und darum helf ich gern
;)

Vielleicht solltest du dann vor dem add-Befehl eine Abfrage machen, ob
TMR0 0xFF ist und ihn dann zu der jeweiligen Marke schicken oder zum
add-Befehl. Was anderes würd mir nicht mehr einfallen.

Gruß
Jen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
du bist echt lieb, danke das du mir hilfst und mir mit rat und tat zur
seite stehst.
danke vielmals!!!
und eine abfrage vor dem zumachen, naja da ist ja das problem, wenn ich
wüsste wie die richtig gingen, würde ich nich hier reinposten. den die
abfragen bekomm ich nicht hin.
danke trotzdem.

gruß
damian stolarek

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist grad aufgefallen, dass ich so was ähnliches in meinem jetztigen
Programm habe rotwerd . Ist scheinbar schon zu groß, dass ich noch
alles 100%ig überblicke.

Also, noch ein Versuch:

Als erstes: Schmeiß den add-Befehl raus.
Und dann versuchst du´s hiermit:

movfw   TMR0      ; Inhalt des Registers in Akku
                                ; kopieren
sublw   0xFF                  ; von 0xFF wird der Wert im Akku
                                ; abgezogen
btfss   STATUS,Z    ; überprüfe das Zero-Flag, wenn
                                ; gesetzt, überspringe nächsten
                                ; Befehl
goto TIMER
goto NOCHMAL

Gruß
Jen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok werd ich versuchen schreibe dann so schnell wie möglich hier dann
rein

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"aber danke trotzdem hab schon gedacht das keiner mir hier mehr helfen
will"

Stimmt doch garnicht.
Aber Du liest ja die Antworten nicht !!!


Also nochmal, bei Dir fehlt das "MOVLW 1" !
Ohne das addierst Du TMR0 zu einem rein zufälligen Wert der von
irgendwann noch in W steht:

WAIT_FF
MOVLW   1 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ADDWF TMR0,W
BTFSS STATUS,Z
GOTO WAIT_FF


Peter

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, ich schreib das woanders rein.
bei mir habs ich gleich am anfang reingeschrieben, nachdem ich den
timer auf 125 gesetzt hab.
nun setze ichs vor den addwf befehl.

gruß damian

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi Peter Dannegger
das geht trotzdem nicht
danke trotzdem für deine hilfe
bin für alles dankbar

gruß damian

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi jen,
hab das nun auch ausprobiert, das geht auch nicht.
aber der einfall war nich schlecht.

gruß damian

Autor: chrissy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss man vielleicht das Zählregister erst in ein Rechenregister
kopieren? Kann die Recheneinheit ADDWF TMR0,W? Oder würde
ADDWF,REGISTER,W; REGISTER->TMR0 Erfolg versprechen?
Bloß geraten-basiert jetzt nicht auf Ahnung mit PIC Controllern.

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ist schade...und ganz schön kniffelig.

Ich seh gerade, dass du einige viele ´;´ gesetzt hast. Kann es sein,
dass du aus Versehen einen Befehl auskommentiert hast?
Am besten noch mal drüber schaun.

Gruß
Jen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi ihr lieben
@jen, habs überprüft und es sind keine wichtigen dinge, die ich
brauche, auskommentiert.
@chrissy, das habe ich als aller erstes versucht, ich habs in das
register kopiert gehabt und es lief nicht, der sprang wie bisher immer
falsch.

Danke trotzdem für eure hilfe. ihr seid so lieb zu mir :).
danke dafür und für die antworten die noch kommen.
komisch das man bei einem praktikum solche kniffligen aufgaben
bekommt.

naja mit eurer hilfe werde ich es schon schaffe.

ich freu mich schon auf weiter antworten

liebe grüße damian

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

was bedeutet eigentlich das &0x7f bei dem Vorteiler hinter dem
OPTION_REG?

Gruß
Jen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi jen,
da ich den pic 16f84a benutze, musste ich dies hinzufügen, damit er nur
8bit macht.
der hat beim timer dann sofort probleme gemacht ohne dieses &0x7f.
der simulator spuckte dann sofort fehler aus.
der sagte dann immer das der bereich zu groß ist.
gruß
damian

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

da du Praktikum machst (Lehre, Schule oder FH, nur aus Neugier, mach
nämlich auch grad Praxissemester;P), hast du da nicht einen Betreuer
oder jemanden, der das bei euch lehrt? Druck den Code doch einfach mal
aus und zeig im das. Eigentlich sind Betreuer doch dafür da, oder?

Grüßchen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jen,
das blöde ist ja das ich hier keinen richtigen betreuer habe.
ich soll alle aufgaben machen die ich bekomme und die leute sagten ich
soll mich in alles selber einarbeiten.
die hier haben ziemlich alle streß und da will ich nich auch noch
stören.
aber ich wills auch "alleine" hinbekommen, mit eurer hilfe.
es sieht einfach besser aus.

gruß
damian

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@jen
ich mach das um fh-reife zu bekommen

hihi
gruß
damian

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Damian,

zunächst mal, ich bin auf dem 8051 zu Hause, den PIC programmiere ich
erst seit wenigen Wochen, und das auch nur sehr sporadisch. Wenn ich
mir hier aber die Antworten im Forum durchlese, dann frage ich mich, ob
es hier keine PIC-Freaks gibt?!? Für die sollte Dein Problem wirklich
ein Klaks sein.

So, nun meine Anmerkungen zu Deinem Programm:
1) TMR0 steht in Bank 0! Du hast aber vorher auf Bank eins
umgeschaltet, aber nicht wieder zurück!

2) Was macht
MOVF T0CS, F     ; nun wird es unter der Speicherzelle gesichert
? T0CS ist ein Bit, mit dem MOVF Befehl werden aber ganze Bytes bewegt.
Ich könnte mir auch nicht vorstellen, was er an dieser Stelle soll. Also
versuch es einfach mal ohne diesen Befehl!

3) OPTION_REG steht wieder in Bank 1. (Aber hier hast Du ja vorher auf
Bank 1 gewechselt)

4) Ich würde wirklich das Timer Overflow-Flag abfragen, wie es hier
schon vorgeschlagen wurde: (P.S.: INTCON steht auch in Bank0)

BCF STATUS, RP0          ; auf Bank 0 wechseln
BTFSS INTCON,TMR0IF
GOTO TIMER
GOTO NOCHMAL

5) Es reicht, wenn Du den Timer einmal am Anfang des Programms
initialisierst (die ganzen Zugriffe auf OPTION_REG). Das mußt Du nicht
bei jedem Schleifendurchlauf wiederholen.

6) Für Deine Zukunft als Programmierer: Du solltest versuchen, Dich
mehr in den µC reinzuversetzen und nachzuvollziehen, was er bei den
einzelnen Befehlen macht, statt munter drauf los diverse Ideen bunt zu
mischen und nach dem Try and error Prinzip Deine Programme zu
entwickeln.

Wie oben schon geschrieben, ich bin auch recht neu auf dem PIC. Von
daher kann ich Dir nicht versprechen, daß das Programm mit den oben
erwähnten Änderungen läuft. Es könnte zum Beispiel noch sein, das man
das Overflowflag noch aktivieren muß. Lies mal dazu im Datenblatt das
Kapitel über den Timer.

Viel Erfolg,
Markus_8051

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi markus,
ich werde alles ausprobieren. es wird nur etwas dauern, denn ich muss
oft andere dinge machen die für die firma wichtiger sind.

gruß
damian

Autor: Jen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

bei www.sprut.de gibt es eine sehr gute Übersicht über die
Assembler-Befehle. So kannst du dein Programm noch mal durchgehen und
schaun, ob es das macht, was es machen soll.

MfG
Jen

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi jen,
nach dem, was bei sprut steht, müsste es eigentlich laufen.
aber ich mache das noch, was markus schrieb.
naja ich versuche es.

also, danke nochmals und ich halte euch auf dem laufenden.

liebe grüße an alle
damian

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi leute,
hier der neuste stand.
es geht immernoch nicht was ich ein bisschen schade finde da ihr euch
mühe gegeben habt mir zu helfen.
also für weitere möglichkeiten bin ich bereit.
ich hab mir die befehle durchgelesen und alles was ihr geschrieben habt
sollte funktionieren, was es leider nich tut.
hab in die bank0 zurück gewechselt brachte nichts, die subtraktion
brachte auch nichts und nur eine sache ging an der überprüfung.
das was ging der hat angefangen 4mal richtig gearbeitet und als der
eine wert niedriger war, sprang er wieder zum falschen.
also ist da noch was falsch.

bitte helft mir.

euer D.Stolarek

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ihr lieben,
ich habe die abfrage hinbekommen mit der Version von Jen.
Danke nun habe ich eine andere Frage.
Wie kann ich an einem Pin ohne Interrupt einen Flankenwechsel
abfragen?
Muss nämlich nachschaun, wenn da Signale sind, ob da ein Bit 2ms
braucht bis zum Nächsten wechsel oder 1ms oder 0,5ms.
Wäre euch TOTAL dankbar.

Gruß
Damian

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Damian,

also beim 8051 gibt es da die Möglichkeit, einen Pin als Gate für einen
der Timer zu benutzen. So kann man mit dem Timer exakt die Pulsbreite
eines ankommenden Signals messen. So etwas muß beim PIC sicher auch
gehen.

Gruß,
Markus_8051

Autor: D.Stolarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Markus_8051,

ja so einen Pin gibts bei mir auch, aber wie nutze ich den das, das der
bei mir von 1nem byte die bits überprüft und da die zeit misst?

Gruß
D.Stolarek

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Damian,

BITTE BEACHTE AUCH MEIN POSTING IM PIC-FORUM VOM 04.11.2004

http://www.fernando-heitor.de/picforum/viewtopic.p...

GRUSS
INGO

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.