📄 example_test.c
字号:
/************************************************************************************
* Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* Http: www.mlarm.com
* Email: mlarm@mlarm.com
*
* File name: Example_Test.c
*
* Project : ML-F020ICB
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: EagleC
* Version: 1.00
* Date: 2007.07.05
* Email:
*
* Description: 本文件是EEPROM、FLASH、XRAM的测试程序文件;
*
* Others: none;
*
* Function List:
*
* History:
* 1. Author: Eagle Cao
* Version: 1.00
* Date: 2007.07.05
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include <ABSACC.H>
#include "driver.h"
#include "api.h"
#include "ShowLCD.h"
/************************************************************************************/
/************************************************************************************/
// 常量及全局变量定义
#define READLEN 0x80
extern unsigned char code HZ_H_8X2[16];
extern unsigned long g_nTimer4s; //定时器4的次数
/************************************************************************************/
/*************************************************************************************/
//
// EEPROM、FLASH、XRAM测试程序函数定义
//
/*************************************************************************************/
/***********************************************************************************
* Function: TEST_Proc;
*
* Description: EEPROM、FLASH、XRAM测试程序;
*
* Input: char nType:0:EEPROM; 1:FLASH; 2:XRAM;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void TEST_Proc(char nType)
{
unsigned char i,cmd;
unsigned char nX;
unsigned int nY;
unsigned int j;
unsigned char FaultAddres[9]={0};
unsigned char Fault;
unsigned char bOld;
unsigned char xdata bufOld[READLEN];
unsigned char xdata bufFlash[4096];
unsigned long idata addres ;
unsigned long MaxAddres;
unsigned char *pItem;
for(i=0;i<READLEN;i++)
bufFlash[i] = i+0x10;
LCDB_ClearScreen();
Show_Title();
switch(nType)
{
case 0:
LCDB_DispFWord(32,8*(20-7),"EEPROM 自 测");
pItem = "本测试程序主要是完成EEPROM的可读写检测。结果显示在最下边。";
break;
case 1:
LCDB_DispFWord(32,8*(20-7),"FLASH 自 测");
pItem = "本测试程序主要是完成FLASH的可读写检测。结果显示在最下边。";
break;
case 2:
LCDB_DispFWord(32,8*(20-7),"XRAM 自 测");
pItem = "本测试程序主要是完成XRAM的可读写检测。结果显示在最下边。";
break;
}
nX = 64;
LCDB_DispFWord(nX, 32,pItem);
pItem = "D:开始测试";
LCDB_DispFWord(nX+16*3, 56,pItem);
pItem = "E:帮助";
LCDB_DispFWord(nX+16*4, 56,pItem);
pItem = "F:返回";
LCDB_DispFWord(nX+16*5, 56,pItem);
g_nTimer4s = 15001;
while(1)
{
EWachdog_Clear();
cmd = Key_Read();
if(cmd != CH452_KEY_INVAL)
{
ALARM_Ctrl(1);
Delay_ms(20);
ALARM_Ctrl(0);
switch (cmd)
{
case 0x0D://开始测试
Show_ClareX64();
Fault = 0;
switch(nType)
{
case 0://EEPROM
MaxAddres = 0x100;
LCDB_DispFWord(240-16, 16*2,"EEPROM 开始测试 ");
nX = 128; nY = 32;
for(addres =0; addres<MaxAddres; addres+=READLEN)
{
EWachdog_Clear();
EEPROM_Read(addres, bufOld, READLEN);
EEPROM_Write(addres, bufFlash, READLEN);
EEPROM_Read(addres, bufFlash, READLEN);
for(i=0;i<READLEN;i++)
{
if( i+0x10 != bufFlash[i])
{
LCDB_DispFWord(240-16, 16*2,"EEPROM 测试故障:");
Format_I(addres+i,FaultAddres,8,8,' ','h');
FaultAddres[8] = '\0';
LCDB_DispFWord(240-16, 16*10,FaultAddres);
Fault = 1;
break;
}
if((addres+i)%8 == 0)
{
LCDB_ShowHZxy (nX, nY, 16, 8, HZ_H_8X2);
Delay_ms(2);
nY += 8;
}
}
EEPROM_Write(addres, bufOld, READLEN);
if(Fault) break;
}
if(!Fault)
LCDB_DispFWord(240-16, 16*2,"EEPROM 测试完毕: 正常 ");
break;
case 1://FLASH
if(g_nTimer4s<15000)//5分钟之内只能测试一次
{
LCDB_DispFWord(240-16, 16*2,"FLASH 连续测试间隔5分钟");
break;
}
g_nTimer4s = 0;
MaxAddres = 0x80000;
LCDB_DispFWord(240-16, 16*2,"FLASH 开始测试 ");
nX = 64; nY = 32;
for(addres =0; addres<MaxAddres; addres+=4096)
{
Flash_Read(addres, bufFlash, 4096);
Flash_EraseSector(addres/4096);
for(j=0; j<4096; j++)
Flash_WriteByte(addres+j, (unsigned char)j);
EWachdog_Clear();
for(j=0; j<4096; j++)
{
if(Flash_ReadByte(addres+j) != (unsigned char)j)
{
LCDB_DispFWord(240-16, 16*2,"FLASH 测试故障:");
Format_I(addres+j,FaultAddres,8,8,' ','h');
FaultAddres[8] = '\0';
LCDB_DispFWord(240-16, 16*10,FaultAddres);
Fault = 1;
break;
}
if((addres+j)%0x10000 == 0) {nX += 16; nY =32;}
if((addres+j)%0x800 == 0){ LCDB_ShowHZxy (nX, nY, 16, 8, HZ_H_8X2);nY += 8;}
}
Flash_EraseSector(addres/4096);
Flash_Write(addres, bufFlash, 4096);
if(Fault) break;
}
if(!Fault)
LCDB_DispFWord(240-16, 16*2,"FLASH 测试完毕: 正常 ");
break;
case 2://XRAM
MaxAddres = 0x8000;
LCDB_DispFWord(240-16, 16*2,"XRAM 开始测试 ");
nX = 64; nY = 32;
for(addres =0; addres<MaxAddres; addres++)
{
EWachdog_Clear();
bOld = XBYTE[addres];
XBYTE[addres] = bufFlash[addres%READLEN];
if(XBYTE[addres] != bufFlash[addres%READLEN])
{
LCDB_DispFWord(240-16, 16*2,"XRAM 测试故障:");
Format_I(addres,FaultAddres,8,8,' ','h');
FaultAddres[8] = '\0';
LCDB_DispFWord(240-16, 16*10,FaultAddres);
Fault = 1;
break;
}
XBYTE[addres] = bOld;
if(Fault) break;
if(addres%0x1000 == 0) {nX += 16; nY =32;}
if(addres%0x80 == 0){LCDB_ShowHZxy (nX, nY, 16, 8, HZ_H_8X2);nY += 8;}
Delay_us(200);
}
if(!Fault)
LCDB_DispFWord(240-16, 16*2,"XRAM 测试完毕: 正常 ");
break;
}
break;
case 0x0E://帮助说明
Show_ClareX64();
nX = 64;
switch(nType)
{
case 0://EEPROM
pItem = "本测试程序主要是完成EEPROM的可读写检测。结果显示在最下边。";
break;
case 1://Flash
pItem = "本测试程序主要是完成FLASH的可读写检测。结果显示在最下边。";
break;
case 2://XRAM
pItem = "本测试程序主要是完成XRAM的可读写检测。结果显示在最下边。";
break;
}
LCDB_DispFWord(nX, 32,pItem);
pItem = "D:开始测试";
LCDB_DispFWord(nX+16*3, 56,pItem);
pItem = "E:帮助";
LCDB_DispFWord(nX+16*4, 56,pItem);
pItem = "F:返回";
LCDB_DispFWord(nX+16*5, 56,pItem);
break;
case 0x0F://返回
return;
}
}
}
}
/***********************************************************************************/
// 文件结束
/***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -