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

📄 pdiusbd12.lst

📁 此源代码为双接口法USB键盘鼠标开发源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 145          
 146          /********************************************************************
 147          函数功能:读取端点缓冲区函数。
 148          入口参数:Endp:端点号;Len:需要读取的长度;Buf:保存数据的缓冲区。
 149          返    回:实际读到的数据长度。
 150          备    注:无。
 151          ********************************************************************/
 152          uint8 D12ReadEndpointBuffer(uint8 Endp, uint8 Len, uint8 *Buf)
 153          {
 154   1       uint8 i,j;
 155   1       D12SelectEndpoint(Endp); //选择要操作的端点缓冲
 156   1       D12WriteCommand(D12_READ_BUFFER); //发送读缓冲区的命令
 157   1       D12ReadByte();   //该字节数据是保留的,不用。
 158   1       j=D12ReadByte(); //这里才是实际的接收到的数据长度
 159   1       if(j>Len) //如果要读的字节数比实际接收到的数据长
 160   1       {
 161   2        j=Len;  //则只读指定的长度数据
 162   2       }
 163   1      #ifdef DEBUG1 //如果定义了DEBUG1,则需要显示调试信息
 164   1       Prints("读端点");
 165   1       PrintLongInt(Endp/2); //端点号。由于D12特殊的端点组织形式,
 166   1                             //这里的0和1分别表示端点0的输出和输入;
 167   1                             //而2、3分别表示端点1的输出和输入;
 168   1                             //3、4分别表示端点2的输出和输入。
 169   1                             //因此要除以2才显示对应的端点。
 170   1       Prints("缓冲区");
 171   1       PrintLongInt(j);      //实际读取的字节数
 172   1       Prints("字节。\r\n");
 173   1      #endif
 174   1       for(i=0;i<j;i++)
 175   1       {
 176   2        //这里不直接调用读一字节的函数,而直接在这里模拟时序,可以节省时间
 177   2        D12ClrRd();  //RD置低
 178   2        *(Buf+i)=D12GetData(); //读一字节数据
 179   2        D12SetRd();  //RD置高
C51 COMPILER V7.06   PDIUSBD12                                                             11/16/2008 15:59:36 PAGE 4   

 180   2      #ifdef DEBUG1
 181   2        PrintHex(*(Buf+i)); //如果需要显示调试信息,则显示读到的数据
 182   2        if(((i+1)%16)==0)Prints("\r\n"); //每16字节换行一次
 183   2      #endif
 184   2       }
 185   1      #ifdef DEBUG1
 186   1       if((j%16)!=0)Prints("\r\n"); //换行。
 187   1      #endif
 188   1       return j; //返回实际读取的字节数。
 189   1      }
 190          ////////////////////////End of function//////////////////////////////
 191          
 192          /********************************************************************
 193          函数功能:使能发送端点缓冲区数据有效的函数。
 194          入口参数:无。
 195          返    回:无。
 196          备    注:只有使用该函数使能发送端点数据有效之后,数据才能发送出去。
 197          ********************************************************************/
 198          void D12ValidateBuffer(void)
 199          {
 200   1       D12WriteCommand(D12_VALIDATE_BUFFER);
 201   1      }
 202          ////////////////////////End of function//////////////////////////////
 203          
 204          /********************************************************************
 205          函数功能:将数据写入端点缓冲区函数。
 206          入口参数:Endp:端点号;Len:需要发送的长度;Buf:保存数据的缓冲区。
 207          返    回:Len的值。
 208          备    注:无。
 209          ********************************************************************/
 210          uint8 D12WriteEndpointBuffer(uint8 Endp,uint8 Len,uint8 * Buf)
 211          {
 212   1       uint8 i;
 213   1       D12SelectEndpoint(Endp); //选择端点
 214   1       D12WriteCommand(D12_WRITE_BUFFER); //写Write Buffer命令
 215   1       D12WriteByte(0); //该字节必须写0
 216   1       D12WriteByte(Len);  //写需要发送数据的长度
 217   1       
 218   1      #ifdef DEBUG1 //如果定义了DEBUG1,则需要显示调试信息
 219   1       Prints("写端点");
 220   1       PrintLongInt(Endp/2); //端点号。由于D12特殊的端点组织形式,
 221   1                             //这里的0和1分别表示端点0的输出和输入;
 222   1                             //而2、3分别表示端点1的输出和输入;
 223   1                             //3、4分别表示端点2的输出和输入。
 224   1                             //因此要除以2才显示对应的端点。
 225   1       Prints("缓冲区");
 226   1       PrintLongInt(Len);    //写入的字节数
 227   1       Prints("字节。\r\n");
 228   1      #endif
 229   1       D12SetPortOut(); //将数据口设置为输出状态(注意这里为空宏,移植时可能有用)
 230   1       for(i=0;i<Len;i++)
 231   1       {
 232   2        //这里不直接调用写一字节的函数,而直接在这里模拟时序,可以节省时间
 233   2        D12ClrWr(); //WR置低  
 234   2        D12SetData(*(Buf+i)); //将数据放到数据线上
 235   2        D12SetWr();  //WR置高,完成一字节写
 236   2      #ifdef DEBUG1
 237   2        PrintHex(*(Buf+i));  //如果需要显示调试信息,则显示发送的数据
 238   2        if(((i+1)%16)==0)Prints("\r\n"); //每16字节换行一次
 239   2      #endif
 240   2        }
 241   1      #ifdef DEBUG1
C51 COMPILER V7.06   PDIUSBD12                                                             11/16/2008 15:59:36 PAGE 5   

 242   1       if((Len%16)!=0)Prints("\r\n"); //换行
 243   1      #endif
 244   1       D12SetPortIn(); //数据口切换到输入状态
 245   1       D12ValidateBuffer(); //使端点数据有效
 246   1       return Len; //返回Len
 247   1      }
 248          ////////////////////////End of function//////////////////////////////
 249          
 250          /********************************************************************
 251          函数功能:设置地址函数。
 252          入口参数:Addr:要设置的地址值。
 253          返    回:无。
 254          备    注:无。
 255          ********************************************************************/
 256          void D12SetAddress(uint8 Addr)
 257          {
 258   1       D12WriteCommand(D12_SET_ADDRESS_ENABLE); //写设置地址命令
 259   1       D12WriteByte(0x80 | Addr); //写一字节数据:使能及地址
 260   1      }
 261          ////////////////////////End of function//////////////////////////////
 262          
 263          /********************************************************************
 264          函数功能:使能端点函数。
 265          入口参数:Enable: 是否使能。0值为不使能,非0值为使能。
 266          返    回:无。
 267          备    注:无。
 268          ********************************************************************/
 269          void D12SetEndpointEnable(uint8 Enable)
 270          {
 271   1       D12WriteCommand(D12_SET_ENDPOINT_ENABLE);
 272   1       if(Enable!=0)
 273   1       {
 274   2        D12WriteByte(0x01); //D0为1使能端点
 275   2       }
 276   1       else
 277   1       {
 278   2        D12WriteByte(0x00); //不使能端点
 279   2       }
 280   1      }
 281          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    445    ----
   CONSTANT SIZE    =     33    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   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 + -