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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

И еще нескромный вопрос, сколько вам лет?
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

DX168B писал(а):Кстати, вспомнил. У меня недавно был сбойный сектор на HDD в районе Студии. Возможно это из-за него. Сектор восстановил, но Студию придётся как я понял переустанавливать.

Мой пост выше. Это совсем меняет дело. Я сам вижу, что что-то у меня не так. Тем более мне 3 человека утверждают, что я ошибаюсь. Не я ошибаюсь, а мой компилятор тупит. Сейчас переустановлю и посмотрю. О результате доложу.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Ну всё правильно.
00000000
OR
00000001
OR
00001010
=
00001011
= 0x0B

Эту константу и заносите в регистр
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

один из миллиона вероятность того, что это битый сектор HDD. уверен на 99% в природной упертости и на 99% в трусости.
Ставим плюсы: )
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

ploop писал(а):Ну всё правильно.
00000000
OR
00000001
OR
00001010
=
00001011
= 0x0B

Эту константу и заносите в регистр
это вы к этому куску кода?

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

sbr temp,0|1|3

Если да, то возьмите хоть виндовский калькулятор и переведите значения.....
0=00000000
1=00000001
3=00000011
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Результат после переустановки:
Изображение
За одно пропала проблема с 8й мегой. :) Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)
Вложения
SCREEN.PNG
(22.26 КБ) 729 скачиваний
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Если да, то возьмите хоть виндовский калькулятор и переведите значения.....
Да, тут я тупанул. Считал биты, писал как часла.

За одно пропала проблема с 8й мегой. Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)

О как... :shock:
Вот и пронадейся на него. Может какая-нибудь опция была включена/выключена?
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Да вроде проверял перед этим. :dont_know: Всё было так-же как и сейчас.
Изображение

И ещё одна проблема пропала в одном из моих исходников.
Применял в одной схеме совковый дешифратор для опроса кнопок. Там надо было инкрементировать один регистр и отправлять в порт, потом на одном из пинов проверить наличие лог.0. Только вот что-то не шло. Ошибок нет, а в железе не работало. Пришлось массивом это дело делать. Сейчас переделал по изначальной задумке, прошил и всё работает. Массив выкинул и сократил размер программы. :)
Вложения
SCREEN.PNG
(19.85 КБ) 742 скачивания
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

ploop писал(а):
DX168B писал(а):За одно пропала проблема с 8й мегой. Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)

О как... :shock:
Вот и пронадейся на него. Может какая-нибудь опция была включена/выключена?
Неужели Вы верите в это? :shock: Чем-то похожа ситуация с моей знакомой:
Новости в контакте:
Новости в контакте писал(а):Знакомая* добавила в друзья Ивана Ивановича.

Знакомая: - да не добавляла я никого и дружбу никому не предлагала, это контакт тупит.
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

А мне пофиг, верят мне или нет. У меня был "мистический" :))) баг и теперь его нет.
При ошибках всякое может быть. Не раз видел подобные приколы в виндовозе.
Даже в Visual Studio 6.0 было подобное с директивой #define После проверки диска всё встало на свои места.
Тем более за компом не я один сижу. После "проделок" сестры, винда быстро умирает.
Была-бы возможность - тогда бы и видео Вам снял. Но уже поздно и нет возможности.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

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

Я опять к этой фразе :) У меня в гноме гораздо удобней калькулятор. Выставляешь биты внизу и видишь результат, либо наоборот - срисовываешь быты с результата в любой СС

Изображение
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

А я пользуюсь Виндовозным калькулятором. :)
Изображение
Вложения
SCREEN.PNG
(19.49 КБ) 769 скачиваний
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Господа, посоветуйте, как правильно сформировать меандр заданной частоты на одном из свободных протов (не предназначенных для работы со счетчиком)

Счетчик использовать буду 8-битный (Timer/Counter 0)
Ясно, что нужно сделать прерывание, но какое? По совпадению, по переполнению, или еще как-то (например PWM со скважностью 0.5)?

ЗЫ: "правильней" я имею ввиду с минимальными затратами ресурсов (дефицит тактов, а не объёма кода)
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Господа коты. Вопрос не совсем по ассемблеру, но задам тут. Только без холиваров пожалуйста. :)
Вопрос в следующем: Составим к примеру простую программу:

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

.cseg
.org 0x0000
ldi r16, Low(RAMend)
out SPL, r16
ldi r16, 0x0F
LOOP: rjmp LOOP

Прерываниями пользоваться не будем. Сама программа по сути ничего не делает.
Она просто инициализирует стек и потом присваивает регистру r16 значение 0x0F.
ВНИМАНИЕ ВОПРОС:
Что будет с регистром r16, если МК сбросить внешним сбросом, не отключая питание?
Значение в регистре r16 сбросится вместе с МК или сохранится?
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ploop писал(а):Господа, посоветуйте, как правильно сформировать меандр заданной частоты на одном из свободных протов (не предназначенных для работы со счетчиком)

Счетчик использовать буду 8-битный (Timer/Counter 0)
Ясно, что нужно сделать прерывание, но какое? По совпадению, по переполнению, или еще как-то (например PWM со скважностью 0.5)?

ЗЫ: "правильней" я имею ввиду с минимальными затратами ресурсов (дефицит тактов, а не объёма кода)

Я помню применял прерывание по совпадению таймера со значением в регистре OCR
В некоторых МК таймеры умеют аппаратно сбрасываться при прерывании по сравнению и сбрасывать счётчик своего подделителя (прескалера). Это я и применял с успехом в МК ATTINY26L
Вот даже пример:
Настройка таймера:

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

ldi               temp0,               0xAF ;Наше число для сравнения
out               OCR1C,               temp0
ldi               temp0,               (1<<OCIE1B)
out               TIMSK,               temp0 ;Разрешение прерывания
lds               temp0,                                     (1<<CTC1)+(1<<CS13)+(1<<CS10)
out               TCCR1B,               temp0 ;подделитель и прочее

Прерывание:

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

TIM_COMP1B:                     ;Прерывание таймера 1
in   temp1,   SREG
cpi   front,      0x00
breq   SET1
cbi   PortA,   6
clr   front
out   SREG,   temp1
reti
SET1:
sbi   PortA,   6
ser   front
out   SREG,   temp1
reti

Делалось с приблизительным расчётом для МК ATTINY26 и на скорую руку.
Обе ветви съедают одинаковое количество тактов и в итоге интервал и длинна импульса были практически одинаковыми.
Последний раз редактировалось DX168B Чт янв 27, 2011 22:02:21, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Что будет с регистром r16, если МК сбросить внешним сбросом, не отключая питание?
Значение в регистре r16 сбросится вместе с МК или сохранится?

Сохранится. Если ногу RESET подтянуть к земле, а потом отпустить - управление перебросится на вектор RESET, который идёт сразу за директивой .cseg (начало программного кода). Если вектора там нет - просто пойдёт код заново. Регистры и память сохраняются.

ЗЫ: за точность не ручаюсь, где-то вычитал...

В некоторых МК таймеры умеют аппаратно сбрасываться при прерывании по сравнению и сбрасывать счётчик своего подделителя (прескалера). Это я и применял с успехом в МК ATTINY26L

Так.. Но в принципе можно TCNT зарядить нужным числом и использовать переполнение... А то что-то запутался с этими сравнениями...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Спасибо за пример!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Сравнение работает быстрее и не надо постоянно следить за таймером, чтобы постоянно заряжать его числом.
Тут один раз всё настроил и дальше он сам занимается. В процессе работы основной программы в любой момент можно забросить любое число в регистр сравнения и частота изменится.
Этот пример у меня работает в подмотчике электронного спидометра для Лады Самары.
Там я даже опрос кнопки приделал в основной программе для смены частоты.
ploop писал(а):Сохранится. Если ногу RESET подтянуть к земле, а потом отпустить - управление перебросится на вектор RESET, который идёт сразу за директивой .cseg (начало программного кода). Если вектора там нет - просто пойдёт код заново. Регистры и память сохраняются.

ЗЫ: за точность не ручаюсь, где-то вычитал...

Спросил из-за того, что у меня прикол сегодня был в одной программе. :)))
От содержимого одного из регистров зависит состояние одного устройства.
При старте программы(подаче питания) в регистре должно быть 0x00
Как устройство меняет свой статус, то она сначала проверяет содержимое этого регистра и в зависимости от него уже выбирается один из его статусов и изменяется содержимое этого регистра на 0xFF. При следующей сработке, его содержимое снова меняется на 0x00.
Так вот: Прошил я значит девайс и стал проверять его работу. Всё было как надо.
Потом оставил его во втором статусе и подключил программатор. Зашил изменённую программу и отрубил RESET. Девайс запустился, но во втором статусе и из-за этого он запустился некорректно. Сейчас исправил, добавив принудительное присвоение регистру 0x00 в начале программы. Значение в этом регистре сохранилось даже после перепрошивки. :)))
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Значение в этом регистре сохранилось даже после перепрошивки.

А что ему будет то? Изменилась flash, а RAM никто не трогал :)
Вот поэтому я всегда инициализирую регистры. Привычка со времён "компьтерного" программирования - не раз шишки набивал...

Сравнение работает быстрее и не надо постоянно следить за таймером, чтобы постоянно заряжать его числом.

Тоно! А что включить, чтоб счетчик обнулялся сам? Что-то не понял из даташита...
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Да. У меня за это отвечал бит CTC1. А какой у тебя МК?
Работа таймера была следующей: как только таймер сровняется с регистром OCR, то срабатывало прерывание по сравнению и таймер автоматом сбрасывал регистр TCNT в 0x00. Ну и снова начинал считать сначала. Далее тот-же процесс.
I am DX168B and this is my favourite forum on internet!
Ответить

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