Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клавиатура, Клавиатура 
:(
    Опции темы
ABCD
Дата 29.3.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Здравствуйте уважаемые программисты!

Имеется самодельное микропроцессорное устройство.
К нему подключена IBM совместимая клавиатура с использованием
клавиатурного контроллера i8042.
Клавиатура прекрасно передаёт скан-коды в систему, 
но возникла небольшая проблемка. При исследовании стандартных
команд управления клавиатурой (описанных в популярной литературе,
популярными авторами) оказалось что из всех команд работает только
команда сброса и самотестирования клавиатуры -FFh.
Такая интересная команда как EDh – управление светодиодными
индикаторами работает только на двух из семи проверенных мной 
клавиатур разных производителей. Все клавиатуры исправные.
Что ли у разных клавиатур разные команды управления?
Может кто сталкивался с такой проблемой, помогите пожалуйста
разобраться.
Подскажите, где найти систему команд управления клавиатурой.

С уважением Михаил

PM MAIL   Вверх
Dude03
Дата 29.3.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Проблема в том, что контроллер клавы медленная штука. И чтобы дождатся ответа, надо подождать чуток=).
Например так:
jmp $+2
jmp $+2
вроде хватало всегда. Может причина и не в этом=)

Это сообщение отредактировал(а) Dude03 - 29.3.2007, 23:32
PM MAIL   Вверх
MAKCim
Дата 29.3.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



у меня вот была проблема: IRQ1 генерировался по 4 раза на каждое нажатие/отпускание клавиши
дело в том, что контроллер клавиатуры медленнее чем ядро процессора работает и пока до него доходил EOI (что дескать обработка прерывания завершилась) он (контроллер) еще 3 раза успевал послать сигнал по IRQ1
даже jmp, который предложил Dude03 может не спасти
мне пришлось цикл делать, чтобы процессор затормозить
Код

    mov ecx, 0100000h
@@:
    dec ecx
    jnz @B



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dude03
Дата 30.3.2007, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Цитата(MAKCim @  29.3.2007,  23:39 Найти цитируемый пост)

mov ecx, 0100000h
@@:
    dec ecx
    jnz @B


И меньше, и быстрее smile :
Код

       mov ecx, 0100000h
@@:
      loop @B


Это сообщение отредактировал(а) Dude03 - 30.3.2007, 07:44
PM MAIL   Вверх
MAKCim
Дата 30.3.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(Dude03 @  30.3.2007,  07:43 Найти цитируемый пост)
И меньше, и быстрее

loop - 4 микрооперации (декодирование за такт не всегда получится даже при наличие свободного декодера)
dec, jnz - по 1-ой микрооперации


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CALL
Дата 30.3.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



Расскажу немного как я пытаюсь программно управлять клавиатурой.
Скажем мне необходимо в определённый момент времени 
Включить один из тёх индикаторов на клавиатуре, например CapsLock
Пишу следующую последовательность команд:
KBD1:    IN    AL,61h    ;В моём устройстве регистр состояния клавиатуры
                ;находится по адресу 61h (не как у IBM AT 64h), так проще
;было сделать дешифратор адреса.
    AND    AL,02h    ;Проверяем состояние входного буфера если ещё 
    JNZ    KBD1        ;не освободился , ждём и проверяем готовность.
    MOV    AL,0EDh    ;Если готов к принятию следующей команды
    OUT    60h,AL    ;отправляем её во входной буфер контроллера 8042
KBD2:    IN    AL,61h    ;Проверяю разряд 1, если 0 значит контроллер 8042
    AND    AL,02h    ;заглотил отправленную команду и ели она предназначалась
            ;клавиатуре, переслал её по назначению и готов к принятию
;следующей команды или байта данных.
JNZ    KBD2        ;Если ещё не готов, ждём и проверяем готовность.
    MOV    AL,4h        ;Если готов к принятию второго байта команды
    OUT    60h,AL    ;отправляем его так же во входной буфер 8042,
                ;а он перешлёт его в клавиатуру.

Всё вроде правильно, но это работает не на всех клавиатурах.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.