Здравствуйте, уважаемые форумчане!
Пробую освоить микроконтроллер PIC18F6722. Программа для работы – MPLAB IDE v8.86 + компилятор С18. Программатор – MPLAB ICD3. Есть плата, на которой уже установлен данный микроконтроллер и есть светодиоды, которые можно «позажигать», чтобы немного разобраться в работе данного МК.
Вот схемы платы:
Микроконтроллер показан на третьей схеме.
Кварц стоит внешний – на 6 Мгц. Также используется внешний сторожевой ждущий таймер ADM706, который подключен к выводу 2 (RE0), которым нужно периодически давать импульсы, чтобы сбрасывать данный таймер и он не подал сигнал на перезапуск МК (я так понимаю).
На плате есть 8 семисегментных индикаторов HL1-HL8 (KingsBright SA56-11EWA).
Я решил написать программу, при которой на них будет написаны числа 12345678.
Сигналы на выбора сегмента (D0-D7) подключены от МК к индикатору через буферный регистр хранения информации ЭКФ1533ИР22. Сигналы на разрешение включения индикатора LE4 – LE11 подаются на индикатор с того же буферного регистра ЭКФ1533ИР22, на который данные сигналы подаются с МК через дешифратор ЭКФ1533ИД7 и инвертор сигналов ЭКФ1533ЛН1. С данными микросхемами я разобрался и написал для себя таблицу значений выходов МК, при которой будет зажигаться необходимая мне комбинация цифр.
Текст программы написал следующий:
Код
#include <p18f6722.h>
#pragma config OSC = XT // Применяю внешний кварцевый резонатор
#pragma config WDT = OFF // Внутренний сторожевой таймер отключаю - применяется внешний, который нужно периодически обнулять
void main (void)
{
TRISD = 0;
TRISE = 0;
PORTD = 0; // Сбрасываю значения на порте D
PORTE = 0; // Сбрасываю значения на порте E
PORTD = 0xF9; // Принимаю соответствующие значения сегментов для индикатора HL1
PORTE = 0x3; // Разрешаю индикацию индикатора HL1
PORTD = 0xA4; // Принимаю соответствующие значения сегментов для индикатора HL2
PORTE = 0x4; // Разрешаю индикацию индикатора HL2
PORTD = 0xB0; // Принимаю соответствующие значения сегментов для индикатора HL3
PORTE = 0x5; // Разрешаю индикацию индикатора HL3
PORTD = 0x99; // Принимаю соответствующие значения сегментов для индикатора HL4
PORTE = 0x6; // Разрешаю индикацию индикатора HL4
PORTD = 0x92; // Принимаю соответствующие значения сегментов для индикатора HL5
PORTE = 0x7; // Разрешаю индикацию индикатора HL5
PORTD = 0x82; // Принимаю соответствующие значения сегментов для индикатора HL6
PORTE = 0x8; // Разрешаю индикацию индикатора HL6
PORTD = 0xF8; // Принимаю соответствующие значения сегментов для индикатора HL7
PORTE = 0x9; // Разрешаю индикацию индикатора HL7
PORTD = 0x80; // Принимаю соответствующие значения сегментов для индикатора HL8
PORTE = 0xA; // Разрешаю индикацию индикатора HL8
while (1); // Организую бесконечный цикл, для того, чтобы индикация светодиодов была постоянной
}
Программу скомпилировал, все прошло нормально, но прошивать МК еще не стал – решил спросить совета. Как я понимаю, при данной программе на мгновение должна появиться комбинация 12345678, т.к. с вывод микроконтроллера RE0 сигнал подается на ждущий таймер и индикаторы. Данный вывод у меня будет задействован в индикации и будет периодически менять свое значение, т.е. будет сбрасываться. Правильно ли я думаю? Правильно ли я написал программу? Правильно ли я указал конфигурационные биты в начале программы?