Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.12.2007, 19:44
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
CVAVR передача в функцию PORTА.X как переменную
Задача в следуюшем, в зависимости от программы в один из 6 портов не обходимо послать определенную последовательность бит.
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
Подскажите как оптимально решить задачу, не писать же 6 одинаковых функций.
С оператором switch-case получается тоже грамоздко.
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
09.12.2007, 19:57
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Код:
|
PORTA=0b01010101 //== PORTA.0=1,PORTA.1=0,PORTA.2=1... |
|
|
|
|
09.12.2007, 20:00
|
|
Временная регистрация
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: CVAVR передача в функцию PORTА.X как переменную
Сообщение от woroba
|
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
|
А почему такая зпись не работает?
Может тогда такая запись покатит?
В двоичном виде или 0xFF в шестнадцатеричном
А можно и не константу, а переменную порту присвоить.
Сообщение от woroba
|
С оператором switch-case получается тоже грамоздко.
|
А что конкретно громоздко?
|
|
|
|
10.12.2007, 07:32
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: CVAVR передача в функцию PORTА.X как переменную
Сообщение от buka_2004
|
Сообщение от woroba
|
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
|
А почему такая зпись не работает?
Может тогда такая запись покатит?
В двоичном виде или 0xFF в шестнадцатеричном
А можно и не константу, а переменную порту присвоить.
Сообщение от woroba
|
С оператором switch-case получается тоже грамоздко.
|
А что конкретно громоздко?
|
Ребята вы не поняли вопрос или я не точно сформулировал.
Пытаюсь обяснить снова:
Есть функция(подпрограмма) которая выводит в порт (на один пин) последовательно 16 бит.
Задача состоит в том , что эту последовательность в зависимомти от алгоритма надо выводиить либо в PORTA.1 либо в PORTA.2 либо в PORTA.3 либо в PORTA.4 либо в PORTA.5 либо в PORTA.6
Я вижу два варианта либо писать 6 функций для каждого порта отдельно, либо одну фунцию в которой с помощью switch-case производить селекцию.
И тот и второй вариант грамоздкий.
Может у кого есть решение по изяшней???
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
10.12.2007, 09:36
|
|
Временная регистрация
Регистрация: 06.12.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Если определить разряды как -1,2,4,8,16,32 ...
Код:
|
#define PORT_a0 1
#define PORT_a1 2
#define PORT_a2 4
#define PORT_a3 8
//---------------
void out_(unsigned char n_p,int infa)
{
unsigned char i;
for(i=0;i‹16;i++)
{
if (!(infa & 1) ) PORTA&=~n_p;
else PORTA|=n_p;
infa››=1;
}
}
//------------------
int a=0x1234;
out_(PORT_a3,a); |
приблизительно так себе представляю, код не проверял
__________________
разум когда-нибудь победит... (с)
|
|
|
|
10.12.2007, 12:49
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Сообщение от user_ushastyj
|
Если определить разряды как -1,2,4,8,16,32 ...
Код:
|
#define PORT_a0 1
#define PORT_a1 2
#define PORT_a2 4
#define PORT_a3 8
//---------------
void out_(unsigned char n_p,int infa)
{
unsigned char i;
for(i=0;i‹16;i++)
{
if (!(infa & 1) ) PORTA&=~n_p;
else PORTA|=n_p;
infa››=1;
}
}
//------------------
int a=0x1234;
out_(PORT_a3,a); |
приблизительно так себе представляю, код не проверял
|
Спасибо за идею.
Этот вариант меня более чем устраивает.
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Как использовать функцию printf для выовода на второй USART
|
igla_85 |
Микроконтроллеры, АЦП, память и т.д |
1 |
01.06.2009 02:35 |
как написать макрос-функцию в Си Winavr
|
serb-radio |
Микроконтроллеры, АЦП, память и т.д |
7 |
30.09.2008 11:08 |
Знатокам С! Как передать в функцию порт?
|
arkbox |
Микроконтроллеры, АЦП, память и т.д |
52 |
26.02.2008 17:06 |
Знатоки Си, помогите: Как обьявить функцию?
|
Hoksmur |
Микроконтроллеры, АЦП, память и т.д |
4 |
09.10.2007 19:36 |
CVAVR как программно вызвать функцию обработки прерывания???
|
woroba |
Микроконтроллеры, АЦП, память и т.д |
7 |
07.03.2007 11:54 |
Часовой пояс GMT +4, время: 16:18.
|
|