Вы вошли на сайт, как Гость
Регистрация

Написание программы

Интерактивная симуляция в программе Proteus VSM
(Написание программы)

Листинг исходного кода

Для целей нашего руководства мы приготовили следующую программу, которая позволит PIC управлять светофорами. Эта программа предоставлена в файле, названном TL.ASM и может быть найдена в директории «Samples\Tutorials».

       LIST p=16F84             ; PIC16F844 целевой процессор
       #include "P16F84.INC"    ; Включить файл заголовков
       CBLOCK 0x10              ; Временное хранилище
       state
       l1,l2
       ENDC
       org 0                    ; Начало вектора.
       goto setports            ; Переход к началу кода.
       org 4                    ; Вектор прерывания.
  halt goto halt                ; Задаём бесконечный цикл и ничего не делаем.
setports clrw                   ; Ноль в W.
       movwf PORTA              ; Убедимся, что PORTA обнулён, прежде чем использовать.
       movwf PORTB              ; Убедимся, что PORTB обнулён, прежде чем использовать.
       bsf STATUS,RP0           ; Выбираем Bank 1
       clrw                     ; Маскируем все биты для выхода.
       movwf TRISB              ; Устанавливаем регистр TRISB.
       bcf STATUS,RP0           ; Переключаемся к Bank 0.
initialise clrw                 ; Начальное состояние.
       movwf state              ; Устанавливаем его.
  loop call getmask             ; Конвертируем состояние в bitmask.
       movwf PORTB              ; Записываем его в порт.
       incf state,W             ; Увеличиваем на единицу состояние в W.
       andlw 0x04               ; Оборачиваем его.
       movwf state              ; Возвращаем в память.
       call wait                ; Ждем
       goto loop                ; И цикл
                                ; Функция возвращения bitmask для выхода порта для 
                                ; текущего состояния.
                                ; Верхний кусок содержит биты для одной установки 
                                ; света и
                                ; нижний кусок биты для другой установки. Бит 1 
                                ; красный, 2 жёлтый
                                ; а бит три зелёный. Бит четыре не используется.
getmask movf state,W            ; Берём статус в W.
      addwf PCL,F               ; Добавляем компенсацию в W для PCL для расчета. goto.
      retlw 0x41                ; state==0 это зелёный и красный.
      retlw 0x23                ; state==1 это жёлтый и красный/жёлтый.
      retlw 0x14                ; state==3 это красный и зелёный.
      retlw 0x32                ; state==4 это красный/жёлтый и жёлтый.
                                ; Функция, использующая два цикла для реализации паузы.
wait movlw 5
     movwf l1
w1 call wait2
     decfsz l1
     goto w1
     return
wait2 clrf l2
w2 decfsz l2
     goto w2
     return
     END

Здесь есть, фактически, предумышленная ошибка в коде выше, но об этом чуть позже.

Добавление исходного файла

Следующий этап — добавление программы в проект, чтобы мы могли успешно симулировать её поведение. Мы сделаем это, используя команды Source основного меню. Перейдите к разделу Source и выберите команду Add/Remove Source Files. Щёлкните по кнопке New, переместитесь к директории «Samples\Tutorials» для выбора TL.ASM файла. Щёлкните по кнопке Открыть и файл появится в выпадающем списке Source Code Filename. Теперь нам нужно выбрать транслятор для файла. Для нашей цели подходит MPASM. Эта опция доступна из выпадающего списка, а щелчок левой клавишей мышки выберет её обычным образом. (Заметьте, что если вы планируете использовать новый ассемблер или компилятор в этот момент, вы должны зарегистрировать его, используя команду Define Code Generation в разделе Tools ). И, наконец, необходимо указать, какой файл процессор должен запускать. В нашем примере это будет tl.hex (hex-файл производит MPASM при ассемблировании tl.asm). Чтобы добавить этот файл в процессор, откройте двойным щелчком по компоненту PIC диалоговое окно Edit Component, в котором есть поле для Program File. Если это уже не задано, как tl.hex, укажите путь к файлу вручную или перейдите к месту хранения файла с помощью кнопки справа от поля. Когда вы задали hex-файл, нажмите ОК для выхода из диалога. Теперь мы прикрепили исходный файл к проекту и указали, какой транслятор использовать. Больше информации о системе управления исходным кодом вы найдёте далее.

Файлы проекта можно скачать здесь: