Вот тут наткнулся, некогда проверять. интересно, так ли это? "БРЕД с dph, dpl в Atmel c51"
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Лопух 26 октября 2004 г. 09:36

БРЕД с dph, dpl в Atmel c51
В общем наткнулся я на такую бяку (потом конечно вспомнил, что в году 2000 уже было такое, но я как всегда про это забыл).
проц at89s8252

выполняю следующие операции:
SEL_DPS0()
MOV DPTR,#1001H
MOV A,#11H
MOVX @DPTR,A
SEL_DPS1()
MOV DPTR,#2002H
MOV A,#22H
MOVX @DPTR,A
PUSH DPL
PUSH DPH
PUSH DPL1
PUSH DPH1
SEL_DPS0()
PUSH DPL
PUSH DPH
PUSH DPL1
PUSH DPH1
;
После чего:
POP ACC
LCALL HEX_ASCII_DP (вывод в hex виде)
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
POP ACC
LCALL HEX_ASCII_DP
SEL_DPS1()
MOV DPTR,#1001H
MOVX A,@DPTR
SEL_DPS0()
LCALL HEX_ASCII_DP
SEL_DPS1()
MOV DPTR,#2002H
MOVX A,@DPTR
SEL_DPS0()
LCALL HEX_ASCII_DP

что должно быть?

20 02 10 01 20 02 10 01 11 22

а получаем:

10 01 10 01 20 02 20 02 11 22
т.е. загрузка в указанный dptr идет верно, адресация озу тоже (иначе давно было бы заметно).
а вот прямая адресация DPHx, DPLx при сохранении в стеке идет всегда от выбранного dptr.

более того, вот что я нашел у себя в архиве от 2000 года:

При записи в DPLi,DPHi - запись идет по конкретному адресу
При чтении из DPLi,DPHi - чтение идет всегда из указаного через DPS

1) ВОСТАНОВЛЕНИЕ ИЗ СТЕКА - ПРАВИЛЬНО
2) СОХРАНЕНИЕ В СТЕКЕ - НЕВЕРНО (ВЫБРАННЫЙ DPTR)
3) INC DPTR - ВЕРНО
4) INC/DEC ВЫБРАННОГО DPLi,DPHi - РАБОТАЕТ ВЕРНО,
INC/DEC НЕВЫБРАННОГО DPLi,DPHi - +1 К ВЫБРАННОМУ И ЗАПИСЬ В НЕВЫБРАННЫЙ

кто то с таким бодался? или атмел у меня гнилой?
на корпусе:

at89s8252
0038

Цитировать •Редактировать • Инфо

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru