roboforum.ru

Технический форум по робототехнике.

Странности AVRStudio

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 03:39

Уважаемые электронщики. Столкнулся со странной проблемой.
Я решил написать программу на asm для Tiny88 с использованием АЦП, но почему то в AVRStudio не получается записать хоть какое либо число в регистры ADMUX и ADCSRA(и возможно еще многие регистры). Или же установить там отдельные биты. Все время вылетает ошибка “operand l out of range”


Вот код программы.


Код: Выделить всёРазвернуть
.include "tn88def.inc"


.ORG    0x0000         
//rjmp Reset
reti
.ORG    0x001  ; IRQ0 Handler
reti
.ORG    0x002  ; IRQ1 Handler
reti
.ORG    0x003  ; PCINT0 Handler
reti
.ORG    0x004  ; PCINT1 Handler
reti
.ORG    0x005  ; PCINT2 Handler
reti
.ORG    0x006  ; PCINT3 Handler
reti
.ORG    0x007  ; Watchdog Timer Handler
reti
.ORG    0x008  ; Timer1 Capture Handler
reti
.ORG    0x009  ; Timer1 Compare A Handler
reti
.ORG    0x00A  ; Timer1 Compare A Handler
reti
.ORG    0x00B  ; Timer1 Compare B Handler
reti
.ORG    0x00C  ; Timer0 Compare A Handler
reti
.ORG    0x00D  ; Timer0 Compare B Handler
reti
.ORG    0x00E  ; Timer0 Overflow Handler
reti
.ORG    0x00F  ; SPI Transfer Complete Handler
reti
.ORG    0x010  ; ADC Conversion Complete Handler
reti
.ORG    0x011  ; EEPROM Ready Handler
reti
.ORG    0x012  ; Analog Comparator Handler
reti
.ORG    0x013  ; 2-wire Serial Interface Handler;
reti

.def temp=R16
ldi temp,$FF
out DDRB,temp         
ldi temp,$FF
out DDRD,temp       


ldi temp,$8B
out ADCSRA,temp


Она еще не дописана. Просто встрял с этими регистрами. Если кто сталкивался помогите :cry:
Последний раз редактировалось blindman 03 июл 2009, 07:37, всего редактировалось 1 раз.
Причина: Используйте тэг CODE!
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение blindman » 03 июл 2009, 07:19

В архитектуре AVR, доступ к регистрам ввода-вывода возможен через 2 адресных пространства: пространство ввода-вывода и пространство ОЗУ. Через пространство ввода-вывода можно обращаться только к 64 регистрам, потому что в коде операций ввода-вывода под адрес порта отведено 6 битов. Если в контроллере больше 64 регистров ввода-вывода, то к старшим обращение возможно только как к ячейкам памяти, а к младшим - и как к ячейкам памяти, и как к портам ввода-вывода.

Если открыть любой даташит на AVR, в конце есть таблица "Register Summary". Там в колонке "Address" указаны 2 адреса - в пространстве ввода вывода и в скобках - в пространстве ОЗУ (эти адреса всегда различаются на 0x20). Если указан только адрес в скобках - обращение возможно только как к ОЗУ.

Например для ATtiny88 обращаться к PORTB можно так: in R24, PORTB или так: lds R24, PORTB + $20. А к ADCSRA - только как lds R24, ADCSRA. Обратите внимание - здесь нет + $20
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 09:07

Я ето понял. Но скажите пожалуйста как записать нужные мне числа в регистр ADCSRA? Допустим устновить нужный бит этого регистра в 1. Просто при конструкции
..............
ldi temp,$8B
out ADCSRA,temp
...............
вылетает ошибка
и вариант

..............
sbi ADCSRA,$8B
.............
поже ошибка. Хотя по идее в этот регистр можно записать такое число.
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение blindman » 03 июл 2009, 09:13

Я ето понял

Что понял?! Это что такое: out ADCSRA,temp
Я для кого всё это писал? Неужели не ясно что если нельзя применять инструкцию in, то и out тоже нельзя? А sbi/cbi вообще применима только к 32 младшим регистрам ввода-вывода.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 09:18

ой извините там
sbi ADCSRA, $5
а не $FF. Хотя все равно не работает.

Добавлено спустя 4 минуты 2 секунды:
Извините.
А нельзя привести пример записи какого-либо числа в регистр ADCSRA?
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение blindman » 03 июл 2009, 09:25

Можно конечно. Но только если ты перечитаешь все что я писал, откроешь даташит, и ответишь сам себе на вопрос: почему инструкция
sbi ADCSRA, что-угодно не компилируется. Поверь, это будет намного полезнее, чем если тебе дадут прямой ответ.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Странности AVRStudio

Сообщение Duhas » 03 июл 2009, 10:28

прально blindman, нада учить людей включать голову, особенно когда ответ уже дан )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Странности AVRStudio

Сообщение avr123.nm.ru » 03 июл 2009, 11:10

DK10000 писал(а): Я решил написать программу на asm для Tiny88 с использованием АЦП
Попробуйте писать на Си - компилятор знает обчно как правильно обращаться к регистрам ну и другие "трюки". Посмотрите работу с мастером кода CVAVR ( всего 2 Мб ) - http://avr123.nm.ru/z3.htm - возможно пойдет.

Кроме того код на АСМ можно посмотреть в листинге компилятора CVAVR - файл .lst - это может помочь когда вы в тупике на АСМ.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 11:13

Ну, в общем докладываю.
Как я понял к некоторым регистрам можно обращаться только как к ячейкам памяти данных.
Для этого я нашел такую команду как
st X, R(n)
Она записывает содержимое регистра R в память по адресу X. Адресный регистр X состоит из 2 байт. XL и XH причем (XL=R26, XH=R27). Следовательно, для того чтобы записать что-либо, например, в регистр ADCSRA (адрес которого 0x7A) необходимо.

.def temp=R16
ldi temp,$40 // записываем в темп то что хотели бы записать в ADCSRA

ldi R26,0x7A // поскольку адрес не больше одного байта то он полностью укладывается в младший байт адресного регистра X

ldi R27,0 // в старшем байте адресного регистра Х ничего не должно быть

st X, temp // и собственно вуаля и содержимое temp уже в ADCSRA


Спасибо тем кто помог.

Добавлено спустя 1 минуту 1 секунду:
avr123 спасибо за совет.
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение boez » 03 июл 2009, 11:54

Меня тут уже упрекали в выдаче чересчур подробных ответов людям, которые не хотят думать сами. И все же наводящий вопрос - чем не приглянулась команда sts? :)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Странности AVRStudio

Сообщение blindman » 03 июл 2009, 12:02

DK10000 писал(а):Как я понял к некоторым регистрам можно обращаться только как к ячейкам памяти данных


Ну вот и прекрасно. Только советую получше изучить систему команд и способы адресации, раз уж взялся писать на ассемблере. То же самое можно записать короче с использованием уже упомянутой команды sts:

Код: Выделить всёРазвернуть
ldi temp, 0x40
sts ADCSRA, temp

при этом используется всего один регистр вместо трёх.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 12:23

“Меня тут уже упрекали в выдаче чересчур подробных ответов людям, которые не хотят думать сами. И все же наводящий вопрос - чем не приглянулась команда sts?”


Да я же вам говорю, что я новичок :) Более менее прилично пишу на С. Вот решил освоить и асм. Я просто не знал о такой команде sts. Хотя она гораздо удобней (для данного случая).
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение Duhas » 03 июл 2009, 12:26

новичку - распечатать систему команд и держать пред глазами )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Странности AVRStudio

Сообщение DK10000 » 03 июл 2009, 15:13

Знаете господа электронщики. С одной стороны конечно вы правы. Не стоит разжевывать ответ человеку, который не хочет сам до него дойти. Но с другой стороны, если человек только начинает. Может, стоит ему помочь, ведь бывают еще различные обстоятельства. А на тех, кто действительно хочет получить только все готовенькое может плюнуть. И забыть о них. А ориентироваться на тех, кто действительно хочет разобраться, но в силу неопытности нуждается в хорошем совете и т.д.

Уж извините за высказывание.
Аватара пользователя
DK10000
 
Сообщения: 33
Зарегистрирован: 25 ноя 2008, 16:46
Откуда: Томск

Re: Странности AVRStudio

Сообщение Duhas » 03 июл 2009, 15:20

DK10000, blindman в первом своем посте разжевал вашу проблему ) не стоит обижаться на то, что вам предлагают подумать...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5