STC51单片机IO口模式快速设置
学习笔记之-51单片机IO口详解
学习笔记之-51单片机IO口详解前言 对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。
51单片机每个IO端口结构都有差异,都各有各的特点。
在平时的应用中,特别是设计外围硬件的时候,如果不了解其内部结构的话设计起来也许会有问题(特别是用到P0口),所以好好了解每个端口的结构是非常有必要的。
再有一点是51单片机的引脚不像STM32那样可以支持重映射,所以硬件布局的时候也要注意这一点。
下面就是在网上找的一点资料,整理如下:51单片机I/O口内部结构1.1P0端口的结构及工作原理 P0端口8位中的一位结构图 由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。
图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。
下面,我们先介绍一下组成P0口的每个单元部份:- 输入缓冲器:在P0口中,有两个三态的缓冲器,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态)。
要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。
下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
- D锁存器:构成一个锁存器,通常要用一个时序电路,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。
上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。
对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。
51单片机串口设置及应用
51单片机串口设置及应用单片机的串口设置及应用是指通过单片机的串口功能来进行通信的一种方式。
串口通信是一种全双工通信方式,可以实现双向数据传输。
单片机通过串口可以与其他设备进行通信,如计算机、传感器、LCD显示屏等。
1. 串口设置:单片机的串口通信一般需要进行以下设置:(1)串口模式选择:要根据实际情况选择串口工作模式,一般有异步串口和同步串口两种。
(2)波特率设置:串口通信需要设置一个波特率,即数据传输速率。
常见的波特率有9600、19200、115200等,需要与通信的设备保持一致。
(3)数据位设置:设置传输的数据位数,常见的有8位、9位等。
(4)停止位设置:设置停止位的个数,常见的有1位、2位等。
(5)校验位设置:可以选择是否启用校验位,校验位主要用于检测数据传输的正确性。
2. 串口应用:串口通信在很多领域都得到广泛应用,下面列举几个常见的应用场景:(1)串口与计算机通信:通过串口可以实现单片机与计算机的通信,可以进行数据的读写、控制等操作。
例如,可以通过串口将传感器采集到的数据发送给计算机,由计算机进行进一步处理分析。
(2)串口与传感器通信:串口可以与各种传感器进行通信,可以读取传感器采集到的数据,并进行处理和控制。
例如,可以通过串口连接温度传感器,读取实时的温度数据,然后进行温度控制。
(3)串口与LCD显示屏通信:通过串口可以实现单片机与LCD显示屏的通信,可以将需要显示的数据发送给LCD显示屏进行显示。
例如,可以通过串口将单片机采集到的数据以数字或字符的形式显示在LCD上。
(4)串口与外部存储器通信:通过串口可以与外部存储器进行通信,可以读写存储器中的数据。
例如,可以通过串口读取SD卡中存储的图像数据,然后进行图像处理或显示。
(5)串口与其他设备通信:通过串口可以和各种其他设备进行通信,实现数据的传输和控制。
例如,可以通过串口与打印机通信,将需要打印的数据发送给打印机进行打印。
总结:单片机的串口设置及应用是一种实现通信的重要方式。
单片机io口的某位高低电平设置方法
单片机io口的某位高低电平设置方法下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!单片机IO口的某位高低电平设置方法在嵌入式系统中,单片机的IO口控制是非常基础且常见的操作。
STC51单片机IO口模式快速设置
STC51单片机IO口模式的快速设置新型51单片机STC系列,较传统51单片机在性能和速度上有根本性的提高。
速度提高8—12倍;片上RAM大量增加;片上外围模块大量增加,等等。
其中IO口的模式增加为4种(传统51只有1中),以P0口为例:这里,每个端口新增两个寄存器PxM0, PxM1(x=0,1,2,3)。
在设置每一个IO端的模式时都需要对这两个寄存器进行操作。
比如:要将P0.7设为推挽输出,P0.6设为准双向口,P0.5设为高阻输入;P0.4设为开路模式,P0.3---P0.0都设为准双向口,那么需要如下的代码:IO_Init(){P0M0=0x30;//0011 0000P0M1=0x90;//1001 0000}这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:#define PORT0 0#define PORT1 1#define PORT2 2#define PORT3 3#define BIT0 0#define BIT1 1#define BIT2 2#define BIT3 3#define BIT4 4#define BIT5 5#define BIT6 6#define BIT7 7#define STANDARD 0#define PP_OUT 1#define Z_IN 2#define OD 3#define IOMODE(Port,bit_n,mode) { \switch(Port)\{\case 0:\switch(mode) { \case STANDARD: P0M0&=~(1<<bit_n); P0M1&=~(1<<bit_n); break; \case PP_OUT: P0M0&=~(1<<bit_n); P0M1|= (1<<bit_n); break; \case Z_IN: P0M0|=(1<<bit_n); P0M1&=~(1<<bit_n); break; \case OD: P0M0|=(1<<bit_n); P0M1|=(1<<bit_n); break; \} \break;\case 1:\switch(mode) { \case STANDARD: P1M0&=~(1<<bit_n); P1M1&=~(1<<bit_n); break; \case PP_OUT: P1M0&=~(1<<bit_n); P1M1|= (1<<bit_n); break; \case Z_IN: P1M0|=(1<<bit_n); P1M1&=~(1<<bit_n); break; \case OD: P1M0|=(1<<bit_n); P1M1|=(1<<bit_n); break; \} \break;\case 2:\switch(mode) { \case STANDARD: P2M0&=~(1<<bit_n); P2M1&=~(1<<bit_n); break; \case PP_OUT: P2M0&=~(1<<bit_n); P2M1|= (1<<bit_n); break; \case Z_IN: P2M0|=(1<<bit_n); P2M1&=~(1<<bit_n); break; \case OD: P2M0|=(1<<bit_n); P2M1|=(1<<bit_n); break; \} \break;\case 3:\switch(mode) { \case STANDARD: P3M0&=~(1<<bit_n); P3M1&=~(1<<bit_n); break; \case PP_OUT: P3M0&=~(1<<bit_n); P3M1|= (1<<bit_n); break; \case Z_IN: P3M0|=(1<<bit_n); P3M1&=~(1<<bit_n); break; \case OD: P3M0|=(1<<bit_n); P3M1|=(1<<bit_n); break; \} \break;\}\}有了上面的宏定义,在初始化程序中可以直接这样写IO_Init(){IOMODE(PORT0,BIT7,PP_OUT)IOMODE(PORT0,BIT6, STANDARD)IOMODE(PORT0,BIT5, Z_IN)IOMODE(PORT0,BIT4, OD)IOMODE(PORT0,BIT3, STANDARD)IOMODE(PORT0,BIT2, STANDARD)IOMODE(PORT0,BIT1, STANDARD)IOMODE(PORT0,BIT0, STANDARD)}。
STC51单片机的IO配置问题解决方案
STC51单片机的IO配置问题解决方案STC51单片机的IO配置问题解决方案我们人类可以通过连接手脚上神经网络,肌腱,控制着我们的肌肉做出各种动作,完成各种造型。
那单片机里的肌腱和神经就是今天我们要讲的主角----单片机的IO 口。
我们学习单片机,到底学什么呢?最终落脚点,就是落在单片机的IO口上,其实最终就是操作单片机的IO口,什么串口通讯,IIC通信协议,中断,定时器,最终在单片机上体现出来的还是我们对单片机IO口的操作。
既然那么重要,今天我们就来好好的说一说单片机的IO口。
说起单片机的IO口,大家肯定会笑话小编,这么简单的东西,还要你说。
对,它是简单,看遍你是个人写的单片机教程,最开始讲编程就是从操作单片机IO口开始,都是从点亮一个LED灯开始,是的点亮一个LED灯,就是对单片机IO的最简单的操作,要么给高电平,要么给低电平,这也是操作IO的唯一的两个方法。
怎么说?举个例子:要在某个IO上输出PWM信号,其实就是有规律的在这个IO上交替的给高低电平,给的速度快慢决定了PWM信号的频率,给的高电平的时间所占一个高低电平周期的多少,决定了这个PWM信号的占空比。
这么一说,高大上的PWM信号是不是就简单多了。
说了这么多,下面我们具体来说STC51单的IO的配置和各个模式的区别。
·正·文·来·啦·STC的51单片机为了更多更能的使用和运用于不同场合,STC51单片机设计了4中IO口模式,分别是:准双向IO口模式、推挽输出模式、高阻输入模式和开漏输出模式。
每个IO口的模式配置,需要两个寄存器结合起来进行设置。
这两个寄存器分别是PnM1和PnM0,(在STC8系列芯片中n=0,1,2,3,4,5,6,7),以P0口为例,配置P0口需要P0M1和P0M0两个寄存器进行配置,具体如下图:即P0M1寄存器的第0位和P0M0寄存器的第0位组合起来配置P0.0位的模式,P0M1寄存器的第1位和P0M0寄存器的第1位组合起来配置P0.1位的模式,P0口的其他位以此。
2.1.1 51单片机IO操作.
④ P3口(10~17脚)
8位准双向口,操作方式等和P1类似。在8051中,P3口还 可按位复用为其它功能,具体见下表:
口线 P30 P31 P32 P33 P34 P35 P36 P37
引脚 10 11 12 13 14 15 16 17
第二功能 RxD(串行口输入) TxD(串行口输出) INT0(外部中断0) INT1(外部中断1) T0(定时器0外部输入) T1(定时器1外部输入) WR(外部存储器写脉冲) RD(外部存储器读脉冲)
CPU可对其按字节方式或位方式进行操作。 P0口的内部电路如下图所示:
P0口内部电路构成
0
地址/数据 控制
VCC
读锁存器
内部总线 写锁存器
S SET Q
P0.X 锁存器
R CLR Q
0
二选一 复用器
读引脚
P0.X引脚
② P1口(1~8脚) 8位准双向I/O口。没有高阻状态,输入也不能锁存,必
须先输出1才能正确读出端口电平,故称为准双向口。 CPU既可以对P1进行字节操作,也可以通过位操作方式
当EA接地时,单片机只运行外部程序存储器中的程序。 对于有内部ROM/FLASH的单片机,此引脚还用来在编程 时输入编程电源。
(4) 并行I/O口P0~P3的结构和功能
① P0口 (39~32脚) 双向8位三态I/O口,在外接存储器时,作为数据总线
和地址总线的低8位(复用,通过ALE信号区分); P0口的每一位能以吸收电流的方式驱动8个TTL负载。
对于片内有ROM/FLASH的单片机,此引脚在编程期间 输入编程脉冲。
④ EA/VPP (31脚) 当EA外接高电平时,单片机运行内部ROM/FLASH中的程
51单片机 速度调节+定时控制
#define MENU_HOUR2
#define MENU_MINUTE3
uchar bFlag_5ms;// 5ms标志
uchar cTickCnt_5ms;// 5ms计数值
uchar cFanSpeed;//风速
uchar cFanPwmCnt;//风扇PWM计数
uchar cLedBuf[4];// LED缓存
uchar Timer;//定时标志
uchar Set_Hour;//定时小时
uchar Set_Minute;//定时分钟
uchar cLed_off;//数码管关
uint led;
uint cSecCnt;//秒计数
uchar code tablename[] = {~0x92,~0xbf,~0x87};//s -t
void InitTimer0(void)//1毫秒
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0xfc;
TL0 = 0x18;
if(++cTickCnt_5ms == 5)
case KEY_DOWN: //减键
{
if(cMenu == MENU_NULL) //风速调整
{
if(--cFanSpeed == -1)
cFanSpeed = 10;
}
else if(cMenu == MENU_TIMER) //定时调整
51单片机IO说明
一、P0端口的结构及工作原理P0端口8位中的一位结构图见下图:由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。
再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。
下面,我们先就组成P0口的每个单元部份跟大家介绍一下:先看输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),大家看上图,上面一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。
下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
D锁存器:构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。
大家看上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。
对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。
如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及Q非端。
数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。
如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。
多路开关:在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。
IO口模式设置
开漏输出:OC门的输出就是开漏输出;OD门的输出也是开漏输出。
TTL电路有集电极开路OC门,MOS管也有和集电极对应的漏极开路的OD门,它的输出就叫做开漏输出。
它可以吸收很大的电流,但是不能向外输出电流。
所以,为了能输入和输出电流,它使用的时候要跟电源和上拉电阻一齐用。
OC门开漏输出和OD门开漏输出都是为了同一个目的,都是为了实现逻辑器件的线与逻辑,当然选用不同的外接电阻也可以实现外围驱动能力的增加。
当你应用此电路的时候,要注意应用时要加上拉电阻接电源,这样才能保证逻辑的正确,在电阻上要根据逻辑器件的扇入扇出系数来确定,但一般mos电路带载同样的mos电路能力比较强,所以电阻通常可以选择2.2k,4.9k这样一些常用的。
推挽输出与开漏输出的区别推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.要实现线与需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。
同理,开集电路中的“集”就是指三极管的集电极。
开漏电路就是指以MOSFET的漏极为输出的电路。
一般的用法是会在漏极外部的电路添加上拉电阻。
完整的开漏电路应该由开漏器件和开漏上拉电阻组成。
如图1所示:组成开漏形式的电路有以下几个特点:1. 利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。
STC51单片机的IO配置问题解决方案
STC51单片机的IO配置问题解决方案我们人类可以通过连接手脚上神经网络,肌腱,控制着我们的肌肉做出各种动作,完成各种造型。
那单片机里的肌腱和神经就是今天我们要讲的主角----单片机的IO 口。
我们学习单片机,到底学什么呢?最终落脚点,就是落在单片机的IO口上,其实最终就是操作单片机的IO口,什么串口通讯,IIC通信协议,中断,定时器,最终在单片机上体现出来的还是我们对单片机IO口的操作。
既然那么重要,今天我们就来好好的说一说单片机的IO口。
说起单片机的IO口,大家肯定会笑话小编,这么简单的东西,还要你说。
对,它是简单,看遍你是个人写的单片机教程,最开始讲编程就是从操作单片机IO口开始,都是从点亮一个LED灯开始,是的点亮一个LED灯,就是对单片机IO的最简单的操作,要么给高电平,要么给低电平,这也是操作IO的唯一的两个方法。
怎么说?举个例子:要在某个IO上输出PWM信号,其实就是有规律的在这个IO上交替的给高低电平,给的速度快慢决定了PWM信号的频率,给的高电平的时间所占一个高低电平周期的多少,决定了这个PWM信号的占空比。
这么一说,高大上的PWM信号是不是就简单多了。
说了这么多,下面我们具体来说STC51单的IO的配置和各个模式的区别。
·正·文·来·啦·STC的51单片机为了更多更能的使用和运用于不同场合,STC51单片机设计了4中IO口模式,分别是:准双向IO口模式、推挽输出模式、高阻输入模式和开漏输出模式。
每个IO口的模式配置,需要两个寄存器结合起来进行设置。
这两个寄存器分别是PnM1和PnM0,(在STC8系列芯片中n=0,1,2,3,4,5,6,7),以P0口为例,配置P0口需要P0M1和P0M0两个寄存器进行配置,具体如下图:即P0M1寄存器的第0位和P0M0寄存器的第0位组合起来配置P0.0位的模式,P0M1寄存器的第1位和P0M0寄存器的第1位组合起来配置P0.1位的模式,P0口的其他位以此。
51单片机IO口的四种使用方法
号称中国科学的脊梁,丁仲礼到底有啥贡献?正值五月,还没迎来三伏天,却已经一离开空调,就会觉得自己快要热化了。
不得不说,天气一年比一年热,四季也逐渐难辨,好像过了冬就到了夏天。
一波波提前得反常的高温,似乎也在无声地提醒着我们全球变暖仍处于加剧阶段。
莫非我们真的处在地球温度最高的时期?它真的威胁着地球和人类的生存吗?其实不然,历史上很多时期的温度比现在都高得多。
比如现在生活在热带或是亚热带地区的亚洲象,在商朝时期(距今3千多年前)也曾在中原地区生活。
而一般产于岭南的荔枝,在唐宋时期也曾在四川东北部的巴中地区种植。
青铜象尊,《吕氏春秋》有周鼎著象的记载。
因此,正如这位科学家说得那样,气候变暖并没人们想象中可怕,我们需要辩证地看待它。
他就是曾在国际大会上发表过激烈言论,还当面怒怼记者的科学家丁仲礼。
诸如中国人是不是人、地球用不着人类拯救、想当公务员就别报考国科大等金皆出自其口中。
从教语文到国科大校长,从挖黄土到从中科院副院长,看似霸气、性格直冲的他总能干好每个岗位上的工作。
丁仲礼,1957年出生在浙江绍兴嵊州的一个小村子。
与我们大多数父辈一样,他读完高中就直接回乡帮忙干农活了。
机缘巧合下,他被村里的中学聘为代课老师,教学生语文。
1977年恢复的高考制度改变了千万人的命运。
丁仲礼便是其中之一。
他第一次参加高考时很自然地报考了文科,并获得不错的分数。
不曾想,体检那一天,他却因血压偏高而未能如愿通过。
于是,第二年他选择报考了理科,并成功考上了浙江大学地质系。
虽说他心里更偏爱文科,但选择了就要全心全意将其学好,便一头扎进地质学的世界。
本科。
51单片机实战指南 第2章 51单片机IO口简单应用
2.1 单片机最小应用系统
单片机最小系统是指维持单片机正常工作所必需的电路连接。
对于51单片机,将时钟电路(晶振电路)和复位电路接入即可 构成单片机最小应用系统,该系统接+5V电源,配以相应的程 序就能够独立工作,完成一定的功能。
2.1 单片机最小应用系统
图2-1 单片机最小应用系统
2.1 单片机最小应用系统
}
}
2.2.3 程序设计
方法二(位操作)
#include <reg52.h> //52单片机头文件
typedef unsigned int u16 ;
sbit A0=P1^5;
//将P1.5定义为74HC138的A0引脚
sbit A1=P1^6;
//将P1.6定义为74HC138的A1引脚
sbit A2=P1^7;
{
A2=A1=A0=0; // 使LED灯的总开关三极管Q6导通,+5V加到LED灯组 P0=0x55; //即将二进制数01010101赋给P0 } }
2.2.3 程序设计
方法二(位操作)
#include <reg52.h> //52单片机头文件
#define led P0
//将P0口定义为led 后面就可以使用led代替P0口
sbit Led6=P0^3;
sbit Led4=P0^1;
int main(void)
//主程序main函数
{ while(1)
//主程序中设置死循环程序,保证周而复注始释运行
{
A2=A1=A0=0; // 使LED灯的总开关三极管Q6导通,+5V加到LED灯组
P0=0xff; //全灭。此语句可省略,因复位后P0即为0xff
最新51单片机并行口的操作汇总
• P2口的工作状态是I/O口状态。
在内部控制信号的作用下,多路开关的输入投向输出锁 存器的输出Q(C点)侧,这样多路开关将接通输出锁存器。
若经由内部总线输出0,输出锁存器的Q端为0,信号经多 路开关和反相器后输出1,Q0导通,A点为0,输出低电平;若 经由内部总线输出1,输出锁存器的Q端为1,反相器后输出0, Q0截止,A点为1 ,输出高电平。
B、P1口的位结构
• P1口由于只能作为I/O口使用,因而输出控制电路 结构同P0口不同。
P1口
P1口P1的口工是作一过个程8位分口析,如可下以:字节访问也可按位访问,其字节访 问地址为90H,位访问地址为90H~97H。 • P1.i位作输出口用时:CPU输出0时,D=0,Q=0,Q=l, 晶⒈体位管结Q0构导和通工,作A点原被理下拉为低电平,即输出0;CPU输出1
时包,含D输=出l,锁Q存=器1,、Q输=入0,缓晶冲体器管BUQF01截(止读,引A脚点)被、上BU拉F2为(高读锁 存电器平),以即及输由出lF。ET晶体管 Q0与上拉电阻组成的输出/输入驱
动器。
• P1.i位作输入口用时:先向P1.i位输出高电平,使FET 截止(使A点提升为高电平),此操作称为设置P1.i为输入 线。引脚的状态通过缓冲器B2进入内部总线。
⑶ 在无外接程序存储器而有片外数据存储器的系统中,P2口 使用可分为两种情况:
• 若片外数据存储器的容量<256 B:可使用“MOVX A,@Ri” 及“MOVX @Ri,A”类指令访问片外数据存储器,这时P2口不 输出地址,P2口仍可作为I/O口使用;
• P2口的工作状态是输出高8位地址。
在内部控制信号的作用下,多路开关的输入投向地址输出 (B点)侧,这样多路开关将接通地址寄存器输出。A点的电 平将随地址输出的0、1而0、1地变化。
MCS-51 I-O端口的使用
(2)P3口第二功能
P3口第二功能如表所示:
提示
根据实际的应用场合中的需要,一般 把几条端口线设置为第二功能,而另外几 条端口线处于第一功能运行状态。因此, 在这种情况下,不宜对P3端口作字节操作, 需采用位操作的形式。
—6—
读锁存器
读锁存器中的数据时,读锁存器三态门缓冲器 U1打开(即三态门缓冲器的控制端有效),锁存器 输出端Q的数据经三态门U1进入内部数据总线。
注意
当从内部总线输出高电平后,锁存器Q=1,Q=0,场效 应管T2截止。若外接引脚信号为低电平,此时从引脚读入的 数据与从锁存器读入的数据不同。
为避免原端口的状态被读错,MCS-51系列单片机指令系 统中提供了“读—修改—写”方式指令,如ANL、ORL、XRL等 (这些指令都需要得到原端口输出的状态,修改后再输出), 采用读锁存器方式而不是读引脚方式。
P2口作为I/O端口使用时,多路开 关的控制信号为0(低电平),多路开 关与锁存器的Q端相接,数据输出与输 入工作过程与P0端口作为通用I/O口时 相似,这里不再赘述。
P2口作为通用I/O口
—11—
P2口作为地址总线时,多路开关的控 制信号为1(高电平),多路开关与地 址线接通,地址信号→非门(数据反 相)→场效应管(数据反相)→P2.X。
—4—
① 数据输出
由数据总线向引脚输出的工作过程:写锁存器信号CP有效, 内部总线的信号→锁存器的输入端D→锁存器的反向输出 端Q→多路开关MUX→T2管(数据反相)→P0.X。
提示
当多路开关的控制信号为低电平0时,与门输出为低电平,T1管是 截止的,所以作为输出口时,P0是漏极开路输出,当驱动上接电流负 载时,需要外接上拉电阻。
51单片机IO端口的四种输入输出模式知识讲解
51单片机I O端口的四种输入输出模式51单片机IO端口的四种输入输出模式 (by wuleisly)单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O口吗?你真的能按你的需要配置I O口吗?一、准双向口输出准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
(准双向口有3个上拉晶体管适应不同的需要)准双向口读外部状态前,要先锁存为‘1’,才可读到外部正确的状态.二、强推挽输出推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
三、仅为输入(高阻)输入口带有一个施密特触发输入以及一个干扰抑制电路。
四、开漏输出配置(若外加上拉电阻,也可读)当口线锁存器为0时,开漏输出关闭所有上拉晶体管。
当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V cc。
如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。
这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
关于I/O口应用注意事项:1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。
因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.有些实际没有损坏,加上拉电阻就O K了有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强推挽输出. 2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MO S电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上拉口在由0变为1时,会有2时钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在软件处理上,不要出现按键两端的I/O口同时为低.一种典型三极管控制电路:如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3.3K~10 K),建议R2的值在15K以上,或用强推挽输出。
51单片机IO口输入输出方式
51 单片机IO 口输入输出方式
传统51 单片机IO 接口只可以作为标准双向IO 接口,如果用其来驱动LED 只能用灌电流的方式或是用三极管外扩驱动电路。
灌电流方式:LED 正极接VCC,负极接IO 口。
IO 为高电平是LED 两极电平相同,没有电流,LED 熄灭;IO 为低电平时,电流从VCC 流入IO,LED 点亮。
但是当你吧LED 正极接在IO 接口,负极接GND 时,将IO 接口置于高电平,LED 会亮,但因为IO 接口上拉能力不足而使亮度不理想,可以用
下面介绍的方式解决这个问题。
推挽工作方式:LED 正负极分别接在两个IO 口上,然后设置正极IO 接口为推挽输出,负极IO 接口为标准双向灌电流输入。
推挽方式具有强上拉能力,可以实现高电平驱动LED。
IO 口的四种使用方法
从I/O 口的特性上看,标准51 的P0 口在作为I/O 口使用时,是开漏结构,在实际应用中通常要添加上拉电阻;P1、P2、P3 都是准双向I/O,内部有上拉电阻,既可作为输入又可以作为输出。
而LPC900 系列单片机的I/O 口特性有一定的不同,它们可以被配置成4 种不同的工作模式:准双向I/O、推挽输出、高阻输入、开漏。
准双向I/O 模式与标准51 相比,虽然在内部结构上是不同的,但在用法上。
51单片机io口工作的基本原理
51单片机io口工作的基本原理单片机(Microcontroller)是一种集成电路芯片,它包含了一个完整的计算机系统,可被程序控制。
在单片机中,IO口(Input/Output Port)是指用于与外部设备进行数据交互的接口。
本文将介绍51单片机IO口工作的基本原理。
一、IO口概述IO口是单片机的重要组成部分,它提供了与外部设备进行数据通信的能力。
在51单片机中,通常使用的IO口是P0、P1、P2和P3。
每个IO口都包含了8个引脚,可以用来连接各种外设,如LED、按键、传感器等。
二、IO口的输入输出模式1. 输入模式:当IO口设置为输入模式时,它可以接收来自外部设备的信号。
在51单片机中,通过将IO口对应的bit位设置为1,可以将该IO口设置为输入模式。
2. 输出模式:当IO口设置为输出模式时,它可以向外部设备发送信号。
在51单片机中,通过将IO口对应的bit位设置为0,可以将该IO口设置为输出模式。
当IO口为输出模式时,我们可以通过设置IO口的电平状态(高电平或低电平)来控制外部设备。
三、IO口的控制方法1. 单独控制:我们可以通过直接对IO口进行操作来实现对外部设备的控制。
在51单片机中,通过修改IO口的电平状态,从而改变引脚的电压值,来达到控制的目的。
2. 组合控制:在某些情况下,我们可能需要同时控制多个IO口,使它们协同工作。
在51单片机中,我们可以通过设置特定的寄存器来实现对多个IO 口的同时控制。
例如,使用P0或P2口作为数据总线,通过设置P0CON或P2CON寄存器来实现对该总线上的多个引脚的控制。
四、IO口的中断功能在实际应用中,我们常常需要根据外部设备的状态来触发特定的操作。
为了实现这一功能,51单片机提供了IO口中断功能。
通过设置中断触发方式和中断掩码,当IO口的电平状态发生变化时,可以触发相应的中断服务程序。
五、IO口的工作原理1. 数据方向控制:在51单片机中,通过特定的寄存器来控制IO口的数据方向。
STC51单片机IO口模式快速设置
S T C51单片机I O口模式快速设置-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANSTC51单片机IO口模式的快速设置新型51单片机STC系列,较传统51单片机在性能和速度上有根本性的提高。
速度提高8—12倍;片上RAM大量增加;片上外围模块大量增加,等等。
其中IO口的模式增加为4种(传统51只有1中),以P0口为例:这里,每个端口新增两个寄存器PxM0, PxM1(x=0,1,2,3)。
在设置每一个IO端的模式时都需要对这两个寄存器进行操作。
比如:要将设为推挽输出,设为准双向口,设为高阻输入;设为开路模式,都设为准双向口,那么需要如下的代码:IO_Init(){P0M0=0x30;//0011 0000P0M1=0x90;//1001 0000}这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:#define PORT0 0#define PORT1 1#define PORT2 2#define PORT3 3#define BIT0 0#define BIT1 1#define BIT2 2#define BIT3 3#define BIT4 4#define BIT5 5#define BIT6 6#define BIT7 7#define STANDARD 0#define PP_OUT 1#define Z_IN 2#define OD 3#define IOMODE(Port,bit_n,mode) { \switch(Port)\{\case 0:\switch(mode) { \case STANDARD: P0M0&=~(1<<bit_n); P0M1&=~(1<<bit_n); break; \case PP_OUT: P0M0&=~(1<<bit_n); P0M1|= (1<<bit_n); break; \case Z_IN: P0M0|=(1<<bit_n); P0M1&=~(1<<bit_n); break; \case OD: P0M0|=(1<<bit_n); P0M1|=(1<<bit_n); break; \} \break;\case 1:\switch(mode) { \case STANDARD: P1M0&=~(1<<bit_n); P1M1&=~(1<<bit_n); break; \case PP_OUT: P1M0&=~(1<<bit_n); P1M1|= (1<<bit_n); break; \case Z_IN: P1M0|=(1<<bit_n); P1M1&=~(1<<bit_n); break; \case OD: P1M0|=(1<<bit_n); P1M1|=(1<<bit_n); break; \} \break;\case 2:\switch(mode) { \case STANDARD: P2M0&=~(1<<bit_n); P2M1&=~(1<<bit_n); break; \case PP_OUT: P2M0&=~(1<<bit_n); P2M1|= (1<<bit_n); break; \case Z_IN: P2M0|=(1<<bit_n); P2M1&=~(1<<bit_n); break; \case OD: P2M0|=(1<<bit_n); P2M1|=(1<<bit_n); break; \} \break;\case 3:\switch(mode) { \case STANDARD: P3M0&=~(1<<bit_n); P3M1&=~(1<<bit_n); break; \case PP_OUT: P3M0&=~(1<<bit_n); P3M1|= (1<<bit_n); break; \case Z_IN: P3M0|=(1<<bit_n); P3M1&=~(1<<bit_n); break; \case OD: P3M0|=(1<<bit_n); P3M1|=(1<<bit_n); break; \} \break;\}\}有了上面的宏定义,在初始化程序中可以直接这样写IO_Init(){IOMODE(PORT0,BIT7,PP_OUT)IOMODE(PORT0,BIT6, STANDARD)IOMODE(PORT0,BIT5, Z_IN)IOMODE(PORT0,BIT4, OD)IOMODE(PORT0,BIT3, STANDARD)IOMODE(PORT0,BIT2, STANDARD)IOMODE(PORT0,BIT1, STANDARD)IOMODE(PORT0,BIT0, STANDARD)}。
51单片机IO端口的四种输入输出模式
51单片机IO端口的四种输入输出模式(by wuleisly)单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O 口吗?你真的能按你的需要配置I O口吗?一、准双向口输出准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
(准双向口有3个上拉晶体管适应不同的需要)准双向口读外部状态前,要先锁存为…1‟,才可读到外部正确的状态.二、强推挽输出推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
三、仅为输入(高阻)输入口带有一个施密特触发输入以及一个干扰抑制电路。
四、开漏输出配置(若外加上拉电阻,也可读)当口线锁存器为0时,开漏输出关闭所有上拉晶体管。
当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。
如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。
这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
关于I/O口应用注意事项:1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。
因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.有些实际没有损坏,加上拉电阻就OK了有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强推挽输出.2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MOS电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上拉口在由0变为1时,会有2时钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在软件处理上,不要出现按键两端的I/O口同时为低.一种典型三极管控制电路:如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3. 3K~10K),建议R2的值在15K以上,或用强推挽输出。
stc单片机IO配置与PWM
stc单片机IO配置与PWMI/O口配置STC2C5201AD系列单片机所有I/O口均可由软件配置成4种工作类型之一,如下表所示。
4种类型分别为:准双向口/弱上拉(标准8051输出模式)、强推挽输出/强上拉、仅为输入(高阻)或开漏输出功能。
每个口由2个控制寄存器中的相应位控制每个引脚工作类型。
STC- 2C5201AD系列单片机上电复位后为准双向口/弱上拉(传统805 的I/O口)模式。
2V以上时为高电平,0.8V以下时为低电平。
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过90mA。
P3口设定;(P3口地址:B0H)口地址:B0H))P3M1 [7:0]P3M0 [7 : 0]I/O 口模式准双向口(传统805 I/O 口模式),灌电流可达20mA , 拉电流为230μA ,由于制造误差,实际为250uA~ 50uA1强推挽输出(强上拉输出,可达20mA, 要加限流电阻)1仅为输入(高阻)11开漏(Open Drain),内部上拉电阻断开,要外上拉MOV P3M1,#10100000BMOV P3M0 #10010000BP3.7为开漏P3.5为高阻P3.4为强推挽输出,其他为准双向PWM输出时I/O口的状态当某个I/O口作为PWM输出用时,该口的状态:PWM之前口的状态PWM时口的状态弱上拉/准双向口强推挽输出/强上拉输出,要加输出限流电阻10K ~1K强推挽输出强推挽输出/强上拉输出,要加输出限流电阻10K ~1K仅为输入/高阻PWM无开漏开漏普通I/O口---〉限流电阻用(10K到1K)-----〉接负载4.6.如何让I/O口上电复位时为低电平普通8051单片机上电复位时普通I/O口为弱上拉高电平输出,而很多实际应用要求上电时某些I/O口为低电平输出,否则所控制的系统(如马达)就会误动作,现STC12系列单片机由于既有弱上拉输出又有强推挽输出,就可以很轻松的解决此问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STC51单片机IO口模式的快速设置新型51单片机STC系列,较传统51单片机在性能和速度上有根本性的提高。
速度提高8—12倍;片上RAM大量增加;片上外围模块大量增加,等等。
其中IO口的模式增加为4种(传统51只有1中),以P0口为例:这里,每个端口新增两个寄存器PxM0, PxM1(x=0,1,2,3)。
在设置每一个IO端的模式时都需要对这两个寄存器进行操作。
比如:要将设为推挽输出,
设为准双向口,
设为高阻输入;
设为开路模式,
都设为准双向口,
那么需要如下的代码:
IO_Init()
{
P0M0=0x30;//0011 0000
P0M1=0x90;//1001 0000
}
这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:
#define PORT0 0
#define PORT1 1
#define PORT2 2
#define PORT3 3
#define BIT0 0
#define BIT1 1
#define BIT2 2
#define BIT3 3
#define BIT4 4
#define BIT5 5
#define BIT6 6
#define BIT7 7
#define STANDARD 0
#define PP_OUT 1
#define Z_IN 2
#define OD 3
#define IOMODE(Port,bit_n,mode) { \
switch(Port)\
{\
case 0:\
switch(mode) { \
case STANDARD: P0M0&=~(1<<bit_n); P0M1&=~(1<<bit_n); break; \
case PP_OUT: P0M0&=~(1<<bit_n); P0M1|= (1<<bit_n); break; \
case Z_IN: P0M0|=(1<<bit_n); P0M1&=~(1<<bit_n); break; \
case OD: P0M0|=(1<<bit_n); P0M1|=(1<<bit_n); break; \
} \
break;\
case 1:\
switch(mode) { \
case STANDARD: P1M0&=~(1<<bit_n); P1M1&=~(1<<bit_n); break; \
case PP_OUT: P1M0&=~(1<<bit_n); P1M1|= (1<<bit_n); break; \
case Z_IN: P1M0|=(1<<bit_n); P1M1&=~(1<<bit_n); break; \
case OD: P1M0|=(1<<bit_n); P1M1|=(1<<bit_n); break; \
} \
break;\
case 2:\
switch(mode) { \
case STANDARD: P2M0&=~(1<<bit_n); P2M1&=~(1<<bit_n); break; \
case PP_OUT: P2M0&=~(1<<bit_n); P2M1|= (1<<bit_n); break; \
case Z_IN: P2M0|=(1<<bit_n); P2M1&=~(1<<bit_n); break; \
case OD: P2M0|=(1<<bit_n); P2M1|=(1<<bit_n); break; \
} \
break;\
case 3:\
switch(mode) { \
case STANDARD: P3M0&=~(1<<bit_n); P3M1&=~(1<<bit_n); break; \
case PP_OUT: P3M0&=~(1<<bit_n); P3M1|= (1<<bit_n); break; \
case Z_IN: P3M0|=(1<<bit_n); P3M1&=~(1<<bit_n); break; \
case OD: P3M0|=(1<<bit_n); P3M1|=(1<<bit_n); break; \
} \
break;\
}\
}
有了上面的宏定义,在初始化程序中可以直接这样写
IO_Init()
{
IOMODE(PORT0,BIT7,PP_OUT)
IOMODE(PORT0,BIT6, STANDARD)
IOMODE(PORT0,BIT5, Z_IN)
IOMODE(PORT0,BIT4, OD)
IOMODE(PORT0,BIT3, STANDARD)
IOMODE(PORT0,BIT2, STANDARD)
IOMODE(PORT0,BIT1, STANDARD)
IOMODE(PORT0,BIT0, STANDARD)
}。