Помогите переделать исходник в CVAVR. не пойму половины..

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Artos писал(а):Вот я сегодня написал кусок чуваку в мопед, иммитация ментовской сирены :)
вот я бы руки поотбивал за такое писание! :)))

я снова буду гнуть свою линию: если вы захотели научиться писать программы, учитесь это делать сразу правильно! как вы хотите научиться, если нормальную программу вы не понимаете (и не хотите понимать), а хотите, чтобы вам ее переделали в говнокод, который вы согласны понять?! правда, исходная программа тоже не особый образец качественно написанной программы, но всяко лучше вашей "сирены"...

вы спрашивали, где там происходит опрос джамперов? но ведь это очень просто!
в главной функции

Код: Выделить всё

   x=PIND;
   y=PINB;
   t=((Mask1 & x)<<8) + (Mask2 & y);
   out(t);
считываются пины PIND и PINB - где-то там и подключены джамперы. эти считанные значения "объединяются" при помощи сдвигов и маскирования в одну переменную, которая затем передается в функцию out(t), где и происходит "разбор" полетов - куча if-ов там.

чтобы понять, что к чему, надо просто ПРОЧИТАТЬ текст программы В "ПЕРЕВОДЕ". например, видим:

Код: Выделить всё

  if (Data & bit(8))  Set(t,12); // Data Format PCM / External DF
это "читается" так: если в Data 8-й бит установлен, то устанавливаем в t 12-й бит.
то есть состояние битов АНАЛИЗИРУЕТСЯ и в другой переменной устанавливаются НУЖНЫЕ БИТЫ.

все просто. а после "перевода" в CVAVR вы получите кашу типа вашей сирены, в которой разбираться ДАЖЕ НЕ ХОЧЕТСЯ - удалить и забыть, как страшный сон.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow

Сообщение adrenocrome »

Пришёл ARV и расставил всё по местам :)))
День прошёл, а ты всё жив
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

adrenocrome писал(а):Пришёл ARV и расставил всё по местам :)))
я что-то не так сделал или не то сказал? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow

Сообщение adrenocrome »

ARV писал(а):я что-то не так сделал или не то сказал? ;)
Да нет же, всё верно.
Просто человек, который никогда и ни на чём не программировал ранее, вряд ли сразу начнёт писать правильно и красиво.
Я на паскале и дельфях когда-то давно писал, так сишный код для меня был дремучим лесом ооочень долго :)))
День прошёл, а ты всё жив
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

adrenocrome писал(а):Просто человек, который никогда и ни на чём не программировал ранее, вряд ли сразу начнёт писать правильно и красиво.
да, но ведь если уж взялся, то надо сразу учиться правильнописанию, а не писать КАРОВА и сообщать, что "я имею ввиду БЫК - просто мне так понятнее" :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

> да, но ведь если уж взялся, то надо сразу учиться правильнописанию

Я не против, а как писать правильно? Где по читать о правилах? Что в моем коде не так? Покажите как надо правильно писать.
Мой код выполняет мои требования, значит он написан правильно :)
Контактная информация:
Реклама
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

> вот я бы руки поотбивал за такое писание!

Покажите свой пример этого кода. :)
Я свою программу понимаю, она у меня хорошо работает, насчет обьема памяти которую занимает, ничего не могу сказать...
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Artos писал(а):Покажите свой пример этого кода. :)
вы сначала сформулируйте, что программа должна делать, ибо "ментовская сирена" мне как-то мало о чем говорит.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

Вот проект CVAVR и файло Proteus
Вложения
мигалка.rar
(49.11 КБ) 131 скачивание
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

Не сирена а мигалка :)
не правильно написал
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

> Вот, лови в прицепе.
Вроде бы все макросы кодвижн проглотил.
Но что делать с командой "sleep" я в душе не знаю -)

Спасибо Вам огромное! :)
Залью на днях в отладку и попробую присобачить к звуковой карте. Потом буду править :)
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ну вот вариант, как я сделал аналог вашей программы по функциональности, но, как мне кажется, гораздо качественнее:

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#ifndef _BV(x)
#define _BV(x)	(1<<(x))
#endif

/// порт, к которому подключена кнопка
#define BUTTON		_BV(PB3)
/// порт, к которому подключен первый светодиод
#define LED1		_BV(PB1)
/// порт, к которому подключен второй светодиод
#define LED2		_BV(PB2)
/// количество вспышек светодида
#define BLINK_CNT	2
/// длительность полупериода вспышки
#define BLINK_DELAY	100

/// флаг, разрешающий работу мигалки
volatile uint8_t work = 0;

/// обработчик прерывания по изменению уровня пина 
ISR(PCINT0_vect){
	// изменяем состояние флага только если кнопка отжата
	if(PINB & BUTTON) work = !work;
	// на всякий случай сбрасываем флаг запроса прерывания
	GIFR = _BV(PCIF);
}

/// функция мерцания светодиодом
static blink(uint8_t LED){
	// мерцаем светодиодом, пока установлен флаг разрешения
	for(uint8_t i=0; (i<(2*BLINK_CNT)) && work; i++){
		PORTB ^= LED;
		_delay_ms(BLINK_DELAY);
	}
}

int main(void){
	// настройки периферии
	DDRB = LED1 | LED2;			// выходные порты
	PORTB = BUTTON;				// порт кнопки с подтяжкой
	GIMSK = _BV(PCIF);			// разрешаем прерывания по изменению уровня пина
	PCMSK = _BV(PCINT3);		// разрешаем "чувствовать" только пин с кнопкой
	sei();						// разрешаем прерывания глобально
	while(1){
		// принудительно гасим оба светодиода
		PORTB &= ~(LED1 | LED2);
		// мерцаем первым светодиодом
		blink(LED1);
		// мерцаем вторым светодиодом
		blink(LED2);
	}
}
код для WinAVR, но переделать под CVAVR совсем несложно - надо только инклюды переделать и продефайнить символы PB1, PB2 и т.д. - как описано в даташите на микроконтроллер, вместо uint8_t написать unsigned char, ну и в функции задержки убрать подчеркивание :) ах, да, вот еще: CVAVR не поймет определение локальной переменной внутри цикла, поэтому придется цикл for чуток переделать - вынести описание переменной изнутри наружу.

почему я считаю, что ваш код ужасен, а мой нет? вот почему:
1. сравните внешний вид и объем исходника программы
2. обратите внимание на комментарии (я перестарался, писал их много, но я расчитывал именно на начинающих)
3. ответьте на следующие вопросы:
3.1 как в вашей программе изменить количество вспышек светодиодов? сколько потребуется переделывать строк в программе? и сравните с моим вариантом.
3.2 сколько переделок надо сделать у вас, чтобы использовать светодиоды и кнопку, подключенные к другим пинам? и сравните с моим вариантом.
3.3 аналогично сравните усилия для изменения скорости мерцания.
3.4 в каком варианте более нагляден алгоритм работы программы?
3.5 насколько сложно будет, например, добавить третий светодиод в вашу программу и в мою? или убрать кнопку и сделать 4 светодиода? или даже 5?
3.6 легко ли заставить вашу программу мигать одновременно двумя светодиодами? а мою?

мой вариант занимает 200 байт памяти программ. ваш - 446 байт. кроме всего прочего, я намеренно старался сделать код максимально похожим на ваш, а ведь можно его и видоизменить кардинально, но тогда действительно, понять его будет сложнее.

мой код, возможно, и не идеален, и по нему можно сделать ряд замечаний... это лишь попытка показать более-менее правильный подход к написанию программы.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

> 3.1 как в вашей программе изменить количество вспышек светодиодов? сколько потребуется переделывать строк в программе? и сравните с моим вариантом.

Поменять две цифры в цикле :)

> 3.2 сколько переделок надо сделать у вас, чтобы использовать светодиоды и кнопку, подключенные к другим пинам? и сравните с моим вариантом.

если задефайнить то так само как у Вас :) А вообще Вы правы, спасибо что учите :)

> 3.3 аналогично сравните усилия для изменения скорости мерцания.

тоже быстро все меняется, задержки delay изменить , и все.

> 3.4 в каком варианте более нагляден алгоритм работы программы?
3.5 насколько сложно будет, например, добавить третий светодиод в вашу программу и в мою? или убрать кнопку и сделать 4 светодиода? или даже 5?
3.6 легко ли заставить вашу программу мигать одновременно двумя светодиодами? а мою?

Тут я не спорю, Ваш код перспективнее, но цель была создать именно такую программу :)
И где можно почитать о правилах написания программы?

> мой вариант занимает 200 байт памяти программ. ваш - 446 байт. кроме всего прочего, я намеренно старался сделать код максимально похожим на ваш, а ведь можно его и видоизменить кардинально, но тогда действительно, понять его будет сложнее.

Не плохо :) Может это от компилятора?
Я не знаю чем Вам не нравится мой код... но мне он понятен очень хорошо, честное слово.. Ну а насчет обьема памяти Ваш код лидер! Но я только учусь, и например не знаю какие команды больше жрут памяти а какие меньше и т.д.
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

Блин... что то я вообще не разберусь в Вашей программе.... :(
из за того что мне текст в коде вообще не понятен... например _BV - что это за бред? Я читал книгу по Си там текст ввесь практически как в Code Vision, и мне отчетливо понятно что то или иное слово "команда" в коде выполняет, ну а если даже кое что и не понятно, то современем все становится понятно..
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

да размер кода - это просто так, к слову :) это далеко не первостепенный критерий оценки программы, хотя для выбранного вами МК - attiny13 - размер имеет значение :))) и дело не в каких-то тайных знаниях о командах... ничего секретного в моем коде нет - вы же сами видите! просто постарался сделать все аккуратно.

ваш код состоит из большого количества проверок состояния кнопки, поэтому любое изменение будет не очень простым - не пара чисел и не пара строк, а во многих строках надо все контролировать и менять. у вас нет четкости в алгоритме - большое кол-во goto из разных мест, хотя все наглядно и элегантно делается без этих скачков... магические числа - этот вы и сами поняли... вы делаете код типа "тяп-ляп" (более популярный термин "говнокод" не использую - вы учитесь, вам простительно). но будет непростительно, если вы будете и далее продолжать заявлять "код работает, меня устраивает, значит, я прав". в соседней ветке mr_smit парится с несложной задачей в этом стиле - у него бог знает сколько времени происходят разные чудеса: то мигает невпопад, то наоборот, не мигает, когда надо, то еще что-то... сам путается в своем коде, и других напрягает, но все равно продолжает упорно считать, что его методика хорошая... и ваш код, который вам понятен, спустя пол-года станет китайской грамотой для вас... если вы в этом стиле напишите что-то посложнее мигалки, то вас ожидает "масса удивительных открытий", как упомянутого mr_smit-а...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Artos писал(а):Блин... что то я вообще не разберусь в Вашей программе.... :(
из за того что мне текст в коде вообще не понятен... например _BV - что это за бред?
а 6-ю строку сверху моего кода вы внимательно изучили?! может, нужно просто внимательнее быть?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка

Сообщение Artos »

Ага, теперь понятнее стает :) 6 строка если не ошибаюсь говорит об определенном пине "х" верно?

И еще, самое плохое почему я код не понимаю, это изза того что я не знаю о прерываниях...
принцип знаю, а как в коде писать х/з... где можно почитать более внятно "совсем для чайника" :)
Да, вообще хочу почитать об алгоритмах разных задач, от часов на спец ИМС и до всяких частотомеров :)

Вот моя более сложная програма :))) можно мозгами поехать :))) но работает тоже хорошо

Код: Выделить всё



typedef unsigned char byte;

 //--------------- 0-9 10 ........... 18 символов
//Символы для LED (0-9, ,-,t,L,A,r,d,b,DP)
flash byte led_table[26]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x87,0xC7,0x88,0xAF,0xA1,0x83,0x7F,0x8C,0xC6,0xC1,0x86,0x89,0x8E,0x9C};
 //                        0     1    2    3    4    5    6    7    8    9    10  11   12   13   14   15   16   17   18   19   20   21    22  23   24   25
 //                                                                           []  -     t    L    A    r    d    b    Dp   P    C    U    E   H    F    град.

byte btn_err_flags=0; 
byte menu=0; //Индек меню
byte menu_tmr=0;
byte menu_tmr2=0;
byte menu_tmr3=0;
byte menu_tmr4=0;
byte menu_tmr5=0;
byte menu_tmr6=0;
byte menu_tmr7=0;
byte menu_tmr8=0;
byte menu_tmr9=0; 
byte menu_tmr10=0;
byte menu_tmr11=0;
byte menu_tmr12=0;
byte menu_tmr13=0;
byte menu_tmr14=0;
byte temp=0;
byte x=0;
byte y=0;
byte z=0;
byte k=0;
byte l=0;
byte temp_0=0;
byte temp_1=0;
byte sek_=0; 
byte min_=0;
byte flags_0=0;
byte flags1=0;
byte flags_2=0;
byte flags_3=0;
byte flags_4=0;
byte flags_5=0;

//byte _min1=0;
              //Счетчик в меню
byte flags_1=0; // флаг отключения термостата
byte led_dig=0; //Отображаемый разряд LED
byte led_buff[LED_DIG_COUNT]; //Буфер дял LED

byte temp1; //обьявление переменных
byte temp2;
byte temp3;
byte temp4;
byte temp5;
byte temp6;
//int i;  // описание переменной "і" как целое число Int - (Integer) 


eeprom byte epp_sing=EPP_SING; //Сигнатура корректности еепром
eeprom byte epp_temp1=1;//Загрузка значения в Еепром
eeprom byte epp_temp2=1;
eeprom byte epp_temp3=1;
eeprom byte epp_temp4=1;// load eeprom меню управление режимами. 
eeprom byte epp_temp5=1;
eeprom byte epp_temp6=1;
//int i;  // описание переменной "і" как целое число Int - (Integer) 


void epp_load() { //Загрузка данных с еепром
    if (epp_sing==EPP_SING) { //Если сигнатура прявельнаяб читаем данные с еепром 
        temp1=epp_temp1; // загрузка из еепром при выходе из меню
        temp2=epp_temp2;
        temp3=epp_temp3;
        temp4=epp_temp4; // управление режимами
        temp5=epp_temp5;
        temp6=epp_temp6;
        
    }else{
        temp1=1; // если сигнатура битая 
        temp2=1; // грузим единици.
        temp3=1;
        temp4=1;
        temp5=1;
        temp6=1;
    }
} 

void epp_save() { //Сохранение данных в еепром
    epp_temp1=temp1; // Запись данных темп в Еепром
    epp_temp2=temp2;
    epp_temp3=temp3; 
    epp_temp4=temp4;
    epp_temp5=temp5;
    epp_temp6=temp6;
    epp_sing=EPP_SING;// сигнатура соответствия Еепром
} 

void clear_leds() {  //функция очистки лед.
byte i; // переменная
for (i=0;i<LED_DIG_COUNT;i++) led_buff[i]=led_table[10]; //прибавляем единицу гоняем пустой знак по дисплею
}
//-----------------ERROR CHANEL---------------------
// отображение активных ошибок 

void error_5 () {
if ((btn_err_flags&1)==0) {
if (BTN_ERROR1==0){
btn_err_flags|=1;

        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация Error ток выхода
        led_buff[2]=led_table[15];
        led_buff[3]=led_table[20];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[0];
        PORTA.1=1;
        menu=5; 
        }
        }
        else {
        if (BTN_ERROR1!=0){
        btn_err_flags&=0xfe;
        menu=1;
        PORTB.0 = 0;
        PORTA.1=0;
        }
        }  
        }
  

void error_6 () {
if ((btn_err_flags&2)==0) {
if (BTN_ERROR2==0){
btn_err_flags|=2;


        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация ошибки Error напряжение входа
        led_buff[2]=led_table[15];
        led_buff[3]=led_table[21];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[1];
        PORTA.1=1;
        menu=5;  
        } 
        }
        else {
        if (BTN_ERROR2!=0){
        btn_err_flags&=0xfd;
        menu=1;
        PORTB.0 = 0;
        PORTA.1=0;
        
        }
         }
          }

         

void error_7 () {
if ((btn_err_flags&4)==0) {
if (BTN_ERROR3==0){
btn_err_flags|=4;


        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация ошибки Error напряжение выхода
        led_buff[2]=led_table[15];
        led_buff[3]=led_table[21];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[0];
        PORTA.1=1;
        menu=5;  
        }
        }
        else {
      if (BTN_ERROR3!=0){
      btn_err_flags&=0xfb;
        menu=1;
        PORTB.0 = 0;
        PORTA.1=0;
        
        }
        }
        } 
                

void error_8 () {
if ((btn_err_flags&8)==0) {
if (BTN_ERROR4==0){
btn_err_flags|=8;


        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация ошибки Error напряжение питания
        led_buff[2]=led_table[15];
        led_buff[3]=led_table[21];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[19]; 
        PORTA.1=1;
        menu=5; 
        }
        }
        else {
        
        if (BTN_ERROR4!=0){
        btn_err_flags&=0xf7;
        menu=1;
        PORTB.0 = 0;
        PORTA.1=0;
        
        
        }
        }
        } 
                  


void error_9 () {
if ((btn_err_flags&0x10)==0) {
 if (BTN_ERROR5==0){
 btn_err_flags|=0x10;
 
 
        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация ошибки Error нагрузка выхода
        led_buff[2]=led_table[15];
        led_buff[3]=led_table[13];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[0];
        PORTA.1=1;
        
        menu=5; 
        
        }
 }else{
        if (BTN_ERROR5!=0){
        btn_err_flags&=0xef;   // по думать!!!! не работает индикация ошибки
            menu=1;
            PORTB.0 = 0;
            PORTA.1=0;
        }
 }
 }
        
        // индикация ошибки
        
void led_error () {
if (menu_tmr3<5) {
PORTB.0 = 1;
} 
else {
PORTB.0 = 0;
}
} 



//---------------END ERROR-----------------------
//-----------------READY-------------------------
// мигалка - это индикация о нормальной работе микроконтроллера
void menu_shou_5 () {
if (menu_tmr4<3) {

PORTG=PORTG&~(1<<2); //PORTG.3=0;

}

else {
PORTG=PORTG|(1<<2); //PORTG.3=1;
}
}

//---------------END READY-----------------------
//-----------------LOAD--------------------------

    //=======================
    //   режим LOAD
    //   индикация и включение реле
    //=======================
     
void menu_show_4 () { 
// индикация загрузки и управление реле
    
   
        
        PORTB.1 = 0; // сброс индикации ошибка 
if (menu_tmr2==1) {        
        led_buff[0]=led_table[23]; //Заполняем буфер разрядов
        led_buff[1]=led_table[22]; // индикация HELLO
        led_buff[2]=led_table[13];
        led_buff[3]=led_table[13];
        led_buff[4]=led_table[0];
        led_buff[5]=led_table[10];
        delay_ms (2000);
        }


if (menu_tmr2==20) { //если таймер достиг.... включить реле 1
        
        PORTB.2=1;
    }
if (menu_tmr2==50) { //если таймер достиг.... включить реле 2
        
        PORTB.3=1;
    } 
    
if (menu_tmr2==69) { //если таймер достиг.... включить реле 3
     
        PORTB.4=1;
    }
   

   
   if (menu_tmr7<10){
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация пустого меню
        led_buff[2]=led_table[10];
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        } else { 
        led_buff[0]=led_table[13]; //индикация LOAD
        led_buff[1]=led_table[0];
        led_buff[2]=led_table[14];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
         }  
    
   } 
   
    //=======================
    //   включение всех нагрузок в режиме "загрузка"
    //
    //=======================
     
    
   // при достижении таймера заданого значения перейти в следующее (рабочее) меню  
void menu_act_4 () { 
    temp4=epp_temp4;  // Это функция разблокировки усилителя
    temp5=epp_temp5; 
    if (menu_tmr2==70) { // это переход в меню 1 (рабочее меню) после загрузки всех реле
    menu=1;
    }
    
    
    if (temp1==1){ // активация нагрузок в рабочем режиме
    
                    // это для того чтоб при включении усилителя активировались режимы настроек в меню
                          // меню 1 установка тока покоя
    PORTF=PORTF&~(1<<3);  // всего три режима класс А, класс АВ и класс В.
    PORTF=PORTF&~(1<<4);
    }
    if (temp1==2) { 
    
    PORTF=PORTF|(1<<3);  // меню 1 установка тока покоя
    PORTF=PORTF&~(1<<4);
    }
    if (temp1==3) {
    
    PORTF=PORTF|(1<<4);  // меню 1 установка тока покоя
    PORTF=PORTF&~(1<<3);
    }
    
     
    if (temp4==1) {     // Активация громкости в режиме загрузки реле
    PORTF=PORTF|(1<<5); //PORTF.5=1;
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<7);
    }             
    if (temp4==2) {
    PORTF=PORTF|(1<<6);
    PORTF=PORTF&~(1<<5);
    PORTF=PORTF&~(1<<7);
    }             
    if (temp4==3) {
    PORTF=PORTF|(1<<7);
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<5);
    } 
                        
    
    //_____
    
    if (temp2==1){    // Меню 2 установка порога защиты
    PORTB.6  = 0;
    PORTB.7  = 0;
    PORTB.5  = 1;
    }
    if (temp2==2) { 
    PORTB.5  = 0;
    PORTB.7  = 0;
    PORTB.6  = 1;
    }
    if (temp2==3) {
    PORTB.5  = 0;
    PORTB.6  = 0;
    PORTB.7  = 1;
    } 
    if (temp5==1) {
    PORTG = PORTG | (1<<5);}
    
    if (temp5==2) {
    PORTG = PORTG &~ (1<<5);} 
    
    if (temp5==1) { PORTG = PORTG &~ (1<<4);} // переключение акустической системы A/B
    else { PORTG = PORTG | (1<<4);} 
    
     if (temp6==1) { PORTF = PORTF &~ (1<<1);} // переключение входов
    else { PORTF = PORTF | (1<<1);}
    }
//-----------------END---------------------------

    

//----------------- MENU 1 ----------------------

    //=======================
    //   индикация рабочего меню
    //
    //=======================
     
void menu_show_0 () {

if (temp3==2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {  //индикация HOLD как "Error-1"  на передней панели
     
        led_buff[0]=led_table[22]; //Заполняем буфер разрядов
        led_buff[1]=led_table[15]; // индикация ошибки Error-1 нагрузка выхода
        led_buff[2]=led_table[15]; // ошибка при активном режиме "HOLD"
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[10];
     } 

     
if (temp5==1 && menu_tmr9<40 && menu_tmr11>41 && menu_tmr12>41) { 
        led_buff[0]=led_table[0]; // OUT-1 всплывающая индикация
        led_buff[1]=led_table[21];
        led_buff[2]=led_table[12];
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[10];

        } 

if (temp5==2 && menu_tmr10<40  && menu_tmr11>41 && menu_tmr12>41) { 
        led_buff[0]=led_table[0]; // OUT-2 всплывающая индикация
        led_buff[1]=led_table[21];
        led_buff[2]=led_table[12];
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[10];
        
        } 
        
if (temp6==1 && menu_tmr11<40 && menu_tmr9>41 && menu_tmr10>41 ) { 
        led_buff[0]=led_table[10]; // IN-1 всплывающая индикация
        led_buff[1]=led_table[11];
        led_buff[2]=led_table[21];
        led_buff[3]=led_table[1];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[10];

        } 
        
if (temp6==2 && menu_tmr12<39 && menu_tmr9>41 && menu_tmr10>41 ) { 
        led_buff[0]=led_table[10]; // IN-2 всплывающая индикация
        led_buff[1]=led_table[11];
        led_buff[2]=led_table[21];
        led_buff[3]=led_table[2];
        led_buff[4]=led_table[11];
        led_buff[5]=led_table[10];

        }
        
if (temp4==0 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {
    
     //Индикация минимального уровня громкости
        led_buff[0]=led_table[11];
        led_buff[1]=led_table[4];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[17];
        led_buff[5]=led_table[10];        
    } 
           
if (temp4==1 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {
    
     //Индикация -30Дб
        led_buff[0]=led_table[11];
        led_buff[1]=led_table[3];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[17];
        led_buff[5]=led_table[10];        
    }
    // режим тишина индикация
    if (PORTB.4 == 0 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) { //если на 4пине лог.1 вывести на индикатор следующее...
        led_buff[0]=led_table[11]; //Заполняем буфер разрядов
        led_buff[1]=led_table[1]; // отображение режима тишина
        led_buff[2]=led_table[2];
        led_buff[3]=led_table[0];
        led_buff[4]=led_table[16];
        led_buff[5]=led_table[17];
    }
            
    if (temp4==2 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {
    
    // индикация  -20Дб
        led_buff[0]=led_table[11];
        led_buff[1]=led_table[2];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[17];
        led_buff[5]=led_table[10];
    } 
    // режим тишина индикация
    if (PORTB.4 == 0 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) { //если на 4пине лог.1 вывести на индикатор следующее...
        led_buff[0]=led_table[11]; //Заполняем буфер разрядов
        led_buff[1]=led_table[1]; // отображение режима тишина
        led_buff[2]=led_table[2];
        led_buff[3]=led_table[0];
        led_buff[4]=led_table[16];
        led_buff[5]=led_table[17];
    }            
    if (temp4==3 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {
    
    // индикация  -10Дб
        led_buff[0]=led_table[11];
        led_buff[1]=led_table[1];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[17];
        led_buff[5]=led_table[10];
    }
    // режим тишина индикация
    if (PORTB.4 == 0 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) { //если на 4пине лог.1 вывести на индикатор следующее...
        led_buff[0]=led_table[11]; //Заполняем буфер разрядов
        led_buff[1]=led_table[1]; // отображение режима тишина
        led_buff[2]=led_table[2];
        led_buff[3]=led_table[0];
        led_buff[4]=led_table[16];
        led_buff[5]=led_table[17];
    } 
    if (temp4 == 4 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) {
    
    // индикация  0Дб
        led_buff[0]=led_table[10];
        led_buff[1]=led_table[10];
        led_buff[2]=led_table[0];
        led_buff[3]=led_table[16];
        led_buff[4]=led_table[17];
        led_buff[5]=led_table[10];
        }


     // режим тишина индикация
    if (PORTB.4 == 0 && temp3!=2 && menu_tmr9>41 && menu_tmr10>41 && menu_tmr11>41 && menu_tmr12>41) { //если на 4пине лог.0 вывести на индикатор следующее...
        led_buff[0]=led_table[11]; //Заполняем буфер разрядов
        led_buff[1]=led_table[1]; // отображение режима тишина
        led_buff[2]=led_table[2];
        led_buff[3]=led_table[0];
        led_buff[4]=led_table[16];
        led_buff[5]=led_table[17];
    
    }
    
   } 
   
    //=======================
    //   рабочее меню
    //
    //=======================
        


void menu_act_0() {

    // конец данной опции

    if (BTN_MENU==0) { //Если кнопка нажата
        menu=2; //Переходим к меню 1
        delay_ms(250);
        while (BTN_MENU==0); //Ждем пока отпустят кнопку
    }
    
    //=======================
    //   режим MUTE
    //
    //=======================
     
    if (BTN_MUTE==0) {   // режим тишина, 
    
    PORTB.4 = ~PORTB.4;
    PORTC.6 = 1;
    delay_ms(250);
        while (BTN_MUTE==0);
        } 
        // Опрос входов ошибок 
        
    //=======================
    //   Опрос входов ошибок
    //   в режиме "работа"
    //=======================
     
        
    
    
    if (BTN_ERROR1==0) {
     menu=6;
     delay_ms(250);
    }
    if (BTN_ERROR2==0) {
     menu=7;
     delay_ms(250);
    }
    if (BTN_ERROR3==0) {
     menu=8;
     delay_ms(250);
    }
    if (BTN_ERROR4==0) {
     menu=9;
     delay_ms(250);
    } 
    if (menu_tmr2==70) {  // Енерго сберегающий режим реле
        PORTC.6=0;
        delay_ms(250);
    } 
    if (temp1==1){ // активация нагрузок в рабочем режиме
    
    //=======================
    //   управление током покоя с меню
    //   поддержание заданых параметров в режиме "работа"
    //=======================
     
    
   
    PORTF  = PORTF &~(1<<3);  // меню 1 установка тока покоя
    PORTF  = PORTF &~(1<<4);  // всего три режима класс А, класс АВ и класс В.
    
    }
    if (temp1==2) { 
    
    
    PORTF  = PORTF &~(1<<4);
    PORTF  = PORTF | (1<<3);
    }
    if (temp1==3) {
    
    
    PORTF  = PORTF &~(1<<3);
    PORTF  = PORTF | (1<<4);
    } 
    if (temp3==2) { // Это режим блокировки реле загрузки пред выхода при активации режима "блокировка"
    PORTB.4=0;
    }  
    
    
    
    
    if (temp3==1,menu_tmr2==20){  // Сброс "включение" енерго сберегающего режима
    PORTC.6=0;
    }
    
    //=======================
    //   Установка порога защиты
    //   в режиме "работа"
    //=======================
     
    
    if (temp2==1){    // Меню 2 установка порога защиты
    PORTB.6  = 0;
    PORTB.7  = 0;
    PORTB.5  = 1;
    }
    if (temp2==2) { 
    PORTB.5  = 0;
    PORTB.7  = 0;
    PORTB.6  = 1;
    }
    if (temp2==3) {
    PORTB.5  = 0;
    PORTB.6  = 0;
    PORTB.7  = 1;
    } 
    
    
    //=======================
    //   Регулировка громкости
    //
    //=======================
     
    if (BTN_PLUS==0) {
    delay_ms(60);
    if (BTN_PLUS==0) {
        menu_tmr8=0;
        if (temp4<4) temp4++; else temp4=4; // + регулировка громкости
        delay_ms(150);
        
    }
    }
    if (BTN_MINUS==0) {
    delay_ms(60);
    if (BTN_MINUS==0) {
        menu_tmr8=0;
        if (temp4>0) temp4--; else temp4=0; // - регулировка громкости
        delay_ms(150);
        
    }
    }
    if (temp4==0) {
    PORTF=PORTF&~(1<<5); //PORTF.5=0;
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<7);
    PORTF=PORTF |(1<<2);
    } 
    if (temp4==1) {     // регулировка громкости, управление реле в режиме работа
    PORTF=PORTF|(1<<5); //PORTF.5=1;
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<7);
    PORTF=PORTF&~(1<<2);
    }             
    if (temp4==2) {
    PORTF=PORTF|(1<<6);
    PORTF=PORTF&~(1<<5);
    PORTF=PORTF&~(1<<7);
    PORTF=PORTF&~(1<<2);
    }             
    if (temp4==3) {
    PORTF=PORTF|(1<<7);
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<5);
    PORTF=PORTF&~(1<<2);
    }  
    if (temp4==4) {
    PORTF=PORTF&~(1<<7);
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<5);
    PORTF=PORTF&~(1<<2);
    } 
    
    //========
    //  Акустическая система А и В
    //
    //========
    
     
     // включение акустической системы А и системы В
    if (BTN_RELAY == 0) {
    delay_ms(60);
    if (BTN_RELAY == 0) {
    menu_tmr8=0;
    menu_tmr9=0;
    menu_tmr10=0;
    menu_tmr11=60;
    menu_tmr12=60;
    temp5++;
    if (temp5>2) { temp5=1; }
    delay_ms(250);
    while (BTN_RELAY == 0);
    }
    } 
    if (temp5==1) { PORTG = PORTG &~ (1<<4);} // переключение акустической системы A/B
    else { PORTG = PORTG | (1<<4);}
    
    //=========
    //  Селектор входов
    //   1 группа и 2 группа
    //=========
    
    
    // переключение вход 1 и вход 2
    if (BTN_RELAY_IN == 0) {
    delay_ms(60);
    if (BTN_RELAY_IN == 0) {
    menu_tmr8=0;
    menu_tmr9=60;
    menu_tmr10=60;
    menu_tmr11=0;
    menu_tmr12=0;
    temp6++;
    if (temp6>2) { temp6=1; }
    delay_ms(250);
    while (BTN_RELAY_IN == 0);
    }
    } 
    if (temp6==1) { PORTF = PORTF &~ (1<<1);} // переключение входов
    else { PORTF = PORTF | (1<<1);}
    
    //======================
     //сохранение в еепром громкости, входов, и выходов
     // с задержкой в 5 сек.
    //======================
    
        menu_tmr8++;
        if (menu_tmr8>250) menu_tmr8=200;
        
    
    if (menu_tmr8>170 && menu_tmr8<199){
    epp_temp4 = temp4;
    epp_temp5 = temp5;
    epp_temp6 = temp6; }
    else {
    temp4 = temp4;
    temp5 = temp5;
    temp6 = temp6; }
    //-------------------------------         
    
   
     }
     
//--------------- END MENU 1 --------------------

//----------------- MENU 2 ----------------------
void menu_show_1() {
    led_buff[0]=led_table[20];
    led_buff[1]=led_table[0];
    led_buff[2]=led_table[21];
    led_buff[3]=led_table[12];
    led_buff[4]=led_table[11];
    led_buff[5]=led_table[temp1];    
}

void menu_act_1() {
    if (BTN_MENU==0) {
        menu=3;
        delay_ms(250);
        while (BTN_MENU==0);
    }
    if (BTN_PLUS==0) {
        if (temp1<3) temp1++; else temp1=1;
        delay_ms(250);
        while (BTN_PLUS==0);
    }
    if (BTN_MINUS==0) {
        if (temp1>1) temp1--; else temp1=3;
        delay_ms(250);
        while (BTN_MINUS==0);}
        
        
    if (temp1==1) {    // оба реле отключены 
    PORTF  = PORTF &~(1<<3);  // меню 1 установка тока покоя
    PORTF  = PORTF &~(1<<4);  // всего три режима класс А, класс АВ и класс В.
    
    }
    if (temp1==2) { 
    
    
    PORTF  = PORTF &~(1<<4);
    PORTF  = PORTF | (1<<3);
    }
    if (temp1==3) {
    
    
    PORTF  = PORTF &~(1<<3);
    PORTF  = PORTF | (1<<4);
    }  
 
     if (temp4==1) {     // Активация громкости в режиме загрузки реле
    PORTF=PORTF|(1<<5); //PORTF.5=1;
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<7);
    }             
    if (temp4==2) {
    PORTF=PORTF|(1<<6);
    PORTF=PORTF&~(1<<5);
    PORTF=PORTF&~(1<<7);
    }             
    if (temp4==3) {
    PORTF=PORTF|(1<<7);
    PORTF=PORTF&~(1<<6);
    PORTF=PORTF&~(1<<5);
    }  
}
//--------------- END MENU 2 --------------------

//----------------- MENU 3 ----------------------
void menu_show_2() {
    led_buff[0]=led_table[19];
    led_buff[1]=led_table[15];
    led_buff[2]=led_table[0];
    led_buff[3]=led_table[12];
    led_buff[4]=led_table[11];
    led_buff[5]=led_table[temp2];
}

void menu_act_2() {
    if (BTN_MENU==0) {
        menu=4;
        delay_ms(250);
        while (BTN_MENU==0);
    }
    if (BTN_PLUS==0) {
        if (temp2<3) temp2++; else temp2=1;
        delay_ms(250);
        while (BTN_PLUS==0);
    }
    if (BTN_MINUS==0) {
        if (temp2>1) temp2--; else temp2=3;
        delay_ms(250);
        while (BTN_MINUS==0);
    }
    if (temp2==1){
    PORTB.6  = 0;
    PORTB.7  = 0;
    PORTB.5  = 1;
    }
    if (temp2==2) { 
    PORTB.5  = 0;
    PORTB.7  = 0;
    PORTB.6  = 1;
    }
    if (temp2==3) {
    PORTB.5  = 0;
    PORTB.6  = 0;
    PORTB.7  = 1;
    }
    
  temp4=epp_temp4;  
    
}
//--------------- END MENU 3 --------------------

//----------------- MENU 4 ----------------------
void menu_show_3() {
if (temp3==1) {
    led_buff[0]=led_table[23]; // hold off
    led_buff[1]=led_table[13];
    led_buff[2]=led_table[11];
    led_buff[3]=led_table[0];
    led_buff[4]=led_table[24];
    led_buff[5]=led_table[24];
    
} 
if (temp3==2) {
    led_buff[0]=led_table[11]; // hold on
    led_buff[1]=led_table[23];
    led_buff[2]=led_table[0];
    led_buff[3]=led_table[13];
    led_buff[4]=led_table[16];
    led_buff[5]=led_table[11];
    
} 
}

//==================
// Последнее меню -HOLD-
//
//==================

void menu_act_3() {
    if (BTN_MENU==0) {
        menu=1;
        delay_ms(250);
        epp_save(); //Сохраняем в еепром
        while (BTN_MENU==0);
    }
    if (BTN_PLUS==0) {
        PORTC.6 = 1;
        if (temp3<2) temp3++; else temp3=1;
        delay_ms(250);
        while (BTN_PLUS==0);
    }
    if (BTN_MINUS==0) {
        PORTC.6 = 1;
        if (temp3>1) temp3--; else temp3=2;
        delay_ms(250);
        while (BTN_MINUS==0);
    }
    if (temp3==1) {  // включение реле выход с режима HOLD
    PORTB.4=1;
    } 
    
    temp4=epp_temp4; 
    
}
//--------------- END MENU 4 --------------------

void menu_show() { //Список вывода на LED, в зависимости от меню 
    switch (menu) {
        case 0:menu_show_4();break;
        case 1:menu_show_0();break;
        case 2:menu_show_1();break;
        case 3:menu_show_2();break;
        case 4:menu_show_3();break;
        case 5:led_error();break;
    }
}


void menu_act() { //Список обработки кнопок, в зависимости от меню 
    switch (menu) { 
        case 0:menu_act_4();break;
        case 1:menu_act_0();break;
        case 2:menu_act_1();break;
        case 3:menu_act_2();break;
        case 4:menu_act_3();break;
       
    }
    }



interrupt [TIM0_OVF] void timer0_ovf_isr() {

    PORTC&=0xc0; //Отключаем все разряды LED
    PORTD=led_buff[led_dig]; //Загружаем в порт данные текущего разряда
    PORTC|=1<<led_dig; //Отображаем нужный разряд
    led_dig++; //Счетчик разрядов
    if (led_dig>(LED_DIG_COUNT-1)) led_dig=0;

}




void main(void)
{

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;






    epp_load(); //Загружаем данные с еепром
    clear_leds();
    #asm("sei") //Разрешаем все прерывания
     TCCR0=2; // вкл. таймер 0


while (1)
      {
        to_hell:
        if (temp==0){
        menu_act(); //Опрашиваем кнопки меню
        
        menu_show(); //Отображаем меню
        error_5();
        error_6();
        error_7();
        error_8();
        error_9();        
        }
        
        delay_ms(50);
        menu_shou_5 (); //Пауза для опроса кнопок и отображения меню, 
        menu_tmr++; //Считает до 20 примерно за 1 секунду
        if (menu_tmr>100) menu_tmr=0;
        menu_tmr2++; // считает до 60 за 3 секунды
        if (menu_tmr2>72) menu_tmr2=0;
        menu_tmr3++;
        if (menu_tmr3>10) menu_tmr3=0;
        menu_tmr4++;
        if (menu_tmr4>80) menu_tmr4=0;
        menu_tmr5++;
        if (menu_tmr5>80) menu_tmr5=0;
        menu_tmr6++;
        if (menu_tmr6>40) menu_tmr6=0;
        menu_tmr7++;
        if (menu_tmr7>20) menu_tmr7=0;
        menu_tmr9++;
        if (menu_tmr9>200) menu_tmr9=41; // для всплывающей индикации OUT-1
        menu_tmr10++;
        if (menu_tmr10>200) menu_tmr10=41; // для всплывающей индикации OUT-2
        menu_tmr11++;
        if (menu_tmr11>200) menu_tmr11=41; // для всплывающей индикации IN-1
        menu_tmr12++;
        if (menu_tmr12>200) menu_tmr12=41; // для всплывающей индикации IN-2
        if (temp==6) {temp=0;} //программная защита переменной от переполнения
        if (flags_1==2){flags_1=0;}// флаг отключения термостата 
        
        
        //========
        // Avto Power off
        // 
        //========
        
        
        
        //========
        // Power off
        // Алгоритм Угримова Артема
        //========
        
        
        to_heel_4:
        flags_4=0;
        flags_5=0;
          
        if(PINE.1==0){
        
        
        temp_0++;
        if (temp_0>4){temp_0=1;} // перебираем меню Power OFF 
        flags1=0; 
        if(temp_0==1){   // тут влетаем в меню индикации POWER OFF, при этом сбрасывается таймер отключения усилителя
        for ( x=0; x<30; x++ ){
        led_buff[0]=led_table[19]; //Заполняем буфер разрядов
        led_buff[1]=led_table[0]; // индикация power off
        led_buff[2]=led_table[11]; // PO-OFF
        led_buff[3]=led_table[0];
        led_buff[4]=led_table[24];
        led_buff[5]=led_table[24];
        delay_ms(50);
        
        if(PINE.1==1){ 
        flags_0=1;
        }
        if(flags_0==1){  
        if(PINE.1==0){
        delay_ms(50);
        if(PINE.1==0){ 
        temp_0=2;
        delay_ms(25);
        goto to_heel_1;               
        }          
        }
        } 
        }
        
        for ( y=0; y<30; y++ ){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-00
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[0];
        led_buff[5]=led_table[0];
        delay_ms(50);
        min_=0;
        temp_1=0;
        
        if(PINE.1==1){ 
        flags1=1;
        }
        if(flags1==1){  
        if(PINE.1==0){
        delay_ms(50);
        if(PINE.1==0){ 
        temp_0=2;
        delay_ms(25);
        goto to_heel_1;               
        }          
        }
        } 
        
        
         
        }  
        }
        to_heel_1:
        flags_0=0;
        flags1=0;
        if (temp_0==2){  // тут влетаем в меню индикации POWER OFF 30, при этом стартует счетчик отключения УМЗЧ 
        for ( z=0; z<40; z++ ){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-30
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[3];
        led_buff[5]=led_table[0];
        delay_ms(50);
        
        if(PINE.1==1){ 
        flags_2=1;
        }
        if(flags_2==1){  
        if(PINE.1==0){
        delay_ms(50);
        if(PINE.1==0){ 
        temp_0=3;
        delay_ms(25);
        goto to_heel_2;               
        }          
        }
        } 
         
        }
          
        }
        to_heel_2:
        flags_2=0;
         if (temp_0==3){
        for ( k=0; k<40; k++ ){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-60
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[6];
        led_buff[5]=led_table[0];
        delay_ms(50);
        
        
        if(PINE.1==1){ 
        flags_3=1;
        }
        if(flags_3==1){  
        if(PINE.1==0){
        delay_ms(50);
        if(PINE.1==0){ 
        temp_0=4;
        delay_ms(25);
        goto to_heel_3;               
        }          
        }
        } 
         
        }
       
        }
        to_heel_3:
        flags_3=0;
        if (temp_0==4){
        for ( l=0; l<40; l++ ){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-90
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[9];
        led_buff[5]=led_table[0];
        delay_ms(50);
        
        if(PINE.1==1){ 
        flags_4=1;
        }
        if(flags_4==1){  
        if(PINE.1==0){
        delay_ms(50);
        if(PINE.1==0){ 
        temp_0=0;
        delay_ms(25);
        goto to_heel_4;               
        }          
        }
        } 
        
         
        }
       
        }
        
        
        while (PINE.1==0);
        }
         
        
        
        
        if(temp_0==2){   // пуск второго таймера отключения
        temp_1++;
         
         
        if(temp_1==10) {
        sek_++; 
        temp_1=0;
        }
        
        if (sek_==60){
        min_++;
        sek_=0;
        }
        
        if(min_==30) {
        PORTA.7=1;
        delay_ms(500);
        min_=0;
        sek_=0;
        temp_1=0;
        PORTA.7=0;}
        
        if (min_==5){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-25
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        } 
        min_=6;
        }
       
        if (min_==10){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-20
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=11;
        }
        if (min_==15){
        for (x=0; x<10; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-15
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=16;
        }
        if (min_==20){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-10
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=21;
        }
        if (min_==25){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-5
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[5];
        led_buff[5]=led_table[10];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=26;
        }
        if (min_==27){
        for (x=0; x<30; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-2
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[10];
        delay_ms(250);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(250);
        }
        min_=28;
        }
        } 
        
        
        if(temp_0==3){   // пуск третьего таймера отключения
        temp_1++;
         
         
        if(temp_1==10) {
        sek_++; 
        temp_1=0;
        }
        
        if (sek_==60){
        min_++;
        sek_=0;
        }
        
        if(min_==60) {
        PORTA.7=1;
        delay_ms(500);
        min_=0;
        sek_=0;
        temp_1=0;
        PORTA.7=0;}
        
        if (min_==5){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-55
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[5];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=6;
        }
       
        if (min_==10){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-50
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[5];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        } 
        min_=11;
        }
        if (min_==15){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-45
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[4];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=16;
        }
        if (min_==20){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-40
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[4];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=21;
        }
        if (min_==25){
        for (x=0; x<10; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-35
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[3];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=26;
        }
        if (min_==30){
        for (x=0; x<10; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-30
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[3];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=31;
        }
        if (min_==35){
        for (x=0; x<10; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-25
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=36;
        }
        if (min_==40){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-20
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=41;
        }
        if (min_==45){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-15
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        } 
        min_=46;
        }
        if (min_==50){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-10
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[1];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=51;
        }
        if (min_==55){
        for (x=0; x<15; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-5
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[5];
        led_buff[5]=led_table[10];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        } 
        min_=56;
        }
        if (min_==57){
        for (x=0; x<30; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-2
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[2];
        led_buff[5]=led_table[10];
        delay_ms(250);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(250);
        }
        min_=58;
        }
        } 
        
        if(temp_0==4){  // пуск четвертого таймера отключения
        temp_1++;
         
         
        if(temp_1==10) {
        sek_++; 
        temp_1=0;
        }
        
        if (sek_==60){
        min_++;
        sek_=0;
        }
        
        if(min_==90) {
        PORTA.7=1;
        delay_ms(500);
        min_=0;
        sek_=0;
        temp_1=0;
        PORTA.7=0;
        } 
        
        if (min_==5){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-85
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[8];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=6;
        }
       
        if (min_==10){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-80
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[8];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=11;
        }
        if (min_==15){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-75
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[7];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        } 
        min_=16;
        }
        if (min_==20){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-70
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[7];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=21;
        }
        if (min_==25){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-65
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[6];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=26;
        }
        if (min_==30){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-60
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[6];
        led_buff[5]=led_table[0];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=31;
        }
        if (min_==35){
        for (x=0; x<3; x++){
        led_buff[0]=led_table[0]; //Заполняем буфер разрядов
        led_buff[1]=led_table[24]; // индикация power off
        led_buff[2]=led_table[24]; // OFF-55
        led_buff[3]=led_table[11];
        led_buff[4]=led_table[5];
        led_buff[5]=led_table[5];
        delay_ms(400);
        led_buff[0]=led_table[10]; //Заполняем буфер разрядов
        led_buff[1]=led_table[10]; // индикация power off
        led_buff[2]=led_table[10]; // пробел
        led_buff[3]=led_table[10];
        led_buff[4]=led_table[10];
        led_buff[5]=led_table[10];
        delay_ms(400);
        }
        min_=36;
        }
        
  
и то эта программа не доведена до конца, надо еще одну опцию дописать, и немного привести в божеский вид читаемостью :)

Часть кода не влазит :))) во вложении полностью все файлы включая исходник.
Вложения
Atmega128 AMPL.rar
(213.45 КБ) 117 скачиваний
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Artos писал(а):6 строка если не ошибаюсь говорит об определенном пине "х" верно?
Шестая строка говорит об установке бита "х" в единицу. _BV(x) - макрос сие такой есть.
Уж простите, ради Бога, за то, что в разговор вмешался.
Artos, этот код, что в последнем топике, это Вы похвастаться прикрепили? Его и пролистать сверху донизу сложно, не то, что разобраться в нем. :)

А по поводу прерываний, самое лучшее - читать даташит, там точно правда написана. :)
Да и что там разбираться..инициализация - обработчик...
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow

Сообщение adrenocrome »

ARV писал(а):ах, да, вот еще: CVAVR не поймет определение локальной переменной внутри цикла, поэтому придется цикл for чуток переделать - вынести описание переменной изнутри наружу.
Я правильно понимаю, что вобще канонiчный Си не позволяет таких вольностей как определение переменной в любом месте цикла? Это какие-то Си++-ные феньки?
И спасибо за идею о дефайне макроса _BV, который дико меня бесил в исходниках сделанных на WinAVR =)
День прошёл, а ты всё жив
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Artos писал(а):и то эта программа не доведена до конца, надо еще одну опцию дописать, и немного привести в божеский вид читаемостью :)
я бы сказал так: надо ВСЕ ПЕРЕДЕЛАТЬ ДО ЧИТАЕМОГО варианта, а потом добавить пару опций. ужас! заполнение массива последовательным присваиванием... тихий ужос... извинте, но может вам еще почитать книги про программирование на Си? про циклы там и прочее... а?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»