最近在用LPC11C14单片机,该单片机是32cortex-M0系列的,带有片上CAN资源,既可以使用寄存器编程,也可以使用库函数(CMSIS)来编程应用方便。其下载方式有两种:
SW方式;
ISP方式;
对于LQF48封装而言,调试口分别为:
29脚:SWCLK;
39脚:SWDIO;
这个两个引脚可以复用,在项目设计中到了29脚,将该引脚用作了GPIO输出脚,在用库函数调试的过程中发现时钟无法控制输出高低电平。而用寄存器版本就可以输出高低电平。花了好长时间终于找到了原因。
下面先看寄存器版本编程时使用的头文件代码:再看CMSIS提供的库函数的头文件:
从头文件的对比已经发现了问题,寄存器版本的头文件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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)