Код: Выделить всё
POS1=char_table[h/10];
POS2=char_table[h%10];
Тоже работает, только медленнее. Деление поганая операция ) Советую использовать бинарную арифметику везде где возможно.
Код: Выделить всё
POS1=char_table[h/10];
POS2=char_table[h%10];
Passer писал(а):Прошу прощения за оффтоп(хотя немного по теме)
С месяц назад мне попадалась статья-обучалка в которой описывалось как создать вольтметр и вывести результат на лсд...там(точно конечно уже не скажу) код вывода не превышал трёх-четырёх строк(т.е. код без визарда CV) строк. Ткните пожалуйста в эту статью...найти не могу.
Man писал(а):Понадобилось разложить 4 байта входных данных в функцию по 1 байту для дальнейшей обработки , тоесть чтобы из 0xFF4A573C получилось 4 переменных unsigned char (FF),(4A),(57),(3C).
Сейчас читал про наложение маски неочень понятно как это делать , приведите примерчик как разложить.
Код: Выделить всё
unsigned char eeprom_read(unsigned long int address)
{
unsigned char data; //переменная для прочитаных данных
unsigned char i1; //
unsigned char i2; //
unsigned char i3; //
i1=address&0b00000000000000000000000011111111; //налаживаем маску 0x000000FF
i2=address&0b00000000000000001111111100000000; //налаживаем маску 0x0000FF00
i3=address&0b00000000111111110000000000000000; //налаживаем маску 0x00FF0000
PORTD=0xFF;
DDRD=0xFF; //Порт на вывод
PORTD=i1; //Пишем адрес.
PORTF.0=1; // A0-A7
delay_ms(1); // .
PORTF.0=0; // .
// .
PORTD=i2; // A8-A15
PORTF.1=1; // .
delay_ms(1); // .
PORTF.1=0; // .
// .
PORTD=i3; // A16-X
PORTF.2=1; // .
delay_ms(1); // .
PORTF.2=0; // .
PORTD=0xFF;
DDRD=0x00; //Порт на ввод
PORTF.3=1; //Читаем
delay_ms(1);
data=PIND;
PORTF.3=0;
return data; //Возрашаем прочитаное
}