zoukankan      html  css  js  c++  java
  • 51单片机 | 并行I/O口扩展实例(74LS244/74LS373/4071)

    并行I/O口扩展实例

    //51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.4

    I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有P1和P3口,如果再使用串行通信,I/O口就不够使用了,需要扩展I/O口

    两种方式:

    ① 采用普通锁存器、三态门等芯片来进行简单的扩展(如74LS373或74LS244等)

    采用可编程的I/O芯片来扩展(如8255或8155等)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    要求:用4个开关控制4个LED的亮灭状态,其中采用74LS244控制开关的输入,采用74LS373控制LED输出

    代码:

    电路图:

    过程分析:

    过程://右键点击图片"在新标签页中打开图片"即可放大

    1. #18 P0=0xff; 通过拉高P0口置为1111 1111,即关闭LED灯;
    2. #19 com=0; CD4071 U2.A1CD4071 U2.B5输入一个0
    3. #20 rd = 0; CD4071 U2.A2输入一个0
    4. 由于CD4071的功能是执行逻辑或运算,12分别输入0,则3输出074LS244OE口;
    5. 74LS244缓冲驱动器的OE为使能端,低电平是有效的,高电平时输出为三态,此时通过CD4071传给OE低电平,使开关的电平可以通过74LS244传入P0
    6. 开关状态传入P0
    7. #21 temp = P0; 通过定义的unsigned char temp来存放P0的状态
    8. #22 rd = 1; CD4071 U2.A2输入一个1
    9. 1=02=1;此时或门输出为1
    10. 74LS244OE端高电平时输出为三态,关闭74LS244
    11. #23 wr = 1;CD4071 U2.B6输入一个1
    12. 此时5=06=1CD4071 U2.B7输出一个1
    13. 74LS343OE为低电平时,用作地址锁存器;LE为高电平时,输出Q0-Q7状态与D0-D7状态相同;当LE发生负跳变(1->0)时,输入端的D0-D7锁入Q0-Q7
    14. #24 P0 = temp; temp中的数据存入P0,传送到74LS343D端;
    15. #25 wr = 0; CD4071 U2.B6输入一个0
    16. 此时5=06=0CD4071 U2.B7输出一个0
    17. LE的状态从1->0,发生负跳变,输出Q0-Q7
    18. LED等接受到开关的情况,发生亮灭。

         

    实验结果

  • 相关阅读:
    【自动化测试不求人】python自动化测试对xml文件操作
    【自动化测试不求人】python自动化测试对json操作大全
    【自动测试不求人】每日1例无人值守自动化测试异常处理
    自动化测试不求人系列selenium自动化测试键盘事件ActionChains
    【自动化测试不求人】selenium ddt数据驱动模块
    国内常用NTP服务器地址及IP
    Centos语言问题
    linux下创建用户并设置密码
    CCNA Day1
    虚拟光驱导致无法安装光驱驱动的解决方法
  • 原文地址:https://www.cnblogs.com/hughdong/p/6734899.html
Copyright © 2011-2022 走看看