#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
  • #
    09.05.201413.22 Кб14Lab_1.uvproj
  • #
    09.05.201455.66 Кб14Lab_1_uvopt.bak
  • #
    09.05.201413.23 Кб14Lab_1_uvproj.bak
  • #
    09.05.20141.84 Кб14Main (Kirill Andreevich's conflicted copy 2011-02-22).LST
  • #
    09.05.2014831 б14Main (Kirill Andreevich's conflicted copy 2011-02-22).OBJ
  • #
    09.05.2014843 б15Main.c
  • #
    09.05.20146.18 Кб14Main.LST
  • #
    09.05.20141.39 Кб14Main.OBJ
  • #
    09.05.2014200 б14ok
  • #
    09.05.20146.38 Кб14STARTUP.A51