Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <reg51.h>
unsigned int y;
void main()
{
// Часть 1 - перевод BCD -> двоичный и обратно
P2 = (P1 >> 4) * 10 + (P1 & 0x0f); //ввод 2/10 числа с порта Р1, выделение со сдвигом старшей тетрады, вывод двоичного числа в Р2
P3 = ((P2 / 10) << 4) + (P2 % 10);
// Часть 2 - перевод дробного десятичного в дробное двоичное и обратно
// переводим из десятичного формата в двоичный, заранее умножив на 256
y = (((P1 & 0x0f) << 8) + ((P1 & 0xf0) << 4) * 10);
// убираем начальное масштабирование
y /= 100;
P2 = y;
// на самом деле, это колдовство.
// но если записать P2 = ((y * 100) & 0xff00) >> 8) / 10) << 4; (старшая цифра)
// и вычистить все лищнне, получится именно так, лол
P3 = ((y * 10) & 0xf00) >> 4;
// Младшая цифра
P3 += (((y * 100) & 0xff00) >> 8) % 10;
}
Соседние файлы в папке c51