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

32G12K128 TSSOP20封装端口输出问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-2 21:34:10 | 显示全部楼层 |阅读模式
使用端口P17输出控制继电器,低电平继电器工作,高电平继电器停止,
P15作为输入,低电平变为高电平,继电器工作;

高电平变成低电平延时一段时间继电器停止,
如果一直为低电平延时时间够长继电器停止。
P54作为指示灯,继电器工作切换成停止后状态变化。

设置代码如下:

        sbit        LED_yellow      =           P5^4;        // 作为指示灯
        
        sbit        Relay_1      =           P1^7;        // 作为输出

        sbit        SCL      =           P1^5;         // 作为输入



        P1M0 = 0x80; P1M1 = 0x20;                // P17推挽输出,P15高阻输入


输出控制代码有的不起作用,不知道什么原因。

                        if(Add_flag == 1)                Delay_LastTime++;        // 开始计时
                        if(Add_flag == 0)                Relay_1 = 1;        // 停止继电器,---------- 不起作用 --------
                        if(Delay_LastTime > 60)                // 超过60秒停继电器
                        {
                                Delay_LastTime = 50;
                                Relay_1 = 1;      // ---------------------- 不起作用 ------------------------------------
                        }
                        if((Delay_LastTime > 30) && (SCL == 1))                // 超过30秒,都停继电器
                        {
                                Add_flag = 0;
                                Relay_1 = 1;      // ---------------------- 不起作用 ------------------------------------
                                LED_yellow = ~LED_yellow;                // 黄色指示灯        有变化,起作用                        
                        }

                        if((SCL == 1) && (Add_flag == 0))                        // SCL从0变为1,继电器输出
                        {
                                Delay_LastTime = 0;
                                Add_flag = 1;
                                Relay_1 = 0;        // 起作用                        
                        }

                        if((Delay_LastTime > 15) && (SCL == 0))                // 时间到,则停止继电器
                        {
                                Add_flag = 0;
                                Relay_1 = 1;        // 起作用
                        }




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-11-2 22:57:37 | 显示全部楼层
建议使用硬件仿真打断点进行测试。打到不执行的那一句,单步运行看看生不生效
你这个逻辑似乎有点小问题,捕获的是电平,而不是边沿信号。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-3 08:34:06 | 显示全部楼层
王*** 发表于 2024-11-2 22:57
建议使用硬件仿真打断点进行测试。打到不执行的那一句,单步运行看看生不生效
你这个逻辑似乎有点小问题, ...

捕获电平应该也可以的啊。在起作用的地方是可以的,为啥那两个地方不行呢?没搞明白,逻辑上也没错。
按照您说的改成边沿中断试试看,谢谢。

点评

给你改了个代码,你试试能不能用?24Mhz下进去就行 以下是演示视频,左边的LED模拟你的继电器,亮就是继电器打开了,右边LED模拟的是指示灯,在高电平超时的时候改变状态。 按键按下代表1,抬起就是0  详情 回复 发表于 2024-11-3 11:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-3 09:08:51 | 显示全部楼层
截图202411030908246870.jpg


截图202411030908473435.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-3 09:11:49 | 显示全部楼层
P15作为输入,低电平变为高电平,继电器工作;
高电平变成低电平延时一段时间继电器停止,
如果一直为低电平延时时间够长继电器停止。


===这个描述,应该是开个 1mS 的定时器中断,去检测 P1.5
===正好去干扰,反应不要那么 快


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:265
  • 最近打卡:2025-05-01 07:25:06

0

主题

206

回帖

1522

积分

金牌会员

积分
1522
发表于 2024-11-3 09:30:20 | 显示全部楼层
本帖最后由 大叶子 于 2024-11-3 09:34 编辑

我感觉,好像是,硬件的引脚端,要有个下拉,会不会,好点。

程序启动,先,全部,强制,关闭端口输出,待有信号后,再执行,操作相关继电器。


再申明,执行个,延时函数,会不会,好点。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-11-3 11:12:24 | 显示全部楼层
give*** 发表于 2024-11-3 08:34
捕获电平应该也可以的啊。在起作用的地方是可以的,为啥那两个地方不行呢?没搞明白,逻辑上也没错。
按 ...

给你改了个代码,你试试能不能用?24Mhz下进去就行

demo代码@24Mhz.zip (49.62 KB, 下载次数: 33)

以下是演示视频,左边的LED模拟你的继电器,亮就是继电器打开了,
右边LED模拟的是指示灯,在高电平超时的时候改变状态。
按键按下代表1,抬起就是0



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-4 10:55:05 | 显示全部楼层
王*** 发表于 2024-11-3 11:12
给你改了个代码,你试试能不能用?24Mhz下进去就行

谢谢大神
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-9 16:55:09 | 显示全部楼层
神*** 发表于 2024-11-3 09:11
P15作为输入,低电平变为高电平,继电器工作;
高电平变成低电平延时一段时间继电器停止,
如果一直为低电 ...

没考虑消抖的问题,谢谢 回复
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-10 11:28:21 | 显示全部楼层
王*** 发表于 2024-11-3 11:12
给你改了个代码,你试试能不能用?24Mhz下进去就行

根据提供的代码已经实现功能,谢谢。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:06 , Processed in 0.191425 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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