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, прочтите эту темку(одну из многих) и скажите - чем так хорош столь кривой компилятор?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Зарегистрирован: Вт май 27, 2008 23:23:24 Сообщений: 238
Рейтинг сообщения:0
Не как не получается сделать так что бы программа реагировала на кнопку. В чём ещё может быть дело? Причём пробовал исподники и схемы с других сайтов но нечего не помогает. Может я что то не выставил при создание проекта?
Не как не получается сделать так что бы программа реагировала на кнопку. В чём ещё может быть дело? Причём пробовал исподники и схемы с других сайтов но нечего не помогает. Может я что то не выставил при создание проекта?
хорошо хоть не прокладки с крылышками пробовали я задавал ранее вопрос - что вам надо и что не так у вас получается? вы молчите, как рыба об лед. молчите дальше - что сказать...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Посмотрите пожалуйста, не как не могу с кнопкой разобраться, в чём может быть дело?
Код:
#include <mega8> #include <delay> void main(void) { int i; DDRD = 0xbf; if (PIND.1 == 1) { for (i=0; i<4; i++) { PORTD.0=1; delay_ms(50); PORTD.0=0; delay_ms(50); }; }; }
Я не специалист но можно попробывать так.
Код:
#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 раза и ждет потом следующего нажатия программа работает проверил ее в протеусе.
Зарегистрирован: Вт май 27, 2008 23:23:24 Сообщений: 238
Рейтинг сообщения:0
To ARV Извини не заметил твоего поста!
Мне надо что бы программа хоть как то реагировала на замыкание кнопки.
Не получается у меня вообще нечего, программа не как не реагирует на замыкание и размыкание кнопки.
To sheva_s Твой вариант к сожалению тоже неработает.=(
Зарегистрирован: Вт май 27, 2008 23:23:24 Сообщений: 238
Рейтинг сообщения:0
Да, совершенно верно, одна нога кнопки подключена к PD1, а другая нога кнопки к GND.
В итоги у меня получился вот такой код:
Код:
#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мс.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения