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

📄 newtextdocument.c

📁 STC ISP 功能测试程序
💻 C
字号:
/* switch (counter)
{
case 0: 
	P3^2=0;
	P3^3=1;
	P3^4=1;
	P3^5=1;
	break;
case 1: 
	P3^2=1;
	P3^3=0;
	P3^4=1;
	P3^5=1;break;
case 3: 
	P3^2=1;
	P3^3=1;
	P3^4=0;
	P3^5=1;break;
case 4: 
	P3^2=1;
	P3^3=1;
	P3^4=1;
	P3^5=0;break;
default:
	P3^2=1;
	P3^3=1;
	P3^4=1;
	P3^5=1;
}

//判断是否是第一次启动,是则 进行。。。。




// 发送数据时是否要关闭 Serial port---v,和T0 RUN---?--因为 485 是半双工,所以发送就不能接收,
//可是RS232 是全双工,。。。											V,open T0,close Serial port
//添加对 20H 21H的识别会有什么问题?----the end							V,no problem
//接受12 个数据时要判断01、02、03、04 ---the second						X,
//第四个命令串,是否可以更改 slaver_ADD ,并发送给主机?-------first		V
//发送程序的 WR=1; delay(1); WR=0; 是否需要?---看情况再说				V,noneeded
//main主程序的流程还有别的方式 吗??***,								vx 暂时没

//应该是主机发别的无效的数据,可以不理会。重新开始接收。
//每次定义一个新工程 要修改,工程变量 /输出文件位置/串口软件 通讯方式/外部选择晶振/。
//变量定义和代码间必须留一行空行
//标明主要函数的说明。
//调试方法,可以显示变量值,等待主程序发回响应,就可以继续执行,相当于断点 ??--sentonedata();
//函数有返回值时,需要在设计函数时加 return。
//接受和发送数据时RD-RE 要置 和清。


//{
//if(point%2==1)

//if receiver_buff==0x01}
 

//置SM2=0是否和RI=1;有同样效果,主机每发送一串数,立即有反应??
//去掉串口中断的 判断RI 是否有问题??

//引入一个数组 or变量,每次写进一个新Slaver_ADD, 放入此位置,并写入flash
//读主机的地址数据时,从flash调出,测试是否与此变量一样,


//一份 可以接收任意字符的接收程序。有LED显示地址位信息的。
//主要为第一功能。

//***不看 3Q 和4U 是否会有问题???

//不停发送数据时 ,LED会闪,是程序问题 还是 硬件问题??

//接收的数据不在范围内时怎么办??

//怎么突破新加一个 缓冲区,接收数据没变化的问题。

//可以自己做头文件,把分支程序 写到里面

//写入RE52.h的头文件,,是工程里的优先吗 还是程序默认的目录下的?
//---星研是程序默认目录下的
*/  


//flash操作等待时间 & Enable ISP功能
#include<reg52.h>
#include<stdio.h>
//#include<isp-1.h>

sfr ISP_DATA	= 0xE2;
sfr ISP_ADDRH	= 0xE3;
sfr ISP_ADDRL	= 0xE4;
sfr ISP_CMD 	= 0xE2;
sfr ISP_TRIG 	= 0xE2;
sfr ISP_CONTR	= 0xE2;

#define ENABLE_ISP 0x80 //<30MHZ
/*
#define ENABLE_ISP 0x81 //
#define ENABLE_ISP 0x82 //
#define ENABLE_ISP 0x83 //<12MHZ
#define ENABLE_ISP 0x84 //
#define ENABLE_ISP 0x85 //
#define ENABLE_ISP 0x86 //
#define ENABLE_ISP 0x87 //<1MHZ
*/
#define DEBUG_DATA 0x05

#define DATA_FLASH_START_ADDRESSH 0x28
#define DATA_FLASH_START_ADDRESSL 0x00


void ISP_DISABLE(void)
{
	ISP_CONTR=0x00;
	ISP_CMD=0x00;
	ISP_TRIG=0x00;
}

unsigned char byte_read(void)
//读主机的地址数据时,从DATA flash调出,测试是否与此变量一样
//在主程序中执行,初始化时,读入变量 slaver_ADD。
{
	ISP_CONTR=ENABLE_ISP;
	ISP_CMD=0x01;
	ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
	ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
	EA=0;
	ISP_TRIG=0x46;
	ISP_TRIG=0xB9;
//	_nop_();
	EA=1;				//可否放在return之后?//LED显示是否会有问题?//_nop_();不能加?
	ISP_DISABLE();	//可否放在return之后?---编译可以通过,实际使用要调.	
	return(ISP_DATA);

}

void section_erase(void)
//读数据出错时调用,之后编程,然后再读?
//
{
	ISP_CONTR=ENABLE_ISP;
	ISP_CMD=0x03;
	ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
	ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
	EA=0;
	ISP_TRIG=0x46;
	ISP_TRIG=0xB9;
//	_nop_();
	EA=1;				
	ISP_DISABLE();		
//	return(ISP_DATA);
}

void byte_program(unsigned char m)
//获得新的Slaver_ADD 应该写入DATA flash。
//如果相同则不写入,要做判断。
//应该在主程序执行,并更改变量 slaver_ADD。
//是否每次写都erase 一下:否则如何判断读出数据有错?COM_FAIL?
{	
	section_erase();
	ISP_DATA=m;
	ISP_CONTR=ENABLE_ISP;
	ISP_CMD=0x02;
	ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
	ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
	EA=0;
	ISP_TRIG=0x46;
	ISP_TRIG=0xB9;
//	_nop_();
	EA=1;				
	ISP_DISABLE();		
//	return(ISP_DATA);
}


//主程序
/*
main(void)
{
time0_init();
UART_init();
COM_status=0xff;
do 
{
	if(point==0 && UART_nogetOKdata_flag==0)//串口程序结束时要加UART_nogetOKdata_flag=1
	{
	sentdata();}
	if(point==6 && COM_Status==3)
	{	
//		if (COM_Status==3)
		sentdata();//
//		else
//		{;}
	}
	else if(point==6 && COM_Status==4)
	{	
		slaver_ADD=new_ADD;
	}
	else if(point==12 && COM_Status==2)
	{
//		if(COM_Status==2)
		sentdata();
//		else 
//		{;}
	}

	else
	{;}
}while(1);
}
*/
main(void)
{
	SCON=0x52;
	TMOD=0x20;
	TH1=0xf3;
	TR1=1;	
   section_erase();
  	byte_program(0x05);//ISP 功能测试函数,可放在程序UART_init和time0_init 之后
	if(byte_read()==0x05)
//	{	
		printf("hello I am keillll. \n" );
//	}
//	while(1);
	
}

//“uncalled segment,ignored for overlay process” 的警告 在使用之前定义的define 后减少一111111个主程序多用一个定义的函数,就少一个
//“missing function prototype --warning  ,requires ANSI-style prototype --error” 当一个函数未定义时出现

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -