Ассемблер (ASM) для AVR в вопросах и ответах
Так я ж говорю, крайний случай
Ну и через макросы так перепрыгивать конечно не стоит, можно и промахнуться 
- Реклама
Мне фантазии не хватает придумывать названия меткам 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Я тупо по названиям подпрограмм:
Код: Выделить всё
print:
pr01:
pr02:
pr03 ...
retАналогично.
Первая часть по названию подпрограммы, вторая или число или по функциональному назначению (_LOOP, _WAIT, _RET, _POS, _NEG и т.д.)
Первая часть по названию подпрограммы, вторая или число или по функциональному назначению (_LOOP, _WAIT, _RET, _POS, _NEG и т.д.)
+1
внутри п/п пара букаф+цифирьки
- Реклама
В какой системе счисления написаны цифры (+2, +4, или +7)?dave_elektrik писал(а): brne PC +2, иногда встречал +4 или +7.
Вопрос о правильности оформления.
Как будет правильней? -
PC+0x0007 или
РС+7
[size=85]Я знаю немного, но то, что знаю, — знаю в совершенстве.[/size]
А без разницы. Хоть +7, хоть +0x07, можно и +0b00000111
Всё это константы.
Всё это константы.
здесь цифирки написаны в 10-й системе, но в принципе абсолютно без разницы.
главное правильно вычислить число шагов
главное правильно вычислить число шагов
кручу верчу запутать хочуGP1 писал(а):здесь цифирки написаны в 10-й системе, но в принципе абсолютно без разницы.
главное правильно вычислить число шагов
В поисках истины человек развивается.
Думаю, что из нашей неправильной формы, десятичной, он переводит в правильную, свою. 
Docendo discimus
Можно вклиниться со своей проблемой? Хочу сам написать программу для вольтметра на asm. Мограть светодиодиками по вращению переменного резистора получилось, а вот как вывести на индикаторы-проблема. Есть ли у кого пример исходника на asm?
вечером дома гляну.
зы посмотри атмеловский апноут avr204 я им пользуюсь для подготовки данных для индикатора.
зыы п/п вызывается из прерывания таймера (5мс) может отображать до 8 разрядов.
зы посмотри атмеловский апноут avr204 я им пользуюсь для подготовки данных для индикатора.
зыы п/п вызывается из прерывания таймера (5мс) может отображать до 8 разрядов.
- Вложения
-
- s16_dsp.rar
- (1.19 КБ) 150 скачиваний
- Сообщения: 3
- Зарегистрирован: Вс янв 01, 2012 20:39:42
Здравствуйте. С Новым Годом
Пытаюсь освоить микроконтроллеры и написать свою первую программу для Atmega16. Основная часть программы вроде заработала нормально и в отладчике и в Протеусе, но суть не в этом. А вот 16-ти битный таймер и прерывания никак победить не могу
Таймер в моём случае предполагается использовать для формирования прерывания раз в секунду, по которому микроконтроллер должен начинать выполнять программу с начала. Решил для этой цели использовать прерывание по переполнению таймера-счетчика 1(TIMER1 OVF). Проблема заключается в том, что в отладчике при переполнении таймера микроконтроллер переходит не к обработке прерывания по метке "TIMER1_OVF:", а перескакивает на строчку "ldi r16,0b11111111" в программе, т.е. получается замкнутый цикл
Подскажите пожалуйста что я делаю не так?
Для написания и отладки программы использую AVR Studio 5. Ниже сам код программы. Не обращайте внимание на значение коэффициент деления и регистра TCNT1, выставил так чтобы в отладчике долго не ждать
Пытаюсь освоить микроконтроллеры и написать свою первую программу для Atmega16. Основная часть программы вроде заработала нормально и в отладчике и в Протеусе, но суть не в этом. А вот 16-ти битный таймер и прерывания никак победить не могу
Для написания и отладки программы использую AVR Studio 5. Ниже сам код программы. Не обращайте внимание на значение коэффициент деления и регистра TCNT1, выставил так чтобы в отладчике долго не ждать
Код: Выделить всё
.cseg
.org 0
;Векторы прерываний
rjmp RESET
rjmp INT_0
rjmp INT_1
rjmp TIMER2_COMP
rjmp TIMER2_OVF
rjmp TIMER1_CAPT
rjmp TIMER1_COMPA
rjmp TIMER1_COMPB
rjmp TIMER1_OVF
;-------------------------
INT_0:
INT_1:
TIMER2_COMP:
TIMER2_OVF:
TIMER1_CAPT:
TIMER1_COMPA:
TIMER1_COMPB:
reti
RESET:
ldi r16,0b00000100 ;разрешение прерывания по переполнению
out TIMSK,r16 ;счетчика (TOIE1=1)
ldi r16,0b00000001 ;коэф. деления 1
out TCCR1B,r16 ;
ldi r16,0b11111111 ;записываем число, с которого таймер
out TCNT1H,r16 ;начинает отсчет
ldi r16,0b11001101 ;
out TCNT1L,r16 ;
sei
S: rjmp S ; бесконечный цикл
TIMER1_OVF:
rjmp RESET
- Сообщения: 336
- Зарегистрирован: Пн май 23, 2011 18:27:41
- Сообщения: 3
- Зарегистрирован: Вс янв 01, 2012 20:39:42
Спасибо огромное, заработалоBVS писал(а):таблица прерываний не верная
rjmp на jmp поменяйте
Получается, что в статье Таймеры и каунтеры. Бегущий огонек v2.0, которая в обучалке, тоже ошибка
- Сообщения: 336
- Зарегистрирован: Пн май 23, 2011 18:27:41
нет там ошибки!!!nickallass писал(а):Спасибо огромное, заработалоBVS писал(а):таблица прерываний не верная
rjmp на jmp поменяйте![]()
Получается, что в статье Таймеры и каунтеры. Бегущий огонек v2.0, которая в обучалке, тоже ошибка
там таблица at90s2313
МК АВР у которых больше 8 кБайт флеша таблица разбита на два слова 4 байта под JMP
удостоверьтесь в документации к вашему МК
Спасибо, бум разбираться...GP1 писал(а):вечером дома гляну...
Подскажите, как инициализировать 2 и больше каналов ацп?
работа с разными каналами ведется по очереди: сначала с одним, затем с другим. настройка всех каналов совершенно идентичнаciph писал(а):Подскажите, как инициализировать 2 и больше каналов ацп?
битва с дураками проиграна, победители торжествуют. слава победителям!
хм, допустим инициализируем ацп, выставляем биты на 1-й канал. Вызывается прерывание, данные с 1-го канала очучаются в ADCL, ADCH и выводятся на индикатор. Как быть со вторым каналом, что бы данные попали уже на другой индикатор? делаю вольтамперметр, вот и заморачиваюсь



