单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章 数字输入输出,I/O,41,只,I/O,引脚,大部分是复用的。,DSP,复位时,大部分,I/O,引脚会被上拉为,数字输入,的模式。,数字,I/O,脚有,专用,和,复用,之分。其功能可通过,9,个,16,位,控制寄存器,来控制。,控制寄存器分为两类,:,(,1,),I/O,复用控制,寄存器(,MCRx,),,用来选择,I/O,脚是,片内外设功能,还是,通用,I/O,功能,;,(,2,),数据方向控制,寄存器(,PxDATDIR,),:用来控制双向,I/O,脚的数据传送方向。,注意:,上述数字,I/O,脚是通过控制寄存器(映射在数据存储器空间)来控制的,,与器件的,I/O,空间无任何关系,。,6.1,数字,I/O,寄存器简介,I/O,复用引脚的结构见,图,6-1,。由图可看出复用,I/O,引脚如何实现来,引脚功能选择,和,数据传送方向,选择的。,表,6-1,(,P65,)列出了与,I/O,模块有关的寄存器,地址为:,7090h-709Fh,(,映射在数据存储器空间,),表,6-1 LF240 x/240 xA,的数字,I/O,控制寄存器,地址寄存器功能,7090hMCRA I/O,复用控制,寄存器,A,7092hMCRBI/O,复用控制,寄存器,B,地址寄存器功能,7094h,MCRC,I/O,复用控制,寄存器,C,7098h,PADATDIR,I/O,端口,A,数据和方向寄存器,709Ah,PBDATDIR,I/O,端口,B,数据和方向寄存器,709Ch,PCDATDIR,I/O,端口,C,数据和方向寄存器,709Eh,PDDATDIR,I/O,端口,D,数据和方向寄存器,7095h,PEDATDIR,I/O,端口,E,数据和方向寄存器,7096h,PFDATDIR,I/O,端口,F,数据和方向寄存器,保留位,是不可操作的,读出为,0,,写入对它无影响。,注意:,当复用,I/O,脚,无论,是被配置为外设功能还是为通用,I/O,时,,引脚的状态,都可通过读,I/O,数据寄存器来获取。,6.2 I/O,端口复用控制寄存器,LF240 x/240 xA,具有,3,个,I/O,端口复用控制寄存器:,MCRA,、,MCRB,、,MCRC,。,(,1,),I/O,端口复用控制寄存器,A(MCRA),,映射地址:,7090h,,,其配置见,表,6-2,(,P65,),。,(,2,),I/O,端口复用控制寄存器,B,,映射地址:,7092h,,其配置见,表,6-3,(,P66,),。,表,6-3 I/O,端口复用控制寄存器,B,的配置,(,3,),I/O,端口复用控制寄存器,C(MCRC),,映射地址:,7094h,I/O,端口复用控制寄存器,C,的格式如下,其配置见,表,6-4,(,P67,),。,6.3,数据和方向控制寄存器,LF2407/2407A,有,6,个,数据和方向控制寄存器(,PxDATDIR,),这些数据和方向控制寄存器包含控制引脚的两个功能位。,I/O,方向位,如果引脚被选择通用,I/O,,方向位决定了该引脚是作输入(,0,)还是输出(,1,)。,I/O,数据位,如果引脚被选择了,通用,I/O,,当方向选为输入,则可从该位上读取数据,当方向选为输出,则可向该位写入数据。,当,I/O,端口被,选择,作,通用,I/O,引脚,,数据和方向控制寄存器可以控制数据和,I/O,引脚的数据方向。,如果,I/O,端口被,选择,作,外设,功能时,,数据和方向控制寄存器的设置对相应的引脚无影响,。下面详细介绍数据和方向控制寄存器。,(,1,),I/O,端口,A,数据和方向控制寄存器(,PADATDIR),,映射地址:,7098h,格式如下。,位,15-8,:,AnDIR,PA7-PA0,的数据方向,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-0,:,IOPAn,如果,AnDIR,=0,,引脚配置为输入,:,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,AnDIR,=1,,引脚配置为输出,:,0,设置相应引脚,使其输出信号为低电平,1,设置相应引脚,使其输出信号为高电平,当引脚选择为通用,I/O,功能时,那么,I/O,端口,A,数据和方向控制寄存器(,PADATDIR),的数据位与对应的,I/O,引脚如,表,6.5,(,P69,),所示。,表,6.5,寄存器,PADATDIR,的数据位与对应的,I/O,引脚,如果,I/O,端口,用作通用,I/O,,,则必须对数据和方向寄存器进行初始化设置,,规定其为输入端口还是输出端口。,(,2,),I/O,端口,B,数据和方向控制寄存器(,PBDATDIR),,映射地址:,709Ah,I/O,端口,B,数据和方向控制寄存器的格式如下。,位,15-8,:,BnDIR,PB7-PB0,的数据方向,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-0,:,IOPBn,如果,BnDIR,=0,,引脚配置为输入方式。,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,BnDIR,=1,,引脚配置为输出,0,设置相应引脚,使其输出信号为低电平时有效,1,设置相应引脚,使其输出信号为高电平时有效,当引脚选择为通用,I/O,功能时,那么,I/O,端口,B,数据和方向控制寄存器(,PBDATDIR),的数据位与对应的,I/O,引脚如,表,6.6,所示。,(,3,),I/O,端口,C,数据和方向控制寄存器,(,PCDATDIR),,映射地址:,709Ch,I/O,端口,C,数据和方向控制寄存器的格式如下。,位,15-8,:,CnDIR,PC7-PC0,的数据方向,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-0,:,IOPC7-IOPC0,如果,CnDIR,=0,,引脚配置为输入。,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,BnDIR,=1,,引脚配置为输出,0,设置相应引脚,使其输出信号为低电平,1,设置相应引脚,使其输出信号为高电平,当引脚选择为通用,I/O,功能时,那么,I/O,端口,C,数据和方向控制寄存器(,PCDATDIR),的数据位与对应的,I/O,引脚如表,6.7,所示。,(,4,),I/O,端口,D,数据和方向控制寄存器(,PDDATDIR),,,映射地址:,709Eh,I/O,端口,D,数据和方向控制寄存器的格式如下。,位,15-9,:,保留位,位,8,:,D0DIR,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-1,:保留,位,0,:,IOPD0,如果,D0DIR=0,,引脚配置为输入。,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,D0DIR=1,,引脚配置为输出,0,设置相应引脚,使其输出信号为低电平时有效,1,设置相应引脚,使其输出信号为高电平时有效,当引脚选择为通用,I/O,功能时,那么,I/O,端口,D,数据和方向控制寄存器(,PDDATDIR),的数据位与对应的,I/O,引脚如表,6.8,所示。,(,5,),I/O,端口,E,数据和方向控制寄存器(,PEDATDIR),,地址:,7095h,I/O,端口,E,数据和方向控制寄存器的格式如下,位,15-8,:,EnDIR,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-0,:,IOPEn,如果,EnDIR,=0,,引脚配置为输入。,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,EnDIR,=1,,引脚配置为输出,0,设置相应引脚,使其输出信号为低电平时有效,1,设置相应引脚,使其输出信号为高电平时有效,当引脚选择为通用,I/O,功能时,那么,I/O,端口,E,数据和方向控制寄存器(,PEDATDIR),的数据位与对应的,I/O,引脚如表,6.9,所示。,(,6,),I/O,端口,F,数据和方向控制寄存器(,PFDATDIR),,映射地址:,7096h,I/O,端口,E,数据和方向控制寄存器的格式如下。,位,15,:,保留位,位,14-8,:,EnDIR,0,相应引脚配置为输入,1,相应引脚配置为输出,位,7-0,:,IOPFn,如果,FnDIR,=0,,引脚配置为输入。,0,相应引脚的电平读为低电平,1,相应引脚的电平读为高电平,如果,FnDIR,=1,,引脚配置为输出,0,设置相应引脚,使输出为低电平有效,1,设置相应引脚,使输出为高电平有效,当引脚选择为通用,I/O,功能时,那么,I/O,端口,E,数据和方向控制,寄存器(,PFDATDIR),的数据位与对应的,I/O,引脚如表,6.10,所示。,6.4,数字,I/O,端口配置实例,在使用数字,I/O,之前,,需用软件对数字,I/O,进行配置,,选择,I/O,引脚的功能,且设置,I/O,引脚的数据方向,然后才可以读取数据或输出数据。,下面为,一个基本的数字,I/O,配置实例,的汇编源程序。读者可参照此程序,来配置其它的任何数目的数字,I/O,MCRA.set7090h;,可将这些映射语句放于,240 x.h,文件,中,PADATDIR.set7098h;,可将这些映射语句放于,240 x.h,文件,中,PBDATDIR .set709Ah,;,可将这些映射语句放于,240 x.h,文件,中,LDP#0E1h,;,指向相应的数据页面,LACC#0h,;,设置,MCRA,所有位均为,0,SACL MCRA,;,将引脚,IOPA0-7,和,IOPB0-7,配置为,I/O,引脚,SACL PADATDIR,;,引脚,IOPA0-7,配置为输入,低电平有效,LACC#0F00h,;,引脚,IOPB7-IOPB4,配置为输入,SACL PBDATDIR,;,引脚,IOPB3-IOPB0,配置为输出,LACC PBDATDIR,;,读取引脚,IOPB7-IOPB4,的输入状态,AND#00F0h,;A,为输入状态,上面为一个数字,I/O,的实际配置程序,对于每个寄存器的定义可以参考前面的介绍,为了读者使用方便,,表,6.11(P74),列出了所有数字,I/O,定义的参考表。,6.5,数字,I/O,的应用实例,6.5.1,使用数字,I/O,查询输入信号,通常可以配置数字,I/O,为输入或输出,以便于与外设进行信息交换。,本例,为,使用数字,I/O,端口来查询外界信号输入情况,,硬件接口电路如,图,6.11,所示,为抗干扰,外界输入信号需要加光耦隔离,以便获得符合,LF2407/2407A,要求的信号。本例使用,PWM3/IOPB0,、,PWM4/IOPB1,、,PWM5/IOPB2,和,PWM6/IOPB3,。,I/O,初始化,需设置引脚为,I/O,功能,且需要选择信号方向。下面为,读取输入信号,的,例程,。,*,文件名:,INPUT.asm,*,.,includ,“240 xA.h”;,变量和寄存器定义,.,includ,“,vector.h,”;,中断向量表定义,请参考,4.9,节,;,;,B2,块的变量定义,;,.,bss,INDATA,1,;I/O,输入值判断变量,.,bss,GPR0,1,;,通用目标寄存器,;,;,主代码,;,.text,NOP,START:,SPLK#000Eh,IMR,;,屏蔽除,INT2-4,以外的其它中断,LACCIFR,;,读中断标志,SACLIFR,;,清除中断标志,CLRCCNF,;,配置块,B0,到数据存储空间,LDP#00E0h,;,数据页指向,7000h,707Fh,SPLK#06Fh,WDCR,;,如,VCCP,5V,则禁止看门狗,LDP#SCSR17,SPLK#0000,SCSR1,;,LDP#00E1h,;,数据页指向,7080h,70FFh,SPLK#0F00h,MCRA,;,配置,I/O,选择,IOPB0,IOPB3,SPLK#0000h,PBDATDIR,;,配置为输入模式,LDP#0,SPLK#