导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ps/2 问题求救!为什么我的ps/2程序收不到pc机发过来[guest]

 *第16884篇: ps/2 问题求救!为什么我的ps/2程序收不到pc机发过来的数据!

  
楼 主:guest 2003年10月17日22:30
 ps/2 问题求救!为什么我的ps/2程序收不到pc机发过来的数据!
ps/2程序如下,大家帮帮我?#include   <reg51.h>  

bit keyput_char(unsigned char put_char);
unsigned char keyrev_char();
void mouseput_char();
unsigned char mouserev_char();
bit parity();
bit command();
void receive_process();
void serial_init();

void delay_16us();
void delay_24us();
void delay_ms(unsigned char ms_number);
sbit key_data=P1^0;
sbit key_clk=P1^1;

unsigned char bdata s_buf,r_buf,parity_buf;
unsigned char buffer[5];num=0;

sbit mouse_data=P1^2;
sbit mouse_clk=P1^3;
sbit s_buf0=s_buf^0;
sbit parity_buf0=parity_buf^0;
sbit r_buf7=r_buf^7;


main()
{
  unsigned char loop;
  serial_init();
 for(loop=0;loop  <10;loop++)
 {
   SBUF=loop;
  while(TI==0);
  TI=0;
 } 
 do
  {
   receive_process();  
  }while(1);
}

unsigned char keyrev_char()
  {
   unsigned char i;
   bit PARITY;
   r_buf=0;
   while(!key_clk);
   delay_24us();
   if(key_data)
     {
      return 1;
     }
   delay_24us();
   delay_16us();
   key_clk=0;
   for(i=0;i  <8;i++)
    {
     delay_24us(); 
     delay_16us();         
     key_clk=1;
     delay_16us();     
      r_buf7=key_data; 
     if(i=!7)
      r_buf=r_buf>  >  1;
     delay_24us();
     key_clk=0;
    }
    delay_24us(); 
    delay_16us();   
    key_clk=1;  
    delay_16us();
    PARITY=key_data; 
    delay_24us();
    key_clk=0;
    delay_16us();
    delay_24us();
    key_clk=1;
    delay_24us(); 
    if(!key_data){return 1;};   
    key_data=0;
    delay_16us();
    key_clk=0;
    delay_16us();
    delay_24us();
    key_clk=1;
    delay_16us(); 
    key_data=1;
    delay_16us();
    parity_buf=r_buf;
    if(PARITY==parity())
       return r_buf;
    else {return 1;}
  }

bit keyput_char(unsigned char put_char)
     {
      unsigned char i;
      bit PARITY;
      parity_buf=put_char;
      PARITY=parity();
      s_buf=put_char;
      if(command) return 0;      
      key_data=0;      
      delay_16us();
      key_clk=0;      
      for(i=0;i  <8;i++)
      {
       delay_24us();
       delay_16us(); 
       key_clk=1;
       delay_16us();
       if(!key_clk) return 0;       
       key_data=s_buf0;
       s_buf=s_buf>  >  1;       
       delay_16us();
       key_clk=0;             
      } 
      delay_24us(); 
      delay_16us();
      key_clk=1;
      delay_16us();
      if(!key_clk)return 0;
      key_data=PARITY;
      delay_24us();
      key_clk=0;
      delay_24us();
      key_clk=1;      
      delay_16us();     
      key_data=1;
      delay_24us();
      key_clk=0;
      delay_24us();
      delay_24us();
      key_clk=1; 
      delay_16us();      
      return 1;
     }
void serial_init()
{
TH1=0xf3;
TL1=0xf3;
TMOD=0x20;
PCON=0x00;
TR1=1;
SCON=0x40;
}

void delay_ms(unsigned char ms_number)
{
  unsigned char loop,loop1;
  for(loop=0;loop  <ms_number;loop++)
     {for(loop1=0;loop1  <160;loop1++);}
}
bit parity()
 {
  bit parity=1;
  unsigned char data c;
  for(c=0;c  <8;c++)
    {
      parity^=parity_buf0;
      parity_buf=parity_buf>  >  1;
    }
  return parity; 
 }
bit command()
{
  step:while(!key_clk);
  delay_16us();
  delay_24us();
  if(!key_clk) goto step;
  if(key_data) return 0;
  else return 1;
}
void receive_process()
{
  unsigned char rev_char;  
  if(!(command())) return;
  rev_char=keyrev_char();
  SBUF=rev_char;
  while(TI==0);  
  TI=0;
}

void delay_24us()
      {
      unsigned char loop;
      for(loop=0;loop  <6;loop++);
     }
void delay_16us()
     {
      unsigned char loop;
      for(loop=0;loop  <3;loop++);
     }
我实在不知道原因?电脑发过来数据我怎么接收不到!

  
2楼:guest 2003年10月18日11:48
 上述程序的连个错误
i=!7 应该改为

上述程序的连个错误
i=!7 应该改为i!=7
command 应该改为 command()
但还只能接收一个正确

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:请教高手:protel的元件的自动布局的问题,急,谢谢!

[下一篇主题]:出售motolora 68K系列BDM仿真器