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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Если важен размер кода, то да, сдвиги можно зациклить. А если быстродействие, то без разницы...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Engineer_Keen писал(а):А если быстродействие, то без разницы...
Если не видно разницы, то зачем платить больше? :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

А то смотрю народ совсем T-флагом не пользуется, забыли его
Открыл последний проект:
Found 18 matches for "bld".
Found 17 matches for "bst".
Found 5 matches for " set ".
Found 11 matches for "clt".
:dont_know:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Но манипуляций с С наверняка больше :wink: Ну ладно, не в этом суть :)))
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Engineer_Keen писал(а):Но манипуляций с С наверняка больше
Манипуляций с чем??? :shock:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Found 16 matches for "brtc".
Found 1 match for "brts".

Found 21 matches for "brcc".
Found 6 matches for "brcs".
Флаг C - естественный, т.е. устанавливается практически после любой операции, чего не скажешь о Т. Однако про Т тоже забывать не стоит, для битовых операций он очень удобен.
Реклама
Родился
Сообщения: 1
Зарегистрирован: Ср апр 04, 2012 20:58:13

Сообщение shaitan-tm »

Помогите написать программку для атмеги 8535 на ассеьлере
Настроить порт А на вывод низкого уровня, после этого осуществить вывод высокого уровня на ножку А0 через 0,512 мс.

Перенёс сюда
ploop
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

А конкретно - что не получается?
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

ploop писал(а): Флаг C - естественный, т.е. устанавливается практически после любой операции
Ну прям любой - ни в одной логической и далеко не во всех арифметических. А бит Т никогда не работает "автоматически", он всегда - инструмент в руках программиста.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

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

.include "m8535def.inc"

.org	0

	CLI	;запрет прерываний
	WDR			;останов WATCHDOG'a.
	LDI	R16,0b00011000
	OUT	WDTCR,R16
	LDI	R16,0b00010000
	OUT	WDTCR,R16

	CLR	R16
	OUT	PORTA,R16	;все лапки порта А = 0
	SER	R16
	OUT	DDRA,R16	;портА на выход

	LDI	R16,0x80	;задержка
m1:	DEC	R16		;зависит от
	BRNE	m1		;частоты тактирования

	LDI	R16,0x01
	OUT	PORTA,R16	;установка А0 = 1

loop:	RJMP	loop
Примерно так. Непонятна точка отсчета заданного времени.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Gudd-Head писал(а):Если не видно разницы, то зачем платить больше? :)))
Поэтому пишите на Си :) Тоже когда-то был ярым сторонником ассемблера, но лень взяла верх. Программы стали хуже, но на Си они появляются без особых усилий. Только сопроцессоры иногда пишу на ассемблере, такие, как ядро DDS в генераторе SG-642.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Сб окт 16, 2010 19:52:32
Откуда: Сургут

Сообщение ZERO.. »

Вопрос по AVR именно на Assemblere:
Есть программа "часы" она написана для AT89C2051, хочу написать сам для AT90S2313, в той книге написано:

*********Определение констант
bank0 equ 00000000B
bank1 equ 00001000B
*********Резервирование ячеек
BSEG
ORG 0
bufT: DBIT 1 ;буфер десятичной точки
Вопросы конкретики (2 штуки)
1)Вопрос: А что это за bank0, bank1-что то вроде регистров общего назначения?(temp, РОН, r16-r31)
2)Вопрос: Про "резервирование ячеек" вообще в голову ни что не приходит?
Вопрос абстракции
1) Алгоритм "часов" я понял так: все работает от вектора прерывания по переполнению 1-го единственного таймера, и динамическая индикация, и секундная точка и еденицы минут!!! (десятки минут и часы уже условием сравнения) ВОПРОС: а как это на одном таймере, он же должен сбрасываться после первого переполнения???
Вложения
p0020.gif
вот фрагмент книги...
(220.73 КБ) 423 скачивания
[color=#FF4000]Ищу где? и как? надо пользоваться личкой[/color]
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

bank0, bank1 - это просто константы.

"резервирование ячеек" - это наверно те же константы, только являются адресами ячеек памяти или регистров. В AT90S2313 адресация непрерывная, поэтому и ячейки памяти и регистры находятся в одном адресном пространстве, но доступ к регистрам(первые 32 ячейки памяти) наиболее быстрый.

В часах таймер используется только как источник точных интервалов времени. он просто отсчитывает интервалы, а с них уже формируются секунды, минуты и т.д.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

1) В 51-м контроллере в качестве регистров R0-R7 можно использовать 4 набора ячеек ОЗУ - те самые банки. Именно их начальные адреса задаются константами bank0,bank1.
2) Это просто задание конкретных адресов для конкретных переменных. BSEG - это область ОЗУ, в которой можно обращаться побитно. В AVR так не получится, придется резервировать 1 байт и обращаться к его битам через маски.
3)Alexeyslav в принципе объяснил. Таймер настраивается на самый маленький необходимый интервал (например секунда), а в его прерывании уже считаются секунды. При счете 60 они сбрасываются, а минуты прибавляются и т.д.
Друг Кота
Аватара пользователя
Сообщения: 15613
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

в 51 регистровый банк - выделенная область из 8 регистров, которая в данный момент доступна для производства вычислений (исполнения команд) с акумулятором или пересылок, логики , загрузок (основной набор команд)
у avr регистровый банк в таком понимании - весь набор регисров РОН/"регистровый файл" (но не память!)
однако в полное соответствие возможно сопоставить только R16-R32 (R0-R15 не допускают непосредственной загрузки константой и операций с непосредственными данными).
дополнительные сложности создаст также отсутствие команд сложения с константой и десятичной коррекции результата
для генерации опорного интервала предпочтительно применить 16-разрядный таймер в режиме генерации прерывания "по совпадению" (возможна корректировка ошибки хода) с тактированием от кварцованного генератора
:beer:
да и еще один момент - совмещенный контроллер дисплея/клавиатуры (чтоб индикатор равномерно светился и кнопушки опрашивались без сбоев)
у 51 аппаратный приоритетный контроллер прерываний, а у avr программное разрешение вложенных перываний мудрить надобно или брать единый для всех процессов базовый квантователь, а секунду формировать из некоторого количества строк развертки дисплея :cry:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

почти у всех мег таймер Т1 может работать в асинхронном режиме с внешним кварцем на 32768Гц, и получать прерывание в 1 сек.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15613
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

только интереснее не простое переполнение использовать, а прерывание по совпадению
а кто тактирует - 32768 или системный кварцевый - не суть важно (правда у системного на 20МГц точность естественно выше будет (при увеличении затрат потребляемой мощности по питанию) да и экономия в выводах... 8)
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

BOB51 писал(а):у системного на 20МГц точность естественно выше будет
Разве у 20мгц точность выше чем 32768 ?
Помоему это не так.....
Поясните пжлста, почему так считаете?
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

возьми разброс, допустим +/- 5% (хотя кварцы намного стабильнее), подели до частоты 1Гц и посмотри в каком случае точность выше
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

и посмотри в каком случае точность выше
Поделил. Получилось ±5%
Что я делаю не так? :)
Ответить

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