Компилятор 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. То есть только последний полубайт. А где старший?
|