Ⅰ 单片机IO口的概述
凌阳单片机IOA,IOB口的一些简单设置和C语言应用函数 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口上的输入数据,用于进入睡眠状态前的触键唤醒功能的启动。 方向向量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 高电平输出 否 带数据缓存器的高电平输出
(无数据反相功能) 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口除了具有常规的输入/输出端口功能外,还有一些特殊的功能,如下表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库函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);
参数
返回值 无
Ⅱ 51单片机:如何定义一个指向I/O口的指针
你定义的color是指针变量,而你把它当位变量用了。如果color是指针,就只能传递地址,不能传递数值。而P1^1P和1^2里是数值(位值);
把这句:
bit *Color; //指向这两个IO口的指针
改成:
bit Color;
试一试。
如果要用指针,可以这样:
sbit Red = P1^1; //P1-1口控制红灯
sbit Green = P1^2; //P1-2口控制绿灯
bit *Color; //指向这两个IO口的指针
if (按键值 == 1)
*Color = Red; //如果按1号键,Color指向P1-1
else if (按键值 == 2)
*Color = Green; //如果按2号键,Color指向P1-2
*Color = !Color;//对应的灯闪
…
*color表示color所指向地址的内容。
Ⅲ 救急!请问单片机C语言IO口如何定义啊
首先要有这个头文件: #include <AT89X52.H> //根据你用的单片机类型而定
这个头文件已经有了端口的定义,不过用的时候不能写 P1.1,而应该是P1_1(注意:P要大写)
如果要自己重新定义的话:打开这个头文件,修改就行了(里面的内容很简单的,一看就可以明白它是怎样定义的)
也可以调用头文件后在程序里重新给它命名,但没有什么必要。
(对了,我用的软件是keil)
Ⅳ 关于单片机IO口重新定义的问题
sbit 是属于定义、声明,并不会产生实际的代码,用在if后面是不行的。
一个可行的方法是使用条件预处理,像这样
#if flag
sbit HX711_DOUT=P1^4;
#else
sbit HX711_DOUT=P1^2;
#endif
注意,这里的flag,只能是预定义的符号,不可以是变量。
Ⅳ 单片机里的IO口是什么意思啊
原来是是指可以作输入和输出的引脚就叫IO
后来就成为习惯说法了
只要是有输入或者输出功能的叫称为IO
工程师之间谈话的时候会弄明白其中意义的,没必要深究什么
Ⅵ 在单片机编程的时候,应该怎样去定义单片机I/O端口的输入端和输出端
不知你这说的什么锁存器了,一般74x73系列才有八个输入端口,它是在有外总线的单片机中做地址低位锁存用,如我没猜错,那你就把它这八个端口和p0口一一相联,再把g脚和ale/prog相联,电源接电源其它的全接地就ok!输出这时就是相应的地址a0~a7。
Ⅶ 单片机中的p口和IO口的区别
P口指的是“并行口”
IO口指的是“输入输出口”
P口当然可以作为IO口来用,但是通常P3口会用于他的第二功能,而P2口、P0口则经常被用作地址总线和数据总线。只有P1口,常被用于IO口。
举个简单的例子来说明他们之间的关系,P3口像航母,P1口像小渔船,你当然可以开着航母去钓鱼,但是通常没人愿意这么做,因为用小渔船捕鱼就足够了。
Ⅷ 单片机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口设置时要特别注意这一点。
Ⅸ 救急!请问单片机C语言IO口如何定义
/**-------------------------------------------------------------------------------
〖说明〗配置文件
〖文件〗d:\user\BCB\C51BBS 仿真器\编程器\config.h @2002.07.05
〖作者〗新太科技 开发八部 张晓龙 E-mail: [email protected]
〖修改〗 改为PICC用 叶存树 E-mail: [email protected]
〖版本〗V1.00A Build 0705
---------------------------------------------------------------------------------*/
typedef unsigned char BYTE; //注意:有分号
typedef unsigned int WORD;
typedef unsigned long DWORD;
#define Byte unsigned char //注意:无分号
#define Word unsigned int
#define DWord unsigned long
#define bool bit
#define true 1
#define false 0
/**********************
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;
sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;
********************************/
//以下是二进制输入宏
#define B0000_0000 0x00
#define B0000_0001 0x01
#define B0000_0010 0x02
#define B0000_0011 0x03
#define B0000_0100 0x04
#define B0000_0101 0x05
#define B0000_0110 0x06
#define B0000_0111 0x07
#define B0000_1000 0x08
#define B0000_1001 0x09
#define B0000_1010 0x0A
#define B0000_1011 0x0B
#define B0000_1100 0x0C
#define B0000_1101 0x0D
#define B0000_1110 0x0E
#define B0000_1111 0x0F
#define B0001_0000 0x10
#define B0001_0001 0x11
#define B0001_0010 0x12
#define B0001_0011 0x13
#define B0001_0100 0x14
#define B0001_0101 0x15
#define B0001_0110 0x16
#define B0001_0111 0x17
#define B0001_1000 0x18
#define B0001_1001 0x19
#define B0001_1010 0x1A
#define B0001_1011 0x1B
#define B0001_1100 0x1C
#define B0001_1101 0x1D
#define B0001_1110 0x1E
#define B0001_1111 0x1F
#define B0010_0000 0x20
#define B0010_0001 0x21
#define B0010_0010 0x22
#define B0010_0011 0x23
#define B0010_0100 0x24
#define B0010_0101 0x25
#define B0010_0110 0x26
#define B0010_0111 0x27
#define B0010_1000 0x28
#define B0010_1001 0x29
#define B0010_1010 0x2A
#define B0010_1011 0x2B
#define B0010_1100 0x2C
#define B0010_1101 0x2D
#define B0010_1110 0x2E
#define B0010_1111 0x2F
#define B0011_0000 0x30
#define B0011_0001 0x31
#define B0011_0010 0x32
#define B0011_0011 0x33
#define B0011_0100 0x34
#define B0011_0101 0x35
#define B0011_0110 0x36
#define B0011_0111 0x37
#define B0011_1000 0x38
#define B0011_1001 0x39
#define B0011_1010 0x3A
#define B0011_1011 0x3B
#define B0011_1100 0x3C
#define B0011_1101 0x3D
#define B0011_1110 0x3E
#define B0011_1111 0x3F
#define B0100_0000 0x40
#define B0100_0001 0x41
#define B0100_0010 0x42
#define B0100_0011 0x43
#define B0100_0100 0x44
#define B0100_0101 0x45
#define B0100_0110 0x46
#define B0100_0111 0x47
#define B0100_1000 0x48
#define B0100_1001 0x49
#define B0100_1010 0x4A
#define B0100_1011 0x4B
#define B0100_1100 0x4C
#define B0100_1101 0x4D
#define B0100_1110 0x4E
#define B0100_1111 0x4F
#define B0101_0000 0x50
#define B0101_0001 0x51
#define B0101_0010 0x52
#define B0101_0011 0x53
#define B0101_0100 0x54
#define B0101_0101 0x55
#define B0101_0110 0x56
#define B0101_0111 0x57
#define B0101_1000 0x58
#define B0101_1001 0x59
#define B0101_1010 0x5A
#define B0101_1011 0x5B
#define B0101_1100 0x5C
#define B0101_1101 0x5D
#define B0101_1110 0x5E
#define B0101_1111 0x5F
#define B0110_0000 0x60
#define B0110_0001 0x61
#define B0110_0010 0x62
#define B0110_0011 0x63
#define B0110_0100 0x64
#define B0110_0101 0x65
#define B0110_0110 0x66
#define B0110_0111 0x67
#define B0110_1000 0x68
#define B0110_1001 0x69
#define B0110_1010 0x6A
#define B0110_1011 0x6B
#define B0110_1100 0x6C
#define B0110_1101 0x6D
#define B0110_1110 0x6E
#define B0110_1111 0x6F
#define B0111_0000 0x70
#define B0111_0001 0x71
#define B0111_0010 0x72
#define B0111_0011 0x73
#define B0111_0100 0x74
#define B0111_0101 0x75
#define B0111_0110 0x76
#define B0111_0111 0x77
#define B0111_1000 0x78
#define B0111_1001 0x79
#define B0111_1010 0x7A
#define B0111_1011 0x7B
#define B0111_1100 0x7C
#define B0111_1101 0x7D
#define B0111_1110 0x7E
#define B0111_1111 0x7F
#define B1000_0000 0x80
#define B1000_0001 0x81
#define B1000_0010 0x82
#define B1000_0011 0x83
#define B1000_0100 0x84
#define B1000_0101 0x85
#define B1000_0110 0x86
#define B1000_0111 0x87
#define B1000_1000 0x88
#define B1000_1001 0x89
#define B1000_1010 0x8A
#define B1000_1011 0x8B
#define B1000_1100 0x8C
#define B1000_1101 0x8D
#define B1000_1110 0x8E
#define B1000_1111 0x8F
#define B1001_0000 0x90
#define B1001_0001 0x91
#define B1001_0010 0x92
#define B1001_0011 0x93
#define B1001_0100 0x94
#define B1001_0101 0x95
#define B1001_0110 0x96
#define B1001_0111 0x97
#define B1001_1000 0x98
#define B1001_1001 0x99
#define B1001_1010 0x9A
#define B1001_1011 0x9B
#define B1001_1100 0x9C
#define B1001_1101 0x9D
#define B1001_1110 0x9E
#define B1001_1111 0x9F
#define B1010_0000 0xA0
#define B1010_0001 0xA1
#define B1010_0010 0xA2
#define B1010_0011 0xA3
#define B1010_0100 0xA4
#define B1010_0101 0xA5
#define B1010_0110 0xA6
#define B1010_0111 0xA7
#define B1010_1000 0xA8
#define B1010_1001 0xA9
#define B1010_1010 0xAA
#define B1010_1011 0xAB
#define B1010_1100 0xAC
#define B1010_1101 0xAD
#define B1010_1110 0xAE
#define B1010_1111 0xAF
#define B1011_0000 0xB0
#define B1011_0001 0xB1
#define B1011_0010 0xB2
#define B1011_0011 0xB3
#define B1011_0100 0xB4
#define B1011_0101 0xB5
#define B1011_0110 0xB6
#define B1011_0111 0xB7
#define B1011_1000 0xB8
#define B1011_1001 0xB9
#define B1011_1010 0xBA
#define B1011_1011 0xBB
#define B1011_1100 0xBC
#define B1011_1101 0xBD
#define B1011_1110 0xBE
#define B1011_1111 0xBF
#define B1100_0000 0xC0
#define B1100_0001 0xC1
#define B1100_0010 0xC2
#define B1100_0011 0xC3
#define B1100_0100 0xC4
#define B1100_0101 0xC5
#define B1100_0110 0xC6
#define B1100_0111 0xC7
#define B1100_1000 0xC8
#define B1100_1001 0xC9
#define B1100_1010 0xCA
#define B1100_1011 0xCB
#define B1100_1100 0xCC
#define B1100_1101 0xCD
#define B1100_1110 0xCE
#define B1100_1111 0xCF
#define B1101_0000 0xD0
#define B1101_0001 0xD1
#define B1101_0010 0xD2
#define B1101_0011 0xD3
#define B1101_0100 0xD4
#define B1101_0101 0xD5
#define B1101_0110 0xD6
#define B1101_0111 0xD7
#define B1101_1000 0xD8
#define B1101_1001 0xD9
#define B1101_1010 0xDA
#define B1101_1011 0xDB
#define B1101_1100 0xDC
#define B1101_1101 0xDD
#define B1101_1110 0xDE
#define B1101_1111 0xDF
#define B1110_0000 0xE0
#define B1110_0001 0xE1
#define B1110_0010 0xE2
#define B1110_0011 0xE3
#define B1110_0100 0xE4
#define B1110_0101 0xE5
#define B1110_0110 0xE6
#define B1110_0111 0xE7
#define B1110_1000 0xE8
#define B1110_1001 0xE9
#define B1110_1010 0xEA
#define B1110_1011 0xEB
#define B1110_1100 0xEC
#define B1110_1101 0xED
#define B1110_1110 0xEE
#define B1110_1111 0xEF
#define B1111_0000 0xF0
#define B1111_0001 0xF1
#define B1111_0010 0xF2
#define B1111_0011 0xF3
#define B1111_0100 0xF4
#define B1111_0101 0xF5
#define B1111_0110 0xF6
#define B1111_0111 0xF7
#define B1111_1000 0xF8
#define B1111_1001 0xF9
#define B1111_1010 0xFA
#define B1111_1011 0xFB
#define B1111_1100 0xFC
#define B1111_1101 0xFD
#define B1111_1110 0xFE
#define B1111_1111 0xFF
Ⅹ 单片机IO定义
都#define Y P0还能给Y赋值 0x01?
P0就是P0,位定义IO没有偷懒的办法,只有一个一个sbit过来的