找回密码
 立即注册
查看: 484|回复: 6

所有 普通 I/O口 都支持的 外部中断,AiCube@Ai8051U,强大的辅助开发工具再学习

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-13 21:34:06 | 显示全部楼层 |阅读模式
所有 普通 I/O口 都支持的 外部中断
下降沿产生中断,上升沿产生中断
低电平产生中断高电平产生中断

AiCube@Ai8051U,强大的辅助开发工具再学习
截图202504140930097623.jpg
下面演示,实际自动配置启动程序的步骤
截图202504132133523958.jpg
https://www.stcai.com/gjrj
先:扩展 KEIL C251 / KEIL C51 支持的中断号
===已扩展过,这一步就可省
截图202504132143156032.jpg
再:重新添加头文件
===如ISP软件升级,建议做下

下面是实际的 AiCube 的操作步骤
截图202504132134263095.jpg

截图202504132134559887.jpg

截图202504132135392655.jpg

截图202504132136229770.jpg

截图202504132137021521.jpg

截图202504140927219256.jpg

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-13 21:38:00 | 显示全部楼层
在嵌入式系统开发中,外部中断功能是提升系统响应速度和实时性的关键特性。Ai8051U作为一款高性能的微控制器,其所有普通I/O口均支持外部中断功能,这为开发者提供了极大的灵活性和便利性。通过外部中断,系统可以在不占用CPU资源的情况下,实时响应外部事件,从而优化系统性能。

AiCube@Ai8051U作为一款强大的辅助开发工具,进一步简化了开发流程。它不仅提供了丰富的库函数和示例代码,还支持实时调试和性能分析,帮助开发者快速定位和解决问题。通过AiCube,开发者可以更高效地学习和掌握Ai8051U的各项功能,缩短开发周期,提升产品质量。

在具体应用中,开发者可以根据需求配置I/O口的中断触发方式(如上升沿、下降沿或电平变化),并编写相应的中断服务程序(ISR)来处理事件。Ai8051U的中断优先级管理机制确保了高优先级事件能够及时得到处理,从而满足复杂系统的实时性要求。

此外,Ai8051U还提供了丰富的外设接口和通信协议支持,如UART、SPI、I2C等,进一步扩展了其应用范围。无论是工业控制、智能家居还是消费电子,Ai8051U都能提供稳定可靠的解决方案。

总之,Ai8051U凭借其强大的外部中断功能和AiCube辅助开发工具的支持,为嵌入式系统开发者提供了高效、便捷的开发体验。通过深入学习和实践,开发者可以充分发挥Ai8051U的潜力,打造出性能卓越的嵌入式应用。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-13 21:52:43 | 显示全部楼层
几个重要的设置图片

截图202504132150312506.jpg

截图202504132149578126.jpg

截图202504132152401203.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-13 21:56:35 | 显示全部楼层
截图202504132155244103.jpg


截图202504132156138930.jpg


////////////////////////////////////////
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-04-13) 创建文件
////////////////////////////////////////

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

////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    SYS_Init();

    while (1)
    {
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式

    CLK_Init();                         //时钟模块初始化
    PORT0_Init();                       //P0初始化
    PORT1_Init();                       //P1初始化
    PORT2_Init();                       //P2初始化
    PORT3_Init();                       //P3初始化
    PORT4_Init();                       //P4初始化
    PORT5_Init();                       //P5初始化

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

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

    do
    {
        i = MAIN_Fosc / 6000;
        while (--i);
    } while (--ms);
}

////////////////////////////////////////
// 端口3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_ISR(void) interrupt P3INT_VECTOR
{
    uint8_t intf;

    intf = CheckP3nFlag(BIT_ALL);       //读取中断请求标志
    ClearP3nFlag(BIT_ALL);              //清除中断请求标志
}


////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
    CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频

    HIRC_40M();                         //选择内部预置的频率

    CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
    CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择

    CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数

    CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
    CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数

    CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
    CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
    CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
    CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
    CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
}

////////////////////////////////////////
// P0口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT0_Init(void)
{
    SetP0nQuasiMode(BIT_ALL);           //设置P0为准双向口模式

    DisableP0nPullUp(BIT_ALL);          //关闭P0内部上拉电阻
    DisableP0nPullDown(BIT_ALL);        //关闭P0内部下拉电阻
    DisableP0nSchmitt(BIT_ALL);         //使能P0施密特触发
    SetP0nSlewRateNormal(BIT_ALL);      //设置P0一般翻转速度
    SetP0nDrivingNormal(BIT_ALL);       //设置P0一般驱动能力
    SetP0nDigitalInput(BIT_ALL);        //使能P0数字信号输入功能
}

////////////////////////////////////////
// P1口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT1_Init(void)
{
    SetP1nQuasiMode(BIT_ALL);           //设置P1为准双向口模式

    DisableP1nPullUp(BIT_ALL);          //关闭P1内部上拉电阻
    DisableP1nPullDown(BIT_ALL);        //关闭P1内部下拉电阻
    DisableP1nSchmitt(BIT_ALL);         //使能P1施密特触发
    SetP1nSlewRateNormal(BIT_ALL);      //设置P1一般翻转速度
    SetP1nDrivingNormal(BIT_ALL);       //设置P1一般驱动能力
    SetP1nDigitalInput(BIT_ALL);        //使能P1数字信号输入功能
}

////////////////////////////////////////
// P2口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_Init(void)
{
    SetP2nQuasiMode(BIT_ALL);           //设置P2为准双向口模式

    DisableP2nPullUp(BIT_ALL);          //关闭P2内部上拉电阻
    DisableP2nPullDown(BIT_ALL);        //关闭P2内部下拉电阻
    DisableP2nSchmitt(BIT_ALL);         //使能P2施密特触发
    SetP2nSlewRateNormal(BIT_ALL);      //设置P2一般翻转速度
    SetP2nDrivingNormal(BIT_ALL);       //设置P2一般驱动能力
    SetP2nDigitalInput(BIT_ALL);        //使能P2数字信号输入功能
}

////////////////////////////////////////
// P3口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_Init(void)
{
    SetP3nQuasiMode(BIT_ALL);           //设置P3为准双向口模式

    EnableP3nPullUp(0x3c);              //使能P3.5,P3.4,P3.3,P3.2内部上拉电阻
    DisableP3nPullUp(0xc3);             //关闭P3.7,P3.6,P3.1,P3.0内部上拉电阻
    DisableP3nPullDown(BIT_ALL);        //关闭P3内部下拉电阻
    DisableP3nSchmitt(BIT_ALL);         //使能P3施密特触发
    SetP3nSlewRateNormal(BIT_ALL);      //设置P3一般翻转速度
    SetP3nDrivingNormal(BIT_ALL);       //设置P3一般驱动能力
    SetP3nDigitalInput(BIT_ALL);        //使能P3数字信号输入功能

    SetP3nFallingInt(0x04);             //设置P3.2为下降沿中断
    SetP3nRisingInt(0x08);              //设置P3.3为上升沿中断
    SetP3nLowLevelInt(0x20);            //设置P3.5为低电平中断
    SetP3nHighLevelInt(0x10);           //设置P3.4为高电平中断

    SetP3nIntWaieup(0x3c);              //使能P3.5,P3.4,P3.3,P3.2唤醒STOP模式

    EnableP3nInt(0x3c);                 //使能P3.5,P3.4,P3.3,P3.2口中断

    SetP3IntPriority(0);                //设置中断为最低优先级
}

////////////////////////////////////////
// P4口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT4_Init(void)
{
    SetP4nQuasiMode(BIT_ALL);           //设置P4为准双向口模式

    DisableP4nPullUp(BIT_ALL);          //关闭P4内部上拉电阻
    DisableP4nPullDown(BIT_ALL);        //关闭P4内部下拉电阻
    DisableP4nSchmitt(BIT_ALL);         //使能P4施密特触发
    SetP4nSlewRateNormal(BIT_ALL);      //设置P4一般翻转速度
    SetP4nDrivingNormal(BIT_ALL);       //设置P4一般驱动能力
    SetP4nDigitalInput(BIT_ALL);        //使能P4数字信号输入功能
}

////////////////////////////////////////
// P5口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT5_Init(void)
{
    SetP5nQuasiMode(BIT_ALL);           //设置P5为准双向口模式

    DisableP5nPullUp(BIT_ALL);          //关闭P5内部上拉电阻
    DisableP5nPullDown(BIT_ALL);        //关闭P5内部下拉电阻
    DisableP5nSchmitt(BIT_ALL);         //使能P5施密特触发
    SetP5nSlewRateNormal(BIT_ALL);      //设置P5一般翻转速度
    SetP5nDrivingNormal(BIT_ALL);       //设置P5一般驱动能力
    SetP5nDigitalInput(BIT_ALL);        //使能P5数字信号输入功能
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-22 12:33:34
已绑定手机

0

主题

3

回帖

42

积分

新手上路

积分
42
发表于 2025-4-14 12:52:41 来自手机 | 显示全部楼层
STC
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-22 12:33:34
已绑定手机

0

主题

3

回帖

42

积分

新手上路

积分
42
发表于 2025-4-14 13:01:27 来自手机 | 显示全部楼层
我来冒个泡
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-04-30 08:16:39
已绑定手机

3

主题

35

回帖

987

积分

高级会员

积分
987
发表于 2025-4-15 08:11:32 | 显示全部楼层
强大
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 20:15 , Processed in 0.220128 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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