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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Да ничего, бывает. :) У меня бывали косЯксы и по круче. :)
day0| вот ваше решение проблемы. Код, предоставленный akl,
но только массив array должен быть после .cseg

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

....
.dseg
;тут определяются переменные для RAM
;Например:
ramtemp:  .byte 10     ;выделяем 10 байт в ОЗУ для переменной ramtemp

;А вот тут исправление вашей ошибки:
.cseg
......
   ldi ZH, high(array*2)
   ldi ZL, low(array*2)
   
   LPM   R16,Z+
   LPM   R17,Z
......
;----------
array:
   .db 0x63, 0x6, 0x91, 0x79, 0x102, 0x109


I am DX168B and this is my favourite forum on internet!
Аватара пользователя
day0l
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт май 14, 2010 15:48:35

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

Сообщение day0l »

DX168B писал(а):Да ничего, бывает. :) У меня бывали косЯксы и по круче. :)
day0| вот ваше решение проблемы. Код, предоставленный akl,
но только массив array должен быть после .cseg

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

....
.dseg
;тут определяются переменные для RAM
;Например:
ramtemp:  .byte 10     ;выделяем 10 байт в ОЗУ для переменной ramtemp

;А вот тут исправление вашей ошибки:
.cseg
......
   ldi ZH, high(array*2)
   ldi ZL, low(array*2)
   
   LPM   R16,Z+
   LPM   R17,Z
......
;----------
array:
   .db 0x63, 0x6, 0x91, 0x79, 0x102, 0x109




большое спасибо, но этот способ мне известен! хотелось бы вытащить данные из dseg`а....
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

приведите листинг полностью. раз прерываний нет, не думаю что будет сложно разобраться.
Ставим плюсы: )
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

day0l писал(а):
большое спасибо, но этот способ мне известен! хотелось бы вытащить данные из dseg`а....

а в чем соб-сно проблема?
для работы с ОЗУ (оно же .dseg) есть команды LD, ST в различных модификациях.
методика работы с массивами точно такая же, только организация там байтная, на 2 умножать не надо. :tea:
а вообще книжки читать надо :kill:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

GP1, автор именно этот вопрос и поднял.
day0l писал(а):опять у меня проблемы при работе с памятью, поправьте пожалуйста если не так... собственно сам вопрос: при извлечении байтов из памяти в переменную temp попадают нули, что я делаю не так?(если вместо перечислении элементов массива обьявить только размер массива и потом их принудительно засовывать, то всё нормально...)
вот код:

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

....
.dseg
array:
   .db 0x63, 0x06, 0x91, 0x79, 0x12, 0x09

.cseg
......
   ldi ZH, high(array)
   ldi ZL, low(array)
   
   ld temp, Z+
   ld temp, Z+
......



ОФФ: не могу получить ссылку на пост автора, пришлось пост копировать.
Ставим плюсы: )
Аватара пользователя
day0l
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт май 14, 2010 15:48:35

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

Сообщение day0l »

вопрос собственно состоял в том можно ли в память занести элементы таким методом:

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

.dseg
array:
   .db 0x63, 0x6, 0x91, 0x79, 0x12, 0x19

или например только так, выделять память под элементы, а потом их вручную заносить:

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

.dseg
Digit:   .byte 4

а если можно то почему у меня не получаеться их вытаскивать, хотя при компиляции проекта аврстудио пишет что dseg занят нужным количеством байт! так почему же когда я их достаю у меня появляються нули?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Как вы в оперативную память запишите данные???
Только из флэша и/или еепрома. Студия только выделяет в оперативке место под ваши переменные. И пишет что место занято. Но на самом деле там ничего нет (в лучшем случае нули, в общем — мусор) пока вы туда что-нибудь не запишите в тексте проги.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
day0l
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт май 14, 2010 15:48:35

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

Сообщение day0l »

ну я просто подумал что есть возможность также как и в 80-ом в сегмент данных писать что-то типо:

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

 msg db 10,13,"Введите кол-во элементов(<15): $"

поэтому попробовал - не получилось и спросил...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

ну так в 80-ом загрузчик ВСЕ сегменты в ОЗУ грузит из файла, и потому можно инициализировать сегмент данных. вы и тут можете в программе туда что угодно заносить, только загрузчика-то нет... и потому все ваши занесения коту под хвост пойдут :)))
P.S. по-моему, ассемблер AVR ругается на инициализацию сегмента данных - но ошибкой это не считает...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ARV прав. Откуда - то данным надо взяться в ОЗУ.
Шас выложу код....
Вот:

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

.def temp0 = r16
.........
......
.def count = r19
;----------
.dseg
digits:       .byte             4              ;Так мы выделим 4 байта в ОЗУ под массив digits
;----------
.cseg
.org  0
.....
.........
ldi           YL,               Low(digits)    ; Массив данных в RAM (ОЗУ). [с 1-го адреса]
ldi           YH,               High(digits)   ;Тут умножать на 2 не надо.
ldi           ZL,               Low(ARRAY*2)   ; Массив данных в ПЗУ.
ldi           ZH,               High(ARRAY*2)  ;А тут надо умножить на 2.
ldi           count,            0
WRSTD1:
lpm           temp0,            Z             ; Грузим из массива в ПЗУ значение
st            Y+,               temp0         ; Копируем с постинкрементом в SRAM (ОЗУ)
adiw          Z,                1             ; Готовим для чтения следующего значения из ПЗУ
inc           count                           ; Увеличиваем на 1 содержимое регистра -счётчика
cpi           count,            4             ; Если прошлись 4 раза, то идём далее
brne          WRSTD1                          ; Иначе повторяем процедуру
........;Далее
........
;---------- Массив данных в ПЗУ
ARRAY:
.db 1, 2, 3, 4
.db 0,0

В этом примере данные из массива в ПЗУ (памяти программ)
Загружаются в SRAM (ОЗУ)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
day0l
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт май 14, 2010 15:48:35

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

Сообщение day0l »

спасибо! всё стало на свои места!
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

тут есть 2-а варианта:
1. использовать таймер Т1 (точно знаю его можно так использовать) в асинхронном режиме как RTC, и можно будет без проблем получить 1с интервалы
2. используя один из счетчиков формировать образцовый интервал, ну скажем 10 мс, и уже их считать.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Int_13h
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт сен 10, 2010 14:40:40
Откуда: Красноярск
Контактная информация:

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

Сообщение Int_13h »

DX168B писал(а):ARV прав. Откуда - то данным надо взяться в ОЗУ.
Шас выложу код....


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

ldi           YL,               Low(digits)    ; Массив данных в RAM (ОЗУ). [с 1-го адреса]
ldi           YH,               High(digits)   ;Тут умножать на 2 не надо.
ldi           ZL,               Low(ARRAY*2)   ; Массив данных в ПЗУ.
ldi           ZH,               High(ARRAY*2)  ;А тут надо умножить на 2.
ldi           count,            4
WRSTD1:
lpm           temp0,            Z+            ; Грузим из массива в ПЗУ значение
st            Y+,               temp0         ; Копируем с постинкрементом в SRAM (ОЗУ)
dec           count                           
brne          WRSTD1                          ; повторяем процедуру 4раза до 0


так чуть быстрее будет :))
gonc-s
Родился
Сообщения: 3
Зарегистрирован: Чт янв 28, 2010 20:46:50
Откуда: волгоград

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

Сообщение gonc-s »

Добрый вечер! Скачал файл dcm.asm ( http://radiosait.ru/files/radiosait/ima ... 82/dcm.asm ) не могу ничем перевести ее в HEX файл. прошивка для at89c1051 (тут устройство само http://radiosait.ru/page_282.html ) Помогите кто знает пожалуйста ОЧЕНЬ СРОЧНО НАДО зпустить ту схемку! если не тяжело то пришлите cкомпилированный hex!!!! :shock:
Вложения
dcm.asm
(4.3 КБ) 241 скачивание
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

вам же говорили: это не AVR, это MCS51, причем похоже код с ошибками... тут вашему вопросу не место
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

не догоняю за оператор ANDI !
допустим
ldi temp, ob11111111
andi temp, ob11110000
чему равен temp? ob11110000?

а если
ldi temp, ob00001111
andi temp, ob11110000
чему равен temp? ob00000000?

и еще пример
ldi temp, ob01111111
andi temp, ob10000000
breq metka(переход на метку тк результат предыдущей операции равен нулю???)
не зная броду не лезь к вольтмоду
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Да.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

спс
не зная броду не лезь к вольтмоду
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

я начал изучать программирование микроконтроллеров! начал я свое знакомство с ними с ОБУЧАЛКИ! мне нравится!
дошел до последней главы (динамический опрос клавиатуры), прочитал, появилось множество вопросов и непонятностей!
залез в полный код программы ( http://radiokot.ru/start/mcu_fpga/avr/1 ... yboard.asm ) мне понадобилось четыре дня(с учетом того что я уделял время работе и семье) чтобы понять что к чему!
НА мой взгляд код написан неверно

--1 массив DcMatrix: не "соответствует" массиву KeysLUT: а в принципе должен!(кнопки должны соответствовать выводимому на индикаторе изображению)
--2когда проверяются кнопки в каждой строке, то у клавиши "1" код 0 (0b00000000) а вдруг до этого у нас был флажок ob10000000
после чиски по маске клавиша "1" будет восприниматся как флаг
--3 в коде встретил строчку: ori Temp,0b10000000 ;иначе - пишем флажок "повтор" !!! про оператор ORI раньше небыло сказано ни слова! если вместо ori написать ldi тогда понятно будет!

критику воспринимаю адекватно!!! может что и наговариаю! только ведь начал изучать!
--4 чуть не забыл! во время прверки каждой строки клавиатуры! данные записанные в озу сраниваются со значениями
ob01110000 - ни чего не нажато
ob00010000 - первая кнопка
ob00100000 - вторая кнопка
ob01000000 - третья кнопка

а должно быть!
ob01110000 нет кнопки
ob01100000 первая
ob01010000 вторая
ob00110000 третья
Последний раз редактировалось uwrtey Пн сен 20, 2010 11:19:45, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

вот тут поправил немного(в блокнотике)
аж два варианта получилось
не зная броду не лезь к вольтмоду
Ответить

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