Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.01.2012, 13:30
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Как включать разные светодиоды одной подпрограммой ?
У меня есть 20 светодиодов, допустим надо зажечь №5, я записываю в переменную
и вызываю процедуру зажигания светодиода. Подскажите как в процедуре по параметру в temp включать нужный пин нужного порта ? в меге-8 три порта и по 7, 8 пинов в каждом. Не понимаю как привязать к номеру каждого диода порт и пин ?
|
|
|
|
02.01.2012, 13:33
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
Завалите программу блоками условий, раз уж решили писать на асме.
|
|
|
|
02.01.2012, 13:41
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
видимо так и придётся.
|
|
|
|
02.01.2012, 14:07
|
|
Частый гость
Регистрация: 29.01.2010
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
что-то типа того:
cpi temp, 1 ;сравнение с канстантой
breq metka1 ;переход по равно на метку зажигания нужного светодиода
..............
cpi temp, 5
breq metka5
..........
metka1:
............ ;зажигание первого
metka5:
.......... ;зажигание пятого
|
|
|
|
02.01.2012, 14:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
А использовать массив масок никто не додумался? Функция возвращает адрес порта и маску. Далее обычное логическое И/ИЛИ
__________________
misterdi<@>i.ua
|
|
|
|
02.01.2012, 14:17
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
Сомнительная экономия получится. Я про этот вариант подумал. Но когда порта всего три, не уверен, что по циклам сэкономите. А вот сложности прибавится точно.
|
|
|
|
02.01.2012, 15:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
о масках я упоминал здесь, какого хрена новые темы создаете, putmannn? ничему не учитесь...
MisterDi правильно сказал, но я делал в таком случае проще - порты ведь работают только на выход, поэтому маски портов командой OUT побайтно выводятся в порты, биты масок обрабатываются в программе (взводятся/сбрасываются). еще были глобальные (приоритетные) маски, которые логическим И складывались с масками портов, но это больше нужно в производстве
|
|
|
|
02.01.2012, 21:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
Цитата:
|
Сомнительная экономия получится. Я про этот вариант подумал. Но когда порта всего три, не уверен, что по циклам сэкономите. А вот сложности прибавится точно.
|
основное достоинство - время исполнения не зависит от значения входной переменной. Конечно в восприятии сложнее, но переброс между выводами портов тоже будет проще. Но тут все зависит от требований задачи.
__________________
misterdi<@>i.ua
|
|
|
|
03.01.2012, 16:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
Всего три варианта:
1)последовательное сравнение числа и переход на
соответствующую подпрограмму, подходит для малого количества переключаемых пинов.
Код:
|
cpi temp,0
breq rutin1
cpi temp,1
breq rutin2
cpi temp,2
breq rutin3
rutin1:
ldi temp,maskpin1
rutin2:
ldi temp,maskpin2
rutin3:
ldi temp,maskpin3 |
2)с таблицей адрессов подпрограм и переход по указателю на
соответствующую подпрограмму.
Код:
|
ZL,adrtabl
ZH,adrtabh
add zl,temp
brcc pc+2
inc zh
lpm yl
adiw z,1
lpm yh
переход по указателю Y
adrtabl:
adrrutin1
adrrutin2
adrrutin3
rutin1:
ldi temp,maskpin1
rutin2:
ldi temp,maskpin2
rutin3:
ldi temp,maskpin3 |
3)с таблицей масок и номеров портов, извлечение масок по указателю, и инверсия соответствующего порта
Код:
|
ZL,adrtabl
ZH,adrtabh
add zl,temp
brcc pc+2
inc zh
lpm yl
adiw z,1
lpm yh
cpi yh,0
brne L1
invert port1,yl
L1
cpi yh,1
brne l2
invert port2,yl
L2
invert port3,yl
adrtabl:
mask pin1
number port1
mask pin2
number port2
mask pin3
number port3 |
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 03.01.2012 в 16:30.
|
|
|
|
03.01.2012, 17:53
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Как включать разные светодиоды одной подпрограммой ?
На языке C это заниммает 3 строчки. Может, пора начть перебираться с асма на C?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:20.
|
|