Есть программа, которю я пишу под AT89C51. В ней есть кусок, который читает информуцию с внешнего устройства байт за байтом и выводит ее на lcd экран:
void read_mem(){
int iter;
char now;
char now2;
char char1[4];
char char2[2];
for (iter=0; iter<=7;iter++){
now = RX();
memory[iter] = now;
now2 = now;
//TX(now); // commented magic
sprintf (char1, "%2.2X", now);
char2[0] = char1[0];
char2[1] = char1[1];
lcd_display(char2);
ms_delay(300);
}
Char2 - это костыль, который служит для того, чтобы обрезать то, что получается в char1 (там получается FF00 вместо просто FF, если подскажете, как это исправить по-человечески - большое спасибо, но вопрос даже не в этом).
В таком виде как сейчас на экран выводится что-то вроде:"000014 81 7F" вместо "00147F".
НО! коде есть закоментированная магия в виде метода, который передает на то же самое внешнее устройство свой аргумент типа char:
void TX(unsigned char cmd){
unsigned char temp = 0;
unsigned char iter = 0;
temp = cmd;
for (iter=0;iter<8;iter++) {
if (temp&0x01) {
termopin = 0x0; //transfer 1
us_5_delay();
termopin = 0x1;
us_70_delay();
} else { //transfer 0
termopin = 0x0;
us_70_delay();
termopin = 0x1;
us_5_delay();
}
temp >>= 1;
}
us_70_delay();
}
Если раскоментировать эту строку по на экране магически появляется правильный текст. Почему??