目录
前言
IO口模式切换,本文的目的,简单的整合IO口模式切换的代码,到用到时能快速用上。材料就一块STC8A8K64D4核心板。
I/O口模式
I/O口四大模式简略介绍:
准双向口:(传统8051端口模式,弱上拉)灌电流可达20mA,拉电流为270~150uA(存在制造误差)
推挽输出:(强上拉输出,可达20mA,要加限流电阻)
高阻输入:(电不能流入也不能流出)
开漏输出:(Open-Drain) ,内部上拉电阻断开正在联网识别并翻译.开漏模式既可读外部状态也可对外输出(高电平或低电平)。 如要正确读外部状态或需要对外输出高电平,需外加上拉电阻,否则读不到外部状态,也对外输不出高电平。
需要注意的是STC8A8K64D4上电后除了P30,P31是准双向口外其余的默认是高阻输入。STC8A8K64S4A12是上电后全是准双向口。
整个芯片的工作电流推荐不要超过70mA,即从Vcc流入的电流建议不要超过70mA,从Gnd流出电流建议不要超过70mA,整体流入/流出电流建议都不要超过70mA。
想要更详细的可以去参考官方的文档。
使用步骤
我只写了单个IO口模式切换,整组IO模式切换。就放单个IO口模式切换的代码出来就行了,如有有用到,可在自行下载源文件。
//单个IO口模式切换
//参数io: 范围:1~XX(具体看有多少pin脚) 作用:单个IO口号
//参数mod: 范围:0~3 作用:模式 0:准双向口 1:推挽输出 2:高阻输入 3:开漏输出
//例如:P20要切换成推挽输出就是 GPIO_Mod(20,1); P30要切换成开漏输出就是 GPIO_Mod(30,3);
void GPIO_Mod(unsigned char io,mod)
{
char ioa=io%10;
char moda=mod%2;
char modb=mod/2;
switch(io/10)
{
case 0:
P0M0=P0M0&((0x00|moda)<<ioa);
P0M1=P0M1&((0x00|modb)<<ioa);
break;
case 1:
P1M0=P1M0&((0x00|moda)<<ioa);
P1M1=P1M1&((0x00|modb)<<ioa);
break;
case 2:
P2M0=P2M0&((0x00|moda)<<ioa);
P2M1=P2M1&((0x00|modb)<<ioa);
break;
case 3:
P3M0=P3M0&((0x00|moda)<<ioa);
P3M1=P3M1&((0x00|modb)<<ioa);
break;
case 4:
P4M0=P4M0&((0x00|moda)<<ioa);
P4M1=P4M1&((0x00|modb)<<ioa);
break;
case 5:
P5M0=P5M0&((0x00|moda)<<ioa);
P5M1=P5M1&((0x00|modb)<<ioa);
break;
case 6:
P6M0=P6M0&((0x00|moda)<<ioa);
P6M1=P6M1&((0x00|modb)<<ioa);
break;
case 7:
P7M0=P7M0&((0x00|moda)<<ioa);
P7M1=P7M1&((0x00|modb)<<ioa);
break;
}
}
总结
GPIO库模式切换库文件
链接:https://pan.baidu.com/s/1MhEvKRtSboGt0AyVX19v3g?pwd=1234
提取码:1234