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

Ликбез по программированию PIC

1 10 99

semm: уже четвёртый день бьюсь
Ну давай по шагам. У меня MPLab7.20.
1.Создаёшь папку С:\test. В ней помещаешь файл 1.asm (приатачил его- BIN-BCD преобразование, для примера)
2.Запускаешь MPLab.
Configure--> SelectDevice- выбираем PIC16F84A.
3.Project-->New... --> Выскакивает окно NewProject, с двумя строками. В верхней (ProjectName) вводишь 1, в нижней (Project Directory) через кнопку Browse... вводишь путь__ C:\test . --> ОК.--> Сверху слева появилось активное окно 1.mcw.
4.Правой кнопкой мышки кликаешь на SourceFile---> выскакивает ещё окошко в верхней строке которого AddFiles... --> Кликаешь на AddFilese.
5. Появится диалоговое окно AddFilesToProject где уже виден наш 1.asm. Кликаешь на него---> Открыть. --> У SourceFiles появилась ниспадающая ветка с нашим 1.asm. 2раза кликаешь на нём- открывается наше основное окно редактирования.
6. Debugger-->Setting выбираем ProcessorFrequency=4MHz
7.Выбираешь Debugger-->SelectTool-->MPLabSim. На панели управления появляются кнопки управления отладкой (пуск, пошаговое и т.д.). ВСЁ!!!
8. Запускаешь компиляцию: Project--> BildAll -запускается MPASM и видно весёлую зеленую полоску- компиляция успешная.
В окне редактирования появляется зелёная стрелка (текущая позиция отладчика симулятора). Жмём кнопки пошагового выполнения и смотрим поведение нашей программы. В папке C:\test появилась куча всяких файлов, в том числе и 1.hex.
Все эти шаги я сейчас проделал на своём компе и создал проект с нуля.

 

Выше не смог прикрепить файл, прикрепил здесь.

35376.asm

 

picmaniac: Предлагаю прислушаться к народной мудрости "будь проще" и сделать так:...

Пришел к такому же выводу, лучше опрашивать входы и выдавать соответствующую комбинацию на выход.
Предложенный алгоритм понравился, правда не сразу въехал насчет работы TEMP:=(PORTB&b'11110000), т.е. используем своеобразное маскирование: поразрядное & младших разрядов RB3:RB0 всегда будет давать 0 и опросу датчиков они мешать не будут.
Вот и хороший пример использования команды ANDLW (естественно содержимое PORTB надо сначала переслать в W)

 

Объясните, please, в прикреплённом файле gan-a "Секция заголовка" (до слов "Рабочая секция") может быть скопирована и перенесена в начало любой другой программы? То есть может ли приведённая часть программы служить "Шапкой" для всех программ. И ещё, для чего там нужно прерывание? В данном конкретном случае - нужно ли оно?

 

В принципе да, для PIC16F84A. Кроме того, ячейки ОЗУ можно называть по своему желанию. Их кол-во можно увеличивать и уменьшать при необходимости. Они эквивалентны регистрам общего назначения.

 

Левон: И ещё, для чего там нужно прерывание?

Там его нет, есть только место для обработчика прерываний, которое обозначено комментарием после точки с запятой ;---------ПРЕРЫВАНИЯ----------. А так там ORG 0 и далее команда перехода на метку BEGIN: GOTO BEGIN
Метка BEGIN обозначает начало работы основной программы. Так делают чтобы обойти подпрограммы, написанные до основной программы, в том числе и чтобы обойти обработчик прерываний.

 

Спасибо, Splav56!
Такой вопрос - а что такое ORG 0, ORG 4h, ORG 40h, ORG 100h...? Для чего эта команда?
gan, а не могли бы Вы написать ту же программу с комментариями, а то мне(начинающему!), к примеру, не понятно что к чему...
MOVLW .16 - что это за точка до цифры 16, и почему "16"? Откуда Вы зяли это число? Непонятно..

 

Левон, скачайте Самоучитель отсюда: http://ikarab.narod.ru/Kea_20.html , распечатайте и читайте помаленьку, там все здорово расписано, врубитесь легко! Я уже 40 страниц освоил. Там все-все разъясняется и про точку перед числом (обозначение десятичного числа) и про ORG, и т.д. Куча вопросов отпадет после прочтения первых же страниц.

 

Splav56: скачайте Самоучитель
Скачал уже..!
НО комментарии не помешали бы..!

 

SAK, я согласен, предложенное изменение в алгоритме будет полезно.

semm, процесс создания проекта MPLAB5 подробно описан в "Радио" №8-2001, с.31 и №9-2001, с.22. Настолько подробно, что ошибиться практически невозможно.

gan, пользуетесь ли Вы стандартными файлами заголовков MPLAB, например P16F628.inc ?
Если нет, ПОЧЕМУ??? Это же очень удобно. Там уже все спецрегистры прописаны, распределение памяти и варианты конфигурации. Хранятся эти файлы в папке MPLAB и подключаюся в самом начале программы директивой (для PIC16F628):
#include <P16F628.inc>

Левон, "шапку" для своих программ можете сделать один раз сами, сохранить и использовать по мере надобности. Я так и делаю. А можете готовым файлом воспользоваться, он находится в папке MPLAB\TEMPLATE\Code и называется f628temp.asm
Не спешите с написанием кода, скоро начнем все вместе.

Всё написанное выше относится к MPLAB5.70. Пробовал я работать и с версией 6 - не понравилось, вернулся к 5-й. Седьмую пока не пробовал, не вижу надобности.

Итак, осталось утвердить граф и алгоритм, и можем начинать создание проекта и написание исходника. Splav56, я голосую за тот алгоритм, который предложил SAK (см. аттач).