Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как включать разные светодиоды одной подпрограммой ?

Непрочитано 02.01.2012, 13:30  
putmannn
Почётный гражданин KAZUS.RUN
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Как включать разные светодиоды одной подпрограммой ?

У меня есть 20 светодиодов, допустим надо зажечь №5, я записываю в переменную
Цитата:
ldi temp, 5
и вызываю процедуру зажигания светодиода. Подскажите как в процедуре по параметру в temp включать нужный пин нужного порта ? в меге-8 три порта и по 7, 8 пинов в каждом. Не понимаю как привязать к номеру каждого диода порт и пин ?
Реклама:
putmannn вне форума  
Непрочитано 02.01.2012, 13:33  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

Завалите программу блоками условий, раз уж решили писать на асме.
Easyrider83 вне форума  
Непрочитано 02.01.2012, 13:41  
putmannn
Почётный гражданин KAZUS.RUN
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

видимо так и придётся.
putmannn вне форума  
Непрочитано 02.01.2012, 14:07  
livsha
Частый гость
 
Регистрация: 29.01.2010
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
livsha на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

что-то типа того:

cpi temp, 1 ;сравнение с канстантой
breq metka1 ;переход по равно на метку зажигания нужного светодиода
..............
cpi temp, 5
breq metka5
..........
metka1:
............ ;зажигание первого
metka5:
.......... ;зажигание пятого
livsha вне форума  
Непрочитано 02.01.2012, 14:13  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

А использовать массив масок никто не додумался? Функция возвращает адрес порта и маску. Далее обычное логическое И/ИЛИ
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 02.01.2012, 14:17  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

Сомнительная экономия получится. Я про этот вариант подумал. Но когда порта всего три, не уверен, что по циклам сэкономите. А вот сложности прибавится точно.
Easyrider83 вне форума  
Непрочитано 02.01.2012, 15:41  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,009
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

о масках я упоминал здесь, какого хрена новые темы создаете, putmannn? ничему не учитесь...
MisterDi правильно сказал, но я делал в таком случае проще - порты ведь работают только на выход, поэтому маски портов командой OUT побайтно выводятся в порты, биты масок обрабатываются в программе (взводятся/сбрасываются). еще были глобальные (приоритетные) маски, которые логическим И складывались с масками портов, но это больше нужно в производстве
jump вне форума  
Непрочитано 02.01.2012, 21:23  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

Цитата:
Сомнительная экономия получится. Я про этот вариант подумал. Но когда порта всего три, не уверен, что по циклам сэкономите. А вот сложности прибавится точно.
основное достоинство - время исполнения не зависит от значения входной переменной. Конечно в восприятии сложнее, но переброс между выводами портов тоже будет проще. Но тут все зависит от требований задачи.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 03.01.2012, 16:21  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию 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.
picavr вне форума  
Непрочитано 03.01.2012, 17:53  
tanq
Гражданин KAZUS.RUN
 
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

На языке C это заниммает 3 строчки. Может, пора начть перебираться с асма на C?
tanq вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мотор-шпиндель 4051. Как правильно включать? krian Производственное оборудование 2 08.07.2011 11:48
Как поочередно выводить одну и ту же информацию на разные выводы AVR контроллера zerion Микроконтроллеры, АЦП, память и т.д 20 13.01.2010 17:23
Как подключить RGB-светодиоды? TM64 Источники питания и свет 6 24.02.2009 09:19
Использование одной библиотеки I2C на разные порты vovan_zh Микроконтроллеры, АЦП, память и т.д 1 04.04.2006 12:16
[Решено] Как подключить два монитора к одной SVGA-карте? Vik Делимся опытом 19 06.12.2005 13:01


Часовой пояс GMT +4, время: 10:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.