孙悟空怎么打吕布:请教一个单片机P0口的问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 14:08:43
1.请问P0口做通用I/O口使用接收数据的时候,为什么必须在读入数据前向端口锁存器写入1?
2.请问P0口做通用I/O口使用接收数据的时候,为什么必须在端口加一个上拉电阻,上拉电阻阻值的大小对其接收数据有无影响?
3.我做一个水温控制系统,用p0口接收ADC0809转换过来的数据,加了1K的上拉电阻,不过在程序初始化时,端口置零,结果单片机收不到数据,这是什么原因呢?
请高手教教我,谢谢

1、 不管哪个端口,在“读”其外部管脚信号时,都要求将端口对应的锁存器置位,使得外部的驱动器截止,之后才能进行mov 操作,即保证驱动器在读操作时端口对地高阻,有无上拉电阻只是端口的使用特点不同。
P0口是漏极开路双向IO口,做输入时先向端口写1,是为了关闭输出驱动FET。也就是那个上拉开漏输出MOS管。

2、 P0口做数据口时,由上下两个管控制输出高低电平,数据只在写信号有效时有效,写信号失效时,数据口恢复为三态,所以做普通IO口使用应加上拉电阻,否则不能输出高电平。至于上拉电阻的大小,一般来说从节约功耗及芯片的灌电流能力考虑应当取足够大;从确保足够的驱动电流考虑应当足够小;对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑,通常在1k到10k之间选取。

3、这个要看你的具体电路和代码了

1;如果端口不写1,端口钳位在0电位上,输入的数据将被它断路,结果单片机收不到数据
2:没有上拉电阻它不能向端口写1,上拉电阻一般为10K,太小电流过大,负载过重容易造成数据出错.

当I/O端口作为输入使用时,需先向端口写入“1”,使内部FET截止,再读人引脚的状态