Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Пересылки данных можно проводить между двумя регистрами, между регистром и памятью, между регистром и портом. Память в АВР трех совершенно разных типов - память данных (RAM), энергонезависимая память программ (Flash), энергонезависимая память данных (EEPROM). Портами ввода/вывода принято называть не только сами внешние порты A/B/C/D, но и разнообразные внутренние ресурсы - таймеры, коммуникационные интерфейсы, АЦП, и вспомогательные порты, нужные для управления всем этим внутренним хозяйством. Тебе нужно как следует познакомиться как с архитектурой АВР, так и с его системой команд и ассемблером - считай, что это даже не язык, а алфавит, без которого ты просто как без глаз, ног и рук.
У семисегментных индикаторов минимум 8 выводов - там минимум 7 светодиодов. Восьмой вывод - общая точка соединения вторых выводов светодиодов, в твоем случае она подключается к "-" питания (к "земле"). Сегменты обычно для удобства именуются буквами A..G, например, так:
- F -
| |
E A
| |
- G -
| |
D B
| |
- C -
Знаки "рисуются" таким же способом, как почтовый индекс на конвертах. Чтобы получить "1", нужно зажечь A и B, "3" - F,A,G,B,C. Между каждой ножкой порта (или твоего демультиплексора) и каждым соответствующим сегментом индикатора нужно включить токоограничивающий резистор, чтобы не сжечь ни выход, ни индикатор. Для 5-вольтового питания и сегментного тока в 20 мА (достаточно яркое свечение и гарантированное соблюдение максимально допустимого тока ноги порта) его номинал должен составлять порядка 150..200 Ом. Соответственно, подключив индикатор к порту В, как описано выше (сегмент A к PB0, B к PB1, C к PB2 и т.д.), зажечь цифру "3" можно следующими командами:
ldi r16,0b01100111 ; Загрузка в r16 константы, соответствующей семисегментному коду цифры "3"
out PORTB,r16 ; Вывод этого кода в PORTB (1 = сегмент горит )
Советую как следует проштудировать русскоязычные материалы по АВР на сайтах gaw.ru и atmel.ru