单片机小白学步系列二十 IO口原理
IO口等效模型是本人独创的方法,通过此模型,能有效的降低对IO口内部结构理解的难度。并且经查阅资料确认,这种模型和实际工作原理基本一致。
==========================================
前面说了很多东西,不少人或许已经迫不及待的想要实际操作单片机了。IO口作为单片机与外界通信最主要的手段,是单片机学习最基本也最重要的一个知识。前面我们编程实现了IO口点亮LED的实验,本篇继续对IO口相关知识进行介绍。
为了更好的学习IO口操作,有必要了解一下IO口的内部结构和相关概念。这些知识对于后续的学习很有帮助,重点是理解,完全不需要刻意去记。不记得就回来再看看就行了,用得多了自然就记住了。
官方资料(最权威准确)
我们说过,要了解一个芯片,最准确有效的方法,是查看官方给出的芯片手册等资料。但是初学单片机,直接看芯片手册资料恐怕很难弄明白,尤其是看到一堆英文、陌生的电路、名词术语,如果是我,一定也会抓狂的。但是这里我还是给出一张从Atmel官方的《Atmel 8051 Microcontrollers Hardware Manual》中截取的图片。
给出这张图片并不是为了打击大家学习热情,而是希望大家能明白,我们所见过的各种单片机资料到底是怎么来的,到底是否准确,这一切都可以通过官方资料弄清楚,对于大家以后深入学习一些东西有一定的帮助。
第二功能简介
上图正是官方给出的权威的51单片机IO口结构图。可以看出,单片机的四组IO口内部结构各不相同,原因是有些IO口有第二功能,入门篇里面提到过。
还记得这张管脚图吗?括号中标注的就是IO口的第二功能名称。除了P1以外,每个接口都有第二功能。介绍单片机系统模块时,我提到51单片机有预留扩展存储器的接口,正是图中的P0和P1的第二功能(同时还要用到29、30等管脚)。因为用的不多,涉及知识也比较深入,就不做具体研究了。顺便一提,其实这里我们看到的AD0~AD7,就是用于并行口的。而P3口的第二功能,就包括串口等,后面学到了还会具体介绍。
IO口等效电路
由于深入理解IO口的原理涉及到很多电路甚至微机原理相关知识,这里只做简化介绍,能满足绝大多数情况下的需要。作为普通IO口使用时,四个IO口的工作原理基本一致。
下面的图是从前面图中的P1电路中裁剪出来的,也是我们需要理解的关键。
右边的P1.X表示P1的一个IO口,如P1.0;电阻右边写的英文是内部上拉电阻的意思,之所以叫上拉电阻,是因为电阻的一端接在VCC上。下面的三角形表示接地,相当于GND。除此之外,最关键的一个器件是下面这个。
这个器件的本质是晶体管,起到电子开关的作用(如果想深入了解,可以学习模拟电路相关的知识,或者等到原理篇中介绍)。上面的电路可以大致等效成下图。注意,这样的结构只是一个IO口,整个单片机中有32个这种结构。
图中的R为阻值10k的上拉电阻,S是由前面的晶体管等效的电子开关。蓝色框中的部分在单片机内部。
S的开关状态由CPU控制。当用程序设置P1.0管脚为低电平时,电子开关S闭合。实际上电子开关S闭合时,两端还有很小的电阻。根据分压原理,P1.0上会有一个很低的电压,近似0V,已经可以视为低电平了。当设置管脚为高电平时S断开,P1.0通过10k上拉电阻接到VCC上。如果用电压表测量,因为电压表内阻很大,所以可以得出其电压值为高电平。
IO口的输出:点亮LED
前面介绍了点亮第一个LED的程序和电路。程序如下:
#include
sbit LED = P1^0;
void main()
{
LED = 0;
while(1);
}
电路关键部分如下,VCC通过1k电阻连接到LED正极,LED负极接到P1.0口:
在单片机执行LED=0的时候,电子开关S就由CPU控制而闭合,P1.0上输出低电平。电流通过1k电阻和LED流入P1.0,再经过S流入GND,LED两端有合适的电压于是点亮。结合单片机内部IO口等效电路,整个电路如下图
灌电流与拉电流
在上面的例子中,P1.0输出低电平点亮LED。能不能反过来,P1.0输出高电平点亮LED呢?我们可以考虑电路连接成下面这样,并在程序中编写LED=1。
当执行LED=1时,S断开。电流通过10k上拉电阻R从P1.0流出,并进入LED。由于上拉电阻的阻值太大,电流太小,导致LED不亮,或者亮度很微弱。所以通常不采用这种方法。
这两种方法,前者电流从外部流入单片机内部,我们称之为灌电流接法;后者电
单片机IO口原 相关文章:
- 单片机小白学步(20) IO口原理(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)