?? 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 + -