Всем привет Делаю пример из книги: Код (Text): / * Использование стандартной функции ввода/вывода printf */ #include <90s8515.h> / #include <stdio.h> void main(void) { int x=83; int y=0xA0; float z=12.345678; UCR=0x8; UBRR=0x19; printf("%-5d ",x); printf("%06d\n",x); printf("%i %i\n",x,y); printf("%d=0x%x \t",y,y); printf("%d=0x%X\n",y,y); printf("%i=0x%x\n",x,x); printf("%c\n",x); printf("%e %.1e %2.2e\n",z,z,z); } Но компилятор ругается: картинку прилагаю. Примеров много в книге, а с каждым так разбираться - это беда ((( .И еще вопрос - как запустить такой пример в терминале???
Build started 6.6.2014 at 23:55:34 make: Makefile: No such file or directory make: *** No rule to make target `Makefile'. Stop. Build failed with 2 errors and 0 warnings...
Вообще делал примеры из книги, которую советовали в других темах по изучению AVR (книга Лебедев М.Б. - CodeVisionAVR. Пособие для начинающих.). Хотелось бы увидите результат работы проги в "терминале" (((. Megakoteyka - может есть кака-нибудь другая литература, в которой примеры нагляднее ?
По литературе не скажу - обычно учусь по статьям из интернета. В CodeVisionAVR разбирался практически методом тыка, граблей вроде не встречал. Atmel Studio еще мучал, тоже все работало (и статьи по ней есть из серии "как установить, написать blink и прошить"), но она больно неповоротливая. Постараюсь завтра вечером что-нибудь путное найти по теме.
Скачал AtmelStudio 6. Код переделал под Attiny2313 Код (Text): /* * GccApplication3.c * * Created: 08.06.2014 1:12:51 * Author: Maks */ #include <stdio.h> #include <avr/io.h> int main(void) /* Основная функция программы */ { int x=83; // объявляем и инициализируем десятичным // значением целую переменную x int y=0xA0; // объявляем и инициализируем шестнадцатиричным // значением целую переменную y float z=12.345678; // объявляем и инициализируем переменную // с плавающей точкой z /* инициализируем UART AT90s8515: разрешим передатчик, запретим прерывания, данные - 8 бит */ UCSRB=0x8; /* Скорость передачи Baud=9600 при тактовой частоте 4MHz */ UBRRL=0x19; /* Функция printf является универсальной функцией форматных преобразований. Каждый знак % указывает, куда должен подставляться каждый из аргументов и в какой форме он должен выводиться. Количество % должно совпадать с количеством аргументов */ printf("%-5d ",x); /* спецификация преобразования %-5d означает, что число x будет напечатано в поле шириной, по крайней мере, в пять символов (описатель width = 5)в десятичном виде (символ преобразования 'd'). Если x имеет менее 5 цифр, то оно будет выровнено по левому краю (флаг '-'), а правая часть будет заполнена пробелами (т.к. в описатиле width в начале отсутствует 0). Таким образом, будет выведено: "83 " (три пробела) */ printf("%06d\n",x); /* спецификация преобразования %06d\n означает, что число x будет напечатано в поле шириной, по крайней мере, в шесть символов (описатель width = 06)в десятичном виде(символ преобразования'd'). Последовательность \n является обозначением 'символа новой строки', который служит указанием для перехода на терминале к левому краю следующей строки. Т.к. в предыдущем операторе отсутствует\n, то вывод будет осуществлен в той же строке, что и предыдущее значение. Если x имеет менее 6 цифр, то оно будет выровнено по правому краю (т.к. флаг отсутствует), а левая часть будет заполнена нулями (т.к. в описатиле width в начале стоит 0). Таким образом, будет выведено: "000083" */ printf("%i %i\n",x,y); /* спецификация преобразования %i %i\n означает, что сначала будет выведено число x (флаги и описатель width отсутствуют) в десятичном виде (символ преобразования 'i'). Затем будетвыведен пробел, а затем число y (флаги и описатель width отсутствуют) в десятичном виде (символ преобразования 'i'). После этого будет осуществлен переход на новую строку (последовательность \n). Таким образом, будет выведено: "83 160", т.к. y=0xA0=160 */ printf("%d=0x%x \t",y,y); /* спецификация преобразования %d=0x%x \t означает, что сначала будет выведено число y (флаги и описатель width отсутствуют) в десятичном виде (символ преобразования 'd'). Затем будет выведена последовательность "=0x", а затем число y (флаги и описатель width отсутствуют) в шестнадцатиричном виде символами нижнего регистра (символ преобразования 'x'). После этого будет выведен пробел и осуществлена табуляция, т.е. вывод еще нескольких пробелов (последовательность \t). Таким образом, будет выведено: "160=0xa0 " */ printf("%d=0x%X\n",y,y); /* спецификация преобразования %d=0x%X\n означает, что сначала будет выведено число y (флаги и описатель width отсутствуют) в десятичном виде (символ преобразования 'd'). Затем будет выведена последовательность "=0x", а затем число y (флаги и описатель width отсутствуют) в шестнадцатиричном виде символами верхнего регистра (символ преобразования 'X'). Т.к. в предыдущем операторе отсутствует \n, то вывод будет осуществлен в той же строке, что и предыдущее значение. После этого будет осуществлен переход на новую строку (последовательность \n). Таким образом, будет выведено: "160=0xA0" */ printf("%i=0x%x\n",x,x); /* спецификация преобразования %i=0x%x\n означает, что сначала будет выведено число x (флаги и описатель width отсутствуют) в десятичном виде (символ преобразования 'i'). Затем будет выведена последовательность "=0x", а затем число x (флаги и описатель width отсутствуют) в шестнадцатиричном виде символами нижнего регистра (символ преобразования 'x'). После этого будет осуществлен переход на новую строку (последовательность \n). Таким образом, будет выведено: "83=0x53", т.к. x=83=0x53 */ printf("%c\n",x); /* спецификация преобразования %c\n означает, что будет выведено число x в виде символа ASCII (символ преобразования 'c'). После этого будет осуществлен переход на новую строку (последовательность \n). Таким образом, будет выведено: "S", т.к. десятичный код 83 соответствует символу 'S' ASCII */ printf("%e %.1e %2.2e\n",z,z,z); /* спецификация преобразования %e %.1e %2.2e\n означает, что сначала будет выведено число z (флаги и описатели width и precision отсутствуют) с 5 знаками (по умолчанию описатель precision = 5) после запятой в виде [-]d.ddddd e[-]dd (символ преобразования 'e'), причем будет осуществлено округление числа, т.к. в числе z после запятой 6 знаков (флаги и описатели width и precision отсутствуют). Затем будет выведено число z с 1 знаком (описатель precision .1) после запятой в виде [-]d.d e[-]dd (символ преобразования 'e'), причем будет осуществлено округление числа. После этого будет выведено число z с 2 (описатель precision .2) знаками после запятой в виде [-]d.dd e[-]dd (символ преобразования 'e'), причем будет осуществлено округление числа. Описатель width = 2 здесь не имеет значения, он может быть любым или отсутствовать. После этого будет осуществлен переход на новую строку (последовательность \n). Таким образом, будет выведено: "1.23457e1 1.2e1 1.23e" */ } Код скомпилился. Все ОК. Теперь другая проблема ((( В протеусе не получается смоделировать ((( Вставляю контроллер Mega8515 и подключаю к нему терминал. Но чуда не происходит. Вот файлы (https://cloud.mail.ru/public/43a75c6d5018/GccApplication3.rar)
Тут спецы по протеусу вроде толпами не бегали Попробуйте поискать форум, посвященный именно протеусу, там больше вероятность получить помощь.