Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: танцы с бубном
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
alexkr131
Компилятор WinAVR. Подпрограмма чтения из HD44780 (в режиме 4 бит)
[code]
void LCD_READ(void)
{

byte data;
LCD_DATAPORT=0xff;

LCD_CTRLPORT|=LCD_E;
_delay_us(1);
data=LCD_DATAPIN;
LCD_CTRLPORT&=~LCD_E;

#ifdef LCD_4BIT


LCD_CTRLPORT|=LCD_E;
_delay_us(1);
byte temp=LCD_DATAPIN ;
LCD_CTRLPORT&=~LCD_E;

data&=0x0f;
SWAP(data);

temp&=0x0f;
//data|=temp;

#endif

return data;
}

транслируется в
60 LCD_READ:
61 .LFB12:
62 .LM5:
63 /* prologue: frame size=0 */
64 /* prologue end (size=0) */
65 .LM6:
66 003e 8FEF ldi r24,lo8(-1)
67 0040 88BB out 56-0x20,r24
68 .LM7:
69 0042 D89A sbi 59-0x20,0
70 .LBB42:
71 .LBB43:
72 .LBB44:
73 .LBB45:
74 .LM8:
75 0044 85E0 ldi r24,lo8(5)
76 0046 982F mov r25,r24
77 .LVL0:
78 /* #APP */
79 0048 9A95 1: dec r25
80 004a 01F4 brne 1b
81 /* #NOAPP */
82 .LBE45:
83 .LBE44:
84 .LBE43:
85 .LBE42:
86 .LM9:
87 004c 96B3 in r25,54-0x20
88 .LVL1:
89 .LM10:
90 004e D898 cbi 59-0x20,0
91 .LM11:
92 0050 D89A sbi 59-0x20,0
93 .LBB46:
94 .LBB47:
95 .LBB48:
96 .LBB49:
97 .LM12:
98 /* #APP */
99 0052 8A95 1: dec r24
100 0054 01F4 brne 1b
101 .LVL2:
102 /* #NOAPP */
103 .LBE49:
104 .LBE48:
105 .LBE47:
106 .LBE46:
107 .LM13:
108 0056 86B3 in r24,54-0x20
109 .LVL3:
110 .LM14:
111 0058 D898 cbi 59-0x20,0
112 .LM15:
113 005a 9F70 andi r25,lo8(15)
114 .LM16:
115 /* #APP */
116 005c 9295 swap r25
117 /* #NOAPP */
118 /* epilogue: frame size=0 */
119 005e 0895 ret
Возвращает R24. То есть только последний полубайт. А где старший?
aaarrr
А что здесь можно еще вернуть? Один полубайт просто выброшен.
Код
    data&=0x0f;
    SWAP(data);
    
    temp&=0x0f;
    //data|=temp;
    
    return data;
alexkr131
Цитата(aaarrr @ May 10 2008, 22:03) *
А что здесь можно еще вернуть? Один полубайт просто выброшен.
Код
    data&=0x0f;
    SWAP(data);
    
    temp&=0x0f;
    //data|=temp;
    
    return data;


Нет. В первоначальном варианте это было так:
Код
    data&=0x0f;
    SWAP(data);
    
    temp&=0x0f;
    data|=temp;
    
    return data;


-- Результат - аналогично.
aaarrr
А он ведь вообще ничего не обязан возвращать: void LCD_READ(void) smile.gif
alexkr131
Цитата(aaarrr @ May 10 2008, 23:49) *
А он ведь вообще ничего не обязан возвращать: void LCD_READ(void) smile.gif


Спасибо. И действительно - как бабка пошептала.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.