hardbar Опубликовано 13 августа, 2013 Поделиться Опубликовано 13 августа, 2013 (изменено) Вот понемногу начал изучать мк вроде бы разобрался с таймером. И тут при создании нового проекта столкнулся с проблемой цикла. Нужно отрезок программы повторить несколько раз. То есть зациклить . Искал в интернете команду, но поиск не принес успеха. Прошу помочь кто знаком с avr asembler как же вести код в цикл. ЗЫ: если не так подписал тему. Изменено 13 августа, 2013 пользователем hardbar 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
o_l_e_g Опубликовано 13 августа, 2013 Поделиться Опубликовано 13 августа, 2013 DJNZ 1 Errare humanum est. Коли людЯм позволено, что же о нас то говорить! Ссылка на комментарий Поделиться на другие сайты Поделиться
Реле, вентиляторы, корпуса, разъемы, а так же любые электронные компоненты в нашем каталоге! Бесплатная доставка + 15% кэшбэк + скидки!Перейти на сайт ТМ Электроникс Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
hardbar Опубликовано 13 августа, 2013 Автор Поделиться Опубликовано 13 августа, 2013 А можно её в коде показать как она работает. 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Григорий Т. Опубликовано 13 августа, 2013 Поделиться Опубликовано 13 августа, 2013 Любая команда условного перехода подойдёт, там их много. Но для этого нужно знать, при каких условиях у вас цикл продолжается, а при каких - нет. 1 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке. Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
hardbar Опубликовано 13 августа, 2013 Автор Поделиться Опубликовано 13 августа, 2013 Может. Поставить чтоб в регистер +1 и каждый раз проверать если не дошло до константы в начало кода. Так работать будет?? 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Литиевые батарейки и аккумуляторы от мирового лидера EVE в КомпэлКомпания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
hardbar Опубликовано 13 августа, 2013 Автор Поделиться Опубликовано 13 августа, 2013 (изменено) У меня получилось в вести код в цикл командой Brlo .def zad=r17 .equ kal=4 m1: clr temp out portb,temp ldi temp,0b00000100 out portb,temp rcall wait1 inc zad cpi zad,kal brlo m1 clr zad Но я не смог сделать задержку между повторением команд. и теперь у меня не 4 импульса а один но длиный. Изменено 13 августа, 2013 пользователем hardbar 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 13 августа, 2013 Поделиться Опубликовано 13 августа, 2013 Для управления битами порта есть команды попроще. А в чём проблема с задержкой? 2 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 Можно так. Задержка у вас заложена в wait1. Сделайте ее тело (wait1) и все заработает. ldi temp,4 m1: sbi portb,2 nop cbi portb,2 rcall wait1 dec temp breq m1 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 (изменено) Скорее так. ldi temp,4 m1: cbi portb,2 rcall wait1 sbi portb,2 rcall wait1 dec temp brne m1 И пауза и импульс должны быть обозначены нужной длительностью. Изменено 14 августа, 2013 пользователем Григорий Т. 1 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
o_l_e_g Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 (изменено) А можно её в коде показать MOV "регистр","количество проходов" M: nop . . ' тело цикла . DJNZ "регистр", М Изменено 14 августа, 2013 пользователем o_l_e_g 1 Errare humanum est. Коли людЯм позволено, что же о нас то говорить! Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 o_l_e_g, вы уверены, что эта команда есть в AVR? 1 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
o_l_e_g Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 Да, Вы правы! похоже нет. Тогда, делаем декремент и сравнение разными командами. 1 Errare humanum est. Коли людЯм позволено, что же о нас то говорить! Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 (изменено) Вот сделал. Работает. .include "tn13adef.inc" .list .def temp=r16 .def zad=r17 .equ kdel=50 .equ kal=4 .cseg .org 0 ldi temp,ramend out spl,temp ldi temp,0b11111111 out ddrb,temp ldi temp,0b00000000 out portb,temp ldi temp,0x05 out tccr0b,temp ldi temp,0x80 out acsr,temp main: m1: clr temp out portb,temp rcall wait1 ldi temp,0b00000100 out portb,temp rcall wait1 inc zad cpi zad,kal brlo m1 clr zad rcall wait1 m2: clr temp out portb,temp rcall wait1 ldi temp,0b00001000 out portb,temp rcall wait1 clr temp out portb,temp inc zad cpi zad,kal brlo m2 clr zad rcall wait1 rjmp main wait1: push temp push zad ldi temp,0 out tcnt0,temp wt1: in temp,tcnt0 cpi temp,kdel brlo wt1 pop zad pop temp ret Изменено 14 августа, 2013 пользователем hardbar 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 Мы за вас рады 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 Но мне кажется что для моей задачи очень много кода. Прошу прокоментрировать. Или это нормально. Задача:мерцание 4 раза led1 мерцание 4 раза led2. Бесконечный цикл 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 Вам же привели фрагмент кода в #9. Он проще. 1 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 (изменено) Григорий Т. Спасибо за часть кода очень помог. С его помощю я выбросил один регистр и константу. Вот укороченый код. l.include "tn13adef.inc" .list .def temp=r16 .equ kdel=50 .cseg .org 0 ldi temp,ramend out spl,temp ldi temp,0b11111111 out ddrb,temp ldi temp,0b00000000 out portb,temp ldi temp,0x05 out tccr0b,temp ldi temp,0x80 out acsr,temp main: ldi temp,4 m1: sbi portb,2 rcall wait1 cbi portb,2 rcall wait1 dec temp brne m1 rcall wait1 ldi temp,4 m2: sbi portb,3 rcall wait1 cbi portb,3 rcall wait1 dec temp brne m2 rcall wait1 rjmp main wait1: push temp ldi temp,0 out tcnt0,temp wt1: in temp,tcnt0 cpi temp,kdel brlo wt1 pop temp ret Вот что получилось. Самое то что надо было. Изменено 14 августа, 2013 пользователем hardbar 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 (изменено) Попробуй еще так: .list .def temp=r16 .equ kdel=50 .cseg .org 0 ldi temp,ramend out spl,temp ser temp out ddrb,temp clr temp out portb,temp ldi temp,0x05 out tccr0b,temp ldi temp,0x80 out acsr,temp clr r18 main: ldi r17,ob00000100 rcall cicle rcall wait1 ldi r17,ob00001000 rcall cicle rcall wait1 rjmp main cicle: ldi temp,4 m1: out portb,r17 rcall wait1 out portb,r18 rcall wait1 dec temp brne m1 ret wait1: clr r19,0 out tcnt0,r19 wt1: in r19,tcnt0 cpi r19,kdel brlo wt1 ret Изменено 14 августа, 2013 пользователем Геннадий 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 Как вариант. Но я пока придержусь. Того что есть. 2 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 Но мне кажется что для моей задачи очень много кода. Вот те раз. В моем примере кода меньше, при той же функциональности, а ему уже не надо. С его помощю я выбросил один регистр и константу. А я убрал еще дублирующий цикл. Не бойтесь пользоваться регистрами общего назначения, они в большинстве своем простаивают, зато борьба за их экономию съедает часть тактов на работу со стеком (кстати, убрал эту задачу) и частые установки и очистки одного регистра (рабочей лошадки). 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 Возьму на заметку ваши слова. А про регистры самое то. 1 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
hardbar Опубликовано 14 августа, 2013 Автор Поделиться Опубликовано 14 августа, 2013 (изменено) Потихоньку дошел до прерываный. Но вот немогу понять почему не работает. Вроде бы код верен. Прошу посмотреть если что подправить. .include "tn13adef.inc" .list .def temp=r16 ;переименуем регистр под удобное имя .equ kdel=50 ;добавим конатснту .equ kdel2=100 ;добавим константу .cseg .org 0 ;начальный адрес rjmp reset;прерывание по сбросу rjmp int_0;прерывание по порту int0 reset: ; ldi temp,ramend ;чтото с памятю связано out spl,temp ; ldi temp,0b11111100;настройка порта на out ddrb,temp ;вод.вывод ldi temp,0b00000011;подтяжка резистрами out portb,temp ;установка в порте лог.0 ldi temp,0x05 ;пред-делитель out tccr0b,temp ;таймера ldi temp,0x80 ;отключение out acsr,temp ;чегото там sei ;завершенеи прерывание по сбросу main: ;имя части програмы ldi temp,10 ;запись в РОН числа 10 m1: ;имя части програмы sbi portb,2 ;установка порта в 0 rcall wait1 ;вызов задержки cbi portb,2 ;установка порта в 1 rcall wait1 ;вызов задержки dec temp ;РОН:=РОН-1 brne m1 ;проверка РОНа не 0 ли да едем дальше не rcall wait1 ;возвращаемся по метке ldi temp,10 ;запись в РОН числа 10 m2: sbi portb,3 ;установка порта в 0 rcall wait1 ;вызов задержки cbi portb,3 ;установка порта в 1 rcall wait1 ;вызов задержки dec temp ;РОН:=РОН-1 brne m2 ;проверка РОНа не 0 ли да едем дальше не rcall wait1 ;возвращаемся по метке rjmp main ;безусловный переход int_0: ;метка вызова прерываный по порту int0 m3: sbi portb,2 ;установка порта в 0 rcall wait2 ;вызов задержки cbi portb,2 ;установка порта в 1 rcall wait2 ;вызов задержки m4: sbi portb,3 ;установка порта в 0 rcall wait2 ;вызов задержки cbi portb,3 ;установка порта в 1 rcall wait2 ;вызов задержки reti ;конец прерывания wait1: ;Все что снизу задержка на таймере. push temp ldi temp,0 out tcnt0,temp wt1: in temp,tcnt0 cpi temp,kdel brlo wt1 pop temp ret wait2: push temp ldi temp,0 out tcnt0,temp wt2: in temp,tcnt0 cpi temp,kdel2 brlo wt2 pop temp ret Изменено 14 августа, 2013 пользователем hardbar 1 Очень люблю спасибку. Спасибка ни кого еще не убила. Професия: Електро-механик. Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 hardbar, очень полезная привычка, да и просто, признак хорошего тона, писать комментарии к коду. Чем подробнее, тем лучше. Что именно не работает, и как должно? 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
korsaj Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 (изменено) hardbar, вам совет - разбивайте программу на смысловые блоки. Для этого можно использовать всевозможные символы: ;----------------------------------------------------------------------------------- ; Объявление переменных, констант ; и сопоставление имен ;----------------------------------------------------------------------------------- .equ cSeg1 = 0x01 ;Первый сегмент ;........................................................................................................ .def tmp0 = r16 ;Временный регистр 0 ;==================================================== ; Основной цикл ;==================================================== main: nop nop ldi tmp0, cSeg1 out PORTA,tmp0 rjmp main ;==================================================== Изменено 14 августа, 2013 пользователем korsaj 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 14 августа, 2013 Поделиться Опубликовано 14 августа, 2013 И еще признак. Повторяющиеся алгоритмы лучше один раз описать в виде функции или макроса и вызывать их по мере надобности, передавая в них параметры необходимые для конкретного случая. Например задержки (передается длительность) или алгоритм вывода в порт (передается номер линии). Таким образом код будет компактнее и легче. См. мой примерчик. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.