Подсказка. Для получения задержки на 5 с можно последовательно вызывать задержки меньшей длительности, например, на 2 и 1 с.
Задание 4. Используя схему МКУ на рис. 4, разработайте программу, выполняющую следующий алгоритм. После включения питания МК (его сброса) светодиод VD1 не горит. При нажатии на кнопку SB1 светодиод начинает мигать с частотой 1 Гц (0,5 с горит и 0,5 с не горит). При отжатии кнопки (размыкании ее контакта) светодиод гаснет. Для упрощения программы будем предполагать, что даже при кратковременном замыкании контакта кнопки светодиод загорается на время 0,5 с, а потом гаснет. Частота работы МК равна 4 МГц. Программу назовите sw_led3.c. Создайте для нее новый проект pr11 и папку proj11. Проверьте работу программы с помощью Proteus Viewer с использованием проекта sw_led1.dsn из папки proj9.
3.8. Разработка и исследование программы проверки работы кнопочных переключателей
Рассмотрим программу, которая проверяет работу кнопочных переключателей SB1 и SB2 микроконтроллерного устройства, схема которого приведена на рис.1. Эта программа должна выполнять следующий алгоритм. После запуска программы (например, включения электропитания) производится инициализация МК, при которой линии RB0 и RB7 порта В настраиваются на ввод, а линии RC0 и RC7 порта С – на вывод. Затем производится диагностика светодиодов, для чего светодиоды VD1 и VD2 включаются на время 1 секунду, а потом гаснут. Затем программа в бесконечном цикле ожидает момент срабатывания контактов переключателей SB1 и SB2. При замыкании SB1 загорается светодиод VD1 красного цвета, а при замыкании SB2 загорается светодиод VD2 зеленого цвета.
Программа на языке Си с именем check.c (проверка) будет состоять из главной функции main( ) и двух функций пользователя: функции инициализации микроконтроллера init( ) и функции диагностики светодиодов diagn( ). Для выполнения задержки на 1 с будем использовать библиотечную функцию задержки Delay10KTCYx( ). Предполагаем, что тактовая частота работы МК равна 4 МГц.
В микроконтроллерах семейства PIC18 для упрощения реализации схем сопряжения с контактами клавиатуры имеется возможность подключения к линиям порта В внутренних подтягивающих резисторов (pull up resistors). Эти резисторы подключаются только к линиям порта В, настроенных на ввод. Подключить резисторы можно установкой специального бита в регистре опций OPTION, однако проще это сделать с помощью вызова библиотечной функции EnablePullups( ), которая входит в набор функций управления портом В. Для использования этой функции в программу на Си необходимо подключить заголовочный файл portb.h.
/*************************************************************
check.c – программа проверки переключателей SB1, SB2
************************************************************/
#include<p18f242.h>
#include<delays.h> // заголовочный файл для функций задержки
#include<portb.h> // заголовочный файл для функций порта В
#pragma config WDT = OFF, OSC = HS
void init(void); // прототип функции инициализации
void diagn(void); // прототип функции диагностики
void main(void)
{
init( ); // вызов функции инициализации
diagn( ); // вызов функции диагностики
loop:
if( PORTBbits.RB0 ==0)
PORTCbits.RC0 = 1;
else
PORTCbits.RC0 = 0;
if( PORTBbits.RB7 ==0)
PORTCbits.RC7 = 1;
else
PORTCbits.RC7 = 0;
goto loop; // зацикливание программы
}
void init(void) // функция инициализации МК
{
PORTB = 0; // очистить регистр данных порта В
PORTC = 0; // очистить регистр данных порта С
TRISB = 0b10000001; // настроить линии RB0 и RB7 порта В
// на ввод, остальные – на вывод
TRISC = 0; // настроить все линии порта С на вывод
EnablePullups( ); // вызов функции подключения подтягивающих
// резисторов ко входам порта В
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.