реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> танцы с бубном
alexkr131
сообщение May 10 2008, 18:47
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 10-05-08
Пользователь №: 37 404



Компилятор 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. То есть только последний полубайт. А где старший?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 10 2008, 19:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А что здесь можно еще вернуть? Один полубайт просто выброшен.
Код
    data&=0x0f;
    SWAP(data);
    
    temp&=0x0f;
    //data|=temp;
    
    return data;
Go to the top of the page
 
+Quote Post
alexkr131
сообщение May 10 2008, 20:40
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 10-05-08
Пользователь №: 37 404



Цитата(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;


-- Результат - аналогично.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 10 2008, 20:49
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А он ведь вообще ничего не обязан возвращать: void LCD_READ(void) smile.gif
Go to the top of the page
 
+Quote Post
alexkr131
сообщение May 11 2008, 00:02
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 10-05-08
Пользователь №: 37 404



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


Спасибо. И действительно - как бабка пошептала.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 09:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016