Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРабота_2.docx
Скачиваний:
19
Добавлен:
04.05.2019
Размер:
252.62 Кб
Скачать

3.5. Задания для самостоятельной работы

Задание 1. Необходимо разработать программу работы МКУ, изображенного на рис. 2, и выполняющего следующий алгоритм. После запуска программы светодиод 4 раза загорается на 1 секунду и гаснет на 2 секунды. Затем светодиод окончательно гаснет. Тактовая частота МК равна 4 Мгц. Цикл повторения организуйте с помощью оператора for( ). Не забудьте зациклить программу после окончания мигания светодиода. Программу назовите led4.c. Создайте новый проект pr7 и папку proj7. Проверьте работу программы с помощью Proteus Viewer с использованием проекта led3.dsn из папки proj6.

Задание 2. Разработайте программу работы МКУ, схема которого приведена на рис.2. После запуска программы светодиод 5 раз загорается на 0,5 секунды и гаснет на 2 секунды. После этого светодиод горит постоянно. Тактовая частота МК равна 4 Мгц. Цикл повторения организуйте с помощью оператора while( ). Не забудьте зациклить программу после окончания мигания светодиода. Программу назовите led5.c. Создайте новый проект pr8 и папку proj8. Проверьте работу программы с помощью Proteus Viewer с использованием проекта led3.dsn из папки proj6.

3.6. Программирование и исследование процедуры опроса переключателя

Рассмотрим теперь, как производится на Си опрос контактов переключателя. Пусть в схеме МКУ на рис. 1 управление светодиодом VD1 производится от переключателя (кнопки) SB1 по следующему алгоритму. Когда контакт SB1 замкнут, светодиод VD1 горит, когда SB1 разомкнут, VD1 не горит. Программа может иметь следующий вид.

/***********************************************************

sw_led1.c – программа управления светодиодом VD1 от переключателя SB1

***************************************************************/

#include<p18f242.h>

#pragma config WDT = OFF, OSC = HS

Void main(void)

{

PORTB = 0; // очистить регистр данных порта В

PORTC = 0; // очистить регистр данных порта С

TRISB = 0b10000001; // настроить линии RB0, RB7 на ввод, остальные

// на вывод

TRISC = 0; // настроить все линии порта С на вывод

while(1)

{

if(PORTBbits.RB0 == 0) // если контакт SB1 замкнут

PORTCbits.RC0 = 1; // включить VD1

else // иначе

PORTCbits.RC0 = 0; // выключить VD1

}

}

3.6.1. Создайте проект с именем pr9 в новой папке, которую назовите proj9. Далее наберите текст программы sw_led1.c в окне редактора (используйте цветную кодировку текста при наборе). После этого необходимо внести исходный файл sw_led1.c и файл сценария линкера 18f242.lkr в созданный проект. Затем проверьте установку опций для создания проекта с помощью пункта меню Project > Build Options… > Project. И наконец, выполните построение проекта с помощью пункта меню Project > Build All.

3.6.2. В случае успешной компиляции проекта выполните тестирование программы с помощью симулятора. С этой целью выберите пункт меню Debugger > Select Tool > MPLAB SIM. Затем с помощью пункта меню View > Watch откройте окно наблюдения Watch и занесите в него переменные PORTB и PORTC (их надо выбрать из списка SFR – регистры специальных функций).

В программе sw_led1.c проверяется состояние линии RB0 порта В при различном положении контакта переключателя SB1. Когда контакт SB1 разомкнут, на линии RB0 будет высокий уровень (логическая 1). Когда контакт SB1 замкнут, на линии RB0 будет низкий уровень (логический 0).

Симулятор MPLAB SIM предоставляет возможность моделировать логические состояния на линиях портов МК. Это выполняется с помощью асинхронных стимулов, которые можно подавать на выводы портов с помощью опций в диалоговом окне стимулов Stimulus:

  • Pulse High – подать импульс высокого уровня;

  • Pulse Low – подать импульс низкого уровня;

  • Set High – установить высокий уровень;

  • Set Low – установить низкий уровень;

  • Toggle – переключить уровень.

Опции Pulse High, Pulse Low посылают на вывод импульс длительностью в один командный цикл TCY. Этот режим удобен для подачи счетных импульсов на таймеры или подачи запросов внешнего прерывания. Опции установки вывода в высокое (Set High) и низкое (Set Low) состояния передают заданную величину на вывод МК. Для произвольного изменения состояния входа можно запрограммировать две кнопки, одна из которых будет задавать “1”, а другая – “0”. Тот же результат достижим при помощи одной кнопки в режиме Toggle, каждое нажатие которой меняет состояние на входе.

Для создания асинхронных стимулов выберите пункт меню Debugger > Stimulus > New Workbook , при этом на экране появится диалоговое окно Stimulus. В этом окне выберите вкладку “Asynch”.

Поставьте курсор на первую строку в колонку “Pin/SFR” и щелкните левой кнопкой мыши. В появившемся списке выберите пункт RB0. Затем переместите курсор в колонку “Action” и щелкните левой кнопкой мыши. В появившемся списке выберите пункт “Set High”.

Далее поставьте курсор на вторую строку в колонку “Pin/SFR” и щелкните левой кнопкой мыши. В появившемся списке выберите пункт RB0. Потом переместите курсор в колонку “Action” и щелкните левой кнопкой мыши. В появившемся списке выберите пункт “Set Low”.

И, наконец, поставьте курсор на третью строку и выберите пункт RB0, а затем пункт “Toggle”.

После выбора настроек нажмите кнопку Apply в диалоговом окне с целью разрешения их использования. Окно примет вид, показанный на рис. 3.

Рис. 3. Вид окна асинхронных стимулов

Вначале подайте на линию RB0 высокий уровень (Set High), щелкнув по кнопке “>” поля Fire в окне Stimulus. Потом сделайте активным окно редактора с файлом sw_led1.c, выполните сброс микроконтроллера, а затем запустите программу в режиме Animate.

Наблюдайте по перемещению зеленой стрелки работу программы, а в окне Watch за значением битов RB0 и RC0 портов В и С.

Примечание. Вы можете установить удобную скорость анимации, т.е. перемещения по программе, используя пункт меню Debugger > Settings… .Затем в раскрывшемся окне нужно выбрать вкладку Animation/Realtime Updates и переместить бегунок по линии Animation step time.

Теперь подайте на линию RB0 низкий уровень (Set Low), нажимая кнопку “>” поля Fire. Повторите эти действия несколько раз, наблюдая за изменением состояний линий RB0 и RC0 портов PORTB и PORTC. Попытайтесь понять, правильно ли работает программа?

Затем подавайте на линию RB0 порта поочередно то высокий, то низкий уровни (режим Toggle), нажимая кнопку “>” поля Fire. Повторите эти действия несколько раз, наблюдая за перемещением зеленой стрелки и значением нулевого разряда портов PORTB и PORTC. Правильно ли работает программа?

В заключение остановите выполнение программы, щелкнув по значку Halt. Сверните окно MPLAB IDE.

3.6.3. Теперь нужно создать с помощью Proteus VSM схему МКУ, приведенную на рис.4, для проверки работы программы sw_led1.c.

Рис. 4. Принципиальная схема МКУ в Proteus VSM

Запустите программу ISIS.exe пакета Proteus VSM с помощью ярлычка с надписью ISIS на рабочем столе компьютера. Создайте новый проект, используя пункт меню File > New Design. В открывшемся диалоговом окне щелкните по варианту DEFAULT, а затем по кнопке OK.

Для выбора элементов схемы из библиотек Proteus щелкните мышью по иконке (значку) с всплывающей надписью Component Mode на панели инструментов, а затем по кнопке P в верхнем левом углу переключателя объектов Object Selector. На экране появится окно Pick Devices библиотеки компонентов.

Компоненты (элементы схемы) выбирайте по ключевым словам Keywords (названиям элементов) следующим образом:

  • сначала найдите микроконтроллер. Для этого наберите в окне Keywords слово pic18f242;

  • затем выберите светодиод. Для этого очистите строку Keywords и введите слово LED-RED (красный светодиод);

  • затем выберите резистор. С этой целью очистите строку Keywords и введите слово RES (резистор). В окне результата выберите строку RES DEVICE;

  • и в заключение выберите переключатель (кнопку). Для этого очистите строку Keywords и введите слово BUTTON (кнопка). В окне результатов выберите строку BUTTON ACTIVE.

Итак, все элементы схемы выбраны и появились в списке окна Object Selector. Закройте библиотеку нажатием на клавишу Enter.

Теперь разместите элементы МКУ в окне редактирования. Вначале поместите микроконтроллер. Постарайтесь, чтобы вывод RC0 оказался на линии точек сетки. Это в дальнейшем упростит рисование соединений в схеме. Для удобства размещения увеличьте масштаб отображения элементов. Разместите на схеме резисторы, светодиод и кнопку согласно рис. 4.

Затем перейдите в режим Terminals Mode, для чего требуется щелкнуть мышью по иконке с соответствующей надписью на панели инструментов. После этого в окне Object Selector появится список доступных элементов. Выберите из списка клемму GROUND (земля, общий провод) и поместите ее под светодиодом. Затем выберите из списка клемму POWER (питание) и поместите ее около вывода MCLR микроконтроллера. Выполните соединение элементов между собой согласно принципиальной схеме, приведенной на рис. 4.

Далее необходимо установить параметры компонентов принципиальной схемы МКУ. С этой целью подведите курсор мыши на изображение микроконтроллера и дважды щелкните левой кнопкой. Откроется окно редактирования свойств компонента Edit Component. В строке Processor Clock Frequency (тактовая частота процессора) выставьте 4 МГц. Остальные установки пока менять нет необходимости. Щелкните по кнопке OK для подтверждения выбора параметров. Затем щелкните по пустому месту схемы для снятия выделения с МК.

Далее необходимо установить параметры резистора R1. С этой целью подведите курсор на изображение резистора R1 и дважды щелкните левой кнопкой мыши. Откроется окно редактирования свойств резистора. Введите в поле Resistance число 300 (сопротивление), а затем нажмите кнопку в поле Mode Type и выберите строку DIGITAL. Щелкните по кнопке ОК для подтверждения выбора. Для резистора R2 установите также параметр DIGITAL.

Подведите курсор к изображению клеммы POWER (питание) и дважды щелкните по ней левой кнопкой мыши. Откроется окно редактирования Edit Terminal Label. Щелкните по стрелке в окне String, и в раскрывшемся списке выделите строку VDD. Это будет означать, что на клемму POWER подано напряжение питания UDD. Щелкните по кнопке ОК для подтверждения выбора и закрытия окна диалога.

В заключение сделайте надпись SB1 около изображения кнопки на схеме. С этой целью перейдите в режим Text Script Mode, щелкнув по иконке (значку) с одноименной всплывающей надписью на панели инструментов. Затем подведите курсор к изображению кнопки (примерно на 1 см выше), и щелкните левой кнопкой мыши. На экране появится окно редактирования текста Edit Script Block. Введите в поле Text слово SB1 и щелкните по кнопке ОК. Надпись SB1 должна появиться около изображения кнопки на схеме МКУ.

После завершения разводки необходимо сохранить проект. Для этого выберите пункт меню File > Save Design As… Раскройте папку e:\...\proj9 и сохраните в ней проект под именем sw_led1.dsn.

В заключение закройте программу Proteus ISIS.

3.6.4. Восстановите окно MPLAB IDE. Откройте проект pr9 из папки proj9 и файл sw_led1.c.

Выберите Proteus VSM в качестве инструмента для выполнения проверки работы МКУ. Это делается с помощью пункта меню Debugger > Select Tool > Proteus VSM. На рабочем столе откроется окно Proteus VSM MPLAB Viewer (окно просмотрщика).

Щелкните по крайнему левому значку меню с всплывающей надписью Open Design. В раскрывшемся окне Load ISIS Design File найдите вашу папку e:\…\proj9 и откройте файл sw_led1.dsn. На экране появится схема разработанного МКУ.

Далее необходимо загрузить в микроконтроллер исполняемый hex-файл программы sw_led1.hex. С этой целью щелкните по заголовку окна редактора программы e:\...\proj6\sw_led1.c. Затем с помощью пункта меню Project > Build All выполните компиляцию файла sw_led1.c. После появления в окне результатов Output сообщения “BUILD SUCCEEDED” полученный файл sw_led1.hex автоматически загрузится в программную память микроконтроллера.

3.6.5. Теперь можно приступить к проверке работы МКУ с помощью просмотрщика Proteus Viewer. С этой целью щелкните по зеленой кнопке с всплывающей надписью “Start Simulation” в строке меню отладчика. При этом Proteus Viewer соединяется с MPLAB IDE. В результате активизируются значки управления отладкой в меню MPLAB, а в заголовке окна Proteus VSM MPLAB Viewer добавится надпись (Animating).

Выполните проверку работы МКУ в автоматическом режиме выполнения программы. С этой целью щелкните по значку Reset из отладочного меню, а затем – по значку Run. Согласно алгоритму программы sw_led1.c после запуска МКУ светодиод должен быть погашен. Нажмите кнопку SB1 на схеме МКУ, щелкнув по кружку активатора около кнопки. Контакт кнопки должен замкнуться, а светодиод VD1 должен загореться. После этого вновь щелкните мышью по кружку активатора. Контакт кнопки должен разомкнуться, а светодиод погаснуть. Теперь щелкните по середине изображения кнопки. Контакт кнопки SB1 должен кратковременно замкнуться, а затем разомкнуться. В это время светодиод VD1 должен загореться. Если все эти действия МКУ выполняет правильно, то можно сделать вывод, что программа работает согласно заданному алгоритму.

Щелчком по значку Halt остановите выполнение программы.

Для завершения процесса отладки с помощью просмотрщика Proteus Viewer нужно щелкнуть по краcной кнопке с всплывающей надписью Stop Simulation. Произойдет рассоединение отладчика MPLAB IDE и просмотрщика Proteus Viewer.

В заключение закройте все окна и проект в MPLAB IDE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]