Основы микропроцессорной техники | |||||||||||||||||||||||||||||||||||||||||||||||||
Раздел 6. Проектирование устройств на микроконтроллерах | |||||||||||||||||||||||||||||||||||||||||||||||||
| «Структура курса | Раздел 1 | Раздел 2 | Раздел 3 | Раздел 4 | Раздел 5 | Раздел 6 | Раздел 7 | Глава 8 | Дополнения | |||||||||||||||||||||||||||||||||||||||||||||||||
| Раздел 6 - Страницы: «1 | 2 | 3 | 4 | 5 | 6 | 7 |» | |||||||||||||||||||||||||||||||||||||||||||||||||
6.3. Практика программирования PIC-микроконтроллеров6.3.1. Описание лабораторного макетаДля того чтобы написать первую учебные программы и проверить их функционирование, желательно иметь относительно несложный макет, содержащий наиболее распространенные периферийные устройства. Схема подобного макета, который используется при выполнении лабораторных работ студентами, приведенная на рис. 6.3. Макет питается от источника стабилизированного напряжения +5 В. Тактовая частота МК задается RC-звеном и составляет около 2 МГц. К линии RA0 порта А подключен биполярный транзистор в ключевом режиме, нагруженный на динамик Ва1. Звучание динамика обеспечивается подачей на выход RA0 сигнала, изменяющейся в звуковом диапазоне. К линии RA1 порта А подключен светодиод VD2, которая светится при высоком напряжении на выходе. Тумблеры SA1 и SA2, а также кнопки SB1 и SB2 подключены, соответственно, к линиям RA2 и RA3 порта А, а также к линии RA4 порта А и линии RB0 порта В. Исходное состояние кнопок - разомкнутый, обеспечивающая подачу на соответствующие входы МК высокого уровня сигнала. Линии RB1 - RB7 порта B обслуживают семисегментный индикатор HL1 с общим анодом. Поэтому свечение сегмента индикатора обеспечивается при низком уровне сигнала на соответствующем выходе порта B. Макет также содержит средства программирования и связи с компьютером, которые на схеме не показаны.
6.3.2. Инициализация микроконтроллера макетаПрежде чем переходить к созданию самых простых пользовательских программ, необходимо описать используемые в дальнейшем переменные и настроить МК на работу с выбранным макетом. С этой целью мы напишем и подробно рассмотрим листинг исходной программы init.asm, в состав которой будут включаться все другие программы пользователя.
Рассмотрим работу этой программы. Сначала она указывает ассемблера тип используемого МК и систему счисления по умолчанию. Дальнейшие ассемблерные директивы EQU определяют ассемблерные константы, используемые в этой и следующей программах. Они позволяют использовать в тексте программы более удобны мнемонические метки, привязанные к структуре конкретного МК, вместо корректных, но более сложных ассемблерных выражений. Указатели TEMPA, TEMPB, COUNT1 и COUNT2 назначают адреса ячеек памяти для сохранения промежуточных данных (текущих состояний, переменных циклов и т.п.). Ассемблерные директивы # define задают строку, замещающего соответствующую метку, каждый раз, когда та будет встречаться в исходном тексте. В нашем случае эти директивы позволяют использовать символические имена, привязанные к схеме макета, вместо физических адресов соответствующих разрядов портов и регистров. При этом необходимо иметь в виду, что символы, которые определены директивой # DEFINE, не могут быть пересмотрены симулятором. Поэтому для просмотра необходимо использовать физические адреса портов и регистров. Директива ORG 0x00 устанавливает стартовую адрес программного кода равным 0, то есть соответствующим начальном состояния счетчика команд МК после сброса. Команда GOTO BEGIN вместе с ассемблерные директивой ORG 0x005 и меткой BEGIN обеспечивают переход в адрес памяти программ 0x005, начиная с которой и размещается основная часть программы. Это необходимо для того, чтобы обойти адрес 0x004, используемый как вектор прерывания, и тем самым зарезервировать его для возможных будущих применений. Затем с помощью команды CALL INIT_PORTS происходит вызов подпрограммы инициализации портов. Сначала подпрограмма инициализации устанавливает в высокий (единичное) состояние выходные триггеры данных. Эта операция рекомендуется производителем МК для того, чтобы исключить неопределенность в состояниях регистров портов. Затем командой BSF STATUS, RP0 происходит переключение на банк 1 памяти данных, где расположены регистры управления направлением передачи информации TRISA и TRISB. С помощью команд MOVLW 0x1C и MOVWF TRISA линии RA0 и RA1 порта A настраиваются на вывод, а остальные - на ввод данных. Команды MOVLW 0x01 и MOVWF TRISB настраивают линию RB0 порта B на ввод, а остальные - на вывод. С помощью команды BCF STATUS, RP0 происходит возврат в банке 0, где располагаются необходимые для работы программы регистры и порты. Поскольку в процессе работы с макетом перенастройки портов не происходит, и введенных переменных достаточно для работы всех рассмотренных учебных задач, они будут дальше рассматриваться включенными по умолчанию в состав исходной программы init.asm. При написании учебных задач будет по возможности использоваться метод структурного программирования, при котором приложение строится из некоторого набора программных модулей, каждый из которых реализует определенную процедуру обработки данных. При этом каждый из программных модулей имеет только одну точку входа и одну точку выхода. Введены один раз программные модули могут использоваться под своим именем в других приложениях. | |||||||||||||||||||||||||||||||||||||||||||||||||
| «Структура курса Раздел 6 - Страницы:« 1 | 2 | 3 | 4 | 5 | 6 | 7 » | |||||||||||||||||||||||||||||||||||||||||||||||||