打印

好大一个坑,请教PIC12F508A 端口做输入时不是高阻态

[复制链接]
4907|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
largef|  楼主 | 2013-3-4 23:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
请教PIC12F508A 端口做输入问题(线路和C语言如下):
GP0和GP1做输入时,用示波器量测默认5V。
GP0和GP1的侦查电路无法把GP0和GP1拉高或拉低
侦查电路断开12F508A后是可以动作的,接上单片机后就无法动作,零件阻值大小都试过。
直接用GP0或GP1不接侦查电路,直接去点+5V或GND,程序输出是可以满足要求的

我做了一个实验GP0或GP1接一个1K电阻,电阻另一端点+5V或GND,也是不能拉高或拉低,是不是PIC12F508A 端口做输入不是高阻态?
求DX赐教!

PIC12F508A 端口输入问题.pdf (26.88 KB)



#include <pic.h>
__CONFIG(MCLRDIS&WDTDIS&PROTECT&INTRC);  
unsigned int i;
void delay_min (unsigned int min)
{
for (i=0;i<min;i++)
{
   delay (5000);
}
}

void main()
{
  int count = 0;
TRIS = 011111;
OPTION = 0x00;
  GP5 = 1;
while(1)
{
  if (GP0==0)   // GP0是声控输入脚
  {
   GP5=0; //GP5推动光耦
   delay_min(1); //1是85秒
   GP5=1;
  }
  if (GP1==1)   // GP0是声控输入脚
  {
   GP5=0; //GP5推动光耦
   delay_min(1);
   GP5=1;
  }

}
}

相关帖子

沙发
largef|  楼主 | 2013-3-4 23:39 | 只看该作者
顶一下,自己先坐一个沙发!

使用特权

评论回复
板凳
原野之狼| | 2013-3-5 08:53 | 只看该作者
是不是高阻输入  查看数据手册io接口一小节便知道  

使用特权

评论回复
地板
youss| | 2013-3-5 08:59 | 只看该作者
看这个

508.JPG (94.76 KB )

508.JPG

使用特权

评论回复
5
laoxu| | 2013-3-5 09:00 | 只看该作者
未看数据手册,怀疑LZ将其设置成“准IO口”了

使用特权

评论回复
6
zhaoyu2005| | 2013-3-5 09:33 | 只看该作者
对比下端口的驱动电流要求和光耦的驱动电流就知道了,貌似GP0的应该正常驱动,如果这个驱动不了,那你的光耦的驱动能力太弱了

使用特权

评论回复
7
ocon| | 2013-3-5 19:36 | 只看该作者
假设描述的情况正确,唯一的解释是芯片坏了,不过大多数情况下是描述错误。

使用特权

评论回复
8
gx_huang| | 2013-3-5 20:07 | 只看该作者
TRIS = 011111;
上面这个语句是什么意思?

使用特权

评论回复
9
largef|  楼主 | 2013-3-5 21:28 | 只看该作者
laoxu 发表于 2013-3-5 09:00
未看数据手册,怀疑LZ将其设置成“准IO口”了

请教DX什么是"准IO口"要如何设置?

使用特权

评论回复
10
largef|  楼主 | 2013-3-5 21:37 | 只看该作者
本帖最后由 largef 于 2013-3-5 21:39 编辑
gx_huang 发表于 2013-3-5 20:07
TRIS = 011111;
上面这个语句是什么意思?



设置12F508A的端口状态,508A只有6个端口所以用二进制设置为011111(GP5为输出,GP0~GP4为输入),大侠的意思要改成TRIS =0X1F吗?

如果是语句错误,为啥我用GP0或GP1去点+5V 或 GND,GP5输出又是正常的?

使用特权

评论回复
11
NE5532| | 2013-3-5 22:22 | 只看该作者
“用GP0或GP1去点+5V 或 GND”,“点”是啥意思?看不懂。

使用特权

评论回复
12
largef|  楼主 | 2013-3-6 14:27 | 只看该作者
NE5532 发表于 2013-3-5 22:22
“用GP0或GP1去点+5V 或 GND”,“点”是啥意思?看不懂。

就是用GP0接到+5V或GND

使用特权

评论回复
13
thanklei| | 2013-3-6 14:27 | 只看该作者
本帖最后由 thanklei 于 2013-3-6 14:28 编辑

端口配置语句错误,你把GP0\GP1和GP2配置为输出的,应改为TRIS = 0B00011111,PIC单片机端输出能力为20MA,你把端口强制短接到VDD或GND是可以拉到1或0的,你用1K的电阻为什么不行,是因为拉电流只有5MA。

使用特权

评论回复
14
NE5532| | 2013-3-6 14:34 | 只看该作者
largef 发表于 2013-3-6 14:27
就是用GP0接到+5V或GND

把一个端口接到电源,关另外一个端口“正常”啥事?我想给楼主传达的就是,楼主的思维有点乱。

使用特权

评论回复
15
largef|  楼主 | 2013-3-6 15:23 | 只看该作者
NE5532 发表于 2013-3-6 14:34
把一个端口接到电源,关另外一个端口“正常”啥事?我想给楼主传达的就是,楼主的思维有点乱。 ...

我的程序是GP0或GP1为低时,GP5输出低,延时60秒后,再为高,所以我用GP0或GP1直接去接一下GND或+5V看看是否运行

使用特权

评论回复
16
gx_huang| | 2013-3-7 08:55 | 只看该作者
LZ思维是对的,只是C语言太差,十进制和二进制都搞错了,11111=0X67,GP5=1,输入了。
可能还有其它错误。
软件架构也有一些问题,触发后延时输出,在输出过程中,触发没有作用的。

使用特权

评论回复
17
largef|  楼主 | 2013-3-8 14:21 | 只看该作者
gx_huang 发表于 2013-3-7 08:55
LZ思维是对的,只是C语言太差,十进制和二进制都搞错了,11111=0X67,GP5=1,输入了。
可能还有其它错误。 ...

没有办法啊,赶鸭子上架啊!小厂就是属于什么都兼的类型!  11111不是对应0X1F么?就是要触发后延时1min后,再次输入有效.

使用特权

评论回复
18
gx_huang| | 2013-3-9 11:05 | 只看该作者
largef 发表于 2013-3-8 14:21
没有办法啊,赶鸭子上架啊!小厂就是属于什么都兼的类型!  11111不是对应0X1F么?就是要触发后延时1min ...

老弟,默认的数据比如11111是十进制,不是二进制。
16进制、2进制要加前缀的。

使用特权

评论回复
19
zhangyongdzgcs| | 2013-3-9 11:21 | 只看该作者
单片机都大同小异,我也做过很多种单片机,只要设置没错,基本不会有问题,看看你的datasheet,还有分析下下你的输入端口的驱动能力,在看看你设置的输入口是否用了内部电阻,把电压提高了哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝