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

📄 pdiusbd12.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:52:10 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          #include <AT89x52.H>
   9          #include "MyType.h"
  10          #include "PDIUSBD12.H"
  11          #include "config.h"
  12          #include "UART.h"
  13          
  14          //输入数据
  15          unsigned char inportb(unsigned int Addr)
  16          {
  17   1              return *((unsigned char xdata *) Addr);
  18   1      }
  19          ////////////////////////End of function//////////////////////////////
  20          
  21          /********************************************************************
  22          函数功能:读D12的ID。
  23          入口参数:无。
  24          返    回:D12的ID。
  25          备    注:无。
  26          ********************************************************************/
  27          uint16 D12ReadID(void)
  28          {
  29   1              uint16 i,j;
  30   1              outportb(D12COMMAND, 0xFD);
  31   1              i=inportb(D12DATA);
  32   1              j=inportb(D12DATA);
  33   1              i += (j<<8);
  34   1              return i;
  35   1      }
  36          ////////////////////////End of function//////////////////////////////
  37          
  38          //输出数据
  39          void outportb(unsigned int Addr, unsigned char Data)
  40          {
  41   1              *((unsigned char xdata *) Addr) = Data;
  42   1      }
  43          ////////////////////////End of function//////////////////////////////
  44          
  45          /********************************************************************
  46          函数功能:读取D12最后传输状态寄存器的函数。
  47          入口参数:Endp:端点号。
  48          返    回:端点的最后传输状态。
  49          备    注:该操作将清除该端点的中断标志位。
  50          ********************************************************************/
  51          uint8 D12ReadEndpointLastStatus(uint8 Endp)
  52          {                                                                                                                                                  //
  53   1       outportb(D12COMMAND, 0x40+Endp);
  54   1       return inportb(D12DATA);
  55   1      }
C51 COMPILER V8.02   PDIUSBD12                                                             06/17/2010 09:52:10 PAGE 2   

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

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

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