одно прерывание по таймеру заставляет мигать диод
другое сбрасывает счетчик таймера (кнопкой) и исли кликать чаще периода таймера то по идее диод должен не мигать - но по факту идет обработка прерывания кнопки лишь раз то следующего прерыва по таймеру - почему?
Здравствуйте! Помогите пожалуйста разобраться с WinAVR не могу ни одну программу откомпилировать! Я МК занялся совсем недавно поэтому ни языка с/с++ не знаю. Как написать простенькую программку для atmega8 чтоб скажем два светодиода перемигивались?
oleg-him писал(а):Здравствуйте! Помогите пожалуйста разобраться с WinAVR не могу ни одну программу откомпилировать! Я МК занялся совсем недавно поэтому ни языка с/с++ не знаю. Как написать простенькую программку для atmega8 чтоб скажем два светодиода перемигивались?
а при чем тут WinAVR? изучайте язык Си, изучайте строение МК - тогда будет можно о чем-то говорить.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
YS писал(а):Мир всем! Люди добрые, подскажите пожалуйста, как заставить компилятор WinAVR генерировать ассемблерный файл вместе с хексом?
вместе по-моему нельзя заставить... а отдельно - можно: используйте опцию -S в командной строке, тогда компиляция будет закончена на этапе создания ассемблерных файлов.
а зачем вам это? для отладкии т.п. вещей достаточно листинга...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
используйте опцию -S в командной строке, тогда компиляция будет закончена на этапе создания ассемблерных файлов.
Это тоже подойдет. Спасибо, ARV!
а зачем вам это?
Вообще я пишу на ассемблере, хочу подглядеть реализацию деления, самому думать лень, инет рыть тоже лень, думаю, дай-ка я напишу на C что-то в духе c=a/b, и погляжу сгенерированный asm. Вот такой я хитрый.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
> "make.exe" all
0 [main] sh 4636 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
35729 [main] sh 4636 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
0 [main] sh 2380 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
21275 [main] sh 2380 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
-------- begin --------
avr-gcc (WinAVR 20080610) 4.3.0
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0 [main] sh 2744 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
30330 [main] sh 2744 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
make.exe: *** [sizebefore] Error 100352
> Process Exit Code: 2
> Time Taken: 00:06
во-первых, рекомендуется не использовать макросы SIG_xxx - они оставлены для совместимости, а им на смену пришли другие макросы, например для АЦП это будет ADC_vect
во-вторых, протеус выдает вам не ошибки, а предупреждения о том, что опорное напряжение для АЦП у вас равно 0. почему - это другой вопрос: или проинициализировали АЦП неверно, или в схеме ошибка.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
решил я заняться микроконтролерми
в протеусе моделирую, авр студия 4.16 и винавр для написания
и тут же столкнулся с проблемой
хочу изменить состояние пина
не суть важно на каком порту главное что прога отказывается компилится
прога(кусок выдран изи какогото исходника который компилиться):
#include <avr>
int main(void)
{
PORTC=0x00;
DDRC=0x00;
PORTC.4=1;
return 0;
}
ошибка:
../1.c: In function 'main':
../1.c:8: error: expected ';' before numeric constant
make: *** [1.o] Error 1
Build failed with 1 errors and 0 warnings...
что я не правильно делаю
сразу извиняюсь если такой вопрос пробегал просто сейчас интернет у меня жпрс, напряжно 19 страниц читать
используя WinAVR забудьте про PORTC.4 точечная нотация для обращения к битам портов и регистров в WinAVR не реализована. используйте то, что скомпилируется на любом компиляторе:
этот файл компилиться в WinAVR не может - это исходник из-под CodeVision CVAVR. помимо точечной нотации там есть ряд абсолютно несовместимых с WinAVR вещей - поэтому я не верю, что он компилируется без ошибок.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Подскжите пожалуста, мне WinAVR при компиляции выдает:
scroll_line.c:25: warning: built-in function 'index' declared as non-function
scroll_line.c:29: warning: function declaration isn't a prototype
scroll_line.c: In function 'shift':
scroll_line.c:81: warning: cast to pointer from integer of different size
scroll_line.c: In function 'to_ascii':
scroll_line.c:91: warning: cast to pointer from integer of different size
scroll_line.c: In function 'display':
scroll_line.c:186: warning: cast to pointer from integer of different size
scroll_line.c: In function 'error':
scroll_line.c:203: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c: At top level:
scroll_line.c:316: warning: function declaration isn't a prototype
scroll_line.c:335: warning: function declaration isn't a prototype
scroll_line.c:352: warning: function declaration isn't a prototype
scroll_line.c: In function '__vector_1':
scroll_line.c:384: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c: At top level:
scroll_line.c:416: warning: function declaration isn't a prototype
scroll_line.c: In function '__vector_2':
scroll_line.c:438: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:439: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:445: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:448: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:465: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:466: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:473: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:476: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c: In function 'main':
scroll_line.c:525: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:532: warning: passing argument 1 of 'shift' makes integer from pointer without a cast
scroll_line.c:537: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:542: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:549: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:556: warning: passing argument 1 of 'display' makes integer from pointer without a cast
На это можно закрыть глаза так как ошибок нет или нужно задуматься и чтото переделывать. И вообще что это значит?
а += 1; равносильно а = а + 1;
a |= 5; равносильно а = а | 5;
a <<= 3; равносильно a = a << 3;
и т.д.
Vergilium, warning - не ошибка, но следует сильно задуматься об их причинах! как правило, они свидетельствуют либо о простой неаккуратности или забывчивости, либо о недопонимании того, что делается в программе. в некоторых случаях результат будет плачевный: при ошибках программа не соберется просто, а при warning-ах запросто соберется, но может не работать или будет выкидывать чудеса.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Подскажите пожалуйста, как передать байт в регистр последовательно, т.е. есть переменная с определенным значением и нужно записать ее в внешний 8ми битный регистр последовательно бит за битом.