-
        

Ergebnis 1 bis 10 von 10

Thema: 16F88 Problem mit nicht edendem Prog! easy.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79

    16F88 Problem mit nicht edendem Prog! easy.

    Anzeige

    Hallo!

    Wollte mich mal am 16F88 versuchen und als einstieg eine LED blinken lassen.
    Die LED blinkt an RB0.
    Das Problem ist nun, dass das Program nicht zu enden scheint.
    Zumindest blinkt die LED endlos, sollte aber nach 2 mal Aufleuchten aus bleiben.

    Die LED hängt mit Plus an RB0 und mit minus an Masse.

    Gruß
    stowoda

    Code:
    ;		PIC initialization
    ;*******************************************
    ;-------------------------------------------
    		org		0x00
    
    		bsf		STATUS, RP0
    		movlw	.0						; for LCD
    		movwf	TRISB					; PORTB --> OUTPUT
    		bcf		STATUS, RP0
    		clrf	PORTB
    
    
    
    
    		movlw	B'00000001'
    		movwf	PORTB				
    		movlw	.255
    		call 	WAIT
    		movlw	B'00000000'
    		movwf	PORTB
    		movlw	.255
    		call 	WAIT
    		movlw	B'00000001'
    		movwf	PORTB
    		movlw	.255
    		call 	WAIT
    		movlw	B'00000000'
    		movwf	PORTB
    
    		goto 	ende

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Naja, wo ist "ende" ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79
    Vor end.

    Was ich nicht dargestellt hab ist die Verzögerungsschleife, die jedoch mit return endet..

    Quasi so:


    Hier das Hauptprog..

    ..hier ist die Schleife

    ende


    end
    Seltsam ist, dass ich mit nem 16f84A und dem gleichen Code eine ähnliche Endlosschleife produziere..
    Ich werd verrückt..

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Nur weil's "ende" heißt, bleibt ja der Rechner nicht stehen. er läuft durch den kompletten Programmspeicher und fängt dann von vorn wieder an.

    So sollte ein "ende" aussehen: (eine dauerschleife)

    Ende:
    goto ende
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79
    Er springt zu: ende und läuft weiter..Trifft auf end und sollte stehenbleiben..
    Ich versteh nix mehr.

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    "end" ist ein statement für den Compiler. das erzeugt keinen Code
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79
    Irgendwie missverstehen wir uns..

    Nach jedem Programm sollte ein "end" kommen.



    Nun, diese Regel befolge ich.

    Könntest Du mir ein Hexfile schicken für einen 16F88 oder 16F84a?
    Lass die LED an RBA1 zweimal aufblinken..

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Tut mir leid, ich heiß' zwar PICnick, bin aber auf AVR umgestiegen.
    Aber schau dich dort um, das ist speziell für PIC

    www.sprut.de
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Also PicNick hat recht. Das Befehl "end" hat keinen direkten Einfluss auf dein Programm, sie dient dem Compiler nur als Information, dass der Sourcecode beendet ist und er alles nach diesem Schlüsselwort geflissen ignorieren soll. Und ja, nach jedem Programm kommt ein "end", aber in einen PIC kannst du nur ein Programm hineinbrennen, d.h. hast du nur ein "end" in einer Assembler-Datei.

    Dein Problem, dass der PIC in einer "Unendlichschleife" gerät, in welchem das LED gleichmäßig blinkt kommt daher, dass der PIC sich immer wieder resetet. Man muss einige Dinge bei der Erstellung eines Programmes beachten udn eine ist es, IMMER eine Unendlichschleife zu haben, die verhindert, dass die Hauptroute nicht einfach bis zum Ende des Speicherplatzes durchläuft und dann wieder von vorne beginnt.

    In deinem Fall ist es, dass du statt der Zeile "goto ende" den Schleifen-forschlag von PicNick Einfügst, die dann nicht mehr verlassen wird. Wenn dann deine Verzögerungsfunktion langsam/groß genug ist, dass das Blinken mit dem Auge zu erkennen ist, wirst du sehen, dass der PIC genau das macht, was du von ihm willst .

    Wenn du einmal sehen willst, was passiert, wenn du keine Unendlich-Schleife in einem Program hast, dann stell mal den Simulator ein und lass den Zeiger über die letzte Befehlszeile laufen und schaue anschließend, wo er wieder anfängt, also bei "org 0x00" (bzw. einen Befehl darunter ).
    MfG
    Mobius

    €dit: Ich schreib dir mal ein Programmgerüst morgen (technisch gesehen heute) aber jetzt grad bin ich zu müde dazu.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79
    Ja, klar!

    Danke Mobius, ich habs endlich kapiert.. Mach Dir nicht mehr die Mühe mit dem Programmgerüst.
    Hab lange nichts mehr mit den PIC´s gemacht und hielt daran fest, dass der PIC nach der end direktive irgendwie anhält..

    Vielen Dank nochmal..


    Gruß
    stowoda

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •