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

📄 mainloop.lst

📁 用于设备工作时间监控的下位机源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 1   


C51 COMPILER V7.04, 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

stmt level    source

   1          #include <stdio.h>
   2          #include <string.h>
   3          
   4          #include <reg51.h>                /* special function register declarations   */
   5          
   6          #include "epphal.h"
   7          #include "d12ci.h"
   8          #include "mainloop.h"
   9          #include "usb100.h"
  10          #include "chap_9.h"
  11          #include "protodma.h"
  12          /*
  13          //*************************************************************************
  14          // USB protocol function pointer arrays
  15          //*************************************************************************
  16          */
  17          
  18          unsigned char RxRead24C02OneByte(unsigned char Address);
  19          void RxWrite24C02OneByte(unsigned char TempAddress, unsigned char TempData);
  20          
  21          unsigned short AT24C02DelayTime;        // 读24C02N延迟时间计时,必须保证每个加减单位为1毫秒
  22          
  23          unsigned short MilliSecondCount;
  24          unsigned short MinuteCount;
  25          
  26          
  27          unsigned char  TempValue;
  28          unsigned short TempShort;
  29          unsigned long  TempLong;
  30          
  31          
  32          unsigned long  UsedMinuteTime;
  33          unsigned short WriteUseMinuteTime;
  34          
  35          
  36          unsigned char  OutputPulseValue;
  37          unsigned short OutputPulseFrequency;
  38          
  39          //USB标准请求
  40          code void (*StandardDeviceRequest[])(void) =
  41          {
  42                  get_status,
  43                  clear_feature,
  44                  reserved,
  45                  set_feature,
  46                  reserved,
  47                  set_address,
  48                  get_descriptor,
  49                  reserved,
  50                  get_configuration,
  51                  set_configuration,
  52                  get_interface,
  53                  set_interface,
  54                  reserved,
  55                  reserved,
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 2   

  56                  reserved,
  57                  reserved
  58          };
  59          
  60          //用户厂商请求
  61          code void (*VendorDeviceRequest[])(void) =
  62          {
  63                  reserved,
  64                  reserved,
  65                  reserved,
  66                  reserved,
  67                  reserved,
  68                  reserved,
  69                  reserved,
  70                  reserved,
  71                  reserved,
  72                  reserved,
  73                  reserved,
  74                  reserved,
  75                  read_write_register,
  76                  reserved,
  77                  reserved,
  78                  reserved
  79          };
  80          
  81          /*
  82          //*************************************************************************
  83          //  Public static data
  84          //*************************************************************************
  85          */
  86          
  87          extern EPPFLAGS bEPPflags;
  88          extern unsigned long ClockTicks;
  89          extern unsigned char idata GenEpBuf[];
  90          extern IO_REQUEST idata ioRequest;
  91          
  92          extern unsigned char ioSize, ioCount;
  93          extern unsigned char idata EpBuf[];
  94          
  95          CONTROL_XFER ControlData;
  96          BOOL bNoRAM;
  97          
  98          code char * _NAME_USB_REQUEST_DIRECTION[] =
  99          {
 100          "Host_to_device",
 101          "Device_to_host"
 102          };
 103          
 104          code char * _NAME_USB_REQUEST_RECIPIENT[] =
 105          {
 106          "Device",
 107          "Interface",
 108          "Endpoint(0)",
 109          "Other"
 110          };
 111          
 112          code char * _NAME_USB_REQUEST_TYPE[] =
 113          {
 114          "Standard",
 115          "Class",
 116          "Vendor",
 117          "Reserved"
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 3   

 118          };
 119          
 120          code char * _NAME_USB_STANDARD_REQUEST[] =
 121          {
 122          "GET_STATUS",
 123          "CLEAR_FEATURE",
 124          "RESERVED",
 125          "SET_FEATURE",
 126          "RESERVED",
 127          "SET_ADDRESS",
 128          "GET_DESCRIPTOR",
 129          "SET_DESCRIPTOR",
 130          "GET_CONFIGURATION",
 131          "SET_CONFIGURATION",
 132          "GET_INTERFACE",
 133          "SET_INTERFACE",
 134          "SYNC_FRAME"
 135          };
 136          
 137          
 138          void help_devreq(unsigned char typ, unsigned char req)
 139          {
 140   1              typ >>= 5;
 141   1      
 142   1              if(typ == USB_STANDARD_REQUEST) {
 143   2              }
 144   1              else {
 145   2                      if(bEPPflags.bits.verbose)
 146   2                              printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
 147   2                                      req);
 148   2              }
 149   1      }
 150          
 151          /* Configure Timer 0
 152             - Mode                  = 1
 153             - Interrupt                   = ENABLED
 154             - Clock Source                = INTERNAL
 155             - Enable Gating Control    = DISABLED
 156          */
 157          //定时器0初始化程序
 158          //定时器用来定时检测按键状态
 159          void init_timer0(void)
 160          {
 161   1      //      TMOD &= 0xF0;                   /* clear Timer 0   */
 162   1      //      TMOD |= 0x01;
 163   1      //      TL0 = 0X0;              /* value set by user    */
 164   1      //      TH0 = 0X0;              /* value set by user  */
 165   1      
 166   1              TMOD &= 0xF0;                   /* clear Timer 0   */
 167   1              TMOD |= 0x01;
 168   1              TH0  = (-2000) >> 8;    // Timer 0 -- (12*x/f=1ms) at 24MHz
 169   1          TL0  = (-2000) & 0xff;
 170   1      
 171   1              ET0 = 1;                        /* IE.1*/
 172   1              TR0 = 1;                /* TCON.4 start timer  */
 173   1      //      PT0 = 1;
 174   1      
 175   1              EA = 1;
 176   1      }
 177          
 178          /* Interrupt Control Unit */
 179          /*   ****  Enabled interrupts in Interrupt Enable Register ****
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 4   

 180                   ****  GLOBAL INTERRUPT MUST BE ENABLED FOR ANY OTHER
 181                   ****  INTERRUPT TO WORK!
 182          */
 183          /*                  GLOBAL INTERRUPT DISABLED ALL INTERRUPTS
 184                                                  ARE DISABLED          */
 185          /*                    External interrupt 0      */
 186          /*                        Priority Level = 0    */
 187          /*                        Timer 0 interrupt     */
 188          /*                       Priority Level = 0     */
 189          //中断设置
 190          void init_special_interrupts(void)
 191          {
 192   1              IT0 = 0;
 193   1              EX0 = 1;
 194   1              PX0 = 0;
 195   1      }
 196          
 197          //I/O口初始化程序
 198          void init_port()
 199          {
 200   1              P0 = 0xFF;
 201   1              P1 = 0xFF;
 202   1              P2 = 0xFF;
 203   1              P3 = 0xFF;
 204   1              MCU_D12CS = 0x0;
 205   1              D12SUSPD = 0;
 206   1      }
 207          
 208          /*Serial Port */
 209          /*Mode            = 1  /8-bit UART
 210            Serial Port Interrupt    = Disabled         */
 211          /*Receive         = Enabled   */
 212          /*Auto Addressing    = Disabled   */
 213          //串行口设置
 214          void init_serial(void)
 215          {
 216   1              SCON = 0X52;
 217   1              PCON = 0X80 | PCON;
 218   1              TMOD = 0X20;
 219   1              TCON = 0x69;    // TCON 
 220   1              TH1 = 0xF3;
 221   1      }
 222          
 223          
 224          void main(void)
 225          {
 226   1              unsigned char key, i;
 227   1      
 228   1              init_port();//初始化I/O口
 229   1              init_serial();//初始化串行口
 230   1              //注:串行口是用来外扩LCD和键盘,用于查询显示当前的工作状态
 231   1              //在USB Smart Board标准配置中并未带该LCD和键盘,这里给出的程序仅供参考
 232   1      
 233   1      
 234   1              init_timer0();//初始化定时器0
 235   1              init_special_interrupts();//设置中断
 236   1      
 237   1              MilliSecondCount = 0;
 238   1              MinuteCount = 0;
 239   1      
 240   1      //      for (TempValue=0; TempValue<128; TempValue++){
 241   1      //              RxWrite24C02OneByte(TempValue, 0);
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 5   

 242   1      //      }
 243   1      
 244   1      
 245   1              UsedMinuteTime = 0;
 246   1              TempValue = RxRead24C02OneByte(0);
 247   1              UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256 * 256 * 256;
 248   1              TempValue = RxRead24C02OneByte(1);
 249   1              UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256 * 256;
 250   1              TempValue = RxRead24C02OneByte(2);
 251   1              UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256;
 252   1              TempValue = RxRead24C02OneByte(3);
 253   1              UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue);
 254   1      
 255   1      
 256   1              WriteUseMinuteTime = 0;
 257   1              TempValue = RxRead24C02OneByte(4);
 258   1              WriteUseMinuteTime = WriteUseMinuteTime + ((unsigned short)TempValue) * 256;
 259   1              TempValue = RxRead24C02OneByte(5);
 260   1              WriteUseMinuteTime = WriteUseMinuteTime + ((unsigned short)TempValue);
 261   1              if (WriteUseMinuteTime == 0){
 262   2                      WriteUseMinuteTime = 30;
 263   2              }
 264   1      
 265   1      
 266   1              OutputPulseFrequency = 0;
 267   1              TempValue = RxRead24C02OneByte(6);
 268   1              OutputPulseFrequency = OutputPulseFrequency + ((unsigned short)TempValue) * 256;
 269   1              TempValue = RxRead24C02OneByte(7);
 270   1              OutputPulseFrequency = OutputPulseFrequency + ((unsigned short)TempValue);
 271   1              if (OutputPulseFrequency == 0){
 272   2                      OutputPulseFrequency = 1;
 273   2              }
 274   1      
 275   1              OutputPulseValue = RxRead24C02OneByte(8);
 276   1              P2 = OutputPulseValue;
 277   1      
 278   1      
 279   1      
 280   1      
 281   1              MCU_D12CS = 0x1;
 282   1              
 283   1              MCU_D12CS = 0x0;
 284   1      
 285   1              D12_ReadChipID();
 286   1      
 287   1              if(MCU_SWM0 == 0 && MCU_SWM1 == 0) {
 288   2                      MCU_D12RST = 0;//DMA设置
 289   2                      MCU_D12RST = 1;
 290   2                      D12_SetDMA(0x0);
 291   2              }
 292   1      
 293   1              bEPPflags.value = 0;
 294   1              reconnect_USB();//重新连接USB
 295   1      /*
 296   1              if((i = D12_GetDMA()) == 0xC3) {
 297   1                      D12_SendResume();//发送恢复处理
 298   1              }
 299   1              else {
 300   1                      bEPPflags.value = 0;
 301   1                      reconnect_USB();//重新连接USB
 302   1              }
 303   1      */
C51 COMPILER V7.04   MAINLOOP                                                              12/18/2005 18:05:21 PAGE 6   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -