Неправильный вывод sprintf C51 8051 MCU встроенная система

У меня есть следующий фрагмент кода C для микроконтроллера AT89S52:

unsigned char x = 0x10;
unsigned char str[21];

sprintf(str, "%u", (x >> 4) );

Прототип функции sprintf в stdio.h:

extern int sprintf  (char *, const char *, ...);

Может кто-нибудь сказать мне, почему моя строка содержит "256" вместо "1"?, Переменная x даже не достаточно велика, чтобы содержать значение 256.

Я компилирую с KEIL uVision 5, используя стандартную библиотеку stdio.h.

Если я использую:

void UlToStr(char *s, unsigned long bin, unsigned char n)
{
    s += n;
    *s = '\0';

    while (n--)
    {
        *--s = (bin % 10) + '0';
        bin /= 10;
    }
}

вместо sprintf строка содержит "1".

Я проверяю содержимое строки, распечатывая ее через char-LCD 40x4 (контроллер, совместимый с KS 0066)

str_lecd1(str);

со следующими функциями:

void str_lcd1(unsigned char *a)
{
    int i;
    for(i=0;a[i]!='\0';i++)
     data_lcd1(a[i]);
    delay(10);
}

void data_lcd1(unsigned char x)
{
    P1 = x;
    rs = 1;
    en1 = 1;                
    delay(4);
    en1=0;
    delay(4);
}

0 ответов

Другие вопросы по тегам