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

📄 test.lst

📁 本程序测试数据传输的正确性,可以用于长时间连续测试,基于MCS-51单片机C语言的示例程序,用于其它单片机时一般只要修改前面几个接口子程序及硬件定义
💻 LST
字号:
C51 COMPILER V8.01   TEST                                                                  09/12/2007 16:46:41 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN D:\HEX\TEST.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TEST.C BROWSE DEBUG OBJECTEXTEND OBJECT(D:\HEX\TEST.obj)

line level    source

   1          /*
   2          ; CH375/CH372 Bulk Data Test
   3          ; U2(AT89C51) Program
   4          ; 本程序测试数据传输的正确性,可以用于长时间连续测试,对应的计算机端的测试程序为TEST.EXE
   5          ; 方法: 下传随机长度的随机数据包,被单片机接收并将数据按位取反后返回,最终由计算机程序接收后比较数据是否正确
   6          ;
   7          ; Website:  http://winchiphead.com
   8          ; Email:    tech@winchiphead.com
   9          ; Author:   W.ch 2003.09
  10          */
  11          
  12          /* MCS-51单片机C语言的示例程序,用于其它单片机时一般只要修改前面几个接口子程序及硬件定义 */
  13          
  14          #pragma NOAREGS
  15          #include <reg52.h>
  16          #include <string.h>
  17          #include "CH375INC.H"   /* 头文件,在网上下载的CH372或者CH375评估板资料中有 */
  18          
  19          unsigned char volatile xdata    CH375_CMD_PORT _at_ 0x8801;     /* CH375命令端口的I/O地址 */
  20          unsigned char volatile xdata    CH375_DAT_PORT _at_ 0x8800;     /* CH375数据端口的I/O地址 */
  21          
  22          /* 延时2微秒,不精确 */
  23          void    delay2us( )
  24          {
  25   1              unsigned char i;
  26   1              for ( i = 2; i != 0; i -- );  /* 根据单片机的时钟选择初值 */
  27   1      }
  28          
  29          /* 延时1微秒,不精确,因为MCS51单片机较慢所以实际上无需延时 */
  30          //void  delay1us( )
  31          //{
  32          //      unsigned char i;
  33          //      for ( i = 1; i != 0; i -- );
  34          //}
  35          
  36          /* 基本操作 */
  37          
  38          void CH375_WR_CMD_PORT( unsigned char cmd ) {  /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则
             -延时 */
  39   1              delay2us();
  40   1              CH375_CMD_PORT=cmd;
  41   1      /* ******************** 注释中是用普通I/O引脚模拟8位并口的时序,CH375_CS引脚是可选的,可以一直接GND强制片选
  42   1              CH375_D0_D7 = cmd;
  43   1              CH375_A0 = 1;  选择CH375的命令口
  44   1      //      CH375_D0_D7_DIR = output;  对于标准双向I/O,请在此设置为输出方向
  45   1              CH375_RD = 1;  如果I/O默认电平是高电平,那么这是可选操作
  46   1              CH375_CS = 0;
  47   1              CH375_WR = 0;
  48   1      //      CH375_CS = 0;  对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲
  49   1              CH375_WR = 1;
  50   1              CH375_CS = 1;
  51   1              CH375_A0 = 0;
  52   1      //      CH375_D0_D7_DIR = input;  对于标准双向I/O,请在此设置为输入方向
  53   1              CH375_D0_D7 = 0xFF;  对于准双向I/O,请在此设置输出全高电平
  54   1      ******************** */
C51 COMPILER V8.01   TEST                                                                  09/12/2007 16:46:41 PAGE 2   

  55   1              delay2us();
  56   1      }
  57          
  58          void CH375_WR_DAT_PORT( unsigned char dat ) {  /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快
             -则延时 */
  59   1              CH375_DAT_PORT=dat;
  60   1      /* ******************** 注释中是用普通I/O引脚模拟8位并口的时序
  61   1              CH375_D0_D7 = dat;
  62   1      //      CH375_D0_D7_DIR = output;  对于标准双向I/O,请在此设置为输出方向
  63   1              CH375_CS = 0;
  64   1              CH375_WR = 0;
  65   1      //      CH375_CS = 0;  对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲
  66   1              CH375_WR = 1;
  67   1              CH375_CS = 1;
  68   1      //      CH375_D0_D7_DIR = input;  对于标准双向I/O,请在此设置为输入方向
  69   1              CH375_D0_D7 = 0xFF;  对于准双向I/O,请在此设置输出全高电平
  70   1      ******************** */
  71   1      //      delay1us();  /* 因为MCS51单片机较慢所以实际上无需延时 */
  72   1      }
  73          
  74          unsigned char CH375_RD_DAT_PORT( void ) {  /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延
             -时 */
  75   1      //      delay1us();  /* 因为MCS51单片机较慢所以实际上无需延时 */
  76   1      /* ******************** 注释中是用普通I/O引脚模拟8位并口的时序
  77   1      //      CH375_D0_D7_DIR = input;  对于标准双向I/O,请在此设置为输入方向
  78   1              CH375_D0_D7 = 0xFF;  对于准双向I/O,请在此设置输出全高电平,便于输入
  79   1              CH375_CS = 0;
  80   1              CH375_RD = 0;
  81   1      //      CH375_CS = 0;  对于高速单片机,该指令用于延时,以便向CH375_RD产生宽度至少为80nS的低电平脉冲
  82   1              unsigned char dat = CH375_D0_D7;
  83   1              CH375_RD = 1;
  84   1              CH375_CS = 1;
  85   1              CH375_D0_D7 = 0xFF;  对于准双向I/O,请在此设置输出全高电平
  86   1              return( dat );
  87   1      ******************** */
  88   1              return( CH375_DAT_PORT );
  89   1      }
  90          
  91          /* 延时50毫秒,不精确 */
  92          void    Delay50ms( )
  93          {
  94   1              unsigned char i, j;
  95   1              for ( i=200; i!=0; i-- ) for ( j=250; j!=0; j-- );
  96   1      }
  97          
  98          /* CH375初始化子程序 */
  99          void    CH375_Init( )
 100          {
 101   1              unsigned char i;
 102   1      /* 测试CH375是否正常工作,可选操作,通常不需要 */
 103   1              CH375_WR_CMD_PORT( CMD_CHECK_EXIST );  /* 测试CH375是否正常工作 */
 104   1              CH375_WR_DAT_PORT( 0x55 );  /* 写入测试数据 */
 105   1              i = ~ 0x55;  /* 返回数据应该是测试数据取反 */
 106   1              if ( CH375_RD_DAT_PORT( ) != i ) {  /* CH375不正常 */
 107   2                      for ( i=80; i!=0; i-- ) {
 108   3                              CH375_WR_CMD_PORT( CMD_RESET_ALL );  /* 多次重复发命令,执行硬件复位 */
 109   3                              CH375_RD_DAT_PORT( );
 110   3                      }
 111   2                      CH375_WR_CMD_PORT( 0 );
 112   2                      Delay50ms( );  /* 延时50ms */
 113   2              }
 114   1      /* 设置USB工作模式, 必要操作 */
C51 COMPILER V8.01   TEST                                                                  09/12/2007 16:46:41 PAGE 3   

 115   1              CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
 116   1              CH375_WR_DAT_PORT( 2 );  /* 设置为使用内置固件的USB设备方式 */
 117   1              for ( i=100; i!=0; i-- ) {  /* 等待操作成功,通常需要等待10uS-20uS */
 118   2                      if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break;
 119   2              }
 120   1      /*      if ( i==0 ) { CH372/CH375存在硬件错误 }; */
 121   1      /* 下述启用中断,假定CH375连接在INT0 */
 122   1              IT1 = 0;  /* 置外部信号为低电平触发 */
 123   1              IE1 = 0;  /* 清中断标志 */
 124   1              EX1 = 1;  /* 允许CH375中断 */
 125   1      }
 126          
 127          /* CH375中断服务程序,使用寄存器组1 */
 128          void    mCh375Interrupt( ) interrupt 2 using 1
 129          {
 130   1              unsigned char InterruptStatus;
 131   1              unsigned char i, length;
 132   1              unsigned char data buffer[ 64 ];
 133   1              CH375_WR_CMD_PORT( CMD_GET_STATUS );  /* 获取中断状态并取消中断请求 */
 134   1              InterruptStatus = CH375_RD_DAT_PORT( );  /* 获取中断状态 */
 135   1              switch ( InterruptStatus ) {  /* 分析中断状态处理 */
 136   2                      case USB_INT_EP2_OUT: {  /* 批量端点下传成功 */
 137   3                              CH375_WR_CMD_PORT( CMD_RD_USB_DATA );  /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */
 138   3                              length = CH375_RD_DAT_PORT( );  /* 首先读取后续数据长度 */
 139   3                              for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_RD_DAT_PORT( );  /* 接收数据包 */
 140   3                              /* 测试数据正确性,将接收到的命令包数据取反后返回给PC机 */
 141   3                              CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  /* 向USB端点2的发送缓冲区写入数据块 */
 142   3                              CH375_WR_DAT_PORT( length );  /* 首先写入后续数据长度,回传刚接收到的数据长度 */
 143   3                              for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ buffer[ i ] );  /* 数据取反后返回,由计算机应用程序
             -测试数据是否正确 */
 144   3                              break;
 145   3                      }
 146   2                      case USB_INT_EP2_IN: {  /* 批量数据发送成功 */
 147   3                              CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  /* 释放当前USB缓冲区 */
 148   3                              break;
 149   3                      }
 150   2                      default: {  /* 其它中断,未用到,解锁后退出即可 */
 151   3                              CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  /* 释放当前USB缓冲区 */
 152   3                              break;
 153   3                      }
 154   2              }
 155   1      }
 156          
 157          main( ) {
 158   1              Delay50ms( );   /* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */
 159   1              CH375_Init( );  /* 初始化CH375 */
 160   1              EA = 1;  /* 允许中断 */
 161   1              while ( 1 );  /* 以下指令开始工作循环,等待PC机命令进行操作 */
 162   1      }


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