📄 easyweb.lst
字号:
59 0x068F,
60 0x0695,
61 0x069B,
62 0x06A0,
63 0x06A6, // 15C
64 0x06AC,
65 0x06B2,
66 0x06B8,
67 0x06BD,
68 0x06C3, // 20C
69 0x06C9,
70 0x06CF,
71 0x06D5,
72 0x06DB,
73 0x06E0, // 25C
74 0x06E6,
75 0x06EC,
76 0x06F2,
77 0x06F8,
78 0x06FD, // 30C
79 0x0703,
80 0x0709,
81 0x070F,
82 0x0715,
83 0x071B, // 35C
84 0x0720,
85 0x0726,
86 0x072C,
87 0x0732,
88 0x0738, // 40C
89 0x073D,
90 0x0743,
91 0x0749,
92 0x074F,
93 0x0755, // 45C
94 0x0FFF // Too high
95 };
96 //------------------------------------------------------------------------------
97 // Local function prototypes
98 //------------------------------------------------------------------------------
99 static void InitOsc(void);
100 static void InitPorts(void);
101 static void InitADC12(void);
102 static void HTTPServer(void);
103 static void InsertDynamicValues(void);
104 static unsigned int GetAD7Val(void);
105 static unsigned int GetTempVal(void);
106 //------------------------------------------------------------------------------
\ In segment CODE, align 2
107 void main(void)
\ main:
108 {
109 InitOsc();
\ 000000 B012.... CALL #InitOsc
110 InitPorts();
\ 000004 B012.... CALL #InitPorts
111 InitADC12();
\ 000008 B012.... CALL #InitADC12
112
113 TCPLowLevelInit();
\ 00000C B012.... CALL #TCPLowLevelInit
114
115 __enable_interrupt(); // enable interrupts
\ 000010 32D2 EINT
116
117 /*
118 *(unsigned char *)RemoteIP = 24; // uncomment those lines to get the
119 *((unsigned char *)RemoteIP + 1) = 8; // quote of the day from a real
120 *((unsigned char *)RemoteIP + 2) = 69; // internet server! (gateway must be
121 *((unsigned char *)RemoteIP + 3) = 7; // set to your LAN-router)
122
123 TCPLocalPort = 2025;
124 TCPRemotePort = TCP_PORT_QOTD;
125
126 TCPActiveOpen();
127
128 while (SocketStatus & SOCK_ACTIVE) // read the quote from memory
129 { // by using the hardware-debugger
130 DoNetworkStuff();
131 }
132 */
133
134 HTTPStatus = 0; // clear HTTP-server's flag register
\ 000012 C243.... MOV.B #0x0, &HTTPStatus
135
136 TCPLocalPort = TCP_PORT_HTTP; // set port we want to listen to
\ 000016 B2405000.... MOV.W #0x50, &TCPLocalPort
137
138 while (1) // repeat forever
139 {
140 if (!(SocketStatus & SOCK_ACTIVE)) TCPPassiveOpen(); // listen for incoming TCP-connection
\ ??main_0:
\ 00001C D2B3.... BIT.B #0x1, &SocketStatus
\ 000020 022C JC ??main_1
\ 000022 B012.... CALL #TCPPassiveOpen
141 //DoNetworkStuff(); // handle network and easyWEB-stack
142 // events
143 HTTPServer();
\ ??main_1:
\ 000026 B012.... CALL #HTTPServer
\ 00002A F83F JMP ??main_0
144 }
145 }
146 //------------------------------------------------------------------------------
147 // This function implements a very simple dynamic HTTP-server.
148 // It waits until connected, then sends a HTTP-header and the
149 // HTML-code stored in memory. Before sending, it replaces
150 // some special strings with dynamic values.
151 // NOTE: For strings crossing page boundaries, replacing will
152 // not work. In this case, simply add some extra lines
153 // (e.g. CR and LFs) to the HTML-code.
154 //------------------------------------------------------------------------------
\ In segment CODE, align 2
155 static void HTTPServer(void)
\ HTTPServer:
156 {
157 if (SocketStatus & SOCK_CONNECTED) // check if somebody has connected to our TCP
\ 000000 E2B3.... BIT.B #0x2, &SocketStatus
\ 000004 6128 JNC ??HTTPServer_0
158 {
159 if (SocketStatus & SOCK_DATA_AVAILABLE) // check if remote TCP sent data
\ 000006 E2B2.... BIT.B #0x4, &SocketStatus
\ 00000A 0228 JNC ??HTTPServer_1
160 TCPReleaseRxBuffer(); // and throw it away
\ 00000C B012.... CALL #TCPReleaseRxBuffer
161
162 if (SocketStatus & SOCK_TX_BUF_RELEASED) // check if buffer is free for TX
\ ??HTTPServer_1:
\ 000010 F2B2.... BIT.B #0x8, &SocketStatus
\ 000014 5B28 JNC ??HTTPServer_2
163 {
164 if (!(HTTPStatus & HTTP_SEND_PAGE)) // init byte-counter and pointer to webside
\ 000016 D2B3.... BIT.B #0x1, &HTTPStatus
\ 00001A 062C JC ??HTTPServer_3
165 { // if called the 1st time
166 HTTPBytesToSend = sizeof(WebSide) - 1; // get HTML length, ignore trailing zero
\ 00001C B2409205.... MOV.W #0x592, &HTTPBytesToSend
167 PWebSide = (unsigned char *)WebSide; // pointer to HTML-code
\ 000022 B240........ MOV.W #WebSide, &PWebSide
168 }
169
170 if (HTTPBytesToSend > MAX_TCP_TX_DATA_SIZE) // transmit a segment of MAX_SIZE
\ ??HTTPServer_3:
\ 000028 B2900103.... CMP.W #0x301, &HTTPBytesToSend
\ 00002E 3228 JNC ??HTTPServer_4
171 {
172 if (!(HTTPStatus & HTTP_SEND_PAGE)) // 1st time, include HTTP-header
\ 000030 D2B3.... BIT.B #0x1, &HTTPStatus
\ 000034 182C JC ??HTTPServer_5
173 {
174 memcpy(TCP_TX_BUF, GetResponse, sizeof(GetResponse) - 1);
\ 000036 30122C00 PUSH.W #0x2c
\ 00003A 3E40.... MOV.W #GetResponse, R14
\ 00003E 3C40.... MOV.W #TxFrame1Mem + 54, R12
\ 000042 B012.... CALL #memcpy
175 memcpy(TCP_TX_BUF + sizeof(GetResponse) - 1, PWebSide,
176 MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1);
\ 000046 3012D402 PUSH.W #0x2d4
\ 00004A 1E42.... MOV.W &PWebSide, R14
\ 00004E 3C40.... MOV.W #TxFrame1Mem + 98, R12
\ 000052 B012.... CALL #memcpy
177 HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1;
\ 000056 B2502CFD.... ADD.W #0xfd2c, &HTTPBytesToSend
178 PWebSide += MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1;
\ 00005C B250D402.... ADD.W #0x2d4, &PWebSide
\ 000062 2152 ADD.W #0x4, SP
\ 000064 0F3C JMP ??HTTPServer_6
179 }
180 else
181 {
182 memcpy(TCP_TX_BUF, PWebSide, MAX_TCP_TX_DATA_SIZE);
\ ??HTTPServer_5:
\ 000066 30120003 PUSH.W #0x300
\ 00006A 1E42.... MOV.W &PWebSide, R14
\ 00006E 3C40.... MOV.W #TxFrame1Mem + 54, R12
\ 000072 B012.... CALL #memcpy
183 HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE;
\ 000076 B25000FD.... ADD.W #0xfd00, &HTTPBytesToSend
184 PWebSide += MAX_TCP_TX_DATA_SIZE;
\ 00007C B2500003.... ADD.W #0x300, &PWebSide
\ 000082 2153 ADD.W #0x2, SP
185 }
186
187 TCPTxDataCount = MAX_TCP_TX_DATA_SIZE; // bytes to xfer
\ ??HTTPServer_6:
\ 000084 B2400003.... MOV.W #0x300, &TCPTxDataCount
188 InsertDynamicValues(); // exchange some strings...
\ 00008A B012.... CALL #InsertDynamicValues
189 TCPTransmitTxBuffer(); // xfer buffer
\ 00008E B012.... CALL #TCPTransmitTxBuffer
\ 000092 173C JMP ??HTTPServer_7
190 }
191 else if (HTTPBytesToSend) // transmit leftover bytes
\ ??HTTPServer_4:
\ 000094 8293.... CMP.W #0x0, &HTTPBytesToSend
\ 000098 1424 JEQ ??HTTPServer_7
192 {
193 memcpy(TCP_TX_BUF, PWebSide, HTTPBytesToSend);
\ 00009A 1212.... PUSH.W &HTTPBytesToSend
\ 00009E 1E42.... MOV.W &PWebSide, R14
\ 0000A2 3C40.... MOV.W #TxFrame1Mem + 54, R12
\ 0000A6 B012.... CALL #memcpy
194 TCPTxDataCount = HTTPBytesToSend; // bytes to xfer
\ 0000AA 9242........ MOV.W &HTTPBytesToSend, &TCPTxDataCount
195 InsertDynamicValues(); // exchange some strings...
\ 0000B0 B012.... CALL #InsertDynamicValues
196 TCPTransmitTxBuffer(); // send last segment
\ 0000B4 B012.... CALL #TCPTransmitTxBuffer
197 TCPClose(); // and close connection
\ 0000B8 B012.... CALL #TCPClose
198 HTTPBytesToSend = 0; // all data sent
\ 0000BC 8243.... MOV.W #0x0, &HTTPBytesToSend
\ 0000C0 2153 ADD.W #0x2, SP
199 }
200
201 HTTPStatus |= HTTP_SEND_PAGE; // ok, 1st loop executed
\ ??HTTPServer_7:
\ 0000C2 D2D3.... BIS.B #0x1, &HTTPStatus
\ 0000C6 3041 RET
202 }
203 }
204 else
205 HTTPStatus &= ~HTTP_SEND_PAGE; // reset help-flag if not connected
\ ??HTTPServer_0:
\ 0000C8 D2C3.... BIC.B #0x1, &HTTPStatus
206 }
\ ??HTTPServer_2:
\ 0000CC 3041 RET
207 //------------------------------------------------------------------------------
208 // samples and returns the AD-converter value of channel 7
209 // (associated with Port P6.7)
210 //------------------------------------------------------------------------------
\ In segment CODE, align 2
211 static unsigned int GetAD7Val(void)
\ GetAD7Val:
212 {
213 ADC12MCTL0 = SREF_1 + INCH_7; // Select channel 7, Vref+
\ 000000 F24017008000 MOV.B #0x17, &0x80
214
215 ADC12CTL0 |= ENC; // enable conversion
\ 000006 A2D3A001 BIS.W #0x2, &0x1a0
216 ADC12CTL0 |= ADC12SC; // sample & convert
\ 00000A 92D3A001 BIS.W #0x1, &0x1a0
217
218 while (ADC12CTL0 & ADC12SC); // wait until conversion is complete
\ ??GetAD7Val_0:
\ 00000E 92B3A001 BIT.W #0x1, &0x1a0
\ 000012 FD2F JC ??GetAD7Val_0
219
220 ADC12CTL0 &= ~ENC; // disable conversion
\ 000014 A2C3A001 BIC.W #0x2, &0x1a0
221
222 return ADC12MEM0 >> 5; // Scale value
\ 000018 1C424001 MOV.W &0x140, R12
\ 00001C 12C3 CLRC
\ 00001E 0C10 RRC.W R12
\ 000020 0C11 RRA.W R12
\ 000022 0C11 RRA.W R12
\ 000024 0C11 RRA.W R12
\ 000026 0C11 RRA.W R12
\ 000028 3041 RET
223 }
224 //------------------------------------------------------------------------------
225 // samples and returns AD-converter value of channel 10
226 // (MSP430 internal temperature reference diode)
227 //------------------------------------------------------------------------------
\ In segment CODE, align 2
228 static unsigned int GetTempVal(void)
\ GetTempVal:
229 {
230 unsigned int i;
231 unsigned int ADCResult;
232
233 ADC12MCTL0 = SREF_1 + INCH_10; // Select channel A10, Vref+
\ 000000 F2401A008000 MOV.B #0x1a, &0x80
234
235 ADC12CTL0 |= ENC; // enable conversion
\ 000006 A2D3A001 BIS.W #0x2, &0x1a0
236 ADC12CTL0 |= ADC12SC; // sample & convert
\ 00000A 92D3A001 BIS.W #0x1, &0x1a0
237
238 while (ADC12CTL0 & ADC12SC); // wait until conversion is complete
\ ??GetTempVal_0:
\ 00000E 92B3A001 BIT.W #0x1, &0x1a0
\ 000012 FD2F JC ??GetTempVal_0
239
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -