Страница 48 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 03:04:45
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 09:52:06
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`а....
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 10:25:45
ibiza11
приведите листинг полностью. раз прерываний нет, не думаю что будет сложно разобраться.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 10:43:57
GP1
day0l писал(а):
большое спасибо, но этот способ мне известен! хотелось бы вытащить данные из dseg`а....
а в чем соб-сно проблема?
для работы с ОЗУ (оно же .dseg) есть команды
LD, ST в различных модификациях.
методика работы с массивами точно такая же, только организация там байтная, на 2 умножать не надо.
а вообще книжки читать надо

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 10:53:31
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+
......
ОФФ: не могу получить ссылку на пост автора, пришлось пост копировать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 12:44:39
day0l
вопрос собственно состоял в том можно ли в память занести элементы таким методом:
Код: Выделить всё
.dseg
array:
.db 0x63, 0x6, 0x91, 0x79, 0x12, 0x19
или например только так, выделять память под элементы, а потом их вручную заносить:
а если можно то почему у меня не получаеться их вытаскивать, хотя при компиляции проекта аврстудио пишет что dseg занят нужным количеством байт! так почему же когда я их достаю у меня появляються нули?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 13:06:29
Gudd-Head
Как вы в оперативную память запишите данные???
Только из флэша и/или еепрома. Студия только выделяет в оперативке место под ваши переменные. И пишет что место занято. Но на самом деле там ничего нет (в лучшем случае нули, в общем — мусор) пока вы туда что-нибудь не запишите в тексте проги.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 13:38:18
day0l
ну я просто подумал что есть возможность также как и в 80-ом в сегмент данных писать что-то типо:
Код: Выделить всё
msg db 10,13,"Введите кол-во элементов(<15): $"
поэтому попробовал - не получилось и спросил...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 14:52:48
ARV
ну так в 80-ом загрузчик ВСЕ сегменты в ОЗУ грузит из файла, и потому можно инициализировать сегмент данных. вы и тут можете в программе туда что угодно заносить, только загрузчика-то нет... и потому все ваши занесения коту под хвост пойдут

P.S. по-моему, ассемблер AVR ругается на инициализацию сегмента данных - но ошибкой это не считает...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 17, 2010 18:31:37
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 (ОЗУ)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 18, 2010 12:03:48
day0l
спасибо! всё стало на свои места!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс авг 29, 2010 19:21:27
GP1
тут есть 2-а варианта:
1. использовать таймер Т1 (точно знаю его можно так использовать) в асинхронном режиме как RTC, и можно будет без проблем получить 1с интервалы
2. используя один из счетчиков формировать образцовый интервал, ну скажем 10 мс, и уже их считать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт сен 10, 2010 16:37:52
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
так чуть быстрее будет

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт сен 17, 2010 20:29:16
gonc-s
Добрый вечер! Скачал файл dcm.asm (
http://radiosait.ru/files/radiosait/ima ... 82/dcm.asm ) не могу ничем перевести ее в HEX файл. прошивка для at89c1051 (тут устройство само
http://radiosait.ru/page_282.html ) Помогите кто знает пожалуйста ОЧЕНЬ СРОЧНО НАДО зпустить ту схемку! если не тяжело то пришлите cкомпилированный hex!!!!

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт сен 17, 2010 21:45:58
ARV
вам же говорили: это не AVR, это MCS51, причем похоже код с ошибками... тут вашему вопросу не место
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс сен 19, 2010 12:17:35
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(переход на метку тк результат предыдущей операции равен нулю???)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс сен 19, 2010 12:26:14
AI_Disable
Да.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс сен 19, 2010 13:20:24
uwrtey
спс
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс сен 19, 2010 13:34:06
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 третья
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс сен 19, 2010 16:45:51
uwrtey
вот тут поправил немного(в блокнотике)
аж два варианта получилось