В прерывании надо читать сразу 8 бит адреса. Этот байт будет индексом в массиве.
Лучше вырубить все остальные дма и прерывания. Оставить только на клавиатуру. Наличие нового байта лучше ожидать в цикле. Если пришел байт - прочитать его и начать анализировать. Предлагаю для дополнительной синхронизации сделать проверку: если в принятом байте 3 старших бита 000 - значит начало пакета, счетчик байтов установить на 0 (если не ожидаем контрольного байта). У следующих байтов 3 старших бита 111. По номеру байта в пакете складывать их в соответствующие переменные (не массив), например, A8_KEY_LINE - A15_KEY_LINE. Тут скорость особая не нужна. Если в последнем байте контрольная совпала - вызываем подпрограмму декодирования - распаковки. Она из 8 байтов должна сделать 256 байтов на все варианты 8 битов адреса. Вот тут скорость нужна, чтобы быстро вычислить 256 байтов.





Ответить с цитированием