单片机IO口无法输出高低电平原因分析及解决方案

模拟技术

2510人已加入

描述

  单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

  最近在用LPC11C14单片机,该单片机是32cortex-M0系列的,带有片上CAN资源,既可以使用寄存器编程,也可以使用库函数(CMSIS)来编程应用方便。其下载方式有两种:

  SW方式;

  ISP方式;

  对于LQF48封装而言,调试口分别为:

  29脚:SWCLK;

  39脚:SWDIO;

  IO口

  这个两个引脚可以复用,在项目设计中到了29脚,将该引脚用作了GPIO输出脚,在用库函数调试的过程中发现时钟无法控制输出高低电平。而用寄存器版本就可以输出高低电平。花了好长时间终于找到了原因。

  下面先看寄存器版本编程时使用的头文件代码:

 IO口

  再看CMSIS提供的库函数的头文件:

 IO口

  从头文件的对比已经发现了问题,寄存器版本的头文件P0_10的地址是68结尾,而CMSIS中P0_10的地址是70结尾,翻看LPC11C14的数据手册可以发现其地址为:0x40044068,显然CMSIS提供的头文件错了。将CMSIS头文件修改后,P0_10就可以正常使用了。

  如何计算单片机IO口输出的高、低电平为多少伏?

  例如用IO口驱动LED,需要根据IO口输出电压计算串联的电阻值

  51单片机IO口输出高电平时,接近VCC,可以按VCC来计算。

  你使用5V供电,IO输出高电压平应该按5V计算。

  LED限流电阻= ( 5V - led工作时端电压 ) / led工作电流

  LED电压一般 2到3V,按平均2.5V,工作电流按10ma

  限流电阻= (5-2.5)V/10ma = 0.25k = 250欧,一般选200-1000欧都可以。

  关于51单片机输入/输出口电压和电流以及加驱动电路的问题

  1、51单片机I/O口为集电极上拉输出方式,高电平输出电流等于上拉电阻的电流,这个电流比较小,低电平输出是内部晶体管吸收的电流,最大可以达到10mA,但是整个端口的总电流不能超过24mA。

  电平低于0.7V就是低电平,高于1.8V就是高电平。在这个之间不确定。

  2、51单片机的I/O口可以理解为一个开路的NPN三极管加一个上拉电阻,驱动PNP三极管最方便,驱动NPN三极管也没有问题,是靠上拉电阻驱动,所以不好。况且51单片机复位时所有I/O口是高电平,就造成NPN三极管导通,这在大多数电路里是不允许的。 复位时,I/O口为高阻的单片机驱动三极管就无所谓了。

  3、51系列单片机引脚电平与TTL电平兼容,也就是输入高电位大于2.0V,低电位小于0.8V,输出高电位大于2.4V,低电位小于0.4V。一般情况下,若电源电压为5V,输出高电位电压也是5V左右,低电位电压接近0V.

  看上面的第三种论述好象还需要区分输入和输出两种情况

  作为输出端口:P0可吸收可输出电流,多大不是很清楚,驱动LED没问题,驱动NPN、PNP三极管都没有问题。

  P1P2P3只能吸收电流,不能输出电流(如第一种说法中提的“这个电流比较小”,而第二种说法里的“驱动NPN三极管也没有问题”就需要实验证明一下了,因为这个电流实在太小了),如特别需要,可外接上拉电阻。

  输出电流指得是输出1时带负载,吸收电流指得是输出0时带负载。 另外不同厂家的51单片机具体参数可能不同,不同型号的也不同。

  我说的指的是ATMEL的AT89S51,至于Intel的MCS51早停产了,估计要找也不到了。

  第三种说法:输入指的是端口做输入端口,比如P0.1做输入,你会给它一个电压,它根据你给的电压是大于2.4V还是小于0.4V来判断你给的是1还是0信号。而输出指的是你将P0.1口作为输出口时:输出1,P0.1引脚的电压接近于这个单片机的电源电压,输出0,P0.1电压接近于0V。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分