打印
[学习资料]

解密51、AVR和PIC的IO口的操作的方法

[复制链接]
365|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2022-4-28 12:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
IO, ic, pi, vr
I/O口的定义是:I/O 接口是主机与被控对象进行信息交换的纽带。主机通过I/O 接口与外部设备进行数据交换。绝大部分I/O 接口电路都是可编程的,即它们的工作方式可由程序进行控制。在工业控制机中常用的接口有:1.并行接口;2.串行接口;3.直接数据传送接口;4.中断控制接口;5.定时器/计数器接口。



I/O口的基本功能是:进行端口地址译码设备选择;向CPU提供I/O设备的状态信息和进行命令译码;进行定时和相应时序控制;对传送数据提供缓冲,以消除计算机与外设在“定时”或数据处理速度上的差异;提供计算机与外设间有关信息格式的相容性变换。提供有关电气的适配;还可以中断方式实现CPU与外设之间信息的交换。

由于51单片机、AVR单片机和PIC单片机IO口结构都是不相同的,所以就导致了IO口操作也不同。操作单片机IO口的目的就是为了让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。



一.51单片机IO口的操作
51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。

#include<reg52.h>

sbit bv = P2^0;//定义位变量,关联P2.0管脚。sbit是C51编译器特有的数据类型

int main(void)

{

unsigned char pv; //

//位操作,以P2口的第0位为例:

bv=0;//直接对P2口的第0位管脚输出低电平

bv=1;//直接对P2口的第0位管脚输出高电平

//总线操作输出数据,以P2口为例:

P2=0xa;//直接赋值,P2口输出数据0xaa

//总线操作读取数据,以P2口为例:

pv=P2;//直接读取P2口的数据放到pv变量

return 0;

}


二.AVR单片机IO口的操作
AVR单片机IO口的结构比较复杂,每个IO由三个寄存器组成:IO口数据寄存器POTx、IO口方向寄存器DDRx和IO口输入引脚寄存器PINx。AVR单片机IO口操作相当麻烦,需要设置IO口的方向,而且只能进行总线操作,如果进行位操作还需要掌握编程技巧---通过逻辑运算来实现位操作。下例的运行坏境为ICCAVR软件,器件为ATMEGA16。

#include<iom16v.h>
int main(void)
{
   unsigned char pv;//总线操作输出数据,以D口为例:
   DDRD=0xff;//先设置D口的方向为输出方式(相应位设0为输入,设1为输出)
   PORTD=0xaa;//赋值,D口输出数据0xaa//总线操作读取数据,以D口为例:
   DDRD=0x00//先设置D口的方向为输入方式(相应位设0为输入,设1为输出)
   PORTD=0xff;//再设置D口为带上拉电阻(相应位设0为无上拉,设1为有上拉),才能准确读取数据
   pv=PIND;//读取D口的PIND寄存器的数据放到pv变量//位操作,以D口的第0位为例:
   DDRD|=0x01;//先设置D口第0位的方向为输出方式,其他位的方向不变
   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;//总线操作输出数据,以B口为例:
  TRISB=0x00;//先设置B口的方向为输出方式(相应位设0为输出,设1为输入)
  PORTB=0xaa;//赋值,B口输出数据0xaa//总线操作读取数据,以B口为例:
  TRISB=0xff;//先设置B口的方向为输入方式(相应位设0为输出,设1为输入)
   pv=PORTB;//读取B口的数据放到pv变量//位操作,以B口的第0位为例:
   TRISB=0xfe;//先设置B口的第0位(RB0)的方向为输出方式(相应位设0为输出,设1为输入)
   RB0=1;//B口的第0位输出高电平
   RB0=0;//B口的第0位输出低电平
   return 0;
}


经过比较这三种单片机IO口的操作,看代码的长短,我们就能了解到,51单片机IO口结构简单,操作简单,但没有高电平大电流驱动能力;AVR和PIC单片机IO 口结构复杂,操作麻烦,但具备高电平大电流驱动能力。我们可以总结出单片机的IO口的功能越强大结构就会越复杂操作就会越繁琐。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1942

主题

15667

帖子

12

粉丝