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芯片不久,哪位大神能指点一下问题所在?谢谢
是不是没设置上下拉电阻的原因 补充
1、运行第122行时报错,改成P3IE |= 0x54 不会报错,但是问题没有解决。
2、加入上拉电阻配置,也无效。
3、调试中获取P1IE值为0,好像是配置不成功? 8个IO口配置为准双向口,不用配置IO口上拉电阻,电路图中两个4位拨码左侧接地而不是接电源。 本帖最后由 haobin1980 于 2024-3-7 20:59 编辑
你拨码开关左侧接电源要加下拉电阻吧,左侧接地要加上拉,看看单片机里能不能设置下拉 我看了下手册,你这个单片机没内置下拉电阻,只有上拉,可以按照4楼说的设置为准双向口,拨码开关左侧改成接地试试 STC32/STC8都有内置上拉电阻
下拉电阻只有 STC32G8K64 开始有 按照4楼的方式,改了电路,问题已经解决。谢谢回复的各位。 ztaiya 发表于 2024-3-10 19:21
按照4楼的方式,改了电路,问题已经解决。谢谢回复的各位。
可以看一下你的代码吗,我也碰到了和你一样的问题,读不出来拨码器的电平
dbfzjsrn 发表于 2024-12-24 10:11
可以看一下你的代码吗,我也碰到了和你一样的问题,读不出来拨码器的电平
...
准双向口,你可以程序开始运行时先把端口写1后再去读取端口状态
页:
[1]
2