Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.04.2009, 21:22  
kramolnic
Частый гость
 
Регистрация: 14.04.2007
Сообщений: 23
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
kramolnic на пути к лучшему
По умолчанию Помогите со сбросом USART КР580ВВ51А

Здравствуйте, уважаемые форумчане!
Сейчас в институте по курсу Микропроцессорные системы мы занимаемся программированием учебного комплекса "Электроника МС2702", построенного на базе микропроцессора КР580ИК80А.
Возникла проблема со сбросом микросхемы-контроллера последовательного ввода-вывода КР580ВВ51А, входящей в состав комплекса.
Задание состоит в том, чтобы запрограммировать обмен данными между персональным компьютером и комплексом, подключенным к его COM-порту. Сам обмен организовать получилось, но не получается сделать корректный сброс микросхемы ВВ51. Проблема такая. После ввода программы в память комплекса производится (и то не всегда!) нажатие клавиши аппаратного сброса. При этом производится сброс процессора и контроллера ввода-вывода.
Согласно документации, ВВ51 после сброса ожидает на свой порт управления (в нашем комплексе это порт FBh) последовательно сначала управляющее слово режима работы (УСРР), а затем управляющее слово инструкции (УСИ). В слове режима работы указывается режим передачи (синхрон/асинхрон, параметры посылки и т.п.), а в слове инструкции либо разрешается ввод-вывод, либо производится программный сброс контроллера ВВ51. Сразу после сброса контроллера и загрузки этих двух слов все последующие слова интерпретируются как слово инструкции, что позволяет включать-выключать ввод-вывод или производить сброс при работе программы.
Так вот проблема в том, что если программа была перезапущена с самого начала без аппаратного сброса, то отправленное слово режима работы на этапе инициализации ввода-вывода будет интерпретироваться контроллером как слово инструкции, а не слово режима работы. Поэтому при перезапуске программы без аппаратного сброса комплекса (и только тогда) необходимо сначала слать в контроллер слово сброса, а дальше - выполнять программу как обычно.
Вот тут у меня и возникают сложности. Как можно узнать наиболее правильно, был произведен аппаратный сброс или нет? Читать содержимое регистров процессора на предмет какого-то флажка - мне кажется корявым и не надежным решением. Есть ли другие способы? Может быть, есть способ узнать от самого контроллера ввода-вывода, какое слово он сейчас ожидает и в каком режиме он находится?
В аттаче - asm-код программы с комментариями.
Буду очень признателен, если вы хотя бы подскажете, как решить эту проблему.

Заранее спасибо!

Прикрепленный файл: 6958881.zip
Реклама:
kramolnic вне форума  
Непрочитано 06.04.2009, 17:21  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию

В 580 серии узнать о аппаратном сбросе нельзя никак. Сам ВВ51 имеет внутренний и внешний сброс. У буржуев написано так:
Цитата:
The meaning of the bits in the command register is as follows:


D7: EH 1=hunt mode 0=normal operation
D6: IR 1=internal reset 0=normal operation
D5: RTS set nRTS output value 1: nRTS='0' 0: nRTS='1'
D4: ER 1=reset error flags 0=keep error flags
D3: SBRK 1=send break character 0=normal operation
D2: RXE 1=enable receiver 0=disable receiver
D1: DTR set nDTR output value 1: nDTR='0' 0: nDTR='1'
D0: TXEN 1=enable transmitter 0=disable transmitter
Т.е. записав "1" в 6-й разряд регистра команд можно выполнить сброс контроллера и начать его инициализацию
Выполнять инициализацию нужно независимо от аппаратного сброса. Ведь на момент начала работы программы кто-то мог запрограммировать другой режим, и для корректной работы нужно задать свой режим работы. Возможно после команды сброса нужно ввести проверку состояния контроллера и не начинать передачу до момента готовности ВВ51. Другой вариант- обычная задержка на 100-200мкС.
MisterDi вне форума  
Непрочитано 06.04.2009, 18:09  
kramolnic
Частый гость
 
Регистрация: 14.04.2007
Сообщений: 23
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
kramolnic на пути к лучшему
По умолчанию

Цитата:
Выполнять инициализацию нужно независимо от аппаратного сброса.
Совершенно согласен. Но вот тут и возникает проблема, как организовать сброс, независимый от начального состояния комплекса?
Мне тут подсказывают, что надо отправить сначала слово-болванку (которое не навредит, но будет распознано либо как слово инструкции либо как слово режима - без разницы), затем заслать слово сброса, а уже потом инициализировать контроллер.
Остается пораскинуть мозгами и понять, наконец, какое слово выбрать за болванку.
Еще предложения будут?

P.S. Касательно того, что надо заслать единичку для сброса - не все так просто. Контроллер на один и тот же канал принимает два управляющих слова, каждое из которых интерпретируется по-своему. Проблема как раз и состоит в том, как выбрать правильный порядок засылки, чтобы произвести сброс.
kramolnic вне форума  
Непрочитано 06.04.2009, 18:29  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Когда-то очень давно писал софт для платы с несколькими ВВ51. Тонкостей не помню, дело было в 90-х годах, но помню что после долгих плясок с бубном вокруг описанного в документации - остановились на железно работающем варианте - в самом начале писали три раза 0 в нее, а потом уже делали стандартную инициализацию.

Кажется, подобный глюк был именно в ВВ51, в буржуйских все по даташиту.

Теоретически могу и исходник найти... наверное.
nml вне форума  
Непрочитано 07.04.2009, 01:07  
kramolnic
Частый гость
 
Регистрация: 14.04.2007
Сообщений: 23
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
kramolnic на пути к лучшему
По умолчанию

Три раза 0, боюсь, не устроит нашего преподавателя.
Сегодня у него интересовались, можно ли в качестве "болванки" использовать 00? Он сказал, что нет, т.к. если перевести этим нулем микросхему в режим синхронной передачи, она начнет требовать еще управляющие слова (для задания символов синхронизации, как по даташиту).
Я пробовал слать в качестве "болванки" слово режима работы:
СРР -› Сброс -› СРР -› Разрешение ввода-вывода.
Слова выглядели вот так:
СРР: 1111 1010 - 2 стоп-бита, контроль по четности, контроль разрешен, длина 7 бит, предделитель 16.
Сброс: 0100 0000
Разрешение ввода-вывода: 0011 0111

Однако, если использовать в качестве "болванки" СРР, то может происходить сброс, т.к. в СРР установлен предпоследний бит (D6). Поэтому комплекс, когда я так сделал, сначала на меня матом ругался, а потом смайликами ухмылялся

В качестве болванки уже хотел использовать 00, но теперь придется придумывать еще что-то, а опробовать программу смогу теперь только в субботу.
Цитата:
Кажется, подобный глюк был именно в ВВ51, в буржуйских все по даташиту.
Ого! а там еще и глюки есть?! не нравится мне это.

А нет ли у Вас, nml, эмулятора какого-нибудь с поддержкой программирования КР580ВВ51А? Я б с ним поигрался

P.S. сейчас посмотрел ДШ: возможно, прокатит вариант 01h. По крайней мере, контроллер останется в асинхронном режиме. Но я не уверен, что не будет других косяков.
kramolnic вне форума  
Непрочитано 07.04.2009, 09:09  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию

Вот нашел в гугле документ, в котором говорится, что для перепрограммирования режима работы ВВ51 нужно писать в регистр управления 2 байта - сброс и инициализацию (стр 25)

Прикрепленный файл: 7587123.pdf
MisterDi вне форума  
Непрочитано 07.04.2009, 14:59  
kramolnic
Частый гость
 
Регистрация: 14.04.2007
Сообщений: 23
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
kramolnic на пути к лучшему
По умолчанию

Большое спасибо за книгу, однако (пните меня, если не прав):
Цитата:
для перепрограммирования режима работы ВВ51 нужно писать в регистр управления 2 байта - сброс и инициализацию
Это - для перепрограммирования. А описанная в документе процедура инициализации (режим работы - инструкции) применима только тогда, когда программа загружается после включения комплекса и аппаратного сброса.
В моем же случае возможен перезапуск программы с начала без аппаратного сброса. Получается, что процедуру сброса-инициализации надо производить не всегда одинаково.
Поэтому буду пробовать на ближайшей лабораторной работе запустить программу, описанную в последнем своем посте.
kramolnic вне форума  
Непрочитано 07.04.2009, 20:32  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию

На стр 25 описан случай, когда необходимо перенастраивать контроллер на различные режимы, при этом упор делается исключительно на возможность выполнения программного сброса и правила использования нескольких режимов т.е. как раз Ваш случай. Я подобными устройствами занимался в конце 80-х, поэтому всего не помню, но любой комплекс (у меня он назывался "Электроника К1-10") после аппаратного сброса обязательно настраивает всю свою периферию на режимы по умолчанию, которые описаны в документации. Поэтому я с 99% уверенностью могу сказать, что если Вы включите команды сброса ВВ51 (MVI A,40H OUT 0FBH) в свою программу, то она будет нормально работать.
MisterDi вне форума  
Непрочитано 07.04.2009, 21:21  
kramolnic
Частый гость
 
Регистрация: 14.04.2007
Сообщений: 23
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
kramolnic на пути к лучшему
По умолчанию

Я с Вами согласен, но проблема в другом.
1) Программа будет работать нормально до первой остановки и перезапуска. Проблема возникает как раз из-за того, что сброса может и не быть, а программа будет перезапущена.
Ситуация такая:
Загрузили прогу в память -› аппар. сброс-› запуск программы (ВВ51 ожидает режим работы, затем - слово инструкции для ввода-вывода или сброса) -› Загрузка режима работы -› разрешение ввода-вывода -› обмен данными.
Теперь остановим программу и запустим с адреса 2100.
Контроллер уже был проинициализирован ранее, а потому все команды понимает как инструкции. И сразу же он натыкается на Загрузка режима работы -› разрешение ввода-вывода.
Поэтому делать, видимо, надо так:
Загрузили программу в память -› аппаратный сброс-› запуск программы с адреса 2100 -› заглушка (тут и проблема- что применить?) -› команда сброса -› режим работы -› разрешение ввода-вывода -› обмен данными.
Именно эту схему видимо придется применить.
2) Проблема у меня только в том, что проверить программу я не смогу до лабораторной работы, а о правильности своей логики могу только догадываться (какое слово для сброса применить - не уверен, подскажите, пожалуйста). В прошлый раз сброс осуществить не удалось (программу я прикладывал).
P.S. Задачка-то простая, но возможность отлаживать код есть только на лабе, где его уже требуют сдать. До субботы я ничего проверить не имею возможности.[/quote]
kramolnic вне форума  
Непрочитано 08.04.2009, 11:43  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от nml
Теоретически могу и исходник найти... наверное.
Вот нашел. Это процеДурка инициализировала ВВ51, выдрана из рабочего проекта (работало на минской ТЭЦ-4)

Код:
Procedure Init(Adr:Word);
Begin
  Port[Adr]:=0; Zdr;
  Port[Adr]:=0; Zdr;
  Port[Adr]:=0; Zdr;
  Port[Adr]:=0; Zdr;
  Port[Adr]:=$40; Zdr;
  Port[Adr]:=$FF; Zdr;
  Port[Adr]:=$37;  Zdr;
End;
То есть 4 нуля писались перед началом инициализации. Без этого - раз на раз не приходилось.
nml вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите принять строку по usart от АТ модема kasper37 Микроконтроллеры, АЦП, память и т.д 10 03.01.2009 16:21
Помогите разобраться с USART в CodeVisionAVR vendim Микроконтроллеры, АЦП, память и т.д 20 26.07.2007 16:42
реле времени со сбросом на 0. ers Автоматика и аппаратура связи 2 18.07.2007 12:58
реле времени со сбросом на 0. ers Автоматика и аппаратура связи 2 12.07.2007 09:17
Народ, помогите, плиз! 2й USART в PIC mxsimus Микроконтроллеры, АЦП, память и т.д 3 24.12.2004 02:26


Часовой пояс GMT +4, время: 16:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot