我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 3124|回复: 1

[技术文章] 51单片机、AVR单片机和PIC单片机IO口的操作

[复制链接]
  • TA的每日心情
    难过
    2024-5-26 18:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    4327

    主题

    73

    回帖

    2497

    积分

    管理员

    积分
    2497

    社区居民终身成就奖宣传大使奖社区明星

    发表于 2012-5-7 23:08:56 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

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

    ×
    51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。
    一.51单片机IO口的操作
    51单片机IO口的结构比较简单,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52
    #i nclude<reg52.h>
    sbit bv=P2^0;//定义位变量,关联P2.0管脚。sbitC51编译器特有的数据类型
    int main(void)
    {
            unsigned char pv;
      //位操作:
      bv=0;//P2口的第0位管脚输出低电平
    bv=1;// P2口的第0位管脚输出高电平
       //总线操作输出数据:
      P2=0xaa;//总线操作,P2口输出数据0xaa
       //总线操作读取数据:
      pv=P2;//总线操作,读取P2.口的数据放到pv变量
    return 0;
    }

    二.AVR单片机IO口的操作
    AVR单片机IO口的结构比较复杂,每个IO由三个寄存器组成:IO口数据寄存器POTxIO口方向寄存器DDRxIO口输入引脚寄存器PINxAVR单片机IO口操作最复杂,需要设置IO口的方向,而且只能进行总线操作,如果进行位操作还需要掌握编程技巧---通逻辑运算来实现位操作。下例的运行坏境为ICCAVR软件,器件为ATMEGA16
    #i nclude<iom16v.h>
    int main(void)
    {
         unsigned char pv;
            //总线操作输出数据:
         DDRD=0xff;//设置D口的方向为输出方式
         PORTD=0xaa;//D口输出数据0xaa
    //总线操作读取数据:
          DDRD=0x00//设置D口的方向为输入方式
          PORTD=0xff;//设置D口为带上拉电阻
          pv=PIND;//读取D口的数据放到pv变量
    //位操作:
          DDRD=0xff;//设置D口的方向为输出方式
          PORTD|=0x01;//D口的第0位输出高电平,技巧:使用位或运算
       PORTD&=~0x01;//D口的第0位输出低电平,技巧:使用取反位与运算
       return 0;
    }

    三.PIC单片机IO口的操作
    PIC单片机IO口的结构也比较复杂,每个IO由两个寄存器组成:IO口数据寄存器PORTx、和IO口方向寄存器TRISx。操作起来比AVR单片机简单一一些,同样需要设置IO的方向,可以进行总线操作也可以进行位操作。下例的运行坏境为MPLAB IDE软件,器件为PIC16F877
    #i nclude<pic.h>
    __CONFIG(0x3B32);
    int main(void)
    {
           unsigned char pv;
    //总线操作输出数据:
           TRISB=0x00;//设置B口的方向为输出方式
           PORTB=0xaa;//B口输出数据0xaa
    //总线操作读取数据:
           TRISB=0xff;//设置B口的方向为输入方式
           pv=PORTB;//读取B口的数据放到pv变量
    //位操作:
           TRISB=0xfe;//设置B口的第0位(RB0)的方向为输出方式
           RB0=1;//B口的第0位输出高电平
        RB0=0;//B口的第0位输出低电平
        return 0;
    }

    经过比较这三种单片机IO口的操作,我们知道,51单片机IO口结构简单,操作简单,但没有高电平大电流驱动能力;AVRPIC单片机IO 口结构复杂,操作麻烦,但具备高电平大电流驱动能力。换句话说,单片机的IO口的功能越强大结构越复杂操作越繁琐。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 153 天

    [LV.7]常住居民III

    11

    主题

    7887

    回帖

    5556

    积分

    二级逆天

    积分
    5556

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2024-7-6 08:01:17 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表