Мя обычно делаю такое в "фоновом" режиме по прерыванию от внутреннего таймера..
P.S. На правах офф-топа:
Обработка идёт побитно, т.е. когда обработаются все биты, за N-ое количество прерываний, то матрица значений переворачивается на 90 градусов и значения записываются в выходные регистры..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Мя обычно делаю такое в "фоновом" режиме по прерыванию от внутреннего таймера..
Ну так и у меня - по секундному таймеру. Тот, который и время считает. В прерывании выставляется флаг, в основном цикле, если есть флаг - начинаем опрос. Примерно так.
ploop писал(а):Ну так и у меня - по секундному таймеру.
ты не понял, мя по прерыванию не считываю весь датчик целиком, а считываю его побитно, если "длина температуры" 12 бит, то считывается за 12 прерываний от таймера и плюс ещё запуск преобразования..
Мя так и написал:
МитяРа писал(а):за N-ое количество прерываний,
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
ааа, теперь ясно. Не, у меня и так нормально должно быть, прерывания разрешены всегда, кроме приёма/передачи одного бита (сам знаешь, временнЫе задержки должны быть чёткими). А всё остальное (приём байта, расчет CRC) может быть прерван прерываниями, но тут не страшно.
как нить сделаю проектик и поясню в статье на примере, что и как..
Просто для подобных задач мя использую алгоритмы арифметико-логических вычислений, без использования каких либо переходов в программе..
Если поймёшь, как это можно делать, то может применишь где..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Кстати, обработку RTC мя когда-то точно так-же сделал - без переходов, простым линейным алгоритмом..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Принцип - помню, а по поводу реализации надо сосредоточится и расписать, что да как..
Это не быстро, может сегодня вечером время будет, а может позже..
P.S. Только у мя всё под МК51 заточено, но думаю его можно на AVR-ки "натянуть"...
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Не смог - переходы всё-таки в Си-шной программе присутствуют..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Мастер Ломастер писал(а):не понял... какие переходы, куда?
Мя писал:
МитяРа писал(а):обработку RTC мя когда-то точно так-же сделал - без переходов, простым линейным алгоритмом..
Будет время, сосредоточусь и вспомню, как сделал..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
ploop писал(а):Вот мне и интересно, как МитяРа без них умудрился?
Всё достаточно просто..
Делаем инкремент секунд и если полученное значение равно 60-ти, то устанавливаем бит инкремента минут, а секунды обнуляем маской..
То-же самое делаем для минут с выставлением бита инкремента часов, только часы сравниваем с 24-мя..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Хм... Хорошая тренировка для мозга!
В принципе я понял как это сделать: сравниваем, дальше складываем с переносом. Если при сравнении выскочит флаг переполнения, сложение сработает.
ploop писал(а):Вот мне и интересно, как МитяРа без них умудрился?
Всё достаточно просто..
Делаем инкремент секунд и если полученное значение равно 60-ти, то устанавливаем бит инкремента минут, а секунды обнуляем маской..
То-же самое делаем для минут с выставлением бита инкремента часов, только часы сравниваем с 24-мя..
если вы сумеете мне объяснить, каким способом БЕЗ ПЕРЕХОДОВ, т.е. ПРОСТО ЛИНЕЙНО вы реализуете вот этот кусочек вашего алгоритма:"и если полученное значение равно 60-ти, то устанавливаем бит инкремента минут, а секунды обнуляем маской..", я буду вам очень признателен но у меня есть предположение, что в вашем алгоритме присутствуют все-таки JNB, JB или DJNZ (в применении к 51-ому семейству)...
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер писал(а):у меня есть предположение, что в вашем алгоритме присутствуют все-таки JNB, JB или DJNZ (в применении к 51-ому семейству)
Не присутствуют..
Вся суть в том, что в программе, какой-бы она не была, присутствует всего одна команда перехода - LJMP, которая закольцовывает основной цикл..
А всё остальное делается арифметикой и логикой..
Если интересно, то могу для 51-го написать обработку часов таким образом..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
ploop писал(а):сравниваем, дальше складываем с переносом.
Читай внимательно - сначала инкремент, а только потом - сравниваем с концом допустимого диапазона..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]