Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

И прерывания есть и порт вход/выход настроен. Как и сказали. :)
Однако, в старшем полубайте входы и на них кнопки (подтяжки), которые в прерывании опрашиваются.
А вторая младшая половина настроена на выход, которая тоже меняется в том же прерывании...

Почему я и хотел, чтобы старшая половина была без изменений, когда младшая перезаписывается. :roll:
Станислав
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Тогда in temp1,PIND не стоит использовать, используйте in temp1,PORTD. А то будете включать выключать подтяжку в зависимости от нажатия кнопок.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Блин. Точно! :facepalm: :? :shock:
Как это я сам недопетрил?!

Спасибо.
:beer:
Станислав
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Z_h_e писал(а):Тогда in temp1,PIND не стоит использовать, используйте in temp1,PORTD. А то будете включать выключать подтяжку в зависимости от нажатия кнопок.
И я сразу не обратил внимание. Устал, тупо скопировал, добавил и отправил.
На самом деле не так уж и ошибочно. PINx - физическое состояние порта. PORTx - что выводится в порт. За счет PINx можно следить за КЗ портов на питание.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

А если используется АЦП на этом порту? Иногда подтяжку лучше включить отдельно, перед опросом кнопок.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Если есть свободный регистр и старшая половина порта неизменна, то код можно сократить на одну команду.

Код: Выделить всё

//Переменная в r17
//R16 в старшем полубайте старший полубайт порта

andi r16,0xF0
or r16,r17
out PortD,r16
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Как вариант

Код: Выделить всё

.def	R_KEY=R2
.def	R_OUT=R1

ISR_Y:
; В R_OUT предварительно подготовленные данные x
	OUT	PORTB,R_OUT	; R_OUT=0b1111xxxx 
	IN	R_KEY,PINB	; приём данных с кнопок
;*****
;*****
;*****
	RETI
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Точно ж, если старший полубайт порта неизменен, то в старшем полубайте переменной надо держать не нули, а сразу старшие биты порта. Тогда вообще все одну команду превращается.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Точно ж, если старший полубайт порта неизменен, то в старшем полубайте переменной надо держать не нули, а сразу старшие биты порта.
Вот если бы он назвал проц , то возможно весь код превратился в одну команду out port,переменная
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Привет всем. Снова я с глупым вопросом, но вроде простым. ))))

Есть у меня две переменные, в которых лежат десятки и единицы одного числа. Надо эти ДВЕ переменные свести к одной в упакованном ВСD формате.

Как это проще?

Понимаю, что надо ту, что с десятками перевернуть, а потом их вместе склеить. Вот это "склеить" не могу догнать. Вроде делал когда-то, но забыл. :facepalm: :oops:
Станислав
Друг Кота
Аватара пользователя
Сообщения: 4906
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Так вроде же обычное ИЛИ. Первую - развернуть (SWAP), домножить побитово на 0x0F (ANDI), вторую просто домножить, а потом OR над ними. Вроде как 4 операции получается.

P.S. Что-то не подумал, что если исходные числа гарантировано меньше 0x0F, то ANDI над ними и не нужно. Хватит SWAP и OR.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6349
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Так еще зависит - как они исходно лежат - как бинарные или же символьные: напр., 35 - байт десятков 3 или '3' , единиц
5 или '5' . Так что andi Rx,0x0F по любому не помешает :)
СпойлерХорошо отвечать СКАЗОЧНИКу : вопросы обычно простые, а плюсами он щедро делится :)) :)
Последний раз редактировалось Jack_A Сб июн 18, 2016 10:04:11, всего редактировалось 1 раз.
Изображение
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Не, они у меня тупо бинарные. В одной десятки минут, в другой единицы минут.

Сделал, работает. Всем спасибо!

Код: Выделить всё

	mov MIN, DesMin
	swap MIN
	mov temp, EdMin
	or MIN, temp

		ldi ADDR, 0x01	; Устанавлиаем минуты 
		mov DATA, MIN
		rcall WRITE_IIC

	mov HUR, DesHr
	swap HUR
	mov temp, EdHr
	or HUR, temp

		ldi ADDR, 0x02	; Устанавлиаем часы
		mov DATA, HUR
		rcall WRITE_IIC
Станислав
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

СКАЗОЧНИК писал(а):...
Если честно, я порой хренею от тупых вопросов. И не нужно тут обижаться, достаточно взять книжку по МК AVR и посмотреть систему команд. Так нет же, надо пойти на форум и напрячь людей, которые должны потратить свое время на разжевывание элементарщины.
Купите или скачайте книгу Вольфганг Трамперт "AVR-RISC микроконтроллеры фирмы ATMEL". В этой книге доступным языком и достаточно подробно расписано все, что нужно для самостоятельного освоения AVR. Плюс примеры программ. Преобразование чисел, работа с аппаратными таймерами, работа с ЖКИ и так далее.
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Так, не нравится, не заходите в тему и не отвечайте.

А так ваш ответ похож лишь на офтоп не по теме. Как и мой в принципе.
Станислав
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

СКАЗОЧНИК писал(а):...
Не нужно вести себя как эгоист и единоличник. Думайте о том, что отвечая на вопросы любого участника, все отвечающие тратят свое ЛИЧНОЕ время, а этот ресурс невосполним.
Я не против потратить свое время, чтобы ответить на вопросы, ну так задавайте нормальные вопросы, на которые ИНТЕРЕСНО ответить.
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Бывает голова перестает соображать на самом простом месте, хоть убей!
Сам написал все и так. И динамическую индикацию и кнопки и протокл обмена с RTC (IIC) полностью. Иногда сам не понимаю, почему так происходит. :) :)
Станислав
Опытный кот
Аватара пользователя
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

Сообщение Серый_ »

Ребят, при прошивке основной проги - обнуляется (FF-ится) EEPROM, возможно потому, что *.eep - сформирован отдельно от основной проги и впихан принудительно.
1) Как сделать так, чтобы он не обнулялся?
2) Или на крайняк, лился автоматом?
В прогу для этого привносится:
.eseg 00 01 00 03 04 05 06 07 00 09 0A 0B 0C 0D 0E 00 или...
.eseg .db 00 01 00 03 04 05 06 07 00 09 0A 0B 0C 0D 0E 00 или ещё как-то? :)
Последний раз редактировалось Серый_ Вс авг 07, 2016 18:58:35, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 6349
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Сказал бы хоть, каким программатором заливаешь. Там должна быть галка - что-то вроде "Сохранять EEPROM" . И не тискать кнопку "Программировать все", а "Программировать флеш" . Не зная программатора и оболочки, точнее не скажешь.
Изображение
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Или при работе в Atmel Studio ставить fuse bit eesave в единичку...
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Ответить

Вернуться в «AVR»