输入部分
两个保护二极管,作用是对输入电压进行限制上边接VDD,3.3V,下边接VSS,0V;
如果输入电压比3.3还高,上边的二极管就会导通输入电压的额电流就会直接流入VDD不会进入内部;
如果输入电压比0V还要低,下方的二极管就会导通,电流从VSS流出,不会从内部电路汲取电流;
上拉电阻,下拉电阻;
上拉电阻接VDD,下拉电阻接VSS;//可以通过程序进行配置;
上边导通下边断开就是上拉模式,下面导通上边断开就是下拉模式;
两个都断开就是浮空模式;
作用:给输入提供一个默认的输入电平;//避免引脚浮空,导致输入数据不稳定;
施密特触发器;
输入电压大于某个值,输出为高电平,小于某一值就会降为低电平;//在阈值内消除信号抖动,信号整形;
输入输出寄存器
模拟输入:ADC,接在施密特触发器前,接收模拟量
复用功能:接在施密特触发器后,接收数字量
输出部分
输出数据寄存器;
写这个‘输出数据寄存器’数据的某一位就可以控制端口了;
//同时控制16个,而且只能整体改写;
//先读这个寄存器没后用按位与和按位或的方式更改某一位,最后在将更改后的数据写回去,类似于与等于和或等于;
位设置/清除寄存器;
单独操作‘输出数据寄存器’的某一位,不影响其他位;
//如果要改变某一位进行置一,直接在‘位设置’对应位置写一即可,剩下不需要改的写零;
//如果要进行置零操作,在‘位清除’对应位置写一即可;
推挽,开漏;
推挽输出模式下P-MOS和N-MOS均有效;
数据寄存器为一时,上管导通,下管断开,输出到VDD就是高电平;
数据寄存器为零时,上管断开,下管导通,输出到VSS就是低电平;
这种模式下高低电平都有较强的驱动能力;
在推挽模式下32对IO口有绝对控制权;
在开漏模式下P-MOS是无效的,只有N-MOS有效,
输出寄存器为一时,输出相当于断开,也就是高阻模式;
数据寄存器位零时,下管导通,输出接到VSS,输出低电平;
这个模式下只有低电平有驱动能力,高电平是没有驱动能力的,开漏模式可以作为通信协议的启动方式I2C使用的就是开漏模式,在多机通信的情况下,这个模式可以避免干扰,开漏模式还可以输出5V的电平;