Стенд на mcs51(AT89s52)

Тема в разделе "WASM.ELECTRONICS", создана пользователем a9d, 19 янв 2009.

  1. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Есть старый стенд EV8031/AVR. По паспорту в нем должен быть установлен AT89c51, но на деле там стоит AT89s52.
    В паспорте написано:
    Код (Text):
    1. 4. Технические характеристики.
    2. • Используемые однокристальные процессоры AT89C51, AT89C52, AT90S8515 (ATmega8515) (корпус DIP-40);
    3. • Память программ – 16 КБайт;
    4. • Память данных – 16 КБайт;
    5. • Последовательная EEPROM память, 256 байт (AT24C02) в стандартной поставке;
    6. и т.д
    7.  
    8. чуть ниже:
    9.      Программа загрузчик находится в Flash-памяти микроконтроллера AT89C51, она проводит
    10. инициализацию последовательного приемопередатчика ОЭВМ (DD1(AT89c51)), проверяет
    11. наличие и емкость памяти данных.
    12.      Память ОЗУ объемом 32К делится на две части по 16К. Одна часть для памяти программ,
    13. другая для памяти данных. В режиме загрузки вся память 32К отображается в адресное
    14. пространство, как память данных.
    Но в даташитах о таких объемах памяти не говорится.
    Из внешней памяти есть микросхема AT24C256(32 Кбайта). Как я понял это об этой памяти говорится.
    Это получается, что AT89c51 умеет выполнять функции записанные на внешнем EPROM-ме ?
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Всё в паспорте написано верно.
    Загрузчик находиться в ФЛЕШЕ самого МК.
    Статическая память в объеме 32кБ в этот момент видится МК как память данных.
    После загрузки идет перевод МК на работу с внешней памятью кода, системный контроллер (проще дешифратор) разбивает адресное пространство ОЗУ пополам. Первые 16кБ - МК видит как память программ, а вторые - как внешшюю память данных.
    Чего не понятно?

    http://kntu-tk.narod.ru тут есть модель этого стенда для ПРОТЕУСА. И еще пару примочек.
    http://opensys.com.ua или дуй сюда. Сайт разработчиков этого стенда.

    Или заходи в ауд. 305а 3 корпуса Херсонского Национального Технического Университета.
    Рассажу и покажу, что и как.

    Удачи.
     
  3. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Спасибо. Я с внешней памятью так не работал, и в гугле ничего толкового не нашёл.

    Так далеко да топать явно не смогу.

    И еще один вопросик. На основе него можно сделать, без знания особых тонкостей стенда, эмулятор жесткого диска?

    Программную модель диска уже делал. Теперь все нужно сделать все на железе.
     
  4. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Тактовая стенда 7372800 Гц а машинный цикл 12 тактов, медленовато - IMHO.
    А готовый купить?
     
  5. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Тогда нет смысла учится, ведь все можно купить.
    Задача поставлена по другому.
    Есть стенд, делай)))
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    В принципе сигналов на системном раъеме стенда хватит для реализации эл. интерфейса.
    Но не знаю как по скорости, хватит или нет.
     
  7. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Появилось пару вопросов.
    Как я понял под данные отводится адреса в диапазоне 4000-7FFF.
    Записывать данные в эту память можно только камандой: MOVX @DPTR, A

    1)При отладке в Proteus-e во внешню память ничего не записывается. Нужно ли постонно устанавливать какуюнибудь защелку или что-то подобное для записи?
    2)При работе с большим массивом использовать ,для аресации, цикл с командой INC DPTR весьма неудобно. А удобней ничего нет?


    PS: С записью разобрался. На микрухе памяти нужно было дописать BASE=0x1FFF.
     
  8. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Нет. Под данные отводится адреса в диапазоне 0000-7FFF

    1) При отладке в Proteus-e во всё адресное пространство внешне памяти пишется. (У меня на машине :) точно )
    2) Можно таким образом. Адрес генерится как P2:R0. Получается можно адресовать внешнюю память в пределах страницы в 256 байт.

    P2 - номер страницы, старшый байт адреса;
    R0 - адрес в пределах страницы, младший байт адреса;
    mov P2, #80h
    movx @R0, A
    Я очень часто юзаю, чтобы сократить прогу.
    http://opensys.com.ua/autobb/viewforum.php?id=4 тут можно спросить, но только 2 раза в году. (Во время проведения олимпиад)
     
  9. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    С записью разобрался. В действительности все пишет))) Но (по крайне мере у меня) в Proteus-е можно память просматривать кусками ко 4кб. Вот и приходится извращаться с BASE.
     
  10. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    2S_Alex: Можете продемонстрировать простенький пример(иммено для модели в Протеусе) который:
    1)Записывает во внешню память пару любых переменных.
    2)После. Создает массив более 4кб во внешней памяти.Забивает его одни числом. Допустим 1.
    3)Далее обнуляет весь массив.
    4)И в конце считывает переменные, из п.1

    Толи у меня с руками не то, то ли модель в Протеусе ведет себя очень странно))))

    ЗЫ: Эмулятор жесткого диска фактически готов.

    PS: Допустим этот кусок кода не пашет(Сделан на основе шаблонов из RadASM).

    Код (Text):
    1. ;File RAMData.Inc
    2. XVAR Massiv,4000h
    3. XVAR Test1,1h
    4. XVAR Test2,1h
    5.  
    6. .............
    7.     mov A,#20h
    8.     mov DPTR,#Test1
    9.     movx @DPTR,A
    10.     mov DPTR,#Test2
    11.     movx @DPTR,A
    12.     mov DPTR,#Massiv
    13.     mov A,#10h
    14.     movx @DPTR,A ;теперь Test1 затерт
     
  11. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Затрудняюсь ответить. Нет слов.
    Протеус гонит.

    Выполняю пошагово - один результат.
    Первая 20Н пишутся по адресу 0007Н
    Потом всё уходит в никуда.

    Выполняю до точки останова - другой.
    но по 0000Н


    Чему верить???

    Завтра тестану на реальном стенде.
     
  12. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    )))) Нашел пару обьяснений глюка.
    1) В Протеусе работу с памятью лучше не отлаживать. В нем память идет по кругу. И длина этого круга 4кб.
    2) При отладке в Протеусе, вывод CS на микросхеме памяти нужно подключать на землю(если инвертный). Иначе в пошаговом режиме запись и чтение из памяти будет происходить не корректно.
     
  13. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Возникла проблемка. А как обмениватся данными между компом и стендом?
    Прошивку залил. Вроде все впорядке. Но как только я подключаюсь к COM порту, стенд тутже сбрасывается.
    Заливал и стандартные тестовые прошивки(те что с ним шли),в них COM порт используеться. Таже фигня.
     
  14. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Когда открывается порт он бергает линию DTR, а она подключена к сбросу MCU.
    Открывай порт так чтобы DTR не трогать.
    И бутет ВАМ счастье. :)
     
  15. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Вычитал следующие:
    Код (Text):
    1. Выбор канала последовательной передачи осуществляется сигналами CFG0, CFG1
    2.  по адресу 9001Н. Установка этих битов в "логический ноль" включает порт 1, на схеме
    3. Х11, этот порт имеет неполный набор сигналов (RxD, TxD, RI) и предназначен для записи программы в стенд.
    4. Программная установка сигналов CFG0 в "0", а CFG1 в "1" формирует выборку
    5. дополнительного канала последовательной передачи данных, разъем Х12. Дополнительный
    6. последовательный канал имеет полный набор сигналов интерфейса RS-232C.
    Это получается для нормальной работы с ком портом нужно использовать X12 ? С первым портом провазился долго. Как не подключаюсь всеравно сбрасывается. Постоянно приходит только ответ "EV8031".

    И еще. А можно подключать второй ком порт к этому же компу? По идее ничего испортится не должно.
     
  16. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Можно.

    Вот только к другому ни-ни. Из-за схемотехники БП ПК можно спалить стенд (~110V если компы не заземлены).

    К полному СОМ порту подключал мобильник и юзал АТ команды, работало.
    А с 3.14СЮКОМ работаю по урезаному порту (порт для заливки).

    Когда делаем настройку порта смотрим сюда:
    Код (Text):
    1. ...
    2. LOCAL   dcb:DCB
    3. ...
    4.     _fbits=0
    5.     _fbits=_fbits or TRUE SHL fBinary
    6.     _fbits=_fbits or TRUE SHL fBinary
    7.     _fbits=_fbits or FALSE SHL fParity
    8.     _fbits=_fbits or FALSE SHL fOutxCtsFlow
    9.     _fbits=_fbits or FALSE SHL fOutxDsrFlow
    10.     _fbits=_fbits or DTR_CONTROL_DISABLE SHL fDtrControl
    11.     ;_fbits=_fbits or DTR_CONTROL_ENABLE SHL fDtrControl
    12.     ;_fbits=_fbits or DTR_CONTROL_HANDSHAKE  SHL fDtrControl
    13.     _fbits=_fbits or FALSE SHL fDsrSensitivity
    14.     _fbits=_fbits or FALSE SHL fTXContinueOnXoff
    15.     _fbits=_fbits or FALSE SHL fOutX
    16.     _fbits=_fbits or FALSE SHL fInX
    17.     _fbits=_fbits or FALSE SHL fErrorChar
    18.     _fbits=_fbits or FALSE SHL fNull
    19.     _fbits=_fbits or RTS_CONTROL_DISABLE     SHL fRtsControl
    20.     ;_fbits=_fbits or RTS_CONTROL_ENABLE     SHL fRtsControl
    21.     ;_fbits=_fbits or RTS_CONTROL_HANDSHAKE  SHL fRtsControl
    22.     _fbits=_fbits or FALSE SHL fAbortOnError
    23.     mov dcb.fbits,_fbits
    24.     mov eax,            SC_.SC_BAUD
    25.     mov dcb.BaudRate,   eax
    26.     mov dcb.ByteSize,   8
    27.     mov dcb.Parity,     NOPARITY
    28.     mov dcb.StopBits,   ONESTOPBIT
    29. invoke SetCommState,hCOM, addr dcb
    30. ...
    Должно заработать.
     
  17. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Ура))) Все заработало. Спасибо.
    Зароботало только на заземленном компе.

    ЗЫ: Но я нашол выход(если заземления нет), перед подключением к порту нужно зажать кнопку сброса программы.
     
  18. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    А как нужно корректо обьявлять большие массивы?

    использую: XVAR disk, 1FFFh
    Но на живом стенде это работает не правельно.
     
  19. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    На сколько БОЛЬШИЕ???

    На стенде установлено только 16кБайт внешней ОЗУ (сегмент: XDATA; макрос XVAR).
    А XVAR disk, 1FFFh - это уже нет половины ОЗУ.
    Может у Вас уже перебор?

    Удачи.
     
  20. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    До 10ти кб. Память на стенде свободная есть.

    Но я заметил удивительную вещь. В одном цикле записываю в весь массив одно число. В другом весь массив считываю и вывожу(после преобразования в ASCII) через COM порт. Все вроде пашет верно. После записываю в этот массив пару значений. Допустим в начало,середину и конец. И снова повторяю вывод всего массива. Тогда можно заметить что массив не изменился.
    Но если считать записаные ранее значения(смещения ведь на них известны), то они окажутся на месте.

    В итоге когда я указываю точный адрес элемента он выводится верно. А c использованием простого цикла
    Код (Text):
    1.    
    2.       F1:
    3.       MOVX A,@DPTR
    4.       inc  DPTR    
    5.        DJNZ R1, F1
    6.        DJNZ R0, F1
    выводится неверный результат.