|
|
|
|
ОК! |
|
|
urry растолкуй пожалуйста назначение этих строк: 1. #define perehod() {NOP();NOP();NOP();NOP();} особенно скобок и тех и тех. 2. PORTB=arr1[temp]+start; массив, а как temp, и +start - это флаг? он обьявлен в начале как бит. 3. min=eeprom_read(1); seku=eeprom_read(2); вроди никто никуда не писал. Извини за такие вопрсы, но учусь.
|
|
|
1. NOP() - В Си применяются некоторые ассемблерные команды, например - команда сброса сторожевого таймера , задержка на пустой цикл и пр... Чтобы не писать каждый раз #asm nop #endasm эти команды в самом компиляторе "забиты" как специальные операторы например, в данном случае NOP() - так и пишется, CLRWDT(); - сброс собаки. Прочитать регистр в аккумулятор (для сброса флага) например, для регистра RCREG - RCREG(); Через дефайн мы определили макрос задержки - пару микросекунд. Она (задержка) нужна для того, чтобы после импульса выдачи (если кнопка нажата) входной конденсатор на ножке мк успел зарядиться . 2 Да , бит, младший бит идет на включение нагрузки - если признак старта есть, то в младший разряд порта В запишется 1, иначе 0. 3. при каждом нажатии кнопки старт значение записывается в епром, досчитал счетчик до 0, читается ранее записанное в епром значение снова (удобно, если нужно повтор той же задержки, что была перед этим). |
|
|
ОК. Благодарю.Но не успокоюсь. arr1[temp], а как здесь? Массив, как здесь мы получим образ именно нужного числа? И опять не буду молчать. А зачем писать четыре раза подряд NOP()? |
|
|
они идут подряд - образ нуля - нулевой адрес массива, единицы - первый и так далее. А чтобы задержка больше была. Может, и мало - железо покажет. |
|
|
А компилятор поставляет сразу 4? Тфу. Ну как АСМе: NOP NOP NOP NOP ОНО? То, что образы цифир идут подрят я понимаю, меня сбило, что вместо [16] стоит [temp]. |
|
|
оно. существуют так называемые inline - функции, которые не оптимизируются компилятором - и он не может вырезать их код, как ничего не делающий. чуть подробнее здесь - о инлайновых функциях и макросах http://www.remexpert.com/ipb/index.php?automodule=blog&blogid=14&showent...
|
|
|
urry, огромное спасибо, очень ценная информация. |
|
|
urry, приветствую. Возникли еще пару вопросов: Не могу допетрить, а зачем нужен caunt_m и его флаг - m_mc, если я правильно понял, если в прерывании выставляются флаги кнопок vpravo и vlevo? И второй, а как закрутить чтобы получить эти кнопки вправо и влево многофункциональными? Вводить какие-то счетчики? Первое нажатие левой чтобы дало прерывистую индикацию минут, а потом ими-же двумя делать установку. Первое нажатие правой - моргачку секунд и тоже потом установки двумя кнопками. потому как не удобно долго ждать установок минут через секунды, даже в ускоренном режиме. Да, отсюда выплывает, что прийдется наверное кнопкой старт делать запись в ЕЕПРОМ, во накручивается. Направь пожалуйста на путь истинный.
|
|
|
1.m_mc - флаг 100 - милисекундной метки, "тормоз", чтобы при нажатии кнопки информация не менялась очень быстро. Кнопки вправо и влево анализируются на короткое и длинное нажатие - если переполняется счетчик скорости counter_speed_l, например, (долго держали кнопку), то задержка на изменение значения одна, не переполнилась - другая. При отпускании кнопки этот счетчик обнуляется. 2. С помощью 4 кнопок можно сделать многоуровневое меню - влево, вправо, выбор, отмена. Это не сложно, но изначально так задача не ставилась - лучше всего в таком случае забыть все, что ранее написано - и начать по-новой. Вклеивание в готовый текст изменений может привести к тому, что программа "начнет жить своей жизнью" - и она то ли работает, то ли нет ... По свободе напишу меню и попробуем разобраться вместе, естественно, алгоритм должен быть "перепахан".
|
|
|
|
|