|
возможно ли на Си, объединить биты регистров портов микроконтроллера |
|
|
|
 |
Ответов
|
Jun 14 2009, 11:34
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Я бы сделал так:
#define UP(port, bit) port |= (1<<bit) #define DOWN(port, bit) port &= ~(1<<bit)
Далее:
#define LIGHT P1OUT,1 #define MOTOR P2OUT,3 #define BEEPER P3OUT,2
Итого имеем:
UP(LIGHT); DOWN(MOTOR); UP(BEEPER);
Названия регистров взял от МСП, как наиболее актуального для меня
Если хочется именно структуры, то надо немного подумать. Например, определить структуру Pin{}, в которой указать порт, номер пина и т.д. Например, забить туда все регистры порта (OUT,DIR,IE,SEL). А потом уже эту структуру включать внутрь других структур. Но всё равно без макросов не обойтись. Либо класс рисовать.
Хотя, если взять тот же МСП, то там в io.h порты расписаны в том числе и как структуры, и можно написать port1.out.pin3 = 1; port2.out.pin1 = 0; Тогда всё еще проще: #define MOTOR port1.out.pin3; ... MOTOR = 1; C инициализацией других регистров порта опять же, нужно отдельно думать.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 14 2009, 18:41
|

Местный
  
Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557

|
Цитата(MrYuran @ Jun 14 2009, 15:34)  Я бы сделал так: Всем большое спасибо за помощь
Причина редактирования: Нарушение п.3.4 Правил форума.
--------------------
One Chip is All You Need
|
|
|
|
|
Jun 14 2009, 18:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(another_one @ Jun 14 2009, 21:41)  Всем большое спасибо за помощь Небольшой пример для иллюстрации "прелестей" макро. Код #define UP(port, bit) port |= (1<<bit) где-то в программе напишем: Код UP(port,2) + 3; Понятно, что такое можно написать после долгих праздников, но это может быть и результатом типичной ляпы типа "copy/paste". Очевидно, что это ляпа, но препроцессор это преобразует в Код port |= (1<<2) + 3; и компилятор не моргнув никакими error/warning откомпилирует. Очевидно, что это ляпа, но сколько времени вы будете ее искать? Ежели UP оформить в виде inline функции Код inline void UP(char port, char bit) {port &= ~(1<<bit);} компилятор тут же выдаст что-нибудь типа '+' : illegal operand of type 'void' с указанием номера строки (VS 2008). Если не хочется себе жизнь облегчать, то это, конечно, дело каждого уважаемого участника форума.
|
|
|
|
Сообщений в этой теме
another_one возможно ли на Си Jun 13 2009, 16:50 sergeeff Никак Jun 13 2009, 17:59 DpInRock Вы всегда смотрите, как именно ваши фантазии будет... Jun 13 2009, 19:38 another_one Цитата(DpInRock @ Jun 13 2009, 23:38) Вы ... Jun 13 2009, 22:17 SSerge Для читаемости можно оформить доступ к битам в раз... Jun 13 2009, 22:49 sergeeff Почитайте современные книги, которые всячески сове... Jun 14 2009, 00:20 zltigo Цитата(sergeeff @ Jun 14 2009, 03:20) Поч... Jun 14 2009, 05:17 Herz Цитата(sergeeff @ Jun 14 2009, 02:20) Поч... Jun 14 2009, 06:47  SSerge Цитата(Herz @ Jun 14 2009, 12:47) Такие к... Jun 14 2009, 10:21   Dog Pawlowa Цитата(SSerge @ Jun 14 2009, 13:21) Но, р... Jun 14 2009, 10:49    sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ... Jun 14 2009, 10:55     Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 13:55) Это... Jun 14 2009, 11:07    aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ... Jun 14 2009, 11:35     Dog Pawlowa Цитата(aaarrr @ Jun 14 2009, 14:35) очень... Jun 14 2009, 17:09      aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 21:09) ... Jun 14 2009, 17:16       Dog Pawlowa Цитата(aaarrr @ Jun 14 2009, 20:16) зато ... Jun 14 2009, 17:36        aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 21:30) ... Jun 14 2009, 17:41         Dog Pawlowa Цитата(aaarrr @ Jun 14 2009, 20:41) Вы им... Jun 14 2009, 17:55          aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 21:55) ... Jun 14 2009, 17:59        sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ... Jun 14 2009, 17:48         Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 20:48) Ну ... Jun 14 2009, 18:04          sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 21:04) ... Jun 14 2009, 18:41           ReAl Цитата(sergeeff @ Jun 14 2009, 21:41) 2. ... Jun 14 2009, 20:46            sergeeff Цитата(ReAl @ Jun 14 2009, 23:46) где ... Jun 15 2009, 06:31             Dog Pawlowa Цитата(sergeeff @ Jun 15 2009, 09:31) кни... Jun 15 2009, 06:44              sergeeff Цитата(Dog Pawlowa @ Jun 15 2009, 09:44) ... Jun 15 2009, 07:11             ReAl Цитата(sergeeff @ Jun 15 2009, 09:31) 2. ... Jun 15 2009, 08:03              sergeeff Цитата(ReAl @ Jun 15 2009, 11:03) Так зна... Jun 15 2009, 08:33        zltigo Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ... Jun 14 2009, 19:13      sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 20:09) ... Jun 14 2009, 17:29    SasaVitebsk Цитата(Dog Pawlowa @ Jun 14 2009, 13:49) ... Jun 15 2009, 08:24     zltigo Цитата(SasaVitebsk @ Jun 15 2009, 11:24) ... Jun 15 2009, 10:43      SasaVitebsk Цитата(zltigo @ Jun 15 2009, 13:43) ...и ... Jun 17 2009, 08:57 sergeeff Мне представляется, что:
1. Есть программисты - од... Jun 14 2009, 10:27 KRS На С++ можно с помощью перезагрузки операции присв... Jun 14 2009, 10:59 sergeeff А почему все макросы в одном h-файле можно помести... Jun 14 2009, 11:16   aaarrr Цитата(sergeeff @ Jun 14 2009, 22:59) Еже... Jun 14 2009, 19:05   zltigo Цитата(sergeeff @ Jun 14 2009, 21:59) Неб... Jun 14 2009, 19:16    sergeeff Цитата(zltigo @ Jun 14 2009, 22:16) Прост... Jun 14 2009, 19:38     Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 22:38) ...... Jun 14 2009, 19:54      aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 23:54) ... Jun 14 2009, 20:05     zltigo Цитата(sergeeff @ Jun 14 2009, 22:38) Сог... Jun 14 2009, 20:11 aaarrr Да-да, copy-paste, в первый раз и "char... Jun 14 2009, 19:14 defunct Меня как-то никогда не смущало написать пару десят... Jun 14 2009, 20:52 zltigo Цитата(defunct @ Jun 14 2009, 23:52) Заче... Jun 14 2009, 21:03  defunct Цитата(zltigo @ Jun 15 2009, 00:03) Зачем... Jun 14 2009, 21:07   zltigo Цитата(defunct @ Jun 15 2009, 00:07) Нужн... Jun 14 2009, 21:16    defunct Цитата(zltigo @ Jun 15 2009, 00:16) А вме... Jun 14 2009, 21:28     singlskv Цитата(defunct @ Jun 15 2009, 01:28) на м... Jun 14 2009, 21:39      defunct Цитата(singlskv @ Jun 15 2009, 00:39) а п... Jun 14 2009, 21:46       singlskv Цитата(defunct @ Jun 15 2009, 01:46) Пото... Jun 14 2009, 21:54        defunct Цитата(singlskv @ Jun 15 2009, 00:54) про... Jun 14 2009, 22:13         singlskv Цитата(defunct @ Jun 15 2009, 02:03) Вы ч... Jun 14 2009, 22:14         Dog Pawlowa Цитата(defunct @ Jun 15 2009, 01:13) Вы м... Jun 15 2009, 05:37          defunct Цитата(Dog Pawlowa @ Jun 15 2009, 08:37) ... Jun 15 2009, 06:46     zltigo Цитата(defunct @ Jun 15 2009, 00:28) если... Jun 14 2009, 22:00      defunct Цитата(zltigo @ Jun 15 2009, 01:00) Зачас... Jun 14 2009, 22:25       singlskv Цитата(defunct @ Jun 15 2009, 02:25) Блин... Jun 14 2009, 22:30        defunct Цитата(singlskv @ Jun 15 2009, 01:30) Ну ... Jun 14 2009, 22:37       zltigo Цитата(defunct @ Jun 15 2009, 01:25) А ес... Jun 15 2009, 07:05 ReAl ====================
Кстати, об исходной теме и пр... Jun 14 2009, 20:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|