mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eine Variable definieren mit mehr als 8 Bit (16f690)


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
Ich habe vor kurzem Angefangen mit der Programmierung eines PICs vom Typ 
16f690. Dafür verwende ich PICkit 2 und MPLAB.
Nun habe ich ein Problem, ist es irgendwie möglich eine Variable zu 
definieren, welche eine grössere Zahl speichern kann als 255 respektive
8 Bit?
Da ich noch nicht sehr lange PIC programmiere wäre ich dankbar wenn eure 
Hilfen möglichst einfach formuliert sind

Gruß, Daniel

: Verschoben durch User
Autor: heinzhorst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimmst du einfach einen anderen Variablentyp. Hier sind mal ein 
paar aufgeführt:

unsigned char = 8 Bit  (0 - 255)

unsigned int = 16 Bit  (0-65536)

unsigned long = 32 Bit (0-4294967296)

Etwas Literatur zu den Grundlagen der C-Programmierung wäre sinnvoll.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

wenn du in Assembler arbeitest, musst du entsprechend deine Variable(n) 
auf 2 Bytes oder mehr verteilen.

Gruß
Gerhard

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Verteilen habe ich auch schon gemacht aber in meinem Fall 
nützt es nichts, da ich eine Zahl mit einer anderen dividiere.

Dies mache ich so:

    movlw  0xFF               ; 255 in Periodendauer schreiben
    movwf  Periodendauer

Periodendauerloop
    movf  frequenz,0          ; Variable frequenz in Arbeitsregister 
laden
    bcf  STATUS, C            ; Carry Flag löschen
    subwf  Periodendauer,1    ; Periodendauer = Periodendauer - 
Arbeitsreg.
    bnc  Periodendauerfertig  ; Wenn C=1 springe zu Periodendauerfertig
    incf  Taktrate,1          ; Taktrate +1
    goto  Periodendauerloop   ; springe nach Periodendauerloop

Periodendauerfertig
                  ..... usw.

Das Problem ist nun, dass ich in die Variable Periodendauer höchstens 
255 schreiben kann und in der Variable frequenz eine Zahl zwischen 1 und 
150 steht. Dies bedeuted das wenn in der Variable frequenz 130 steht 
schlussendlich das gleiche Resultat gibt wie wenn 150 stehen würde.
Nun müsste ich in die Variable Periodendauer eine höhere Zahl schreiben 
können, damit die Genauigkeit zunimmt. Denn wenn ich es nur Verteile 
habe ich den Fehler einfach mehrere Male.
Trotzdem danke für den Tipp

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

schau mal hier:

http://www.piclist.com/techref/microchip/routines.htm

Als ich die Dinger noch in Assembler programmiert hab, hab ich dort 
viele interessante Funktionen gefunden. Manchmal muss man da noch ein 
bisschen feilen, aber sonst nicht schlecht die Seite.


Gruß
Gerhard

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.