一、概述:
STC8H的IO端口相较于传统的C51有了较明显的功能提升,就功能而言更加和STM32接近,就操作而IO而言实则比STM32简单好用,当然可能本人认识不足较之STM32无可比,但我确信国芯之未来。
STC8H系列IO口有四种模式,第一种模式为通用IO模式即传统C51IO口,最大的优点读写都方便,第二种模式为推挽模式,即高电平与低电平均可提供一定强电流(较通用IO模式),第三种模式为高阻模式,即输入和输出均为高阻,直接阻断,第四种模式为开漏模式,限低电平模式下可通过强电流(较通用IO模式),而高电平需外部提供。除了四种模式外还增加了上下拉电阻,可以适配不同情况的默认高低电平。此外还增加了对外提高输出速度与输出电流的功能。添加IO口的施密特触发器,默认状态下是开启的,主要作用是提高端口搞干扰能力。
二、知识链接:
通过配置PxM1和PxM0两个寄存器对应的位即可实现端口的四种模式的转换。配置PxUP和PxDN两个寄器对应的位可实现端口的上拉(4.7K)和下拉(10K)。PxSR和PxDR可实现端口速度与电流的控制。
三、实验平台搭建:
1、MCU:STC-打狗棒系列核心实验板 V2.3
2、实验板平台:德飞莱LY-51s
3、硬件连接表:
K1------>P10 测试上拉
LED----->P20 指示灯
四、测试源代码:
#include <STC8H.h>
#include "intrins.h"
void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准
void init_IO();//初始化IO
void main()
{
P_SW2 |= 0x80; //扩展寄存器XFR访问使能
init_IO();
// P0M1=0x00;
// P0M0=0x03;//设置P0.0与P0.1工作模式为推挽输出
// P00=1;//高电平为接LED+
// P01=0;//低高电平为接LED-
P20=0;
P20=1;//通用IO口
P21=0;
P0M1|=0x04;//设置P02为高阻模式
P0M0|=0x00;
P02=0;
// P1M1|=0x00;//设置P10为通用模式
// P1M0|=0x00;
//P2PU|=0x01;
P1M1|=0x01;//设置P10为开漏模式
P1M0|=0x01;
P1PU|=0x01;//开启4.1K上拉
while(1)
{
//P10=1;//当P10为通用模式时置1开启弱上拉
if(P10==0)
{
P00=0;
P01=1;
}
if(P10==1)
{
P00=1;
P01=0;
}
}
}
void init_IO()
{
RSTCFG=0x50; //开启RST键进入ISP模式
P0M1 = 0x00; P0M0 = 0x00; //设置P0口为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置P1口为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置P5口为准双向口
}
void Delay1ms(unsigned char x) //@12.000MHz
{
unsigned char i, j;
i = 16;
j = 147;
while(x--)
{
do
{
while (--j);
} while (--i);
}
}