реклама на сайте
подробности

 
 
> Как побитно послать число на порт МК?, Как побитно послать число на порт МК?
renni
сообщение Dec 10 2007, 15:38
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 16-02-07
Из: г.Киев, Украина
Пользователь №: 25 417



Такой вопрос.
Есть комманда (16 битная) которую нужно отправлять на один вывод порта. Я реализовал это следующим образом, но мне не нравится. Может кто то делал это иначе и более компактно.

void tx_data(char command)
{
unsigned int i=0, a = 0x01H;
for (i=0; i<15;i++)
{
P1_1= command&(a>>i);
}
}

Если не сложно предложите более рациональный вариант.
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Dec 10 2007, 16:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Не будет работать ваша программа правильно smile.gif
Во-первых, если команда 16-и битная, то почему вы передаете в программу char? У вас тип char как 16-и битный определен?
Во-вторых, зачем вы сдвигаете маску на i бит в каждом цикле? Сдвигать нужно только на один бит за каждый проход цикла.
В-третьих, что такое P1_1? Битовая переменная или адрес порта? Если адрес порта, то у вас будет вывод на всем пинам этого порта, а не в один требуемый.
В-четвертых, а после вывода каждого бита разве не нужно временной интервал выдерживать? "Молотите" с максимальной частотой?
В общем вот вариант. Макросы SET_BITCMD, RESET_BITCMD, CMD_DELAY сами определите. Ну и функцию задержки delay тоже.

Код
#define SET_BITCMD
#define RESET_BITCMD
#define CMD_DELAY

void tx_data(unsigned int command)
{ unsigned int i, mask = 0x01;
  for (i=0; i<16; i++)
  {  if  ((command&mask)==0) RESET_BITCMD;
     else SET_BITCMD;
     mask<<=1;
    delay(CMD_DELAY);
  }
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 17:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016