所有 普通 I/O口 都支持的 外部中断,AiCube@Ai8051U,强大的辅助开发工具再学习
所有 普通 I/O口 都支持的 外部中断,下降沿产生中断,上升沿产生中断,
低电平产生中断,高电平产生中断
AiCube@Ai8051U,强大的辅助开发工具再学习
下面演示,实际自动配置启动程序的步骤
https://www.stcai.com/gjrj
先:扩展 KEIL C251 / KEIL C51 支持的中断号
===已扩展过,这一步就可省
再:重新添加头文件
===如ISP软件升级,建议做下
下面是实际的 AiCube 的操作步骤
在嵌入式系统开发中,外部中断功能是提升系统响应速度和实时性的关键特性。Ai8051U作为一款高性能的微控制器,其所有普通I/O口均支持外部中断功能,这为开发者提供了极大的灵活性和便利性。通过外部中断,系统可以在不占用CPU资源的情况下,实时响应外部事件,从而优化系统性能。
AiCube@Ai8051U作为一款强大的辅助开发工具,进一步简化了开发流程。它不仅提供了丰富的库函数和示例代码,还支持实时调试和性能分析,帮助开发者快速定位和解决问题。通过AiCube,开发者可以更高效地学习和掌握Ai8051U的各项功能,缩短开发周期,提升产品质量。
在具体应用中,开发者可以根据需求配置I/O口的中断触发方式(如上升沿、下降沿或电平变化),并编写相应的中断服务程序(ISR)来处理事件。Ai8051U的中断优先级管理机制确保了高优先级事件能够及时得到处理,从而满足复杂系统的实时性要求。
此外,Ai8051U还提供了丰富的外设接口和通信协议支持,如UART、SPI、I2C等,进一步扩展了其应用范围。无论是工业控制、智能家居还是消费电子,Ai8051U都能提供稳定可靠的解决方案。
总之,Ai8051U凭借其强大的外部中断功能和AiCube辅助开发工具的支持,为嵌入式系统开发者提供了高效、便捷的开发体验。通过深入学习和实践,开发者可以充分发挥Ai8051U的潜力,打造出性能卓越的嵌入式应用。
[本文内容由国芯人工智能辅助生成,仅供参考] 几个重要的设置图片
////////////////////////////////////////
// 文件名称: 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数字信号输入功能
}
STC 我来冒个泡 强大
页:
[1]