📄 mainusb.lst
字号:
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAINUSB
OBJECT MODULE PLACED IN MainUSB.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE MainUSB.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #include<Absacc.h>
3 #include <intrins.h>
4 //#include <stdio.h>
5 //#include <string.h>
6
7 #define ENABLE EA=1
8 #define DISABLE EA=0
9 #define Cmdaddr 0x1000
10 #define Dataddr 0x0000
11 #define Setup_flag 0x01
12 #define Trans_flag 0x02
13 #define Uchar unsigned char
14 #define Uint unsigned int
15 #define SWAP(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
16
17 #define EP0_OUT 0x01
18 #define EP0_IN 0x02
19 #define EP1_OUT 0x04
20 #define EP1_IN 0x08
21 #define EP2_OUT 0x10
22 #define EP2_IN 0x20
23 #define BUS_RESET 0x40
24 #define SUSPCH 0x80
25
26 /****************************** Declare *************************************/
27
28 void InitSys();
29 void Delay(int);
30 void Disconnect();
31 void Connect();
32 void InitSerial();
33 void InitINT0();
34 void Readintregister(char *ir1,char *ir2);
35
36 void Ep0out();
37 void Ep0in();
38 void Ep1out();
39 void Ep1in();
40 void Ep2out();
41 void Ep2in();
42 void Busreset();
43 void Suspch();
44
45 void Dosetup();
46 void Readep(char,char);
47 void Writeep(char n, char len, char *p);
48 void Answerep(char);
49 void Prints(char *p);
50 void Printn(Uchar);
51
52 void Ep1trans(Uchar *p);
53
54 sbit CSUSB=P1^7;
55 sbit SUSP=P1^0;
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 2
56 sbit TestL=P1^4;
57
58 //Uchar Flagint; //中断标志,便于主程序区分中断类型
59 Uchar Flag; //系统的操作标志
60 Uchar Ep1leftsize=0;
61 Uchar *TestP;
62 Uchar *transp,translen; //发送长数据时用的临时变量
63
64 struct DEVICE_REQUEST //记录设备请求的结构体缓冲区
65 {
66 Uchar bmrequesttype;
67 Uchar brequest;
68 Uint wvalue;
69 Uint windex;
70 Uint wlength;
71 }Device_request;
72
73 struct DEVICE_DESCRIPTOR //固件_设备描述表的结构体
74 {
75 Uchar blength;
76 Uchar bdecriptortype;
77 Uint bcdusb;
78 Uchar bdeviceclass;
79 Uchar bdevicesubclass;
80 Uchar bdeviceportocol;
81 Uchar bmaxpacketsize0;
82 Uint idvendor;
83 Uint idproduct;
84 Uint bcddevice;
85 Uchar imanufacturer;
86 Uchar iproduct;
87 Uchar iserialnumber;
88 Uchar bnumconfigurations;
89 };
90
91 code struct DESCRIPTORS //固件_各类描述表(存储于ROM中)
92 {
93 struct DEVICE_DESCRIPTOR Device_descriptor;
94 }Descriptors=
95 {
96 0x12,
97 0x01,
98 SWAP(0x0110),
99 0xFF,
100 0xFF,
101 0,
102 16,
103 SWAP(0x0471),
104 SWAP(0x0666),
105 SWAP(0x0100),
106 0,
107 0,
108 0,
109 1
110 };
111
112
113
114 /****************************** Main() *************************************/
115
116 main()
117 {
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 3
118 1 Uchar i;
119 1
120 1 i=0;
121 1
122 1 InitSys();
123 1
124 1 Prints("\nOK! Let's begin:---> \n");
125 1 Prints("step_1\n");
126 1
127 1 while(1)
128 1 {
129 2 Delay(100);
130 2 Prints("step_");
131 2 Printn(i ++);
132 2 Prints("\n");
133 2
134 2 if(Flag&Setup_flag) //如果有Setup包进入
135 2 {
136 3 DISABLE;
137 3 Flag^=Setup_flag; //setup标志清除
138 3 ENABLE;
139 3
140 3 Dosetup(); //响应setup包
141 3 }
142 2
143 2 }
144 1 }
145
146 /****************************** Function *************************************/
147
148 void Prints(char *p)
149 {
150 1
151 1 while(*p!='\0')
152 1 {
153 2 if(*p == '\n')
154 2 {
155 3 SBUF = '\r';
156 3 }
157 2 Delay(7);
158 2 SBUF=*p++;
159 2 Delay(7);
160 2 }
161 1 }
162
163 void Printn(Uchar n)
164 {
165 1 Uchar m;
166 1 m=n/0x10; //高位
167 1 if(m<0x0A) SBUF=0x30+m;
168 1 else SBUF=0x41+m-0x0A;
169 1 Delay(7);
170 1
171 1 m=n%0x10; //低位
172 1 if(m<0x0A) SBUF=0x30+m;
173 1 else SBUF=0x41+m-0x0A;
174 1 Delay(3);
175 1
176 1 }
177
178 void InitSys(void)
179 {
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 4
180 1 /*
181 1 CSUSB=0; //片选D12
182 1 SUSP=0; //取消挂起,唤醒D12
183 1 TestL=1;
184 1 */
185 1 P0 = 0xFF;
186 1 P1 = 0xFF;
187 1 P2 = 0xFF;
188 1 P3 = 0xFF;
189 1 CSUSB = 0x0;
190 1 SUSP = 0;
191 1 CSUSB=1;
192 1 CSUSB=0;
193 1
194 1 InitSerial();
195 1 InitINT0();
196 1
197 1
198 1
199 1 SUSP = 0;
200 1 Disconnect();
201 1 Delay(500);
202 1 Connect();
203 1
204 1 ENABLE; //使能中断
205 1 }
206
207 void InitSerial()
208 {
209 1 IE=IE|0x90; //初始化串口
210 1 SCON=0x50;
211 1 TMOD=TMOD|0x20; //Timer1工作在方式2下
212 1 TH1=0xFD; // 波特率 9600
213 1 TL1=0xFD;
214 1 TR1=1;
215 1 TI=0;
216 1 RI=0;
217 1 }
218
219 void InitINT0()
220 {
221 1 IE|=0x81;
222 1 IT0=0; //外部中断设置为电平触发
223 1 }
224
225
226
227 void Readintregister(char *ir1,char *ir2)
228 {
229 1 XBYTE[Cmdaddr]=0xF4;
230 1 *ir1=XBYTE[Dataddr];
231 1 *ir2=XBYTE[Dataddr];
232 1
233 1 return ;
234 1 }
235
236 void Dosetup()
237 {
238 1 Uchar type,req;
239 1 Uchar i;
240 1
241 1 type=Device_request.bmrequesttype;
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 5
242 1 req=Device_request.brequest;
243 1
244 1 Printn(req);
245 1 if(req==6) //如果设备请求为Get_Descriptor
246 1 {
247 2 //Prints("gd\t");
248 2 if(Device_request.wvalue==1) //如果要求获取的是设备描述符
249 2 {
250 3 transp=&Descriptors.Device_descriptor; //*transp指向设备描述符开头
*** WARNING C182 IN LINE 250 OF MAINUSB.C: pointer to different objects
251 3 //Flag|=Trans_flag; //传输标志置1,表示当前处于传输状态
252 3 //translen=sizeof(struct DEVICE_DESCRIPTOR);
253 3 //Printn(translen);
254 3 Writeep(1,16,transp);
255 3 //transp+=16;
256 3 //translen-=16;
257 3 translen=0;
258 3 }
259 2 }
260 1 else if(req==5) //如果设备请求为Set_address
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -