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

📄 main.lst

📁 通过PDIUSBD12对步进电机进行控制
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   06/10/2007 13:07:53 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Main.OBJ
COMPILER INVOKED BY: d:\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          
  14          #include <reg52.h>
  15          #include "D12Config.h"
  16          #include "Descriptor.h"
  17          #include "Chap_9.h"
  18          #include "D12Driver.h"
  19          sbit MCU_LED0 = P1^2;									//LED
  20          sbit MCU_LED1 = P1^3;
  21          sbit P1_4=P1^4;									//P1.4输出方向电平信号
  22          sbit P1_5=P1^5;									//P1.5输出步进脉冲信号			  
  23          sbit P2_0=P2^0;									//P3.4输出脱机信号					
  24          unsigned int flag,th0,tl0,step,step1,step2,j,k,TIMER,count=0,EvTimer=0;
  25          
  26          void main()
  27          {	INT32U cnt,i;	
  28   1      	EpBuf[0]=0;		
  29   1      	for(cnt = 0; cnt <= 0xffff; cnt++)						//延时 
  30   1      	{
  31   2      		MCU_LED0 = 0;								//D2和D3点亮
  32   2       		MCU_LED1 = 0;
  33   2      	}
  34   1      	MCU_LED0 = 1;									//D2和D3灭
  35   1       	MCU_LED1 = 1;	
  36   1      	P0 = 0xFF;										//初始化I/O口
  37   1      	P1 = 0xFF;
  38   1      	P2 = 0xFF;
  39   1      	P3 = 0xFF;
  40   1      	if (Init_D12()!=0)							//初始化D12
  41   1      		return;										//如果初始化不成功,返回
  42   1      
  43   1      	EX0 = 1;									//开外部中断0
  44   1      	PX0 = 0;									//设置外部中断0中断优先级
  45   1      	EA = 1;									//开总中断
  46   1      	TMOD=0x01;								//T0采用方式1进行定时
  47   1      	ET0=1;									//开定时器中断
  48   1      	TR0=0;									//关定时器
  49   1      	while(1)
  50   1      	{
  51   2      		usbserve();												//处理USB事件
  52   2      		if(bEPPflags.bits.configuration)
  53   2      		{	if(bEPPflags.bits.ep2_rxdone==1)				//端点2收到数据
  54   3      			{	DISABLE();
C51 COMPILER V6.12  MAIN                                                                   06/10/2007 13:07:53 PAGE 2   

  55   4      				bEPPflags.bits.ep2_rxdone=0;				//清除端点2收到数据标志
  56   4      				ENABLE();
  57   4      
  58   4      							
  59   4      				flag=EpBuf[0];						//转动方向
  60   4      				th0=EpBuf[1];						//定时器T0高字节
  61   4      				tl0=EpBuf[2];						//定时器T0低字节
  62   4      				TIMER=EpBuf[3];					//定时次数
  63   4      				step1=EpBuf[4];					//步距数高字节
  64   4      				step2=EpBuf[5];					//步距数低字节
  65   4      				step=(step1<<8)+step2;			//步距数
  66   4      
  67   4      				switch(flag)
  68   4      				{case 0: {P2_0=0;EpBuf[4]=0;EpBuf[5]=0;}break;		//停止
  69   5      				 case 1:	{P2_0=1;						//使能
  70   6      						    P1_4=0;						//正转
  71   6      							for(cnt = 0; cnt <= 0xff; cnt++);						//延时 
  72   6      							j=0;						//判别已转步数		
  73   6      						for(i=0;i<2*step;i++)
  74   6      							{TH0=th0;TL0=tl0;TR0=1;	//启动定时器
  75   7      							while(!EvTimer);		//等待定时器中断,直到EvTimer=1
  76   7      							EvTimer=0;					//清除中断标志
  77   7      							P1_5=!P1_5;					//输出信号跳变
  78   7      							if(P1_5)j++;				//转动步数增加
  79   7      							TR0=0;						//禁止定时器
  80   7      							}
  81   6      							P2_0=0;						//停止转动后禁止使能
  82   6      							k=j>>8;						//高字节
  83   6      							EpBuf[4]=k;
  84   6      							EpBuf[5]=j-256*k;}break;//低字节	
  85   5      				 case 2:{P2_0=1;						//使能
  86   6      						  P1_4=1;						//反转
  87   6      						  for(cnt = 0; cnt <= 0xff; cnt++);						//延时 
  88   6      						  j=0;							//判别已转步数
  89   6      						for(i=0;i<2*step;i++)
  90   6      						   {TH0=th0;TL0=tl0;TR0=1;	//启动定时器
  91   7      						   while(!EvTimer);			//等待定时器中断,直到EvTimer=1
  92   7      						   EvTimer=0;					//清除中断标志
  93   7      						   P1_5=!P1_5;					//输出信号跳变
  94   7      						   if(P1_5)j++;					//转动步数增加
  95   7      						   TR0=0;						//禁止定时器
  96   7      						   }
  97   6      						   P2_0=0;						//停止转动后禁止使能
  98   6      						   k=j>>8;						//高字节
  99   6      						   EpBuf[4]=k;
 100   6      						   EpBuf[5]=j-256*k;}break;//低字节
 101   5      				}
 102   4      				D12_WriteEndpoint(5,6,EpBuf);		//通过端点2发送5个字节给主机		
 103   4      			}
 104   3      		}
 105   2      	}
 106   1      }
 107          
 108          
 109          
 110          
 111          void TIMER0(void) interrupt 1		//定时中断处理程序
 112          {TH0=th0;
 113   1      TL0=tl0;
 114   1      count++;
 115   1      if(count>=TIMER)
 116   1      {count=0;
C51 COMPILER V6.12  MAIN                                                                   06/10/2007 13:07:53 PAGE 3   

 117   2      EvTimer=1;}//设置定时器中断
 118   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    623    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       8
   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 + -