找回密码
 立即注册
查看: 215|回复: 2

不断电下载疑问

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-05-02 15:35:29
已绑定手机

17

主题

81

回帖

386

积分

中级会员

积分
386
发表于 2024-10-31 18:29:59 | 显示全部楼层 |阅读模式
  1. #include <REGX52.H>
  2. #include "LCD1602.h"
  3. #include "Key.h"
  4. #include "AT24C02.h"
  5. #include "Delay.h"
  6. #include "string.h"
  7. #define Address(x) (0xA0|(x<<1))
  8. sfr ISP_CONTR = 0xE7;
  9. unsigned char Data[4];
  10. unsigned char reset_char[] = "@STCISP#";  // 复位字符
  11. unsigned char ReceiveData[20];  // 接收数据缓冲区
  12. unsigned char ReceiveIndex = 0;  // 当前接收字节索引
  13. void UartInit()                //4800bps@11.0592MHz
  14. {
  15.         PCON &= 0x7F;                //波特率不倍速
  16.         SCON = 0x50;                //8位数据,可变波特率
  17.         TMOD &= 0x0F;                //清除定时器1模式位
  18.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  19.         TL1 = 0xFA;                //设定定时初值
  20.         TH1 = 0xFA;                //设定定时器重装值
  21.         ET1 = 0;                //禁止定时器1中断
  22.         TR1 = 1;                //启动定时器1
  23.         //开启中断
  24.         EA=1;        //总中断控制
  25.         ES=1;        //串口中断
  26. }
  27. void Uart_SendByte(unsigned char Byte)
  28. {
  29.     SBUF = Byte;   // 向缓存器中写入内容
  30.     while (TI == 0);   // 等待发送完成
  31.     TI = 0;        // 清除发送中断标志
  32. }
  33. void Uart_Routine(void) interrupt 4  // 串口接收中断
  34. {
  35.         unsigned char byte;
  36.        
  37.         //LCD_ShowString(2,1,"INTTERRUPT");
  38.     if (RI)  // 如果接收到数据
  39.     {
  40.         RI = 0;  // 清除接收中断标志
  41.          byte = SBUF;  // 读取接收到的数据
  42.         // 存入ReceiveData数组
  43.         if (ReceiveIndex < sizeof(ReceiveData) - 1)  // 确保不越界
  44.         {
  45.             ReceiveData[ReceiveIndex++] = byte;
  46.             ReceiveData[ReceiveIndex] = '\0';  // 添加字符串结束符
  47.         }
  48.         // 检查是否接收到复位字符
  49.         if (strcmp((const char *)ReceiveData, (const char *)reset_char) == 0)
  50.         {
  51.                                         ISP_CONTR = 0x60;
  52.             LCD_ShowString(2, 1, "reset");
  53.             ReceiveIndex = 0;  // 重置接收索引
  54.         }
  55.     }
  56. }
  57. void main()
  58. {
  59.     LCD_Init();
  60.     UartInit();
  61.    
  62.     LCD_ShowString(1, 1, "Hello!");
  63.     while (1)
  64.     {
  65.     }
  66. }
复制代码
试了一下,还真可以通过发送命令直接下载,但如果有一个新的程序下载进去,都必须把这段代码加上啊,有没有什么别的办法
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4849

回帖

8382

积分

超级版主

DebugLab

积分
8382
发表于 2024-10-31 19:34:56 | 显示全部楼层
纯软件解决只能用户程序中包含该功能
否则就用硬件检测是否要下载然后自动断电
DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:32 , Processed in 0.110899 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表