使用AI8051的软复位功能功能,实现芯片的不断电下载;
AI8051单片机的“不断电下载”功能,更新程序时,无需再手动断电、重新上电,整个过程在软件里就能自动完成,极大地提升了开发和调试的效率。
这个功能主要通过USB方式实现,也可以通过特定的硬件工具配合串口来完成
这是AI8051U最方便、最常用的方法,只需一根USB线连接电脑即可。关键在于在用户程序中集成一段特殊的“下载监控代码”。当电脑端的下载软件发送指令时,这段代码会“温柔地”复位单片机,使其进入下载模式,而整个过程电源始终保持接通。
实现起来也很简单,主要有两种途径:
使用官方工具自动生成(最简单):官方提供的 AiCube 图形化配置工具,可以一键生成包含“USB不停电下载”功能的工程代码框架。你只需要在工具中勾选相关选项,生成的代码就直接支持该功能,无需手动添加任何代码。
手动添加官方库文件:如果习惯自己写代码,可以从官网下载最新的 USB库文件,然后将库中的关键代码(如USB初始化、命令处理等)复制到你的主程序中。代码核心逻辑是在收到下载命令后,
关闭USB外设、将相关引脚(P30, P31)设置为高阻态,模拟USB断开,然后通过 IAP_CONTR = 0x60 软指令复位进入系统ISP区域。
二:实现步骤:
准备软件:前往官网下载最新版的 AIapp-ISP 或 AiCube 软件。
创建工程:打开AiCube,新建一个工程。在配置界面中找到并开启 “USB不停电下载” 或类似选项。
生成与编译:点击生成代码,然后用Keil等编译器编译工程,得到HEX或BIN文件。
首次下载:第一次使用,需要先通过传统的“按住P3.2按键 -> 上电 -> 松开按键”的方式,将生成的程序烧录进AI8051U。
体验便捷:首次烧录成功后,之后每次修改完代码,只需在ISP软件中点击“下载”,就能自动完成,全程无需再碰任何按键
三:软件代码
复位标志寄存器

SWRSTF:软复位标志
读0:无意义
读1:当前的复位是由软件写SWRST(IAP_CONTR.5)所触发(用户程序复位默认值为1)
写0:无效果
写1:清除SWRST标志位
3.1 程序初始化
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快 EAXFR = 1; //扩展寄存器(XFR)访问使能 CKCON = 0; //提高访问XRAM速度 RSTFLAG |= 0x04;
3.2 P3.2 按键处理函数
void KeyResetScan(void)
{
if(!P32)
{
if(!Key_Flag)
{
Key_cnt++;
if(Key_cnt >= 1000) //连续1000ms有效按键检测
{
Key_Flag = 1; //设置按键状态,防止重复触发
// USBCON = 0x00; //清除USB设置(程序进行过USB配置的话需要先清除)
// USBCLK = 0x00;
// IRC48MCR = 0x00;
delay_ms(10);
IAP_CONTR = 0x60; //触发软件复位,从ISP开始执行(软件复位会重新置位RSTFLAG,进入ISP后不需要判断P3.2电平)
while (1);
}
}
}
else
{
Key_cnt = 0;
Key_Flag = 0;
}
}3.2 下载之后,当按键P3.2时候,软件可以识别到 USB-writer

我要赚赏金
