Свежие обсуждения
Микроконтроллеры

Начинающим pic16f Си HiTech 9.50 pl 2

1 7 11

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++;}