реклама на сайте
подробности

 
 
> Работа с PS/2 клавой, Нужны примеры для "Бегущей строки"
KmUa
сообщение Sep 14 2005, 19:49
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 28-12-04
Из: Украина
Пользователь №: 1 725



Не подскажете, где можно найти примеры сопряжения (програмная реализация) МК состандартной PS/2 (AT) клавиатурой. Желательно на ASM51.
Информация необходима для реализации проекта "Бегущая строка", а так как опыт программирования МК у меня очень невелик прошу вашей помощи и поддержки в данном направлении (возможно уже есть ресурс на эту тему?)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
dm_mur
сообщение Sep 15 2005, 03:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 255
Регистрация: 10-03-05
Из: Омск
Пользователь №: 3 195



Цитата(KmUa @ Sep 14 2005, 22:49)
Не подскажете, где можно найти примеры сопряжения (програмная реализация) МК состандартной PS/2 (AT) клавиатурой. Желательно на ASM51.
Информация необходима для реализации проекта "Бегущая строка", а так как опыт программирования МК у меня очень невелик прошу вашей помощи и поддержки в данном направлении (возможно уже есть ресурс на эту тему?)
*


Могу кинуть исходником на Це - реализовывал работу с клавой на мк Фуджитсу. Использовал УАРТ в синхронном режиме, с клавиатуры только ввод - т.е. самой клавой не управляю. Вам я думаю этого хватит.
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 15 2005, 04:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Описание и исходник для авр-ки.
"AVR313: Interfacing the PCAT Keyboard (13 pages, revision B, updated 5/02)
Most microcontrollers requires some kind of human interface. This Application Note describes one way of doing this using a standard PC AT Keyboard. "

http://www.atmel.com/dyn/resources/prod_do...nts/DOC1235.PDF
http://www.atmel.com/dyn/resources/prod_documents/AVR313.zip

Главу книги Нортона в подобной теме уже выкладывал.


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
KmUa
сообщение Sep 15 2005, 19:03
Сообщение #4





Группа: Новичок
Сообщений: 7
Регистрация: 28-12-04
Из: Украина
Пользователь №: 1 725



Цитата(dm_mur @ Sep 15 2005, 07:12)
Могу кинуть исходником на Це - реализовывал работу с клавой на мк Фуджитсу. Использовал УАРТ в синхронном режиме, с клавиатуры только ввод - т.е. самой клавой не управляю. Вам я думаю этого хватит.
*


Буду очень признателен если вы отправите исходники на paradox2003@ukrpost.net- доступ к ftp я пока не заслужил.
Go to the top of the page
 
+Quote Post
Born
сообщение Sep 29 2005, 10:45
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 29-09-05
Пользователь №: 9 073



Смотри здесь
http://www.computer-engineering.org/
вроде понятно все, я пробовал, получилось
Go to the top of the page
 
+Quote Post
rar_
сообщение Oct 12 2005, 09:15
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 20-09-05
Пользователь №: 8 765



Цитата(KmUa @ Sep 14 2005, 22:49)
Не подскажете, где можно найти примеры сопряжения (програмная реализация) МК состандартной PS/2 (AT) клавиатурой. Желательно на ASM51.
Информация необходима для реализации проекта "Бегущая строка", а так как опыт программирования МК у меня очень невелик прошу вашей помощи и поддержки в данном направлении (возможно уже есть ресурс на эту тему?)
*

PS_O_Data
PS_O_Clk - отдельные порты для тянущих к земле транзисторов
PS_DATA - любой порт - вход
WR_FIFO(dan); - делайте с кодом что хотите



//----------------------------------------------------------------------------------
-------------------------------------
static void
interrupt //прерывание
INT0 - высокий приоритет
prer(void)
{
unsigned char dan; //принятый байт

if(Gl_Wr_KB) //если нужна
передача
{
if(Gl_Bufer_WR & 0b0000000000000001) PS_O_Data=0; //передача бита - 1
else PS_O_Data=1; //передача бита - 0
Gl_Bufer_WR=Gl_Bufer_WR >> 1; //сдвиг буфера
Gl_Scet_Bit_WR++; //посчитали этот бит

if(Gl_Scet_Bit_WR >= 11) //если переданы все
биты
{
Gl_Scet_Bit_WR=0; //сброс счетчика
Gl_Wr_KB=0; //сброс флага
передачи
PS_O_Data=0; //data отпущен

Gl_Scet_Bit=0; //сброс счетчика
клавы - это для синхронизации приема следующего кода
Gl_Bufer=0; //сброс буфера клавы
}
}
else //просто прием
данных
{
if(PS_DATA) Gl_Bufer=Gl_Bufer | 0b1000000000000000; //прием бита - 1
else Gl_Bufer=Gl_Bufer & 0b0111111111111111; //прием бита - 0
Gl_Bufer=Gl_Bufer >> 1; //сдвиг буфера
Gl_Scet_Bit++; //посчитали этот бит

if(Gl_Scet_Bit >= 11) //если приняты все
биты
{
dan=Gl_Bufer >> 5; //получим сам байт
WR_FIFO(dan); //запись кода
клавиатуры в буфер
Gl_Scet_Bit=0; //сброс счетчика
Gl_Bufer=0; //сброс буфера
}
}

INT0IF=0; //сброс флага
прерывания
}


//----------------------------------------------------------------------------------
-------------------------------------
void Write_KB(unsigned char
dan) //запись в
клавиатуру
{
unsigned char i; //просто переменная
unsigned char chetn; //счетчик четности
unsigned char buf; //буфер для сдвига
данных

if(Gl_Wr_KB == 0) //если запись не
идет
{
buf=dan; //данные в буфер
chetn=1; //предположим что
четность есть
for(i=1;i<=8;i++) //переберем все биты
{
if(buf & 0b00000001) //если младший бит
равен 1
{
if(chetn) chetn=0; //суммирование
получится побитное
else chetn=1;
}
buf=buf >> 1; //сдвинем на
следующий бит
}
Gl_Scet_Bit_WR=0; //сброс счетчика
битов для передачи по PS/2
if(chetn) Gl_Bufer_WR=0b0000001100000000; //начальное
значение Gl_Bufer_WR - четность есть
else Gl_Bufer_WR=0b0000001000000000; //начальное
значение Gl_Bufer_WR - четности нет
Gl_Bufer_WR=Gl_Bufer_WR | dan; //подготовка блока
битов

PS_O_Clk=1; //clk к 0-лю
for(i=1;i<=50;i++) asm("nop"); //100 мкС
PS_O_Data=1; //data к 0-лю
Gl_Wr_KB=1; //выставили флаг
записи
PS_O_Clk=0; //clk отпущен -
условие записи выполнено
DelayMs(20); //время на запись
}
}
//----------------------------------------------------------------------------------
-------------------------------------
void Set_Status_KB
(void) //уста
новка статуса клавы
{
unsigned char stat; //статус клавы

stat=0b00000000; //все биты сброшены

if(Gl_Num_lock) stat=stat | 0b00000010; //установка бита
Num_lock
if(Gl_Caps_lock) stat=stat | 0b00000100; //установка бита
Caps_lock
if(Gl_ScrollLock) stat=stat | 0b00000001; //установка бита
Gl_ScrollLock

Write_KB(0xED); //команда установки
лампочек
Write_KB(stat); //запись статуса в
клаву

Write_KB(0xF3); //команда установки
времени повтора
Write_KB(0x70);
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016