访问手机版页面
你的位置:老古开发网 > PIC单片机的IO口 > 正文  
PIC单片机之I/O控制操作分析
内容导读:

  I/O(input/output),即输入/输出端口。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。

  二、I/O控制的主要功能

  计算机原理说的是I/O控制器是控制计算机输入输出的一个最基本的控制系统。通过这个控制系统计算机才可以与外界进行交流互动;这个系统包括了计算机最基本的输入功能比如键盘、鼠标等还有计算机最基本的输出功能,打印功能。当然还包括其他的很多很多的计算机其他外部设备。这个系统是计算机比较核心的一个计算机系统了,很是复杂。原因就是连接他的外设很多,计算机系统使用中断系统来处理控制I/O设备。

  三、I/O控制方式及特点

  I/O控制方式的发展经历了四个阶段:程序查询方式、I/O中断方式、DMA方式和I/O通道方式。

  (1)程序查询方式

  在早期计算机或现代一些简单的微型计算机系统中,采用程序查询I/O方式。程序查询是一种用程序直接控制I/O操作的方式。CPU与外设的活动本质上是异步的,为了实现CPU与外设间的信息传送,CPU必须重复测试外设的状态,仅当外设是处在准备好的状态时,CPU才能与外设交换信息。所以,在程序查询I/O方式的接口电路中必须设置一状态端口,以使CPU通过执行输入指令了解外设的状态。当采用程序查询传送方式时,每当程序要使用某一外设进行I/O操作时,CPU要执行一段循环测试程序,以实现在外设准备好时执行一条输入/输出指令,进行一字节或字的数据传送操作。在这种方式下,CPU的大量时间消耗在等待输入/输出的循环检测上,使CPU与外设串行工作,严重影响了CPU和外设的使用效率,致使整个系统效率很低。

  (2)I/O中断方式

  引入中断技术后,每当设备完成I/O操作时,便向CPU发出中断请求信号,通知CPU外设已准备好,可以进行数据传送操作。这样,CPU一旦启动I/O设备后便可执行其他程序,仅在收到I/O中断请求时才执行其中断服务程序,进行I/O处理和I/O操作。程序中断传送方式改善了CPU的利用率,并使CPU与外设并行操作。但I/O数据的处理和I/O操作的控制都是由CPU承担的,仍然消耗了CPU不少时间。

  (3)直接存储器访问(DMA)方式

  虽然I/O中断方式比程序查询方式更有效,但须注意,它仍是以字节或字为单位进行输入/输出的,每当完成一字节或字时,控制器便要向CPU请求一次中断。换言之,采用I/O中断方式时的CU,是以字节或字为单位进行干预的。如果将这种方式用于块设备的I/O,显然是低效的。例如,为了从磁盘中读出1KB的数据块,需要中断CPU 1000次。为了进一步减少CPU对I/O的干预而引入了直接存储器访问(DMA)方式。

  (4)I/O通道方式

  I/O通道方式是DMA方式的发展,它会进一步较少对CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)有关的控制和管理为单位的干预。I/O通道有自己的指令系统,即通道程序,可以与CPU并行操作,独立管理外设和实现主存和外设之间的信息传输,使CPU摆脱了繁忙的I/O操作。在配置通道的计算机系统中,不仅能实现CPU与通道的并行操作,而且通道与通道、各通道的外设之间均能实现并行操作,因而有效地提高了整个系统的使用效率。

PIC单片机之I/O控制操作分析

  四、PIC单片机之I/O控制操作分析

  其实控制单片机,就是控制寄存器上的各个位,设置成高设置成低。就好像给你一台机器有 8个的按钮。然后你根据说明书上介绍,根据你的需要按下 或者松开相应的按键 来得到你想得到的功能。只不过我们用的不是手而是C语言来按下和松开这些按键。

  TRISA寄存器是方向控制寄存器。就是控制I/O输入还是输出。比如 TRISA寄存器中的TRISA5位 设置成为0 RA5口是输出 设置成为1 RA5口为是输入。

  C语言的具体实现:

  将RA5口设置成输入的几种方式

  第一种 TRISAbits.TRISA5=1; //简单明了,只影响一个位 设置单个I/O比较方便

  第二种 TRISA |= 0x20;//不够明了,只影响一个位

  第三种 TRISA =0x20;//不够明了,影响到其他位,设置多个I/O用比较方便

  将RA5口设置成输出的几种方式

  第一种 TRISAbits.TRISA5=0;

  第二种 TRISA &= ~0x20;

  第三种 TRISA =0x00;

  PORTA寄存器是数据控制寄存器。如果是输出状态:PORTA寄存器中的RA5位为0 则RA5口输出低电平,PORTA寄存器中的RA5位为1 则RA5口输出高电平。

  如果是输入状态:PORTA寄存器中的RA5位为0 则说明RA5口当前为低电平,PORTA寄存器中的RA5位为1 则说明RA5口当前为高电平。

  实例程序:

  如果在RA5口上连接着一个LED灯。我们将如何点亮他呢?

  /*

  开发环境为 MPLAB X IDE,芯片型号为PIC16LF1823

  */

  #include《pic.h》 //头文件

  __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON

  &CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去

  __CONFIG(PLLEN_OFF&LVP_OFF) ;//配置位

  int main(int argc, char** argv) {

  ANSELA=0;//将RA口全部设置成数字口,

  TRISAbits.TRISA5=0;//设置RA5为输出

  PORTAbits.RA5=1;//设置输出高电平点亮LED

  while(1);//程序在此无限循环

  }

  头文件:程序中只要有了#include《pic.h》编译器就会去自动找到相应型号的头文件,头文件中定义好了每个寄存器的地址,位的地址等。

  配置位:这是十分重要即使程序没有任何错误 配置位没配置好程序一样不能用。具体如何配置可以看( 基于MPLAB X IDE配置位设置讲解 )。

  模拟数字口:在使用I/O口的时候要确保对应的I/O口是被设置成数字口的。

标签:i/o控制,PIC单片机,
来源:网络整理 作者:电子魔法师 时间:2017/11/15 9:35:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐