改变单片机IO口默认电平

模拟技术

2300人已加入

描述

  c51单片机上电后io口默认的电平默认都是高电平,因为只不过P0没有内部上拉电阻,是弱上拉,不加外部上拉电阻的话只能驱动外部的门电路。P1到P3都有上拉电阻,是强上拉,可以直接驱动外部的接口电路。

  改变单片机IO口默认电平

  接上拉电阻的话就是默认高电平,输入时可以检测下降沿,接按键到地。接下拉电阻就默认低电平,输入时可以检测上升沿,接按键到电源。 如果不接电阻,默认输出无效电平,当输出有效电平时 有效。 P0口特殊,欲输出高电平,必须接上拉电阻

  用了STC12C5A60S2的增强型51单片机,这个的单片机可以设置IO口得工作模式,用的这个单片机都可以通过软件设置IO口模式不为开漏而是其它模式,比如说:准双向口/弱上拉(标准8051输出模式)、推挽输出 /强上拉、仅为输入(高阻)或开漏输出功能

  设置成推挽输出就行了的,任何时间只能有一个MOS导通,I/O功能。不需要上拉电阻!! 在使用配置好的I/O 之前可以自己用软件初始化输出电平。

  使单片机I/O口初始为低电平的方法

  普通8051单片机上电复位时普通I/O口因有上拉电阻,输出高电平。但在实际应用中往往要求上电复位时某些I/O为低电平,否则控制系统的继电器、电机等就会动作。这时介绍两种行之有效而且简单的方法:

  1.改变I/O配置

  很多增强型单片机产I/O有四种配置:准双向口,开漏输出,推挽输出和高阻配置,而默认为准双向口配置,也就是标准8051的I/O口,这种配置的输出电流为200uA左右,如果将这个I/O能过一电阻连接到地,如下图。

  单片机

  从图中可以看出I/O的最大输出电压为:U=200uA×1K=0.2V,这个值在大多数单片机中属逻辑低电平,同时这个值也不能驱动硅NPN型三极管。等初始化完成后,可以将I/O配置为推挽输出,这个配置可输出20mA的电流,如果电源为5V,这个电阻也只吸收5mA的电流,所以输出为高,可以驱动三极管,继电器等器件。这个电阻的阻值可适当调整,多个I/O时可用排阻。

  2.硬件拉低I/O

  如果为普通8051单片机,也就是不能配置I/O,这时就可以通过拉低I/O来使复位I/O为你电平,如下图。

  因为上电进所在I/O均为高电平,所以通过8050驱动,可将I/O拉低,多个I/O时,R1可用排阻。

  单片机

  如何用C检测单片机IO口电平变化

  检测当信号为1并持续0.1s后再为0持续了0.23ms 为真

  首先,要知道单片机是多大的晶振,然后指令周器是等于多少个机器周期。个样才能算出一条指令的执行时间。首先,用C写的,到底他编译出来的汇编语句是什么也要搞清楚。

  当扫描用户程序结束后,可编程逻辑控制器就进入输出刷新阶段。在此期间,CPU按照I/O映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。这时,才是可编程逻辑控制器的真正输出。

  你是要用定时器定时还是用软件延迟呢?

  这么短的时间就软件延迟好了。

  首先,你要知道你的单片机是多大的晶振,然后指令周器是等于多少个机器周期。个样才能算出一条指令的执行时间。首先,你用C写的,到底他编译出来的汇编语句是什么也要搞清楚。不然,就像一个while(i!=0)i--;这个的语句不同的编译器编出来是不同的!!有的很简洁就是DZJN,有的很长的。

  就是用C写延时,必须用示波器看到底是多少。

  unsigned int i

  bit flag = 0;

  while(1)

  {

  if(P00=1)

  {

  i=XXXX;//0.1ms

  while(i》0)

  {

  i--;

  if(P00!=1)break;

  }

  if(i==0)

  {

  i=YYY; //在YYY时间必须出现低电平,不然上面测到的1就不算了。

  while(i》0)

  {

  i--;

  if(P00 = 0)

  {

  i=ZZZ;//0.23ms

  while(i》0)

  {

  i--;

  if(P00!=0)break;//退出WHILE

  }

  if(i==0) flag = 1;

  }

  }

  }

  }

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

全部0条评论

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

×
20
完善资料,
赚取积分