Цитата(SergSit @ Mar 20 2008, 07:22)

Не погорячился. Только поправлю сначала. Для выдачи тетрады нужен один тактовый импульс CL2. Вы не учли, что надо еще входить и выходить из прерывания. А это тоже 6-7МЦ на вход(мин)+ сохранить SREG при входе и востановить при выходе+выход из прерывания 4МЦ. Кроме того данные хранятся в ОЗУ байтами, как известно. Надо время извлечения нужной тетрады из байта извлеченного из ОЗУ. Кроме того надо время чтобы обработать счетчик точек и счетчик строк. Я пытался сделать это устройство на AVR. Не тянет он. Ужимал, учитывал каждый такт. Может я и ошибался. Максимум, что смог получить частоту кадра , что-то около 20 гц(надо вспоминать). Даже если использовать аппаратный SPI, то получаеться что он выдаст байт за те же 16МЦ.
Зачем входить и выходить? Вошли один раз, выдали всю строку и вышли. Зачем извлекать тетрады из байта, если можно хранить по одной тетраде в одном байте, понадобится 80*240=19200 байт внешней озу, смешная цифра, щас внешние озу только на 64КБ+ можно найти, ещё останется на второй кадр, один выводите, второй заполняете.
Вот код выдачи строки с частотой 50Гц, который надо повторить 80 раз. В регистре z находится указатель на кадровый массив, биты 3-0 ваша тетрада, бит4=0 - исходное состояние ноги CL2
Код
ld r16,z+ ;загрузим тетраду - 4MЦ
out portd,r16 ;и сбросим CL2 - 1MЦ
sbi portd,5 ;фронт CL2 - 2MЦ
Выдача тетрады занимает 7МЦ, на строку уходит 7МЦ*80=560МЦ или 35 мкс. Останется 83-35=48мкс на другие дела. Счётчик точек вам уже не нужен, счётчик строк у вас уже готовый, лежит в zl, в конце поставите сравнение zl c 240, если больше, то обнуляете zl. Ну и всё. При переходе на другой кадр просто заменяете весь регистр z, в смысле регистровую пару.