Sounds писал(а):
int main(void) { //Ошибка The “main” function must return
в CVAVR функция main должна иметь тип void тоесть void main(void)
Вовсе нет. Если void - ничего не возращает, если bit/char/int, тогда должна возращать этот тип, о чем в сущности и говорит компилятор "function must return" - дословно "функция должна возращать".
2 варианта:
1. в концовке добавить строку "return 0"
2. либо "int main(void)" заменить на "void main(void)".
1. Что за "мода" такая определить направление порта и ни строчки не написать для описания начального состояния подтягивающих резисторов?
Добавьте после DDRD -> PORTD=...
2. DDRD = 0xBF = 0b10111111
Логику видите?
На вход настроили порт PIND.6, а опрашиваете PIND.1...
Почему?
Наверное потому что в цифровой технике биты считаются справа налево.
Ваша запись 0b10111111 по правильному будет выглядеть так - 0b11111101, и следовательно DDRD=0xFD.
я не сторонник CodeVision. причин много, часть из них чисто субъективные. но, сторонники CVAVR, прочтите эту темку(одну из многих) и скажите - чем так хорош столь кривой компилятор?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Не как не получается сделать так что бы программа реагировала на кнопку. В чём ещё может быть дело? Причём пробовал исподники и схемы с других сайтов но нечего не помогает. Может я что то не выставил при создание проекта?
Sounds писал(а):Не как не получается сделать так что бы программа реагировала на кнопку. В чём ещё может быть дело? Причём пробовал исподники и схемы с других сайтов но нечего не помогает. Может я что то не выставил при создание проекта?
хорошо хоть не прокладки с крылышками пробовали
я задавал ранее вопрос - что вам надо и что не так у вас получается? вы молчите, как рыба об лед. молчите дальше - что сказать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
#include <mega8>
#include <delay>
void main(void)
{
PORTD=0x00;
DDRD=0x01;
while (1) // бесконечній цикл
{
int i;
while (PIND.1 == 1) //условие обработки кнопки
{
for (i=0; i<4; i++)
{ //цикл
PORTD.0=1; //включаем пин порта
delay_ms(200); //задержка
PORTD.0=0; //віключаем пин порта
delay_ms(200); //задержка
};
};
};
}
незнаю какая была задумка работы программы но то что я подправил работает так при нажатии и отпускании кнопки светодио моргает 4 раза и ждет потом следующего нажатия программа работает проверил ее в протеусе.
To ARV
Извини не заметил твоего поста!
Мне надо что бы программа хоть как то реагировала на замыкание кнопки.
Не получается у меня вообще нечего, программа не как не реагирует на замыкание и размыкание кнопки. To sheva_s
Твой вариант к сожалению тоже неработает.=(
#include <mega8>
#include <delay>
void main(void) {
int i;
DDRD = 0xFD;
PORTD=0xff;
if (PIND.1==1){
for (i=0; i<4; i++) {
PORTD.0=1;
delay_ms(50);
PORTD.0=0;
delay_ms(50);
}
}
}
Но работает он неправильно, во первых он не реагирует на действия с кнопкой. А во-вторых светодиод который подключён к PD0 всё время горит. Горение светодиода скорее всего связанно с тем что строка PORTD=0xff; на всех портах D устанавливает единицу, а не включает подтяжку. Если проблема в этом, то это можно как то обойти?
[/code]
Но работает он неправильно, во первых он не реагирует на действия с кнопкой.
Так этот код и не будет работать так как Вы хотите. Что у Вас сделано по тексту:
1. Настроили пины на вход и выход
2. Выставили на всех пинах лог.1
3. Далее если на входе 1, то цикл из 4х морганий
По логике вещей у Вас на входе всегда будет лог.1, так как включили резистор подтяжки. Чтобы реагировало на кнопку - нужно ждать на входе не лог.1, а лог.0!
А во-вторых светодиод который подключён к PD0 всё время горит. Горение светодиода скорее всего связанно с тем что строка PORTD=0xff; на всех портах D устанавливает единицу, а не включает подтяжку. Если проблема в этом, то это можно как то обойти?
По Вашему мнению что тогда такое "включение подтяжки", если не включение внутренних резисторов между пином контроллера и напряжением питания? Что равносильно появлению ("выставлению") лог.1 на выводе.
Отключите подтяжку от PD0, чтобы исключить свечение.
Для явной наглядности моргания светодиода сделайте задержку не 50мс, а хотя бы >200мс.