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

📄 pdiusbd12.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:51:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE PDIUSBD12
OBJECT MODULE PLACED IN PDIUSBD12.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE PDIUSBD12.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3                                           
   4                                           欢迎光临天祥电子  www.txmcu.cn
   5                    
   6          *******************************************************************/
   7          
   8          
   9          #include <AT89x52.H>
  10          #include "MyType.h"
  11          #include "PDIUSBD12.H"
  12          #include "config.h"
  13          #include "UART.h"
  14          
  15          //输入数据
  16          unsigned char inportb(unsigned int Addr)
  17          {
  18   1              return *((unsigned char xdata *) Addr);
  19   1      }
  20          ////////////////////////End of function//////////////////////////////
  21          
  22          /********************************************************************
  23          函数功能:读D12的ID。
  24          入口参数:无。
  25          返    回:D12的ID。
  26          备    注:无。
  27          ********************************************************************/
  28          uint16 D12ReadID(void)
  29          {
  30   1              uint16 i,j;
  31   1              outportb(D12COMMAND, 0xFD);
  32   1              i=inportb(D12DATA);
  33   1              j=inportb(D12DATA);
  34   1              i += (j<<8);
  35   1              return i;
  36   1      }
  37          ////////////////////////End of function//////////////////////////////
  38          
  39          //输出数据
  40          void outportb(unsigned int Addr, unsigned char Data)
  41          {
  42   1              *((unsigned char xdata *) Addr) = Data;
  43   1      }
  44          ////////////////////////End of function//////////////////////////////
  45          
  46          /********************************************************************
  47          函数功能:读取D12最后传输状态寄存器的函数。
  48          入口参数:Endp:端点号。
  49          返    回:端点的最后传输状态。
  50          备    注:该操作将清除该端点的中断标志位。
  51          ********************************************************************/
  52          uint8 D12ReadEndpointLastStatus(uint8 Endp)
  53          {
  54   1       outportb(D12COMMAND, 0x40+Endp);
  55   1       return inportb(D12DATA);
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:51:57 PAGE 2   

  56   1      }
  57          ////////////////////////End of function//////////////////////////////
  58          
  59          /********************************************************************
  60          函数功能:选择端点的函数,选择一个端点后才能对它进行数据操作。
  61          入口参数:Endp:端点号。
  62          返    回:无。
  63          备    注:无。
  64          ********************************************************************/
  65          void D12SelectEndpoint(uint8 Endp)
  66          {
  67   1      outportb(D12COMMAND, 0x00+Endp);
  68   1      }
  69          ////////////////////////End of function//////////////////////////////
  70          
  71          /********************************************************************
  72          函数功能:清除接收端点缓冲区的函数。
  73          入口参数:无。
  74          返    回:无。
  75          备    注:只有使用该函数清除端点缓冲后,该接收端点才能接收新的数据包。
  76          ********************************************************************/
  77          void D12ClearBuffer(void)
  78          {
  79   1       outportb(D12COMMAND, D12_CLEAR_BUFFER);
  80   1      }
  81          ////////////////////////End of function//////////////////////////////
  82          
  83          /********************************************************************
  84          函数功能:应答建立包的函数。
  85          入口参数:无。
  86          返    回:无。
  87          备    注:无。
  88          ********************************************************************/
  89          void D12AcknowledgeSetup(void)
  90          {
  91   1       D12SelectEndpoint(1); //选择端点0输入
  92   1      outportb(D12COMMAND, D12_ACKNOWLEDGE_SETUP);
  93   1       D12SelectEndpoint(0); //选择端点0输出
  94   1      outportb(D12COMMAND, D12_ACKNOWLEDGE_SETUP);
  95   1      }
  96          ////////////////////////End of function//////////////////////////////
  97          
  98          /********************************************************************
  99          函数功能:读取端点缓冲区函数。
 100          入口参数:Endp:端点号;Len:需要读取的长度;Buf:保存数据的缓冲区。
 101          返    回:实际读到的数据长度。
 102          备    注:无。
 103          ********************************************************************/
 104          uint8 D12ReadEndpointBuffer(uint8 Endp, uint8 Len, uint8 *Buf)
 105          {
 106   1       uint8 i,j;
 107   1       D12SelectEndpoint(Endp); //选择要操作的端点缓冲
 108   1       outportb(D12COMMAND, D12_READ_BUFFER);
 109   1        inportb(D12DATA);  //该字节数据是保留的,不用。
 110   1       j=inportb(D12DATA); //这里才是实际的接收到的数据长度
 111   1       if(j>Len) //如果要读的字节数比实际接收到的数据长
 112   1       {
 113   2        j=Len;  //则只读指定的长度数据
 114   2       }
 115   1      #ifdef DEBUG1 //如果定义了DEBUG1,则需要显示调试信息
               Prints("读端点");
               PrintLongInt(Endp/2); //端点号。由于D12特殊的端点组织形式,
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:51:57 PAGE 3   

                                     //这里的0和1分别表示端点0的输出和输入;
                                     //而2、3分别表示端点1的输出和输入;
                                     //3、4分别表示端点2的输出和输入。
                                     //因此要除以2才显示对应的端点。
               Prints("缓冲区");
               PrintLongInt(j);      //实际读取的字节数
               Prints("字节。\r\n");
              #endif
 126   1       for(i=0;i<j;i++)
 127   1       {
 128   2         *(Buf+i)=inportb(D12DATA);
 129   2      #ifdef DEBUG1
                PrintHex(*(Buf+i)); //如果需要显示调试信息,则显示读到的数据
                if(((i+1)%16)==0)Prints("\r\n"); //每16字节换行一次
              #endif
 133   2       }
 134   1      #ifdef DEBUG1
               if((j%16)!=0)Prints("\r\n"); //换行。
              #endif
 137   1       return j; //返回实际读取的字节数。
 138   1      }
 139          ////////////////////////End of function//////////////////////////////
 140          
 141          /********************************************************************
 142          函数功能:使能发送端点缓冲区数据有效的函数。
 143          入口参数:无。
 144          返    回:无。
 145          备    注:只有使用该函数使能发送端点数据有效之后,数据才能发送出去。
 146          ********************************************************************/
 147          void D12ValidateBuffer(void)
 148          {
 149   1       outportb(D12COMMAND,D12_VALIDATE_BUFFER); 
 150   1      }
 151          ////////////////////////End of function//////////////////////////////
 152          
 153          /********************************************************************
 154          函数功能:将数据写入端点缓冲区函数。
 155          入口参数:Endp:端点号;Len:需要发送的长度;Buf:保存数据的缓冲区。
 156          返    回:Len的值。
 157          备    注:无。
 158          ********************************************************************/
 159          uint8 D12WriteEndpointBuffer(uint8 Endp,uint8 Len,uint8 * Buf)
 160          {
 161   1       uint8 i;
 162   1       D12SelectEndpoint(Endp); //选择端点
 163   1      outportb(D12COMMAND,D12_WRITE_BUFFER); //写Write Buffer命令
 164   1       outportb(D12DATA, 0x00); //该字节必须写0
 165   1       outportb(D12DATA, Len); //写需要发送数据的长度
 166   1        
 167   1      #ifdef DEBUG1 //如果定义了DEBUG1,则需要显示调试信息
               Prints("写端点");
               PrintLongInt(Endp/2); //端点号。由于D12特殊的端点组织形式,
                                     //这里的0和1分别表示端点0的输出和输入;
                                     //而2、3分别表示端点1的输出和输入;
                                     //3、4分别表示端点2的输出和输入。
                                     //因此要除以2才显示对应的端点。
               Prints("缓冲区");
               PrintLongInt(Len);    //写入的字节数
               Prints("字节。\r\n");
              #endif
 178   1       D12SetPortOut(); //将数据口设置为输出状态(注意这里为空宏,移植时可能有用)
 179   1       for(i=0;i<Len;i++)
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:51:57 PAGE 4   

 180   1       {
 181   2          outportb(D12DATA, *(Buf+i));
 182   2      #ifdef DEBUG1
                PrintHex(*(Buf+i));  //如果需要显示调试信息,则显示发送的数据
                if(((i+1)%16)==0)Prints("\r\n"); //每16字节换行一次
              #endif
 186   2        }
 187   1      #ifdef DEBUG1
               if((Len%16)!=0)Prints("\r\n"); //换行
              #endif
 190   1       D12SetPortIn(); //数据口切换到输入状态
 191   1       D12ValidateBuffer(); //使端点数据有效
 192   1       return Len; //返回Len
 193   1      }
 194          ////////////////////////End of function//////////////////////////////
 195          
 196          /********************************************************************
 197          函数功能:设置地址函数。
 198          入口参数:Addr:要设置的地址值。
 199          返    回:无。
 200          备    注:无。
 201          ********************************************************************/
 202          void D12SetAddress(uint8 Addr)
 203          {
 204   1      outportb(D12COMMAND, D12_SET_ADDRESS_ENABLE);//写设置地址命令
 205   1       outportb(D12DATA, 0x80|Addr);//写一字节数据:使能及地址
 206   1      }
 207          ////////////////////////End of function//////////////////////////////
 208          
 209          /********************************************************************
 210          函数功能:使能端点函数。
 211          入口参数:Enable: 是否使能。0值为不使能,非0值为使能。
 212          返    回:无。
 213          备    注:无。
 214          ********************************************************************/
 215          void D12SetEndpointEnable(uint8 Enable)
 216          {
 217   1       outportb(D12COMMAND, D12_SET_ENDPOINT_ENABLE);
 218   1       if(Enable!=0)
 219   1       {
 220   2        outportb(D12DATA, 0x01); //D0为1使能端点
 221   2       }
 222   1       else
 223   1       {
 224   2        outportb(D12DATA,0x00);//不使能端点
 225   2       }
 226   1      }
 227          ////////////////////////End of function//////////////////////////////


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