реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вычисление адреса таблицы, Не понятки
ILYAUL
сообщение Apr 29 2008, 18:02
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем привет!

Не могу понять толи ошибка в вычислении адреса таблицы ( выделенно) , толи версия 4.14 глючит , но данные в иммуляторе выдаются не верно. 05.gif HELP



InitregDS:

clr count ; очищаем счетчик количества данных
mov YL,count ; вычисляем адрес данных в таблице
ldi ZL,low(tablini*2)
ldi ZH,high(tablini*2)

call Addaddr ; К подпрограмме сложения
MET1:
lpm temp,Z+ ; извлекаем данные
push temp ; сохраняем данные на случай NACK
MET3:
sts TWDR,temp ; пересылаем данные в DS1337
сall dataWR ; вызываем подпрограмму отсылки
lds temp, TWSR ; проверям ACK
andi temp,$F8
cpi temp,NORMDATW
breq MET2 ; если есть ACK на МЕТ2
brne RET1 ; если NACK то повтор отсылки тех же данных
MET2:
inc count ; добавляем счётчик данных
cpi count,$12 ; проверяем на последний байт данных
brne MET1 ; если не достигнут конец таблицы - вычисление следующего адреса
breq MET4 ; если достигнут формирование STOP
RET1: pop temp ; если NACK извлекаем последниие
rjmp MET3 ; данные табл. и отсылаем ещё раз

MET4: call STOP
STOP: rjmp STOP
…………………………………

;*************************************************
;* *
;* Подпрограмма вычисления адреса данных INIT *
;* *
;*************************************************

Addaddr:
push YH ; Coхраняем YH
lsl YL ; Умножаем YL на 2
ldi YH,0 ; В YH - 0
add ZL,YL ; Складываем address
adc ZH,YH
pop YH
ret ; Возврат
Таблица

.eseg
tablini: .db 00,00,00,$12,01,01,$08,00
.db 00,00,00,00,00,00,00,00
.db 00,00 ; Two control bytes


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 29 2008, 18:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Так пройди по шагам. Здесь же 5 мин работы. Зачем огород городить.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 29 2008, 18:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(SasaVitebsk @ Apr 29 2008, 22:10) *
Так пройди по шагам. Здесь же 5 мин работы. Зачем огород городить.


Прошёл и не раз - не те данные и всё - похоже уже сам зациклился


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 29 2008, 18:57
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ILYAUL @ Apr 29 2008, 21:02) *
.eseg
tablini: .db 00,00,00,$12,01,01,$08,00
.db 00,00,00,00,00,00,00,00
.db 00,00 ; Two control bytes
Это AVRASM ? У него .eseg - это EEPROM ?
А причём тогда lpm ? И зачем тогда на 2 адрес умножать?

Ну а адрес в таблице лучше (быстрее и при этом не длиннее по коду) так вычислять:
Код
    mov    ZL,count
    clr    ZH
    subi    ZL,low(-tablini*2)
    sbci    ZH,high(-tablini*2)
    lpm    temp, Z+
без никаких лишних подпрограмм.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 30 2008, 13:56
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(ReAl @ Apr 29 2008, 22:57) *
Это AVRASM ? У него .eseg - это EEPROM ?
А причём тогда lpm ? И зачем тогда на 2 адрес умножать?


Это ASM AVRStudio -У него .eseg - EEPROM
Спасибо за код . Страно , что сложение на прямую не проходит , только через вычитание.
Оформленно в подпрограмму т.к. в итоге будет не одна таблица.
Если убрать .eseg , то всё вычисляется верно.
Но я так понял , что если я хочу хранить данные в EEPROM - и забирать их оттуда, то не должен умножать на 2, и не использовать lpm- Где бы почитать?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
biDE
сообщение Apr 30 2008, 14:36
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 1-02-06
Из: Одесса
Пользователь №: 13 863



Цитата(ILYAUL @ Apr 30 2008, 16:56) *
Где бы почитать?


В даташите описано. Процессы чтения/записи во FLASH, SRAM и EEPROM отличаются кардинальным образом.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 30 2008, 15:42
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(biDE @ Apr 30 2008, 18:36) *
В даташите описано. Процессы чтения/записи во FLASH, SRAM и EEPROM отличаются кардинальным образом.

Да , почитал - освежил память. Спасибо!


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016