📄 testnew.lst
字号:
206 {
207 1 Out_data2_com(0x00,0x00,0x40);
208 1 Out_data2_com(0x10,0x00,0x41);
209 1 Out_data2_com(0x00,0x04,0x42);
210 1 Out_data2_com(0x10,0x00,0x43);
211 1 Out_com(0xa7);
212 1 Out_com(0x80);
213 1 Out_com(0x9c);
214 1 }
215 /*************清RAM区*********************/
216 void Clear_Dian(uchar a) //0:清除文本区;1:清除图形区
217 {
218 1 uint l,i;
219 1 if(a==0)
220 1 {
221 2 Out_data2_com(0x00,0x00,0x24);
222 2 i=129;
223 2 }
224 1 if(a==1)
225 1 {
226 2 Out_data2_com(0x00,0x04,0x24);
227 2 i=1025;
228 2 }
229 1 Out_com(0xb0);
230 1 for(l=i;l>0;l--)
231 1 {
232 2 Out_data(0x00);
233 2 }
234 1 Out_com(0xb2);
235 1 }
236 /******************************************************/
237 /**************** 显示一行英文字符*******************/
238 void Dis_line(uchar Line_num) //显示内容为Disp_Buff内所存内容
239 {
240 1 uchar l;
241 1 Out_data2_com(Line_num*16,0x00,0x24);
C51 COMPILER V6.02 TESTNEW 05/31/2005 18:15:15 PAGE 5
242 1 Out_com(0xb0);
243 1 for(l=0;l<16;l++)
244 1 {
245 2 Out_data(Disp_Buff[l]-0x20);
246 2 }
247 1 Out_com(0xb2);
248 1 }
249 /****************************************************************************/
250 /**************************************************/
251 /*********键值输入程序*************/
252 void int0(void) interrupt 2
253 {
254 1 uchar Key_Temp=0,m_Key=0;
255 1 uchar i;
256 1 EA=0; //防止其他中断进入
257 1 Key_Temp=KEY; //读取键值
258 1 Delay(12000); //软件去抖动
259 1 m_Key=KEY;
260 1 if(Key_Temp==m_Key)
261 1 {
262 2 for(i=0;i<15;i++)
263 2 Disp_Buff[i]=Disp_Buff[i+1];
264 2 i=m_Key;
265 2 /* ES=0; //禁止串行口中断
266 2 SBUF=i; //发送当前键值
267 2 while(TI==0); //等待数据发送完毕
268 2 TI=0; //强发送标记位清零
269 2 ES=1; //允许串行口中断*/
270 2 Send_Byte(i);
271 2 Delay(200);
272 2 Send_Byte(i);
273 2 if(i<10)
274 2 Disp_Buff[15]=0x30+i;
275 2 if(i>=10&&i<18)
276 2 Disp_Buff[15]=0x37+i;
277 2 }
278 1 EA=1; //开启中断
279 1 }
280
281 /************************************************/
282 /**********************************************************/
283 /******串行口初始化子程序******/
284 void Init_Serial_Interrupt(void)
285 {
286 1 SCON=0x50; //将串行口设置成工作方式1,方式1为异步传送10位数据(1个起始位加8位数据加1个停止位
-,无奇偶校验位)
287 1 //该方式下用于数据发送,发送波特率为: BAND=(1+SMOD)*Fosc/12/32/(256-T)
288 1 ES=1; //关、打开串口中断
289 1 REN=1; //打开、禁止串行数据接收
290 1 PS=0; //串口中断设置为0,低优先级
291 1 }
292 /*****通讯用定时器1参数设置*****/
293 void Init_Serial_Timer1(void)
294 {
295 1 TMOD&=0x0f; //只改变定时器1的定时设置为自重载模式,以便于进行数据通讯,先清高四位与定时器相
-关的位
296 1 TMOD|=0x20; //改变定时器1的定时设置为自重载模式,以便于进行数据通讯,之后加入高四位控制字
297 1 TH1=0xfa; //波特率对应的时间重载常数600为a0 1200波特率为d0,2400为e8,4800为f4,9600为fa
298 1 TL1=0xfa; //计算公式为: BAND=(1+SMOD)*Fosc/12/32/(256-T)
299 1 // Fosc=22.1184MHz,SMOD=0: T=256-(1+SMOD)*Fosc/12/32/BAND
300 1 // T=256-1.8432M/32/BAND
301 1 // T=256-57600/BAND
C51 COMPILER V6.02 TESTNEW 05/31/2005 18:15:15 PAGE 6
302 1 PCON&=0x7f; //最高位SMOD=0时波特率不加倍,1时波特率加倍
303 1 TR1=1; //打开定时器中断
304 1 EA=1; //打开全局中断
305 1 }
306 /*****串行发送相关器件参数初始化子程序*****/
307 void Init_Serial(void)
308 {
309 1 Init_Serial_Interrupt(); //使用第二套参数初始化设置串行口用于通讯
310 1 Init_Serial_Timer1(); //设置定时器1用于串口通讯
311 1 }
312 /*****处理(组装)过的八位二进制数据发送子程序*****/
313 void Outport(uchar i)//入口:参数为待发送八位二进制数据
314 {
315 1 ES=0; //禁止串行口中断
316 1 SBUF=i; //发送当前键值
317 1 while(TI==0); //等待数据发送完毕
318 1 TI=0; //强发送标记位清零
319 1 ES=1; //允许串行口中断
320 1 }
321 /*****完整的单字节数据串行发送子程序*****/
322 void Send_Byte(uchar datas)//入口:参数为待发送字节数据
323 {
324 1 uchar t;
325 1 Init_Serial(); //串行发送相关器件参数初始化子程序
326 1 t=TR0; //保存其它定时器状态
327 1 TR0=0; //暂停其它定时信号
328 1 Outport(datas); //发送字节数据
329 1 TR0=t; //还原其它定时器状态
330 1 }
331 /*****字(双字节)数据串行发送子程序*****/
332 void Send_Word(uint datas)//入口:参数为待发送字数据
333 {
334 1 uchar t;
335 1 Init_Serial(); //串行发送相关器件参数初始化子程序
336 1 t=TR0; //保存其它定时器状态
337 1 TR0=0; //暂停其它定时信号
338 1 Outport(datas&0x00ff); //发送最低8位字节
339 1 Delay(20);
340 1 Outport(datas>>8); //发送高8位字节
341 1 TR0=t; //还原其它定时器状态
342 1 }
343 /***************串口接收程序***************/
344 void SerialPort_ISR(void) interrupt 4
345 {
346 1 uchar R_Data,i;
347 1 ES=0;
348 1 while(RI==0);
349 1 RI=0;
350 1 R_Data=SBUF;
351 1 for(i=0;i<15;i++)
352 1 Disp_Buff[i]=Disp_Buff[i+1];
353 1 //R_Data=R_Data-0x80;
354 1 if(R_Data<10)
355 1 Disp_Buff[15]=0x30+R_Data;
356 1 else
357 1 Disp_Buff[15]=0x37+R_Data;
358 1 ES=1;
359 1 }
360 /*****************************************************************************/
361 void main(void)
362 {
363 1 uint m;
C51 COMPILER V6.02 TESTNEW 05/31/2005 18:15:15 PAGE 7
364 1 uchar q;
365 1 Init_Int();
366 1 Init_Serial();
367 1 Init_Dian();
368 1 Clear_Dian(0);
369 1 Clear_Dian(1);
370 1 Init_Dian();
371 1 Clear_Dian(0);
372 1 Clear_Dian(1);
373 1 Chars_dis("2005/03/29 By KP");
374 1 Dis_line(7);
375 1 Chars_dis("Wuhan University");
376 1 Dis_line(0);
377 1 Chars_dis(" NEW 8051&FPGA ");
378 1 Dis_line(1);
379 1 Chars_dis("System EVM Board");
380 1 Dis_line(2);
381 1 Chars_dis(" Test Program ");
382 1 Dis_line(3);
383 1
384 1 Addr=0x0000; //32KB 外部RAM检测
385 1 Data_test=Data_Start;
386 1 for(m=0;m<Max_Addr;m++)
387 1 *Addr++=Data_test++;
388 1 Addr=0x0000;
389 1 Data_test=Data_Start;
390 1 for(m=0;m<Max_Addr;m++)
391 1 {
392 2 if(*Addr++!=Data_test++)
393 2 Error++;
394 2 }
395 1 if(Error==0)
396 1 {
397 2 Chars_dis("32K Ram Checking");
398 2 Dis_line(4);
399 2 Chars_dis(" Is Successful! ");
400 2 Dis_line(5);
401 2 }
402 1 else
403 1 {
404 2 Chars_dis("32K Ram Checking");
405 2 Dis_line(4);
406 2 Chars_dis("Is Unsuccessful! ");
407 2 Dis_line(5);
408 2 }
409 1 L_delay(8);
410 1
411 1 Error=0; //1KB FPGA内部RAM检测
412 1 Addr=0xe000;
413 1 Data_test=Data_Start;
414 1 for(m=0;m<Max_Addr_1K;m++)
415 1 *Addr++=Data_test++;
416 1 Addr=0xe000;
417 1 Data_test=Data_Start;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -