ztaiya 发表于 2024-3-7 16:17:33

stc8g1k08,拨码开关,IO输入模式,3.x端口状态一致? | 已解决

1、我用的stc8g1k08,sop20。

2、用2个4位的拨码开关,分别接P1.2、P1.7、P5.5、P3.6,P3.4、P3.2、P1.6、P5.4端口。打算通过拨码确定程序参数。原理图附件。

3、IO模式设为输入      P0M0 = 0x00;      P0M1 = 0x00;      P1M0 = 0x00;      P1M1 = 0xC4;      P2M0 = 0x00;      P2M1 = 0x00;      P3M0 = 0x00;      P3M1 = 0x54;      P4M0 = 0x00;      P4M1 = 0x00;      P5M0 = 0x00;


4、读取      if(P36) tmpid|=1<<0;      if(P55) tmpid|=1<<1;      if(P17) tmpid|=1<<2;      if(P12) tmpid|=1<<3;      if(P54) tmpid|=1<<4;      if(P16) tmpid|=1<<5;      if(P32) tmpid|=1<<6;      if(P34) tmpid|=1<<7;



5、结果p36\p55这组拨码,2个都不拨为0,拨任1个另一个也为1。p32\p34也是这个现象。其他4个P1.2\p1.7\p1.6\p5.4是独立的。

6、测量io口电平无误,拨码拨下的电平为高(5v),拨码未拨的电平为低(0v)。



7、尝试开启输入使能P1IE\P3IE\P5IE,也无效。代码如下:
P_SW2 = 0x80;      P1IE = 0xC4;      P3IE = 0x54;      P5IE = 0x30;
#define   P1IE                  (*(unsigned char volatile xdata *)0xfe31)
#define   P3IE                  (*(unsigned char volatile xdata *)0xfe33)
#define   P5IE                  (*(unsigned char volatile xdata *)0xfe35)

刚接触stc芯片不久,哪位大神能指点一下问题所在?谢谢

haobin1980 发表于 2024-3-7 16:52:10

是不是没设置上下拉电阻的原因

ztaiya 发表于 2024-3-7 17:11:58

补充
1、运行第122行时报错,改成P3IE |= 0x54 不会报错,但是问题没有解决。
2、加入上拉电阻配置,也无效。
3、调试中获取P1IE值为0,好像是配置不成功?

21cnsound 发表于 2024-3-7 17:43:05

8个IO口配置为准双向口,不用配置IO口上拉电阻,电路图中两个4位拨码左侧接地而不是接电源。

haobin1980 发表于 2024-3-7 20:57:27

本帖最后由 haobin1980 于 2024-3-7 20:59 编辑

你拨码开关左侧接电源要加下拉电阻吧,左侧接地要加上拉,看看单片机里能不能设置下拉

haobin1980 发表于 2024-3-7 21:03:01

我看了下手册,你这个单片机没内置下拉电阻,只有上拉,可以按照4楼说的设置为准双向口,拨码开关左侧改成接地试试

神农鼎 发表于 2024-3-7 21:04:51

STC32/STC8都有内置上拉电阻
下拉电阻只有 STC32G8K64 开始有

ztaiya 发表于 2024-3-10 19:21:45

按照4楼的方式,改了电路,问题已经解决。谢谢回复的各位。

dbfzjsrn 发表于 2024-12-24 10:11:53

ztaiya 发表于 2024-3-10 19:21
按照4楼的方式,改了电路,问题已经解决。谢谢回复的各位。

可以看一下你的代码吗,我也碰到了和你一样的问题,读不出来拨码器的电平

jwd 发表于 2024-12-24 10:41:51

dbfzjsrn 发表于 2024-12-24 10:11
可以看一下你的代码吗,我也碰到了和你一样的问题,读不出来拨码器的电平
...

准双向口,你可以程序开始运行时先把端口写1后再去读取端口状态
页: [1] 2
查看完整版本: stc8g1k08,拨码开关,IO输入模式,3.x端口状态一致? | 已解决