Зарегистрирован: Сб мар 29, 2008 21:42:45 Сообщений: 39
Рейтинг сообщения:0
Здравствуйте! Ребята, решил осваивать PIC посмотрел видеоуроки и решил на PIC16F628A(пока только он в наличии) смоделировать в MPLAB схему: через одну сек. после подачи питания на всех выводах PORTB должны загореться светодиоды, а через 5сек. погаснуть. Проверяю в PROTEUSе. Вобщем всё работает, только светики через1сек. включаются и через 5сек. выключаются и так без останова. Весь вечер сижу и ничего не понимаю. Где я накосячил?
Seryi, после последнего NOP-а программа не останавливается. END означает что после этого нет текста программы. В предварительно стёртом контроллере, далее во флеше данные 0xFF, которые соответствуют команде addlw 0xFF. После последнего адреса, счётчик команд сбрасывается в 0 и продолжается выполнение с первой команды.
По поводу программы. 1.Конфиг следует писать в виде "слов", как указано в соответствующем inc файле. Так легче понимать и переносить на другие камни. Например так:
2. Вместо описания системных регистров через equ (у Карабельникова вычитали?) достаточно вначале вписать "include p16f628a.inc". 3. Задержки delay и delay2 - обычно используются как подпрограммы, а к ним нужно обращаться через call (а не goto). Выходить из них через return ( а не goto). Ваш вариант рабочий, если учтете пункт 4. Кстати, Picloops - поинтереснее будет. Она обратно тоже считать может. Бывает полезно при разборе чужого кода. 4. Программа не может заканчиваться. Она должна постоянно работать, хотя бы впустую, если действия должны производиться однократно. Например посредством goto $.
Исправляйте.
P.S. Для данного МК банки переключаются одним битом. Вы делаете двумя. Это не ошибка, но лишнее действие. Есть и другой вариант, но это потом.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Зарегистрирован: Сб мар 29, 2008 21:42:45 Сообщений: 39
Рейтинг сообщения:0
Всех благодарю за чуткое отношение к новичку. Карабельникова я не читал. Просмотрел первые 10 видеоуроков ЗДЕСЬ и делал всё по аналогии. Сначала я задал свой вопрос на "Easyelectronics.ru" в "Детских вопросах", но ответы которые я там получил могут навсегда отбить охоту заниматься МК. Об авторе видеоуроков там отзываются крайне негативно. Вопрос специалистам по МК которые их смотрели: "Скажите стоит ли ими руководствоваться при освоении МК? "
Закончил просмотр урока на фразе "это черный параллелепипед, длина которого..." )) Может быть дальше будет еще интереснее, но я этого не узнаю. Поэтому по этим урокам ничего посоветовать не могу.
Можете начать, как это делал я. Мне попалась в руки очень интересная и очень нужная мне конструкция, которая к тому же имела исходники. После сборки ее захотелось расширить функционал. Распечатал таблицу команд и начал разбираться, что они делают. Вот так и учился. И учусь до сих пор, т.к. это для меня развлечение, а не род занятий.
Но вы не написали, исправили вы что-нибудь или нет.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Seryi, Привыкайте, до старта программы, делать INIT всей периферии контроллера (включая то, что в данный не используете). Так вы быстрее узнаете "внутренности" контроллера. К тому же, не всегда стОит доверять значениям регистров POR (при подаче питания).
Сделал, текстовый файл прилагаю. В PROTEUSе работает. Только на выводе RB4 светодиод вообще не включается.
А вы не в Протеусе, а мысленно пройдитесь.
Подправил слегка, но так и не понял, как подключены светодиоды, включаются они нулем или единицей. И с конфигом непонятки. Расписал его так, как нужно писать, чтобы видно было что включено/выключено, т.к. 03FF1H ни о чем не говорит. Для чего нужны два куска в конце тоже непонятно.
И как уже советовали, лишнюю периферию отключите, ее в этом МК всего ничего.
Зарегистрирован: Сб мар 29, 2008 21:42:45 Сообщений: 39
Рейтинг сообщения:0
Два куска в конце я написал чтобы выключить светодиоды. Мне нужно чтобы через 1сек. после включения они загорелись и через 4сек. погасли. Мне не нужно чтобы они мигали. Пробовал вместо "__CONFIG 03FF1H" поставить "__CONFIG __CONFIG _INTOSC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_ON & _LVP_ON & _DATA_CP_OFF & _CP_OFF" Компиляция не проходит -ошибки.
Зарегистрирован: Сб мар 29, 2008 21:42:45 Сообщений: 39
Рейтинг сообщения:0
Лишнее "__CONFIG" только в сообщении(загружал из буфера обмена и ошибся). MPLAB пишет: "... Register in operand not in bank 0. Ensure that bank bits are correct."
MPLAB пишет: "... Register in operand not in bank 0. Ensure that bank bits are correct."
Что касается ругательства Протеуса... Он не знает некоторые конфигурационные слова, например BODEN / BOREN и пр. Поэтому надо смотреть на что он ругается и менять на альтернативу из inc файла. Это Протеус такой капризный.
Вы в курсе, что означает _HS_OSC, который вы скормили ему?
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения