/**************************************************
文件名:STC免断电下载
功能:实现免断电下载单片机程序
原理:SWBS位为1时复位从ISP区开始,如果SWRST为1时产生软件复位!正是这两个特性结合在一起就可以实现不断电下载!
在上位机和单片机握手的时候会给P3.0口定时的输出低电平!
此时单片机的P3.0口就会检测到低电平就会实现从ISP区开始的复位如果单片机从ISP区开始复位的话就会重新下载程序!
**************************************************/
#include<reg52.h>
#define uchar unsigned char
sfr ISP_contro=0xE7;
sbit wela=P2^7;
sbit dula=P2^6;
char num;
void display();
sbit key=P3^0;
void delay(char xms);
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
void main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;
EA=1;
EX1=1;
TR0=1;
while(1)
{
display();
if(key==0)
ISP_contro=0xe0;
}
}
void delay(char xms)
{
char i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<110;j++)
{;}
};
}
void display()
{
dula=1;
P0=table[num/10];
dula=0;
P0=0x00;
wela=1;
P0=0xfe;
wela=0;
delay(10);
wela=1;
P0=0xfd;
wela=0;
P0=0x00;
dula=1;
P0=table[num%10];
dula=0;
delay(10);
}
void time ()interrupt 1 using 1
{
uchar i;
TH0=0X3C;
TL0=0XB0;
i++;
if(i>=20)
{
i=0;
num++;
if(num>99)
num=0;
}
}
|