Crystalline 发表于 2024-10-31 18:29:59

不断电下载疑问

#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)
    {

    }
}
试了一下,还真可以通过发送命令直接下载,但如果有一个新的程序下载进去,都必须把这段代码加上啊,有没有什么别的办法

王昱顺 发表于 2024-10-31 18:51:49

不断电下载都是必须要内置程序的,并且内置程序如果因为其他的循环死机情况下,是没法继续不断电下载的。
所以,解决方法就是自动断电下载,外部硬件控制自动断电,也算是一种自动下载。
不过就不算“不断电下载”了
我这里有个无线版本的自动下载,可以不用对单片机程序做更改:
全自动蓝牙下载器!使用STC8H2K08U和JDY33模块制作, 可通讯可下载 - 第2页 - 有ICache的AI32F12K54测试版块,FOC 国芯技术交流网站 - AI32位8051交流社区

DebugLab 发表于 2024-10-31 19:34:56

纯软件解决只能用户程序中包含该功能
否则就用硬件检测是否要下载然后自动断电
页: [1]
查看完整版本: 不断电下载疑问