历史上的今天
今天是:2025年07月13日(星期日)
2020年07月13日 | 51单片机的IO口操作基础知识介绍
2020-07-13 来源:51hei
以我们常用的STC单片机为例:STC单片机所有IO口均可由软件配置成4种工作类型。4种类型分别为:准双向口/弱上拉(标准8051输出模式)、强推挽输出/强上拉、仅为输入(高阻)或开漏输出功能。每个口有2个寄存器中的相应位控制每个引脚的工作类型。上电复位后的工作模式为准双向/弱上拉模式。2V以上为高电平,0.8V以下为低电平,每个I/O口驱动能力可以达到20mA。
那么我们通过配置哪两个寄存器来设定I/O口的工作模式呢:这两个寄存器就是PxM1和PxM0,P0口对应的就是P0M1和P0M0,P1口对应的就是P0M1和P0M0,P2口对应的就是P0M1和P0M0,P3口对应的就是P0M1和P0M0。以P0口的设置为例:

如果有P0M1为10100000;P0M0为11000000,我们对照上表可以知道:P0.7管脚为开漏输出;P0.6为强推挽输出;P0.5为输入(高阻);P0.4到P0.0为准双向口。
单片机I/O控制电路典型接法:
1、典型三极管控制电路

如果用弱上拉控制,建议加上拉电阻R1(3.3K - 10K),如果不加上拉电阻R1,建议R2的阻值在15K以上,或用强推挽输出。
2、典型发光二极管控制电路

采用准双向口模式,用灌电流驱动发光二极管限流电阻尽量大于1K,最小不要小于470Ω。
推挽/强上拉口模式,用拉电流驱动发光二极管,限流电阻一般为1K。
3、混合电压供电系统3V/5V器件I/O口互连
STC单片机如果供电是5V,当它连接3.3V器件时,为防止3.3V器件承受不了5V,可将相应的5V单片机I/O口先串一个330Ω的限流电阻到3.3V器件I/O口,程序初始化时将5V器件的I/O口设置成开漏配置,断开内部上拉电阻,相应的3.3V器件I/O口外部加10K上拉电阻到3.3V器件的VCC,这样高电平是3.3V,低电平是0V,输入输出一切正常。

4、当I/O口作为PWM输出I/O口时,需要设置成强推挽输出/强上拉输出,同时加输出限流电阻10K即可。

上一篇:什么是单片机时序,如何看懂时序图
史海拾趣
|
我用 mc39i modem 其中31管脚 /pd 发现总是在0.24v--2.24v波动,该管脚为 0v是给modem断电。 我把这个管脚的控制端用6n137 隔离,输入1 断电,输入0 不断电。总是出现 rascs_disconnected ecode 633,上网查为 拨号网络网络由于设备 ...… 查看全部问答> |
|
大家好,首先在这个地方向大家致歉,因为个人原因,11月份突然十分忙碌。所以在上旬的时候没有抽出时间写开发文档。心中万分抱歉。。。这次我要和大家一起分享的是TI的LM3S上图形驱动库的开发。现在在网络上,用ti外设驱动库的很多,但是在网上基 ...… 查看全部问答> |
|
【C28汇编语言杂谈】 大家都知道,C语言编程方便,可读性好,移植容易,有与硬件联系密切的特点,使用提供的头文件可以对CPU的内部寄存器及外围编程。通用性强。但编译器并非智能型的,对于C语言编译连接后所产生的机器码不尽相同,且一般很难达到 ...… 查看全部问答> |
|
麻烦各位帮小弟看下18B20程序错在哪 数值读出来错误 而且没有变化 #include #include #include void io_init(); void lcdshow_init(); void write_com(uchar com); void write_data(uchar data); void write_show(uchar x,uchar y); uint read_temperature(); void lcd_sho ...… 查看全部问答> |




