Большое спасибо за помощь!
Цитата
на ИР22 (SN74LS373) остаются (хранятся) те данные, которые были во время перехода H->L.
то есть те данные, которые были в момент отключения канала дешифратора (Дешифратор активный 0, но у Вас еще инвертор после него есть)
Я обратил внимание на это. Но потом подумал, что это будет влиять в тот, момент, когда индикация будет меняться. А у меня она пока не изменяется.
По поводу комментариев – поправил.
По поводу констант понял.
По поводу склонения слова «Порт» - буду иметь ввиду.
Цитата
Основной штамп на первом листе Вы благоразумно затерли, иначе я бы оперировал конкретным именем разработчика
Штамп я затер, т.к. плату мне эту дали бесплатно из целей, чтобы я попытался поучиться писать программы на МК и люди, которые ее разрабатывали возможно не знают об этом. Поэтому я не хочу, чтобы афишировались какие-то фамилии.
Текст программы после исправления получился вот таким:
Код
#include <p18f6722.h>
#pragma config OSC = XT // Применяю внешний кварцевый резонатор
#pragma config WDT = OFF // Внутренний сторожевой таймер отключаю - применяется внешний, который нужно периодически обнулять сигналом ADR0
#define ADDR_HL1 0x3 // определяю адрес первого индикатора HL1 0x03, как переменную ADDR_HL1
#define ADDR_HL2 0x4 // определяю адрес второго индикатора HL2 0x04, как переменную ADDR_HL2
#define ADDR_HL3 0x5 // определяю адрес третьего индикатора HL3 0x05, как переменную ADDR_HL3
#define ADDR_HL4 0x6 // определяю адрес четвертого индикатора HL4 0x06, как переменную ADDR_HL4
#define ADDR_HL5 0x7 // определяю адрес пятого индикатора HL5 0x07, как переменную ADDR_HL5
#define ADDR_HL6 0x8 // определяю адрес шестого индикатора HL6 0x08, как переменную ADDR_HL6
#define ADDR_HL7 0x9 // определяю адрес седьмого индикатора HL7 0x09, как переменную ADDR_HL7
#define ADDR_HL8 0xA // определяю адрес восьмого индикатора HL8 0x0A, как переменную ADDR_HL8
#define ADDR_HL_NO_SELECT 0x00 //определяю переменную, при которой не будет не задействован ни один индикатор HL1-HL8
#define LEDCODE_0 0xC0 //определяю переменную, при которой на индикаторе будет отображаться "0"
#define LEDCODE_1 0xF9 //определяю переменную, при которой на индикаторе будет отображаться "1"
#define LEDCODE_2 0xA4 //определяю переменную, при которой на индикаторе будет отображаться "2"
#define LEDCODE_3 0xB0 //определяю переменную, при которой на индикаторе будет отображаться "3"
#define LEDCODE_4 0x99 //определяю переменную, при которой на индикаторе будет отображаться "4"
#define LEDCODE_5 0x92 //определяю переменную, при которой на индикаторе будет отображаться "5"
#define LEDCODE_6 0x82 //определяю переменную, при которой на индикаторе будет отображаться "6"
#define LEDCODE_7 0xF8 //определяю переменную, при которой на индикаторе будет отображаться "7"
#define LEDCODE_8 0x80 //определяю переменную, при которой на индикаторе будет отображаться "8"
#define LEDCODE_9 0x90 //определяю переменную, при которой на индикаторе будет отображаться "9"
#define PORT_DATA PORTD //определяю PORTD, как переменную PORT_DATA
#define PORT_ADDR PORTE //определяю PORTE, как переменную PORT_ADDR
void Indicator(char addrCode, char dataCode); //определяю функцию с именем Indicator, char - символьный тип данных
void Indicator(char addrCode, char dataCode) //ввожу параметры функции, т.е. значения, которые будут находиться под именам addrCode и dataCode.
{
PORT_ADDR = addrCode; //под параметром addrCode будет значение переменной PORT_ADDR
PORT_DATA = dataCode; //под параметром dataCode будет значение переменной PORT_DATA
}
void main (void) // точка входа в саму программу
{
TRISD = 0; // выводы порта D микроконтроллера определяю, как выходы
TRISE = 0; // выводы порта Е микроконтроллера определяю, как выходы
Indicator(ADDR_HL1,LEDCODE_1); //на индикатор HL1 вывожу число "1"
Indicator(ADDR_HL2,LEDCODE_2); //на индикатор HL2 вывожу число "2"
Indicator(ADDR_HL3,LEDCODE_3); //на индикатор HL3 вывожу число "3"
Indicator(ADDR_HL4,LEDCODE_4); //на индикатор HL4 вывожу число "4"
Indicator(ADDR_HL5,LEDCODE_5); //на индикатор HL5 вывожу число "5"
Indicator(ADDR_HL6,LEDCODE_6); //на индикатор HL6 вывожу число "6"
Indicator(ADDR_HL7,LEDCODE_7); //на индикатор HL7 вывожу число "7"
Indicator(ADDR_HL8,LEDCODE_8); //на индикатор HL8 вывожу число "8"
while(1); // Организую бесконечный цикл, для того, чтобы индикация светодиодов была постоянной. Цикл прерывается перезапуском или выключением платы.
}
Переменным ADDR, LEDCODE, PORT_DATA и PORT_ADDR приравнены константы вне функции main, поэтому они глобальные.
void Indicator(char addrCode, char dataCode); - тут, как я понимаю, производиться объявление функции до ее использования. Void – ставиться, т.к. в моем понимании значение функции «возвращается», используется в дальнейшем участке схемы, т.е. сюда «возвращаются».
Код
//сами функции
void Indicator(char addrCode, char dataCode)
{
PORT_ADDR = addrCode;
PORT_DATA = dataCode;
}
Тут, как я понимаю, производиться заполнение фунции, объявленной ранее, т.е. приравниваются значения PORT_ADDR и PORT_DATA некоторым значениям, которые будут указаны позже в тексте программы. Void – ставиться, т.к. сюда также возвращаются в дальнейшем при работе самой программы.
Текст самой программы обозначается void main (void) – когда работа доходит до этого участка, то все работает на этом участке и по мере необходимости (в процессе выполнения программы) происходит возврат в участки, обозначенные, как . Void, в которых происходит «переопределение» каких-либо переменных.
Вопросы:1) Ваша программа полностью работает, если убрать строчку:
Код
PORT_ADDR = ADDR_HL_NO_SELECT; // в этот момент защелкиваются данные на HL1
Если она есть, код 12345678 на индикаторах высвечивается, но периодически появляются одно временно восьмерки на HL3 и HL7 или HL5 и HL7.
Без этой строчки все хорошо. А зачем она?
2) В моей программе не использовалось предопределение констант перемеными при помощи #define и не использовалась функция. В остальном она как будто-бы подобна Вашей. Но Ваша все же работает. Почему не работала моя программа? Почему происходила неправильная индикация?