📄 main.lst
字号:
C51 COMPILER V8.18 MAIN 08/02/2010 19:52:50 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************
2 FileName: Main.c
3 Description: Main protocol process
4 Date: 2007 09 21
5 ************************************************************************/
6 #include "Main.h"
7 #include "rtl8019.h"
8 #include "ip.h"
9 /************************************************************************/
10 bit MS10_Flag; // 10MS到时标志位,也就是TIMER0的中断标志位
11 bit gbRs232End; /* 打印完毕 */
12 bit DelayMSFlag; /* 延时程序开始 */
13 UWORK8 LinkFlag; // 连接标志位
14
15 data UWORK16 Ms10FlagCount; // 定时器记数器
16 data UWORK16 DelayMsCount; /* 10ms计数器,软件延时中用 */
17 xdata UWORK32 gulPassWord;
18 Setup_Parameter NetParameter;
19 code UWORK16 BaudRate[12] = {0xfb80, 0xfdc0, 0xfee0, 0xff40, 0xff70, 0xffa0, 0xffb8, 0xffd0, 0xffdc, 0xffe
-8, 0xffee, 0xfff4};
20
21 code UWORK8 test_buf[12] = {0x55};
22 code UWORK8 StartFlag_buf[FLASH_FLAG_NUM] = {0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa}; //开机初
-始化
23 code UWORK8 StartParameter_buf[NET_PARA_LEN] =
24 {
25 0x00,
26 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, //上位机设置进的引导码
- 默认八组:0x55 0xAA
27 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //上位机设置进的标志码
- 默认十六个:0xff
28 0x05, // 转换器名字长度 5
29 0x68,0x6f,0x73,0x74,0x31,'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0', //转换器名字 host1
30 0x0, // ip模式 */
31 0x00,0xab,0xcc,0x65,0xde,0xaa, // MAC */
32 0xc0,0xa8,0x01,0x6f, // 本地IP 192.168.0.111
33 0xff,0xff,0xff,0x00, // 掩码 255.255.255.0 */
34 0xc0,0xa8,0x01,0x01, // 默认网关192.168.1.1
35 0xc0,0xa8,0x01,0x64, // 远程IP地址192.168.0.95
-
36 0xc3,0x50, // 本地端口地址50000
37 0xc3,0x50, // 远程端口号50000
38
39 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 保留
40 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
41 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
42 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
43 0x03, // 选择 3 波特率,9600 */
44 0x31,0x30,0x30,0x2e,0x31,0x30,0x30, //版本号:100.100
45 };
46
47 code UWORK16 BaudRate_buf[8] = {BAUND_RATE_1200, BAUND_RATE_2400, //定时时间
48 BAUND_RATE_4800, BAUND_RATE_9600,BAUND_RATE_19200,
49 BAUND_RATE_38400,BAUND_RATE_57600,BAUND_RATE_115200};
50
C51 COMPILER V8.18 MAIN 08/02/2010 19:52:50 PAGE 2
51 void ResetUart(void)
52 {
53 1 UWORK8 ucTemp;
54 1 for(ucTemp = 0; ucTemp < 30; ucTemp++)
55 1 {
56 2 Delay(10);
57 2 Led = ~Led;
58 2 WDTCONTR |= CLR_WDT; //复位看门狗定时器
59 2 }
60 1
61 1 REN = TRUE; // 串口接收使能
62 1 ES = TRUE; // 使能串口中断
63 1 RcvDelayCount = 0;
64 1 RcvCount = 0;
65 1 Rcv_ok = FALSE;
66 1 Rcv_flag = FALSE;
67 1 for(ucTemp = 0; ucTemp < 10; ucTemp++)
68 1 {
69 2 Delay(10);
70 2 Led = ~Led;
71 2 WDTCONTR |= CLR_WDT; //复位看门狗定时器
72 2 }
73 1 }
74 /************************************************************************/
75 // 主程序
76 /************************************************************************/
77 void main(void)
78 {
79 1 UWORK8 ucTemp;
80 1 /* 上电复位运行灯和告警灯快闪8下 */
81 1 for(ucTemp = 0; ucTemp < 30; ucTemp++)
82 1 {
83 2 Delay(10);
84 2 Led = ~Led;
85 2 }
86 1
87 1 ucTemp = sizeof(Setup_Parameter);
88 1 Led = OFF; //关掉LED
89 1 InitCPU(); //初始化CPU
90 1 FlashCheck(); //检测Flash数据
91 1 InitSerial(); // 初始化串口
92 1 InitPara(); // 初始化网口,串口参数
93 1 if(ERROR == RTL8019asInit()) ResetSystem(); // 初始化以太网芯片
94 1 if(ERROR == RTL8019asCheck()) ResetSystem(); // 以太网芯片环回自测
95 1 WDTCONTR |= CLR_WDT; //复位看门狗定时器
96 1 StopTimer(13);
97 1 ucTemp = 0;
98 1 LinkFlag = 0;
99 1 Rs485En = FALSE; //485通信使能
100 1 ResetUart();
101 1
102 1 while(1)
103 1 {
104 2 // ................. 读网口数据,劈以太网帧 .............................
105 2 RcvEthernetData();
106 2
107 2 if(OK == If8019SendReady()) // 以太网发送准备好
108 2 {
109 3 if(0 != Rcv_ok) // 串口接收队列不为空
110 3 { // 将串口接收到的数据发往数据库
111 4 WDTCONTR |= CLR_WDT; //复位看门狗定时器
112 4 UdpSend(&Rcv_buf[0],RcvLen);
C51 COMPILER V8.18 MAIN 08/02/2010 19:52:50 PAGE 3
113 4 Rcv_ok = 0;
114 4 }
115 3 }
116 2
117 2 // ............................. 软件定时器处理 .............................
118 2
119 2 if(MS10_Flag) //每10MS处理1次
120 2 {
121 3 SystemTimerProc(); // 处理相对定时器中的事务
122 3 }
123 2 }
124 1 }
125 /*********************************************************************
126 函数名: void InitCPU(void)
127 功能: 初始化CPU
128 输入: None
129 输出: None
130 返回: None
131 日期: 2004/02/04
132 *********************************************************************/
133 void InitCPU(void)
134 {
135 1 // CPU内核设置
136 1 AUXR |= 0x02; //禁止内部XRAM // 禁止内部XRAM
137 1 AUXR |= 0x01; //禁止ALE信号
138 1
139 1 TMOD=0x11; //定时器0与1工作模式1
140 1 TL0 = TIMER0_LOW_BYTE; // 定时5ms
141 1 TH0 = TIMER0_HIGH_BYTE;
142 1 TL1 = TIMER1_LOW_BYTE; // 定时1ms
143 1 TH1 = TIMER1_HIGH_BYTE;
144 1 TF0 = FALSE; //清定时器0中断标志
145 1 TF1 = FALSE; //清定时器1中断
146 1
147 1 // 串口0初始化, 定时器2用作串口0波特率发生器
148 1 TMOD|=0x20;
149 1 SCON=0x50; // 模式1,8位可变波特率,无奇偶校验
150 1 PCON |= SMOD; //波特率加倍
151 1 T2CON = 0x34; //使用T2作为波特率
152 1 TL2 = TIMER2_LOW_BYTE; // 定时器低8位
153 1 TH2 = TIMER2_HIGH_BYTE; // 定时器高8位
154 1 RCAP2L = TIMER2_LOW_BYTE; // 串口0重载计数器低8位
155 1 RCAP2H = TIMER2_HIGH_BYTE; // 串口0重载计数器高8位
156 1 TR2 = TRUE; //启动timer2 timer2开始计数
157 1 RI = FALSE; //清除串口接收中断标志
158 1 TI = FALSE; // 清除串口发送中断标志
159 1 REN = FALSE; // 串口接收使能
160 1 ES = FALSE; // 使能串口中断
161 1 //中断0初始化
162 1 IT0 = FALSE; //外部中断0低电平触发
163 1 EX0=TRUE;
164 1 //优先级设置
165 1 IP = 0x11; //串口优先级最高,其次是中断0,其次是定时器1,最后是定时器0
166 1 IPH = 0x18;
167 1
168 1 TR0 = TRUE; //启动timer0 /* timer0开始计数 */
169 1 ET0 = TRUE; // 使能timer0中断
170 1 ET1 = TRUE; //使能timer1中断
171 1 EA = TRUE; //打开中断总开关 /* 初始化完数据后才能打开中断,中断里面会对
-许多全局变量进行操作 */
172 1
173 1 // 看门狗初始化
C51 COMPILER V8.18 MAIN 08/02/2010 19:52:50 PAGE 4
174 1 WDTCONTR |= 0x07; // 模式7,看门狗定时1.26S
175 1 WDTCONTR |= EN_WDT; //使能看门狗中断
176 1 WDTCONTR |= CLR_WDT; //复位看门狗定时器 复位,使能看门狗计数器
177 1
178 1 }
179
180 /*********************************************************************
181 函数名: void FlashInit(void)
182 功能: 初始化Flash数据
183 输入: ucType(0:全部初始化,包括标志位 1:全部初始化 2:初始化UART 3:初始化net)
184 输出: None
185 返回: none
186 日期: 2004/08/08
187 *********************************************************************/
188 void FlashInit(void)
189 {
190 1 bit bFlag = FALSE;
191 1 if(OK != FlashWriteData(FLASH_INIT_FLAG_ADDR,StartFlag_buf,FLASH_FLAG_NUM)) bFlag = TRUE; //初始化
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -