⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example_test.c

📁 C8051F020单片机开发板演示程序
💻 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 + -