Hallo,
ich steige gerade in C und AVR-GCC neu ein. Ich spiele gerade mit dem
Tutorial mit der LCD Ansteuerung herum, mich würde eine Sache gerne
interessieren, die mir noch nicht ganz schlüssig ist.
In dem Tutorial :
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
wird auf einen Programmabschnitt hingewiesen mit der Funktion
"lcd_data()":
1 | void lcd_data(unsigned char temp1)
|
2 | {
|
3 | unsigned char temp2 = temp1;
|
4 |
|
5 | LCD_PORT |= (1<<LCD_RS); // RS auf 1 setzen
|
6 |
|
7 | temp1 = temp1 >> 4;
|
8 | temp1 = temp1 & 0x0F;
|
9 | LCD_PORT &= 0xF0;
|
10 | LCD_PORT |= temp1; // setzen
|
11 | lcd_enable();
|
12 |
|
13 | temp2 = temp2 & 0x0F;
|
14 | LCD_PORT &= 0xF0;
|
15 | LCD_PORT |= temp2; // setzen
|
16 | lcd_enable();
|
17 |
|
18 | _delay_us(42);
|
19 | }
|
Dabei Frage ich mich was bei diesem Zeilenabschnitt genau gemacht wird:
1 | temp1 = temp1 >> 4;
|
2 | temp1 = temp1 & 0x0F;
|
3 | LCD_PORT &= 0xF0;
|
4 | LCD_PORT |= temp1; // setzen
|
So wie ich das verstanden habe wird das Byte temp1 von links nach rechts
"ge-shifted" richtig ? Was passiert denn danach , wird dann auf temp1
das untere Nibble auf 1111 gesetzt ? So wie ich das verstehe wird danach
der selbe Befehl am LCD-Port ausgeführt nur mit dem oberen Nibble?
Am Ende wird das veränderte Byte am LCD ausgegeben. Wäre super wenn ihr
mir beim Verständnis helfen könntet.
Gruß
Schlaumacher