📄 reg932_isp.c
字号:
#include "include/REG932_ISP.H"
#define uchar unsigned char //宏
#define uint unsigned int
void (*Excute_ISP)(); //定义ISP函数指针
void ISP_932(void); //932-ISP引导程序
void DSP_ISP(void); //932-ISP引导动画
void wait750ms_ISP(void); //750ms延时程序
void CLS_ISP(void); //清空显示
void display_ISP(uchar k_ISP); //第1/2行显示程序
void send_byte_ISP(uchar buf_ISP,r_ISP); //串行1/2发送1字节
void CLRWDTEXP_ISP(void); //喂狗程序
sbit PIN_ISP =P2^7; //ISP跳线设置引脚
sbit clk1_ISP=P1^6; //模拟串行I/O引脚
sbit dat1_ISP=P1^7;
sbit clk2_ISP=P2^6;
sbit dat2_ISP=P2^7;
uchar DIS_ISP[8]; //显示缓冲区
//===================================================================
void ISP_932(void) //932-ISP引导程序
{ uchar i_ISP;
P1M1=0x00;
P1M2=0x00; //设置P1口为准双向
P2M1=0x00;
P2M2=0x00; //设置P2口为准双向
Excute_ISP=0x1E00; //ISP代码指针为0x1F00
CLRWDTEXP_ISP();
CLS_ISP(); //清空显示
if(PIN_ISP==0) //跳线设置为ISP方式?
{for(i_ISP=0;i_ISP<250;i_ISP++) ; //短延时
if(PIN_ISP==0) //跳线设置为ISP方式?
{
DSP_ISP(); //932-ISP引导动画
Excute_ISP(); //调用ISP程序
}
}
}
//--------------------------------------------------------------------
void DSP_ISP(void) //932-ISP引导动画
{ //uchar j_ISP;
CLRWDTEXP_ISP();
DIS_ISP[0]=0x14;
DIS_ISP[1]=0x67;
DIS_ISP[2]=0xF1;
DIS_ISP[3]=0x00;
DIS_ISP[4]=0x00;
DIS_ISP[5]=0x00;
DIS_ISP[6]=0x14;
DIS_ISP[7]=0xF4;
SS=1;
SPICLK=1;
display_ISP(1); //显示字符ISP IN
wait750ms_ISP(); //保持
DIS_ISP[3]=0x02;
display_ISP(1); //显示字符ISP- IN
wait750ms_ISP(); //保持
DIS_ISP[4]=0x40;
display_ISP(1); //显示字符ISP-- IN
wait750ms_ISP(); //保持
DIS_ISP[5]=0x02;
display_ISP(1); //显示字符ISP---IN
wait750ms_ISP(); //保持
}
//--------------------------------------------------------------------
void wait750ms_ISP(void) //750ms延时程序
{ uchar i_ISP,j_ISP;
for(i_ISP=0;i_ISP<255;i_ISP++)
{for(j_ISP=0;j_ISP<255;j_ISP++)
{CLRWDTEXP_ISP();}
}
}
//--------------------------------------------------------------------
void CLRWDTEXP_ISP(void) //喂狗程序
{ bit eacopy;
eacopy=EA;
EA=0;
WFEED1=0xA5;
WFEED2=0x5A;
EA=eacopy;
}
//--------------------------------------------------------------------
void CLS_ISP(void) //清空显示
{ uchar i_ISP;
for(i_ISP=0;i_ISP<8;i_ISP++)
{DIS_ISP[i_ISP]=0;}
SS=1;
SPICLK=1;
display_ISP(1);
display_ISP(2);
display_ISP(1);
display_ISP(2);
}
//--------------------------------------------------------------------
void display_ISP(uchar k_ISP) //第1/2行显示程序
{uchar i_ISP;
CLRWDTEXP_ISP();
for(i_ISP=0;i_ISP<8;i_ISP++) //送给8个LED显示
{send_byte_ISP(~DIS_ISP[i_ISP],k_ISP);}
}
//--------------------------------------------------------------------
void send_byte_ISP(uchar buf_ISP,r_ISP) //向模拟串口发送一字节
{
uchar i_ISP,j_ISP;
if(r_ISP==1)
{ for(i_ISP=0;i_ISP<8;i_ISP++) //移位8次输出buf_ISP
{
if(buf_ISP&0x01==0x01) //d.0位为1?
{dat1_ISP=1;} //dat1输出1
else
{dat1_ISP=0;} //dat1输出0
clk1_ISP=1; //发移位脉冲
for(j_ISP=0;j_ISP<5;j_ISP++) ; //短延时
clk1_ISP=0; //撤消移位脉冲
buf_ISP=buf_ISP>>1; //字型码逐位移出
}
}
if(r_ISP==2)
{ for(i_ISP=0;i_ISP<8;i_ISP++) //移位8次输出buf_ISP
{
if(buf_ISP&0x01==0x01) //d.0位为1?
{dat2_ISP=1;} //dat2输出1
else
{dat2_ISP=0;} //dat2输出0
clk2_ISP=1; //发移位脉冲
for(j_ISP=0;j_ISP<5;j_ISP++) ; //短延时
clk2_ISP=0; //撤消移位脉冲
buf_ISP=buf_ISP>>1; //字型码逐位移出
}
}
}
//--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -