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

📄 mainloop.lst

📁 采用菲利普的USBD12芯片
💻 LST
字号:
C51 COMPILER V7.50   MAINLOOP                                                              03/17/2005 14:08:54 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MainLoop.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE MainLoop.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1             /*
   2             //*************************************************************************
   3             //
   4             //                           信息实验室
   5             //                           
   6             // File Name:        mainloop.C
   7             // Revision:         1.2(2004-11-27)
   8             // Author:           Chen Gen Chao (Lovelorn)
   9             // Use library:  USB51S.LIB
  10             // Note:                     USB51S.LIB不带DMA控制功能
  11             //*************************************************************************
  12             */
  13          
  14             /*
  15             //*************************************************************************
  16             //
  17             //                           ZLGMCU
  18             //                           www.zlgmcu.com
  19             // File Name:        mainloop.C
  20             // Revision:         0.4(2002-07-08)
  21             // Author:           Liu Ying Bin
  22             // Use library:  USB51S.LIB
  23             // Note:                     USB51S.LIB不带DMA控制功能
  24             //*************************************************************************
  25             */
  26          
  27          
  28          #include <stdio.h>
  29          #include <string.h>
  30          #include <reg51.h>                /* special function register declarations   */
  31          #include "mainloop.h"
  32          #include "isr.h"
  33          #include "protozlg.h"
  34          #include <rtx51tny.h>
  35          
  36          /*
  37          //*************************************************************************
  38          //  Public static data
  39          //*************************************************************************
  40          */
  41          
  42          extern EPPFLAGS bEPPflags;
  43          extern unsigned char idata GenEpBuf[];
  44          extern unsigned char idata EpBuf[];
  45          extern unsigned int data d12_addr;
  46          
  47          extern unsigned int data D12_DATA;
  48          extern unsigned int data D12_COMMAND;
  49          
  50          unsigned char idata DataBuf[16];
  51          unsigned char idata temp[10];
  52          unsigned int uiADResult=0;//version 1.4
  53          
  54          
  55          sfr CKCON = 0x8F;//87C52x2用
C51 COMPILER V7.50   MAINLOOP                                                              03/17/2005 14:08:54 PAGE 2   

  56          sbit clksel = P2^0;
  57          
  58          //D12中断服务
  59          usb_isr() interrupt 0
  60          {
  61   1              DISABLE;
  62   1              fn_usb_isr();//调用D12中断服务子程序
  63   1              ENABLE;
  64   1      }
  65          
  66          
  67          
  68          void SysInit(void) _task_ 0
  69          {
  70   1              P0 = 0xFF;//初始化I/O口
  71   1              P1 = 0xFF;
  72   1              P2 = 0xFF;
  73   1              P3 = 0xFF;
  74   1      
  75   1      //      CKCON = 0x00;
  76   1              CKCON = 0x00;
  77   1      
  78   1      //      if(clksel == 1)
  79   1      //              CKCON = CKCON | 0x01;
  80   1      
  81   1              D12_DATA = 0xff02;                      //定义数据地址
  82   1              D12_COMMAND = 0xff03;           //定义命令地址
  83   1              
  84   1      
  85   1              MCU_D12CS = 0x0;
  86   1              D12SUSPD = 0x0;
  87   1      
  88   1              IT0 = 0;//初始化中断
  89   1              EX0 = 1;
  90   1              PX0 = 0;
  91   1              EA = 1;
  92   1      
  93   1              MCU_D12CS = 0x1;
  94   1              MCU_D12CS = 0x0;
  95   1              D12_SetDMA(0x0);
  96   1              bEPPflags.value = 0;
  97   1      
  98   1              reconnect_USB();//联接USB总线
  99   1      // start operation system
 100   1              MAX1241Init();
 101   1              os_create_task(1);
 102   1              os_create_task(2);
 103   1              os_create_task(3);
 104   1              os_send_signal(3);
 105   1              os_delete_task(0);
 106   1      
 107   1              
 108   1      }
 109          
 110          void UsbServe1(void) _task_ 1
 111          {
 112   1              while(1)
 113   1              {
 114   2                      usbserve();//USB服务数据处理
 115   2              }
 116   1      }
 117          
C51 COMPILER V7.50   MAINLOOP                                                              03/17/2005 14:08:54 PAGE 3   

 118          void DataDeliver(void) _task_ 2
 119          {
 120   1              while(1)
 121   1              {
 122   2                      os_wait(K_SIG,0,0);
 123   2                      if(bEPPflags.bits.configuration)
 124   2                      {
 125   3                              DISABLE;//接收到主机发来的LED控制信息
 126   3                              bEPPflags.bits.ep1_rxdone = 0;
 127   3                              ENABLE;
 128   3                      ////////////// the following are added by lovelorn/////////////////
 129   3                              /*switch(memcmp(GenEpBuf,"GetData",7))//判断主机发来的命令是否正确
 130   3                              {
 131   3                              case(0):
 132   3                                      memcpy(GenEpBuf,"DataReady",9);//命令正确,回复"正确"应答,并通过Endpoint2发送数据
 133   3                                      D12_WriteEndpoint(3,9,GenEpBuf);
 134   3                                      DataProcess(DataBuf);
 135   3                                      D12_WriteEndpoint(5,16,DataBuf);
 136   3                                      break;
 137   3                              case(1):
 138   3                                      memcpy(GenEpBuf,"Error",5);//命令错误,回复"错误"应答,不发送数据
 139   3                                      D12_WriteEndpoint(3,5,GenEpBuf);
 140   3                                      break;
 141   3                              default:
 142   3                                      break;
 143   3                              }
 144   3                              */
 145   3                              memcpy(temp,GenEpBuf,10);
 146   3                              if(!memcmp(GenEpBuf,"GetData",7))
 147   3                              {
 148   4                                      memcpy(GenEpBuf,"DataReady",9);//命令正确,回复"正确"应答,并通过Endpoint2发送数据
 149   4                                      D12_WriteEndpoint(3,9,GenEpBuf);
 150   4                                      DataProcess(DataBuf);
 151   4                                      D12_WriteEndpoint(5,16,DataBuf);
 152   4                                      os_send_signal(3);
 153   4                                      continue;
 154   4                              }
 155   3                              memcpy(GenEpBuf,temp,10);
 156   3                              if(!memcmp(GenEpBuf,"LED1_ON",7))
 157   3                              {
 158   4                                      memcpy(GenEpBuf,"LEDOK",5);
 159   4                                      D12_WriteEndpoint(3,5,GenEpBuf);
 160   4                                      MCU_LED1=0;
 161   4                                      continue;
 162   4                              }
 163   3                              memcpy(GenEpBuf,temp,10);
 164   3                              if(!memcmp(GenEpBuf,"LED0_ON",7))
 165   3                              {
 166   4                                      memcpy(GenEpBuf,"LEDOK",5);
 167   4                                      D12_WriteEndpoint(3,5,GenEpBuf);
 168   4                                      MCU_LED0=0;
 169   4                                      continue;
 170   4                              }
 171   3                              memcpy(GenEpBuf,temp,10);
 172   3                              if(!memcmp(GenEpBuf,"LED0_OFF",8))
 173   3                              {
 174   4                                      memcpy(GenEpBuf,"LEDOK",5);
 175   4                                      D12_WriteEndpoint(3,5,GenEpBuf);
 176   4                                      MCU_LED0=1;
 177   4                                      continue;
 178   4                              }
 179   3                              memcpy(GenEpBuf,temp,10);
C51 COMPILER V7.50   MAINLOOP                                                              03/17/2005 14:08:54 PAGE 4   

 180   3                              if(!memcmp(GenEpBuf,"LED1_OFF",8))
 181   3                              {
 182   4                                      memcpy(GenEpBuf,"LEDOK",5);
 183   4                                      D12_WriteEndpoint(3,5,GenEpBuf);
 184   4                                      MCU_LED1=1;
 185   4                                      continue;
 186   4                              }
 187   3                              memcpy(GenEpBuf,"Error",5);//命令错误,回复"错误"应答,不发送数据
 188   3                              D12_WriteEndpoint(3,5,GenEpBuf);
 189   3                      }
 190   2              }
 191   1      }
 192          
 193          void ADConvert(void) _task_ 3// A/D转换过程 
 194          {                    //version 1.4
 195   1              unsigned char i=0;
 196   1              while(1)
 197   1              {
 198   2                      os_wait(K_SIG,0,0);
 199   2                      MAX1241DOUT=1;
 200   2                      MAX1241CS=0;
 201   2                      uiADResult=0;
 202   2                      MAX1241SCLK=0;
 203   2                      while(!MAX1241DOUT)
 204   2                      {
 205   3                              MCU_LED0=~MCU_LED0;
 206   3                      }
 207   2                      MAX1241SCLK=1;
 208   2                      MAX1241SCLK=0;//第一个肪冲无信号
 209   2                      for(i=0;i<12;i++)//获取A/D转换的12位串行数据
 210   2                      {
 211   3                              MAX1241SCLK=1;
 212   3                              uiADResult<<=1;
 213   3                              if(MAX1241DOUT)
 214   3                                      uiADResult++;
 215   3                              MAX1241SCLK=0;
 216   3                      }
 217   2                      for(i=0;i<3;i++)//空脉冲,标准操作,参见datasheet
 218   2                      {
 219   3                              MAX1241SCLK=1;
 220   3                              MAX1241SCLK=0;
 221   3                      }
 222   2                      MAX1241CS=1;
 223   2                      DataBuf[2]=uiADResult%256;//将转换数据放入通道1寄存器
 224   2                      DataBuf[3]=uiADResult/256;
 225   2              }
 226   1      }
 227          void DataProcess(unsigned char DataBuf[16])//对
 228          {
 229   1              unsigned char i;
 230   1              unsigned char idata sum=0;
 231   1              DataBuf[0]=0x55;//设置数据起始头
 232   1              DataBuf[1]=0xAA;
 233   1              for(i=1;i<4;i++)        //测试用数据,正式版中该段数据由A/D产生
 234   1              {                       //通道2 3 4数据由此产生,为伪数据,通道1由A/D产生
 235   2                      DataBuf[2*i+3]=0;   //高地址放数据高八位,低地址放数据低八位
 236   2                      DataBuf[2*i+2]++;
 237   2              }
 238   1              for(i=2;i<15;i++)//校验和,校验和不包括数据起始头
 239   1              {
 240   2                      sum+=DataBuf[i];
 241   2              }
C51 COMPILER V7.50   MAINLOOP                                                              03/17/2005 14:08:54 PAGE 5   

 242   1              DataBuf[15]=sum;
 243   1      }
 244          
 245          void MAX1241Init(void) //MAX1241各信号线的初始化,避免错误信号产生
 246          {                      //version 1.4
 247   1              MAX1241CS=1;
 248   1              MAX1241SCLK=0;
 249   1              MAX1241DOUT=1;
 250   1              bEPPflags.bits.ADCdone=0;
 251   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    849    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       4
   IDATA SIZE       =     26       1
   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 + -