Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 09.12.2007, 19:44  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию CVAVR передача в функцию PORTА.X как переменную

Задача в следуюшем, в зависимости от программы в один из 6 портов не обходимо послать определенную последовательность бит.
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
Подскажите как оптимально решить задачу, не писать же 6 одинаковых функций.
С оператором switch-case получается тоже грамоздко.
Реклама:
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 09.12.2007, 19:57  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию

Код:
PORTA=0b01010101 //== PORTA.0=1,PORTA.1=0,PORTA.2=1...
AndreiVV вне форума  
Непрочитано 09.12.2007, 20:00  
buka_2004
Временная регистрация
 
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
buka_2004 на пути к лучшему
По умолчанию Re: CVAVR передача в функцию PORTА.X как переменную

Сообщение от woroba
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
А почему такая зпись не работает?
Может тогда такая запись покатит?
Код:
   PORTA = 0bxxxxxxxx;
В двоичном виде или 0xFF в шестнадцатеричном
А можно и не константу, а переменную порту присвоить.
Сообщение от woroba
С оператором switch-case получается тоже грамоздко.
А что конкретно громоздко?
buka_2004 вне форума  
Непрочитано 10.12.2007, 07:32  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию Re: CVAVR передача в функцию PORTА.X как переменную

Сообщение от buka_2004
Сообщение от woroba
Идеально если бы работала такая запись PORTA.(X),но к сажалению такое не возможно.
А почему такая зпись не работает?
Может тогда такая запись покатит?
Код:
   PORTA = 0bxxxxxxxx;
В двоичном виде или 0xFF в шестнадцатеричном
А можно и не константу, а переменную порту присвоить.
Сообщение от woroba
С оператором switch-case получается тоже грамоздко.
А что конкретно громоздко?
Ребята вы не поняли вопрос или я не точно сформулировал.
Пытаюсь обяснить снова:
Есть функция(подпрограмма) которая выводит в порт (на один пин) последовательно 16 бит.
Задача состоит в том , что эту последовательность в зависимомти от алгоритма надо выводиить либо в PORTA.1 либо в PORTA.2 либо в PORTA.3 либо в PORTA.4 либо в PORTA.5 либо в PORTA.6
Я вижу два варианта либо писать 6 функций для каждого порта отдельно, либо одну фунцию в которой с помощью switch-case производить селекцию.
И тот и второй вариант грамоздкий.
Может у кого есть решение по изяшней???
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 10.12.2007, 09:36  
user_ushastyj
Временная регистрация
 
Регистрация: 06.12.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
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);
приблизительно так себе представляю, код не проверял
__________________
разум когда-нибудь победит... (с)
user_ushastyj вне форума  
Непрочитано 10.12.2007, 12:49  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Сообщение от 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);
приблизительно так себе представляю, код не проверял
Спасибо за идею.
Этот вариант меня более чем устраивает.
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot