Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/28: Рейтинг темы: голосов - 28, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 50
1

Директива SET (ассемблер)

13.09.2015, 13:28. Просмотров 5527. Ответов 2
Метки нет (Все метки)

Помогите пожалуйста разобраться! Читаю по мануалам, вроде как можно переназначать значения директивы .SIT по ходу программы, но на практике компилятор вычисляет, как-то непонятно для меня, цифры как будто с потолка берет...

Алгоритм следующий:

Код
.set tack=4 (число тактов за микросекунду)

.set us=10  (задержка в микросекундах)

RCALL Delay (подпрограмма задержки)

Delay:
.set timer=tack*us/5 (вычисляю кол-во проходов подпрограммы задержки, чтобы получилось необходимое кол-во микросекунд)
LDI  temp,LOW(timer)
LDI  temp1,HIGH(timer)
LDI  temp2,BYTE3(timer)  (загружаю получившееся в результате вычислений значение)

Delay_stort:

SUBI temp,1
SBCI temp1,0
SBCI temp2,0

BRCC Delay_stort

RET
Суть в следующем, назначаю постоянную величину тактов в микросекунду, и перед каждой задержкой вставляю разные значения .set us. Компилятор должен по смыслу обсчитать значения и подставить необходимые в программу, но на деле получается белиберда, результат как будто с потолка берется. Можно таким образом использовать директиву .set вообще?

Пробовал в AVR Studyo 4.19 и 6.2
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2015, 13:28
Ответы с готовыми решениями:

Директива include
Как пользоваться директивой .include в AVRStudyo (асм).

директива перпроцессора ?
Всем привет. Помогите понять. Следующий код вызывает ошибку в строке 5 (operator '*' has no left...

директива перпроцесора ???
Всем привет. Помогите понять. Следующий код вызывает ошибку в строке 3 (operator * has no left...

Директива размещения переменной в памяти на ассемблере CCS
Добрый день господа. Всё ни как не получается решить на ассемблере в CCS следующий вариант: 1....

2
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
13.09.2015, 14:08 2
Цитата Сообщение от soshovyr
Помогите пожалуйста разобраться! Читаю по мануалам, вроде как можно переназначать значения директивы .SIT по ходу программы, но на практике компилятор вычисляет, как-то непонятно для меня, цифры как будто с потолка берет...

Суть в следующем, назначаю постоянную величину тактов в микросекунду, и перед каждой задержкой вставляю разные значения .set us. Компилятор должен по смыслу обсчитать значения и подставить необходимые в программу, но на деле получается белиберда, результат как будто с потолка берется. Можно таким образом использовать директиву .set вообще?

Пробовал в AVR Studyo 4.19 и 6.2
А листинг смотреть пробовали?
0
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 50
13.09.2015, 14:38 3
Спс, ошибку уже свою вижу, константы в регистр должны быть внесены до вызова подпрограммы, иначе действительно ерунда получается, сейчас опробую
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2015, 14:38

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

Union(Set set1, Set set2) и intersect(Set set1, Set set2)
Напишите методы union(Set set1, Set set2) и intersect(Set set1, Set set2), реализующих операции...

Ошибка SQL запрос: SET CHARACTER SET 'utf8';
Два года назад на одном из форумов некто задал вопрос (см. ниже), на который так никто и не...

Чем отличается guid id {get; set;} от int id {get; set;}
Подскажите пожалуйста чем отличается guid id {get; set;} от int id {get; set;}?

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать...


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

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

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