找回密码
 立即注册
查看: 657|回复: 11

程序自动生成, STC89C52RC系列各功能模块, AiCube-ISP V6.95Y, 7/11

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-5 13:12:21 | 显示全部楼层 |阅读模式
截图202507120810594311.jpg

截图202507110003492065.jpg


先下载 强大的 AiCube-ISP-V6.95Y
ISP烧录图形化各功能模块程序自动生成器

截图202507072337092917.jpg
深圳国芯人工智能有限公司-工具软件

最新 STC89C52RC/RD+ 系列数据手册,可从此下载
截图202507101355477154.jpg
https://www.stcaimcu.com/data/do ... /STC89C52RC-RD+.pdf

建议用强大的 AiCube-ISP-V6.95Y,ISP烧录及图形化各功能模块程序自动生成器

在学习完《单片机原理应用》的相应原理部分后,来图形化加速实战应用
STC89C52RC系列各功能模块AiCube程序自动生成@AiCube-ISP V6.95Y

AiCube-ISP V6.95Y 软件发布,又名 STC-ISP Ver6.95Y
AiCube工具 已支持STC89C52RC系列的各功能模块自动配置程序框架自动生成
AiCube工具支持STC15F2K60S2系列的
各功能模块自动配置程序框架自动生成
AiCube工具支持STC15W4K32S4系列的
各功能模块自动配置程序框架自动生成
AiCube工具支持Ai8051U系列的
各功能模块自动配置程序框架自动生成
AiCube工具支持STC8H8K64U系列的
各功能模块自动配置程序框架自动生成
AiCube工具支持STC32G12K128系列的
各功能模块自动配置程序框架自动生成
===管脚少的型号,可以用 同系列 管脚多的 型号 来配置,自动生成程序


选择MCU型号,需要 自动生成各功能模块程序的 MCU型号:
1, STC89C52RC@AiCube-选择要自动配置生成程序的MCU型号STC89C52RC系列
截图202507072148322745.jpg

自动配置好 后续 KEIL C51编译器 的编译及链接选项:
并设置自动配置完成后,是否用 KEIL 自动打开 本项目
2, STC89C52RC@AiCube-设置KEIL编译器连接器的配置项, 用默认是最优

截图202507072155065867.jpg

根据实际情况输入:
24MHz, 22.1184MHz,12MHz, 11.0592MHz等
后续才好 自动计算生成【定时器,串行口,软件延时】的程序
通知 AiCube 外部晶振频率22.1184MHz

3, STC89C52RC@AiCube-通知MCU的工作时钟频率,方便定时器串行口软件延时自动计算

截图202507072158241413.jpg

设置 外部中断 0
4, STC89C52RC@AiCube-配置外部中断0

截图202507072212549499.jpg

设置 外部中断 1
5, STC89C52RC@AiCube-配置外部中断0-1
截图202507072215115986.jpg

设置 外部中断 2
6, STC89C52RC@AiCube-配置外部中断0-1-2
截图202507072217549053.jpg

设置 外部中断 3
7, STC89C52RC@AiCube-配置外部中断0-1-2-3
截图202507072220394464.jpg


设置 16位不可自动重载 的  定时器 0
注意中断服务程序入口处,
要重新设置 定时器 0 从哪开始计数

8, STC89C52RC@AiCube-配置定时器0-16位不自动重装载
截图202507072236073565.jpg

设置 16位自动重载 的  定时器 2
9, STC89C52RC@AiCube-配置定时器2-16位自动重装载
截图202507072241149955.jpg


设置 串口 1
只能8位自动重载的定时器1做波特率发生器
不浪费 16位自动重载 的  定时器 2 的性能

10, STC89C52RC@AiCube-配置-串行口-定时器1做波特率发生器
截图202507072245277982.jpg

一路 设置下来,最后点击 那个 播放键
自动产生 需要的 Keil C51 项目

11, STC89C52RC@AiCube-点击那个播放的按键-是产生KEIL-C51项目
截图202507072250539704.jpg
点击 【确定按钮】后,KEIL C51 会 自动打开 这次自动生成的工程项目

下面这个截图,展示了 INT0/INT1 部分:

12, STC89C52RC@AiCube-查看产生的KEIL-C51项目-外部中断0-1
截图202507072301443424.jpg

下面这个截图,展示了 INT2/INT3 部分:
13, STC89C52RC@AiCube-查看产生的KEIL-C51项目-外部中断2-3
截图202507072302361324.jpg

下面这个截图,展示了 T0 部分:
14, STC89C52RC@AiCube-查看产生的KEIL-C51项目-定时器-T0
截图202507072304509763.jpg

下面这个截图,展示了 T2 部分:
15, STC89C52RC@AiCube-查看产生的KEIL-C51项目-定时器-T2
截图202507072306161333.jpg

下面这个截图,展示了 UART1/串口1 部分:
16, STC89C52RC@AiCube-查看产生的KEIL-C51项目-串行口
截图202507072307397069.jpg

STC89C52RC系列各功能模块AiCube 截图,本楼附件下载,2025/7/11
截图202507110900597792.jpg
STC89C52RC系列各功能模块AiCube程序自动生成@AiCube-ISP-V6.95Y


图形化程序自动生成, STC89C52RC@AiCube-ISP-V6.95Y, 20250711.zip

7.9 MB, 下载次数: 21

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-7 23:12:39 | 显示全部楼层
截图202507072311224329.jpg

截图202507072311581944.jpg
生成的 *.HEX 目标文件,可烧录到 STC89C52RC 中运行




STC89C52RC@AiCube-TEST1.zip

46.93 KB, 下载次数: 4

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-5 13:45:29 | 显示全部楼层
截图202507072310117011.jpg
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息  
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-07-07) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含  
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明  
//<<AICUBE_USER_GLOBAL_DEFINE_END>>


BOOL fPrintfBusy;


////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码  
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码  
    printf("Hello World !\n");
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
        //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
        // 在此添加主函数中用户主循环代码  
        //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    CLK_Init();             //时钟模块初始化
    TIMER0_Init();          //定时器0初始化
    TIMER2_Init();          //定时器2初始化
    UART1_Init();           //串口1初始化
    EXTI0_Init();           //INT0初始化
    EXTI1_Init();           //INT1初始化
    EXTI2_Init();           //INT2初始化
    EXTI3_Init();           //INT3初始化

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();      //使能全局中断
}

////////////////////////////////////////
// 微秒延时函数
// 入口参数: us (设置延时的微秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_us(uint16_t us)
{
    us /= 16;
    while (us--)
    {
        NOP(18);
    }
}


////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
        i = MAIN_Fosc * (1 + EN6T) / 96000;
        while (--i);
    } while (--ms);
}

////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
    //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_CLOCK_INITIAL_END>>
}

////////////////////////////////////////
// 定时器0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_Init(void)
{
#define T0_RELOAD               (65536 - (float)SYSCLK * (1 + EN6T) / 12 * 2 / 1000)

    TIMER0_TimerMode();                 //设置定时器0为定时模式
    TIMER0_Mode1();                     //设置定时器0为模式1 (16位不自动重载模式)
    TIMER0_DisableGateINT0();           //禁止定时器0门控
    TIMER0_SetIntPriority(3);           //设置中断为最高优先级
    TIMER0_EnableInt();                 //使能定时器0中断
    TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
    TIMER0_Run();                       //定时器0开始运行

    //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_TIMER0_INITIAL_END>>
}

////////////////////////////////////////
// 定时器2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER2_Init(void)
{
#define T2_RELOAD               (65536 - (float)SYSCLK * (1 + EN6T) / 12 * 5 / 1000)

    TIMER2_TimerMode();                 //设置定时器2为定时模式
    TIMER2_SetIntPriority(0);           //设置中断为最低优先级
    TIMER2_EnableInt();                 //使能定时器2中断
    TIMER2_SetReload16(T2_RELOAD);      //设置定时器2的16位重载值
    TIMER2_Run();                       //定时器2开始运行

    //<<AICUBE_USER_TIMER2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_TIMER2_INITIAL_END>>
}

////////////////////////////////////////
// 串口1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART1_Init(void)
{
#ifdef BAUDRATE
#undef BAUDRATE
#endif
#define BAUDRATE                (115200)
#define T1_RELOAD               (256 - (SYSCLK * (1 + EN6T) / BAUDRATE / 12 + 8) / 16)

    UART1_Timer1BRT();                  //选择定时器1作为串口1波特率发生器
    UART1_BaudrateX2();                 //串口1波特率加倍
    TIMER1_TimerMode();                 //设置定时器1为定时模式
    TIMER1_Mode2();                     //设置定时器1为模式2 (8位自动重载模式)
    TIMER1_SetReload8(T1_RELOAD);       //设置定时器1的8位重载值
    TIMER1_Run();                       //定时器1开始运行

    UART1_EnableRx();                   //使能串口1接收数据
    UART1_Mode1();                      //设置串口1为模式1 (8位数据可变波特率)
    UART1_SetIntPriority(0);            //设置中断为最低优先级
    UART1_EnableInt();                  //使能串口1中断

    fPrintfBusy = 0;                    //清除发送数据忙标志

    //<<AICUBE_USER_UART1_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_UART1_INITIAL_END>>
}

////////////////////////////////////////
// 重写printf字符发送重定向函数
// 入口参数: dat (printf函数待打印的字符)
// 函数返回: 需要返回入口参数的数据
////////////////////////////////////////
char putchar (char dat)                 //将串口1和printf函数绑定
{
    while (fPrintfBusy);
    UART1_SendData(dat);
    fPrintfBusy = 1;

    return dat;
}

////////////////////////////////////////
// 外部中断INT0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_Init(void)
{
    INT0_FallingInt();          //设置外部中断为下降沿中断
    INT0_SetIntPriority(3);     //设置中断为最高优先级
    INT0_EnableInt();           //使能外部中断

    //<<AICUBE_USER_EXTI0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_EXTI0_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_Init(void)
{
    INT1_FallingInt();           //设置外部中断为下降沿中断
    INT1_SetIntPriority(2);      //设置中断为较高优先级
    INT1_EnableInt();            //使能外部中断

    //<<AICUBE_USER_EXTI1_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_EXTI1_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI2_Init(void)
{
    INT2_FallingInt();                  //设置外部中断为下降沿中断
    INT2_SetIntPriority(1);             //设置中断为较低优先级
    INT2_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_EXTI2_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT3初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI3_Init(void)
{
    INT3_FallingInt();                  //设置外部中断为下降沿中断
    INT3_SetIntPriority(0);             //设置中断为最低优先级
    INT3_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI3_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_EXTI3_INITIAL_END>>
}


////////////////////////////////////////
// 定时器0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_ISR(void) interrupt TMR0_VECTOR
{
    TIMER0_SetReload16(T0_RELOAD);  //重置定时器0的16位重载值      

    //<<AICUBE_USER_TIMER0_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    //<<AICUBE_USER_TIMER0_ISR_CODE1_END>>
}

////////////////////////////////////////
// 定时器2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER2_ISR(void) interrupt TMR2_VECTOR
{
    //<<AICUBE_USER_TIMER2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码                                          
    if (TIMER2_CheckFlag())     //判断定时器中断
    {
        TIMER2_ClearFlag();     //清除中断标志
    }

    if (EXF2_CheckFlag())       //判断定时器外部中断
    {
        EXF2_ClearFlag();       //清除外部中断标志
    }
    //<<AICUBE_USER_TIMER2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 串口1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART1_ISR(void) interrupt UART1_VECTOR
{
    //<<AICUBE_USER_UART1_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码                              
    if (UART1_CheckTxFlag())     //判断串口发送中断
    {
        UART1_ClearTxFlag();     //清除串口发送中断标志

        fPrintfBusy = 0;         //清除printf发送忙标志
    }

    if (UART1_CheckRxFlag())     //判断串口接收中断
    {
        UART1_ClearRxFlag();     //清除串口接收中断标志
    }
    //<<AICUBE_USER_UART1_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_ISR(void) interrupt INT0_VECTOR
{
    //<<AICUBE_USER_EXTI0_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    //<<AICUBE_USER_EXTI0_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_ISR(void) interrupt INT1_VECTOR
{
    //<<AICUBE_USER_EXTI1_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    //<<AICUBE_USER_EXTI1_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI2_ISR(void) interrupt INT2_VECTOR
{
    //<<AICUBE_USER_EXTI2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码                       
    //<<AICUBE_USER_EXTI2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI3_ISR(void) interrupt INT3_VECTOR
{
    //<<AICUBE_USER_EXTI3_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    //<<AICUBE_USER_EXTI3_ISR_CODE1_END>>
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码  
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:197
  • 最近打卡:2025-07-17 05:31:44

131

主题

173

回帖

438

积分

中级会员

积分
438
发表于 2025-7-5 18:00:54 | 显示全部楼层
功能越来越全了!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-07-17 08:47:07

12

主题

115

回帖

1528

积分

金牌会员

积分
1528
发表于 2025-7-6 15:14:10 | 显示全部楼层
越来越完善了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-07-17 08:30:41
已绑定手机

2

主题

81

回帖

1084

积分

金牌会员

积分
1084
发表于 2025-7-6 21:26:23 | 显示全部楼层
官方的服务无微不至程序框架自动生成,基础应用及驱动都备上了;
客户们应用场景实际需求,开拓思维缜密设置构思产品的未来,
加油!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-10 16:43:42 | 显示全部楼层
截图202507101643159530.jpg
【新提醒】图形化程序自动生成, STC15F2K60S2系列各功能模块, AiCube@ISP-V6.95Y,7/9 - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯技术交流网站 - AI32位8051交流社区
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-10 20:54:47 | 显示全部楼层
STC89系列的范例程序从这下载:
截图202507161147264034.jpg

截图202507102054016766.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-07-17 07:59:26

757

主题

1万

回帖

1万

积分

管理员

积分
17867
发表于 2025-7-10 20:59:01 | 显示全部楼层
全自动停电上电ISP下载线路图, STC89C52RC
截图202507102058032721.jpg

点评

这种方式貌似用Aicube-ISP才能识别到USB-CDC串口,换上位机的话就不能正常识别了,有没有什么解决办法呢?  详情 回复 发表于 前天 11:04
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-07-17 08:09:03
已绑定手机

5

主题

19

回帖

794

积分

版主

积分
794
发表于 前天 11:04 | 显示全部楼层
神*** 发表于 2025-7-10 20:59
全自动停电上电ISP下载线路图, STC89C52RC

这种方式貌似用Aicube-ISP才能识别到USB-CDC串口,换上位机的话就不能正常识别了,有没有什么解决办法呢?

点评

只要CDC正常,设备管理器里就有串口的,别的软件可以直接用 [attachimg]108683[/attachimg]  详情 回复 发表于 前天 11:36
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-18 05:44 , Processed in 0.142710 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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