Цитата(Maik-vs @ Sep 21 2007, 12:17)


Это всё Вы проверяли, или И ТАК знаете?
Нажмите для просмотра прикрепленного файлачтение IDent32:
ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh
cyc: lmp r16,Y+
st X+,r16
CPI16 X,C_MsgTable
brlo cyc
(где CPI16 16-разрядное сравнение.)
Объясните, почему у меня это работает?
Так а что здесь может неработать ? Разве что lmp r16,Y+ нет такой команды у AVRов . Выборка из памяти программ производится
только через регистровую пару Z ( см. описание системы команд ).
Всё в рамках того , что я и писал .
shl Yl я так понимаю описка , должно быть по идее lsl . Гораздо проще записать так
ldi Yh,high(IDent32 х2)
ldi Yl,low(IDent32 х2)
и нет необходимости в лишних 2 строчках ( lsl Yl и ror Yh )
Так и что вы делаете ? Вы загружаете указатель
чётным значением адреса на базу данных , а затем просто инкрементируете указатель , и естественно он будет последовательно выбирать из таблицы правильные значения ( как чётные так и нечётные ) . Но речь то о другом - у вас есть указатель на базу данных и вам необходимо
выбрать произвольное значение по этой базе данных ( т.е смещение от начала базы данных ). Ну и как вы будете делать ? например так ? :
ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh
add Yl,temp1
clr temp1
adc yh,temp1
lpm temp1,Y
где temp1 - произвольное смещение по таблице
И по вашему вы будете правильно получать значения из базы данных ? Тогда попробуйте , убедитесь в своей неправоте .
Цитата(Wild007 @ Sep 21 2007, 12:36)

Ну тогда напишите в программе
Код
.DB 0
.DB 4
и потом покажите варнинги компилятора и таблицу
А в вашей программе проще и нагляднее написать
Код
.DB "Тестовая болванка"
Простите , непонял . . .
Цитата(Maik-vs @ Sep 21 2007, 13:22)

Да! так ставит только по чётным адресам. А DB 0,1 DB2,3 писать не судьба?
А вот это
у меня раньше почему-то не работало

DB 0,1 DB2,3 писать не судьба?
Это как это ? Извените , сразу немогу ощутить глубину мысли . . .
Цитата(Yuriy_AVR @ Sep 21 2007, 13:41)

Так а что здесь может неработать ? Разве что lmp r16,Y+ нет такой команды у AVRов . Выборка из памяти программ производится только через регистровую пару Z ( см. описание системы команд ).
Всё в рамках того , что я и писал .
shl Yl я так понимаю описка , должно быть по идее lsl . Гораздо проще записать так
ldi Yh,high(IDent32 х2)
ldi Yl,low(IDent32 х2)
и нет необходимости в лишних 2 строчках ( lsl Yl и ror Yh )
Так и что вы делаете ? Вы загружаете указатель чётным значением адреса на базу данных , а затем просто инкрементируете указатель , и естественно он будет последовательно выбирать из таблицы правильные значения ( как чётные так и нечётные ) . Но речь то о другом - у вас есть указатель на базу данных и вам необходимо выбрать произвольное значение по этой базе данных ( т.е смещение от начала базы данных ). Ну и как вы будете делать ? например так ? :
ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh
add Yl,temp1
clr temp1
adc yh,temp1
lpm temp1,Y
где temp1 - произвольное смещение по таблице
И по вашему вы будете правильно получать значения из базы данных ? Тогда попробуйте , убедитесь в своей неправоте .
Простите , непонял . . .
DB 0,1 DB2,3 писать не судьба?
Это как это ? Извените , сразу немогу ощутить глубину мысли . . .
Да , в приведённом мной тексте конечно же необходимо заменить Y на Z
Продолжаем прикол .
Так вот , после того , как база данных была записана в необходимом для меня виде :
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_Off<<D3)+(Seg_Off<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\
0
и откомпиллирована , а также успешно проверена работоспособность программы , затем в конце каждой строчки были добавлены комментарии ( // ля ля ля ) .
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_Off<<D3)+(Seg_Off<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\ //
0
И . . . опять всё плохо . Опять компиллятор находит ошибку во второй строчке . Но что самое удивительное - повторное удаление комментариев уже не приводит к положительным результатам . Кто не верит может попробовать . Может у меня уже глаза "замылились " , уже сам себе не верю . Чушь какая- то .