- •Содержание
- •Введение
- •Лабораторная работа 1 Изучение интегрированной среды разработки mplab
- •Методика выполнения работы
- •Создание нового проекта
- •Создание файла с исходным текстом программы
- •Добавление файла к проекту
- •Компиляция исходного текста программы в машинные коды
- •Запись кода программы во внутреннюю flash память микроконтроллера
- •Отладка (выполнение) программы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 2 Изучение запоминающих устройств микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Постановка задачи
- •Разработка алгоритма программы
- •Написание текста программы на языке Ассемблер
- •Трансляция исходного текста программы в машинные коды
- •Тестирование и отладка
- •Сопровождение
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 3 Изучение работы параллельных портов микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 4 Изучение работы последовательных портов микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Лабораторная работа 5 Изучение работы таймеров микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 6 Изучение работы аналого-цифрового преобразователя микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Постановка задачи
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 7 Изучение работы модуля захвата/сравнения/шим микроконтроллеров pic-micro
- •Порядок выполнения работы
- •Содержание отчета
- •Библиографический список
- •Приложение 1. Схема лабораторного макета
- •Приложение 2. Краткое описание набора инструкций pic16
- •Приложение 3. Список команд pic16 и их подробное описание
- •Addlw – Сложение рабочего регистра w и константы k
- •Addwf – Сложение рабочего регистра w и регистра f
- •Andlw – Побитное «и» рабочего регистра w и константы k
- •Andwf – Побитное «и» рабочего регистра w и регистра f
- •Bтfsc – Условный переход при нулевом бите b регистра f
- •Bтfss – Условный переход при единичном бите b регистра f
- •Call – Вызов подпрограммы
- •Clrf – Обнуление регистра f
- •Clrw – Обнуление рабочего регистра w
- •Clrwdt – Сброс сторожевого таймера
- •Comf – Инверсия регистра f
- •Decf – Декремент регистра f
- •Decfsz – Декремент регистра f и пропуск в случае нулевого результата
- •Goto – Переход по адресу
- •Incf – Декремент регистра f
- •Incfsz – Декремент регистра f и пропуск в случае нулевого результата
- •Iorlw – Побитное «или» w и константы k
- •Iorwf – Побитное «или» w и регистра f
- •Movf – Пересылка регистра f
- •Movlw – Пересылка константы k
- •Movwf – Пересылка из регистра w в регистр f
- •Retfie – Возврат из подпрограммы с включением прерываний
- •Retlw – Выход из подпрограммы с загрузкой в регистр w константы k
- •Return – Выход из подпрограммы
- •Sleep – Перейти в спящий режим
- •Sublw – Вычитение w из константы k
- •Subwf – Вычитание w из регистра f
- •Swapf – Обмен местами ниблов в регистре f
- •Xorlw – Побитное «Исключающее или» w и константы k
- •Xorwf – Побитное «Исключающее или» w и регистра f
- •Основы микропроцессорной техники
- •620034, Екатеринбург, ул. Колмогорова 66.
Порядок выполнения работы
В данной лабораторной работе необходимо разработать и отладить программу, реализующую обращение к портам ввода-вывода микроконтроллера PIC16F873A. Конкретное задание выдается преподавателем.
В качестве примера рассмотрим следующее задание. В исходном состоянии все светодиоды погашены, звуковой сигнал не подается. После нажатия кнопки SA2 выдается звуковой сигнал частотой 1 кГц. После нажатия кнопки SA3 включается красный светодиод в мигающем режиме. После нажатия кнопки SA4 схема возвращается в исходное состояние.
Постановка задачи
Представим исходную словесную форму задания в виде графа переходов (рис. 3.1.).
Рис. 3.1. Граф переходов по программе
Разработка алгоритма программы
Укрупненный алгоритм основной программы приведен на рис. 3.2. Поскольку в программе многократно используется блок выдержки времени, то данная последовательность команд оформлена в виде подпрограммы, алгоритм которой приведен на рис. 3.3.
Рис. 3.2. Блок-схема алгоритма основной программы
В первом блоке алгоритма подключается текстовый файл с символьными обозначениями РСН, присваиваются символьные наименования трем регистрам общего назначения, выполняющим роль счетчиков времени, задается адрес вектора сброса и начальный адрес основной программы, производится настройка параллельных портов ввода-вывода на соответствующий режим работы.
Порты А и С, к которым подключены светодиоды и пьезокерамический звукоизлучатель, настраиваются на вывод информации, а порт В, к которому подключены контакты кнопок, – на ввод. К выводам порта В подключаются внутренние подтягивающие резисторы.
Блоки со второго по пятый соответствуют исходному состоянию графа. Во втором и третьем блоках осуществляется гашение светодиода и выключение звукоизлучателя. В четвертом и пятом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA2 и SA3 разомкнуты, то программа возвращается на метку М10 и данный цикл повторяется заново. Если нажата кнопка SA2, то осуществляется переход на метку М30, а если нажата SA3, то – М20.
Блоки с шестого по одиннадцатый отвечают за мигание красного светодиода. В шестом блоке происходит подача питания на светодиод. Седьмой блок вызывает подпрограмму выдержки времени длительностью 1 с. В восьмом блоке питание со светодиода снимается. Девятый блок вызывает подпрограмму выдержки времени длительностью 0,5 с. В десятом и одиннадцатом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA2 и SA4 разомкнуты, то программа возвращается на метку М20 и данный цикл повторяется заново. Если нажата кнопка SA2, то осуществляется переход на метку М30, а если нажата SA4, то – М10.
Блоки с двенадцатого по семнадцатый обеспечивают подачу звукового сигнала. В двенадцатом блоке формируется передний фронт импульса, подаваемого на звукоизлучатель. Тринадцатый блок вызывает подпрограмму выдержки времени длительностью 0,5 мс. В четырнадцатом блоке формируется задний фронт импульса, подаваемого на звукоизлучатель. Пятнадцатый блок снова вызывает подпрограмму выдержки времени длительностью 0,5 с. В шестнадцатом и семнадцатом блоках производится опрос состояния контактов кнопок. Если контакты кнопок SA3 и SA4 разомкнуты, то программа возвращается на метку М30 и данный цикл повторяется заново. Если нажата кнопка SA3, то осуществляется переход на метку М20, а если нажата SA4, то – М10.
Перед вызовом подпрограммы выдержки времени в регистры-счетчики необходимо записать определенные числовые значения. Методика расчета этих значений приведена ниже.
Во-первых необходимо определить количество регистров-счетчиков. Тактовая частота микроконтроллера PIC16F873A в лабораторном макете равна 4 МГц, а длительность машинного цикла – четырем периодам тактовой частоты или 1 мкс. Большинство команд микроконтроллера выполняются за один машинный цикл, исключение составляют команды перехода, вызова и возврата из подпрограмм, которые выполняются за два цикла. Проще всего реализовать цикл требуемой длительности используя следующие команды:
T10: DECFSZ CNT,F ;уменьшение значения счетчика на 1, скачек если 0
GOTO T10 ;возврат к декременту счетчика.
Команда DECFSZ выполняется за один машинный цикл, а GOTO за два, то есть время выполнения цикла составляет 3 мкс.* При использовании одного регистра-счетчика можно сформировать выдержку времени T от 3 до 3·28=768 мкс, при использовании двух регистров-счетчиков T ≤ 3·216=196 608 мкс, при использовании трех регистров T ≤ 3·224=50 331 648 мкс и т. д. В нашем примере достаточно трех регистров-счетчиков.
Рис. 3.3. Блок-схема алгоритма подпрограммы выдержки времени
Во-вторых необходимо вычислить числовые значения помещаемые в каждый из этих регистров. Число циклов старшего регистра определяется по формуле , число циклов второго регистра – , а младшего – . Рассчитывается количество полных циклов, то есть полученные значения округляются в меньшую сторону.
В-третьих необходимо учесть, что в команде DECFSZ сначала выполняется декремент, и лишь потом сравнение содержимого регистра с нулем (преддекремент), то есть в начале первого же цикла число записанное в регистр будет уменьшено на единицу, что приведет к ошибке в счете. Эта ошибка может оказаться фатальной, если число циклов равно нулю. Поэтому к вычисленным значениям необходимо прибавить единицу: CNT_H = H +1, CNT_M = M +1, CNT_L = L +1. Эти значения заносятся в регистры-счетчики перед вызовом подпрограммы выдержки времени.
Алгоритм самой подпрограммы выдержки времени включает блоки с восемнадцатого по двадцать пятый. Вход в подпрограмму осуществляется по метке Т10. В девятнадцатом, двадцать первом и двадцать третьем блоках производится последовательный декремент регистров-счетчиков, а в двадцатом, двадцать втором и двадцать четвертом сравнение значений этих счетчиков с нулем. При обнулении всех счетчиков в двадцать пятом блоке происходит выход из подпрограммы.
Написание текста программы на языке Ассемблер
Исходный текст программы приведен далее:
;предварительные настройки
#include p16f873a.inc
__CONFIG _HS_OSC ;
CNT_L: EQU H'20' ;определение младшего регистра счетчика
CNT_M: EQU H'21' ;определение среднего регистра счетчика
CNT_H: EQU H'22' ;определение старшего регистра счетчика
ORG H'000' ;вектор сброса
GOTO H'05' ;переход на адрес следующий
;за вектором прерыв.
ORG H'05' ;начало основной программы
BCF STATUS,RP1 ;выбираем банк регистров 1
BSF STATUS,RP0 ;|
MOVLW B'00001110' ;задаем аналоговый вход PORTA,0
MOVWF ADCON1 ;программируем регистр АЦП 1
MOVLW B'00000001' ;PORTA,7-1 выходы, PORTA,0 вход
MOVWF TRISA ;программируем регистр направления PORTA
MOVWF OPTION_REG;включаем подтягивающие резисторы PORTB
MOVLW B'11111111' ;PORTB,7-0 входы
MOVWF TRISB ;программируем регистр направления PORTB
MOVLW B'11000000' ;PORTC,7-6 вход, PORTC,5-0 выходы
MOVWF TRISC ;программируем регистр направления PORTC
;исходное состояние
M10: BCF STATUS,RP1 ;выбираем банк регистров 0
BCF STATUS,RP0 ;|
CLRF PORTC ;гасим все светодиоды и выключаем пищалку
CLRF PORTA ;|
BTFSS PORTB,5 ;скачек,если не нажата кнопка SA2
GOTO M30 ;переход к включению пищалки
BTFSS PORTB,4 ;скачек,если не нажата кнопка SA3
GOTO M20 ;переход к включению светодиода HL3
GOTO M10 ;возврат к исходному состоянию
;включение мигания красного светодиода HL3
M20: BSF PORTC,1 ;включаем HL3 на 1 с
MOVLW D'6' ;задаем начальное значение старшего счетчика
MOVWF CNT_H ;|
MOVLW D'23' ;задаем начальное значение среднего счетчика
MOVWF CNT_M ;|
MOVLW D'22' ;задаем начальное значение
;младшего счетчика
MOVWF CNT_L ;|
CALL T10 ;вызов подпрограммы выдержки времени
BCF PORTC,1 ;гасим HL3 на 0,5 с
MOVLW D'3' ;задаем начальное значение старшего счетчика
MOVWF CNT_H ;|
MOVLW D'140' ;задаем начальное значение среднего счетчика
MOVWF CNT_M ;|
MOVLW D'11' ;задаем начальное значение
;младшего счетчика
MOVWF CNT_L ;|
CALL T10 ;вызов подпрограммы выдержки времени
BTFSS PORTB,5 ;скачек,если не нажата кнопка SA2
GOTO M30 ;переход к включению пищалки
BTFSS PORTB,2 ;скачек,если не нажата кнопка SA4
GOTO M10 ;переход к исходному состоянию
GOTO M20 ;возврат к включению светодиода HL3
;включение пищалки
M30: BCF PORTC,1 ;гасим HL3
BSF PORTA,2 ;подаем на пищалку импульс длительностью 0,5 мс
MOVLW D'1' ;задаем начальное значение старшего счетчика
MOVWF CNT_H ;|
MOVLW D'1' ;задаем начальное значение среднего счетчика
MOVWF CNT_M ;|
MOVLW D'168' ;задаем начальное значение
;младшего счетчика
MOVWF CNT_L ;|
CALL T10 ;вызов подпрограммы выдержки времени
BCF PORTA,2 ;подаем на пищалку интервал
;длительностью 0,5 мс
MOVLW D'1' ;задаем начальное значение старшего счетчика
MOVWF CNT_H ;|
MOVLW D'1' ;задаем начальное значение среднего счетчика
MOVWF CNT_M ;|
MOVLW D'168' ;задаем начальное значение
;младшего счетчика
MOVWF CNT_L ;|
CALL T10 ;вызов подпрограммы выдержки времени
BTFSS PORTB,4 ;скачек,если не нажата кнопка SA3
GOTO M20 ;переход к включению светодиода
BTFSS PORTB,2 ;скачек,если не нажата кнопка SA4
GOTO M10 ;переход к исходному состоянию
GOTO M30 ;возврат к включению пищалки
;подпрограмма выдержки времени
T10: DECFSZ CNT_L,F ;уменьшение младшего счетчика
;на 1, скачек если 0
GOTO T10 ;возврат к декременту счетчика
DECFSZ CNT_M,F ;уменьшение среднего счетчика
;на 1, скачек если 0
GOTO T10 ;возврат к декременту счетчика
DECFSZ CNT_H,F ;уменьшение старшего счетчика
;на 1, скачек если 0
GOTO T10 ;возврат к декременту счетчика
RETURN ;выход из подпрограммы
END ;конец программы
Трансляция текста программы в машинные коды
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе 1.
Тестирование и отладка
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах ошибки. Описание процесса программирования микроконтроллера и запуска программы приведен в лабораторной работе 1.
Сопровождение
Поскольку все программы, разрабатываемые при изучении курса ОМТ носят чисто учебный характер, то их работоспособность необходимо поддерживать лишь до момента защиты лабораторной работы преподавателю.