main.lst
来自「韦根26通讯协议转串口的协议」· LST 代码 · 共 237 行
LST
237 行
C51 COMPILER V8.02 MAIN 01/21/2008 15:09:35 PAGE 1
C51 COMPILER V8.02, 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 #include <reg52.h>
2 #include <string.h>
3 #include <intrins.h>
4 /////////////////////////////////////////////////////////////////////
5 //89C52特殊寄存器定义
6 /////////////////////////////////////////////////////////////////////
7 sfr WDT_CONTR = 0xe1;
8 sfr16 RCAP2LH = 0xCA;
9 sfr16 T2LH = 0xCC;
10 sfr AUXR = 0X8E;
11 /////////////////////////////////////////////////////////////////////
12 //端口定义
13 /////////////////////////////////////////////////////////////////////
14 sbit led = P0^0;
15 sbit wgdata1 = P1^2;
16 sbit wgdata_1 = P1^3;
17 sbit wgdata_0 = P1^4;
18 sbit b_xiepoid = P1^5;
19 sbit b_scom = P1^6;
20 sbit b_wgcode = P1^7;
21 sbit b_rs485 = P3^2;
22 bit b_rewg ;
23 bit b_sendscom;
24 bit b_norec;
25
26 unsigned char idata txwgdata;
27 unsigned char idata wgnumber;
28 unsigned char idata SendBuf[15];
29 unsigned char idata Sendnum;
30 unsigned char idata scomdata;
31 unsigned long bdata wgdata26;
32
33 /////////////////////////////////////////////////////////////////////
34 //延时常数及波特率定义
35 /////////////////////////////////////////////////////////////////////
36 #define OSC_FREQ 11059200L
37
38 #define RCAP2_50us 65536L - OSC_FREQ/240417L
39 #define RCAP2_1ms 65536L - OSC_FREQ/12021L
40 #define RCAP2_10ms 65536L - OSC_FREQ/1200L
41
42 #define BOUND19200 256 - 3
43 #define BOUND9600 256 - 6
44 /////////////////////////////////////////////////////////////////////
45 //函数原型
46 /////////////////////////////////////////////////////////////////////
47 void InitializeSystem();
-
48 void DelayMs(unsigned int j);
49 void Delay_50us(unsigned char j);
50 unsigned char getascii(unsigned char input);
51
52 ///++++++++++++++
53
54 void main( )
C51 COMPILER V8.02 MAIN 01/21/2008 15:09:35 PAGE 2
55 {
56 1 InitializeSystem( );
57 1 while(1)
58 1 {
59 2 WDT_CONTR = 0x3f;
60 2 if(b_rewg)
61 2 {
62 3 DelayMs(30);
63 3 if(wgnumber != 0)
64 3 {
65 4 wgdata26 = 0;
66 4 wgnumber = 0;
67 4 b_rewg = 0;
68 4 }
69 3 }
70 2
71 2 if(b_sendscom)
72 2 {
73 3 b_sendscom = 0;
74 3 if(b_scom)
75 3 {
76 4 b_sendscom = 0;
77 4 TI = 1;
78 4 }
79 3
80 3 else
81 3 {
82 4 b_norec = 0;
83 4 _nop_();
84 4 _nop_();
85 4 _nop_();
86 4 if(!b_norec)
87 4 {
88 5 b_rs485 = 1;
89 5 TI = 1;
90 5 }
91 4 }
92 3 }
93 2 }
94 1 }//main
95
96
97 void ex_int (void) interrupt 2 using 2
98 {
99 1
100 1 //unsigned char chkdata = 0,n;
101 1 if(wgnumber == 0)
102 1 {
103 2 b_rewg = 1;
104 2 }
105 1 if(wgdata1==0) wgdata26 |= 0x00000001;
106 1 else wgdata26 &= 0xFFFFFFFE;
107 1 wgdata26 <<= 1;
108 1 wgnumber = wgnumber+1;
109 1
110 1 if(wgnumber > 20)
111 1 {
112 2
113 2 SendBuf[0] = wgdata26 >> 1;
114 2 SendBuf[1] = wgdata26 >> 9;
115 2 SendBuf[2] = wgdata26 >> 17;
116 2
C51 COMPILER V8.02 MAIN 01/21/2008 15:09:35 PAGE 3
117 2 Sendnum = 3;
118 2
119 2 wgdata26 = 0;
120 2 wgnumber = 0;
121 2 b_rewg = 0;
122 2 b_sendscom = 1;
123 2 }
124 1 }
125
126 //////////////////////////////////////////////////////////////////////
127 ///系统初始化
128 /////////////////////////////////////////////////////////////////////
129 void InitializeSystem()
130 {
131 1 TMOD &= 0x0F;
132 1 TMOD |= 0x21;
133 1 TCON |= 0x04;
134 1 PCON |= 0x80;
135 1 SCON = 0x50;
136 1 P0 = P1 = P2 = P3 = 0xFF;
137 1 TH1 = TL1 = BOUND9600;
138 1 TR1=1;
139 1 IE |= 0x94;
140 1 //AUXR = 0x02;
141 1 wgdata26 = 0;
142 1 wgnumber = 0;
143 1 wgdata_0 = 0;
144 1 wgdata_1 = 0;
145 1 b_rewg = 0;
146 1 b_rs485 = 0;
147 1 b_norec = 0;
148 1 b_sendscom = 0;
149 1 WDT_CONTR = 0x3f;
150 1 }
151
152 /////////////////////////////////////////////////////////////////////
153 //串行中断,接收上位机数据
154 /////////////////////////////////////////////////////////////////////
155 void seri_int (void) interrupt 4 using 3
156 {
157 1 unsigned char i;
158 1 if (RI)
159 1 {
160 2 RI = 0;
161 2 b_norec = 1;
162 2 }
163 1 if (TI)
164 1 {
165 2 TI = 0;
166 2 for (i=0; i<Sendnum; i++)
167 2 {
168 3 TI = 0;
169 3 SBUF = SendBuf[i];
170 3 while (!TI);
171 3 }
172 2 b_rs485 = 0;
173 2 TI = 0;
174 2 ES = 1;
175 2 }
176 1 }
177
178 /////////////////////////////////////////////////////////////////////
C51 COMPILER V8.02 MAIN 01/21/2008 15:09:35 PAGE 4
179 //用T2做延时子程序
180 /////////////////////////////////////////////////////////////////////
181 void DelayMs(unsigned int _MS)
182 {
183 1 RCAP2LH = RCAP2_1ms;
184 1 T2LH = RCAP2_1ms;
185 1
186 1 ET2 = 0; // Disable timer2 interrupt
187 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
188 1 TR2 = 1;
189 1 while (_MS--)
190 1 { while (!TF2);TF2 = 0; }
191 1 TR2 = 0;
192 1 }
193 /*
194 void Delay_50us(unsigned char _50us)
195 {
196 RCAP2LH = RCAP2_50us;
197 T2LH = RCAP2_50us;
198
199 ET2 = 0; // Disable timer2 interrupt
200 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
201 while (_50us--)
202 { while (!TF2);TF2 = 0; }
203 TR2 = 0;
204 }
205 */
206
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 371 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = 19 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?