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

📄 mainloop.lst

📁 USB code using I2C bus to communicate with other node
💻 LST
字号:
C51 COMPILER V7.06   MAINLOOP                                                              09/06/2003 16:55:54 PAGE 1   


C51 COMPILER V7.06, 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          /**************************************************************************
   2          *                                       基于USB的EEPROM编程器程序(MCU)
   3          *    本程序使用了DP-51实验板上的USB接口实现与上位机PC的通讯,由PC机对板上的
   4          *EEPROM(CSI24WC02)行读写操作控制。程序中使用了USB51S.LIB的接口程序对USB芯片
   5          *PDIUSBD12进行操作,USB51S.LIB的详细使用说明请参考<<D12 USB固件编程>>一文。
   6          *
   7          * File Name:    MAINLOOP.C
   8          * Revision:             V0.1(2002-11-01)
   9          * Use Library:  USB51S.LIB
  10          * Note:         USB51S.LIB (不带DMA控制功能)
  11          *               www.zlgmcu.com
  12          **************************************************************************/
  13          #include <reg51.h>                
  14          
  15          #include "isr.h"                                                /*包含头文件,使用USB51S.LIB*/
  16          #include "vi2c_c51.h"
  17          
  18          
  19          /**************************************************************************
  20            声明全局变量
  21          **************************************************************************/
  22          extern EPPFLAGS bEPPflags;                              /*USB事件标志*/
  23          extern unsigned char idata GenEpBuf[];  /*信号包缓冲区(命令区)*/
  24          extern unsigned char idata EpBuf[];             /*信号包缓冲区(数据区)*/
  25          
  26          extern unsigned int data D12_DATA;              /*D12数据的地址变量*/
  27          extern unsigned int data D12_COMMAND;   /*D12命令的地址变量*/
  28          
  29          
  30          byte_count    rwrom_addr;                               /*EEPROM操作地址*/
  31          byte_count    rwlen;                                    /*EEPROM操作字节数*/
  32          /*EEPROM类型,01-24WC01,02-24WC02,03-24WC04,04-24WC08,05-24WC16,06-24WC64*/
  33          byte_count        rwrom_type;                           /*EEPROM操作类型*/
  34          unsigned char  eprom_sla;                               /*EEPROM的从机地址*/
  35          unsigned char  operate_type;                    /*EEPROM操作,页类型号1--6*/
  36          unsigned char  *eprom_sub;                              /*EEPROM的子地址*/
  37          
  38                                          
  39          unsigned char  idata ComEpBuf[8];               /*命令字节缓冲区(接收上位机的)*/
  40          unsigned char  check_dat;                               /*效验和,本例采用异或效验和*/
  41          
  42          
  43          unsigned char code i2crom_mask[]=
  44          { /*页写掩字*/
  45            0x00,                                 
  46            0x07,                                 /*24c01*/
  47            0x07,                                 /*24c02*/
  48            0x0f,                                 /*24c04*/
  49            0x0f,                                 /*24c08*/
  50            0x0f,                                 /*24c16*/
  51            0x1f,                                 /*24C32,24c64,24C128,24C256*/
  52          };
  53          
  54          
  55          unsigned int code rom_size[]=
C51 COMPILER V7.06   MAINLOOP                                                              09/06/2003 16:55:54 PAGE 2   

  56          { /*空间大小*/
  57            0x0000,                                       
  58            0x0080,                               /*24c01*/
  59            0x0100,                               /*24c02*/
  60            0x0200,                               /*24c04*/
  61            0x0400,                               /*24c08*/
  62            0x0800,                               /*24c16*/
  63            0x8000,                               /*24C32,24c64,24C128,24C256*/
  64          };
  65          
  66          
  67          /***************************************************************************
  68          *名称:init_timer0()
  69          *功能:设置定时器0,用于接收超时判断,
  70          *      打开定时器0中断及全局中断允许(EA=1)
  71          ***************************************************************************/
  72          void init_timer0(void)
  73          { TMOD &= 0XF0;
  74   1        TMOD |= 0X01;
  75   1        TL0 = 0X0;
  76   1        TH0 = 0X0;
  77   1        ET0 = 1;
  78   1        TR0 = 1;
  79   1        PT0 = 0;
  80   1        EA = 1;
  81   1      }
  82          
  83          
  84          /***************************************************************************
  85          *名称:init_special_interrupts()
  86          *功能:设置外部中断1的触发方式,并开放中断。USB中断使用。
  87          *
  88          ***************************************************************************/
  89          void init_special_interrupts(void)
  90          { IT1 = 0;
  91   1        EX1 = 1;
  92   1        PX1 = 1;
  93   1      }
  94          
  95          
  96          /***************************************************************************
  97          *名称:init_port()
  98          *功能:端口初始化,D12SUSPD复位为0
  99          *
 100          ***************************************************************************/
 101          void init_port()
 102          { P0 = 0XFF;
 103   1        P1 = 0XFF;
 104   1        P2 = 0XFF;
 105   1        P3 = 0XFF;
 106   1        D12SUSPD = 0;
 107   1      }
 108          
 109          
 110          /***************************************************************************
 111          *名称:timer_isr()
 112          *功能:定时器0中断,设置超时计时
 113          *
 114          ***************************************************************************/
 115          timer_isr() interrupt 1
 116          {
 117   1              DISABLE;
C51 COMPILER V7.06   MAINLOOP                                                              09/06/2003 16:55:54 PAGE 3   

 118   1              bEPPflags.bits.timer=1;         /*设置超时标志*/
 119   1              ENABLE;
 120   1      }
 121          
 122          
 123          
 124          /***************************************************************************
 125          *名称:usb_isr()
 126          *功能:外部中断1服务程序,即USB中断处理
 127          *
 128          ***************************************************************************/
 129          usb_isr() interrupt 2
 130          { DISABLE;                              /*关闭中断*/
 131   1        fn_usb_isr();                 /*调用USB51S.LIB中的中断处理*/
 132   1        ENABLE;                               /*开放中断*/
 133   1      }
 134          
 135          
 136          
 137          
 138          
 139          /***************************************************************************
 140          *名称:Write_CSI24WCxx()
 141          *功能:进行EEPROM写操作。
 142          *使用全局参数

⌨️ 快捷键说明

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