Ассемблер (ASM) для AVR в вопросах и ответах
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Про команду sei перед стартом таймера не забыл?
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нет, не забыл, перед настройкой таймера и занесением числа в счетный регистр I установил в 1.
Не умеешь - не берись, но не взявшись не научишься...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сейчас закину твой код себе и посмотрю, что выйдет. Может баг студии или что-то не так сделано в программе.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
;****************Прерывания от таймеров/счетчиков********************
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
Не умеешь - не берись, но не взявшись не научишься...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Оптимизацией не занимался, это потом
Не умеешь - не берись, но не взявшись не научишься...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
По адресу вектора прерывания
rjmp timer_0
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 в вопросах и ответах
у меня все считает и прерывается
вот код:
на всякий случай спрошу: СТЕК ИНИЦИАЛИЗИРОВАН?
вот код:
Код: Выделить всё
.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 в вопросах и ответах
Код: Выделить всё
.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!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а как ты в процессе отладки в студии инкрементируешь TCNT0?
Не умеешь - не берись, но не взявшись не научишься...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Студия сама считает. TCNT0 анимируется в боковом окне.
Чтобы не ждать переполнения делаю так: ставлю брэйкпоинт напротив команды RETI
и запускаю программу на бесконтрольную работу(Run или F5). Как только дойдёт до RETI, студия станет на паузу и на против брэйкпоинта будет виднеться желтая стрелка.
Чтобы не ждать переполнения делаю так: ставлю брэйкпоинт напротив команды RETI
и запускаю программу на бесконтрольную работу(Run или F5). Как только дойдёт до RETI, студия станет на паузу и на против брэйкпоинта будет виднеться желтая стрелка.
Последний раз редактировалось DX168B Вт дек 21, 2010 23:52:06, всего редактировалось 3 раза.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
неа, у меня не считает. Может не так что то делаю?
Опиши в кратце, на что жмакаешь?
Я открываю регистр счетный в боковом окне, нажимаю в процессе отладуи Step (шаг) делает шаг на следующую команду, но в TCNT0 ничего не происходит.
Опиши в кратце, на что жмакаешь?
Я открываю регистр счетный в боковом окне, нажимаю в процессе отладуи Step (шаг) делает шаг на следующую команду, но в TCNT0 ничего не происходит.
Не умеешь - не берись, но не взявшись не научишься...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не забывай, что у тебя есть подделитель таймера. Инкрементируется он (таймер) только после нескольких шагов. Если подделитель настроен на 8, то только после восьми шагов он увеличится на один.
Попробуй проверить студию так: закинь в регистр TCCR0 значение, соответствующее работе таймера без подделителя (0b00000001 или 0x01 или просто 1) и проследи потом за счётным регистром таймера (TCNT0)
Он должен увеличиваться на 1 при каждом клике на Step или кл. F11
Попробуй проверить студию так: закинь в регистр 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 в вопросах и ответах
Stalker46 писал(а):T0, r16
ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!
Привет Жень!
судя по этому тебе надо 1024 раза жамкнуть на степ, стобы изменился TCNT0 на 1
есть в студии такая фишка как авто-степ Alt+F5, при которой видно изменение регистров в динамике, попробуй может поможет.
ЗЫ у мну код тоже норм работает.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Stalker46 писал(а):Пытаюсь организовать задержку в >20мс, т.е. нижний порог - 20мс.
Когда таймер Т0 Atmega8 переполнился, должно же меня перекинуть на 9 адрес вектора прерывания?
Почему не кидает в студии?
А какая верся Студии? У меня такое было, чуть в уме не повредился : на железе работает, в Студии 3.53 работает, а в 4.1ХХ - нет. Хотел написать атмельщикам матовое письмо, но они скоренько выпустили новый релиз, где эта бага была пофиксена.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте. Jack_A у Вас не сохранились дистрибутивы студии 3.53 или 3.56?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):Здравствуйте. Jack_A у Вас не сохранились дистрибутивы студии 3.53 или 3.56?
Есть 3.56. Куда засыпать ?
А Вы мне - ИЖевскую двухстволку
Re: Ассемблер (ASM) для AVR в вопросах и ответах
GP1 писал(а):Stalker46 писал(а):T0, r16
ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!
Привет Жень!
судя по этому тебе надо 1024 раза жамкнуть на степ, стобы изменился TCNT0 на 1![]()
есть в студии такая фишка как авто-степ Alt+F5, при которой видно изменение регистров в динамике, попробуй может поможет.
ЗЫ у мну код тоже норм работает.
Добрый день!:)
Все, спасибо, все получилось)
Не умеешь - не берись, но не взявшись не научишься...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Jack_A Спасибо огромное.
Последний раз редактировалось akl Чт дек 23, 2010 04:39:49, всего редактировалось 1 раз.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это ж надо — с неделю назад вытер старые студииJack_A писал(а):Есть 3.56. Куда засыпать ?
Они у меня практически только как источник XML-файлов с описанием контроллеров живут.
Но если вдруг кому-то очень надо — на компакте атмела 2002-го года откопалась 3.53
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
