Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Как удобно использовать не бит-адресуемые порты??? (sbit LED0 = P4^0; --- не работает)
Отправлено
ZoltriX (173.236.172.47) 18 марта 2012, г. 19:42
Нарвался на очень неприятный момент.
В микроконтроллере С8051F022 (силабс), только 0,1,2,3 порты являются бит-адресуемыми. Поэтому обращение
sbit TEST = P1^0; --- работает,
а sbit LED0 = P4^0; --- не работает.
У меня ко всем 8 разрядам порта 4, надо отдельно обращаться, там висят 8 светодиодов, которые раздельно зажигаются.
Надеялся объявить
sbit LED0 = P4^0; и потом включать светодиод LED0 = 1; а выключать LED0 = 0. Но для порта 4 это не канает! Как мне теперь максимально удобно описать всё это дело?? Может какой готовый шаблон (функция) есть, для побитного обращения в "не бит-адресуемый" порт.
Составить ответ | Вернуться на конференцию
Ответы
- Ихде? 51? AVR? PIC? - ut1wpr (пустое, 19.03.2012, 16:46:18 77.120.33.2)
- Как то так.. - Тумблер (422 байт, 18.03.2012, 20:30:14 46.249.0.111)
- Я сделал вот так. Не знаю насколько удачно, но должно работать - ZoltriX (161 байт, 18.03.2012, 20:36:24 173.236.172.47)
- Повторяю вопрос. Для какой платформы страдаете? Для 51-й достаточно определить имя для битовой переменной sbit FOO=P1^3; а потом работать с этим именем FOO=1; или FOO=0; Для AVR вам уже подсказали. Для PIC есть свои синтаксисы для разных компиляторов. - ut1wpr (пустое, 19.03.2012, 17:05:11 77.120.33.2)
- Ответ: - Тумблер (135 байт, 20.03.2012, 00:24:32 46.249.0.125)
- Будет это работать или нет знает только Бог и биты разрешения прерываний. - Васятка (пустое, 19.03.2012, 09:11:5 64.20.56.34)
- #define macroport(p,b,d) ((d)?(P##p## |= (1U<<(b))):(P##p## &= ~(1U<<(b)))) - ответ (297 байт, 19.03.2012, 06:48:35 95.28.248.127)
- Это будет работать, но если надо что-то поменять (например, после разводки или по другим причинам ), это будет не удобно. - Тумблер (пустое, 18.03.2012, 20:42:12 46.249.0.111)