CH3输出端口应用Word文档格式.docx
《CH3输出端口应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《CH3输出端口应用Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![CH3输出端口应用Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/28/960983e0-1a09-44ae-9a5c-ac3ff062918c/960983e0-1a09-44ae-9a5c-ac3ff062918c1.gif)
认识8051的输入/输出口;
输出电路设计
2、实践部分:
驱动LED实验
3.1认识MCS-51的输入/输出口
51系列单片机有4个I/O端口,每个端口都是8位并行的I/O口,共有32条I/O线,每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输出驱动器和输入缓冲器。
通常把4个端口笼统地表示为P0~P3。
Ø
在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用。
在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。
1、P0口
包含:
一个输出锁存器、两个三态缓冲器、输出驱动和控制电路组成。
特点:
(1)P0端口是多功能的,双向的、可以位寻址操作的8位I/O端口;
(2)没有外扩芯片时,P0口可以直接作为输出口或输入口使用。
(3)有外扩芯片时,P0口不再做I/O口使用,而是先传送地址,后传送数据。
图1P0口
理解:
P0口直接做输出口时,将0送到P0.0的过程
注意:
P0口做输出口时,如果端口输出为1,Q1、Q2两管都处于截止状态,P0.0—P0.7就处于不确定状态,没有标准的高电平,所以P0口作输出口使用时,必须外接上拉电阻。
P0口直接做输入口时,将P0.0处的1送入DB0.0的过程
P0口作输入口时,P0.0—P0.7上的信号经过三态缓冲器送到内部数据总线上。
在读引脚之前,要先将锁存器置1,否则总是读到0
P0引脚:
输出地址/输入数据信息1的过程
2、P1口
(1)P1为8位、可位寻址的输入/输出端口
(2)P1口通常只作为输出口或输入口使用。
(3)52系列中P1.0的第二功能是作为定时器/计数器2的外部输入端(即T2),P1.1作为外部控制输入(即T2EX)。
图2P1口
P1口直接做输出口时,将1送到P1.0的过程
P1口直接做输入口时,将P1.0处的0送入DB0.0的过程
注意:
P1口作输入口时,P1.0-P1.7上的信号经过缓冲器送到内部数据总线上。
同样需要在读引脚之前,要先将锁存器置1,否则总是读到0。
3、P2口
(1)P2为8位、可位寻址的输入/输出端口。
(2)在扩展外部存储器时,P2口还可作为地址总线的高8位,和P0口一起组合成16位的地址总线。
图3P2口
P2口直接做输出口时,将0送到P2.0的过程
注意:
P2口做输出口时,内部数据经过锁存器送到P2.0-P2.7上。
由于内部有上拉电阻,所以P2口作输出口使用时,不用外接上拉电阻
P2口直接做输入口时,将P2.0处的0送入DB0.0的过程
P2口作输入口时,P2.0—P2.7上的信号经过缓冲器送到内部数据总线上。
在读引脚之前,要先将锁存器置1,否则总是读到0。
P2作为地址总线时,CPU发出控制电平“1”,使多路开关倒向内部地址
线。
此时,P2输出高8位地址。
4、P3口
(1)P3为8位、可位寻址的输入/输出端口。
(2)P3口是双功能端口,第一功能是通用的I/O端口,第二功能是用作其他功能模块的输入输出及控制引脚。
图4P3口
P3口直接做输出口时,将1送到P3.0的过程
P3口做输出口时,内部数据经过锁存器送到P3.0-P3.7上。
由于内部有上拉电阻,所以P3口作输出口使用时,不用外接上拉电阻。
P3口直接做输入口时,将P3.0处的0送入DB0.0的过程
P3口作输入口时,P3.0—P3.7上的信号经过缓冲器送到内部数据总线上。
P3作为第二功能输出功能,P3端口对应位的数据锁存器置1,使与非门开锁,此时,“第二输出功能”输出的信号可以控制P3.X引脚上输出电平
P3口的其他功能:
5、P0、P1、P2、P3口总结
均是8位,可以字节操作,也可以位操作;
不用扩展系统总线时,P0、P2和P3都可以作为通用I/O口使用,但P1口总是做通用I/O端口使用
系统需要扩展外部总线时,P0口分时复用为外部数据总线和低8位地址总线,P2口作为高8位地址总线使用,此时的P3口P3.6和P3.7作为第二种功能使用,提供外部存储器的写选通(WR*)和读选通(RD*)信号。
P1、P2和P3端口的输出驱动部分的结构相似,内部有上拉电阻,作为输出口使用时,不用外接上拉电阻,可以同时驱动4个LSTTL负载,P0口内部无上拉电阻,P0口作输出口使用时,必须外接上拉电阻,但由于P0口上下两个FET处于反相,构成了推拉式的输出电路,其负载能力大大增强,所以可以驱动8个LSTTL负载。
3.2输出电路设计
1、驱动LED
LED为发光二极管(Light-EmittingDiode),体积小、耗电低,常被用于微型计算机与数字电路的输出装置,以提示信号状态。
例如:
红色LED正向偏压1.7V时点亮,正向电流10mA~20mA适宜
限流电阻
R=(5-1.7)/10mA=330Ω
需要LED更亮点:
R=(5-1.7)/15mA=220Ω
限流电阻选择200Ω~470Ω
输出LED的连接:
P1、P2和P3内部虽然有上拉电阻,但是需要产生10mA~20mA的电流是不可能的,所以在电路连接的时候应注意。
案例:
霹雳灯实验
霹雳灯,在一排LED里,本题使用8个LED,任何一个时间只有一个LED灯亮,而亮灯的顺序为从左到右再从右至左。
KEILC程序:
/*霹雳灯实验程序*/
//==声明区============================================
#include<
reg51.h>
//定义8051暂存器之标头档,P2-17~19
#defineLEDP1//定义LED接至Port1
voiddelay(int);
//声明延迟函数
//==主程序============================================
main()//主程序开始
{unsignedchari;
//声明无号数字元变数i(占1Bytes)
LED=0xfe;
//初值=11111110,只有最右1灯亮
while
(1)//无穷循环,程序一直跑
{for(i=0;
i<
7;
i++)//左移7次
{delay(100);
//延迟1005m=0.5s
LED=(LED<
<
1)|0x01;
//左移1位,并设定最低位元为1
}//左移结束,只有最左1灯亮
for(i=0;
i++)//右移7次
LED=(LED>
>
1)|0x80;
//右移1位,并设定最高位元为1
}//结束右移,只有最右1灯亮
}//while循环结束
}//主程序结束
//==子程序=============================================
/*延迟函数,延迟约x5ms*/
voiddelay(intx)//延迟函数开始
{inti,j;
//声明整数变数i,j
for(i=0;
x;
i++)//计数x次,延迟x5ms
for(j=0;
j<
600;
j++);
//计数600次,延迟5ms
}//延迟函数结束
3.2.2驱动蜂鸣器
蜂鸣器(Buzzer),类似于小型喇叭,分为电压型和脉冲型,电压型的蜂鸣器送电就会叫,其频率固定;
脉冲型蜂鸣器必须加入脉冲才会发出声响,其声音的频率就是加入脉冲的频率,后面使用是脉冲型蜂鸣器。
1)高电平驱动蜂鸣器,左图适用于P1~P3,右图适用于P0~P3
达林顿增益大,能快速饱和,端口输出脉冲信号
P0口与其它口接法是不同的
三极管作用:
电流放大和开关作用
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般采取一个三极管来放大驱动蜂鸣器
2)低电平驱动蜂鸣器
3-3-1蜂鸣器实验
/*蜂鸣器实验程序*/
//==声明区====================================
//定义8051暂存器
sbitbuzzer=P3^7;
//声明蜂鸣器的位置为Port3之bit7
voidpulse_BZ(int,int,int);
//声明蜂鸣器发声函数
//==主程序====================================
{while
(1)//无穷循环,程序一直跑
{pulse_BZ(100,1,1);
//蜂鸣器发声100(0.5m+0.5m)=0.1s
delay(1000);
//延迟10000.5m=0.5秒
//==子程序=====================================
/*延迟函数开始,延迟x0.5ms*/
//声明整数变量i,j
i++)//计数x次,延迟约x0.5ms
60;
//计数60次,延迟约0.5ms
}//延迟函数结束
/*蜂鸣器发声函数,count=计数次数,TH=高态时间,TL=低态时间*/
voidpulse_BZ(intcount,intTH,intTL)//蜂鸣器发声函数开始
{inti;
//声明整数变数i
for(i=0;
count;
i++)//计数count次
{buzzer=1;
//输出高态
delay(TH);
//延迟TH0.5ms
buzzer=0;
//输出低态
delay(TL);
//延迟TL0.5ms
}//for循环结束
}//蜂鸣器发声函数结束
思考:
1)若希望产生1kHz声音0.2秒、暂停0.05秒、600Hz声音0.1秒、暂停0.2秒,应如何修改(含delay函数)?
2)请调整输出频率与间隔,以产生电话铃声?
3.2.3驱动继电器
1、电磁继电器的构造:
A是电磁铁,B是衔铁,C是弹簧,D是动触点,E是静触点。
闭合开关S,衔铁被电磁铁吸下来,动触点同时与两个静触点接触,使D、E间连通。
这时弹簧被拉长,工作电路被接通,小灯泡L发光。
断开开关S,电磁铁失去磁性,对衔铁无吸引力。
衔铁在弹簧的拉力作用下回到原来的位置,动触点与静触点分开,工作电路被切断,小灯泡L不发光。
结论:
电磁继电器就是利用电磁铁控制工作电路通断的开关
2、电磁继电器(electromagneticrelay)的工作原理
在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,内部开关在电磁力吸引的作用下与常开接点吸合。
当线圈断电后,电磁的吸力也随之消失,内部开关回到常闭接点处。
这样吸合、释放,从而达到了在电路中的导通、切断的目的。
继电器线圈未通电时处于断开状态的静触点,c~a称为“常开接点”;
c~b处于接通状态的静触点称为“常闭接点”。
用小电流来控制大电流负载,内部是个开关电路
面包板上所使用的继电器(2P)
面包板是专为电子电路的无焊接实验设计制造的。
由于各种电子元器件可根据需要随意插入或拔出,免去了焊接,节省了电路的组装时间,而且元件可以重复使用,所以非常适合电子电路的组装、调试和训练。
使用晶体管驱动继电器
小电流的端口可直接驱动,如DC5V;
大电流需增加三极管驱动,三极管工作在开关状态,饱和时有电场,二极管起到三极管截止时续流作用,保护三极管。
使用7405/7406驱动继电器
3-2-4驱动固态继电器
1、固态继电器(SSR)的工作原理和特性
固体继电器(SolidStateRelaySSR)是利用现代微电子技术与电力电子技术相结合而发展起来的一种新型无触点电子开关器件。
类似于一般的继电器,它可以实现用微弱的控制信导(几毫安到几十毫安)控制0.1A直至几百A电流负载,但因为其没有实际接点,所以不会有切换接点时的火花与机械式操作。
固态继电器是一种两个接线端为输入端,另两个接线端为输出端的四端器件,中间采用隔离器件实现输入输出的电隔离输入端接控制信号,输出端与负载、电源串联,SSR实际是一个受控的电力电子开关,其等效电路如下图:
由于固体继电器具有高稳定、高可靠、无触点及寿命长等优点,广泛应用在电动机调速、正反转控制、调光、家用电器、烘箱烘道加温控温、送变电电网的建设与改造、电力拖动、印染、塑科加工、煤矿、钢铁、化工和军用等方面。
SSR驱动电路
实例演练3-3-2继电器实验
/*JDQ.c-继电器实验程序*/
//==声明区========================================
//定义8051暂存器
sbitbuzzer=P3^7;
//声明蜂鸣器的位置
sbitrelay=P3^6;
//声明继电器的位置
//声明延迟函数
voidpulse_RL(int,int,int);
//声明继电器控制函数
//==主程序========================================
main()//主程序开始
{while
(1)//无穷循环,程序一直跑*/
{pulse_RL(2,2000,2000);
//继电器使灯亮灭各10次,各20000.5m=1s
pulse_BZ(100,1,1);
//蜂鸣器第1声哔,约100*(0.5m+0.5m)=0.1s
delay(200);
//延迟2000.5ms=0.1s
//蜂鸣器第2声哔,约100*(0.5m+0.5m)=0.1s
buzzer=1;
}//while循环结束
}//主程序结束
//==副程序=========================================
//延迟函数开始,延迟约x*0.5ms/
//声明整数变量i/
//输出高态
}//蜂鸣器发声函数结束
/*继电器控制函数,count=计数次数,TH=激磁时间,TL=消磁时间*/
voidpulse_RL(intcount,intTH,intTL)//继电器控制函数开始
//声明整数变量i
i++)//计数count次
{relay=1;
//输出高态,继电器激磁(灯亮)
relay=0;
//输出低态,继电器消磁(灯灭)
}//继电器控制函数结束
思考题:
若要让继电器激磁10秒钟、消磁5秒钟,周而复始,应如何修改?
3-2-5驱动LED数码管
1)共阳极七段LED数码管的应用
2)共阴极七段LED数码管的应用
实例演练3-3-4七段LED数码管实验
include<
//定义8051暂存器的标头档,P2-17~19
#defineSEGP0//定义七节显示器接至Port0
charcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,//数字0-4
0x92,0x83,0xf8,0x80,0x98};
//数字5-9
//声明无号数字元变数i
10;
i++)//显示0-9,共10次
{SEG=TAB[i];
//显示数字
delay(500);
//延迟5001m=0.5秒
}//for循环结束
i++)//计数x次,延迟x1ms
120;
//计数120次,延迟1ms
1)请修改本实验里的程序,让七段LED数码管从9开始显示,递减到0,再从头开始?
2)请修改本实验里的程序,让七段LED数码管从0开始显示,递增到9;
再递减到0,然后从头开始?
小结
本节以实例的方式继续讲解如何驱动蜂鸣器、继电器、7段LED数码管。
三、小结
本节介绍了MCS-51系列单片机的P0、P1、P2、P3口的基本结构和工作原理,重点理解四个I/O口的异同点,最后通过实例驱动点亮发光二极管进一步理解51系列单片机的输出电路的设计、如何驱动蜂鸣器、继电器、7段LED数码管。
思考题和习题
思考与习题:
①
②
教学后记