Программа №2. «Продолжение рыбы». Именование портов и линийНу что за шутки, скажете вы, прочитав этот заголовок. На самом деле от вас требуется еще немного терпения, чтобы сделать первый практический шаг. Я не стал напрягать вас раньше времени, иначе в вашей голове были бы каша, мёд, гавно и пчелы. Чтобы этого избежать, требуется системность изложения.
Создайте проект «test2» и поместите в него программу ниже.
#include <pic.h>
//pic16f628a
/* тестовая программа № 2 из самомучителя*/
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
#define knopka RB4 // кнопка
#define diod RA0 // светодиод
void podgot (void); // подготовка МК
void main (void)
{
podgot();
diod = knopka;
}
// === подготовка МК
void podgot (void)
{
TRISA = 0b00000000; // направление работы ножек порта А
TRISB = 0b00010000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 0; // подтягивающие R (0-вкл, 1-выкл)
}
Рассмотрим этот текст. Мы подключили заголовочный файл и сконфигурировали МК. Я обычно в самом верху добавляю комментарий о том, под какой кристалл «заточена» конфигурация и проект; при желании пишу еще несколько слов о программе, чтобы потом не чесать репу.
#define knopka RB4 // кнопка
#define diod RA0 // светодиод
Каждая из этих строчек дает компилятору указание, что под одной фразой должна пониматься другая фраза. Например, если в тексте программы будет встречена фраза knopka , то это он должен понимать как RB4. Или если в тексте встретится фраза diod , то это RA4.
Мы ранее говорили, что RAх и RBх это цифровые линии МК. Под «х» (икс) понимается порядковый номер цифровой линии в МК. Порядковый номер может быть от 0 до 7, т.е. восемь бит. Ножки как и у любого DIP-корпуса микросхемы нумеруются против часовой стрелки, начиная от ключа, если смотреть на корпус сверху (со стороны маркировки). Для чего я говорю очевидные вещи? Будьте внимательны, номера ножек и номера цифровых линий портов разные понятия. Соответствующей цифровой линии порта соответствует определенная физическая ножка. Давайте рассмотрим рисунок со стр. 3 даташита.

Как видим RB4 соответствует вывод 10, а RA0 – 17й вывод. Так или иначе, по контексту вы будете понимать о чем идет речь – о номере электрического вывода или об имени цифровой линии.
На картинке вывод 5 – это минусовая линия питания Vss. Вывод 14 – плюсовая линия питания Vdd. Питаемся мы стабилизированным напряжением 5 вольт, для чего достаточно интегрального стабилизатора 78L05 с обвязкой с двух сторон по 10 мкф (кто не в теме по 78L05 и аналогичных стабилизаторах, по-быстрому читаем документацию нашего сайта).
Также на картинке видим разнонаправленные, стрелки которые нам говорят о том, как может работать ножка – на вход/на выход (понятно, что линии питания только на вход, т.е. входящие сигналы). Большая часть ножек работает и на вход и на выход. RA5 в данном кристалле работает только на вход.
Кроме RAx и RBx мы видим и другие обозначения через дробь. Это информация о выводах встроенных аппаратных модулей и специальных выводах, обеспечивающих определенные режимы работы МК. На данном этапе обучения нас интересуют только RAx и RBx.
Полагаю, что вы уже получили первичные сведения о цифровых линиях на портах из даташита со стр. 27. Давайте кратко повторим.
– цифровые линии МК сгруппированы в так называемые порты;
– порты именуются буквами латинского алфавита (порт А, порт В и т.д.)
– каждый порт имеет до 8 цифровых линий;
– линии нумеруются от 0 до 7 (например, RB0… RB7);
– линии на портах работают в режиме цифрового ввода/вывода;
– линии могут быть программно переключены на встроенные модули МК, выполняющие определенные задачи;
– линии порта В имеют программно подключаемые подтягивающие резисторы (об этом подробнее чуть позже);
– линия RA4 может формировать только НЛУ,
– линия RA5 работает только на вход
(на стр. 30 даташита заголовок рисунка с опечаткой – правильно читать «RA5/MCLR/THV») – ножки RA4 и RA5 я называю «цифровыми костратами», но у них есть офигенные функции.
Для чего нужны эти сведения? Благодаря этим знаниям вы наиболее оптимальным образом будете разводить печатные платы, а под имеющиеся электрические соединения писать программу.
А теперь глазками снова посмотрим текст нашей программы. Функция майн. В ней первой строчкой вызывается некая функция podgot, а затем идет некое равенство.
void main (void)
{
podgot();
diod = knopka;
}
Давайте рассмотрим первую строчку, которой вызывается функция podgot. Перемещаем глазки в функцию podgot и изучаем её содержимое.
Мы знаем, что ножки могут работать на вход или на выход. Чтобы четко определить направление работы, необходим ряд манипуляций. За направление работы отвечают регистры TRISx. В даташите они упоминаются. Говоря по-русски, в эти регистры нужно прописать число, где каждый бит этого числа определяет то или иное направление той или иной ножки.
|