本帖最后由 广东梁百万 于 2021-11-8 17:14 编辑
我花了两小时用我的试验板验证过,看来这个STC8的上拉电阻在接通后真的不能完全断开。验证器材如下:TST8H8K64U, P2.4接有按键。 P7.0接有LED灯做测试指示.。P6.7做上拉电阻测试,P6.7与GND焊接有一个20K电阻。
试验操作: 初始化时P6.7接通上拉电阻。 后面的程序—— 如果按下SW1键(P2.4与GND接通), 那 P6.7的上拉电阻断开,这时测试指示灯 P70_LED亮。
如果放开SW1键,那P6.7的上拉电阻接通, 测试指示灯 P70_LED灭。
完整程序如下
#include<stc8h.h>
#include "intrins.h"
sbit sw1 = P2^4;
sbit sw2 = P2^5;
sbit sw3 = P2^6;
sbit sw4 = P2^7;
sbit sw5 = P3^0;
sbit sw6 = P3^1;
sbit BUZ = P1^3;
sbit LED_P70 = P7^0;
sbit LED_P71 = P7^1;
sbit LED_P72 = P7^2;
sbit LED_P73 = P7^3;
sbit LED_P74 = P7^4;
sbit LED_P75 = P7^5;
sbit LED_P76 = P7^6;
sbit LED_P77 = P7^7;
void main()
{
P0M0=0x00; //-----下面是初始化
P0M1=0x00;
P1M0=0x00;
P1M1=0x00;
P2M0=0x00;
P2M1=0x00;
P3M0=0x00;
P3M1=0x00;
P4M0=0x00;
P4M1=0x00;
P5M0=0x00;
P5M1=0x00;
P6M0=0x00;
P6M1=0x00;
P7M0=0x00;
P7M1=0x00;
BUZ=0;
P_SW2 |= 0x80; //D7位控制访问扩展SFR特殊寄存器
P6PU=0x80;//接通上拉4.1K电阻
//-----上面是初始化-----------
//----------------------------------
while (1) //主函数
{
if(sw1==0) //sw1键按下
{
P6PU=0x00;//关断上拉电阻
LED_P70=0; //LED灯亮
}
if(sw1==1) //sw1键放开
{
P6PU=0x80;//接通上拉电阻
LED_P70=1; //LED灯灭
}
else;
}
}
试验结果1:没有按下sw1,(P6PU=0x80; //接通上拉电阻),测得P6.7电压是4.49V.
按下sw1键,(P6PU=0x00; //关断上拉电阻),测得P6.7电压是3.58V.
反复断电再试也是如此。
-------------------------------------------------------
跟着我思考下,在按下SW1键时,把P6.7改成开漏输出,效果不同了。
改过的程序如下,带*****的是增加的语句
//----------------------------------
while (1) //主函数
{
if(sw1==0) //sw1键按下
{
P6M0=0x80; //设置P6.7口为开漏输出 *******************************
P6M1=0x80; //*******************************
P6PU=0x00;//关断上拉电阻
LED_P70=0; //LED灯亮
}
if(sw1==1) //sw1键放开
{
P6M0=0x00; //设置P6.7口为准双向口 *******************************
P6M1=0x00; //*******************************
P6PU=0x80;//接通上拉电阻
LED_P70=1; //LED灯灭
}
else;
}
}
试验结果2:没有按下sw1,(P6PU=0x80; //接通上拉电阻),测得P6.7电压是4.49V.
按下sw1键,(P6PU=0x00; //关断上拉电阻),测得P6.7电压是0V.
----------------------------------------
在初始化时没有 ( P6PU=0x80;//接通上拉4.1K电阻 ) 这句, 后面程序也没有用这句,那么P6.7对地的电压是0.3V.
|