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

 
 
 
Reply to this topicStart new topic
Igor26
сообщение Mar 2 2007, 21:45
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Уважаемые коллеги! Вопрос следующий.
Есть много портов настроенных на вывод. Обрабатываются они все ОДИНАКОВО, но каждый в своё время.
Вопрос: как описать и передать в функцию имя порта. Что-то в таком роде:

FunctinPort(PORTD_Pin7)
{
//здесь значение порта много раз меняется
}

Не хочется для каждого порта писАть свой обработчик. Их аж 36.

P.S. Что-то подобное здесь уже мелькало, но найти не смог.
Go to the top of the page
 
+Quote Post
CSB
сообщение Mar 2 2007, 22:25
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



тута - http://electronix.ru/forum/index.php?showtopic=24041
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 2 2007, 22:25
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Igor26 @ Mar 2 2007, 21:45) *
Уважаемые коллеги! Вопрос следующий.
Есть много портов настроенных на вывод. Обрабатываются они все ОДИНАКОВО, но каждый в своё время.
Вопрос: как описать и передать в функцию имя порта. Что-то в таком роде:

FunctinPort(PORTD_Pin7)
{
//здесь значение порта много раз меняется
}

Не хочется для каждого порта писАть свой обработчик. Их аж 36.

P.S. Что-то подобное здесь уже мелькало, но найти не смог.

Передавать адрес и работать через ST, а не OUT ?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 3 2007, 01:06
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



А компилятор то какой ?
Это дело компиляторозависимое smile.gif
Go to the top of the page
 
+Quote Post
arttab
сообщение Mar 3 2007, 09:35
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



передавай адрес регистра порта. а как передать это компиляторозависимое


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Igor26
сообщение Mar 3 2007, 10:57
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(singlskv @ Mar 3 2007, 01:06) *
А компилятор то какой ?
Это дело компиляторозависимое smile.gif

IAR 4.20
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 3 2007, 12:01
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Код
//---- Макросы для чтения портов ввода

//   читаем порт по адресу addr; пример: ReadSFR((BYTE)(&PINB))
#define ReadSFR(addr) (*(volatile BYTE *)((WORD)addr))

//   читаем бит из порта по адресу addr; пример: ReadSFRbit((BYTE)(&PINB),1<<PINB3)
#define ReadSFRbit(addr,mask) ((*(volatile BYTE *)((WORD)addr))&mask ? 1 : 0)

//---- Макросы для записи портов вывода

//   пишем в порт по адресу addr, data - значение; пример: WriteSFR((BYTE)(&PORTB), 0xAA)
#define WriteSFR(addr,data) (*(volatile BYTE *)((WORD)addr)=(BYTE)data)

//   записываем биты в порт по адресу addr, mask - биты записать;
//     пример: WriteSFRsetbit((BYTE)(&PORTB),1<<PORTB3)
#define WriteSFRsetbit(addr,mask) ((*(volatile BYTE *)((WORD)addr))|=mask)

//   стираем биты в порту по адресу addr, mask - биты стереть;
//     пример: WriteSFRclrbit((BYTE)(&PORTB),1<<PORTB3)
#define WriteSFRclrbit(addr,mask) ((*(volatile BYTE *)((WORD)addr))&=~mask)

соответственно можете переделать на функции
только макросами быстрее
Go to the top of the page
 
+Quote Post

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

 


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


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