自动化网-工控人家园官网移动版

主页 > 技术文库 > 单片机 >

51单片机P0口上拉电阻的选择 当前比较流行的单片机常用加密手段

作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流,因此必须接(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。
  P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。  
  由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。
  1.一般的P0口在作为地址/数据复用时不接上拉电阻。
  2.作为一般的I/O口时用时,由于内部没有上拉电阻,故要接上上拉电阻!!
  3.当p0口用来驱动PNP管子的时候,就不需要上拉电阻,因为此时的低电平有效;
  4.当P0口用来驱动NPN管子的时候,就需要上拉电阻的,因为此时只有当P0为1时候,才能够使后级端导通。 简单一点说就是它要驱动LCD显示屏显示就必须要有电源驱动,否则亮不了,而恰好P0口没有电源,所以就要外接电源,接上电阻是起到限流的作用;如果接P1、P2、P3端口就不用外接电源和电阻了。
  P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的;5、51单片机的P0口用作数据和地址总线时不必加上拉电阻。
  有些IC的驱动能力并不强,如果P0口作为输入而加了不必要的上拉,有可能驱动IC无法将其拉回到低电平,从而使输入失败!
  如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否则电流太大;如果希望亮度小一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K以上时,亮度就很弱了,但是对于超高亮度的LED,有时候电阻为10K时觉得亮度还能够用。通常就用1k的。对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和LED的情况是一样的;如果是低电位有效,即耦合器输入端接端口和VCC之间,那么除了要串接一个1——4.7k之间的电阻以外,同时上拉电阻的阻值就可以用的特别大,用100k——500K之间的都行,当然用10K的也可以,但是考虑到省电问题,没有必要用那么小的。
  对于驱动晶体管,又分为PNP和NPN管两种情况:对于NPN,毫无疑问NPN管是高电平有效的,因此上拉电阻的阻值用2K——20K之间的,具体的大小还要看晶体管的集电极接的是什么负载,对于LED类负载,由于发管电流很小,因此上拉电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K的。对于PNP管,毫无疑问PNP管是低电平有效的,因此上拉电阻的阻值用100K以上的就行了,且管子的基极必须串接一个1——10K的电阻,阻值的大小要看管子集电极的负载是什么,对于LED类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此基极电阻的阻值最好不要大于4.7K。
  对于驱动TTL集成电路,上拉电阻的阻值要用1——10K之间的,有时候电阻太大的话是拉不起来的,因此用的阻值较小。但是对于CMOS集成电路,上拉电阻的阻值就可以用的很大,一般不小于20K,我通常用100K的,实际上对于CMOS电路,上拉电阻的阻值用1M的也是可以的,但是要注意上拉电阻的阻值太大的时候,容易产生干扰,尤其是线路板的线条很长的时候,这种干扰更严重,这种情况下上拉电阻不宜过大,一般要小于100K,有时候甚至小于10K。
  根据以上分析,上拉电阻的阻值的选取是有很多讲究的,不能乱用。

当前比较流行的单片机常用加密手段

现在一些类型的单片机,从几百块钱到几万块钱,也有人可以做破解,为了防止大家的产品被剽窃,那今天我给大家简单介绍一种当前比较流行的常用加密手段。

这种加密手段其实原理很简单,现在是单片机的主流加密手段,还有尤其FPGA这种内部不带程序存储空间的器件,更是比较多的利用这种加密手段,就是唯一ID。那我们现在手上的银行卡芯片卡,就是用的这种加密手段,这也是为什么
这个唯一ID的意思就是,每颗芯片出厂的时候,都带了一个号码,这个号码是唯一不重复的,和我们每个人的身份证号码一样,现在刚出生的婴儿,办理出生证的时候就给他一个身份证号,那么每个芯片一生产出来,也就具备了这个身份证号。那有了这个身份证号可以做什么呢?、
我们可以在单片机的外设上添加一个EERPOM存储器(或者有的单片机内部有),然后我们自己组织一种特殊的算法,利用这个唯一ID,产生一组数据,每生产一个产品,我们预先存储在我们的EEPROM内这样一个数据,当然,烧写这个数据我们也可以用软件程序来实现的。我们的单片机上电程序初始化的时候,会来读一下EEPROM内部这个数据X,然后用自身内部的ID加这个算法运算一下一个值Y,然后比较X和Y是否一致,如果一致就继续工作,如果不一致就停止工作。
举个例子,如果我们这个芯片内部的ID是147258369这9位数字,那么我们的算法就是每一位数字乘以2加1,进位部分直接舍掉,那形成的数字就是:395517739。我们只需要把395517739这个数字预先烧写到我们的EEPROM内部,然后我们编写功能程序的时候,在初始化部分,会上电读一下EEPROM的这个数字,读出来X是395517739,然后再读一下我们的这个芯片的唯一ID是147258369,用我们的算法计算一下这个结果Y是395517739,比较两者相等,则程序继续执行,两者不相等则不工作。
一、芯片破解者,只能把芯片的二进制码读出来,源程序他是改不了的,所以他只能复制程序,并不能随便更改程序。
二、每个产品上的主单片机的唯一ID,都会预先和自己产品的EEPROM内部的数据做比较,即使他们复制了这个EERPOM的数据,那他们只要换了其他一颗单片机,还是依然无法运行。
现在公众号还不具备留言功能,大概一个月左右可以具备这个功能,具备这个功能后,大家可以留言提出你的疑问,我尽量给大家解惑。  (责任编辑:admin)