?? main.lst
字號:
C51 COMPILER V7.50 MAIN 03/07/2006 08:28:21 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND
line 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 "D12CI.h"
17 #include "D12HAL.h"
18 #include "Descriptor.h"
19 #include "Chap_9.h"
20 #include "D12Driver.h"
21 #include "string.h"
22
23
24 /***********************************************************
25 主函數 Main Function
26 ************************************************************/
27
28 #define CMD_RECEIVE 0x01 /* 接收命令 */
29 #define CMD_TRANSMIT 0x02 /* 發送命令 */
30 #define CMD_STOP 0x03 /* 停止命令 */
31 #define BUFFER_IN_XDATA /* 定義數據緩沖區在外部ram */
32
33 #ifdef BUFFER_IN_XDATA
34 INT8U xdata RecBuf[1024]; /* 緩沖區 */
35 #endif
36
37 #ifdef BUFFER_IN_IDATA
INT8U idata RecBuf[128]; /* 緩沖區 */
#endif
40
41 INT8U idata EP2_tx; /* 端點2發送中斷標志 */
42 INT8U idata Rcv128Bytes; /* 端點收到128字節標志位 */
43 INT8U idata TxEnable; /* 發送使能 */
44 INT8U ack; /* 應答 */
45 INT8U command,i,k;
46 INT8U num_Of_64len; /* 長度為64字節的包數 */
47 INT8U num_of_less64len; /* 長度小于64字節的包長度 */
48 INT16 offset; /* 偏移量 */
49
50 extern INT8U D12_WriteEndpoint(INT8U endp, INT8U len, INT8U * buf);
51 void CmdServe(void);
52 void RxServe(void);
53 void TxServe(void);
54 sfr AUXR = 0x8E; /* 只用于TKS668 仿真器 */
C51 COMPILER V7.50 MAIN 03/07/2006 08:28:21 PAGE 2
55 sbit led0 = P1^2;
56 sbit led1 = P1^3;
57
58 /****************************************************************************
59 ** 函數名稱: void Init_Interrupt(void)
60 ** 功能描述: 初始化MCU相關中斷
61 *****************************************************************************/
62 void Init_Interrupt(void)
63 {
64 1 EX0 = 1; /* 開外部中斷0 */
65 1 PX0 = 0; /* 設置外部中斷0中斷優先級 */
66 1 EA = 1; /* 開80C51總中斷 */
67 1
68 1 AUXR = 0; /* 使能668芯片內部xdata */
69 1 }
70
71 /****************************************************************************
72 ** 函數名稱: main()
73 ** 功能描述: 主函數
74 *****************************************************************************/
75 main()
76 {
77 1 if (Init_D12()!=0) /* 初始化D12 */
78 1 return; /* 如果初始化不成功,返回 */
79 1
80 1 Init_Interrupt(); /* 初始化D12以后,才能使能相關中斷 */
81 1
82 1 /* user code */
83 1 TxEnable = 1;
84 1
85 1 while(1)
86 1 {
87 2 usbserve(); /* 處理USB事件 */
88 2
89 2 if (bEPPflags.bits.ep1_rxdone == 1) /* 端點一接收到命令處理*/
90 2 {
91 3 DISABLE();
92 3 CmdServe();
93 3 bEPPflags.bits.ep1_rxdone = 0; /* 清空端點2收到數據標志 */
94 3 ENABLE();
95 3 }
96 2
97 2 if (bEPPflags.bits.ep2_rxdone == 1)
98 2 {
99 3 DISABLE(); /* 從端點2收到數據 */
100 3 RxServe(); /* 數據處理 */
101 3 bEPPflags.bits.ep2_rxdone = 0; /* 清空端點2收到數據標志 */
102 3 ENABLE();
103 3 }
104 2
105 2 if ((EP2_tx == 1)&&TxEnable)
106 2 {
107 3 DISABLE(); /* 從端點2發送數據 */
108 3 EP2_tx = 0; /* 清空端點2發送數據標志 */
109 3 TxServe(); /* 數據處理 */
110 3 ENABLE();
111 3 }
112 2
113 2 /* Add your code here */
114 2
115 2
116 2 }
C51 COMPILER V7.50 MAIN 03/07/2006 08:28:21 PAGE 3
117 1
118 1 }
119 /****************************************************************************
120 ** 函數名稱: void CmdServe(void)
121 ** 功能描述: 執行上位機命令
122 *****************************************************************************/
123 void CmdServe(void)
124 {
125 1 INT16U len;
126 1
127 1 command = GenEpBuf[0]; // 命令字
128 1
129 1 if(command == CMD_STOP)
130 1 {
131 2 offset = 0;
132 2 num_Of_64len = 0;
133 2 num_of_less64len = 0;
134 2 return;
135 2 }
136 1 else
137 1 {
138 2 offset = (INT16U)(GenEpBuf[1] << 8) + GenEpBuf[2]; // 接收/發送 緩沖區地址
139 2 len =(INT16U)(GenEpBuf[3] << 8) + GenEpBuf[4];
140 2 num_Of_64len = len / EP2_RX_FIFO_SIZE; // 計算64字節整數包數目
141 2 num_of_less64len = len % EP2_RX_FIFO_SIZE; // 計算剩余字節數
142 2
143 2 if ((command == CMD_TRANSMIT)&&TxEnable) // 填充FIFO
144 2 TxServe();
145 2 }
146 1
147 1 }
148 /****************************************************************************
149 ** 函數名稱: void TxServe(void)
150 ** 功能描述: 發送數據到PC機
151 *****************************************************************************/
152 void TxServe(void)
153 {
154 1 if(command == CMD_TRANSMIT)
155 1 {
156 2 if(num_Of_64len!=0) // 發送64字節的整數包
157 2 {
158 3 DISABLE();
159 3 D12_WriteEndpoint(5,EP2_TX_FIFO_SIZE,RecBuf + offset); // 寫發送緩沖區
160 3 ENABLE();
161 3 offset += EP2_TX_FIFO_SIZE;
162 3 num_Of_64len --;
163 3 }
164 2
165 2 else if(num_of_less64len!=0)
166 2 {
167 3 DISABLE();
168 3 D12_WriteEndpoint(5,num_of_less64len,RecBuf + offset);
169 3 ENABLE();
170 3 num_of_less64len = 0;
171 3 }
172 2 }
173 1 }
174 /****************************************************************************
175 ** 函數名稱: void RxServe(void)
176 ** 功能描述: 指示接收狀態,發送應答字。
177 *****************************************************************************/
178 void RxServe(void)
C51 COMPILER V7.50 MAIN 03/07/2006 08:28:21 PAGE 4
179 {
180 1 if(command == CMD_RECEIVE)
181 1 {
182 2 if (Rcv128Bytes == 1) // 如果雙緩沖區中收到數據
183 2 led0 = 0;
184 2 else // 只有一個緩沖區中收到數據
185 2 led1 ^= 1;
186 2
187 2 if ((num_Of_64len==0)&&(num_of_less64len==0))
188 2 {
189 3 ack = 0x01;
190 3 DISABLE();
191 3 D12_WriteEndpoint(3,1,&ack); // 應答PC機:我已收到你發來的數據!
192 3 ENABLE();
193 3 offset = 0;
194 3 led0 = 1;
195 3 led1 = 1;
196 3 }
197 2 }
198 1 }
199
200
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 311 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1024 ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = 3 ----
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 + -