Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Пн фев 10, 2014 11:32:52

Сообщение grinya »

не могу найти команду xor (исключающее ИЛИ) под ATmega8
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

grinya писал(а):(исключающее ИЛИ) под ATmega8
EOR
http://www.gaw.ru/html.cgi/txt/doc/micr ... sm/eor.htm
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Сообщение vik1977ck »

Прошу помощи опытных котов- а то уже сам себя запутал.. :o
Значит пишу программку под МЕГУ8- терморегулятор для электроплитки - и вот засада- температура будет от 0- до 420 градусов.. посоветуйте как лучше обрабатывать числа больше 256.. Старший байт,младший байт и смещение? Данные будут хранится в трех байтных переменных ..
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

vik1977ck писал(а):Старший байт,младший байт и смещение?
Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.
Docendo discimus
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Сообщение vik1977ck »

Gudd-Head писал(а):
vik1977ck писал(а):Старший байт,младший байт и смещение?
Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.
Да... вот смотрите- измерил я с помощью АЦП температуру - например 2,507 вольт -там термопара через ОУ- и вот теперь мне нужно сделать из этого числа температуру- перевести в градусы - я знаю что при 2,507 -это 366 градусов по Цельсию- сравнить с константой которая внесена в ОЗУ- типа ограничение при котором выключиться симистор и вывести показания на 4-рядный семи сегментный дисплей- вот тут и попал в засаду- умственную.. :)) Как это все организовать- например загоняем показания АЦП в регистры R16 старший байт -R17- младший байт - и начинаем преобразовывать? вот этого я не могу понять.. :cry:
Реклама
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Сообщение vik1977ck »

pyzhman писал(а):Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.
Да на ассемблере пишу- как-то с самого начала у меня с СИ и с PIC не срослось... :) Вот создал я переменную например 3 -байтную.. а как ее сравнивать? вот тут не могу понять- как ее пихать в регистры? Вы уж не пинайте сильно- элементарные вещи спрашиваю- но не могу понять..
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Так же, как и складывать/вычитать.
пусть:

Код: Выделить всё

var1_0, var1_1, var1_2 - одна трёхбайтная переменная (в регистрах),
var2_0, var2_1, var2_2 - вторая.
Сравнение будет выглядеть очень просто:
cp var1_0,var2_0
cpc var1_1,var2_1
cpc var1_2,var2_2
ну а дальше в зависимости от флага C переход на метку...
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Раз три байта, то значит в каком-то из них младшие разряды, в каком-то средние, в каком-то старшие ханятся. Вот и сравнивайте поразрядно.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Как в Студии выносить процедуры и функции в отдельный файл (и потом подключать их)?
Где и в каком порядке они будут находиться в итоге? Можно ли задать им местоположение?
Если у меня в основном файле будет массив данных, не наложатся ли они друг на друга?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Создать файл, вбить в него нужные процедуры, сохранить с именем *.asm, в главном файле проекта подключить директивой .include.
Код вставится ровно в то место, где будет стоять директива .include. Все директивы org выполняются также как и в одном файле, так что если с ними не накосячить, то ничего никуда не наложится, в противном случае компилятор все равно ругнется.
Если в файле только макросы и определения, то имеет смысл ставить до основного кода (например сразу за .include "[имя контроллера]def.inc".
Последний раз редактировалось Engineer_Keen Чт фев 27, 2014 11:49:44, всего редактировалось 1 раз.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

А вставятся они в том месте, где будет этот самый .include
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

О как :)
И вставляться этот файл будет целиком?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Да, как будто сделать копипаст содержимого в это место.
Родился
Аватара пользователя
Сообщения: 11
Зарегистрирован: Пт фев 28, 2014 09:04:13

Сообщение barok22 »

Подскажите пожалуйста новичку, в avr studio 4.19 .include "m168PAdef.inc"
.def Temp = R16
.cseg
.org 0
ldi Temp, low(RAMEND)
out SPL, Temp
ldi Temp, high(RAMEND)
out SPH, Temp
ldi Temp, 1
push Temp
pop Temp ;Temp=0xE0
nop
Почему возвращается из стека неправильное значение?
Родился
Аватара пользователя
Сообщения: 11
Зарегистрирован: Пт фев 28, 2014 09:04:13

Сообщение barok22 »

А как правильно?
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Не, про IN/OUT я ступил. Дело не в этом.
Последний раз редактировалось Gudd-Head Пт фев 28, 2014 11:03:50, всего редактировалось 1 раз.
Причина: Ошибся
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Родился
Аватара пользователя
Сообщения: 11
Зарегистрирован: Пт фев 28, 2014 09:04:13

Сообщение barok22 »

И как надо обратиться к стеку?
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Дело не в том, как обратиться к стеку, а в том что в подключаемом файле ошибка. Попробуйте вбить адрес стека вручную:

Код: Выделить всё

 ldi Temp, low(0x4FF) 
 out SPL, Temp
 ldi Temp, high(0x4FF)
 out SPH, Temp
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Родился
Аватара пользователя
Сообщения: 11
Зарегистрирован: Пт фев 28, 2014 09:04:13

Сообщение barok22 »

Ничего не изменилось.
Возвращает то-же значение.


А, нет все получилось. Спасибо!
Последний раз редактировалось barok22 Пт фев 28, 2014 10:51:45, всего редактировалось 1 раз.
Ответить

Вернуться в «AVR»