Цитата(TamTam @ Jul 5 2006, 06:16)

Только сейчас я начал понемать, когда посмотрел на код, мало того что я закосячил с загрузкой в сдвиговый регистр, так и оказывается , завершения для команд и данных разные.
Подскажите как правильно грузить данные в регистр сдвига
Помоему так:
Код
/////////////////////
#define reg_clk PORTB.2
#define reg_dat PORTB.1
void send_lcd_reg_2wire(unsigned char send_data)
{
unsigned int i;
for (i=0; i<8; i++) // цикл на 8 итераций
{
if ((send_data & 0x80) == 0x80) // если 7-й бит == 1 (т.е. грузим сначала старший бит)
reg_dat = 1; // запись 1 в линию данных
else // иначе
reg_dat = 0; // запись 0 в линию данных
#asm("nop"); // задержка для установления уровня
reg_clk = 1; // передний фронт CLK
#asm("nop"); // выдержка времени CLK
reg_clk = 0; // задний фронт CLK
send_data = send_data << 1; // сдвиг данных на 1 бит влево
}
/* это я не понял зачем......
PORTB.0 = 1;
#asm("nop"); // задержка для установления уровня
PORTB.0 = 0;
*/
}
////////////////////
А вообще посмотрите как сделан SPI. Принцип такой же.
Истина рождается в спорах; но когда страсти кипят, истина испаряется.