① 单片机控制IO口输出高低电平的原理是什么
名称:IO口高低电平控制
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件
包含特殊功能寄存器的定义
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉,ff
换算成二进制是 1111 1111
P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的
灯点亮
//0xfe是16进制,0x开头表示16进制数,fe换
算成二进制是 1111 1110
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
② 请详解下单片机的 并行IO口,串行IO口,及二者区别
单片机串行通讯与并行通讯区别
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。 串行通讯又分为异步通讯和同步通讯两种方式。在单片机中,主要使用异步通讯方式。
串行通讯中,两个设备之间通过一对信号线进行通讯,其中一根为信号线,另外一根为信号地线,信号电流通过信号线到达目标设备,再经过信号地线返回,构成一个信号回路。
初级读者会产生疑问:为何不让信号电流从电源地线返回?答案:公共地线上存在各种杂乱的电流,可以轻而易举地把信号淹没。因此所有的信号线都使用信号地线而不是电源地线,以避免干扰。
这一对信号线每次只传送1bit(比特)的信号,比如1Byte(字节)的信号需要8次才能发完。传输的信号可以是数据、指令或者控制信号,这取决于采用的是何种通讯协议以及传输状态。串行信号本身也可以带有时钟信息,并且可以通过算法校正时钟。因此不需要额外的时钟信号进行控制。
并行通讯中,基本原理与串行通讯没有区别。只不过使用了成倍的信号线路,从而一次可以传送更多bit的信号。
并行通讯通常可以一次传送8bit、16bit、32bit甚至更高的位数,相应地就需要8根、16根、32根信号线,同时需要加入更多的信号地线。比如传统的PATA线路有40根线,其中有16根信号线和7根信号地线,其他为各种控制线,一次可以传送2Byte的数据。并行通讯中,数据信号中无法携带时钟信息,为了保证各对信号线上的信号时序一致,并行设备需要严格同步时钟信号,或者采用额外的时钟信号线。
通过串行通讯与并行通讯的对比,可以看出:串行通讯很简单,但是相对速度低;并行通讯比较复杂,但是相对速度高。更重要的是,串行线路仅使用一对信号线,线路成本低并且抗干扰能力强,因此可以用在长距离通讯上;而并行线路使用多对信号线(还不包括额外的控制线路),线路成本高并且抗干扰能力差,因此对通讯距离有非常严格的限制。
③ 单片机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);
参数
返回值 无
④ 单片机内部4个并行I/O口各有什么异同其作用是什么
p0是双向数据口用作数据传输和低位地址输出,P1-P3有内部上接电阻,叫准双向口,P1无特殊功能,P2可输出高位地址,P3有特殊功能,如中断,计数等
⑤ 单片机的I/O口是什么意思
单片机的I/O口的意思是:I/O是 input/output的缩写,即输入输出端口。
每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。
(5)单片机io口原理扩展阅读:
单片机I/O口的输出模式:
1、准双向口输出
准双向口输出就是可作为输出也可作为输入口,因此这个口是不定的,是准双向类型,不用重新I/O口的输出状态 。准双向口有3个上拉晶体管以便根据不同的需要设置表不同的参数。这三个晶体管分别是起到强上拉、极弱上拉、弱上拉功能。
2、推挽输出
推挽输出是因为它的输出结构类似于推挽结构,它是一种由两个三极管(或者其他MOS管等)分别受到一个信号的控制,这信号的互补的,就是说只有一个三极管导通,一个三极管导通的时候另一个就要截止。
推挽输出可以输出高电平,也可以输出低电平。当锁存器为“1”时候可以持续提供强上拉,这种输出结构可以驱动需要很大电流的器件。
3、开漏输出
这种结构作为逻辑输出时候,必须要有外部上拉,上拉电阻要为10K左右比较好,一般是通过电阻加到VCC电源,这样才可以读取外部状态,也就是说此时的开漏输出的可以作为外部的输入I/O口。
⑥ 单片机是如何控制IO口输出高低电平的 不要告诉我试靠程序 我要的是原理 谢谢
单片机控制此漏滑端搜唤输出相应值,IO输出端输出相应值
简单的森腊反相器示意图