stc读写涵数.txt

来自「STC单片机ISP内部保存数据的读写C函数」· 文本 代码 · 共 109 行

TXT
109
字号
 Twrite()
{   uint	i	=	0;
	uint	begin_addr	=	0;
    /* 擦除 要修改/写入 的扇区 */
	begin_addr	=	(0x2000 & 0xfe00);	/* 1111,1110,0000,0000; 取扇区地址 */
	ISP_ADDRH	=	(uchar)(begin_addr >> 8);
	ISP_ADDRL	=	0x00;
	ISP_CMD		=	ISP_CMD	&	0xf8;		/* 1111,1000 */
	ISP_CMD		=	ISP_CMD	|	0x03;	/* 0000,0011 */
	/* 打开 ISP,IAP 功能 */
    EA	=	0;	
	ISP_CONTR	=	ISP_CONTR & 0x18;       /* 0001,1000 */
	ISP_CONTR	=	ISP_CONTR | 0x01;
	ISP_CONTR	=	ISP_CONTR | 0x80;       /* 1000,0000 */
	ISP_TRIG	=	0x46;        /* 触发ISP_IAP命令 */
	ISP_TRIG	=	0xb9;        /* 触发ISP_IAP命令 */
	_nop_();
  for(i = 0; i< 17; i++)	/* 写一个字节 */
	{  
   AAA: ISP_ADDRH	=	(uchar)(begin_addr >> 8);
		ISP_ADDRL	=	(uchar)(begin_addr & 0x00ff);
		ISP_DATA	=	SaveTime[i]/256;
		ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD		=	ISP_CMD	|	0x02;		/* 0000,0010 */
 	    ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
	/* 读回来 */
		ISP_DATA	=	0x00;
        ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD     =	ISP_CMD	|	0x01;	/* 0000,0001 */
        ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
 	  if(ISP_DATA != SaveTime[i]/256)	/*  比较对错 */
	  goto AAA;
        begin_addr++;

	    ISP_ADDRH	=	(uchar)(begin_addr >> 8);
		ISP_ADDRL	=	(uchar)(begin_addr & 0x00ff);
		ISP_DATA	=	SaveTime[i]%256;
		ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD		=	ISP_CMD	|	0x02;		/* 0000,0010 */
 	    ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
	/* 读回来 */
		ISP_DATA	=	0x00;
        ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD     =	ISP_CMD	|	0x01;	/* 0000,0001 */
        ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
 	  if(ISP_DATA != SaveTime[i]%256)	/*  比较对错 */
	  { begin_addr--;
	  goto AAA;	 }
        begin_addr++;
	}
    ISP_CONTR	=	ISP_CONTR & 0x7f;	/* 0111,1111 */
	ISP_TRIG	=	0x00;
	EA			=   1;                	/* 开中断 */
}

//**********************************/
Tread()
{	uint	i	=	0,TT;
	uint	begin_addr	=	0;
	/* 打开 ISP,IAP 功能 */
	begin_addr	=	(0x2000 & 0xfe00);
    EA	=	0;	
	ISP_CONTR	=	ISP_CONTR & 0x18;       /* 0001,1000 */
	ISP_CONTR	=	ISP_CONTR | 0x01;
	ISP_CONTR	=	ISP_CONTR | 0x80;       /* 1000,0000 */
  for(i = 0; i< 17; i++)	/* 写一个字节 */
	{  
        ISP_ADDRH	=	(uchar)(begin_addr >> 8);
		ISP_ADDRL	=	(uchar)(begin_addr & 0x00ff);
		ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD		=	ISP_CMD	|	0x01;		/* 0000,0010 */
 	    ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
	  // SaveTime[i]=ISP_DATA;
	  TT=ISP_DATA;
	   _nop_();
	   ISP_DATA=0x00;
	    begin_addr++;

		ISP_ADDRH	=	(uchar)(begin_addr >> 8);
		ISP_ADDRL	=	(uchar)(begin_addr & 0x00ff);
		ISP_CMD		=	ISP_CMD	&	0xf8;	/* 1111,1000 */
		ISP_CMD		=	ISP_CMD	|	0x01;		/* 0000,0010 */
 	    ISP_TRIG	=	0x46;	/* 触发ISP_IAP命令 */
		ISP_TRIG	=	0xb9;	/* 触发ISP_IAP命令 */
		_nop_();
	  // SaveTime[i]=ISP_DATA;
	  SaveTime[i]=TT*256+ISP_DATA;
	   _nop_();
	   ISP_DATA=0x00;
	    begin_addr++;
      }
	ISP_CONTR	=	ISP_CONTR & 0x7f;	/* 0111,1111 */
	ISP_TRIG	=	0x00;
	EA			=   1;                	/* 开中断 */




}

⌨️ 快捷键说明

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