Страница 92 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 16, 2010 13:49:00
ValBag
Rinon Ninqueon писал(а):смотрите файл, там весь код. Почти...
Прерывание по INT0 должно срабатывать. Чтобы убедиться, вставьте в функцию индикацию на светодиоде: зажечь - погасить при каждом нажатии кнопки.
По остальному:
В main разрешены прерывания по INT0, по переполнению Т1, по захвату Т1. При работе программы первое прерывание по TIM1_OVF, в соответствие с функцией, снимет разрешения на TIM1_OVF и TIM1_CAPT и остановит таймер. ...Если, конечно, нет продолжения в
Почти....
Что за переменные
техтх и
техтy?
Если Т1 "заставить" работать, то:
TCNT1=0x10000-(Freq/2048)/3200; // получится 65536-1=65535 т. е. после следующего такта опять прерывание. И так постоянно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 16, 2010 17:00:44
Rinon Ninqueon
ValBag писал(а):Что за переменные техтх и техтy?
http://radiokot.ru/lab/controller/15/ - вот, я отсюда брал работу с дисплеем
это координаты текста задаются
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 14:34:51
Sounds
Всем привет!
Как перевести эти три строчки(Выражения)? А то не как не могу понять что они делают!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 15:49:09
ValBag
Sounds писал(а):Как перевести эти три строчки(Выражения)?
(x|=y); // Сравнить по "ИЛИ" и записать в "х"
(x&=~y); // Сравнить по "И" с инверсией "У" и записать в "Х"
(x&y); // Сравнить по "И"
Операции поразрядные.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 15:57:26
ARV
ValBag писал(а):Sounds писал(а):Как перевести эти три строчки(Выражения)?
(x|=y) // Сравнить по "ИЛИ" и записать в "х"
(x&=~y) // Сравнить по "И" с инверсией "У" и записать в "Х"
(x&y) // Сравнить по "И"
нифига не так это все "переводится!!! сравнить - это
if - в этих выражениях этого нет.
правильный перевод:
1. x |= y; - присвоить
х результат побитового ИЛИ межу
х и
у - добавить в
x единичные биты из
y
2. x &= ~y; - присвоить
х результат побитового И между
х и
инверсией у - в
х сбросить в 0 те биты, котрые равны 1 в
у
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 16:08:37
ValBag
Причём тут if ? Сравнивается каждый бит первого операнда с соответствующим битом второго операнда, а результат сравнения определяется типом логической операции. Так что все ..."фига".
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 16:55:11
ARV
ValBag писал(а):Причём тут if ? Сравнивается каждый бит первого операнда с соответствующим битом второго операнда, а результат сравнения определяется типом логической операции. Так что все ..."фига".
оставайтесь при своем мнении, не буду мешать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 17, 2010 22:33:24
Sounds
Спасибо за ответ! А что вот эти ошибки означают?

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 05:00:48
ValBag
Sounds писал(а):Спасибо за ответ! А что вот эти ошибки означают?

Примерно так:
первый аргумент функции типа "flash unsigned char (в строке 9)" не совместим с обязательным параметром типа "unsigned char".
Т. е. передается в функцию аргумент не того типа, что был при её определении. Вернее тип тот же, но место хранения разное - flash или sram.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 10:49:01
Sounds
ого, и как с этим бороться?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 10:58:05
Rinon Ninqueon
Я сначала завожу переменную типа char *, инициализирую его чем-нибудь
без ошибок работало
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 11:03:33
Sounds
как это сделать? можете поделится примером?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 11:09:22
Rinon Ninqueon
отправил в ЛС
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 18, 2010 15:45:20
Sounds
Спасибо! Скажи а почему экран может двоить, то есть показывает одно и тоже на двух кристаллах одновременно ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 23, 2010 23:40:35
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);
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 23, 2010 23:49:34
Apparatchik
Насколько я знаю, если подключить файл bcd.h , то можно использовать bin2bcd() и bcd2bin() и ничего писать не нужно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 24, 2010 00:00:08
stas00n
Во-первых, нету у меня такого, а во-вторых хочу разобраться с самим принципом работы с указателями, bin2bcd так, для примера, обо что споткнулся..
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 24, 2010 00:11:50
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
потом например присвоить первому елементу массива bcd1 преобразованое значение переменной a
Может конечно я не прав, я тоже только учусь.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 24, 2010 00:51:10
stas00n
Ну нету у меня bcd.h, нету. У меня эта функция с одним параметром - числом для преобразования. Результат преобразования сохраняется в заранее приготовленный фиксированный массив, а надо сделать функцию с двумя параметрами - кроме числа для преобразования передавать еще и адрес массива, куда сохранить результат... Вот с передачей этого адреса у меня и вилы - как ни напишу -компилятор все на что-нибудь ругается

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс окт 24, 2010 08:59:16
ARV
вы можете описать функцию примерно так:
или так:
и работать внутри функции с указателем 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);