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

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

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

Сообщение DX168B »

Про команду sei перед стартом таймера не забыл?
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

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

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

Сообщение ibiza11 »

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

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

Сообщение DX168B »

Сейчас закину твой код себе и посмотрю, что выйдет. Может баг студии или что-то не так сделано в программе.
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

;****************Прерывания от таймеров/счетчиков********************
ldi r16, 0b0 ; Загрузим в рабочий регистр настройку прерывания от переполнения T0
out TIMSK, r16 ; Инициализация TIMSK (TOIE0=0), запрет прерывания переполнения T0
;****************Настройка предделителей таймеров/счетчиков**********
ldi r16, 0b1 ; Загрузим в рабочий регистр сброс предделителя
out SFIOR, r16 ; Инициализируем регистр SFIOR
ldi r16, 0b000 ; Загрузим в рабочий регистр "Таймер/счетчик T0 остановлен"
out TCCR0, r16 ; Инициализируем регистр TCCR0
(где то тут) rcall delay_20000us:

Это в подпрограмме reset (при старте всегда выполняется)

Далее, где-то в этой подпрограмме вызывается еще одна подпрограмма:
Задержка в 20мс (при тактовой 1МГЦ)
delay_20000us:
ldi r16, 0b10000000 ; Загрузим в РОН "I=1 SREG"
out SREG, r16

ldi r16, 0b1 ; Загрузим TOIE0=1 (разрешили прерывания по переполнения T0)
out TIMSK, r16

ldi r16, 0b11101100 ; Загрузим в TCNT0 236
out TCNT0, r16

ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!

A:
rjmp A ; Дожидаемся прерывания

ldi r16, 0b10111011 ; Загрузим в TCNT0 187
out TCNT0, r16

ldi r16, 0b010 ; Запускаем таймер с предделителем 8
out TCCR0, r16 ; Поехали!!!

B:
rjmp B ; Дожидаемся прерывания

ret
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

Оптимизацией не занимался, это потом
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

По адресу вектора прерывания
rjmp timer_0


timer_0:
ldi r16, 0b000 ; Таймер/счетчик T0 остановлен
out TCCR0, r16 ;

clr r16
out TCNT0, r16 ; Сбрасываем счетчик

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

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

Сообщение ibiza11 »

у меня все считает и прерывается
вот код:

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

.include "m8def.inc"

.org 0
rjmp main

.org OVF0addr
reti

main:
.org SPMaddr+2

ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16

ldi r16, 0b10000000 ; Загрузим в РОН "I=1 SREG"
out SREG, r16

ldi r16, 0b1 ; Загрузим TOIE0=1 (разрешили прерывания по переполнения T0)
out TIMSK, r16

ldi r16, 0b11101100 ; Загрузим в TCNT0 236
out TCNT0, r16

ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!

rjmp pc

на всякий случай спрошу: СТЕК ИНИЦИАЛИЗИРОВАН?
Последний раз редактировалось ibiza11 Вт дек 21, 2010 23:05:21, всего редактировалось 1 раз.
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

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

.include "m8def.inc"
.cseg
.org 0x00
rjmp RESET ; Reset Handler

.org 0x09
rjmp TIM0_OVF ; Timer0 Overflow Handler

;----------
TIM0_OVF:
ldi r16, 0b000 ; Таймер/счетчик T0 остановлен
out TCCR0, r16 ;

clr r16
out TCNT0, r16 ; Сбрасываем счетчик
reti
;----------
RESET: ldi r16,high(RAMEND); Main program start
out SPH,r16 ; Set Stack Pointer to top of RAM
ldi r16,low(RAMEND)
out SPL,r16
sei ; Enable interrupts


delay_20000us:
ldi r16, 0b10000000 ; Çàãðóçèì â ÐÎÍ "I=1 SREG"
out SREG, r16

ldi r16, 0b1 ; Çàãðóçèì TOIE0=1 (ðàçðåøèëè ïðåðûâàíèÿ ïî ïåðåïîëíåíèÿ T0)
out TIMSK, r16

ldi r16, 0b11101100 ; Çàãðóçèì â TCNT0 236
out TCNT0, r16

ldi r16, 0b101 ; Çàïóñêàåì òàéìåð ñ ïðåääåëèòåëåì 1024
out TCCR0, r16 ; Ïîåõàëè!!!

A: ;êîðÿâî, òàê íåëüçÿ âîîáùå òî... (çàìåòêà äëÿ ñåáÿ:)
rjmp A

ldi r16, 0b10111011 ; Çàãðóçèì â TCNT0 187
out TCNT0, r16

ldi r16, 0b010 ; Çàïóñêàåì òàéìåð ñ ïðåääåëèòåëåì 8
out TCCR0, r16 ; Ïîåõàëè!!!

b:
rjmp b

У меня твой код работает. Ищи проблему в студии, если всё остальное правильно.
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

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

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

Сообщение DX168B »

Студия сама считает. TCNT0 анимируется в боковом окне.
Чтобы не ждать переполнения делаю так: ставлю брэйкпоинт напротив команды RETI
и запускаю программу на бесконтрольную работу(Run или F5). Как только дойдёт до RETI, студия станет на паузу и на против брэйкпоинта будет виднеться желтая стрелка.
Последний раз редактировалось DX168B Вт дек 21, 2010 23:52:06, всего редактировалось 3 раза.
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

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

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

Сообщение DX168B »

Не забывай, что у тебя есть подделитель таймера. Инкрементируется он (таймер) только после нескольких шагов. Если подделитель настроен на 8, то только после восьми шагов он увеличится на один.
Попробуй проверить студию так: закинь в регистр TCCR0 значение, соответствующее работе таймера без подделителя (0b00000001 или 0x01 или просто 1) и проследи потом за счётным регистром таймера (TCNT0)
Он должен увеличиваться на 1 при каждом клике на Step или кл. F11
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

Stalker46 писал(а):
T0, r16

ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!

Привет Жень!
судя по этому тебе надо 1024 раза жамкнуть на степ, стобы изменился TCNT0 на 1 :)))
есть в студии такая фишка как авто-степ Alt+F5, при которой видно изменение регистров в динамике, попробуй может поможет.
ЗЫ у мну код тоже норм работает.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Stalker46 писал(а):Пытаюсь организовать задержку в >20мс, т.е. нижний порог - 20мс.
Когда таймер Т0 Atmega8 переполнился, должно же меня перекинуть на 9 адрес вектора прерывания?
Почему не кидает в студии?


А какая верся Студии? У меня такое было, чуть в уме не повредился : на железе работает, в Студии 3.53 работает, а в 4.1ХХ - нет. Хотел написать атмельщикам матовое письмо, но они скоренько выпустили новый релиз, где эта бага была пофиксена.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Здравствуйте. Jack_A у Вас не сохранились дистрибутивы студии 3.53 или 3.56?
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

akl писал(а):Здравствуйте. Jack_A у Вас не сохранились дистрибутивы студии 3.53 или 3.56?


Есть 3.56. Куда засыпать ?

А Вы мне - ИЖевскую двухстволку :-)
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

GP1 писал(а):
Stalker46 писал(а):
T0, r16

ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!

Привет Жень!
судя по этому тебе надо 1024 раза жамкнуть на степ, стобы изменился TCNT0 на 1 :)))
есть в студии такая фишка как авто-степ Alt+F5, при которой видно изменение регистров в динамике, попробуй может поможет.
ЗЫ у мну код тоже норм работает.

Добрый день!:)

Все, спасибо, все получилось)
Не умеешь - не берись, но не взявшись не научишься...
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Jack_A Спасибо огромное.
Последний раз редактировалось akl Чт дек 23, 2010 04:39:49, всего редактировалось 1 раз.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Jack_A писал(а):Есть 3.56. Куда засыпать ?
Это ж надо — с неделю назад вытер старые студии :-)
Они у меня практически только как источник XML-файлов с описанием контроллеров живут.

Но если вдруг кому-то очень надо — на компакте атмела 2002-го года откопалась 3.53
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Ответить

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