Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Сброс клавиатуры

 Ответить Ответить Страница  12>
Автор
Сообщение
AlexZ Смотреть выпадающим
Участник
Участник


Присоединился: 27 Апрель 2005
Категория: Ukraine
Online Status: Offline
Публикации: 81
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Сброс клавиатуры
    Опубликовано: 08 Декабрь 2005 10:28

Помогите разрешить следующую проблему:

имеется оборудование процессорный модуль Octagon 6030, работаем под DOS 6.22,  к нему подключен контроллер клавиатуры, одноко сама клавиатура нестандартная, то есть у нее коды клавиш другие. Необходимо, чтобы программа могла отличать, какая клавиатура в данный момент подключена: обычная или нестандартная. Для этого мы закоротили на нестандартной клавиатуре контакты, соответствующие клавише CapsLock. При старте программа опрашивает статус клавиатуры и распознает, какая клавиатура подключена. Однако при «мягком» перезапуске, например по watchdog, статус клавиатуры не инициализируется. Подскажите как быть?

С уважением, AlexZ.

Наверх
asdn Смотреть выпадающим
Новичок
Новичок


Присоединился: 31 Май 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - asdn Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 14:04
Может быть опрос клавиатуры посадить на прерывание таймера?
Дмитрий
Наверх
AlexZ Смотреть выпадающим
Участник
Участник


Присоединился: 27 Апрель 2005
Категория: Ukraine
Online Status: Offline
Публикации: 81
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 15:04

Вы не совсем поняли проблему: инициализацию клавиатуры при запуске производит BIOS, и он же увидев, что нажата клавиша CapsLock, взводит соответствующие флаги. Но после "мягкого" перезапуска он этого не делает. Вопрос в том, как это сделать самому в программе.

С уважением AlexZ

 

AlexZ
Наверх
asdn Смотреть выпадающим
Новичок
Новичок


Присоединился: 31 Май 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - asdn Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 15:08
Да нет, именно так я и понял. Я предлагаю написать вам резидентную программу с перехватом прерывания таймера. Запишите ее в autoexec и она будет загружаться в память при каждом перезапуске и проверять клавиатуру каждые 55мс
Дмитрий
Наверх
AlexZ Смотреть выпадающим
Участник
Участник


Присоединился: 27 Апрель 2005
Категория: Ukraine
Online Status: Offline
Публикации: 81
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 16:30

Вопрос не в том, когда проверять клавиатуру - моя программа запускается из autoexec.bat и даже чаще, чем 55 мс, опрашивает клавиатуру.

Вопрос в том, как узнать, нажата ли клавиша CapsLock, если знаете, привидите короткий пример на ASM

С уважением, AlexZ

 

AlexZ
Наверх
asdn Смотреть выпадающим
Новичок
Новичок


Присоединился: 31 Май 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - asdn Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 16:36
Понял. К сожалению давненько не писал программы для ДОС, если начну вспоминать - чего-нибудь навру. Могу глянуть книги или раскопать старые тексты. Придется подождать. Или загляните непосредственно в БИОС, он-то ведь делает то, что вам нужно?
Дмитрий
Наверх
asdn Смотреть выпадающим
Новичок
Новичок


Присоединился: 31 Май 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - asdn Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 16:41
Если все же не ошибаюсь, вам нужны вызовы Int 08h, это биосовский обработчик клавиатуры.
Дмитрий
Наверх
asdn Смотреть выпадающим
Новичок
Новичок


Присоединился: 31 Май 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 16
Свойства публикации Свойства публикации   Ответить, цитируя автора - asdn Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 16:44
О! Вот и наврал! Int 09h
Дмитрий
Наверх
AlexZ Смотреть выпадающим
Участник
Участник


Присоединился: 27 Апрель 2005
Категория: Ukraine
Online Status: Offline
Публикации: 81
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 17:37

Я конечно извиняюсь, но с такими познаниями DOS лучше поберегите свои знания для начинающих.

С уважением, AlexZ

 

AlexZ
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2005 18:55

Контроллер клавиатуры генерирует прерывания только по нажатию и отпусканию клавиши. Видимо, поскольку состояние CapsLock не менялось во время сброса, то он и не замечает, что она нажата. Может быть, следует сбросить контроллер клавиатуры?

The keyboard of the AT (and its Intel 8042 microcomputer interface) is
programmable.  You can set the key-repeat rate and delay and control the
"lock" key LED display.

The keyboard controller generates interrupt level 1 (IRQ 1) on each press
and release of a key.  IRQ 1 is vectored to INT 09H and handled by BIOS.

Port 60H is for writing data and is maintained for compatibility with
earlier models.  If the examples using port 64H don't work, try using 60H.

Port 64H is for writing commands and data and for reading keyboard status.
Before sending a command to the keyboard, the BIOS tests its status
(IN AL,64H) and makes sure a key isn't being pressed or the internal
buffer isn't full, etc.  There's a small risk if you just go ahead and
send the command:

    mov   al,cmd_code
    out   64H,al

For a two-part command such as setting the typeamatic rate, it's wise to

 delay a little while between OUTs:

       mov   al,cmd_code
       out   64H,al
       mov   cx,2000H  ;arbitrary
delay: loop  delay
       mov   al,data_value
       out   64H,al

Cmd  Description
▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
0ffH Reset the keyboard and start internal diagnostics
0feH Resend the last transmission
0fdH-0f7H (NOP)
0f6H Set keyboard to defaults and continue scanning
0f5H Set keyboard to defaults and disable keyboard scanning
0f4H Enable keyboard. Kybd sends 'ACK', clears buffer, and starts scanning
──── ───────────────────────────────────────────────────────────────────────

0f3H Set typeamatic rate and delay.  First send 0f3H, then send data byte:
     ╓ 7┬ 6┬ 5┬ 4┬ 3┬ 2┬1┬0╖
     ║0 │  dly│ reptRate       ║
     ╙╥┴─┴─┴─┴─┴─┴─┴─╜
       ║  ╚╦╝  ╚═══════╩═► bits 0-4 set the repeat rate (see below)
       ║    ╚════════════► bits 5-6 set initial delay before first repeat:
       ║                          00=250ms; 01=500ms; 10=750ms; 11=1000ms
       ╚═══════════════► bit 7 is always 0
                                                    Value Rate    Value Rate
     This chart is a partial guide for the repeat    0  = 30.0    0aH = 10.0
     rate (bits 0-4).  You can interpolate for       1  = 26.7    0dH =  9.2
     values not shown, but let's face it, you're     2  = 24.0    10H =  7.5
     only interested in the fastest rates.           4  = 20.0    14H =  5.0
                                                     8  = 15.0    1fH =  2.0

     The keyboard is initially set to begin repeating after 1/2-second and
     repeat at 10 repeats per second.  This is much too slow.  A data byte
     of 01H sets the delay to 1/4-second with 26 repeats per second.
     See INT 16H 03H (set keyboard rate and delay)
──── ───────────────────────────────────────────────────────────────────────

0f2H-0efH (NOP)
0eeH Echo.  Diagnostics aid.  Simply sends 0eeH right back.
──── ───────────────────────────────────────────────────────────────────────
0edH Turn LED 'lock key' lights on or off. First send 0edH, then send byte:
     ╓ 7┬ 6┬ 5┬ 4┬ 3┬ 2┬1┬0╖
     ║  not used       │ c│n│s║
     ╙─┴─┴─┴─┴─┴╥┴╥┴╥╜
                        ║  ║ ╚═► ScrollLock light 01H=turn on
                        ║  ╚═══► NumLock light    02H=turn on
                        ╚═════► CapsLock light   04H=turn on

     The bit positions 0-3 correspond to bits 4-6 of the keyboard flags
     variable in the BIOS Data Area.  You should make an effort to keep the
     flags in sync with the lights.  For instance, if you do a big favor for
     the user and set his ten-key pad into NumLock mode (by setting bit 5 of
     0:0417) then be sure to turn on the corresponding LED (e.g., bit 1).

Инженер-системотехник
+7 (916) 477 3925
Наверх
 Ответить Ответить Страница  12>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz