hi, ich wollt ne Steuerung für mein 2 Controller LCD schreiben...wenn eine Variable 1 ist soll der nächste befehl übersprungen werden wie macht man sowas. bei den Vergleichen geht das ja glaube nur mit srüngen oder? und das wärren in meinem fall ziemlich viele, was unpraktich wäre.
es gibt sbic bzw. sbis "S kip if B it in reg I ster S et / C leared" Datenblatt hilft....
übringens hat deinposting wenig zusammenhang mit dem betreff...
sorry ich habe mich vertippt...ich meinte die befehle: sbic und sbis und wollte sowas mit Variablen machen...
ich habe mal was mit registern probiert...allerdings kommt jetzt egal ob ich auf 1 oder display 2schalte immer auf beiden Text... hier der Code: .include "m32def.inc" .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def lcdno = r19 ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp1 ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp1 ldi temp1, 0xFF ; Port D = Ausgang out DDRD, temp1 cbr lcdno, 0 rcall lcd_init ; Display initialisieren rcall lcd_clear ; Display löschen sbr lcdno, 0 rcall lcd_init ; Display initialisieren rcall lcd_clear ; Display löschen cbr lcdno, 1 ldi temp1, 'T' ; Zeichen anzeigen rcall lcd_data ldi temp1, 'e' ; Zeichen anzeigen rcall lcd_data ldi temp1, 's' ; Zeichen anzeigen rcall lcd_data ldi temp1, 't' ; Zeichen anzeigen rcall lcd_data ;sbr lcdno, 1 ;ldi temp1, 'T' ; Zeichen anzeigen ;rcall lcd_data ;ldi temp1, 'e' ; Zeichen anzeigen ;rcall lcd_data ;ldi temp1, 's' ; Zeichen anzeigen ;rcall lcd_data ;ldi temp1, 't' ; Zeichen anzeigen ;rcall lcd_data loop: rjmp loop .include "lcd-routines.asm" ; LCD-Routinen werden hier eingefügt ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LCD-Routinen ;; ;; ============ ;; ;; (c)andreas-s@web.de ;; ;; ;; ;; 4bit-Interface ;; ;; DB4-DB7: PD0-PD3 ;; ;; RS: PD4 ;; ;; E: PD5 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .equ LCD_PORT = PORTD .equ LCD_DDR = DDRD .equ PIN_E = 5 .equ PIN_E2 = 6 .equ PIN_RS = 4 .equ XTAL = 15300000 ;sendet ein Datenbyte an das LCD lcd_data: mov temp2, temp1 ; "Sicherungskopie" für ; die Übertragung des 2.Nibbles swap temp1 ; Vertauschen andi temp1, 0b00001111 ; oberes Nibble auf Null setzen sbr temp1, 1<<PIN_RS ; entspricht 0b00010000 out LCD_PORT, temp1 ; ausgeben rcall lcd_enable ; Enable-Routine aufrufen ; 2. Nibble, kein swap da es schon ; an der richtigen stelle ist andi temp2, 0b00001111 ; obere Hälfte auf Null setzen sbr temp2, 1<<PIN_RS ; entspricht 0b00010000 out LCD_PORT, temp2 ; ausgeben rcall lcd_enable ; Enable-Routine aufrufen rcall delay50us ; Delay-Routine aufrufen ret ; zurück zum Hauptprogramm ; sendet einen Befehl an das LCD lcd_command: ; wie lcd_data, nur RS=0 mov temp2, temp1 swap temp1 andi temp1, 0b00001111 out LCD_PORT, temp1 rcall lcd_enable andi temp2, 0b00001111 out LCD_PORT, temp2 rcall lcd_enable rcall delay50us ret ; erzeugt den Enable-Puls lcd_enable: sbrs lcdno, 1 sbi LCD_PORT, PIN_E ; Enable high sbrc lcdno, 1 sbi LCD_PORT, PIN_E2 ; Enable high nop ; 3 Taktzyklen warten nop nop cbi LCD_PORT, PIN_E ; Enable wieder low cbi LCD_PORT, PIN_E2 ret ; Und wieder zurück ; Pause nach jeder Übertragung delay50us: ; 50us Pause ldi temp1, ( XTAL * 50 / 3 ) / 1000000 delay50us_: dec temp1 brne delay50us_ ret ; wieder zurück ; Längere Pause für manche Befehle delay5ms: ; 5ms Pause ldi temp1, ( XTAL * 5 / 607 ) / 1000 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 brne WGLOOP1 dec temp1 brne WGLOOP0 ret ; wieder zurück ; wieder zurück ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden lcd_init: ldi temp1, 0xFF ; alle Pins am Ausgabeport auf Ausgang out LCD_DDR, temp1 ldi temp3,6 powerupwait: rcall delay5ms dec temp3 brne powerupwait ldi temp1, 0b00000011 ; muss 3mal hintereinander gesendet out LCD_PORT, temp1 ; werden zur Initialisierung rcall lcd_enable ; 1 rcall delay5ms rcall lcd_enable ; 2 rcall delay5ms rcall lcd_enable ; und 3! rcall delay5ms ldi temp1, 0b00000010 ; 4bit-Modus einstellen out LCD_PORT, temp1 rcall lcd_enable rcall delay5ms ldi temp1, 0b00101000 ; 4 Bot, 2 Zeilen rcall lcd_command ldi temp1, 0b00001100 ; Display on, Cursor off rcall lcd_command ldi temp1, 0b00000100 ; endlich fertig rcall lcd_command ret ; Sendet den Befehl zur Löschung des Displays lcd_clear: ldi temp1, 0b00000001 ; Display löschen rcall lcd_command rcall delay5ms ret ; Sendet den Befehl: Cursor Home lcd_home: ldi temp1, 0b00000010 ; Cursor Home rcall lcd_command rcall delay5ms ret
oik....jetgzt bleibt zur abwechslung mal der Erste balken schwarz und egal was ich mache es kommt auf display 2...
irgendwie steht der text jedes mal, wenn ich Strom draufgebe wo anders..
hat sich erledigt...ich habe auch nen neuen Thread mit richtiger Überschrift aufgemacht...der hier kann GELÖSCHT werden!!!!
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.