С чего начать программировать микроконтроллеры?
-
therian
- Говорящий с текстолитом
- Сообщения: 1682
- Зарегистрирован: Чт окт 20, 2005 12:46:34
- Контактная информация:
во первых switch работает толко с (char, (un)signed char, (un)signed short, (un)signed int,
(un)signed long (un)signed long long) типами а PINA.0 один бит а не байт
теперь о синтаксисе
вместо switch (PINA.0==0) нужно switch (PINA.0)
вместо case PINA.0==1: PORTD.2=1; нужно case 1: PORTD.2=1; break;
и какой default: ???? PINA.0 либо 0 либо 1 где 3тий вариант ?! (1/2) !?
ну и на последок для чего switch тут ?
(un)signed long (un)signed long long) типами а PINA.0 один бит а не байт
теперь о синтаксисе
вместо switch (PINA.0==0) нужно switch (PINA.0)
вместо case PINA.0==1: PORTD.2=1; нужно case 1: PORTD.2=1; break;
и какой default: ???? PINA.0 либо 0 либо 1 где 3тий вариант ?! (1/2) !?
ну и на последок для чего switch тут ?
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Подскажите, как разрешить прерывания? При компиляции выдаёт ошибку: Error: C:\cvavr\examples\interrupt\interrupt.c(126): undefined symbol 'interrupt'. В какой вкладке разрешаются прерывания? Мне надо на INT0 и INT1.
P.S. Вроде нашёл...
Подскажите вот еще что...
Вот код с прерываниями, тоесть основная программа прерывается, на дисплей выводится INT0 или INT1 и затем программа продолжается.
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
lcd_clear();
lcd_putsf ("INT0");
delay_ms (5);
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
lcd_clear();
lcd_putsf ("INT1");
delay_ms (5);
}
Но почему-то надписи INT0 и INT1 высвечиваются слишком долго (2 - 3 секунды), хотя должны (или всётаки не должны?) гаснуть практически сразу.
P.S. Вроде нашёл...
Подскажите вот еще что...
Вот код с прерываниями, тоесть основная программа прерывается, на дисплей выводится INT0 или INT1 и затем программа продолжается.
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
lcd_clear();
lcd_putsf ("INT0");
delay_ms (5);
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
lcd_clear();
lcd_putsf ("INT1");
delay_ms (5);
}
Но почему-то надписи INT0 и INT1 высвечиваются слишком долго (2 - 3 секунды), хотя должны (или всётаки не должны?) гаснуть практически сразу.
Пример с датчиками:
допустим стоят три датчика - один подсоединен к PINA.0, другой к PINA.1, а третий к PINA.2.
если есть сигнал с какогото го датчика, индикатор это фиксирует (индикатор светодиодный, подключены к выходам порта D).
если индикатор фиксирует датчик задымления (PINA.2), то включаются двигатели продувки помещения.
Так можно?
// сигналы с датчиков
while (1)
{
if (PINA.0)
{
PORTD.0=1; //
delay_ms(100); //
PORTD.0=0; //
delay_ms(100); //
}
if (PINA.1)
{
PORTD.1=1; //
delay_ms(100); //
PORTD.1=0; //
delay_ms(100); //
}
if (PINA.2)
{
PORTD.2=1; //
delay_ms(100); //
PORTD.2=0; //
delay_ms(100); //
}
while (PINA.2)
{
// код управления двигателями
}
}
допустим стоят три датчика - один подсоединен к PINA.0, другой к PINA.1, а третий к PINA.2.
если есть сигнал с какогото го датчика, индикатор это фиксирует (индикатор светодиодный, подключены к выходам порта D).
если индикатор фиксирует датчик задымления (PINA.2), то включаются двигатели продувки помещения.
Так можно?
// сигналы с датчиков
while (1)
{
if (PINA.0)
{
PORTD.0=1; //
delay_ms(100); //
PORTD.0=0; //
delay_ms(100); //
}
if (PINA.1)
{
PORTD.1=1; //
delay_ms(100); //
PORTD.1=0; //
delay_ms(100); //
}
if (PINA.2)
{
PORTD.2=1; //
delay_ms(100); //
PORTD.2=0; //
delay_ms(100); //
}
while (PINA.2)
{
// код управления двигателями
}
}
Не умеешь - не берись, но не взявшись не научишься...
int x
for (x=2; x<5>5, затем, если это выражение истинно, то выполняется "какой то код программы", и это код программы выполняется столько раз, пока x<5, т.е. пока это выражение истинно!
когда выражение х<5 становится ложно, из за выражениея х++, все прекращается и программа перепрыгивает на следующий оператор, стоящий после for.
правильно?
сколько раз тело цикла повторится в данном случае? 3 раза?
for (x=2; x<5>5, затем, если это выражение истинно, то выполняется "какой то код программы", и это код программы выполняется столько раз, пока x<5, т.е. пока это выражение истинно!
когда выражение х<5 становится ложно, из за выражениея х++, все прекращается и программа перепрыгивает на следующий оператор, стоящий после for.
правильно?
сколько раз тело цикла повторится в данном случае? 3 раза?
Не умеешь - не берись, но не взявшись не научишься...
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Stalker46 писал(а):просто у меня щас протеуса нет, он намхнулся...
А, понятно. Ну прога вроде правильно написана.
А что, в железе собирать желание пока не возникало?
P.S. А вот интересно, сколько перезаписей выдержит МК? Пишут вроде 10000, но это наверное типа как гарантированное количество перезаписей, а реально наверное и больше выдержит?
И как считается, 10000 полных перезаписей, или без разницы, на сколько я память заполняю? (просто слышал, что некоторая флеш память не записывает маленькие объёмы информации в одно и то-же место, типа чтобы на дольше хватило). Просто я иногда перезаписываю раз по 20 - 30 в день (а может и больше), вот и стало интересно, на сколько мне хватит одной микросхемы (у меня их конечно не одна, но шью в основном одну)..
SeregaT писал(а):А, понятно. Ну прога вроде правильно написана.
А что, в железе собирать желание пока не возникало?
возникло, вот только пока что СТК200/300 собираю, не могу пока что найти разъем Папа на LPT, и шдейф на 10 проводов.
так бы все уже готово, вроди бы...
Народ, я вот не в тему,
Какие МК поддерживает STK200/300 ?
Не умеешь - не берись, но не взявшись не научишься...
Stalker46 писал(а):...сколько раз тело цикла повторится в данном случае? 3 раза?
Stalker46 писал(а):...просто у меня щас протеуса нет...
И почему вы все так боитесь использовать отладчик AVR Studio ? Который, кстати, бесплатный, в отличие от "Протеуса".
Как прикрутить отладчик AVR Studio к CodeVisionAVR, я писал выше:
http://radiokot.ru/forum/viewtopic.php?p=180475#180475
Можно будет как угодно "гулять" по тексту программы, в том числе, выполнять программу пошагово, задавать точки останова, смотреть регистры и значения переменных, и т.д. и т.п.
И свои вопросы можно задавать не в форум, а спросить у отладчика... Быстрее получится...