不断电下载疑问
#include <REGX52.H>#include "LCD1602.h"
#include "Key.h"
#include "AT24C02.h"
#include "Delay.h"
#include "string.h"
#define Address(x) (0xA0|(x<<1))
sfr ISP_CONTR = 0xE7;
unsigned char Data;
unsigned char reset_char[] = "@STCISP#";// 复位字符
unsigned char ReceiveData;// 接收数据缓冲区
unsigned char ReceiveIndex = 0;// 当前接收字节索引
void UartInit() //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
//开启中断
EA=1; //总中断控制
ES=1; //串口中断
}
void Uart_SendByte(unsigned char Byte)
{
SBUF = Byte; // 向缓存器中写入内容
while (TI == 0); // 等待发送完成
TI = 0; // 清除发送中断标志
}
void Uart_Routine(void) interrupt 4// 串口接收中断
{
unsigned char byte;
//LCD_ShowString(2,1,"INTTERRUPT");
if (RI)// 如果接收到数据
{
RI = 0;// 清除接收中断标志
byte = SBUF;// 读取接收到的数据
// 存入ReceiveData数组
if (ReceiveIndex < sizeof(ReceiveData) - 1)// 确保不越界
{
ReceiveData = byte;
ReceiveData = '\0';// 添加字符串结束符
}
// 检查是否接收到复位字符
if (strcmp((const char *)ReceiveData, (const char *)reset_char) == 0)
{
ISP_CONTR = 0x60;
LCD_ShowString(2, 1, "reset");
ReceiveIndex = 0;// 重置接收索引
}
}
}
void main()
{
LCD_Init();
UartInit();
LCD_ShowString(1, 1, "Hello!");
while (1)
{
}
}
试了一下,还真可以通过发送命令直接下载,但如果有一个新的程序下载进去,都必须把这段代码加上啊,有没有什么别的办法
不断电下载都是必须要内置程序的,并且内置程序如果因为其他的循环死机情况下,是没法继续不断电下载的。
所以,解决方法就是自动断电下载,外部硬件控制自动断电,也算是一种自动下载。
不过就不算“不断电下载”了
我这里有个无线版本的自动下载,可以不用对单片机程序做更改:
全自动蓝牙下载器!使用STC8H2K08U和JDY33模块制作, 可通讯可下载 - 第2页 - 有ICache的AI32F12K54测试版块,FOC 国芯技术交流网站 - AI32位8051交流社区
纯软件解决只能用户程序中包含该功能
否则就用硬件检测是否要下载然后自动断电
页:
[1]