📄 taskgetf.lst
字号:
C51 COMPILER V8.06 TASKGETF 02/13/2009 09:29:09 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE TASKGETF
OBJECT MODULE PLACED IN TaskGeTF.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE TaskGeTF.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "sm5964reg.h"
2 #include "newtype.h"
3 #include "SerialNewType.h"
4 #include "ht1621.h"
5
6 //定义串行通讯缓冲区
7 //unsigned char idata cv_SerialReceiverBuf[42];
8 unsigned char idata cv_SerialReceiverBuf[4];
9 unsigned char idata cv_SerialSendBuf[60];
10
11
12 //定义串行通信缓冲区的读写指针。
13 unsigned char ReceiverBufWritePoint;
14 unsigned char ReceiverBufReadPoint;
15 unsigned char SendBufWritePoint;
16 unsigned char SendBufReadPoint;
17 unsigned char ReceiverPackWritePoint;
18 //超级终端相关变量
19 unsigned char command_point; //命令开始读指针
20 unsigned char command_point_new; //新命令开始读指针
21
22
23 //串口发送缓冲区空闲标志
24 bit Ti; //Ti=1,串口准备好,可以发送数据
25 bit Ri; //Ri=1,接收缓冲区有数据要接收
26 bit SendBufFullFlag=0; //=1,发送缓冲区满
27
28
29 extern unsigned char code Versoin[]; //定义版本号常量
30 extern unsigned char data Mesure_state; //侧量状态
31 extern unsigned char data disp_flag; //动态显示电压标志
32 extern unsigned char data stop_flag; //停止测试标志
33 extern unsigned char data second; //秒
34 extern unsigned char Display_state;
35
36 //葛同府所写模块初始化函数。
37 void InitialGeTF(void)
38 {
39 1 ReceiverBufWritePoint=0;
40 1 ReceiverBufReadPoint=0;
41 1 SendBufWritePoint=0;
42 1 SendBufReadPoint=0;
43 1
44 1 Ti=0; //Ti=1,串口准备好,可以发送数据
45 1 Ri=0; //Ri=0,接收缓冲区无数据要接收
46 1
47 1 }
48
49 //串口中断函数
50 void SerialCom() interrupt 4
51 {
52 1 unsigned char temp;
53 1
54 1 //有接收中断,写入接收缓冲区
55 1 if(RI==1) {
C51 COMPILER V8.06 TASKGETF 02/13/2009 09:29:09 PAGE 2
56 2 RI=0;
57 2 Ri=1; //Ri=1,接收缓冲区有数据要接收
58 2 temp=SBUF;
59 2 cv_SerialReceiverBuf[ReceiverBufWritePoint]=temp;
60 2 //接收缓冲区写指针+1
61 2 //接收缓冲区写指针大于接收数组最大值,置0
62 2 if(++ReceiverBufWritePoint>=sizeof(cv_SerialReceiverBuf)) {ReceiverBufWritePoint=0;}
63 2 }
64 1
65 1 //有发送中断,置Ti标志为1
66 1 if(TI==1) {
67 2 TI=0;
68 2 if (SendBufWritePoint != SendBufReadPoint) {
69 3 //从接收缓冲区读数据
70 3 SBUF=cv_SerialSendBuf[SendBufReadPoint];
71 3 //发送缓冲区读指针+1
72 3 SendBufReadPoint++;
73 3 //发送缓冲区读指针大于接收数组最大值,置0
74 3 if (SendBufReadPoint >= sizeof(cv_SerialSendBuf)) SendBufReadPoint=0;
75 3 }
76 2 else Ti=0;
77 2 }
78 1 }
79
80
81
82 //从串口接收缓冲区读数函数
83 char SerialReceiveBufRead(void)
84 {
85 1 unsigned char RecByte;
86 1 ES=0;
87 1 //从接收缓冲区读数据
88 1 RecByte=cv_SerialReceiverBuf[ReceiverBufReadPoint];
89 1 //接收缓冲区读指针+1
90 1 //接收缓冲区读指针大于接收数组最大值,置0
91 1 if (++ReceiverBufReadPoint >= sizeof(cv_SerialReceiverBuf)) ReceiverBufReadPoint=0;
92 1
93 1 if (ReceiverBufWritePoint != ReceiverBufReadPoint) {
94 2 Ri=1; //Ri=1,从接收缓冲区读出数据
95 2 }
96 1 else{
97 2 Ri=0; //Ri=0,接收缓冲区无数据
98 2 }
99 1 ES=1;
100 1 return RecByte;
101 1 }
102
103 //数据放串口发送缓冲区
104 void SerialSendBufWrite(unsigned char SenByte)
105 {
106 1 ES=0;
107 1 if (SendBufWritePoint+1 != SendBufReadPoint ) {
108 2 //如果发送缓冲区不满,数据放发送缓冲区
109 2 cv_SerialSendBuf[SendBufWritePoint]=SenByte;
110 2 //发送缓冲区写指针+1
111 2 SendBufWritePoint=++SendBufWritePoint;
112 2 //发送缓冲区写指针大于接收数组最大值,置0
113 2 if (SendBufWritePoint >= sizeof(cv_SerialSendBuf)) SendBufWritePoint=0;
114 2 SendBufFullFlag=0; //发送缓冲区未满
115 2 }
116 1 else SendBufFullFlag=1; //发送缓冲区未满
117 1 //如果串口中断没有发送数据,置发送中断标志
C51 COMPILER V8.06 TASKGETF 02/13/2009 09:29:09 PAGE 3
118 1 if(Ti==0) {
119 2 Ti=1; //表示正在发送数据
120 2 TI=1; //产生串口中断
121 2 }
122 1 ES=1;
123 1 }
124
125
126 //打印字符串函数
127 //遇到'/'字符,输出回车换行
128 //例如:
129 // print("ok/"); //打OK,并回车换行
130 // print("err"); //只打印err,不回车换行
131 void print(unsigned char *p_string)
132 {
133 1 unsigned char c;
134 1
135 1 while(*p_string != 0x00){
136 2 if (*p_string != '/') {
137 3 SerialSendBufWrite(*p_string);
138 3 }
139 2 else{
140 3 c=0x0d;
141 3 SerialSendBufWrite(c);
142 3 c=0x0a;
143 3 SerialSendBufWrite(c);
144 3 }
145 2 p_string++;
146 2 }
147 1 }
148
149 /*
150 //十六进制数(<=0f)转ASCII字符
151 unsigned char hex_to_char(unsigned char c)
152 {
153 if (c<0xa){
154 c=c | 0x30;
155 }
156 else{
157 c=c+0x37;
158 }
159 return c;
160 }
161
162 /*
163 //向串口发送字符函数
164 void printc (unsigned char c)
165 {
166 SerialSendBufWrite( hex_to_char((c & 0xf0)>>4 ) );
167 SerialSendBufWrite( hex_to_char(c & 0x0f) );
168 SerialSendBufWrite( 0x20);
169 } */
170 /*
171 //向串口发送整数函数
172 void printic(unsigned int i)
173 {
174 if (SendBufFullFlag==1) return ; //=1,发送缓冲区满
175 SerialSendBufWrite( hex_to_char((char)((i & 0xf000)>>12)) );
176 if (SendBufFullFlag==1) return ; //=1,发送缓冲区满
177 SerialSendBufWrite( hex_to_char((char)((i & 0x0f00)>>8 )) );
178 if (SendBufFullFlag==1) return ; //=1,发送缓冲区满
179 SerialSendBufWrite( hex_to_char((char)((i & 0x00f0)>>4 )) );
C51 COMPILER V8.06 TASKGETF 02/13/2009 09:29:09 PAGE 4
180 if (SendBufFullFlag==1) return ; //=1,发送缓冲区满
181 SerialSendBufWrite( hex_to_char((char)(i & 0x000f)) );
182 if (SendBufFullFlag==1) return ; //=1,发送缓冲区满
183 SerialSendBufWrite( 0x20);
184 } */
185
186 /*
187 //向串口发送整数函数
188 void printc(unsigned char i)
189 {
190 SerialSendBufWrite( hex_to_char((char)((i & 0xf0)>>4 )) );
191 SerialSendBufWrite( hex_to_char((char)(i & 0x0f)) );
192 SerialSendBufWrite( 0x20);
193 } */
194
195 /**/
196 //葛同府所写任务调用。
197 void TaskGeTF(void)
198 {
199 1 unsigned char temp;
200 1
201 1 //如果串口有数据,接收并处理
202 1 if (Ri==1) {
203 2 temp=SerialReceiveBufRead(); //接收字符
204 2 //超级终端命令处理(命令最大6字节)
205 2 command_analyse(temp);
206 2 }
207 1 }
208
209 //命令解释器(命令最大6字节)
210 void command_analyse(unsigned char RecByte)
211 {
212 1 unsigned char i,j,temp,temp_point,t[8];
213 1 //unsigned char cv_TempBuf[3];
214 1 if (RecByte == 0x0d) {
215 2 ///命令开始读指针
216 2 command_point=temp_point=command_point_new;
217 2 //新命令开始读指针
218 2 command_point_new=ReceiverBufReadPoint;
219 2 //读命令
220 2 j=0;
221 2 for (i=0;i<sizeof(t);i++) {
222 3 temp=cv_SerialReceiverBuf[temp_point];
223 3 if (temp != 0x0a) { //滤除换行符
224 4 t[j]=temp; j++;
225 4 }
226 3 //接收缓冲区读指针+1,接收缓冲区读指针大于接收数组最大值,置0
227 3 if (++temp_point >= sizeof(cv_SerialReceiverBuf)) temp_point=0;
228 3 if (temp_point == command_point_new) i=sizeof(t); //读完后表示没有命令
229 3 }
230 2 //显示命令提示符>
231 2 printh(0x0d); printh(0x0a);
232 2 //printh('>'); printh(' ');
233 2 //ver命令
234 2 if ((t[0]=='v') && (t[1]=='e') && (t[2]=='r') && (t[3]==0x0d)) {
235 3 printh(':'); print(Versoin); printh(0x0d); printh(0x0a);
236 3 return;
237 3 }
238 2 //显示电压
239 2 if (((t[0]=='v') || (t[0]=='V')|| (t[0]=='i') || (t[0]=='I') )&& (t[1]==0x0d)) {
240 3 if (disp_flag==1) disp_flag=0;
241 3 else disp_flag=1;
C51 COMPILER V8.06 TASKGETF 02/13/2009 09:29:09 PAGE 5
242 3 return;
243 3 }
244 2 //停止测试
245 2 //显示电压
246 2 if (((t[0]=='s') || (t[0]=='S'))&& (t[1]==0x0d)) {
247 3 stop_flag=1;
248 3 Swich_Ctr=1; //停止放电
249 3 return;
250 3 }
251 2 //调整时间
252 2 if (((t[0]=='+') || (t[0]=='-'))&& (t[1]==0x0d)) {
253 3 if (t[0]=='+') second++;
254 3 if (t[0]=='-') second--;
255 3 return;
256 3 }
257 2 //显示测试
258 2 if (((t[0]=='d') || (t[0]=='D'))&& (t[1]==0x0d)) {
259 3 Display_state=Display_test;
260 3 return;
261 3 }
262 2 //显示测试
263 2 if (((t[0]=='d') || (t[0]=='D'))&& ((t[1]=='a') || (t[1]=='A'))&& (t[2]==0x0d)) {
264 3 disp_all();
265 3 return;
266 3 }
267 2 }
268 1 else {
269 2 printh(RecByte); //打印字符
270 2 }
271 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 497 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 9
IDATA SIZE = 64 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -