词条 | 单片机IO口 |
释义 | SPCE061A的I/O端口,对某一位的设定包括以下3个基本项:数据向量Data、属性向量Attribution和方向控制向量Direction。3个端口内每个对应的位组合在一起,形成一个控制字,用来定义相应I/O口位的输入输出状态和方式。例如,假设需要IOA0是下拉输入管脚,则相应的Data、Attribution和Direction的值均被置为“0”。如果需要IOA1是带唤醒功能的悬浮式输入管脚,则Data、Attribution和Direction的值被置为“010”。A口和B口的Data、Attribution和Direction的设定值均在不同的寄存器里,用户在进行I/O口设置时要特别注意这一点。 凌阳单片机IOA,IOB口的一些简单设置和C语言应用函数 A口相应的寄存器 P_IOA_Buffer (读/写) (01H) A口的数据向量单元,用于向数据向量寄存器写入或从该寄存器读出数据。当A口处于输入状态时,写入是将A口的数据向量写入A口的数据寄存器;读出则是从A口数据寄存器内读其数值。当A口处于输出状态时,写入输出数据到A口的数据寄存器。 P_IOA_Dir(读/写)(02H) A口的方向向量单元,用于用来设置A口是输入还是输出,该方向控制向量寄存器可以写入或从该寄存器内读出方向控制向量。Dir位决定了口位的输入/输出方向:即‘0’为输入,‘1’为输出。 P_IOA_Attrib(读/写)(03H) A口的属性向量单元,用于A口属性向量的设置。 P_IOA_Latch(读)(04H) 读该单元以锁存A口上的输入数据,用于进入睡眠状态前的触键唤醒功能的启动。 并行I/O口的组合控制 方向向量Dir、属性向量Attrib和数据向量Data分别代表三个控制口。这三个口中每个对应的位组合在一起,形成一个控制字,来定义相应I/O口位的输入/输出状态和方式。 表3.1具体表示了如何通过对I/O口位的方向向量位Dir、属性向量位Attrib以及数据向量位Data进行编程,来设定口位的输入/输出状态和方式。 由表3.1可以得出以下一些结论: Dir位决定了口位的输入/输出方向:即‘0’为输入,‘1’为输出。 Attrib位决定了在口位的输入状态下是为悬浮式输入还是非悬浮式输入:即‘0’为带上拉或下拉电阻式输入,而‘1’则为悬浮式输入。在口位的输出状态下则决定其输出是反相的还是同相的;‘0’为反相输出,‘1’则为同相输出。 Data位在口位的输入状态下被写入时,与Attrib位组合在一起形成输入方式的控制字‘00’、‘01’、‘10’、‘11’,以决定输入口是带唤醒功能的上拉电阻式、下拉电阻式或悬浮式以及不带唤醒功能的悬浮式输入。Data位在口位的输出状态下被写入的是输出数据,不过,数据是经过反相器输出还是经过同相缓存器输出要由Attrib位来决定。 例如,假设要把A口的Bit0定义成下拉电阻式的输入口,则A口_Dir、_Attrib和_Data向量的三个相应的Bit0应组合设为‘000’。如果想把A口的Bit1定义成悬浮式并具有唤醒功能的输入口,只需将Dir、Attrib和Data向量中相应的Bit1组合设置为‘010’即可。 A口的IOA0~IOA7作为唤醒源,常用于键盘输入。要激活IOA0~IOA7的唤醒功能,必须读P_IOA_Latch单元,以此来锁存IOA0~IOA7管脚上的键状态。随后,系统才可通过指令进入低功耗的睡眠状态。当有键按下时,IOA0~IOA7的输入状态将不同于其在进入睡眠前被锁存时的状态,从而引起系统的唤醒。 表3.1 Direction Attribution Data 功能 是否带唤唤醒功能 功能描述 0 0 0 下拉 是 带下拉电阻的输入管脚 0 0 1 上拉 是 带上拉电阻的输入管脚 0 1 0 悬浮 是 悬浮式输入管脚 0 1 1 悬浮 否 悬浮式输入管脚 1 0 0 高电平输出 1 0 1 低电平输出 1 1 0 低电平输出 否 带数据缓存器的低电平输出 1 1 1 高电平输出 否 带数据缓存器的高电平输出 B口相应的寄存器 P_IOB_Data(读/写)(05H) B口的数据单元,用于向B口写入或从B口读出数据。当B口处于输入状态时,读出是读B口管脚电平状态; 写入是将数据写入B口的数据寄存器。当B口处于输出状态时,写入输出数据到B口的数据寄存器。 P_IOB_Buffer(读/写)(06H) B口的数据向量单元,用于向数据寄存器写入或从该寄存器内读出数据。当B口处于输入状态时,写入是将数据写入B口的数据寄存器;读出则是从B口数据寄存器里读其数值。当B口处于输出状态时,写入数据到B口的数据寄存器。 P_IOB_Dir(读/写)(07H) B口的方向向量单元,用于设置IOB口的状态。‘0’为输入,‘1’为输出。 P_IOB_Attrib(读/写)(08H) B口的属性向量单元,用于设置IOB口的属性。 B口的特殊功能 B口除了具有常规的输入/输出端口功能外,还有一些特殊的功能,如下表3.2所示: 口位 特殊功能 功能描述 备注 IOB0 SCK 串行接口SIO的时钟信号 IOB1 SDA 串行接口SIO的数据传送信号 IOB2 1,EXT1 IOB3 1,EXT2 IOB4 Feedback_Input1 IOB5 Feedback_Input2 IOB6 --- IOB7 Rx 通用异步串行数据接收端口 IOB8 APWMO TimerA脉宽调制输出 IOB9 BPWMO TimerB脉宽调制输出 IOB10 Tx 通用异步串行数据发送端口 IO端口设置的C库函5 SPCE061.lib中提供了相应的API函数如下所示: 1, 函数原型 void Set_IOA_Dir(unsigned int); void Set_IOB_Dir(unsigned int); 功能说明 设置IO Dircetion信息 用法 Set_IOA_Dir(Direction_A); Set_IOB_Dir(Direction_B); 参数 1代表输出,0代表输入 返回值 无 2,函数原型 unsigned int Get_IOA_Dir(void); unsigned int Get_IOB_Dir(void); 功能说明 获取IO Dircetion信息 用法 Direction_A =Get_IOA_Dir(); Direction_B =Get_IOB_Dir(); 返回值 1代表输出,0代表输入 3.函数原型 void Set_IOA_Data(unsigned int); void Set_IOB_Data(unsigned int); 功能说明 设置IO Data信息 用法 Set_IOA_Data(Data_A); Set_IOB_Data(Data_B); 参数 1代表高电平,0代表低电平 返回值 无 4,函数原型 unsigned int Get_IOA_Data(void); unsigned int Get_IOB_Data(void); 功能说明 获取IO Data信息 用法 Data_A =Set_IOA_Data(); Data_B =Set_IOB_Data(); 参数 无 返回值 1代表高电平,0代表低电平 5,函数原型 void Set_IOA_Buffer(unsigned int); void Set_IOB_Buffer(unsigned int); 功能说明 设置IO Buffer信息 用法 Set_IOA_Buffer(Buffer_A); Set_IOB_Buffer(Buffer_B); 参数 1代表高电平,0代表低电平 返回值 无 6.函数原型 unsigned int Get_IOA_Buffer(void); unsigned int Get_IOB_Buffer(void); 功能说明 获取IO Buffer信息 用法 Buffer_A =Set_IOA_Buffer(); Buffer_B =Set_IOB_Buffer(); 参数 无 返回值 1代表高电平,0代表低电平 7.函数原型 void Get_IOA_Latch(void); 功能说明 读P_IOA_Latch单元,以此来锁存IOA0~IOA7管脚上的键状态 用法 Get_IOA_Latch(); 参数 无 返回值 无 另外还有: sp_lib.asm中定义了两个很有用的IO API,在C中可以调用。它们是SP_Init_IOA(),SP_Init_IOB()。 函数原型 void SP_Init_IOA(unsigned int, unsigned int, unsigned int); void SP_Init_IOB(unsigned int, unsigned int, unsigned int); 功能说明 同时设置IO Dircetion、Attribution和Data信息 用法 SP_Init_IOA(Direction_A, Data_A, Attribution_A); SP_Init_IOB(Direction_B, Data_B, Attribution_B); 参数 返回值 无 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。