Advertisement
Guest User

Untitled

a guest
Mar 13th, 2013
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.41 KB | None | 0 0
  1. void send_keyboard_command(unsigned char command)
  2. {
  3. //  EIMSK &= ~(1 << INT0);          // Disable clock interrupts
  4.  
  5.     PORTD &= ~(1 << PIND2);         // Bring CLK low
  6.     _delay_us(300);             // Waaaait for it...
  7.  
  8.     /* The start bit, always clear */
  9.     PORTD &= ~(1 << PIND3);         // Bring DATA low
  10.     PORTD |= (1 << PIND2);          // Pull CLK high again
  11.     while(bit_is_set(PIND, KBD_CLOCK_PIN)); // Wait for keyboard to bring CLK low
  12.  
  13.     unsigned char i;
  14.     unsigned char parity = 1;
  15.  
  16.  
  17.     for(i = 0; i < 8; i++)
  18.     {
  19.         /* Output bit on DATA line */
  20.         if((command & 0x01) != 0)
  21.             PORTD |= (1 << PIND3);  // Data bit is set
  22.         else
  23.             PORTD &= ~(1 << PIND3); // Data bit is cleared
  24.  
  25.         while(bit_is_clear(PIND, KBD_CLOCK_PIN));   // Wait for CLK to be set
  26.         while(bit_is_set(PIND, KBD_CLOCK_PIN));     // Wait for CLK to be clear
  27.  
  28.         parity = parity ^ (command & 0x01);
  29.  
  30.         command >>= 1;
  31.     }
  32.  
  33.     /* Parity bit */
  34.     if(parity == 0)
  35.         PORTD &= ~(1 << PIND3);
  36.     else
  37.         PORTD |= (1 << PIND3);
  38.  
  39.     while(bit_is_clear(PIND, KBD_CLOCK_PIN));   // Wait for CLK to be set
  40.     while(bit_is_set(PIND, KBD_CLOCK_PIN));     // Wait for CLK to be clear
  41.  
  42.     /* Stop bit - always set */
  43.     PORTD |= (1 << PIND3);
  44.     while(bit_is_set(PIND, KBD_CLOCK_PIN)); // Wait for CLK to be clear
  45.  
  46.     // Wait for keyboard-send-to-host mode
  47.     while((bit_is_clear(PIND, KBD_CLOCK_PIN)) || ((bit_is_clear(PIND, PIND3))));
  48.  
  49. //  EIMSK = 1 << INT0;                      // Re-enable clock interrupts
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement