找回密码
 立即注册
查看: 31|回复: 9

AI8051U遇到问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-10-13 15:11:03

21

主题

39

回帖

233

积分

中级会员

积分
233
发表于 昨天 15:11 | 显示全部楼层 |阅读模式
我们开发一款产品,需要接收对方的时钟信号和启动信号,然后按对方的时钟时序发送数据(低电平发送数据)。
现在的问题是:
1、我想利用对方的启动信号作为外部中断信号,中断处理后开始输出数据。
外部中断INT1的P3.3需要中断后作为IO口输出数据,需要怎样配置。
我现在能够检测中断并进入中断处理程序,但无法输出数据或者输出数据乱码。


或者外部的SDA信号线分别接INT1外部中断脚和另外IO输出引脚,INT1引脚作为中断检测,另外IO口作为数据输出口。
可以吗?两脚之间需要怎么简单的隔离吗?直接连接我试过了,不行



回复

使用道具 举报 送花

3

主题

1888

回帖

624

积分

等待验证会员

积分
624
发表于 昨天 15:12 | 显示全部楼层
您好,感谢您对国芯AI8051U微控制器的使用与反馈。针对您在项目中遇到的问题,以下将从硬件配置、中断处理流程、GPIO控制以及可能的干扰问题进行详细分析与建议,希望对您有所帮助。

一、问题分析

您当前的需求是:利用外部启动信号触发中断,进入中断服务程序后,根据外部时钟信号(CLK)的时序,在每个CLK下降沿输出一位数据(SDA为低电平有效)。当前遇到的问题包括:

1. 中断可以触发,但无法正确输出数据或输出乱码;
2. 尝试将INT1(P3.3)既作为中断输入,又作为数据输出引脚,但未成功;
3. 尝试使用两个引脚分别用于中断检测与数据输出,但直接连接无效,是否需要隔离?

二、硬件配置建议

1. 引脚功能配置

AI8051U 的 P3.3(INT1) 是一个多功能引脚,既可以作为外部中断输入,也可以作为通用GPIO使用。但在中断触发后,仍需将其重新配置为输出引脚以控制SDA线。

推荐配置流程如下:
在主程序中,将P3.3配置为外部中断输入模式(即下降沿触发);
在中断服务程序中,将P3.3切换为推挽输出模式,用于控制SDA数据线;
注意:部分8051内核芯片的中断引脚在作为中断输入时,默认为高阻态输入,需手动配置为输出模式。

示例代码片段(Keil C51语法):
  1. c
  2. void INT1Init(void) {
  3.     IT1 = 1;        // 设置INT1为下降沿触发
  4.     EX1 = 1;        // 使能外部中断1
  5.     EA = 1;         // 开启全局中断
  6. }
  7. void INT1ISR(void) interrupt 2 {
  8.     // 关闭INT1中断,防止重复触发
  9.     EX1 = 0;
  10.     // 将P3.3设置为推挽输出
  11.     P3M1 &= ~0x08;  // P3.3 = 00 -> 推挽输出
  12.     P3M0 |= 0x08;
  13.     // 开始发送数据
  14.     SendData();
  15. }
复制代码

2. 数据输出时序控制

由于您需要在每个CLK下降沿发送一位数据,建议采用以下方式:
使用定时器或延时函数精确控制发送时序;
若CLK频率固定,可考虑使用定时器中断配合计数器逐位发送;
若CLK频率较低,可采用查询方式,在中断中轮询CLK引脚状态。

三、关于使用两个引脚分别用于中断和输出的可行性

您提到的方案:使用INT1引脚作为中断检测,使用另一个GPIO引脚作为SDA输出,是完全可行的。这在实际工程中是更常见且更可靠的做法。

1. 为何不能直接连接?
电气冲突:如果两个引脚都连接到同一根SDA线上,而其中一个为输入、另一个为输出,可能导致电平冲突;
驱动能力不足:多个引脚同时驱动同一信号线,可能导致输出不稳定或损坏IO口;
逻辑混乱:软件控制不清晰,容易造成输出数据错误。

2. 是否需要隔离?

建议使用缓冲/驱动芯片或简单的MOSFET隔离电路,确保中断引脚仅用于检测,输出引脚仅用于驱动SDA线。

简易解决方案如下:
使用一个双向缓冲器(如74LVC245)或单向缓冲器,将中断检测与数据输出隔离;
或者使用一个N沟道MOSFET(如2N7002)作为开关,控制SDA线的驱动;
若SDA线仅需单向输出,可直接使用两个引脚分别控制,无需连接在一起。

3. 示例引脚分配建议:

| 引脚 | 功能         | 配置方式         |
|------|--------------|------------------|
| P3.3 | 启动信号检测 | 输入,下降沿触发 |
| P1.0 | SDA数据输出  | 推挽输出         |

四、调试建议与常见问题排查

1. 中断无法响应或响应延迟
检查中断优先级设置;
检查是否在中断服务程序中未清除中断标志(部分芯片需手动清标志);
检查主程序是否开启了全局中断(EA = 1);

2. 输出数据乱码
检查发送时序是否与CLK严格同步;
检查是否在中断服务程序中误用了延时函数(可能导致中断嵌套或响应延迟);
检查GPIO配置是否正确(输入/输出模式);
使用示波器或逻辑分析仪检查CLK与SDA的时序关系。

3. 多引脚冲突问题
确保不同功能的引脚不要连接到同一物理信号线;
若必须连接,需通过缓冲器、隔离电路或复用逻辑进行控制;
检查是否有外部上拉/下拉电阻影响输出电平。

五、总结与建议

针对您的问题,建议如下:

1. 使用P3.3作为中断输入,P1.x作为SDA输出,两个引脚物理隔离;
2. 中断服务程序中重新配置P3.3为输出或直接使用另一个IO口;
3. 避免多个引脚驱动同一信号线,防止冲突;
4. 使用示波器或逻辑分析仪辅助调试时序问题;
5. 若CLK频率较高,建议使用定时器中断实现精确控制。

如需更详细的代码示例或硬件设计建议,欢迎继续提问。

祝您的项目顺利!

国芯人工智能  
2025年4月5日

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:206
  • 最近打卡:2025-10-13 01:10:06

787

主题

1万

回帖

1万

积分

管理员

积分
19710
发表于 昨天 15:14 | 显示全部楼层
把你原理图的 PDF 贴出来,大家帮你分析
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:590
  • 最近打卡:2025-10-13 10:38:33
已绑定手机
已实名认证

116

主题

2881

回帖

7342

积分

版主

积分
7342
发表于 昨天 15:23 | 显示全部楼层
首先要做的是,进入中断以后给INT中断先关上,不然你操作输出他也会触发中断的。
然后发送完成后,再打开INT中断,不可能说只检测启动信号,你发数据只要由变化都会进入中断的,只能依靠主动关闭中断这样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 15:25:10
已绑定手机

0

主题

3

回帖

14

积分

新手上路

积分
14
发表于 昨天 15:25 | 显示全部楼层
神*** 发表于 2025-10-13 15:14
把你原理图的 PDF 贴出来,大家帮你分析

连接比较简单,所以还没有画图。就直接SCL接P3.3, SDA接P3.4脚。P3.3是INT1。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 15:25:10
已绑定手机

0

主题

3

回帖

14

积分

新手上路

积分
14
发表于 昨天 15:28 | 显示全部楼层
王*** 发表于 2025-10-13 15:23
首先要做的是,进入中断以后给INT中断先关上,不然你操作输出他也会触发中断的。
然后发送完成后,再打开IN ...

是的,就这样做的,先关中断,然后输出数据,再开中断。这样输出的数据乱码。现在是关掉INT1的中断后,要怎么配置一下INT1脚,可以恢复进行IO口功能??

点评

不用配置,在准双向口模式下,只要输出1,那么就由弱上拉保持高电平,此时外部输入可以为1可以为0,直接读就行。 或者使用推挽模式输出,则在输出完后切换到高阻模式+内部上拉电阻打开,也可以进入输出方式 输出和  详情 回复 发表于 昨天 15:40
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:590
  • 最近打卡:2025-10-13 10:38:33
已绑定手机
已实名认证

116

主题

2881

回帖

7342

积分

版主

积分
7342
发表于 昨天 15:40 | 显示全部楼层
LXD3*** 发表于 2025-10-13 15:28
是的,就这样做的,先关中断,然后输出数据,再开中断。这样输出的数据乱码。现在是关掉INT1的中断后,要 ...

不用配置,在准双向口模式下,只要输出1,那么就由弱上拉保持高电平,此时外部输入可以为1可以为0,直接读就行。
或者使用推挽模式输出,则在输出完后切换到高阻模式+内部上拉电阻打开,也可以进入输出方式
输出和输入本来就是接一块的,互不影响
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:582
  • 最近打卡:2025-10-13 07:04:38
已绑定手机

86

主题

6250

回帖

1万

积分

超级版主

积分
11682
发表于 昨天 16:03 | 显示全部楼层
同步串行通信看看能不能用硬件SPI或USART,AI8051U的SPI支持交换MOSI和MISO,还可使用IO中断,P32/SCLK_4/INT0和P33/MISO_4/INT1可以使用支持上升沿或下降沿的外部中断,总之是很灵活的,建议上传时序图具体分析
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 15:25:10
已绑定手机

0

主题

3

回帖

14

积分

新手上路

积分
14
发表于 昨天 16:04 | 显示全部楼层
王*** 发表于 2025-10-13 15:40
不用配置,在准双向口模式下,只要输出1,那么就由弱上拉保持高电平,此时外部输入可以为1可以为0,直接 ...

就是关中断后,不用配置吗,直接就输出数据??我试过,这样不行啊

点评

那可能是你的io模式不对,需要检查一下  详情 回复 发表于 昨天 19:04
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:590
  • 最近打卡:2025-10-13 10:38:33
已绑定手机
已实名认证

116

主题

2881

回帖

7342

积分

版主

积分
7342
发表于 昨天 19:04 | 显示全部楼层
LXD3*** 发表于 2025-10-13 16:04
就是关中断后,不用配置吗,直接就输出数据??我试过,这样不行啊

那可能是你的io模式不对,需要检查一下
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-14 08:07 , Processed in 0.159051 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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