📄 mainloop.lst
字号:
C51 COMPILER V7.50 MAINLOOP 03/17/2005 14:08:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MainLoop.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE MainLoop.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 //*************************************************************************
3 //
4 // 信息实验室
5 //
6 // File Name: mainloop.C
7 // Revision: 1.2(2004-11-27)
8 // Author: Chen Gen Chao (Lovelorn)
9 // Use library: USB51S.LIB
10 // Note: USB51S.LIB不带DMA控制功能
11 //*************************************************************************
12 */
13
14 /*
15 //*************************************************************************
16 //
17 // ZLGMCU
18 // www.zlgmcu.com
19 // File Name: mainloop.C
20 // Revision: 0.4(2002-07-08)
21 // Author: Liu Ying Bin
22 // Use library: USB51S.LIB
23 // Note: USB51S.LIB不带DMA控制功能
24 //*************************************************************************
25 */
26
27
28 #include <stdio.h>
29 #include <string.h>
30 #include <reg51.h> /* special function register declarations */
31 #include "mainloop.h"
32 #include "isr.h"
33 #include "protozlg.h"
34 #include <rtx51tny.h>
35
36 /*
37 //*************************************************************************
38 // Public static data
39 //*************************************************************************
40 */
41
42 extern EPPFLAGS bEPPflags;
43 extern unsigned char idata GenEpBuf[];
44 extern unsigned char idata EpBuf[];
45 extern unsigned int data d12_addr;
46
47 extern unsigned int data D12_DATA;
48 extern unsigned int data D12_COMMAND;
49
50 unsigned char idata DataBuf[16];
51 unsigned char idata temp[10];
52 unsigned int uiADResult=0;//version 1.4
53
54
55 sfr CKCON = 0x8F;//87C52x2用
C51 COMPILER V7.50 MAINLOOP 03/17/2005 14:08:54 PAGE 2
56 sbit clksel = P2^0;
57
58 //D12中断服务
59 usb_isr() interrupt 0
60 {
61 1 DISABLE;
62 1 fn_usb_isr();//调用D12中断服务子程序
63 1 ENABLE;
64 1 }
65
66
67
68 void SysInit(void) _task_ 0
69 {
70 1 P0 = 0xFF;//初始化I/O口
71 1 P1 = 0xFF;
72 1 P2 = 0xFF;
73 1 P3 = 0xFF;
74 1
75 1 // CKCON = 0x00;
76 1 CKCON = 0x00;
77 1
78 1 // if(clksel == 1)
79 1 // CKCON = CKCON | 0x01;
80 1
81 1 D12_DATA = 0xff02; //定义数据地址
82 1 D12_COMMAND = 0xff03; //定义命令地址
83 1
84 1
85 1 MCU_D12CS = 0x0;
86 1 D12SUSPD = 0x0;
87 1
88 1 IT0 = 0;//初始化中断
89 1 EX0 = 1;
90 1 PX0 = 0;
91 1 EA = 1;
92 1
93 1 MCU_D12CS = 0x1;
94 1 MCU_D12CS = 0x0;
95 1 D12_SetDMA(0x0);
96 1 bEPPflags.value = 0;
97 1
98 1 reconnect_USB();//联接USB总线
99 1 // start operation system
100 1 MAX1241Init();
101 1 os_create_task(1);
102 1 os_create_task(2);
103 1 os_create_task(3);
104 1 os_send_signal(3);
105 1 os_delete_task(0);
106 1
107 1
108 1 }
109
110 void UsbServe1(void) _task_ 1
111 {
112 1 while(1)
113 1 {
114 2 usbserve();//USB服务数据处理
115 2 }
116 1 }
117
C51 COMPILER V7.50 MAINLOOP 03/17/2005 14:08:54 PAGE 3
118 void DataDeliver(void) _task_ 2
119 {
120 1 while(1)
121 1 {
122 2 os_wait(K_SIG,0,0);
123 2 if(bEPPflags.bits.configuration)
124 2 {
125 3 DISABLE;//接收到主机发来的LED控制信息
126 3 bEPPflags.bits.ep1_rxdone = 0;
127 3 ENABLE;
128 3 ////////////// the following are added by lovelorn/////////////////
129 3 /*switch(memcmp(GenEpBuf,"GetData",7))//判断主机发来的命令是否正确
130 3 {
131 3 case(0):
132 3 memcpy(GenEpBuf,"DataReady",9);//命令正确,回复"正确"应答,并通过Endpoint2发送数据
133 3 D12_WriteEndpoint(3,9,GenEpBuf);
134 3 DataProcess(DataBuf);
135 3 D12_WriteEndpoint(5,16,DataBuf);
136 3 break;
137 3 case(1):
138 3 memcpy(GenEpBuf,"Error",5);//命令错误,回复"错误"应答,不发送数据
139 3 D12_WriteEndpoint(3,5,GenEpBuf);
140 3 break;
141 3 default:
142 3 break;
143 3 }
144 3 */
145 3 memcpy(temp,GenEpBuf,10);
146 3 if(!memcmp(GenEpBuf,"GetData",7))
147 3 {
148 4 memcpy(GenEpBuf,"DataReady",9);//命令正确,回复"正确"应答,并通过Endpoint2发送数据
149 4 D12_WriteEndpoint(3,9,GenEpBuf);
150 4 DataProcess(DataBuf);
151 4 D12_WriteEndpoint(5,16,DataBuf);
152 4 os_send_signal(3);
153 4 continue;
154 4 }
155 3 memcpy(GenEpBuf,temp,10);
156 3 if(!memcmp(GenEpBuf,"LED1_ON",7))
157 3 {
158 4 memcpy(GenEpBuf,"LEDOK",5);
159 4 D12_WriteEndpoint(3,5,GenEpBuf);
160 4 MCU_LED1=0;
161 4 continue;
162 4 }
163 3 memcpy(GenEpBuf,temp,10);
164 3 if(!memcmp(GenEpBuf,"LED0_ON",7))
165 3 {
166 4 memcpy(GenEpBuf,"LEDOK",5);
167 4 D12_WriteEndpoint(3,5,GenEpBuf);
168 4 MCU_LED0=0;
169 4 continue;
170 4 }
171 3 memcpy(GenEpBuf,temp,10);
172 3 if(!memcmp(GenEpBuf,"LED0_OFF",8))
173 3 {
174 4 memcpy(GenEpBuf,"LEDOK",5);
175 4 D12_WriteEndpoint(3,5,GenEpBuf);
176 4 MCU_LED0=1;
177 4 continue;
178 4 }
179 3 memcpy(GenEpBuf,temp,10);
C51 COMPILER V7.50 MAINLOOP 03/17/2005 14:08:54 PAGE 4
180 3 if(!memcmp(GenEpBuf,"LED1_OFF",8))
181 3 {
182 4 memcpy(GenEpBuf,"LEDOK",5);
183 4 D12_WriteEndpoint(3,5,GenEpBuf);
184 4 MCU_LED1=1;
185 4 continue;
186 4 }
187 3 memcpy(GenEpBuf,"Error",5);//命令错误,回复"错误"应答,不发送数据
188 3 D12_WriteEndpoint(3,5,GenEpBuf);
189 3 }
190 2 }
191 1 }
192
193 void ADConvert(void) _task_ 3// A/D转换过程
194 { //version 1.4
195 1 unsigned char i=0;
196 1 while(1)
197 1 {
198 2 os_wait(K_SIG,0,0);
199 2 MAX1241DOUT=1;
200 2 MAX1241CS=0;
201 2 uiADResult=0;
202 2 MAX1241SCLK=0;
203 2 while(!MAX1241DOUT)
204 2 {
205 3 MCU_LED0=~MCU_LED0;
206 3 }
207 2 MAX1241SCLK=1;
208 2 MAX1241SCLK=0;//第一个肪冲无信号
209 2 for(i=0;i<12;i++)//获取A/D转换的12位串行数据
210 2 {
211 3 MAX1241SCLK=1;
212 3 uiADResult<<=1;
213 3 if(MAX1241DOUT)
214 3 uiADResult++;
215 3 MAX1241SCLK=0;
216 3 }
217 2 for(i=0;i<3;i++)//空脉冲,标准操作,参见datasheet
218 2 {
219 3 MAX1241SCLK=1;
220 3 MAX1241SCLK=0;
221 3 }
222 2 MAX1241CS=1;
223 2 DataBuf[2]=uiADResult%256;//将转换数据放入通道1寄存器
224 2 DataBuf[3]=uiADResult/256;
225 2 }
226 1 }
227 void DataProcess(unsigned char DataBuf[16])//对
228 {
229 1 unsigned char i;
230 1 unsigned char idata sum=0;
231 1 DataBuf[0]=0x55;//设置数据起始头
232 1 DataBuf[1]=0xAA;
233 1 for(i=1;i<4;i++) //测试用数据,正式版中该段数据由A/D产生
234 1 { //通道2 3 4数据由此产生,为伪数据,通道1由A/D产生
235 2 DataBuf[2*i+3]=0; //高地址放数据高八位,低地址放数据低八位
236 2 DataBuf[2*i+2]++;
237 2 }
238 1 for(i=2;i<15;i++)//校验和,校验和不包括数据起始头
239 1 {
240 2 sum+=DataBuf[i];
241 2 }
C51 COMPILER V7.50 MAINLOOP 03/17/2005 14:08:54 PAGE 5
242 1 DataBuf[15]=sum;
243 1 }
244
245 void MAX1241Init(void) //MAX1241各信号线的初始化,避免错误信号产生
246 { //version 1.4
247 1 MAX1241CS=1;
248 1 MAX1241SCLK=0;
249 1 MAX1241DOUT=1;
250 1 bEPPflags.bits.ADCdone=0;
251 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 849 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 4
IDATA SIZE = 26 1
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 + -