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

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

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

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

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

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

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

 
Опции темы
Непрочитано 02.01.2012, 13:30  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Как включать разные светодиоды одной подпрограммой ?

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

Завалите программу блоками условий, раз уж решили писать на асме.
Easyrider83 вне форума  
Непрочитано 02.01.2012, 13:41  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
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.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Как включать разные светодиоды одной подпрограммой ?

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

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

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

Цитата:
Сомнительная экономия получится. Я про этот вариант подумал. Но когда порта всего три, не уверен, что по циклам сэкономите. А вот сложности прибавится точно.
основное достоинство - время исполнения не зависит от значения входной переменной. Конечно в восприятии сложнее, но переброс между выводами портов тоже будет проще. Но тут все зависит от требований задачи.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 03.01.2012, 16:21  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 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.RU
 
Регистрация: 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:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot