📄 sm5964.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 + -