[ create a new paste ] login | about

Link: http://codepad.org/donWXZCU    [ raw code | fork ]

C, pasted on Aug 4:
#define bit_check_and_set(dbyte, dbit, port, pbit)\
    asm volatile ("sbrs %0, %1\n\t" :: "r" (dbyte), "I"(dbit));\
    asm volatile (" cbi %0, %1\n\t" :: "I" (_SFR_IO_ADDR(port)), "I"(pbit));\
    asm volatile ("sbrc %0, %1\n\t" :: "r" (dbyte), "I"(dbit));\
    asm volatile (" sbi %0, %1\n\t" :: "I" (_SFR_IO_ADDR(port)), "I"(pbit))

static void W4B (const byte b) asm ("W4B");
static void W4B (const byte b)
{
    sbi (HD44780_EN_PORT, HD44780_EN_BIT);

    // this provides the necesary delay: (atleast 44 cycles ~= 3us) 
    bit_check_and_set (b, 0, HD44780_D0_PORT, HD44780_D0_BIT);
    bit_check_and_set (b, 1, HD44780_D1_PORT, HD44780_D1_BIT);
    bit_check_and_set (b, 2, HD44780_D2_PORT, HD44780_D2_BIT);
    bit_check_and_set (b, 3, HD44780_D3_PORT, HD44780_D3_BIT);

    cbi (HD44780_EN_PORT, HD44780_EN_BIT);
}

static void W8B (const byte value)
{
//  asm volatile("swap %0   \n\t" : "=r" (value) : "0" (value));
//  asm volatile("rcall W4B \n\t");
//  asm volatile("swap %0   \n\t" : "=r" (value) : "0" (value));
//  asm volatile("rcall W4B \n\t");
    W4B(value >> 4);
    W4B(value);

    _delay_ms (2);
}


Create a new paste based on this one


Comments: