Antworten

Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor pic18
 - Heute um 09:51:26 CEST
ich bin mir nicht sicher ob es nicht:
movlw  'H'

anstatt
movlw  "H"
heißen muss
Autor Ottmar
 - Heute um 09:22:36 CEST
Nachtrag: Natürlich wird so der Buchstabe "H" im LCD ausgegeben.
Autor Ottmar
 - Gestern um 20:08:20 CEST
Nochmals, da ist was dumm gelaufen, daher eine Bitte an den ADMIN den vorhergehenden Beitrag zu löschen!

movlw "H"                  schreibt den Wert Ascii(72) ins WREG
movwf OutLcdDten überträgt den  Inhalt des WREG in die Variable OutLcdDaten

Danach wird eine Subroutine zur Ausgabe des Zeichens aufgerufen.
Bei mir etwa so:

movlw  "H"
CALL        OutLcd_Data:
;..........................
  OutLcd_Data:
      ;sends 1 data-byte through the LCD 4bit-interface (2 nibbles)
  movwf    LcdData          ;copy Instruction from WREG to variable
  CALL    LcdBusy          ;LCD ready to receive next instruction?
  movf    LcdData,w        ;contents LCD-Data (Charakter)
  ANDLW    b'11110000'      ;Bitmask to select HI-nibble
  BANKSEL  LCD_LAT          ;Wechsel zu Bank 2
  movwf    LCD_LAT          ;LCD_PORT write Nibble to 4bit-databus
  bsf      LCD_RS            ;1=LCD-Data-mode
  bsf      LCD_E            ;enable LCD 4bit-databus
  nop                        ;toggle
  bcf      LCD_E            ;disable databus
  BANKSEL  0
  swapf    LcdData, w        ;change the nibbles
  andlw    b'11110000'      ;Bitmask to select the LO-nibble
  BANKSEL  LCD_LAT
  movwf    LCD_LAT          ;LATx /LCD_PORT write Nibble to 4bit-bus
  bsf      LCD_RS            ;1=LCD-Data-mode
  bsf      LCD_E            ;enable LCD 4bit-databus
  nop                        ;toggle
  bcf      LCD_E            ;databus is now disabled  
  bcf      LCD_RS            ;=0 LCD-control-mode
  BANKSEL  0                ;bank 0
  RETURN


Funktion:
LcdData = b'01001000' = d'72" = 0x48
Mit LcdBusy wird gefragt, ob das LCD mit etwas anderem beschäftig ist, z.B. einer anderen Ausgabe. Das Byte wird nun in sein oberes, bzw. unteres Nibble zerlegt und jedes Nibble wird einzeln mit
bsf Lcd_E in das LCD übertragen.
bsf LCD_RS schaltet das LCD auf Datenempfang um.
Daten: ausgebbare zeichen
bcf LCD_RS wird verwendet wenn eine Instruktion, z.B. eine Ausgabeadress verwendet werden soll.

mfG Ottmar
Autor picass
 - Gestern um 19:02:29 CEST
Versuche schon seit geraumer Zeit, so etwas Einfaches wie eine Übersetzung eines Progs, welches in der Alt-Form der Assemblersprache unter MPASM geschrieben wurde. Übrigens von dem Übervater "Sprut". Da gibts Dinge, rsp. Ausdrücke, an denen ich mich festbeiße, aber auch solche, über die ich nur den Kopf schütteln kann. Das erste Beispiel passt wohl für Beides. Da geht es in einem Prog - geschrieben für einen PIC16F84 - um die Initialisierung und letztlich die Ausgabe von Text auf ein LCD-Display. In der Ausgaberoutine "Hallo ausgeben" finden sich solche Zeilen wie:
- movlw 'H'
- movwf OutLcdDaten

Was habe ich übersehen? Bei diesem Befehl wird doch eine Zahl übergeben und kein Buchstabe?!
Grüße, picass

Similar topics (1)