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

📄 d12ci.lst

📁 这是USBD12芯片与PC机通讯的单片机固件程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return c;
              }
              #endif
 198          
 199          /************************************************************
 200          ** 函数名称: D12_ReadLastTransactionStatus()
 201          ** 功能描述: 读取最后处理状态寄存器
 202          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 203          ** 输   出: 端点最后处理的状态
 204          ************************************************************/
 205          INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
 206          {
 207   1              outportb(D12_COMMAND, 0x40 + bEndp);    //输出读取最后处理状态寄存器命令
 208   1              return inportb(D12_DATA);                               //读取状态
 209   1      }
 210          
 211          /************************************************************
 212          ** 函数名称: D12_SetEndpointStatus()
 213          ** 功能描述: 设置端点状态
 214          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 215                           INT8U bStalled: 状态值
 216          ** 输   出: 端点状态
 217          ************************************************************/
 218          void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
 219          {
 220   1              if(bEPPflags.bits.in_isr == 0)
 221   1                      DISABLE();
 222   1      
 223   1              outportb(D12_COMMAND, 0x40 + bEndp);    //发送设置端点状态命令
 224   1              outportb(D12_DATA, bStalled);                   //设置端点状态
 225   1      
 226   1              if(bEPPflags.bits.in_isr == 0)
 227   1                      ENABLE();
 228   1      }
 229          
 230          /************************************************************
 231          ** 函数名称: D12_SendResume()
 232          ** 功能描述: 传输恢复
 233          ** 输   入: 无
 234          ** 输   出: 无
 235          ************************************************************/
 236          #if D12_SendResume_EN
              void D12_SendResume(void)
              {
                      outportb(D12_COMMAND, 0xF6);                    //设置发送恢复
              }
C51 COMPILER V7.20   D12CI                                                                 11/16/2007 15:11:12 PAGE 5   

              #endif
 242          
 243          
 244          /************************************************************
 245          ** 函数名称: D12_ReadCurrentFrameNumber()
 246          ** 功能描述: 读取当前帧号
 247          ** 输   入: 无
 248          ** 输   出: 当前帧号
 249          ************************************************************/
 250          #if D12_ReadCurrentFrameNumber_EN
              INT16U D12_ReadCurrentFrameNumber(void)
              {
                      INT16U i,j;
              
                      if(bEPPflags.bits.in_isr == 0)
                              DISABLE();
              
                      outportb(D12_COMMAND, 0xF5);                    //发送读取当前帧数目命令
                      i= inportb(D12_DATA);                                   //读取帧数目的低8位
                      j = inportb(D12_DATA);                                  //读取帧数目的高8位
              
                      i += (j<<8);
              
                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return i;                                                               //返目当前帧数目
              }
              #endif
 270          
 271          
 272          /************************************************************
 273          ** 函数名称: D12_ReadEndpoint()
 274          ** 功能描述: 读取端点数据
 275          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 276                           INT8U len:          要读取的数据长度
 277                           INT8U * buf:    接收数据指针
 278          ** 输   出: 实际读得的字节数
 279          ************************************************************/
 280          INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
 281          {
 282   1              INT8U i, j;
 283   1      
 284   1              if(bEPPflags.bits.in_isr == 0)
 285   1                      DISABLE();
 286   1      
 287   1              outportb(D12_COMMAND, endp);                                            //发送选择端点命令
 288   1              if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {          //如果缓冲区为空
 289   2                      if(bEPPflags.bits.in_isr == 0)
 290   2                              ENABLE();
 291   2                      return 0;                                                                               //则返回读到0字节
 292   2              }
 293   1      
 294   1              outportb(D12_COMMAND, 0xF0);                                            //发送读缓冲区命令
 295   1              j = inportb(D12_DATA);                                                          //读取保留字节
 296   1              j = inportb(D12_DATA);                                                          //读取数据字节的数目/长度
 297   1      
 298   1              if(j > len)                                                                                     //如果大于要求读的字节数目
 299   1                      j = len;                                                                                //则只读取要求的字节长度
 300   1                      
 301   1              for(i=0; i<j; i++)
 302   1                      *(buf+i) = inportb(D12_DATA);                                   //读取要求的字节数目/长度
C51 COMPILER V7.20   D12CI                                                                 11/16/2007 15:11:12 PAGE 6   

 303   1      
 304   1              outportb(D12_COMMAND, 0xF2);                                            //清缓冲区,新的信息包才可以重新被接受
 305   1      
 306   1              if(bEPPflags.bits.in_isr == 0)
 307   1                      ENABLE();
 308   1      
 309   1              return j;                                                                                       //返回读到的字节数
 310   1      }
 311          
 312          /************************************************************
 313          ** 函数名称: D12_WriteEndpoint()
 314          ** 功能描述: 把数据写入端点
 315          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 316                           INT8U len:          要写入的数据长度
 317                           INT8U * buf:    发送数据指针
 318          ** 输   出: 实际写入的字节数
 319          ************************************************************/
 320          INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
 321          {
 322   1              INT8U i;
 323   1      
 324   1              if(bEPPflags.bits.in_isr == 0)
 325   1                      DISABLE();
 326   1      
 327   1              outportb(D12_COMMAND, endp);                    //发送选择端点命令
 328   1              i = inportb(D12_DATA);                                  //可选地读取一个字节
 329   1      
 330   1              outportb(D12_COMMAND, 0xF0);                    //发送写缓冲区命令      
 331   1              outportb(D12_DATA, 0);                                  //写入一个保留字节
 332   1              outportb(D12_DATA, len);                                //写入即将写入的字节数目
 333   1      
 334   1              for(i=0; i<len; i++)
 335   1                      outportb(D12_DATA, *(buf+i));           //写入指定的字节
 336   1      
 337   1              outportb(D12_COMMAND, 0xFA);                    //使缓冲区有效
 338   1      
 339   1              if(bEPPflags.bits.in_isr == 0)
 340   1                      ENABLE();
 341   1      
 342   1              return len;                                                             //返回写入的字节数
 343   1      }
 344          
 345          /************************************************************
 346          ** 函数名称: D12_AcknowledgeEndpoint()
 347          ** 功能描述: 应答Setup
 348          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 349          ** 输   出: 无
 350          ************************************************************/
 351          void D12_AcknowledgeEndpoint(INT8U endp)
 352          {
 353   1              outportb(D12_COMMAND, endp);                    //选择端点
 354   1              outportb(D12_COMMAND, 0xF1);                    //应答Setup指令
 355   1              if(endp == 0)           
 356   1                      outportb(D12_COMMAND, 0xF2);            //清空该端点缓冲区
 357   1      }
 358          
 359          /************************************************************
 360          ** 函数名称: void D12_ClearBuff()
 361          ** 功能描述: 清指定端点的缓冲区(包括双缓冲区)
 362          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 363          ** 输   出: 无
 364          ************************************************************/
C51 COMPILER V7.20   D12CI                                                                 11/16/2007 15:11:12 PAGE 7   

 365          #if D12_ClearBuff_EN
              void D12_ClearBuff(INT8U endp)
              {       
                      outportb(D12_COMMAND, endp);                    //选择端点
                      outportb(D12_COMMAND, 0xF2);                    //清空第1个缓冲区       
                      
                      if (endp >= 4){
                              outportb(D12_COMMAND, endp);            //选择端点
                              outportb(D12_COMMAND, 0xF2);            //清空第2个缓冲区       
                      }
              }
              #endif


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