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

 
 
> передача последовательных данных с двух и более выводов порта поочередно. (C51)
dobrik
сообщение Feb 21 2009, 08:07
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 1-02-09
Пользователь №: 44 235



упрощенный пример:

sbit B=P2^0;

void serial (void)
{
B=0;
B=1;
}

В этом случае все работает.

Задача состоит в том, что нужно поочередно применить эту функцию к разным выводам (P2.0, P2.1, P2.2)
пробовал передать вывод в качестве параметра функции - не работает.
... пытался использовать указатели - на работает .
как это можно решить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Feb 21 2009, 09:41
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вот процедура, которая переворачивает любой бит в любом порту:
Код
inline void toggle_bit(volatile unsigned char* port, unsigned char bit)
{
     *port ^= (unsigned char)(1<<bit);
}

или так, что может оказаться оптимальнее
Код
inline void toggle_bit2(volatile unsigned char* port, unsigned char bit_mask)
{
     *port ^= bit_mask;
}

Использовать так:
Код
toggle_bit(&P2, 3);
toggle_bit2(&P2, 1<<3);

ПС:
A ^= B означает A = A^B или A = A XOR B


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 03:43
Рейтинг@Mail.ru


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