Да ничего, бывает. У меня бывали косЯксы и по круче. day0| вот ваше решение проблемы. Код, предоставленный akl,
но только массив array должен быть после .cseg
DX168B писал(а):Да ничего, бывает. У меня бывали косЯксы и по круче. day0| вот ваше решение проблемы. Код, предоставленный akl,
но только массив array должен быть после .cseg
day0l писал(а):
большое спасибо, но этот способ мне известен! хотелось бы вытащить данные из dseg`а....
а в чем соб-сно проблема?
для работы с ОЗУ (оно же .dseg) есть команды LD, ST в различных модификациях.
методика работы с массивами точно такая же, только организация там байтная, на 2 умножать не надо.
а вообще книжки читать надо
day0l писал(а):опять у меня проблемы при работе с памятью, поправьте пожалуйста если не так... собственно сам вопрос: при извлечении байтов из памяти в переменную temp попадают нули, что я делаю не так?(если вместо перечислении элементов массива обьявить только размер массива и потом их принудительно засовывать, то всё нормально...)
вот код:
а если можно то почему у меня не получаеться их вытаскивать, хотя при компиляции проекта аврстудио пишет что dseg занят нужным количеством байт! так почему же когда я их достаю у меня появляються нули?
Как вы в оперативную память запишите данные???
Только из флэша и/или еепрома. Студия только выделяет в оперативке место под ваши переменные. И пишет что место занято. Но на самом деле там ничего нет (в лучшем случае нули, в общем — мусор) пока вы туда что-нибудь не запишите в тексте проги.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ну так в 80-ом загрузчик ВСЕ сегменты в ОЗУ грузит из файла, и потому можно инициализировать сегмент данных. вы и тут можете в программе туда что угодно заносить, только загрузчика-то нет... и потому все ваши занесения коту под хвост пойдут
P.S. по-моему, ассемблер AVR ругается на инициализацию сегмента данных - но ошибкой это не считает...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
.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!
тут есть 2-а варианта:
1. использовать таймер Т1 (точно знаю его можно так использовать) в асинхронном режиме как RTC, и можно будет без проблем получить 1с интервалы
2. используя один из счетчиков формировать образцовый интервал, ну скажем 10 мс, и уже их считать.
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
Добрый вечер! Скачал файл dcm.asm ( http://radiosait.ru/files/radiosait/ima ... 82/dcm.asm ) не могу ничем перевести ее в HEX файл. прошивка для at89c1051 (тут устройство само http://radiosait.ru/page_282.html ) Помогите кто знает пожалуйста ОЧЕНЬ СРОЧНО НАДО зпустить ту схемку! если не тяжело то пришлите cкомпилированный hex!!!!
я начал изучать программирование микроконтроллеров! начал я свое знакомство с ними с ОБУЧАЛКИ! мне нравится!
дошел до последней главы (динамический опрос клавиатуры), прочитал, появилось множество вопросов и непонятностей!
залез в полный код программы ( 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 раз.