⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2drv.lst

📁 USB鼠标,单片机的,可以
💻 LST
字号:
C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE PS2DRV
OBJECT MODULE PLACED IN .\Obj\PS2Drv.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\..\Driver\PS2\PS2Drv\PS2Drv.c LARGE OPTIMIZE(2,SPEED) MODP2 PRINT(.\Obj\
                    -PS2Drv.lst) OBJECT(.\Obj\PS2Drv.obj) 

stmt level    source

   1          /*------------------------------------------------------------------
   2          * CopyRight (C) 2005,江苏盛唐电子产品有限公司
   3          * All Rights Reserved.
   4          *
   5          * 文件名称:PS2Drv.c
   6          * 文件标识:
   7          * 摘    要:I/o口线模拟的PS2接口功能函数。
   8          * 
   9          * 当前版本:1.0
  10          * 作    者:熊刚
  11          * 完成日期:2005年10月7日
  12          *
  13          * 取代版本: 
  14          * 原作者  :
  15          * 完成日期:
  16          --------------------------------------------------------------------*/
  17          
  18          //#include<conio.h>
  19          #include "..\..\inc\includes.h"
  20          
  21          sbit PS2Kbd_Data = P1^1;
  22          sbit PS2Kbd_Clk = P1^2;
  23          
  24          #define PS2ClkToLow() PS2Kbd_Clk=0 
  25          #define PS2ClkToHigh() PS2Kbd_Clk=1 
  26          #define PS2DataToLow() PS2Kbd_Data=0 
  27          #define PS2DataToHigh() PS2Kbd_Data=1 
  28          
  29          #define PS2DataTransEnable() PS2Kbd_Clk = 1
  30          #define PS2DataTransDisable() PS2Kbd_Clk = 0
  31          
  32          uchar ucPS2CommErrFlag = 0;
  33          
  34          static bool GetPS2DataStatus(void)
  35          {
  36   1      //      PS2Kbd_Data=1;
  37   1              return(PS2Kbd_Data);
  38   1      }
  39          
  40          static bool GetPS2ClkStatus(void)
  41          {
  42   1      //      PS2Kbd_Clk=1;
  43   1              return(PS2Kbd_Clk);
  44   1      }
  45          
  46          static void Delay10Us(uchar ucDelayCount)
  47          {
  48   1              register uchar  uci;
  49   1      
  50   1              if(ucDelayCount == 0)
  51   1              {
  52   2                      return;
  53   2              }
  54   1              for( ;ucDelayCount>0;ucDelayCount--)
C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 2   

  55   1              {
  56   2                      for(uci=0; uci<30; uci++)
  57   2                      {
  58   3                              _nop_();
  59   3                      }
  60   2              }
  61   1      }
  62          
  63          static void CaptureClkLow(void)
  64          {
  65   1              while(1)
  66   1              {
  67   2                      if(GetPS2ClkStatus() == 1)
  68   2                      {
  69   3                              break;
  70   3                      }
  71   2              }
  72   1      
  73   1              while(1)
  74   1              {
  75   2                      if(GetPS2ClkStatus() == 0)
  76   2                      {
  77   3                              if(GetPS2ClkStatus() == 0)
  78   3                              {
  79   4                                      break;
  80   4                              }
  81   3                      }
  82   2              }
  83   1      }
  84          
  85          static void CaptureClkHigh(void)
  86          {
  87   1              while(1)
  88   1              {
  89   2                      if(GetPS2ClkStatus() == 0)
  90   2                      {
  91   3                              break;
  92   3                      }
  93   2              }
  94   1      
  95   1              while(1)
  96   1              {
  97   2                      if(GetPS2ClkStatus() == 1)
  98   2                      {
  99   3                              if(GetPS2ClkStatus() == 1)
 100   3                              {
 101   4                                      break;
 102   4                              }
 103   3                      }
 104   2              }
 105   1      }
 106          
 107          /**************************************************
 108          功能介绍:实现向PS2口发送1个字符的功能。
 109          入口参数: 待发送的字符
 110          返回:    发送是否成功。true 表示成功
 111          备注:     
 112          ***************************************************/
 113          bool PS2_SendChar(uchar ucSendChar)
 114          {
 115   1              uchar ucCount;
 116   1              bool ucOddValue;
C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 3   

 117   1              uchar ucTempVal;
 118   1      
 119   1              ucOddValue = true;
 120   1              ucTempVal = ucSendChar;
 121   1      
 122   1      //      ComShowString(COM_1,"start Test pS2");
 123   1      
 124   1      //      printf("start Send char to Ps2 Kbd\n");
 125   1      
 126   1              for(ucCount=0; ucCount<8; ucCount++)
 127   1              {
 128   2                      if(ucTempVal & 0x01)
 129   2                      {
 130   3                              ucOddValue = !ucOddValue;       
 131   3                      }
 132   2                      ucTempVal >>= 1;
 133   2              }
 134   1      
 135   1              PS2ClkToLow();
 136   1              PS2DataToLow();
 137   1              Delay10Us(10);
 138   1                      
 139   1              DISABLE;
 140   1      
 141   1              PS2ClkToHigh();
 142   1      
 143   1              ucTempVal = ucSendChar;
 144   1              for(ucCount=0; ucCount<8; ucCount++)
 145   1              {
 146   2                      CaptureClkLow();
 147   2                      if(ucTempVal & 0x01)
 148   2                      {
 149   3                              PS2DataToHigh();
 150   3                      }
 151   2                      else
 152   2                      {
 153   3                              PS2DataToLow();
 154   3                      }
 155   2                      ucTempVal >>= 1;
 156   2              }
 157   1      
 158   1              CaptureClkLow();
 159   1              if(ucOddValue)
 160   1              {
 161   2                      PS2DataToHigh();
 162   2              }
 163   1              else
 164   1              {
 165   2                      PS2DataToLow();
 166   2              }
 167   1              
 168   1              CaptureClkLow();
 169   1              PS2DataToHigh();
 170   1      
 171   1              CaptureClkLow();
 172   1              if(GetPS2DataStatus() == 0)
 173   1              {
 174   2                      CaptureClkHigh();
 175   2                      ENABLE;
 176   2                      return true;
 177   2              }
 178   1              else
C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 4   

 179   1              {
 180   2                      CaptureClkHigh();
 181   2                      ENABLE;
 182   2                      return false;
 183   2              }
 184   1      }
 185          
 186          static bool  PS2_ReadChar(uchar *ucGetChar)
 187          {
 188   1              uchar data ucCount;
 189   1              bool ucOddValue;
 190   1              uchar ucTempVal;
 191   1              uchar ucResult;
 192   1              uint data uiDelayCount;
 193   1      
 194   1      
 195   1              ucOddValue = true;
 196   1      
 197   1              DISABLE;
 198   1              PS2DataTransEnable();
 199   1              PS2Kbd_Data=1;
 200   1              PS2Kbd_Clk=1;
 201   1              uiDelayCount = 0x1ff;   //关键时间
 202   1              while(--uiDelayCount)
 203   1              {
 204   2                      if(GetPS2ClkStatus() == 0)
 205   2                      {
 206   3                      //      DISABLE;
 207   3                              break;
 208   3                      }
 209   2              }
 210   1              if(GetPS2ClkStatus() != 0)      //Repeat check 
 211   1              {
 212   2                      *ucGetChar = 0;
 213   2      
 214   2                      ENABLE;
 215   2                      return false;
 216   2              }
 217   1      
 218   1              if(GetPS2DataStatus())
 219   1              {
 220   2                      if(GetPS2DataStatus())
 221   2                      {
 222   3                              *ucGetChar = 0;
 223   3      
 224   3                              ucPS2CommErrFlag = 1;
 225   3                              ComShowString(COM_1,"START BIT ERR");
 226   3              
 227   3                              ENABLE;
 228   3                              return false;
 229   3                      }
 230   2              }
 231   1      
 232   1              ucTempVal = 0x01;
 233   1              ucResult = 0;
 234   1              for(ucCount=0; ucCount<8; ucCount++)
 235   1              {
 236   2                      CaptureClkLow();
 237   2                      if(GetPS2DataStatus())
 238   2                      {
 239   3                              ucResult |= ucTempVal;
 240   3                              ucOddValue = !ucOddValue;       
C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 5   

 241   3                      }
 242   2                      ucTempVal <<= 1;
 243   2              }
 244   1      
 245   1              CaptureClkLow();
 246   1              if(GetPS2DataStatus() != ucOddValue)
 247   1              {
 248   2                      if(GetPS2DataStatus() != ucOddValue)
 249   2                      {
 250   3                              ucPS2CommErrFlag = 1;
 251   3                              ComShowString(COM_1,"Odd Check ERR");
 252   3                      
 253   3                              ENABLE;
 254   3                              return false;
 255   3                      }
 256   2              }
 257   1      
 258   1              CaptureClkLow();
 259   1              if(GetPS2DataStatus() == 0)
 260   1              {
 261   2                      if(GetPS2DataStatus() == 0)
 262   2                      {
 263   3      
 264   3                              ucPS2CommErrFlag = 1;
 265   3                              ComShowString(COM_1,"STOP BIT ERR");
 266   3      
 267   3                              ENABLE;
 268   3                              return false;
 269   3                      }
 270   2              }
 271   1      
 272   1              *ucGetChar = ucResult;
 273   1              ucPS2CommErrFlag = 0;
 274   1              CaptureClkHigh();
 275   1              PS2DataTransDisable();
 276   1              
 277   1              ENABLE;
 278   1              return true;
 279   1      }
 280          
 281          /**************************************************
 282          功能介绍:实现从PS2口接收1个字符的功能。
 283          入口参数: 接收字符存放的缓冲区指针
 284          返回:    接收是否成功。true 表示成功
 285          备注:     有延时等待发生。
 286          ***************************************************/
 287          bool  PS2_GetChar(uchar *ucGetChar)
 288          {
 289   1      /*
 290   1              if(ucPS2CommErrFlag)
 291   1              {
 292   1                      PS2_SendChar(0xFE);
 293   1                      BeepShort();
 294   1              }
 295   1      */
 296   1              return (PS2_ReadChar(ucGetChar));
 297   1      
 298   1      }
 299                                          
 300          


C51 COMPILER V6.23a  PS2DRV                                                                08/17/2006 16:45:39 PAGE 6   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    684    ----
   CONSTANT SIZE    =     41    ----
   XDATA SIZE       =      1      15
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -