📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 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 LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //---------------------------------------------------------------------------
2 // 主控程序包括物理层初始化, CPU初始化,媒体访问控制,以太网传输等几部分
3 // 其中my_ipaddr = 0xC0A8000AL为本设备的IP地址对应不同的网络要求可对其进行修改
4 // MAC地址是CP2200出厂前是设置好的一般不需修改
5 // 此程序为通用TCP/IP协议对不同的MCU应用CP2200进行以太网通讯只需修改CPU初始化部分
6 // 及定时器配置部分及ADC部分就可以.
7 //---------------------------------------------------------------------------
8
9 #include <string.h>
10 #include "C8051f040.h"
11 #include "net.h"
12 #include "cp220x_reg.h"
13 #include "timer.h"
14 #include "analog.h"
15 #include "arp.h"
16 #include "tcp.h"
17 #include "http.h"
18 #include "ip.h"
19 MACADDRESS xdata MYMAC;
20
21
22 // Global variables
23 UINT volatile event_word;
24 char xdata text[20];
25 UCHAR idata debug;
26 UCHAR idata rcve_buf_allocated;
27 #define LINK_ERROR 0x20
28 char xdata inbuf1[1500] _at_ 1000;
29 char xdata outbuf1[1500] _at_ 2500;
30
31 // This sets my hardware address to 00:01:02:03:04:05
32 UCHAR xdata my_hwaddr[6] _at_ 4001;
33
34 // Hardware addr to send a broadcast
35 UCHAR code broadcast_hwaddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
36
37 // This sets my IP address to 192.168.0.10
38 ULONG code my_ipaddr = 0xC0A8000AL;
39
40 // This sets my subnet mask to 255.255.255.0
41 ULONG code my_subnet = 0xFFFFFF00L;
42
43
44 ULONG code gateway_ipaddr = 0L;
45
46 //--------------------------------------------------------------------------
47 // Initialize the memory management routines
48 // Initialize variables declared in main
49 //--------------------------------------------------------------------------
50
51 unsigned int Count1msInc;
52 unsigned char Count1ms,Count10ms,Count1s;
53 unsigned char TimeSecond,TimeMinute;
54 unsigned char PHY_Init(void);
55 void MAC_Init(void);
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 2
56 UCHAR xdata * rcve_frame(void);
57 void eth_rcve(UCHAR xdata * inbuf);
58 void MAC_Write(unsigned char mac_reg_offset, unsigned int mac_reg_data);
59 void MAC_SetAddress(MACADDRESS* pMAC);
60 void CP220x_Send( UCHAR xdata * outbuf, UINT len);
61
62 /***********************************************************************/
63 //初始化内存部分
64 /**********************************************************************/
65
66 void init_main(void)
67 {
68 1 // Start the memory pool for incoming and outgoing Ethernet
69 1 // frames at 1000, with length = 1500 bytes. Memory below 500
70 1 // is used for program variables
71 1 // init_mempool((void xdata *)1000, 1500);
72 1 memset(text, 0, sizeof(text));
73 1 event_word = 0;
74 1 rcve_buf_allocated = FALSE;
75 1 debug = FALSE;
76 1 }
77 /************************************************************************/
78 //初始化MCU端口部分 采用端口非复用的方式,将地址线与数据线分开
79 /***********************************************************************/
80 void PORT_Init (void)
81 {
82 1 char SFRPAGE_SAVE = SFRPAGE;
83 1 unsigned char i;
84 1 SFRPAGE = CONFIG_PAGE;
85 1 P4MDOUT = 0XFF;
86 1 P5MDOUT = 0XFF;
87 1 P6MDOUT = 0XFF;
88 1 P7MDOUT = 0XFF;
89 1 P3MDOUT |= 0X40;
90 1 XBR0 = 0x84;
91 1 XBR1 = 0x04;
92 1 XBR2 = 0x40;
93 1
94 1 for(i=0;i<200;i++);
95 1 SFRPAGE = EMI0_PAGE;
96 1 EMI0CF = 0xFB;
97 1 EMI0TC = 0xef;
98 1
99 1
100 1 EMI0CN = 0x20;
101 1
102 1 SFRPAGE = SFRPAGE_SAVE;
103 1 }
104
105 /***********************************************************************/
106 //设置定时器0
107 /**********************************************************************/
108 void Timer0_Init (void)
109 {
110 1 char SFRPAGE_SAVE = SFRPAGE;
111 1 SFRPAGE = TIMER01_PAGE;
112 1 CKCON|=0x8;
113 1 TMOD|=0x1;
114 1 Count10ms=10;
115 1 Count1s=0;
116 1 TR0 = 0;
117 1 TH0 = (-SYSCLK/1000) >> 8;
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 3
118 1 TL0 = -SYSCLK/1000;
119 1 TR0 = 1;
120 1 IE|= 0x2;
121 1 SFRPAGE = SFRPAGE_SAVE;
122 1 }
123 /**********************************************************************/
124 //选择系统时钟
125 /**********************************************************************/
126 void SYSCLK_Init (void)
127 {
128 1 int i;
129 1 char SFRPAGE_SAVE = SFRPAGE;
130 1
131 1 SFRPAGE = CONFIG_PAGE;
132 1 OSCXCN = 0x67;
133 1 for (i = 0; i < 3000; i++);
134 1 while ((OSCXCN & 0x80) == 0);
135 1 CLKSEL = 0x01;
136 1 SFRPAGE = SFRPAGE_SAVE;
137 1
138 1 }
139 /********************************************************************/
140 //定时器0中断 用于定时
141 /********************************************************************/
142 void Timer0_ISR (void) interrupt 1 //1ms
143 {
144 1 TH0 = (-SYSCLK/1000) >> 8;
145 1 TL0 = -SYSCLK/1000;
146 1 if (Count1ms) Count1ms--;
147 1 Count1msInc++;
148 1 if (Count10ms) Count10ms--;
149 1 else
150 1 {
151 2 Count10ms=10; //10ms
152 2 if (Count1s) Count1s--;
153 2 else
154 2 {
155 3 Count1s=100; //1s
156 3 TimeSecond++;
157 3 if (TimeSecond>=60)
158 3 {
159 4 TimeSecond=0; //1min
160 4 TimeMinute++;
161 4 if (TimeMinute==60) TimeMinute=0;
162 4 }
163 3 }
164 2 }
165 1 }
166
167 /*******************************************************************/
168 //延时程序
169 /*******************************************************************/
170 void Delay1ms(unsigned char T)
171 {
172 1 Count1ms=T;
173 1 while (Count1ms);
174 1 }
175
176 /********************************************************************/
177 //上位机与下位进行交互程序
178 /********************************************************************/
179 void LightONOFF(bit b)
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 4
180 {
181 1
182 1 }
*** WARNING C280 IN LINE 179 OF MAIN.C: 'b': unreferenced local variable
183
184 void CP220x_RST_Low(void);
185 //加延时
186 void CP220x_RST_High(void);
187 /*******************************************************************/
188
189 //主程序
190
191 /*******************************************************************/
192 void main (void)
193 {
194 1 UINT event_word_copy;
195 1 UCHAR xdata * inbuf;
196 1 unsigned char error_code;
197 1 // unsigned int num_bytes;
198 1
199 1 WDTCN = 0xDE; // 关看门狗定时器
200 1 WDTCN = 0xAD;
201 1
202 1
203 1 SYSCLK_Init (); // 初始化系统时钟
204 1 Timer0_Init();
205 1 PORT_Init (); // 初始化端口
206 1
207 1 init_timer2();
208 1 init_main();
209 1 init_tcp();
210 1 init_http();
211 1 EA=1;
212 1 init_adc();
213 1 init_arp();
214 1
215 1 CP220x_RST_Low();
216 1 Delay1ms(200);
217 1 Delay1ms(200);
218 1 Delay1ms(200);
219 1 Delay1ms(200);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -