zast_out2 

        Интерфейс старт-стопный. Последовательность создания программы для микроконтроллера 12f629     

 

Адрес документа

http://90.189.213.191:4422/temp/sibguti_datchiki_all/sibguti_datchiki_pz_v10/sibguti_datchiki_pz_v10.doc

Программа

архив_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        Успехов и здоровья!