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

📄 sm5964.c

📁 关于SM5964的三种程序示例 1.使用看门狗的程序 示例 2.可反复进入ISP的程序 示例 3.利用剩余的Falsh空间存储数据 示例 关键提示:CODE的绝对定位,方法在code_
💻 C
字号:
/***************************************************************
	;关于SM5964的三种程序示例
	;1.使用看门狗的程序 示例
	;2.可反复进入ISP的程序 示例
	;3.利用剩余的Falsh空间存储数据 示例
	;关键提示:CODE的绝对定位,方法在code_at.c中
	;本例由上海单片机网友情提供(www.shmcu.com)
****************************************************************/

#include <intrins.h>
#include <p89c51rx.h>
#include <head.h>


void main(void)
{
    uchar i,temp[6];

	WDTC_DOG(); //使能狗
    ISP_ok = 0;

	for (;;)
	{
	   WDTC_DOG();//喂狗  
	   EA = 1;

		//条件判断,是否进入ISP                          //
		if(!P1_6 && !P1_7)//条件由自己任意发挥...       //
			{                                           //
			ISP_ok = 1;//进入ISP 条件成立               //
			}                                           //
                                                        //
		if(ISP_ok != 0)//test ISP                       // 可反复进入ISP的程序 示例
		{                                               //
        ISP_ok = 0;                                     //
        CLOSE_DOG();//关狗                              //
		BEEP = 0;//TEST                                 //
		DelayMs(100);                                   //
		BEEP = 1;//TEST                                 //
		GoToIsp();                                      //
		}                                               //

	 
		WDTC_DOG();//喂狗  
		for(i=0;i<6;i++)//test
			{
            data_buf[i] = 0x55;//此数据用来下面的测试
			}

		//Flash页擦除                                     //
		ISPFAH = (uchar)(((uint)Nkey_a)>>8);              //
		ISPFAL = (uchar)Nkey_a;                           //
		ISPFD  = 0x55;                                    //
		ISPFD  = 0xaa;                                    //
		ISPFD  = 0x55;                                    //
		ISPC   = 0x82;//start to Page erase (512 byte)    //
                                                          //
		//写Flash                                         // 利用剩余的Falsh空间存储数据 示例
		ISPFAH = (uchar)(((uint)Nkey_a)>>8);              //
		ISPFAL = (uchar)Nkey_a;                           //
		for(i=0;i<6;i++)//连续写6字节                     //
			{                                             //
			ISPFD  = data_buf[i];                         //
			ISPC   = 0x80;//start to program              //
			ISPFAL ++;                                    //
			}                                             //
		DelayMs(200);//此延时是必须的!                    //


		WDTC_DOG();//喂狗  
		for(i=0;i<6;i++)//test
			{
            temp[i] = Nkey_a[i];//读出数据,验证之
			}
  }//for(;;)

}

/***************************************************************
	;DOG
****************************************************************/
void WDTC_DOG(void)//在8958A上,看门狗能正常工作的。
{
	WDTKEY = 0x1e;
	WDTKEY = 0xe1;//set
	WDTC = 0xa7;//dog_data; //喂狗  
//    SCONF = 0x01; //关ALEI
	WDTKEY = 0xe1;
	WDTKEY = 0x1e;//only read
}

void CLOSE_DOG(void)//关狗
{
	WDTKEY = 0x1e;
	WDTKEY = 0xe1;//set
	WDTC = 0x00;//dog_data; //喂狗  
	WDTKEY = 0xe1;
	WDTKEY = 0x1e;//only read
}

/***************************************************************
	;Delay time
****************************************************************/
void DelayMs(unsigned int number)
{
	unsigned char temp;
	for(;number!=0;number--) 
	{
		for(temp=112;temp!=0;temp--) 
		{
		  _nop_();
		}
	}
}


⌨️ 快捷键说明

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