Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/168: Рейтинг темы: голосов - 168, средняя оценка - 4.68
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
1

у avr плохая система команд ?

06.02.2010, 14:19. Просмотров 30247. Ответов 45
Метки нет (Все метки)

как правильно поставить 1 в 0 бит в служебной ячейке TIMSK (запуск прериваний от первого таймера)
имя этого бита TOIE0
казалось бы естественные команды почему то не работают

SBR TIMSK,0B00000001
SBI TIMSK,0
SBI TOIE0
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2010, 14:19
Ответы с готовыми решениями:

Пояснение команд в AVR AtTiny 2313
/* * AVRGCC2.c * * Created: 29.09.2013 15:58:15 * Author: SENDEJER */ #define F_CPU...

AVR пакеты по UART,помогите разобраться в системе команд
Здравствуйте! Не знал куда отправить этот вопрос. Прошу помощи! вкратце: моя задача разработать...

Система команд MCS-51
В AVR были такие замечательные команды как SBIC/SBIS/SBRC/SBRS которые позволяли проверить бит и...

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

Анализ стека AVR / AVR stack analysis
Привет! Уперся я в стек, и решил понять что почем. Нашел вот такой вот скриптик:...

45
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
06.02.2010, 14:26 2
Вы контроллер не указали. У некоторых - команды sbi не дотягиваются до адресов регистров. А ещё у некоторых и команды in/out тоже.
0
Midvid
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
06.02.2010, 14:29 3
в конце концов можно записать содержимое TIMSK в любой свободный регистр и в нем уже установить/сбросить нужные биты и потом записать в TIMSK результат.
0
mimo
0 / 0 / 0
Регистрация: 19.06.2009
Сообщений: 6
06.02.2010, 14:36 4
Цитата Сообщение от ysmot
как правильно поставить 1 в 0 бит в служебной ячейке TIMSK (запуск прериваний от первого таймера)
имя этого бита TOIE0
казалось бы естественные команды почему то не работают

SBR TIMSK,0B00000001
SBI TIMSK,0
SBI TOIE0
"SBR"- такой команды у АВР нет!
"SBI TIMSK,0" -будет работать только если TOIE0 нулевой быт,например в ATmega8 он 2.
"SBI TOIE0" - так работать не будет и не должно,

SBI - Set Byt in I/O Register - Установить бит в регистр I/O,

Нужно так:
SBI TIMSK,TOIE0

или так:
ldi r16,(1<<TOIE0)
out TIMSK,r16
0
06.02.2010, 14:36
Midvid
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
06.02.2010, 14:50 5
Цитата Сообщение от mimo
"SBR"- такой команды у АВР нет!
не правда. Есть. Служит для того чтоб установить произвольный бит регистра общего назначения.
0
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
06.02.2010, 15:56 6
на команду SBI TIMSK,TOIE0
дает ошибку
D:\PROECT\AVR\SDR\SDR.asm(125): error: Operomd 1 out of range: 0x39

ldi r16,(1<<TOIE0)
out TIMSK,r16
так через буфер конечно прокатит
но тогда ведь перезапишеться вся ячейка TIMSK
а там ведь есть и другие биты для остальных таймеров
0
Shodow
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 9
06.02.2010, 16:15 7
Зделайте так
in r16,TIMSK
ori r16,(1<<TOIE0)
out TIMSK,r16
0
mimo
0 / 0 / 0
Регистрация: 19.06.2009
Сообщений: 6
06.02.2010, 16:21 8
Цитата Сообщение от ysmot
на команду SBI TIMSK,TOIE0
дает ошибку
D:\PROECT\AVR\SDR\SDR.asm(125): error: Operomd 1 out of range: 0x39
Должно работать, какой микроконтроллер? Пользуетесь AVRStudyo?
0
Midvid
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
06.02.2010, 16:26 9
IN R16,TIMSK ;Копируем TIMSK в регистр R16
sbr R16,1<<TOIE0 ;Устанавливаем бит TOIE0
out TIMSK,R16 ;Записываем обратно
0
Midvid
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
06.02.2010, 16:28 10
ну вот меня опередили =)
Sbi может не работать если адрес i/o регистра не принадлежит диапазону 0-31.
В хелпе написано:

This instruction operates on the lower 32 I/O rikystirs - addresses 0-31.
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
06.02.2010, 16:35 11
На вопрос, какой контроллер, вы так и не ответили. Вариантов установить бит аж три штуки, зависит от адреса TIMSK. У меня, в текущей поделке работает только третий вариант.

1.
sbi TIMSK, TOIE0

2 - как написал Midvyd

3.
lds r16, TIMSK
sbr r16, (1 << TOIE0)
sts TIMSK, r16

Я пользуюсь макросами, потому мне пофигу, какой вариант. Да, размер страдает, но в контроллерах где такие регистры на заоблачных адресах обычно больше памяти.
0
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
06.02.2010, 17:10 12
проц mega8

если для установки одного бита требуеться
целых три команды это явное доказательство плохой системы команд (недоработка)
удивительно другое что у старого семейства 51 таких проблем нет
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
06.02.2010, 17:26 13
Я, например, устанавливаю TIMSK раз и навсегда на старте.

У любой архитектуры можно найти своих тараканов. С моей точки зрения тараканов у 51 значительно больше.
0
dzid
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 99
06.02.2010, 18:07 14
Зато у AVR эти 3 команды выполняются быстрее, чем одна на 51ых..
И вообще это RISC...так что ничего страшного тут нет, и недоработкой я бы побоялся это назвать.
0
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
06.02.2010, 18:19 15
ну конечно идеалного ничего не бывает
но при нынешнем прогресе в микроелектронике
наверняка можно сделать чтоб все команды работали с всей памятью
0
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
06.02.2010, 18:37 16
тут еще наверное играет роль что все прешли на С
на asm никто не пишет
0
Midvid
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
06.02.2010, 18:48 17
Ну прям так и все?
(щас тут разразится холивар Си VS Ассемблер)
0
dzid
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 99
06.02.2010, 19:05 18
Цитата Сообщение от ysmot
но при нынешнем прогресе в микроелектронике
Не всё так просто как кажется...8-битные микроконтроллеры заняли свою нишу...как потребительскую, так и ценовую..
Что-то сильно навороченное и новое - это 32-битные МК, наверное...а дальше только компьютеры. Так что приходится мириться с тем или иными минусами AVR. Хотя я бы назвал это не минусами, а спецификой =)
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
06.02.2010, 19:15 19
Цитата Сообщение от Midvyd
Ну прям так и все?
(щас тут разразится холивар Си VS Ассемблер)
Неее, мы будем тихо улыбаться...
0
ysmot
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 10
06.02.2010, 20:42 20
цена производства компонента мало зависит то
его внутренней сложности
то есть чип с поддержкой всех команд стоил бы почти столько же сколько и обычный
другое дело разработать его нужно время,ресурсы, и.т.п
0
06.02.2010, 20:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2010, 20:42

AVR Atmega324PU не прошивается AVR ISP Mk2
Добрый день. На плату впаян данный микроконтроллер в корпусе tqfp. При подключении программатора...

AVR Studio 6 и AVR Toolchain вопросы!
Всем доброго времени суток. Решил я написать софтинку в новой студии от Атмела AVR Studyo 6. Все...

Постоянные зависания - плохая система или проблемы с железом?
проблема такова. была поставка компов, около 4 месяцев работали нормально, но не давнего...


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

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

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