Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/31: Рейтинг темы: голосов - 31, средняя оценка - 4.77
ниши
0 / 0 / 0
Регистрация: 13.03.2014
Сообщений: 12
1

Atmel Studio 6.1 прерывания

16.03.2014, 22:49. Просмотров 5666. Ответов 4
Метки нет (Все метки)

Здравствуйте! Недавно приступил к изучению Atmel Studyo 6.1! Пока пишу на Assemdlere.Возникла такая проблема: после перехода в режим sleep(режим наименьших шумов) не могу выйти из него с помощью прерывания от АЦП. Программа импортирована из AVR Studyo 4. В AVR Studyo 4 всё прекрасно работает (общее прерывание разрешено (разряд I в Sreg равен 1), устанавливаю флаг на прерывания от АЦП и всё как положено: курсор переходит на строчку данного прерывания). При тех же операциях в Atmel Studyo 6.1 ничего (курсор остаётся напротив строки, где написано sleep.
вот сама программа:
Код
LDI r16,low(ramend);инициализация стека младшего байта
OUT SPL,r16; задаём младший байт указателя стека
LDI r16,high(ramend) ;инициализация стека старшего байта
OUT SPH,r16; задаём старший байт указателя стека
ser r16
out ddrd,r16; настройка порта D на вывод
rjmp main
nop
nop
nop
nop
nop
nop
.org $000E
rjmp to;вектор прерывания от АЦП
rjmp to
.include "FLOAT.yms"
.include "m8def.yms"
main:
LDI R16,$DE; 1-включен; 1-режим одиноч.преобр.;1-прерывания не было; 110-коэф. деления 64
out ADCSR,R16; задали регистры управления и состояния
LDI R16,$E4 ; 11-внутр.ИОН на 2.56В; 1-результат выравнивается влево 0100-управление вход.мультиплексором (несимм.вход ADC4)
out ADMUX,R16; Управление входным мультиплексором модуля АЦП
LDI R16,$20;(1<<ACME); 001- прерывание от аналогового компаратора
out SFIOR,R16; Задаём регистр спец. функций
;LDI ADMUX,$E4; Управление входным мультиплексором модуля АЦП
sei
LDI R16,$90
out MCUCR,R16;перешли в режим пониженного энергопотребления, 001-режим наименьших шумов
sleep
rjmp main
;***************обработка прерывания
to:
in r16,ADCL
in r17,ADCH;Занести адрес (r18:r17) в регистр адреса
LDI R16,$0F
LDI R17,$01
LDI R20,$FF; все порты на выход
out DDRB,R20; задали регистр направления данных DDRB
LDI R20,$00; все порты на вход
out DDRD,R20; задали регистр направления данных DDRD
LDI R21,$03
LDI R20,$FF
CLC
ror Ftoot2H; делим на 2
ror Ftoot2L
ror Ftoot2O
CLC
ror Ftoot2H; делим на 4
ror Ftoot2L
ror Ftoot2O
CLC
ror Ftoot2H; делим на 8
ror Ftoot2L
ror Ftoot2O
CLR r22   //очищаем рабочие регистры
CLR r23
CLR r24
mov r22,r19   //грузим значения полученные из Timer/Counter1
mov r23,r20   //грузим значения полученные из Timer/Counter1
mov r24,r21
;***********0
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m1;Переход по «отрицательное значение»
rcall o
;***********a
m1:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m2;Переход по «отрицательное значение»
rcall a
;***********b
m2:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m3;Переход по «отрицательное значение»
rcall b
;***********c
m3:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 4
rol Ftoot2L
rol Ftoot2H
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m4;Переход по «отрицательное значение»
rcall c
;***********d
m4:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 4
rol Ftoot2L
rol Ftoot2H
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m5;Переход по «отрицательное значение»
rcall d
;***********e
m5:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 4
rol Ftoot2L
rol Ftoot2H
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m6;Переход по «отрицательное значение»
rcall e
;***********f
m6:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 4
rol Ftoot2L
rol Ftoot2H
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
CLC
ADD r19,r22
ADD r20,r23   //суммируем с учетом бита переноса
ADC r21,r24
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI m7;Переход по «отрицательное значение»
rcall f
;***********g
m7:
mov r19,r22   //грузим значения полученные из Timer/Counter1
mov r20,r23   //грузим значения полученные из Timer/Counter1
mov r21,r24
CLC
rol Ftoot2O; умножаем на 2
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 4
rol Ftoot2L
rol Ftoot2H
CLC
rol Ftoot2O; умножаем на 8
rol Ftoot2L
rol Ftoot2H
cp r20,r16 ;Сравнить младшие байты путём вычитания r16 из r20
cpc r21,r17 ;Сравнить старшие байты путём вычитания r17 из r21
BRMI g;Переход по «отрицательное значение»
rcall h
o:
ldi r22,$00
out PortD,r20
rjmp main
a:
ldi r22,$01
out PortD,r20
rjmp main
b:
ldi r22,$03
out PortD,r20
rjmp main
c:
ldi r22,$07
out PortD,r20
rjmp main
d:
ldi r22,$0F
out PortD,r20
rjmp main
e:
ldi r22,$1F
out PortD,r20
rjmp main
f:
ldi r22,$3F
out PortD,r20
rjmp main
g:
ldi r22,$7F
out PortD,r20
rjmp main
h:
ldi r22,$FF
out PortD,r20
rjmp main
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 22:49
Ответы с готовыми решениями:

Atmel Studio 7 AVR и прерывания по умолчанию
Установил я Atmel Studyo 7 и обнаружил следующие, если прерывание объявленно, а обработка прервыная...

Прерывания программ микроконтроллеров, создаваемых в Atmel Studio 6.0
Я недавно начал осваивать микроконтроллеры и пока еще тока сумел освоить работу с портами...

Почему AVR Studio 4, а не Atmel Studio 6?
По какой причине большинство специалистов по AVR микроконтроллерам в основном используют AVR Studyo...

Atmel Studio
Подскажите где смотреть библиотеку Atmel Studio.

Atmel Studio
помогите написать программу работы светофора на языке Assembler

4
ниши
0 / 0 / 0
Регистрация: 13.03.2014
Сообщений: 12
16.03.2014, 22:53 2
Подскажите что не так? Как выйти из sleep через прерывание от АЦП на Atmel Studyo 6.1?
0
domis
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 82
16.03.2014, 23:11 3
Цитата Сообщение от ниши
Подскажите что не так? Как выйти из sleep через прерывание от АЦП на Atmel Studyo 6.1?
Это сделано?
Для 6.0:
ОТЛАДКА-ПАРАМЕТРЫ И НАСТРОЙКИ-DEBUGGER-ATMELL DEBUGER-MASK INTERRUPTS WHILE STEPPING-FALSE.
Если студия 6.1, то в инструментах это.
0
ниши
0 / 0 / 0
Регистрация: 13.03.2014
Сообщений: 12
17.03.2014, 07:35 4
СПАСИБО!!! ВСЁ РОБИТ!!!
0
disis
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 11
08.01.2015, 19:52 5
Мда, целых 2 дня убил на то чтобы разобраться почему ни одно прерывание не работает в студии. Плохо в деревне без интернета...
0
08.01.2015, 19:52
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 19:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Atmel studio 6.1
Здравствуйте. столкнулся с проблемой запуска программы. вылетает сообщение:debugging tool is not...

Atmel Studio 6.0
Здравствуйте! Подскажите пожалуйста , не пойму почему при запуске программы компилятор выдает : ...

Atmel studio 6
Вопрос таков, есть некая библиотека, в lcd_lib.h прототипы, в lcd_lib.c сами функции, оба файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.