Vic3Dexe wrote:
Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер
Это первый вариант. Я забыл оконечный выложить, я там все начисто переделал. Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение). Таким образом, если клоков было не 10, а скажем 9, то на последнем девятом ждем 100мс и если ничего нет (клока последнего) - вываливаемся в начальное состояние конечного автомата, как будто ничего нам клава и не слала.
Вообще-то не буду лукавить, код я взял и нагло скопипастил (портировал) из проекта для AVR
PS2 Encoder Ну конечно изменил малость для себя кое-чего, но в целом, оригинальный код там. Мне он понравился лаконичностью и вообще понравился. Удобно читается.
К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью.
Vic3Dexe wrote:
Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.
А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера.
С контроллерами конечно по проще в этом отношении, чем с логикой.
А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.