Сообщение от AlexWonder
|
(Не в тему, но все же)
Как на Си выполнить АСМовую команду SWAP ? (иногда надо выплюнуть в порт сначала младщие 4 бита, затем старшие).
|
посмотри как управляются с LCD1602
inline unsigned char __swap_nibbles(unsigned char data)
{
asm volatile("swap %0" : "=r" (data) : "0" (data));
return data;
}
для програмера не понятно и забей
хотя начинал с ассемблера
вот как применяется
//************************************************** *****************************************
//общая функция
//#pragma inline = forced
static inline void LCD_CommonFunc(unsigned char data)
{
#ifdef BUS_4BIT
unsigned char tmp;
tmp = PORT_DATA & 0x0f;
tmp |= (data & 0xf0);
PORT_DATA = tmp; //вывод старшей тетрады
SetBit(PORT_SIG, EN);
_delay_us(2);
ClearBit(PORT_SIG, EN);
data = __swap_nibbles(data);
tmp = PORT_DATA & 0x0f;
tmp |= (data & 0xf0);
PORT_DATA = tmp; //вывод младшей тетрады
SetBit(PORT_SIG, EN);
_delay_us(2);
ClearBit(PORT_SIG, EN);
#else
PORT_DATA = data; //вывод данных на шину индикатора
SetBit(PORT_SIG, EN); //установка E в 1
_delay_us(2);
ClearBit(PORT_SIG, EN); //установка E в 0 - записывающий фронт
#endif
}
главное, чо-бы ты понял - а нафига ці ниблы менять
![Весело](images/smilies/icon_laugh.gif)
тупо сдвинул 4 раза и получи