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

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

   guest 
guest发表的帖子 

 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++);
     }
我实在不知道原因?电脑发过来数据我怎么接收不到!


发表时间:2003年10月17日22:30:59

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  43585.[详细]上述程序的连个错误i=!7 应该改为i!=7command 应该改为 ..
摘要:上述程序的连个错误 i=!7 应该改为i!=7 command 应该改为 command() 但还只能接收一个正确......(87字)
- [guest][925次] 2003年10月18日

[上一篇帖子]:to:  zq525 十分感谢!!你的答案说得非常清楚,我已经明白了.
[下一篇帖子]:出售motolora 68K系列BDM仿真器出售motolora 68K系列BD