CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Rinon Ninqueon писал(а):смотрите файл, там весь код. Почти...
Прерывание по INT0 должно срабатывать. Чтобы убедиться, вставьте в функцию индикацию на светодиоде: зажечь - погасить при каждом нажатии кнопки.
По остальному:
В main разрешены прерывания по INT0, по переполнению Т1, по захвату Т1. При работе программы первое прерывание по TIM1_OVF, в соответствие с функцией, снимет разрешения на TIM1_OVF и TIM1_CAPT и остановит таймер. ...Если, конечно, нет продолжения в Почти....
Что за переменные техтх и техтy?
Если Т1 "заставить" работать, то:
TCNT1=0x10000-(Freq/2048)/3200; // получится 65536-1=65535 т. е. после следующего такта опять прерывание. И так постоянно.
Аватара пользователя
Rinon Ninqueon
Говорящий с текстолитом
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Rinon Ninqueon »

ValBag писал(а):Что за переменные техтх и техтy?

http://radiokot.ru/lab/controller/15/ - вот, я отсюда брал работу с дисплеем
это координаты текста задаются
Изображение
Изображение
Изображение
Сам себе Гилмор
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Sounds »

Всем привет!
Как перевести эти три строчки(Выражения)? А то не как не могу понять что они делают!

Код: Выделить всё

(x|=y)
(x&=~y)
(x&y)
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Sounds писал(а):Как перевести эти три строчки(Выражения)?

(x|=y); // Сравнить по "ИЛИ" и записать в "х"
(x&=~y); // Сравнить по "И" с инверсией "У" и записать в "Х"
(x&y); // Сравнить по "И"
Операции поразрядные.
Последний раз редактировалось ValBag Вс окт 17, 2010 15:59:07, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

ValBag писал(а):
Sounds писал(а):Как перевести эти три строчки(Выражения)?
(x|=y) // Сравнить по "ИЛИ" и записать в "х"
(x&=~y) // Сравнить по "И" с инверсией "У" и записать в "Х"
(x&y) // Сравнить по "И"

нифига не так это все "переводится!!! сравнить - это if - в этих выражениях этого нет.
правильный перевод:
1. x |= y; - присвоить х результат побитового ИЛИ межу х и у - добавить в x единичные биты из y
2. x &= ~y; - присвоить х результат побитового И между х и инверсией у - в х сбросить в 0 те биты, котрые равны 1 в у
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Причём тут if ? Сравнивается каждый бит первого операнда с соответствующим битом второго операнда, а результат сравнения определяется типом логической операции. Так что все ..."фига".
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

ValBag писал(а):Причём тут if ? Сравнивается каждый бит первого операнда с соответствующим битом второго операнда, а результат сравнения определяется типом логической операции. Так что все ..."фига".

оставайтесь при своем мнении, не буду мешать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Sounds »

Спасибо за ответ! А что вот эти ошибки означают?
Изображение
Вложения
14.JPG
(12.66 КБ) 1368 скачиваний
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Sounds писал(а):Спасибо за ответ! А что вот эти ошибки означают?
Изображение
Примерно так:
первый аргумент функции типа "flash unsigned char (в строке 9)" не совместим с обязательным параметром типа "unsigned char".
Т. е. передается в функцию аргумент не того типа, что был при её определении. Вернее тип тот же, но место хранения разное - flash или sram.
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Sounds »

ого, и как с этим бороться?
Аватара пользователя
Rinon Ninqueon
Говорящий с текстолитом
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Rinon Ninqueon »

Я сначала завожу переменную типа char *, инициализирую его чем-нибудь
без ошибок работало
Изображение
Изображение
Изображение
Сам себе Гилмор
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Sounds »

как это сделать? можете поделится примером?
Аватара пользователя
Rinon Ninqueon
Говорящий с текстолитом
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Rinon Ninqueon »

отправил в ЛС
Изображение
Изображение
Изображение
Сам себе Гилмор
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Sounds »

Спасибо! Скажи а почему экран может двоить, то есть показывает одно и тоже на двух кристаллах одновременно ?
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: CodeVision AVR в вопросах и ответах

Сообщение stas00n »

Коллеги, может я немного не в тему, у меня вопрос абстрактный по си. Начал недавно пользоваться, даже относительно рабочую программу получилось написать, но блин, никак не вкурю как указателями пользоваться, все что в инете нашел ну никак до меня не доходит, слаб стал умишком... Объясните на пальцах как сделать функцию, к примеру, bin2bcd? Вот я сделал так:

Код: Выделить всё

char bcd_data[3];                                      //массив для результата
void bin2bcd(int binvalue);       

/*собственно, bin2bcd*/
void bin2bcd(int binvalue)
{
   int t=binvalue;
   bcd_data[2]=bcd_data[1]=-1;
   while (t>=0)
   {
   t=t-100;
   bcd_data[2]++ ;
   }
   t=t+100;
   while (t>=0)
   {
   t=t-10;
   bcd_data[1]++;
   }
   bcd_data[0]=(char) t+10;
}
/*Пользуюсь примерно так*/
void main (void)
{
int a=123;
bin2bcd(a);
}

Все работает, но мне теперь надо чтобы результат сохранялся в другие места, т.е, например, преобразовать надо несколько значений. Надо добавить еще один аргумент к функции, - указатель куда сохранять. КАК? Чтобы я мог сделать несколько вызовов типа:

Код: Выделить всё

char bcd1[3];
char bcd2[3];
char bcd3[3];
void main (void)
{
int a=123;
int b=456;
int c=789;
bin2bcd(a, тут надо указатель на массив bcd1);
bin2bcd(b, тут надо указатель на массив bcd2);
bin2bcd(c, тут надо указатель на массив bcd3);
}
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

Насколько я знаю, если подключить файл bcd.h , то можно использовать bin2bcd() и bcd2bin() и ничего писать не нужно.
«И всё-таки она вертится!»
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: CodeVision AVR в вопросах и ответах

Сообщение stas00n »

Во-первых, нету у меня такого, а во-вторых хочу разобраться с самим принципом работы с указателями, bin2bcd так, для примера, обо что споткнулся..
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

stas00n писал(а):Коллеги, может я немного не в тему, у меня вопрос абстрактный по си. Начал недавно пользоваться, даже относительно рабочую программу получилось написать, но блин, никак не вкурю как указателями пользоваться, все что в инете нашел ну никак до меня не доходит, слаб стал умишком... Объясните на пальцах как сделать функцию, к примеру, bin2bcd? Вот я сделал так:

Код: Выделить всё

char bcd_data[3];                                      //массив для результата
void bin2bcd(int binvalue);       

/*собственно, bin2bcd*/
void bin2bcd(int binvalue)
{
   int t=binvalue;
   bcd_data[2]=bcd_data[1]=-1;
   while (t>=0)
   {
   t=t-100;
   bcd_data[2]++ ;
   }
   t=t+100;
   while (t>=0)
   {
   t=t-10;
   bcd_data[1]++;
   }
   bcd_data[0]=(char) t+10;
}
/*Пользуюсь примерно так*/
void main (void)
{
int a=123;
bin2bcd(a);
}

Все работает, но мне теперь надо чтобы результат сохранялся в другие места, т.е, например, преобразовать надо несколько значений. Надо добавить еще один аргумент к функции, - указатель куда сохранять. КАК? Чтобы я мог сделать несколько вызовов типа:

Код: Выделить всё

char bcd1[3];
char bcd2[3];
char bcd3[3];
void main (void)
{
int a=123;
int b=456;
int c=789;
bin2bcd(a, тут надо указатель на массив bcd1);
bin2bcd(b, тут надо указатель на массив bcd2);
bin2bcd(c, тут надо указатель на массив bcd3);
}


Я бы сделал так:

сначала подключаем bcd.h

Код: Выделить всё

#include <bcd.h>

потом например присвоить первому елементу массива bcd1 преобразованое значение переменной a

Код: Выделить всё

bcd[1]=bin2bcd (a);

Может конечно я не прав, я тоже только учусь.
«И всё-таки она вертится!»
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: CodeVision AVR в вопросах и ответах

Сообщение stas00n »

Ну нету у меня bcd.h, нету. У меня эта функция с одним параметром - числом для преобразования. Результат преобразования сохраняется в заранее приготовленный фиксированный массив, а надо сделать функцию с двумя параметрами - кроме числа для преобразования передавать еще и адрес массива, куда сохранить результат... Вот с передачей этого адреса у меня и вилы - как ни напишу -компилятор все на что-нибудь ругается :evil:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

вы можете описать функцию примерно так:

Код: Выделить всё

void my_func(int number, char *bcd);
или так:

Код: Выделить всё

void my_func(int number, char bcd[]);
и работать внутри функции с указателем bcd, как вам угодно. вот пример:

Код: Выделить всё

void my_func(int number, char *bcd){
   for(; number; number /= 10){
      *bcd++ = (number % 10) + '0';
   }
*bcd = 0;
}
эта функция чисто для примеру: она формирует "задом наперед" в массиве десятичное число - что-то умное придумывать было лень

использовать ее можно примерно так:

Код: Выделить всё

char array1[6], array2[6], array3[6];

my_func(123, array1);
my_func(456,array2);
my_func(789,array3);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»