Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт дек 27, 2011 11:15:21
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
BerZerK-ku писал(а):
Зачем пересказывать своими словами, если есть возможность дать ссылку на стандарт-первоисточник?
зачем спрашивать то, что легко найти в интернете? нет стандарта на правила поведения, нигде не написано "человек обязан называть незнакомца на ВЫ", однако есть неписанные правила хорошего тона, которых цивилизованные люди придерживаются... хотите, чтобы ваша программа была написана в стиле "эй, ты, придурок, куда прешь, коровья морда?" - пожалуйста. я стараюсь писать в стиле "будьте любезны, отойдите в сторону: вы мне мешаете". где я этому научился? а сам такой умный
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
однако есть неписанные правила хорошего тона, которых цивилизованные люди придерживаются
ключевое слово НЕПИСАНЫЕ
---
Варианты PORTB.2=1 удобно использовать если нужно дернуть ногу. Одну. Если надо записать по битам регистр, гораздо лучше и удобнее это делать так, как предлагает Мастер Ломастер
Добрый вечер, форумчане, помогите пожалуйста найти ошибку, контроллер мега8, 4х 7сегментных индикатора, должны выводить число 4 разрядное, на индикаторе при тестировании в протеусе творится нечто не понятное, 2 разряда только выводит
Протестил ваш кекс действительно только два младших разряда моргают. Подправил. Там с if путанница Перенёс counter в прерывание
Код:
interrupt [TIM0_OVF] Timer0_ovf(void) // прерывание по переполнению Т0 для индикации 7-seg { static unsigned int counter=0; if (counter==0) { PORTD.0=1; PORTD.1=0; PORTD.2=0; PORTD.3=0;} else if (counter==1) { PORTD.0=0; PORTD.1=1; PORTD.2=0; PORTD.3=0;} else if (counter==2) { PORTD.0=0; PORTD.1=0; PORTD.2=1; PORTD.3=0;} else { PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=1; } PORTB=data[counter]; counter++; if (counter>=4) { counter=0; }
}
Так залил все четыре заморгали.
Лучше было как в исходнике оставить SWITCH
interrupt [TIM0_OVF] Timer0_ovf(void) // прерывание по переполнению Т0 для индикации 7-seg {PORTD&=0xF0; switch(counter) { case 0: PORTB=data[counter]; PORTD.3=1; break; case 1: PORTB=data[counter]; PORTD.2=1; break; case 2: PORTB=data[counter]; PORTD.1=1; break; case 3: PORTB=data[counter]; PORTD.0=1; break; } counter++; if (counter>=4) { counter=0; } } конверт дата тоже наоборот работает поменяйте числа в коде: temp=x; res=temp/1000; //Calculate 1000-s data[3]=codes[res]; temp=temp-res*1000;
_________________ В поисках истины человек развивается.
vitalik_1984, спасибо большое а вот еще нюанс, протеус при тестировании схемы с этим кодом на 90% загружает ЦП у мк тоже будет высокая степень загрузки? или это не показатель для подобных доводов?
vitalik_1984, спасибо большое а вот еще нюанс, протеус при тестировании схемы с этим кодом на 90% загружает ЦП у мк тоже будет высокая степень загрузки? или это не показатель для подобных доводов?
Ваш процессор не рассчитан на выполнение таких опкодов, тем более со всякими там наворотами в виде темы и прочей дребедени оболочки.Процессор АВР выполняет большинство команд за один цикл такта.Так что не беспокойтесь.Ваш процессор большую часть времени проведет возле While(1) {}
_________________ В поисках истины человек развивается.
Еще вопрос, допустим в коде есть работа АЦП и прерывания таймера для индикации на 7-сегментные индикаторы, при каждом прерывании происходит пауза работы ацп или он как и работал так и работает? т е параллельно с выполняющимся кодом написанном в прерывании?
Еще вопрос, допустим в коде есть работа АЦП и прерывания таймера для индикации на 7-сегментные индикаторы, при каждом прерывании происходит пауза работы ацп или он как и работал так и работает? т е параллельно с выполняющимся кодом написанном в прерывании?
Нет не паралельно! По этому не рекомендуется "засиживатся" в обработчике прерывания.
FreshMan вместо того чтобы "озадачивать" всех подобными вопросами достаточно прочесть всего пару книжек (благо найти их можно не только в магазине). В качестве справочника по AVR лучшее ИМХО книги Евстифеева, а по CV AVR есть книга Лебедева.
равнозначны ли по смыслу и по силе действия вышеуказанные команды ?
Это не одно и то же.Дело в том,что порты мк управляются тремя регистрами : 1-DDRx-определяет направление порта высокий уровень(логическая единица) тут означает,что порт используется для вывода данных. 2-PORTx-включает подтяжку ноги порта при DDRx=0 или переключает ногу порта с низкого уровня на высокий при DDRx=1 3-PINx-меняет свое значение в соответствии с состоянием реальной ноги при DDRx =0 запись значения в регистр PINx практического смысла не имеет
_________________ В поисках истины человек развивается.
Сейчас этот форум просматривают: codenamehawk и гости: 354
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения