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

📄 mainloop.lst

📁 D12的驱动程序
💻 LST
字号:
C51 COMPILER V7.08   MAINLOOP                                                              03/11/2005 10:39:59 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Mainloop.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND

line level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                           ZLGMCU
   5             //                           www.zlgmcu.com
   6             // File Name:        MAINLOOP.C
   7             // Revision:         V0.2(2002-04-08)
   8             // Use Library:      USB51S.LIB
   9             // Note:             USB51S.LIB不带DMA控制功能
  10             //*************************************************************************
  11             */
  12          
  13          #include <stdio.h>
  14          #include <string.h>
  15          #include <reg51.h>                /* special function register declarations   */
  16          #include "mainloop.h"
  17          #include "isr.h"
  18          #include "protozlg.h"
  19          #include "absacc.h"
  20          #define IN0 XBYTE[0xfef8]    //设置AD0809通道0的地址
  21          
  22          #include "d12ci.h"
  23          /*
  24          //*************************************************************************
  25          //  Public static data
  26          //*************************************************************************
  27          */
  28          unsigned char Data;
  29          static unsigned int i_st;       //add by zjl
  30          
  31          extern EPPFLAGS bEPPflags;
  32          extern unsigned char idata GenEpBuf[];
  33          extern unsigned char idata EpBuf[];
  34          extern unsigned char xdata *ad_addr;
  35          extern unsigned char xdata *da_addr;
  36          
  37          //D12中断服务
  38          usb_isr() interrupt 0
  39          {
  40   1              DISABLE;
  41   1      //      fn_usb_isr();//调用D12中断服务子程序
  42   1      //----------------------code below copied from fn_usb_isr()---------
  43   1      //      bEPPflags.bits.in_isr = 1;
  44   1              i_st = D12_ReadInterruptRegister();
  45   1              if(i_st != 0) 
  46   1                      {
  47   2      
  48   2                      if(i_st & D12_INT_ENDP2IN)      //      ep2_txdone();
  49   2                              {
  50   3                                      D12_COMMAND = 0x45;             //clear last treat status
  51   3                                      D12_COMMAND = 0x05;
  52   3                                      D12_COMMAND = 0xFA;             //enable buffer sothat command in will be respond
  53   3                              }
  54   2                      else if(i_st & D12_INT_ENDP2OUT)                ep2_rxdone();
  55   2                      else if(i_st & D12_INT_ENDP0IN)                 ep0_txdone();
C51 COMPILER V7.08   MAINLOOP                                                              03/11/2005 10:39:59 PAGE 2   

  56   2                      else if(i_st & D12_INT_ENDP0OUT)                ep0_rxdone();
  57   2      //              if(i_st & D12_INT_EOT)
  58   2      //                      dma_eot();
  59   2                      else if(i_st & D12_INT_BUSRESET) 
  60   2                                      {
  61   3                                              bus_reset();
  62   3                                              bEPPflags.bits.bus_reset = 1;
  63   3                                      }
  64   2                      else if(i_st & D12_INT_SUSPENDCHANGE)
  65   2                              bEPPflags.bits.suspend = 1;
  66   2      //              if(i_st & D12_INT_ENDP1IN)
  67   2      //                      ep1_txdone();
  68   2      //              if(i_st & D12_INT_ENDP1OUT)
  69   2      //                      ep1_rxdone();
  70   2              }
  71   1              bEPPflags.bits.in_isr = 0;      
  72   1              ENABLE;
  73   1      }
  74          void inserv(void) interrupt 2
  75          {
  76   1      
  77   1              Data=*ad_addr;          //在这里得到A/D转化的值
  78   1              D12_WriteEndpoint(3, 1, &Data);//数据写入D12缓冲区
  79   1                      Data&=0xbf;
  80   1              P1=0xb0|Data;
  81   1                                      //设置为66,看PC机接收到数据是否符合。
  82   1      
  83   1      }
  84          void delay(int i){
  85   1              int a;
  86   1              for(a=0;a<=i;a++)  ;
  87   1      }
  88          
  89          void main(void)
  90          {
  91   1      //      unsigned char i;        
  92   1      
  93   1              P0 = 0xFF;//初始化I/O口
  94   1      //      P1 = 0xAA;
  95   1      //      P1 = 0x55;
  96   1      //      delay(20000);
  97   1      //      delay(20000);
  98   1              P1 = 0xFF;
  99   1              P2 = 0xFF;
 100   1              P3 = 0xFF;
 101   1              MCU_D12CS = 0x0;//gaidong
 102   1              D12SUSPD = 0;
 103   1      
 104   1              IT0 = 0;//初始化中断
 105   1              EX0 = 1;
 106   1              PX0 = 0;
 107   1              //IT1=0;//设置INT1低电平中断触发//gaidong
 108   1              //EX1=1;//允许外部中断1//gaidong
 109   1              EA =1;//允许使用片里ROM
 110   1      
 111   1              MCU_D12CS = 0x1;//gaidong
 112   1              MCU_D12CS =0x0 ;//gaidong
 113   1              D12_SetDMA(0x0);//gaidong
 114   1              bEPPflags.value = 0;
 115   1      
 116   1              //reconnect_USB();//联接USB总线
 117   1      //      while(bEPPflags.bits.configuration==0)  
C51 COMPILER V7.08   MAINLOOP                                                              03/11/2005 10:39:59 PAGE 3   

 118   1                      reconnect_USB();
 119   1          
 120   1              /* Main program loop */
 121   1      
 122   1      //      for(i=0;i<64;i++) EpBuf[i] = 1; //init EpBuf by zjl
 123   1      //      D12_WriteEndpoint(5, 64, EpBuf);
 124   1      
 125   1              while( TRUE ){
 126   2                      if(bEPPflags.bits.configuration)
 127   2                        check_key_LED();//连接正常,调用按键和LED控制处理
 128   2                        delay(10000);
 129   2                        usbserve();//USB服务数据处理
 130   2              } // Main Loop
 131   1      }
 132          
 133          void check_key_LED(void)
 134          {
 135   1              static unsigned char c, last_key = 0x1,b;
 136   1      
 137   1      /*      if(MCU_SWM0&MCU_SWM1)   c=0x40;
 138   1          
 139   1              else    c=0x80;*/
 140   1              
 141   1      
 142   1           c=(MCU_SWM0&MCU_SWM1) ;
 143   1                
 144   1           
 145   1          if(c==1) {b=2;}
 146   1              else {b=16;}
 147   1       
 148   1              if (c != last_key) {
 149   2              
 150   2                      D12_WriteEndpoint(3, 1, &b);//按键状态改变,发送信息给主机/      
 151   2              }
 152   1              last_key = c;
 153   1      
 154   1              if(bEPPflags.bits.ep1_rxdone) {
 155   2                      DISABLE;//接收到主机发来的LED控制信息
 156   2                      bEPPflags.bits.ep1_rxdone = 0;
 157   2                      ENABLE;
 158   2                      MCU_LED0 = !(GenEpBuf[3] & 0x1);//控制LED状态
 159   2                      MCU_LED1 = !(GenEpBuf[3] & 0x2);
 160   2              }
 161   1      }
 162          
 163          
 164          


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