Ich hab mit einem PIC und dem MPLAB von der Herstellerfirma der Chips ein kleines Programm geschrieben, das halt ein KITT Licht erzeugt, wo die LEDs im Abstand von einer Sekunde blinken, allerdings versteh ich überhaupt nicht, warum die 3 Delay Schleifen eine Sekunde ergeben. Ich weiß, dass ein Befehl 4 Taktzyklen braucht und die Sprunganweisungen 8, der PIC taktet mit 4 Mhz könnt ihr mir erklären, warum mein Code für eine Verzögerung von 1 Sekunde sorgt, ich verstehs nämlich nicht, wie man das ausrechnet. lg HeyHey
Hallo, soweit ich das weiss braucht ein Befehl 1 Zyklus braucht / eine Sprumarke logischerweise 2. Es gibt gute online Rechner für die wait loops. mit ASM ist es am besten sich mit www.sprut.de zu beschäftigen. Hier gibt es alles für Assembler was das Herz begehrt. Von der LCD Uhr wo jeder Taktzyklus genauestens berechnet ist bis zu weiss gott ich was =) Im Datenblatt gibt ist für jeden Befehl auch die entsprechenden Zeitangaben. @4MHz braucht ein NOP genau eine ns. 4MHz ist eine "angesagte" Taktfrequenz - einfach mal nach pic loops calculator googln. http://www.biltronix.com/picloops.html is ganz ok ! und freeware.. Gruß
huup hab ned genau gelesen: ööm das is wie eine mehrfach verschachtelte schleife. for(durchlaufe 100 mal){ for(durchlaufe 50 mal){ for(durchlaufe 1000 mal){ warte! } } } damit wir "warte!" 1000*50*100 mal aufgerufen warum man nicht einfach 5000000 auf einmal aufruft? also for(durchlaufe 5000000 mal) { warte! } ????? nunja die kleineren PICs kommt mit seinen 8 Bit halt gut nur mit zahlen bis 2^8 zurecht also 256. sonst muss man rumtricksen und so verschachtelt man lieber.
ojemine ich chaos typ =) bei 4 Mhz ist der Zyklustakt selbstverständlich 1 MHz. Von diesen Zyklustakten braucht der PIC normalerweise 1 bei Sprungmarken, etc. 2. Da lagst du korrekter als ich. Ausserdem habe ich mich nochmal vertan: 1µS sind es bei 4 Mhz und nicht eine 1ns! Hier das hab ich dir noch rausgesucht: Diese Wartezeit von 1 Bit wird mit der Routine Warte_s erledig. Die Wartezeit ist von der gewünschten Baudrate der RS-232-Verbindung und vom PIC Takt abhängig. Das Prinzip der Warteschleifen habe ich schon in einem anderen Beispiel erläutert. Bei 9600Bps ist ein Bit genau 1/9600 Sekunde lang, das sind 104 µs. Bei einem PIC-Takt von 4 MHz, werden Befehle im PIC mit einem Zyklustakt von 1 MHz abgearbeitet. Jeder Befehl (mit Ausnahme der wenigen Befehle, die 2 Zyklen lang sind) dauert folglich 1 µs. Die Schleife von 'Warte1' bis zu 'goto Warte1' ist im Programm 6 Zyklen lang (goto benötigt 2 Zyklen), ein Durchlauf benötigt folglich 6 µs. Um 1 Bit lang (also 104µs) zu verzögern, muß man die Schleife 16 mal durchlaufen. Diese durchläufe benötigen 96µs. Die noch verbleibenden 8 µs verbauchen der Aufruf von Warte_s, das Laden von cycl_2 sowie das Return. ;********************************************************** ;ein Bit Zeitverzoegerung mit einer Warteschleife ; ; senden 4 MHz 10 MHz ; 2400 Bps = 69d 173d ; 9600 Bps = 16d 43d Warte_s movlw D'16' ; 9600 Bps / 4 MHz senden movwf cycl_2 ; Warte1 nop nop nop decfsz cycl_2, 1 goto Warte1 return
So mein Gott: hier ist endlich der ultimative Link für Assembler & Warteschleifen. http://www.sprut.de/electronic/pic/programm/lauflicht/lauflich.htm#warte nach 4 Beiträgen bin ich jetzt still
Die Warteschleifen haben aber ein Problem: sie sind nicht so genau wie ein Timer. Beim Timer kann man nebenher noch etwas anders machen, Tasten pollen o.ö., ich arbeite daher bei Verzögerungen lieber mit den Timern. Der Aufwand ist minimal: Timer konfigurieren im INIT, beim Aufruf: Timer setzen und Timerflag pollen.
@stephan Das ist sein erstes PIC Programm. Bei seinem 3 oder 5 wird er den Timer dann auch nutzen. Lass ihm Zeit zu lernen :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.