Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: указатель в Keil A51  (Прочитано 16825 раз)
0 Пользователей и 9 Гостей смотрят эту тему.
Slava93
Гость
« : 19-06-2007 05:55 » 


 Добрый день !
Скажите пожалуйста , почему не работает инструкция следующего вида
в Keil uVision3

  BUFFER SEGMENT IDATA
 
......................


  MOV R1,#10H
  MOV R0,#UKAS

 LABEL: MOV @RO,#AAH
        INC R0
        DJNZ R1,LABEL
        SJMP $

 RSEG BUFFER

 UKAS: DS 10H

При компиляции выдает ошибку A45:UNDEFINED SYMBOL ( PASS-2)
и указывает на строку LABEL:MOV @R0,#AAH

Как сделать правильно ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 19-06-2007 06:24 » 

тут
LABEL: MOV @RO,#AAH
у тебя в R0 - стоит буква o или цифра 0 ? Ага
Записан

Slava93
Гость
« Ответ #2 : 19-06-2007 06:37 » 


 Стоит R0 , то есть цифра. Интересует понимает компилятор такой указатель ?
По идее на втором проходе он должен знать , какой конкретно адрес выделен под
буфер во внутреннем ОЗУ контроллера ( AT89C51).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 19-06-2007 06:53 » 

должен, я думаю, понимать. Но всё таки проверь прямо в коде - не опечатка ли там у тебя с нулём


>>По идее на втором проходе он должен знать , какой конкретно адрес выделен под
- это же регистр, при чём тут второй проход.

И ещё один тестик - закомментируй строку
LABEL:   ;   MOV @RO,#AAH 
, скомпилится ли без неё ?


зы контроллер я в руках не держал, поэтому лишь предполагаю ...
« Последнее редактирование: 19-06-2007 07:00 от Алексей1153++ » Записан

Slava93
Гость
« Ответ #4 : 19-06-2007 08:29 » 


 Если просто написать :

   mov r0,#UKAS

   JMP $

то все нормально , регистру R0 присваивается значение 08h.
Компилятор ругается на инструкцию

  mov @R0, AAh

 Чего ему не хватает ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 19-06-2007 08:33 » 

mov @R0, AAh

если правильно помню, то это значит использовать регистр с адресом AA. А если поставить # - это уже константа.

Slava93, а почему у тебя от строчки к строчке меняется написание ? -
 - то же самое насчёт опечатки (даже если её и не было) - в одномм месте написано
MOV @RO...
в другом
MOV @R0...

СКОПИРУЙ сюда через БУФЕР ОБМЕНА реальный кусок своего кода Улыбаюсь

И ещё - регистр литер не влияет ли ?  Может не R0 надо , а r0 ?
« Последнее редактирование: 19-06-2007 08:35 от Алексей1153++ » Записан

Slava93
Гость
« Ответ #6 : 19-06-2007 08:58 » 


 Все разобрался ! Ошибка была в том , что если константа начинается не с десятичной
цифры , то надо добавлять 0 !

   То есть
      MOV @R0,#0AAH

А если 
      MOV @R0,#AAH 

 то компилятор дает ошибку.

Спасибо Алексей , что натолкнули в нужном направлении !
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 19-06-2007 09:39 » new

по большому счету
рекомендую
применять следующую конструкцию, как ты и писал:

   mov r0,#UKAS

это даст возможность не искать константы в теле программы и не возникло бы такой ашипки.
Алексей1153++, не путай народ
Цитата
mov @R0, ...
если правильно помню, то это значит использовать регистр с адресом AA. А если поставить # - это уже константа.
Правильно: по адресу в R0 положить...

А вообще-то типичная ошибка, к сожалению
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 19-06-2007 09:50 » 

Sla, во первых, цитату ты не до конца привёл ) Я говорил именно про #AA , а не про mov @r0. И в зависимости от решётки, второй операнд понимается как константа или как регистр с таким адресом

А что я могу ошибаться , это я и так сказал.
Записан

Slava93
Гость
« Ответ #9 : 19-06-2007 10:16 » 


 Посмотрел код , который скомпилировал Keil и возникли сомнения
 Вот что получилось

   mov R1,#10H
   MOV R0,#08H

 LABEL: MOV @R0,#0AAH
        INC R0
        DJNZ R1,LABEL
        SJMP $

 Вроде все нормально , но банк регистров при сбросе устанавливается нулевой ,
 а R0 компилятор назначил адрес из 1-го банка .
То есть в инструкции MOV @R0, #0AAH процессор должен обратиться по адресу в ОЗУ 00H ,
а не 08h как следовало ожидать ? Причем инструкция USING 0 была использована.
То есть компилятор должен был добавить команду
 SETB RS0 в этом случае или присвоить R0 значение 00h .
Верны ли мои опасения?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 19-06-2007 10:57 » 

Компилятор ничего не должен добавлять!
инструкция только для того чтоб компилятор понимал с каким банком в данном куске кода он работает!
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 19-06-2007 11:05 » 

давай разберемся

mov R1,#10H;  R1<-010H
MOV R0,#08H; R0<-08H

 LABEL: MOV @R0,#0AAH ;по адресу в R0 положить #0AAH , т.е. с 8-го алреса ты будешь заполнять ячейки
        INC R0                     ;следующий адрес 7; последний: 0-1 = 254
        DJNZ R1,LABEL         ; всего 10 циклов
        SJMP $                 ; а здесь прикольно, даже можно применить JMP - компилятор сам поймет что это короткий адрес


зы првда я с Keil не работал
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 20-06-2007 06:18 » 

м-да, это диагноз Улыбаюсь

INC R0                     ;следующий адрес 7; последний: 0-1 = 254

полночи мучался, вертелся
попутал декремент с инкрементом  Сколько об стенку не бейся...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines