高级会员
- 积分
- 675
- 威望
- 350
- 贡献
- 171
- 兑换币
- 178
- 注册时间
- 2012-10-14
- 在线时间
- 77 小时
- 毕业学校
- 北京理工大学
|
本人新手,求指导,我用GPIO的C2到C9做拨码开关的输入,用的是1.5k下拉电阻的形式,出的问题具体如下:
1.单片机上电时C2到C9初始为0的位用万用表可以测得0.4,但拨到1再拨0后再测就有1.7V了。。。,此时看寄存器里对应位的值也是1而不是0。。。,之后再拨开关读进来的值也一直是1
2.单片机上电时C2到C9初始为1的位不管怎么拨开关都读到1(也就是说只要输入过1之后,就永远是1了。。。。电压表测得的是1.7V(输入0)和3.1V(输入1))
3.把单片机卸掉后测电压是正常的
4.开关断开时LED灭,合上时LED亮(有点废话不过也写吧。。。)
以下是相关的初始化代码和电路,麻烦大神看下,其实都很简单,但我看不出错来。。。。
GPIOC的初始化
gpio_init ( PORTC, 2,0,0);
gpio_init ( PORTC, 3,0,0);
gpio_init ( PORTC, 4,0,0);
gpio_init ( PORTC, 5,0,0);
gpio_init ( PORTC, 6,0,0);
gpio_init ( PORTC, 7,0,0);
gpio_init ( PORTC, 8,0,0);
gpio_init ( PORTC, 9,0,0);
以上是龙丘的函数,应该没什么问题
读GPIOC口的代码
motor_key = ( ( ~(GPIOC_PDIR >> 2) ) & 0x0f );//5-2 bit
servo_key = ( ( ~(GPIOC_PDIR >> 6) ) & 0x0f );//9-6 bit
初始没改变开关的时候可以读到正常的值,应该也没问题
程序之后就是不断读开关的值,然后通过PIT0的定时中断用数码管动态显示了,没有改相关的设置了
电路
我唯一想到可能有问题的地方就是在开关断开时,单片机C2-C9有电流输出,下拉电阻上有压降,导致电压不接近0,但这也解释不了初始为0时能够测得0.4V的现象以及“4”中描述的现象,所以也是没有根据的猜想
麻烦大神帮我看下那些地方可能有问题
或者说下单片机的IO口做GPIO的时候需要注意那些寄存器的初始化,感谢了~~
|
|