Интерфейс старт-стопный. Последовательность создания программы для микроконтроллера 12f629
Адрес документа |
|
Программа |
архив_uart_1wire_v1 архив_Протеус Инд. 2-128-1-11 |
Протеус-7 Файлы
программы, файлы загрузки и установка пути.
Для работы любого
МК(микроконтроллера) требуется программа в кодах данного типа микроконтроллера.
Типы МК определяются структурой, и достаточно разнообразны. Но технология
подготовки hex-файлов, которые загружаются (программируются) в МК
одинаковая.
Рассмотрим конкретный
пример для МК(12f629) и подготовленной программы uart_1wire_v1.exe.
Эта программа предназначена для работы с
устройствами интерфейса i2c,
преобразует в стандарт 8n1 и содержит
программы для МК(12f629). В данной теме, программа
предназначена для формирования текста программы на ассемблере и hex-кода
для МК. Другие возможности программы смотрите в ее описании.
Внимание! Для
Протеус-7 есть ограничение в 62 символа командной строки компиляции текста в
исполняемый код.
Не используйте
длинных имен в каталогах и папках, что бы не создать такую ошибку.
1 этап действий:
- скачать программу из архива, распаковать,
выполнить;
- после
старта выбрать режим 3 – восстановление всех файлов;
- остановить
программу;
- перейти
в каталог …\test_monsys_exe\dop_files\ и распаковать там
расположенный файл prt7.zip
- сформируются три каталога. Перейти по пути …\test_monsys_exe\dop_files\prt7\prt7\v1\
-
открыть в этом каталоге файл проекта var_gen_1.DSN
Ниже на gif-рисунке
представлена последовательность открытия Протеус-7 и открытия схемы на МК(12f629).
Сама программа Протеус7 может быть
расположена в любом удобном месте в портабельном режиме работы или в
установочном. Необходимо учитывать пути подключения редакторов и компиляторов
ассемблера.
Схема
для программирования состоит из самого контроллера, к которому будем подключать
измерительные приборы.
Задача
схемы и программы – генерация сигналов прямоугольной формы с
определенными значениями и на определенных выводах.
Рассмотрим модернизацию представленной
программы в файле FL51XINC.asm для генерации сигнала
с длительностью периода 9 микросекунд, где сигнал уровня =1= продолжается
3 микросекунды и уровня =0= 6 микросекунд
для двух выводов gp0 и gp4
в фазе.
Дополнительные условия – тактовую частоту МК
можно определять самостоятельно в интервале 1..20 мгц.
Ниже на gif-рисунке
показано подключение к выводам и свойства настройки МК.
Как видно, что при открытии файла
программирования было отображено его отсутствие. Файла нет, и он будет создан
по тексту программы компиляцией.
Рассмотрим фрагмент программы, которая
представлена ниже, в выделенном цветом квадрате. Полный текст программы в файле
FL51XINC.asm
; *********
; предварительная установка
; даем тестирование
; movlw 0x20
; ( дали установку в 1 )
; movwf
porta metka_sha bcf
porta,0 bsf porta,0 goto metka_sha ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ metka1
movlw 0x01 ; носов прм
подсчета
addwf klon,F ;
movlw 0x20 ; ( дали установку в 1 )
movwf porta
movlw 0x10 ; ( дали установку в 1 )
movwf porta
goto metka1 ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
Предварительно известно, что программа
настроила МК на цифровой ввод или вывод. Это можно уточнить по тексту
программы на настройке. Т.е. какой вывод
будет цифровым выходом, а какой входом.
Или почитать описание на МК по адресу или книгу самоделок по адресу.
По исходному тексту видно что создано
зацикливание от метки metka_sha до команды goto metka_sha Значит уже должен быть сигнал 1 и 0 на выхода gp0. Команда bcf устанавливает это бит
в логический 0. Команда bsf соответственно в =1=.
2-й этап действий:
- компилируем
текст программы в исполняемый код в файл с расширением hex.
Но если каталог Протеус-7 Вам будет не
доступен по причине ограничений доступа
к пути Program Files, то не
получиться провести компиляцию. Это
показано на gif-рисунке.
В этом случае можно проводить компиляцию, если
перенести каталог Протеус-7 \Tools\MPASM\*.* и все файлы в нем, в доступное для Вас
место на компьютер.
Далее, переносите в
этот каталог файл программу ассемблера FL51XINC.asm и выполняете компиляцию в командной
строке \MPASMWIN.EXE FL51XINC.asm
Полученные файлы
кодов для схемы переносите в каталог с проектом схемы.
Таким образом, на
2-ом этапе мы получили файл кодов, который и будет управлять МК. Смотрим
генерацию по осциллографу, показано ниже на gif-рисунке.
Понятно, что осциллограф не очень удобный
инструмент и следовательно, подключим
цифровой анализатор. Показано на рисунке ниже.
На
анализаторе видно, что сигнал логической =1= примерно в 2а раза больше чем
логический =0=. Почему?
- т.к.
существует время перехода по goto и в нашем примере
последней командой записана установка =1= получаем соответственно лишнее время
сигнала.
- как устранить? Добавить сигнал логического
=0=, или ввести команду nop . В мк типа 12F629
все команды выполняются за один или два (если есть условный переход) тактовых
интервала.
Показано ниже на рисунке.
Таким образом, мы получили для 4х команд,
последовательность с интервалом периода от 12 до 17 мкс где лог=1= 3мкс и
лог=0= 2мкс=
И что бы получить соотношение 1/1 логической =1= и =0= добавим
еще один пустой интервал. Текст представлен ниже в цветном квадрате
; ********* metka_sha bcf
porta,0 nop nop bsf porta,0
goto metka_sha ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
И ниже цифровая диаграмма этого сигнала
Можно сделать вывод о возможности генерации
сигналов с разной скважностью путем
создания определенного количества команд.
Другой вариант, создание цикла для
формирования времени установки лог=1= и =0=, что бы не создавать =пустышки=. Кроме того, формирование сигналов
предложенным методом не позволит записать другие коды, т.к. места в памяти МК
просто не хватит.
Далее приведем пример формирования установки
сигнала =0= и =1= и их задержки в виде
цикла. Представлено ниже в таблице с
цветным фоном.
; ********* metka_sha bcf porta,0 movlw 0x20
; значение задержки для установки =1= movwf klon ; пишем в регистр значение задержки из W metka_sha1 movlw
0x1 decfsz
klon,F ; декремент, вычесть 1
из f и пропустить когда будет 0 goto metka_sha1 ;
bsf porta,0 movlw 0x20
; значение задержки для установки =0= movwf klon ;
пишем в регистр значение задержки из W metka_sha2 movlw
0x1 decfsz
klon,F ; декремент, вычесть 1
из f и пропустить когда будет 0
goto metka_sha2 ;
goto metka_sha ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
Однако, может не хватить размерности 0xFF
для одного цикла. Тогда используется вариант «цикла в цикле» Можно и еще больше
увеличить задержку «циклом цикла в цикле».
Пример двойного цикла представлен ниже в таблице с цветным фоном
; ********* metka_sha bcf porta,0 ;
----------------------------------------------- общая задержка 0x10FF movlw 0x10
; значение задержки для установки =1= movwf klon1 ; пишем в регистр значение задержки из W metka_sha1a movlw 0xFF ; значение задержки для установки =1= movwf klon ; пишем в регистр значение задержки из W metka_sha1 movlw
0x1 decfsz
klon,F ; декремент, вычесть 1
из f и пропустить когда будет 0 goto
metka_sha1 ; movlw 0x1 decfsz klon,F ; декремент, вычесть 1 из f и пропустить
когда будет 0
goto metka_sha1a ; ;
============================================== bsf porta,0 ; -----------------------------------------------
общая задержка 0x20FF movlw 0x20
; значение задержки для установки =1= movwf klon1 ; пишем в регистр значение задержки из W metka_sha2a movlw 0xFF ; значение задержки для установки =0= movwf klon ;
пишем в регистр значение задержки из W metka_sha2 movlw
0x1 decfsz
klon,F ; декремент, вычесть 1
из f и пропустить когда будет 0
goto metka_sha2 ;
movlw 0x1 decfsz
klon1,F ; декремент, вычесть 1
из f и пропустить когда будет 0
goto metka_sha2a ; ;
====================================================
goto metka_sha ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
3-ий этап – отладка программы на МК
Наша
задача, интервалы времени установки в =1= и =0=. Следовательно, посчитав
сколько времени исполняется один такт, можно узнать делением сколько тактов
требуется для решения задачи.
В
нашей задаче требуется 3 мкс =1= и 6 мкс=0= . По диаграмме видно что одна
команда – это 1 мкс, следовательно, для нашего примера мы добавляем еще
соответствующее количество команд и получаем сигнал, представлен ниже на
рисунке.
И далее, соответствующий текст фрагмента для
данной длительности:
; ********* metka_sha bcf
porta,0 nop nop nop nop nop bsf porta,0 goto metka_sha ; ЭТО ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
И последнее условие ТЗ – сигналы выдаются на
вывод gp0 и gp4 в фазе. Используем команду установки значения через
регистр вместо установки по битно. И
укажем для соответствующих выводов значение 0 и 1 в hex
виде.
; ********* metka_sha movlw
0x00 ; 0000-0000 в битном
представлении movwf porta ;
записали значение в порт и соответственно установили 1 и 0
nop nop nop nop nop
movlw 0x11 ; 0001-0001 в битном представлении
movwf porta ; записали значение в порт и соответственно
установили 1 и 0 goto metka_sha ; ЭТО
ДАЕТ ЗАЦИКЛИВАНИЕ ; ******** |
Если надо выдавать сигналы в противофазе, то
соответственно коды установки будут 0x01 и 0x10,
вместо 0x00
и 0x11.
Далее представлена таблица всех команд
для данного типа МК. Их не очень то и
много.
Контрольные вопросы:
- Что
такое «безусловный» и «условный» переход. Что может быть использовано
«условием»?
- Где
может быть компилятор текста, и пути его поиска?
-
Каким редактором можно исправлять текст программы на ассемблере?
- Каким редактором можно исправить hex-файл?
И можно ли его вообще исправлять?
-
Можно ли по hex-файлу
восстановить текст ассемблера? Что это дает?
Провести модификацию программы для получения
сигналов согласно следующей таблицы.
Номер по таблице соответствует номеру по
списку группы.
№
п.п. |
Длительность лог.
=0= миллисекунды |
Длительность лог.
=1= милисекунды |
1 вывод gp |
2 вывод gp |
3 вывод gp – сигнал инвертирован от 2 вывода |
1 |
1 |
1*2 |
Gp0 |
Gp1 |
Gp2 |
2 |
2 |
2*2 |
Gp1 |
Gp2 |
Gp4 |
3 |
3 |
3*2 |
Gp2 |
Gp4 |
Gp5 |
4 |
4 |
4*2 |
Gp4 |
Gp5 |
Gp0 |
5 |
5 |
5*3 |
Gp5 |
Gp0 |
Gp1 |
6 |
6 |
6*3 |
Gp0 |
Gp1 |
Gp2 |
7 |
7 |
7*3 |
Gp1 |
Gp2 |
Gp4 |
8 |
8 |
8*3 |
Gp2 |
Gp4 |
Gp5 |
9 |
9 |
9*4 |
Gp4 |
Gp5 |
Gp0 |
10 |
10 |
10*4 |
Gp5 |
Gp0 |
Gp1 |
Внимание! Выходные сигналы имеют размерность
миллисекунды, используйте снижение скорости МК для получения требуемых условий
сигнала, если не применяете условные циклы.
- Отчет должен содержать три файла (отчет cо
схемой и диаграммой сигналов, файл ассемблера,
файл проекта dsn ):
-
титульный лист, далее лист исходных данных, схема и скан диаграммы
сигналов;
-
файл формата asm – полный текст программы со своими изменениями.
-
файл проекта dsn – с подключенным
цифровым анализатором.
Оценка на 3:
- используется пример из
программы и редактируется под свои
условия методом добавления пустых команд;
Оценка на 4
-
пишется программа с условными циклами под свои условия. Программу для варианта
на оценку 3, в этом случае не предоставлять.
Оценка на 5
-
Создается схема и пишется программа с
условием: если на входе gp3 лог=0= выдаются
сигналы своего варианта, если gp3 лог =1= то выдаются
сигналы варианта следующего по номеру.
Переключение на схеме выполняется кнопкой. Представить схему и программу.
Электронные источники по программированию на
ассемблере для МК 12F629
- Контрольный пример адр1
- Искатель скрытой проводки на PIC12F629
- Простой контроллер
шагового двигателя на PIC12F629
Автор - Шабронов Андрей Анатольевич тс. +7-913-905-8839 e_mail
- shabronov@ngs.ru
ред.2022-02-23 Успехов и здоровья!