📄 main.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 + -