搜索
bottom↓
回复: 17

51系列的单片机的IO口既做输入有时又做输出怎么切换

[复制链接]

出0入0汤圆

发表于 2012-5-20 01:57:12 | 显示全部楼层 |阅读模式
本帖最后由 fisher3014 于 2012-5-20 17:58 编辑

51系列的单片机的输入/输出能直接切换么?就是按键和LED公用一个I/O口时怎么办?
由输出状态变为输入状态,需要对端口先写1,但是写1的过程会不会对外界的输入信号产生影响呢?
那由输入状态切换为输出状态需要额外的操作吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-5-20 17:58:28 | 显示全部楼层
又没有人回答呀?

出0入0汤圆

发表于 2012-5-20 19:50:34 | 显示全部楼层
据所知,51是没有输入切换输出的问题。

出0入0汤圆

发表于 2012-5-20 19:51:03 | 显示全部楼层
据所知,51是没有输入切换输出的问题。

出0入22汤圆

发表于 2012-5-20 20:05:28 | 显示全部楼层
楼上正解

出0入0汤圆

发表于 2012-5-20 20:06:01 | 显示全部楼层
在51系列中:
对即将做输入口连续写入2次#0FFh
就把该口设定为输入了
这时就可以当做输入口用了

做输出时无须写#0FFh
直接把要输出的数据
写到口即可

出0入0汤圆

发表于 2012-5-20 20:06:14 | 显示全部楼层
当输入时先给高电平,然后检测是否是低电平就能当成输入了。

出0入4汤圆

发表于 2012-5-20 21:16:58 | 显示全部楼层
lxa0 发表于 2012-5-20 20:06
在51系列中:
对即将做输入口连续写入2次#0FFh
就把该口设定为输入了

写一次0ffh就行吧

出0入0汤圆

发表于 2012-5-20 22:11:31 | 显示全部楼层


LED限流电阻R8根据自己需要而定,
R9看你所用的MCU取舍,像AT89C52、STC89C52之类的不需要R9,像STC 1T系列最好保留,因为STC 1T系列的弱上拉口在由0变为1时,会有2个时钟的强推挽高输出电流。

void KEYA_PASS()
{       
        s_uint8 PRESS_count,UP_count,NO_cnt;  //按下/松开计数
         s_bit          B_one,B_L;                                //短按/禁止扫描标志
         bit        B_Mirror;                                  //镜像

        KeyA = 1;             //先上拉
        _nop_();  
        _nop_();
        _nop_();                //然后稍微延时稳定
        B_Mirror = KeyA;   //再读取『按键A』状态
        _nop_();  
        KeyA = LEDA;       //最后还原复用指示灯LEDA的状态
…………

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-20 22:49:35 | 显示全部楼层
学习、、、、

出0入0汤圆

发表于 2012-5-21 13:32:17 | 显示全部楼层
当然可以的,就怕你的硬件打架。IIC就是典型的不停的在输入输出间切换

出0入0汤圆

发表于 2012-5-21 21:30:22 | 显示全部楼层
wajlh 发表于 2012-5-20 21:16
写一次0ffh就行吧

我都是写2次的~~~~~~~~

出0入0汤圆

发表于 2013-8-20 15:56:11 | 显示全部楼层
遇到与楼主同意的困惑,把此贴顶起,希望有大牛解答

出0入10汤圆

发表于 2013-8-20 16:48:24 | 显示全部楼层
用 STC 单片机,有一个寄存器可以选择管脚是输入还是输出。输出又分为弱上拉和推挽。

出0入85汤圆

发表于 2013-8-20 18:14:48 | 显示全部楼层
51是最方便的,无需配置方向寄存器,只需要设为输入前 端口=1即可

出145入215汤圆

发表于 2013-8-20 18:36:02 | 显示全部楼层
本帖最后由 dz20062008 于 2013-8-20 18:43 编辑

我也这样做过这样一个电路,发现输出时就不能输入了!

因为会出现输出与按键逻辑与,影响输出。所以无法同时使用,如果按键不频繁操作的话可以使用。代码如下:




      ORG 0000H
          SJMP MAIN
          ORG 0030H
MAIN:MOV C,P1.0
      JC  MAIN
          LCALL LED
          SJMP MAIN

  LED:MOV R0,#06D
  LOP:CPL P1.0
      LCALL DELAY500MS
          DJNZ R0,LOP
          SETB P1.0
          RET
DELAY500MS:
      MOV R7,#17H
  DL1:MOV R6,#98H
  DL0:MOV R5,#46H
      DJNZ R5,$
      DJNZ R6,DL0
      DJNZ R7,DL1
      RET

          END

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-21 10:32:29 | 显示全部楼层
不是增强型的话是不需要切换的,51是准双向口,内部是开漏的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表