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

📄 main.lst

📁 使用PIDUSBD12芯片实现的usb接口程序
💻 LST
字号:
C51 COMPILER V7.02b   MAIN                                                                 09/24/2007 20:01:36 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /****************************************Copyright (c)**************************************************
   2          **                               广州周立功单片机发展有限公司
   3          **                                     研    究    所
   4          **                                        产品一部 
   5          **
   6          **                                 http://www.zlgmcu.com
   7          **
   8          ** 文   件   名: main.c
   9          ** 最后修改日期: 2004年11月15日
  10          ** 描        述: 用户应用程序
  11          ** 版        本: V5.0
  12          **********************************************************************************************************
             -/
  13          #include "stc51.h"
  14          //#include <reg52.h>
  15          #include "D12Config.h"
  16          #include "Descriptor.h"
  17          #include "Chap_9.h"
  18          #include "D12Driver.h"
  19          #include <intrins.h>
  20          
  21          
  22          //定义按键及LED引脚
  23          sbit MCU_SWM0     = P2^0;                               //按键
  24          sbit MCU_SWM1     = P2^1;       
  25          sbit MCU_KO1      = P1^0;                               //按键
  26          sbit MCU_KO2      = P1^1;
  27          sbit MCU_LED0     = P1^2;                               //LED
  28          sbit MCU_LED1     = P1^3;
  29          sbit RST_CS5466   = P1^4;
  30          sbit Mcubz            = P2^4;
  31          
  32          unsigned char Time_S;
  33          unsigned char Time_M;
  34          unsigned char Time_x;
  35          
  36          void check_key_LED(void);
  37          void delay_ak(unsigned char times);
  38          void InitTimer(void);
  39          void Inc_time();
  40          void InitCPUIO(void);
  41          //////////////////////////////////////////////////////////////////
  42          main()
  43          {
  44   1         unsigned char ktso[16]={0,0,0,0,0,0,0,0,0,0,0,0};
  45   1              INT32U cnt;
  46   1          InitCPUIO();
  47   1              AUXR=0x02;
  48   1          InitTimer();
  49   1              //复位后LED亮
  50   1              for(cnt = 0; cnt <= 0x5000; cnt++)      //延时 
  51   1              {
  52   2                      MCU_LED0 = 0;                                   //D2和D3点亮
  53   2                      MCU_LED1 = 0;
  54   2              }
C51 COMPILER V7.02b   MAIN                                                                 09/24/2007 20:01:36 PAGE 2   

  55   1              MCU_LED0 = 1;                                           //D2和D3灭
  56   1              MCU_LED1 = 1;   
  57   1              
  58   1              if (Init_D12()!=0)                                      //初始化D12
  59   1                return;                                                       //如果初始化不成功,返回
  60   1              EX0 = 1;                                                        //开外部中断0
  61   1              PX0 = 0;                                                        //设置外部中断0中断优先级
  62   1              EA = 1;                                                         //开80C51总中断
  63   1      
  64   1              while(1)
  65   1              {
  66   2                      usbserve();                                             //处理USB事件
  67   2                      if(bEPPflags.bits.configuration)
  68   2                      {
  69   3                              check_key_LED();                        //连接正常,调用按键和LED控制处理
  70   3                      }
  71   2                 if(Time_M>2)
  72   2                   {
  73   3                        ktso[2]=TL1;
  74   3                ktso[3]=220;
  75   3                        ktso[4]=0;
  76   3                        ktso[5]=0;
  77   3                        Time_M=0;
  78   3                        Time_S=0;
  79   3                        TH1=0;
  80   3                TL1=0;
  81   3                        D12_WriteEndpoint(3, 16, ktso);
  82   3                        }
  83   2      
  84   2              }
  85   1      }
  86          
  87          
  88          /******* 下面为与D12 Smart板相关的操作 *************/
  89          
  90          /*******************************************************************
  91          ** 函数名称: check_key_LED()
  92          ** 功能描述: 检测D12 Smart板上的按键以及控制LED
  93          ** 输    入: 无
  94          ** 输    出: 无
  95          ********************************************************************/
  96          void check_key_LED(void)
  97          {
  98   1              static unsigned char c, last_key = 0xf;  
  99   1          unsigned char kts[16]={1,3,5,7,9,2,4,6,8,10,0x0a,0x0b,0x0c,0x0d,15};
 100   1          unsigned char k;
 101   1      
 102   1              c = MCU_SWM0 & MCU_SWM1;                                //读取两个按键状态
 103   1              c &= 0x0f;
 104   1          kts[15]=c;
 105   1              if (c != last_key) {
 106   2                      D12_WriteEndpoint(3, 16, kts);          //按键状态改变,发送信息给主机
 107   2              }
 108   1      
 109   1              last_key = c;                                                   //保留按键状态
 110   1      
 111   1              if(bEPPflags.bits.ep1_rxdone) {
 112   2                      DISABLE();                                                      //接收到主机发来的LED控制信息
 113   2                      bEPPflags.bits.ep1_rxdone = 0;
 114   2                      ENABLE();
 115   2              if(GenEpBuf[3]==1){
 116   3                         MCU_LED0 = !(GenEpBuf[4] & 0x1);     //控制LED状态
C51 COMPILER V7.02b   MAIN                                                                 09/24/2007 20:01:36 PAGE 3   

 117   3                 MCU_KO1= !MCU_LED0;
 118   3                         MCU_LED1 = !(GenEpBuf[4] & 0x2);
 119   3                         MCU_KO2 = !MCU_LED1;
 120   3                 //delay_ak(2);
 121   3              }
 122   2              else if(GenEpBuf[3]==2){
 123   3                 for(k=0;k<GenEpBuf[4];k++){
 124   4                     Mcubz=1;
 125   4                     delay_ak(2);
 126   4                     Mcubz=0;
 127   4                                 delay_ak(2);
 128   4                         }
 129   3                       }           
 130   2              }
 131   1      }
 132          /////////////////////////////////////////////////////////////////////
 133          void delay_ak(unsigned char times)
 134          {
 135   1       unsigned int ktime1,ktime2;
 136   1       while(times--!=0){
 137   2            for(ktime1=0;ktime1<200;ktime1++)
 138   2                 for(ktime2=0;ktime2<100;ktime2++);
 139   2        }
 140   1      }    
 141          ////////////////////////////////////////////////////////////////////
 142          void InitCPUIO(void)
 143          {
 144   1        MCU_KO1=0;
 145   1        MCU_KO2=0;
 146   1        Mcubz=0;
 147   1        MCU_LED0 = 1;                                 
 148   1        MCU_LED1 = 1;
 149   1        RST_CS5466=0;
 150   1        delay_ak(1);
 151   1        RST_CS5466=1;
 152   1      }
 153          ///////////////////////////////////////////////////////////////////
 154          void InitTimer(void)
 155          {
 156   1         TMOD=0x51;
 157   1         TR0=1;
 158   1         TR1=1;
 159   1         ET0=1;
 160   1         EA=1;
 161   1         TH1=0x00;
 162   1         TL1=0x00;
 163   1         TH0=0x20;
 164   1         TL0=0x00;
 165   1         Time_S=0;
 166   1         Time_M=0;
 167   1      }     
 168          ///////////////////////////////////////////////////////////////
 169          //功能:模拟时钟变化,
 170          //Time_S为秒,Time_M为分
 171          //------------------------------------------------------------------------------------
 172          void Inc_time()
 173          { 
 174   1        Time_S++;
 175   1        if(Time_S>10)
 176   1        {
 177   2         Time_S=0;
 178   2         Time_M++;
C51 COMPILER V7.02b   MAIN                                                                 09/24/2007 20:01:36 PAGE 4   

 179   2        if(Time_M>59)
 180   2           {
 181   3            Time_M=0;
 182   3            Time_x++;
 183   3            if(Time_x>23) Time_x=0;
 184   3            }
 185   2         }
 186   1      }
 187          ///////////////////////////////////////////////////////////////////////////////////////
 188          void timer1_isr(void) interrupt 1 using 3
 189          { TF0=0;
 190   1        TH0=0x20;
 191   1        TL0=0x00;
 192   1        Inc_time();
 193   1        TR0=1;
 194   1      }
 195          ////////////////////////////////////////////////////////////////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    440    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5      37
   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 + -