下载STC的程序每次都得冷启动,我的电源开关都快掰出火星来了,烦死了!!(>_<)(>_<)(>_<)
下面介绍一种可以免冷启动的下载方法:
1、软件配置原理
STC单片机的这两个寄存器是软件控制复位的,冷启动的目的是为了单片机从ISP引导码开始执行,通过程序配置这两个寄存器,也可以实现单片机从ISP引导码开始执行。一般操作是用STC-ISP软件先发送一帧串口指令,串口收到自定义的指令后,将IAP_CONTR |= 0x60;这样单片机会自动重启并且从ISP监控代码区开始执行。STC-ISP软件就可以顺利下载程序了。
2、STC-ISP软件配置
自定义命令:随便定义,只要单片机串口接收到并顺利比对成功即可
(1):每次下载钱都先发送自定义命令选项必须要勾选,这样才能通知单片机复位并重启
(2):当目标文件变化时自动装载并发送下载命令想选可选可不选,这个选项的的作用是,如果选了,那么每次编译程序,都会下载进单片机去
(3):手动发送自定义指令并下载程序,点击这个选项就不用冷启动了
3、串口接收程序
配置好串口后,在串口接收中断中复制以下代码,搭配上面STC-ISP软件配置即可实现免冷启动下载程序
/*
* 描述: 串口1接中断服务函数
* 参数: 无
* 返回: 无*/
void Uart1_Interrupt_Callback (void) interrupt UART1_VECTOR
{
u8 recv_temp_value = 0;
if(RI)
{
RI = 0;
recv_temp_value = SBUF;
RX1_Buffer[uart1_recv_count] = recv_temp_value;
uart1_recv_count++;
if(uart1_recv_count >= 8)
{
uart1_recv_count = 0;
if(0 == strcmp(RX1_Buffer,"@STCISP#"))
{
//清空接收缓冲区
memset(RX1_Buffer,0,10);
//软件复位后从系统ISP监控区代码区开始执行程序
IAP_CONTR |= 0x60;
TEST_LED3 = 0;
}
}
}
if(TI)
{
TI = 0; // 发送完成,TI必须软件置零,下次发送的时候才硬件才可以将它置一作为判断发送完成的依据
B_TX1_Busy = 0;
}
}