历史上的今天
今天是:2024年12月27日(星期五)
2019年12月27日 | PIC单片机之I/O控制操作分析
2019-12-27 来源:elecfans
一、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控制操作分析
其实控制单片机,就是控制寄存器上的各个位,设置成高设置成低。就好像给你一台机器有 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口是被设置成数字口的。
史海拾趣
|
(一) 隐私权问题:RFID Journal和市场研究机构ABI,共同进行的一项名为「RFID Journal Live」的调查显示「采用RFID技术最大的好处是可以对企业的供应链进行透明管理,有效降低成本,但最近RFID的安全性也非常令人关注,很多公司推出了增强安全性能 ...… 查看全部问答> |
|
微波产业尽管在持续创新,许多产品仍根植于相同技术。例如,砷化镓(GaAs)就是目前许多先进功放及其它有源器件的核心技术。但在这些现象中,孕育着可能变革许多产品制造方式方法的创新。这些“颠覆性技术”会以闻所未闻、见所未见的完全新奇的面目兴 ...… 查看全部问答> |
|
友善之臂最新更新信息(2010-2-5):全新WindowsCE5重装上阵 转自arm9之家论坛。 2010-2-5: 最新友善之臂更新资讯: ========================== 经过我们的稍事移植,WindowsCE6的大部分现在BSP已经在WindowsCE5上重现,下载地址: http://www.arm9.net/mini2440-windowsce5.asp 全新的WindowsCE5具有和 ...… 查看全部问答> |
|
这是我找到的流水灯花样程序,现在希望用两个键,一个键控制流水灯的延时时间,另外一个控制流水灯的花样变换。求大侠帮忙,不胜感激啊! #include<reg51.h> #define uchar unsigned char #define uint unsigned int voi ...… 查看全部问答> |
|
本公司(Novatel wireless)招聘 (高级)firmware 开发工程师(高通芯片) 工作地点:上海徐家汇,薪资范围: 高级firmware 开发工程师:15K-20K/月, firmware 开发工程师:8K-14K/月 有兴趣的可以咨询我,MSN是:shinsonyangyx@hotmail.com,简历也 ...… 查看全部问答> |




