пунктом меню «File New». В появившемся окне редактора исходных текстов (рисунок 20.10) наберите исходный код программы, приведенный в методических указаниях к данной лабораторной работе.
Рисунок 20.10 – Редактор исходных текстов программ
8.6 После написания исходного кода программы к заданию № 3 с помощью пункта меню «File Save As…» откройте окно «Сохранить как» (рисунок 20.11). В этом окне выберите папку «LR20_3», в которой сохраняли файл исходного кода проекта и в строке «Имя файла» задайте название исходного кода программы, как «LR20_3.c» (рисунок 20.12). Затем нажмите кнопку «Сохранить».
Рисунок 20.11 – Окно сохранения файла исходного текста программы
91
Рисунок 20.12 – Сохранение исходного кода программы к заданию № 20.2
Рисунок 20.13 – Добавление исходного файла в проект
8.7 Кликните правой кнопкой мыши в окне редактора исходного кода и выберите пункт «Add To Project» (рисунок 20.13).
После описанных действий инспектор проекта должен иметь вид, показанный на рисунке 20.14.
92
Рисунок 20.14 – Инспектор проекта
8.8Выполните компиляцию проекта, используя пункт меню «Project Build All». Компилятор выводит отчет о компиляции в окне «Output». В случае успешной компиляции получите сообщение BUILD SUCCEEDED (рисунок 20.15). В случае обнаружения ошибок в исходном коде соответствующие сообщения будут выведены в область уведомлений. В таком случае необходимо исправить ошибки и запустить заново компилирование проекта.
8.9После успешной компиляции с помощью пункта меню «Programmer
Select Programmer» выбрать программатор PICkit2.
8.10Запрограммировать стенд (прошить микроконтроллер) используя
пункт меню «Programmer Program».
8.11 Результат программирования отобразится в окне сообщений, и в случае успешного программирования (сообщение – … PICkit2 Ready) необходимо перевести МК в рабочий режим с помощью пункта меню «Programmer Release from Reset».
8.12После получения сообщения, указанного на рисунке 20.3, микроконтроллер запрограммирован.
8.13Проверить работу светодиодных индикаторов VD1 и VD2 в зависимости от положения тумблеров SA1 и SA2.
9 После проверки преподавателем результатов работы закрыть MPLAB IDE, выключить ПК и учебный стенд.
10 Оформить отчет и сдать зачет.
93
Рисунок 20.15 – Отчет о компиляции
Содержание отчета
Отчет должен содержать:
1 Наименование и цель лабораторной работы.
2 Условие, схема алгоритма и листинг программы к заданию № 20.3. 3 Ответы на контрольные вопросы.
Контрольные вопросы
1 Как формируется временная задержка методом программных циклов?
2 Как формируется временная задержка с использованием таймера/счетчика?
3 Укажите функцию из библиотеки компилятора MPLAB C30 для языка программирования С, предназначенную для организации временных
задержек. |
|
|
|
|
|
|
4 |
Перечислите регистры предназначенные для настройки таймеров и |
|||||
укажите их назначение. |
|
|
|
|
||
5 |
Какие |
действия |
выполняет |
строка |
программы |
LR20_1 |
«#define FCY (FOSC / 2)»? |
|
|
|
|
||
6 |
Поясните назначение функции «_delay32(FCY)» в программе LR20_1. |
|||||
Требования к знаниям и умениям учащихся
В результате выполнения лабораторной работы учащиеся должны знать:
особенности программной и аппаратной реализации временных функций в МК dsPIC33F;
структуру и режимы работы таймеров МК dsPIC33F.
Должны уметь:
94
составлять программы с помощью языка программирования С реализации временных функций, используя метод программных циклов и таймер/счетчик;
создавать проекты для прошивки МК dsPIC33FJ32MC204 в интегрированной среде MPLAB IDE 8;
выполнять компиляцию исходного кода программ прошивки МК учебного стенда НТЦ-31.000;
выполнять программирование МК учебного стенда НТЦ-31.000, а также проверку и отладку прошивки.
Методические указания
1 Краткие теоретические сведения
1.1 Реализация временных функций
Временные функции в микропроцессорных системах используются в случаях, когда необходимо выполнять какие либо действия периодически, либо производить измерение длительности какого либо события. Наибольшее распространение для реализации временных функций получили метод программных циклов и использование таймера/счетчика. Во всех случаях МК оперирует не непосредственно временем, а количеством машинных циклов, выполненных за интересующий интервал времени. Машинный цикл МК – это процедура выполнения ядром МК одной инструкции за один машинный такт, равный двум периодам тактирующего генератора. Частота внутреннего тактирующего генератора МК dsPIC33FJ32MC204 (по умолчанию) равна
7.37 Мгц. Следовательно, машинный цикл длится |
1 |
|
1 |
|
|
||
7370000 2 |
3685000 |
секунды.
1.2 Метод программных циклов
Метод программных циклов относится к программным способам реализации временной задержки и состоит в следующем. В некоторую переменную загружают число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое переменной не станет равной 0, что интерпретируется программой как момент выхода из цикла, и, следовательно, истечение требуемого промежутка времени. Время задержки при этом определяется числом, загруженным в переменную-счетчик и временем выполнения команд, образующих цикл.
Для организации временных задержек библиотека компилятора MPLAB С30 имеет специальную функцию для языка программирования С:
void_delay32(unsigned long cycles).
95
Недостатком программного способа реализации временной задержки является нерациональное использование ресурсов МК: во время формирования задержки МК практически простаивает, так как не может решать никаких задач управления объектом. В то же время аппаратные средства МК позволяют реализовать временные задержки на фоне основной программы работы.
1.3 Использование таймера/счётчика
Таймеры/счетчики (Т/С) предназначены для подсчета внешних событий, для получения программно-управляемых временных задержек и выполнения времязадающих функций микроконтроллера.
Микроконтроллеры семейства dsPIC33 имеют несколько 16-разрядных таймеров. Таймеры имеют обозначение Timer1, Timer2 Timer3 и т.д. С небольшими исключениями, все 16-битные таймеры имеют одинаковую функциональность и разделены на 3 типа:
-Таймер типа А (Timer1).
-Таймер типа В (Timer2, Timer4, Timer6, Timer8).
-Таймер типа С (Timer3, Timer5, Timer7, Timer9).
Таймеры типа В и С могут быть объединены для формирования 32разрядного таймера.
Каждый из таймеров настраивается следующими регистрами, доступными для чтения и записи:
-TMRx – регистр счета;;
-PRx – регистр периода;
-TxCON – регистр конфигурации, где x – номер таймера.
Также с каждым таймером ассоциированы следующие биты в регистре
управления прерываниями:
-TxIE – бит разрешения прерывания (регистр IESO);
-TxF – бит статуса прерывания (регистр IFSO);
-TxIP<2:2> - биты установки приоритета прерывания (регистр IPCO). Структурная схема модуля Timer1 приведена на рисунке 20.16.
Модуль Timer1 является 16-разрядным таймером, который может
служить как счетчик для часов реального времени или работать как интервальный таймер-счетчик.
16-разрядный Timer1 имеет следующие режимы работы:
-16-разрядный таймер;
-16-разрядный синхронный счетчик;
-16-разрядный асинхронный счетчик.
Эти режимы работы определяются установкой соответствующих битов в 16-разрядном регистре конфигурации T1CON.
96
Рисунок 20.16 – Структурная схема модуля Timer1
В16-разрядном режиме таймера, таймер инкрементируется на каждый цикл инструкций до соответствующего значения, предварительно загруженного в регистр периода PR1 (рисунок 20.16), а затем сбрасывается в «0» и продолжает считать. Если CPU входит в режим простоя IDLE, таймер может остановить приращение если бит TSIDL = 0 (бит регистра T1CON < 13 >). Если TSIDL = 1, модуль таймера может продолжать последовательность инкрементирования с завершением режима простоя CPU.
Врежиме 16-разрядного синхронного счетчика, таймер инкрементируется по нарастающему фронту внешнего тактового сигнала. Таймер считает до соответствующего значения загруженного в регистр PR1, затем сбрасывается в «0» и продолжает считать. В режиме простоя CPU модуль таймера работает в аналогичном режиме 16-разрядного таймера.
Врежиме 16-разрядного асинхронного счетчика в режиме простоя CPU,
таймер остановит инкрементирование, если бит TSIDL = 1.
Врежиме SLEEP CPU таймер Timer1 работает если:
-модуль таймера разрешен (бит регистра T1CON < 15 > TON = 1);
-выбран внешний источник тактирования (бит регистра T1CON < 1 > TCS = 1);
-бит TSYNC регистра T1CON < 2 > переведен в логический 0, который определяет внешний источник тактирования как асинхронный.
Когда все три условие выполнены, таймер продолжает считать до состояния регистра PR1 и, после чего, сброшен состоянием 0х0000. При
97
dsPIC33fj32mc204
|
|
|
|
|
SA2 |
|
|
|
|
|
|
|
|
|
SA1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
совпадении состояний регистров TMR1 и PR1 (рисунок 20.16) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
устанавливается+3,3 |
бит T1IF в+3,3регистре управления прерываниями IFSO. В этом |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
В |
|
|
|
|
|
|
|
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
случае генерируется прерывание, если установлено соответствующий бит |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
разрешения прерывания таймера. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
1k |
R106 |
|
|
|
|
|
|
1k |
|
|
R105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VD1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
1.4 Схема электрическая принципиальная к лабораторной работе |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
Для |
ввода |
|
дискретной |
информации |
|
|
в |
|
микроконтроллер |
широко |
|||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
33 |
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
применяются различные переключатели, кнопки и клавиатуры, либо иные |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
дискретныеRP4/RB4 |
RA8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
датчикиRA3 Vss . |
|
|
|
|
|
|
21 |
20 |
|
|
18 |
17 |
|
16 |
|
|
|
|
|
|
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
34 |
|
|
ДискретнымиRA2/OSC2 |
|
|
выходамиVdd 22 AN5/RP3/RB3 |
AN4/RP2/RB2микроконтроллер19 MCLR AVdd22 AVss 15 14 RA7 |
|
|
управляет различными |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
RA4 |
|
|
|
|
|
|
|
|
|
|
AN8/RP18/RC2 |
AN7/RP17/RC1 |
AN6/RP16/RC0 |
|
AN2/RA2 |
|
AN1/RA1 |
|
AN3/RA3 |
|
|
|
|
|
RP15/RB15 |
|
RP14/RB14 |
|
|
|
|
RA10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AN3/RA3 |
|
|
|
AN0/RA0 |
|
|
|
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
по |
R112 |
VD2 |
|||||||||||||||
исполнительнымиRA9 |
|
|
|
|
|
устройствамиAN2/RA2, |
|
|
работающими |
|
|
|
|
|
|
принципу |
||||||||||||||||||||||||||||||||||||||||||||
включено/выключено. |
AN4/RP2/RB2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP13/RB13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
36 |
RP19/RC3 |
|
|
|
|
|
|
|
23 |
|
|
|
|
|
|
|
AN1/RA1 |
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
На |
|
|
рисунке |
20.17 |
|
|
AN5/RP3/RB3 |
|
|
|
|
схема |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP12/RB12 |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
приведена |
|
|
электрическая |
|
принципиальная к |
||||||||||||||||||||||||||||||||||||||||||||||||||||
37 |
RP20/RC4 |
|
|
|
|
|
|
|
25 |
|
|
|
|
|
|
|
|
|
|
|
AN0/RA0 |
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||
38 |
+3,3В |
|
|
|
|
|
|
|
|
|
AN6/RP16/RC0 |
|
|
|
|
|
|
|
|
|
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP11/RB11 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MCLR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
лабораторной работе.26 |
|
|
AN7/RP17/RC1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP10/RB10 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
RP21/RC5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
39 |
Vss |
R105 |
|
|
|
|
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
AVdd |
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||
40 |
Vdd |
|
|
|
|
|
|
|
AN8/RP18/RC2 |
|
|
|
|
|
|
|
AVss |
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vcap |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
SA1 |
|
|
|
|
|
|
|
28 |
|
|
Vdd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R111 |
|
|
VD1 Vss |
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
41 |
RP5/RB5 |
1k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP15/RB15 |
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
42 |
RP6/RB6 |
|
|
|
|
|
|
|
29 |
|
|
Vss |
|
|
|
|
|
|
|
RP14/RB14 |
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP25/RC9 |
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
RA2/OSC2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP24/RC8 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
43 |
RP7/RB7 |
|
|
|
|
|
|
|
31 |
|
|
|
|
22 |
|
21 |
|
20 |
|
19 |
|
18 |
RA7 |
|
13 |
|
|
|
15 |
|
14 |
|
|
13 |
|
12 |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|||||||
44+3,3В |
|
|
|
|
|
|
|
|
|
RA3 |
|
|
|
|
|
|
17 |
|
16 |
|
|
|
|
|
|
|
|
|
RP22/RC7 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
AN3/RA3 |
AN2/RA2RP12/RB12 |
AN1/RA1 |
AN0/RA0 |
MCLR |
AVdd |
12 |
AVss |
RP15/RB15 |
RP14/RB14 |
RA7 |
RA10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
RP8/RB8 |
R106 |
RP22/RC7 |
RP24/RC8 |
RP25/RC9 |
33 |
|
|
RP4/RB4 |
|
|
|
RP9/RB9 |
|
1 |
|
|
|
|
R112 |
VD2 |
|||||||||||||||||||||||||||||||||||||||
|
P9/RB9 |
RP22/RC6 |
Vss |
|
|
Vcap |
RP10/RB10 |
RP11/RB11 |
RP13/RB13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
|
RA8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP22/RC6 |
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
SA2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
AN4/RP2/RB2 |
|
|
|
RP19/RC3 |
|
RP20/RC4 |
|
RP21/RC5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP13/RB13 |
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
25 |
|
AN6/RP16/RC0RA49 |
|
RA9 |
|
|
|
|
Vss |
|
Vdd |
|
RP5/RB5 |
|
RP6/RB6 |
|
RP7/RB7 |
|
|
RP8/RB8 |
RP11/RB11 |
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
1k |
|
|
|
|
|
|
24 |
|
AN5/RP3/RB3 |
10 |
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP12/RB12 |
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
+3,3В |
|
|
|
|
|
|
|
|
6 |
7 |
8 |
34 |
35 |
36 |
37 |
38 |
39 |
|
40 |
|
41 |
42 |
|
43 |
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
26 |
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
R105 |
|
|
|
|
|
27 |
|
AN7/RP17/RC1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP10/RB10 |
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
AN8/RP18/RC2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vcap |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
SA1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
Vdd |
|
|
|
|
|
|
|
R112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vss |
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
1k |
|
|
|
|
|
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vss |
|
|
|
|
|
|
dsPIC33fj32mc204 |
|
|
|
|
|
|
RP25/RC9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RA2/OSC2 |
|
|
|
|
|
|
VD2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP24/RC8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
+3,3В |
|
|
|
|
|
|
|
|
RA3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP22/RC7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
R106 |
|
|
|
|
|
|
RA8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP22/RC6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
RP4/RB4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RP9/RB9 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
SA2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RA4 |
RA9 |
RP19/RC3 |
RP20/RC4 |
RP21/RC5 |
Vss |
|
Vdd |
RP5/RB5 |
RP6/RB6 |
RP7/RB7 |
RP8/RB8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
1k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
|
41 |
|
42 |
|
|
43 |
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
Рисунок 20.17 – Схема электрическая принципиальная |
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||
В схеме два дискретных датчика оформлены в виде двух переключателей SA1 и SA2, подключенных к выводам RA2 и RA3 микроконтроллера.
Два дискретных выхода оформлены в виде двух светодиодов VD1 и VD2, подключенных к выводам RB15 и RB13 микроконтроллера соответственно.
1. 5 Листинг программы для создания проекта LR20_1
98
#include <P33FJ32MC204.h> |
|
#define FOSC 7370000 |
|
#define FCY (FOSC / 2) |
// Настройка частоты выполнения |
|
// инструкций |
_FOSCSEL(FNOSC_FRC) |
//Настройка работы микроконтроллера |
|
//от внутреннего тактового генератора |
void main() |
|
{ |
|
TRISBbits.TRISB15 = 0; |
// Выход VD1 (RB15) |
while (1) |
|
{ |
|
__delay32(FCY); |
//Организация временной задержки |
LATBbits.LATB15 = 1; |
|
__delay32(FCY); |
|
LATBbits.LATB15 = 0; |
|
} |
|
} |
|
1.6Листинг программы для создания проекта LR20_2
#include <P33FJ32MC204.h>
_FOSCSEL(FNOSC_FRC) // Настройка работы микроконтроллера
//от внутреннего тактового генератора
void Init_Timer1()
{
T1CON = 0; IFS0bits.T1IF = 0; IEC0bits.T1IE = 1; TMR1 = 0x0000; PR1 = 0x0E65;
T1CONbits.TON = 1;
}
int _ms = 0;
//Инициализация таймера T1
//Сброс таймера
//Сброс флага прерывания таймера
//Разрешение прерывания от таймера
//Обнуление текущего значения таймера
//Задание периода таймера
//Разрешение работы таймера и
//Его запуск
99
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt()
// Прерывание таймера T1 по совпадению
{
_ms++;
IFS0bits.T1IF = 0; // Сброс флага прерывания таймера TMR1 = 0; // Перезапуск таймера
}
void main()
{
Init_Timer1();
TRISBbits.TRISB15 = 0; // Выход VD1 (RB15)
while (1)
{
if (_ms < 1000)
{
LATBbits.LATB15 = 0;
}
else if (_ms < 2000)
{
LATBbits.LATB15 = 1;
}
else
{
_ms = 0;
}
}
}
1.7 Листинг программы для создания проекта LR20_3
#include <p33fj32mc204.h>
#define FOSC 7370000 #define FCY (FOSC/2)
_FOSC(OSCIOFNC_ON & POSCMD_NONE)
//Отключение дополнительной функции порта RA2 – выход // тактирующего сигнала внутреннего генератора
_FOSCSEL(FNOSC_FRC) |
// Настройка работы от |
|
// внутреннего тактового |
100
