Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

Tutorial 4:Biblioteca MikroC: PS/2

Share:

Bibliotecas MikroC PRO for PIC: PS/2




BIBLIOTECA PS/2

O MikroC PRO for PIC proporciona uma biblioteca para a comunicação com o teclado PS/2 comum.

Importante:
A biblioteca não utiliza interrupções para a recuperação de dados, e exige que o oscilador de relógio para ser pelo menos 6MHz.
Os pinos para que um teclado PS/2 está ligado deve ser conectado às resistências de pull-up.
Embora PS/2 é um barramento de comunicação de duas vias, esta biblioteca não fornece comandos para o teclado; Ex.: pressionando a tecla Caps Lock não acende o LED CAPS LOCK.


É necessário inserir a seguinte dependência:

sbit PS2_Data            at RC0_bit;
sbit PS2_Clock           at RC1_bit;
sbit PS2_Data_Direction  at TRISC0_bit;
sbit PS2_Clock_Direction at TRISC1_bit;
RC0 e RC1 -Define o pino a ser conectado o sinal de Data e Clock respectivamente;
TRISC0 e TRISC1 - Indica a direção do Data e Clock.


Rotinas:

Ps2_Config() - Inicializa a comunicação com o teclado PS/2;
Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed) -A função recupera informações sobre tecla pressionada e retorna 1 se a leitura da tecla for bem sucedida e 0 se nenhuma tecla for pressionada.
value - Contém o valor da tecla pressionada. Para caracteres, números, sinais de pontuação e valor espaço, irá armazenar o código apropriado de acordo com a tabela ASCII.A rotina "reconhece" a função Shift e Caps Lock, e se comporta de forma adequada. Para teclas de função especiais ver Tabela de Teclas de Funções Especiais.
special - é uma flag para teclas de função especiais (F1, Enter, Esc, etc.);
pressed - é definido como 1 se a tecla é pressionada, e 0 se ele for liberado.
EXEMPLO:
unsigned short keydata = 0, special = 0, down = 0;
 
sbit PS2_Data            at RC0_bit;
sbit PS2_Clock           at RC1_bit;
sbit PS2_Data_Direction  at TRISC0_bit;
sbit PS2_Clock_Direction at TRISC1_bit;

void main() {

   UART1_Init(19200);                      // Initialize UART module at 19200 bps
  Ps2_Config();                            // Init PS/2 Keyboard
  Delay_ms(100);                           // Wait for keyboard to finish
  UART1_Write_Text("Ready");
  UART1_Write(10);                         // Line Feed
  UART1_Write(13);                         // Carriage return

  do {
    if (Ps2_Key_Read(&keydata, &special, &down)) {
      if (down && (keydata == 16)) {          // Backspace
         UART1_Write(0x08);
      }
      else if (down && (keydata == 13)) {    // Enter
        UART1_Write('r');    
                                                        
      }
      else if (down && !special && keydata) {
        UART1_Write(keydata);
      }
    }
    Delay_ms(1);                                      // debounce
  } while (1);
}





Nenhum comentário