找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2654|回复: 17
打印 上一主题 下一主题
收起左侧

STC8G 8pin单片机P3.0和P3.1口不能检测高电平?

[复制链接]
跳转到指定楼层
楼主
ID:959051 发表于 2021-11-23 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我程序是当P3.0或者P3.1检测到高电平 做其他事情,但是发现无法检测外部高电平,程序初始化把P3.0和P3.1 都置0了。然后通过外部高电平检测。结果发现他们无法检测外部高电平,只能检测低电平,就是拉低能检测,拉高就检测不了。

单片机源程序如下:
  1. void main(void)
  2. {        

  3.         GPIO_config();
  4.         P54 = 1;
  5.         P55 = 1;
  6.         P30 = 0;
  7.         P31 = 0;
  8.         while(1)
  9.         {
  10.         //        out1 ();
  11.         //        out2 ();
  12.         if(P30 == 1)
  13.                 {P32 = 0;}
  14.         else P32 = 1;
  15.                                 
  16.         }
  17. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-11-23 21:43 | 只看该作者
你要检测外部电平,前提就是  IO = 1  
你IO=0 永远只能是0
回复

使用道具 举报

板凳
ID:959051 发表于 2021-11-23 21:48 | 只看该作者
188610329 发表于 2021-11-23 21:43
你要检测外部电平,前提就是  IO = 1  
你IO=0 永远只能是0

我IO=0  是想通过外部高电平检测进来。我也试了去掉IO =0,但是还是不行。
回复

使用道具 举报

地板
ID:57657 发表于 2021-11-23 22:26 | 只看该作者
若IO口为高电平,则可以被拉低,否则就短路了。
回复

使用道具 举报

5#
ID:959051 发表于 2021-11-24 08:07 | 只看该作者

RE: STC8G 8pin单片机P3.0和P3.1口不能检测高电平?

npn 发表于 2021-11-23 22:26
若IO口为高电平,则可以被拉低,否则就短路了。

我的问题是 P3.0和P3.1 能检测外部的低电平,也就是说只有外部给低电平的时候 单片机能检测到,我上面的程序是示范检测外部高电平的。
回复

使用道具 举报

6#
ID:752974 发表于 2021-11-24 08:36 | 只看该作者
注意看看IO口的初始化,若不是准双向IO口,则要配置成输入。
回复

使用道具 举报

7#
ID:70035 发表于 2021-11-24 08:59 | 只看该作者
P3.1、P3.0作为输入?那直接配置成输入就行了。
回复

使用道具 举报

8#
ID:314246 发表于 2021-11-24 09:17 | 只看该作者
要检测外部输入,必须 P30 = 1;   P31 = 1;否则无法检测,如平时一定要低电平,可以考虑增加合适的下拉电阻,但是必须 P30 = 1;   P31 = 1;
回复

使用道具 举报

9#
ID:25310 发表于 2021-11-24 11:40 | 只看该作者
   P0M1 = 0;   P0M0 = 0;   //设置为准双向口     P1M1 = 0;   P1M0 = 0;   //设置为准双向口     P2M1 = 0;   P2M0 = 0;   //设置为准双向口     P3M1 = 0;   P3M0 = 0;   //设置为准双向口     P4M1 = 0;   P4M0 = 0;   //设置为准双向口
回复

使用道具 举报

10#
ID:624769 发表于 2021-11-24 13:00 | 只看该作者
guoqiang881245 发表于 2021-11-23 21:48
我IO=0  是想通过外部高电平检测进来。我也试了去掉IO =0,但是还是不行。

有几个关键概念必须要掌握:
1)你要检测外部"高"电平,  首先要满足的条件是:  当外部不是"高"电平的时候, 外部必须得要是“低” 电平。
2)老生常谈的问题,IO电平只能被拉低不能被拉高,所以检测外部不管是“高电平”还是“低电平”,内部都必须是高电平, 检测的只是,IO电平被拉低,还是没有被拉低。 来推导出:外部是高电平还是低电平的结论。

这两个基本概念你搞清楚了,你现在的问题自然就不是问题。
回复

使用道具 举报

11#
ID:401564 发表于 2021-11-24 13:53 | 只看该作者
STC的老总把STC视为"国货之光"单片机
一个国货之光单片机竟然不能检测高电平,怎么可能嘛
前面几个网友已经给你正确的答案了
1,单片机必需要先设置端口的IO模式,虽然你用的P3.0和P3.1不用设置,但最好是要先设置,因为STC8G系列的都要先设置,不然就是高阻状态,
2,P3=0xff;
这个语句是一定要的
回复

使用道具 举报

12#
ID:959051 发表于 2021-11-24 18:33 | 只看该作者
188610329 发表于 2021-11-24 13:00
有几个关键概念必须要掌握:
1)你要检测外部"高"电平,  首先要满足的条件是:  当外部不是"高"电平的时 ...

谢谢你,按你说的搞定了。确实明白了你说的这两点,问题就迎刃而解了。
回复

使用道具 举报

13#
ID:959051 发表于 2021-11-24 18:34 | 只看该作者
188610329 发表于 2021-11-23 21:43
你要检测外部电平,前提就是  IO = 1  
你IO=0 永远只能是0

感谢回答!!
回复

使用道具 举报

14#
ID:959051 发表于 2021-11-24 18:34 | 只看该作者
munuc_w 发表于 2021-11-24 08:36
注意看看IO口的初始化,若不是准双向IO口,则要配置成输入。

感谢回答,谢谢!
回复

使用道具 举报

15#
ID:959051 发表于 2021-11-24 20:59 | 只看该作者
pcbboy 发表于 2021-11-24 11:40
P0M1 = 0;   P0M0 = 0;   //设置为准双向口     P1M1 = 0;   P1M0 = 0;   //设置为准双向口     P2M1 =  ...

感谢大佬帮忙,谢谢
回复

使用道具 举报

16#
ID:959051 发表于 2021-11-24 21:23 | 只看该作者
guoqiang881245 发表于 2021-11-24 20:59
感谢大佬帮忙,谢谢

大佬 设置准双向口能设置某个pin吗?你上面设置的是P0  P1 P2 P3 的所有口都是准双向吗?
回复

使用道具 举报

17#
ID:624769 发表于 2021-11-24 21:33 | 只看该作者
guoqiang881245 发表于 2021-11-24 21:23
大佬 设置准双向口能设置某个pin吗?你上面设置的是P0  P1 P2 P3 的所有口都是准双向吗?

说来话长……

最新版STC8G 手册 P.229 页 内容不多,自己看吧……
回复

使用道具 举报

18#
ID:959051 发表于 2021-11-26 09:11 | 只看该作者
188610329 发表于 2021-11-24 21:33
说来话长……

最新版STC8G 手册 P.229 页 内容不多,自己看吧……

已经搞明白了,谢谢大佬!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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