Tengo el mismo problema, en la inicialización del teclado ps2, funciona si reinicio la pc con un teclado ps2, pero a la hora de reiniciarlo con la placa no me levanta...
He probado con el código que proporcionó suky, pero no funciona mi pic al iniciar la pc con el pic conectado a ella, les pego el código por si hay algún error en el cual no me fijé
#include <16F628A.h> // Definiciones del PIC 16F628a
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(internal=4000000) // Oscilador a 4 Mhz
#define T_CLOCK PIN_B2
#define T_DATA PIN_B1
unsigned int8 valor;
char miletra;
/* ****************************************************************************************** */
void vEnvia_Byte(char Data){
char k=0,Unos=1;
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_high(T_DATA);
output_drive(T_DATA);
output_drive(T_CLOCK);
/* ** Enviamos Bit Start ** */
output_high(T_CLOCK);
output_high(T_DATA);
delay_us(40);
output_low(T_DATA);
delay_us(40);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos 8 bits de datos ** */
for(k=0;k<8;k++){
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Data & 0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
if(bit_test(Data,0)==1){Unos++;}
Data>>=1;
}
/* ** Enviamos bit de paridad ** */
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Unos&0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos bit Stop ** */
output_high(T_CLOCK);
delay_us(5);
output_high(T_DATA);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
}
/* ****************************************************************************************** */
char cLee_Byte(void){
char k;
char Data=0xEC;
/* ** Condicion RTS ** */
delay_us(100);
if(input(T_DATA)==0){
/* ** Esperamos a que el Host este listo para enviar datos ** */
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_drive(T_CLOCK);
output_high(T_CLOCK);
delay_us(200);
output_low(T_CLOCK);
if(input(T_DATA)==0){
/* ** Se recibe los 8 bits de datos ** */
for(k=0;k<8;k++){
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
shift_right(&Data,1,input(T_DATA));
delay_us(20);
output_low(T_CLOCK);
}
/* ** Se ignora bit de paridad ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(40);
output_low(T_CLOCK);
/* ** Se testea bit Stop ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
if(input(T_DATA)==1){
delay_us(15);
/* ** Se envia Ack ** */
output_drive(T_DATA);
output_low(T_DATA);
delay_us(5);
output_low(T_CLOCK);
delay_us(40);
output_high(T_CLOCK);
delay_us(10);
}
}
}
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
return(Data);
}
/* ****************************************************************************************** */
#int_EXT
void Leer_Host(){
static char Dato_Host;
Dato_Host=cLee_Byte();
if(Dato_Host!=0xEC){
if(Dato_Host==0xEE){
vEnvia_Byte(0xEE);
}else{
vEnvia_Byte(0xFA);
if(Dato_Host==0xF2){
vEnvia_Byte(0xAB);
vEnvia_Byte(0x83);
}
if(Dato_Host==0xFF){
delay_ms(1);
vEnvia_Byte(0xAA);
}
}
}
}
/* ****************************************************************************************** */
void main()
{
delay_ms(800);
vEnvia_Byte(0xAA);
ext_int_edge(H_TO_L);
clear_interrupt(INT_EXT);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
do{
vEnvia_Byte(0x44); //O
delay_ms(100);
vEnvia_Byte(0x4b); //L
delay_ms(100);
vEnvia_Byte(0x1c); //A
delay_ms(100);
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x42); //K
delay_ms(100);//
vEnvia_Byte(0x24); //E
delay_ms(100);
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x1c); //A
delay_ms(100);//
vEnvia_Byte(0x1b); //S
delay_ms(100);//
vEnvia_Byte(0x24); //E
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
output_toggle(PIN_B3);
delay_ms(500);
}
while(true);
}
Le coloqué un led piloto en el pin B3 para ver si funcionaba, como dije, solamente al conectar otro teclado ps2 cuando la pc inicia, al sacar el teclado y conectar el pic al puerto ps2 me escribe..si conecto el pic al puerto ps2 al iniciar la pc, no escribe nada...disculpen las molestias...