Ассемблер (ASM) для AVR в вопросах и ответах
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
И еще нескромный вопрос, сколько вам лет?
Ставим плюсы: )
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
DX168B писал(а):Кстати, вспомнил. У меня недавно был сбойный сектор на HDD в районе Студии. Возможно это из-за него. Сектор восстановил, но Студию придётся как я понял переустанавливать.
Мой пост выше. Это совсем меняет дело. Я сам вижу, что что-то у меня не так. Тем более мне 3 человека утверждают, что я ошибаюсь. Не я ошибаюсь, а мой компилятор тупит. Сейчас переустановлю и посмотрю. О результате доложу.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну всё правильно.
00000000
OR
00000001
OR
00001010
=
00001011
= 0x0B
Эту константу и заносите в регистр
00000000
OR
00000001
OR
00001010
=
00001011
= 0x0B
Эту константу и заносите в регистр
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
один из миллиона вероятность того, что это битый сектор HDD. уверен на 99% в природной упертости и на 99% в трусости.
Ставим плюсы: )
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
это вы к этому куску кода?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 в вопросах и ответах
Результат после переустановки:

За одно пропала проблема с 8й мегой.
Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)
За одно пропала проблема с 8й мегой.
- Вложения
-
- SCREEN.PNG
- (22.26 КБ) 729 скачиваний
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, тут я тупанул. Считал биты, писал как часла.Если да, то возьмите хоть виндовский калькулятор и переведите значения.....
За одно пропала проблема с 8й мегой. Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)
О как...
Вот и пронадейся на него. Может какая-нибудь опция была включена/выключена?
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да вроде проверял перед этим.
Всё было так-же как и сейчас.

И ещё одна проблема пропала в одном из моих исходников.
Применял в одной схеме совковый дешифратор для опроса кнопок. Там надо было инкрементировать один регистр и отправлять в порт, потом на одном из пинов проверить наличие лог.0. Только вот что-то не шло. Ошибок нет, а в железе не работало. Пришлось массивом это дело делать. Сейчас переделал по изначальной задумке, прошил и всё работает. Массив выкинул и сократил размер программы.
Всё было так-же как и сейчас.И ещё одна проблема пропала в одном из моих исходников.
Применял в одной схеме совковый дешифратор для опроса кнопок. Там надо было инкрементировать один регистр и отправлять в порт, потом на одном из пинов проверить наличие лог.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 в вопросах и ответах
Неужели Вы верите в это?ploop писал(а):DX168B писал(а):За одно пропала проблема с 8й мегой. Тупил всё-таки компилятор, принимая запись 0|1|3 за (1<<0)|(1<<1)|(1<<3)
О как...![]()
Вот и пронадейся на него. Может какая-нибудь опция была включена/выключена?
Новости в контакте:
Новости в контакте писал(а):Знакомая* добавила в друзья Ивана Ивановича.
Знакомая: - да не добавляла я никого и дружбу никому не предлагала, это контакт тупит.
Ставим плюсы: )
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А мне пофиг, верят мне или нет. У меня был "мистический"
баг и теперь его нет.
При ошибках всякое может быть. Не раз видел подобные приколы в виндовозе.
Даже в Visual Studio 6.0 было подобное с директивой #define После проверки диска всё встало на свои места.
Тем более за компом не я один сижу. После "проделок" сестры, винда быстро умирает.
Была-бы возможность - тогда бы и видео Вам снял. Но уже поздно и нет возможности.
При ошибках всякое может быть. Не раз видел подобные приколы в виндовозе.
Даже в Visual Studio 6.0 было подобное с директивой #define После проверки диска всё встало на свои места.
Тем более за компом не я один сижу. После "проделок" сестры, винда быстро умирает.
Была-бы возможность - тогда бы и видео Вам снял. Но уже поздно и нет возможности.
I am DX168B and this is my favourite forum on internet!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А я пользуюсь Виндовозным калькулятором.

- Вложения
-
- SCREEN.PNG
- (19.49 КБ) 769 скачиваний
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Господа, посоветуйте, как правильно сформировать меандр заданной частоты на одном из свободных протов (не предназначенных для работы со счетчиком)
Счетчик использовать буду 8-битный (Timer/Counter 0)
Ясно, что нужно сделать прерывание, но какое? По совпадению, по переполнению, или еще как-то (например PWM со скважностью 0.5)?
ЗЫ: "правильней" я имею ввиду с минимальными затратами ресурсов (дефицит тактов, а не объёма кода)
Счетчик использовать буду 8-битный (Timer/Counter 0)
Ясно, что нужно сделать прерывание, но какое? По совпадению, по переполнению, или еще как-то (например PWM со скважностью 0.5)?
ЗЫ: "правильней" я имею ввиду с минимальными затратами ресурсов (дефицит тактов, а не объёма кода)
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Господа коты. Вопрос не совсем по ассемблеру, но задам тут. Только без холиваров пожалуйста.
Вопрос в следующем: Составим к примеру простую программу:
Прерываниями пользоваться не будем. Сама программа по сути ничего не делает.
Она просто инициализирует стек и потом присваивает регистру r16 значение 0x0F.
ВНИМАНИЕ ВОПРОС:
Что будет с регистром r16, если МК сбросить внешним сбросом, не отключая питание?
Значение в регистре r16 сбросится вместе с МК или сохранится?
Вопрос в следующем: Составим к примеру простую программу:
Код: Выделить всё
.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 в вопросах и ответах
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!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что будет с регистром r16, если МК сбросить внешним сбросом, не отключая питание?
Значение в регистре r16 сбросится вместе с МК или сохранится?
Сохранится. Если ногу RESET подтянуть к земле, а потом отпустить - управление перебросится на вектор RESET, который идёт сразу за директивой .cseg (начало программного кода). Если вектора там нет - просто пойдёт код заново. Регистры и память сохраняются.
ЗЫ: за точность не ручаюсь, где-то вычитал...
В некоторых МК таймеры умеют аппаратно сбрасываться при прерывании по сравнению и сбрасывать счётчик своего подделителя (прескалера). Это я и применял с успехом в МК ATTINY26L
Так.. Но в принципе можно TCNT зарядить нужным числом и использовать переполнение... А то что-то запутался с этими сравнениями...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо за пример!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сравнение работает быстрее и не надо постоянно следить за таймером, чтобы постоянно заряжать его числом.
Тут один раз всё настроил и дальше он сам занимается. В процессе работы основной программы в любой момент можно забросить любое число в регистр сравнения и частота изменится.
Этот пример у меня работает в подмотчике электронного спидометра для Лады Самары.
Там я даже опрос кнопки приделал в основной программе для смены частоты.
Спросил из-за того, что у меня прикол сегодня был в одной программе.
От содержимого одного из регистров зависит состояние одного устройства.
При старте программы(подаче питания) в регистре должно быть 0x00
Как устройство меняет свой статус, то она сначала проверяет содержимое этого регистра и в зависимости от него уже выбирается один из его статусов и изменяется содержимое этого регистра на 0xFF. При следующей сработке, его содержимое снова меняется на 0x00.
Так вот: Прошил я значит девайс и стал проверять его работу. Всё было как надо.
Потом оставил его во втором статусе и подключил программатор. Зашил изменённую программу и отрубил RESET. Девайс запустился, но во втором статусе и из-за этого он запустился некорректно. Сейчас исправил, добавив принудительное присвоение регистру 0x00 в начале программы. Значение в этом регистре сохранилось даже после перепрошивки.
Тут один раз всё настроил и дальше он сам занимается. В процессе работы основной программы в любой момент можно забросить любое число в регистр сравнения и частота изменится.
Этот пример у меня работает в подмотчике электронного спидометра для Лады Самары.
Там я даже опрос кнопки приделал в основной программе для смены частоты.
ploop писал(а):Сохранится. Если ногу RESET подтянуть к земле, а потом отпустить - управление перебросится на вектор RESET, который идёт сразу за директивой .cseg (начало программного кода). Если вектора там нет - просто пойдёт код заново. Регистры и память сохраняются.
ЗЫ: за точность не ручаюсь, где-то вычитал...
Спросил из-за того, что у меня прикол сегодня был в одной программе.
От содержимого одного из регистров зависит состояние одного устройства.
При старте программы(подаче питания) в регистре должно быть 0x00
Как устройство меняет свой статус, то она сначала проверяет содержимое этого регистра и в зависимости от него уже выбирается один из его статусов и изменяется содержимое этого регистра на 0xFF. При следующей сработке, его содержимое снова меняется на 0x00.
Так вот: Прошил я значит девайс и стал проверять его работу. Всё было как надо.
Потом оставил его во втором статусе и подключил программатор. Зашил изменённую программу и отрубил RESET. Девайс запустился, но во втором статусе и из-за этого он запустился некорректно. Сейчас исправил, добавив принудительное присвоение регистру 0x00 в начале программы. Значение в этом регистре сохранилось даже после перепрошивки.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Значение в этом регистре сохранилось даже после перепрошивки.
А что ему будет то? Изменилась flash, а RAM никто не трогал
Вот поэтому я всегда инициализирую регистры. Привычка со времён "компьтерного" программирования - не раз шишки набивал...
Сравнение работает быстрее и не надо постоянно следить за таймером, чтобы постоянно заряжать его числом.
Тоно! А что включить, чтоб счетчик обнулялся сам? Что-то не понял из даташита...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да. У меня за это отвечал бит CTC1. А какой у тебя МК?
Работа таймера была следующей: как только таймер сровняется с регистром OCR, то срабатывало прерывание по сравнению и таймер автоматом сбрасывал регистр TCNT в 0x00. Ну и снова начинал считать сначала. Далее тот-же процесс.
Работа таймера была следующей: как только таймер сровняется с регистром OCR, то срабатывало прерывание по сравнению и таймер автоматом сбрасывал регистр TCNT в 0x00. Ну и снова начинал считать сначала. Далее тот-же процесс.
I am DX168B and this is my favourite forum on internet!
