stc8H1K08单片机设置引脚模式的函数


///设置引脚模式函数,pinModel=0 准双向口, pinModel=1 推挽输出(强上拉输出,可达20mA,要加限流电阻),  pinModel=2 高阻输入(电流既不能流入也不能流出),   pinModel=3 开漏模式(Open-Drain),内部上拉电阻断开开漏模式既可读外部状态也可对外输出(高电平或低电平)。
void setPinModel(unsigned char pinGroup, unsigned char pinID, unsigned char pinModel)
{
    unsigned char PnM0 = 0;
        unsigned char PnM1 = 0;
        if(pinGroup>5||pinID>7||pinModel>3){
            //给的值不合法
            UART1_SendString("Set pin mode error\r\n");
            return;
        }
        switch(pinGroup){
            case 0:
                PnM0 = P0M0;
                PnM1 = P0M1;
                break;
            case 1:
                PnM0 = P1M0;
                PnM1 = P1M1;
                break;
            case 2:
                PnM0 = P2M0;
                PnM1 = P2M1;
                break;
            case 3:
                PnM0 = P3M0;
                PnM1 = P3M1;
                break;
            case 4:
                PnM0 = P4M0;
                PnM1 = P4M1;
                break;
            case 5:
                PnM0 = P5M0;
                PnM1 = P5M1;
                break;
            default:break;
        }
        
        PnM0 &= ~(0x01 << pinID);
        PnM1 &= ~(0x01 << pinID);
        PnM0 |= ((pinModel&0x01) << pinID);
        PnM1 |= (((pinModel>>1)&0x01) << pinID);
        
        switch(pinGroup){
            case 0:
                P0M0 = PnM0;
                P0M1 = PnM1;
                break;
            case 1:
                P1M0 = PnM0;
                P1M1 = PnM1;
                break;
            case 2:
                P2M0 = PnM0;
                P2M1 = PnM1;
                break;
            case 3:
                P3M0 = PnM0;
                P3M1 = PnM1;
                break;
            case 4:
                P4M0 = PnM0;
                P4M1 = PnM1;
                break;
            case 5:
                P5M0 = PnM0;
                P5M1 = PnM1;
                break;
            default:break;
        }
        
}



调用示例:
setPinModel(1, 0, 0x01); // 设置P1.0为推挽输出模式
setPinModel(2, 1, 0x02); // 设置P2.1为开漏输出模式


pinMode取值

0x00  准双向口(传统8051端口模式,弱上拉)灌电流可达20mA,拉电流为270~150μA(存在制造误差)

0x01  推挽输出(强上拉输出,可达20mA,要加限流电阻)

0x02  高阻输入(电流既不能流入也不能流出)

0x03  开漏模式(Open-Drain),内部上拉电阻断开开漏模式既可读外部状态也可对外输出(高电平或低电平)。如要正确读外部状态或需要对外输出高电平,需外加上拉电阻,否则读不到外部状态,也对外输不出高电平。
===【开漏工作模式】,对外设置输出为 1,等同于 【高阻输入】===【开漏工作模式】【打开内部上拉电阻或外部加上拉电阻】,简单等同于 【准双向口】

 

FOLLOW US ON INSTAGRAM