分享
 
 
 

单片机IO口

王朝百科·作者佚名  2010-07-29
窄屏简体版  字體: |||超大  

主要介绍凌阳单片机IOA,IOB口的一些简单设置和C语言应用函数

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口设置时要特别注意这一点。

A口相应的寄存器

P_IOA_Data(读/写)(00H)

A口的数据单元,用于向A口写入或从A口读出数据。当A口处于输入状态时,读出是读A口管脚电平状态; 写入是将数据写入A口的数据寄存器。当A口处于输出状态时,写入输出数据到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

高电平输出

(带数据反相器)

带数据反相器的高电平输出

(当向数据位写入“0” 时输出“1”)

1

0

1

低电平输出

(带数据反相器)

带数据反相器的低电平输出

(当向数据位写入“1”时输出“0”)

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

2, Feedback_Output1

1,外部中断源(下降沿触发)

2,与IOB4组成一个RC反馈电路,以获得振荡信号,作为外部中断源EXT1

1,IOB2 设为输入状态

2,设置IOB2为反相输出方式

IOB3

1,EXT2

2,Feedback_Output2

1,外部中断源(下降沿触发)

2,与IOB5组成一个RC反馈电路,以获得一个振荡信号,作为外部中断源EXT2

1,IOB3 设为输入状态

2,设置IOB3为反相输出方式

IOB4

Feedback_Input1

IOB5

Feedback_Input2

IOB6

---

IOB7

Rx

通用异步串行数据接收端口

IOB8

APWMO

TimerA脉宽调制输出

IOB9

BPWMO

TimerB脉宽调制输出

IOB10

Tx

通用异步串行数据发送端口

IO端口设置的C库函数

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_Attrib(unsigned int);

void Set_IOB_Attrib(unsigned int);

功能说明 设置IO Attribution信息

用法 Set_IOA_Attrib (Attribution_A);

Set_IOA_Attrib (Attribution_B);

参数

返回值 无

4,函数原型

unsigned int Get_IOA_Attrib(void);

unsigned int Get_IOB_Attrib(void);

功能说明 获取IO Attribution信息

用法 Attribution_A =Set_IOA_Attrib ();

Attribution_B =Set_IOA_Attrib ();

参数 无

返回值

5,函数原型

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代表低电平

返回值 无

6,函数原型

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代表低电平

7,函数原型

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代表低电平

返回值 无

8,函数原型

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代表低电平

9,函数原型

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);

参数

返回值 无

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有