📄 main.lst
字号:
C51 COMPILER V6.12 MAIN 12/17/2004 12:03:21 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN E:\MCU\USB_FIRM\MAIN.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\MCU\USB_FIRM\MAIN.C DB SB OE
stmt level source
1 /**********************************************
2 USB固件编程
3
4 File Name: main.c
5 Final Date: 2004-07-10
6 Author: LHP
7 Note: 问题已经基本解决
8 ***********************************************/
9
10 #include <reg51.h>
11 #include "D12ci.h"
12 #include "chap_9.h"
13 #include <intrins.h>
14
15
16 sbit D12CS=P3^1;
17 sbit TXR=P3^3;
18 sbit DR1=P3^4;
19 sbit DR2=P3^5;
20 /*第一板
21 sbit OE1=P1^7;
22 sbit OE2=P1^6;
23 sbit SEL=P1^5;
24 sbit MR=P1^4;
25 sbit LDCW=P1^3;
26 sbit ENTX=P1^2;
27 sbit LD1=P1^1;
28 sbit LD2=P1^0;
29 */
30 //第二板
31 sbit OE2=P1^7;
32 sbit OE1=P1^6;
33 sbit SEL=P1^5;
34 sbit LD1=P1^4;
35 sbit LD2=P1^3;
36 sbit ENTX=P1^2;
37 sbit LDCW=P1^1;
38 sbit MR=P1^0;
39
40
41 extern unsigned char idata OutBuf[EP1_PACKET_SIZE];//用于PC机向3282传输要发送的数据
42 extern unsigned char idata ControlWord[2]; //用于PC机向3282发送控制字
43 unsigned char idata InBuf1[EP1_PACKET_SIZE]; //用于3282通道1向pc机发送数据
44 unsigned char idata InBuf2[EP2_PACKET_SIZE]; //用于3282通道2向PC机发送数据
45
46 extern EPPFLAGS bEPPflags;
47 extern CONTROL_XFER ControlData;
48 void reconnect_usb(void);
49 void disconnect_usb(void);
50 void connect_usb(void);
51 void setup_handler(void);
52 //void mytxr(void);
53 extern void myisr(void);
54
55 //重新连接到USB总线
C51 COMPILER V6.12 MAIN 12/17/2004 12:03:21 PAGE 2
56 void reconnect_usb(void)
57 {
58 1 unsigned long clk_cnt;
59 1 disconnect_usb();//断开usb连接
60 1 for(clk_cnt=0;clk_cnt<50000;clk_cnt++);//延时
61 1 connect_usb();//连接到USB
62 1 }
63
64 //断开USB总线
65 void disconnect_usb(void)
66 {
67 1 //初始化D12工作状态,断开soft connect连接
68 1 D12_SetMode(D12_NOLAZYCLOCK,D12_SETTOONE|D12_CLOCK_6M);
69 1 }
70
71 //连接USB总线
72 void connect_usb(void)
73 {
74 1 DISABLE;
75 1 bEPPflags.value=0;//清标志
76 1 ENABLE;
77 1 //初始化D12工作状态,接通soft connect
78 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT,D12_SETTOONE|D12_CLOCK_6M);
79 1 }
80
81 void usb_isr(void) interrupt 0
82 {
83 1 DISABLE;
84 1 myisr();
85 1 ENABLE;
86 1 }
87
88
89
90 void main(void)
91 {
92 1 unsigned char idata i;
93 1 SP=0x50;
94 1 P0=0xff;
95 1 P1=0xdb;
96 1 P2=0xff;
97 1 P3=0xff;
98 1
99 1 D12CS=0x0;
100 1 IT0=0;//设置INT0为低电平中断触发
101 1 EX0=1;//允许外部中断0
102 1 PX0=1;//设为高优先级
103 1 EA=1;//开总中断
104 1
105 1 D12CS=0x1;
106 1 MR=0;
107 1 _nop_();
108 1 _nop_();
109 1 MR=1;
110 1
111 1 LDCW=1;
112 1 P2=0x00;
113 1 P0=0x20;
114 1 LDCW=0;
115 1 _nop_();
116 1 _nop_();
117 1 LDCW=1;
C51 COMPILER V6.12 MAIN 12/17/2004 12:03:21 PAGE 3
118 1
119 1 D12CS=0x0;
120 1 bEPPflags.value=0;
121 1 reconnect_usb();
122 1
123 1 while(1)
124 1 {
125 2 if(bEPPflags.bits.setup_packet)
126 2 {
127 3 DISABLE;
128 3 bEPPflags.bits.setup_packet=0;
129 3 ENABLE;
130 3 setup_handler();
131 3 }
132 2
133 2 if(bEPPflags.bits.ep1_rxdone)//?????????????????此处是否应该加入清除标志的语句
134 2 {
135 3 DISABLE;
136 3 bEPPflags.bits.ep1_rxdone=0;
137 3 ENABLE;
138 3 /*
139 3 D12CS=0x1;
140 3
141 3 LDCW=1;
142 3 P0=ControlWord[0];
143 3 P2=ControlWord[1];
144 3 P0=0x20;
145 3 P2=0x00;
146 3 LDCW=0; */
147 3 // _nop_();
148 3 // _nop_();
149 3 // LDCW=1;
150 3
151 3 // D12CS=0x0;
152 3
153 3 /*
154 3 while(TXR!=1);
155 3 D12CS=1;
156 3 P0=0xff;
157 3 P2=0xff;
158 3 ENTX=0;
159 3
160 3 P0=OutBuf[0];
161 3 P2=OutBuf[1];
162 3 LD1=0;
163 3 LD1=1;
164 3
165 3 P0=OutBuf[2];
166 3 P2=OutBuf[3];
167 3 LD2=0;
168 3 LD2=1;
169 3
170 3 _nop_();
171 3 _nop_();
172 3 ENTX=1;
173 3 // _nop_();
174 3 // _nop_();
175 3 while(TXR!=1);
176 3
177 3 ENTX=0; */
178 3 }
179 2 //发送控制字
C51 COMPILER V6.12 MAIN 12/17/2004 12:03:21 PAGE 4
180 2 //if(TXR && bEPPflags.bits.ep2_rxdone)
181 2 //{
182 2 if(bEPPflags.bits.ep2_rxdone)
183 2 {
184 3 DISABLE;
185 3 bEPPflags.bits.ep2_rxdone=0;
186 3 ENABLE;
187 3
188 3 while(!TXR);
189 3 D12CS=1;
190 3 //P0=0xff;
191 3 //P2=0xff;
192 3 ENTX=0;
193 3
194 3 P0=OutBuf[0];
195 3 P2=OutBuf[1];
196 3 LD1=0;
197 3 LD1=1;
198 3
199 3 P0=OutBuf[2];
200 3 P2=OutBuf[3];
201 3 LD2=0;
202 3 LD2=1;
203 3
204 3 //_nop_();
205 3 // _nop_();
206 3 ENTX=1;
207 3
208 3 for(i=250;i>0;i--);
209 3 //_nop_():
210 3 //_nop_();
211 3 //_nop_();
212 3 //while(TXR!=1);
213 3
214 3 //ENTX=0;
215 3 D12CS=0x0;
216 3 // P1=0xdb;
217 3
218 3 // D12CS=0x1;
219 3 // _nop_();
220 3 // MR=0;
221 3 // _nop_();
222 3 // _nop_();
223 3 // MR=1;
224 3
225 3 // LDCW=1;
226 3 // P0=ControlWord[0];
227 3 // P2=ControlWord[1];
228 3 //P0=0x00;
229 3 //P2=0x20;
230 3 // LDCW=0;
231 3 // _nop_();
232 3 // _nop_();
233 3 // LDCW=1;
234 3
235 3 // D12CS=0x0;
236 3
237 3 }
238 2 //}
239 2 //接收通道1
240 2 if(DR1==0)
241 2 {
C51 COMPILER V6.12 MAIN 12/17/2004 12:03:21 PAGE 5
242 3 D12CS=1;
243 3
244 3 OE1=1;
245 3 SEL=0;
246 3 P0=0xff;
247 3 P2=0xff;
248 3 OE1=0;
249 3 _nop_();
250 3 InBuf1[0]=P0;
251 3 InBuf1[1]=P2;
252 3
253 3 OE1=1;
254 3 SEL=1;
255 3 P0=0xff;
256 3 P2=0xff;
257 3 OE1=0;
258 3 _nop_();
259 3 InBuf1[2]=P0;
260 3 InBuf1[3]=P2;
261 3 OE1=1;
262 3
263 3 D12CS=0;
264 3 D12_WriteEndpoint(3,4,InBuf1);
265 3 }
266 2 //接收通道2
267 2 if(DR2==0)
268 2 {
269 3 D12CS=1;
270 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -