|
|
|
|
urry, да в Debugger в списке выбора инструмента Proteus значится. А как там? - поставить галку и MPLAB его найдет или есть тонкости по их совместному размещению? |
|
|
никаких тонкостей - ставите галку, открывается окно - в нем - открыть дизайн.
|
|
|
И еще, VikulKH, мне очень не понравилось замечание относительно "аксакалов форума" - я сам в своей жизни не раз делал резкие заявления, за которые мне потом (со временем) было стыдно. Все мы не боги, все мы ошибаемся. НО МЫ УЧИМСЯ. |
|
|
urry, прошу извинить, но ты меня не так понял. Выражением " аксакал" я наоборот выражаю благодарность человеку который мне подсказал по поводу MPLABa и HI-TECH. И всем другим форумчанам огромное спасибо за то, что делятся своими знаниями с начинающими. |
|
|
Подскажите пжлст.по поводу целесообразности программы- http://kazus.ru/forums/showthread.php?p=142857#post142857 ,ведь как описывают в ней очень много макросов для всего практически,неочень чтото сразу получается, но сооблазнительная она новая версия,или всеже Хайтек,но в нем на столько устройств макросов нету. Попробовал примерчик и в том и в другом сделать(прикрепляю) 218209.rar |
|
|
Категорический привет всем микроконтроллерщикам! urry, прошу уделить мне немного времени. Отчет о проделаной работе: твое задание на VRTP (#177558), выполнил. Перекрутил на PIC16F628A, все нормально, в Proteus работает, но ложка дегтя все-таки попалась. При вводе в программу ( исходник ) цифр для отображения, начинающихся с нуля, компилятор удивляется, выделяет их цветом ( например: 0123 ). Но компиляция проходит и в Proteus работает, правда показывает чушь. Как выйти из данной ситуации? Подозреваю нужно поменять тип переменной, но может и ошибаюсь. И еще вопрос, не пойму конструкцию: if ( TMR1IF & TMR1IE ) - это логическое сложение??? или как? Как понимать " если чего, что, к чему??? " Прикрепляю исходник, может кому будет интересно, там много коментариев. Если в кометариях есть ошибки подправь пожалуйста. Заранее благодарен.
218560.rar |
|
|
Правильно удивляется, 0 в начале - компилятор ждет от Вас число в бинарном или шестнадцатеричном виде. Например 0b00001111 - будет 15 в десятичном - это бинарное (двоичное) представление то же самое 0x0f - это уже в шестнадцатеричном то же 15. В функцию inttostr вы передаете 2 - х байтовое число (unsigned int), результат вывода - 4 значное число, значением не больше 9999, а в 16-ричном виде вы можете задать 65535 - 0xFFFF - отсюда и несуразности с выводом. Максимальное число, которое можно отправить для корректного отображения 9999 в шестнадцатеричном виде будет 0x270F , а в бинарном - 0b001001110001111. Калькулятор - инженерный - проверяйте. Если просто записать 123 - 0 в начале получится автоматически. ( TMR1IF & TMR1IE ) - это логическое умножение - если взвелся флаг (TMR1IF) И таймер разрешен (TMR1IE) , произойдет обработка прерывания . Далее, в си разрешено упрощенная запись условий , например if (TMR1IF& TMR1IE) равнозначно if ((TMR1IF==1)& (TMR1IE==1)), по-моему, Вы это спрашиваете. Иногда нужно проверить условие на 0, тогда пишут с восклицательным знаком (инверсия). Допустим, Вы хотите в программе проверить, выключен ли таймер - if (TMR1IE==0) условие - сокращенная запись звучит так if (!TMR1IE) условие . Ошибок в тексте не вижу.
|
|
|
Отлично, числа в разных системах исчисления это я знаю. А вот в таком случае как поступать? - мне предварительно с клавиатуры нужно записать в ЕЕПРОМ значение: 01минут 25секунд ( к примеру ), а затем декремент до 0000 и отработка на внешнее ус-во. Тоесть мне нужно оперировать цифрами в шестьнадцатиричном виде? А как индикация - перекодировка? Трохи запутался. За упрощеные записи огромное спасибо, сам бы не дотумкал, а в литературе не встречал. Теперь здорово, все прояснилось. Пока полет нормальный. Пытаюсь ваять дальше. |
|
|
Прошу прощения, разобрался, тут с клавиатуры ввод будет инкрементированием числа в память и никаких перекодировок не нужно. А вот как организовать ограничение максимального числа, нужно 5959 максимум. |
|
|
В данном случае у Вас 2 числа, которые Вы должны вводить - минуты и секунды. if (min >59)min=59; if (sek>59){sek=0;min++;} |
|
|
|
|