单片机原理与接口技术第 5章第 4章 单片机的最小系统及系统扩展第 5章输入 /输出口的应用
MCS-51单片机有四个 8位的 I/O输入 /
输出端口,即,P0,P1,P2和 P3。 每个端口都是 8位的准双向输入 /输出口 。
第 4章 单片机的最小系统及系统扩展
4.1 AT89C51单片机性能介绍
单片机共有 40条引线,其中有 32条是 I/O口。每一条又都能独立地完成输入 /
输出的功能。每个端口还有一个锁存器,
它们是四个特殊功能的寄存器 P0~P3,
输出时这四特殊功能的寄存器可以作为驱动器,输入时它们又可以作为缓冲器。
第 4章 单片机的最小系统及系统扩展
5.1单片机的 I/O(输入 /输出 )接口
MCS-51单片机中的 4个 8位的 I/O端口 P0~P3,其中 P0口为三状态双向口,
负载能力为 8个 TTL门电路,P1~P3口为准双向口。准双向是指用作输入口时,
口锁存器必须先写入,1”信号。 P1~P3
口的负载能力为 4个 TTL门电路。
第 4章 单片机的最小系统及系统扩展
● MCS-51单片机中的 4个 8位的 I/O端口 P0~P3,其中 P0口为三状态双向口,
负载能力为 8个 TTL门电路,P1~P3口为准双向口。准双向是指用作输入口时,
口锁存器必须先写入,1”信号。 P1~P3
口的负载能力为 4个 TTL门电路。
图 5-1 MCS-51单片机 I/O的逻辑图第 4章 单片机的最小系统及系统扩展
5.2 P1口的内部结构单片机的四个 I/O口 P0~P3,其内部电路各不相同,但是逻辑功能基本上是一样的,为了便于理解,这里只对 P1口的内部电路进行分析。
在单片机控制系统中,P0口是数据总线,
也是地址总线的低 8位。 P2口是地址总线的高
8位。 P3口是特殊功能的 I/O口。实际上,只有
P1口才是专供用户使用的。
第 4章 单片机的最小系统及系统扩展
P1口是一个准双向的 I/O口
P1口是一个准双向的 I/O口,P1口的每一位都有一个上拉电阻。每一位口线能独立用作输入线或输出线,也就是说,既能作为输入口,也能作为输出口。
图 5-2 是 P1口的内部结构图。对于 P1
口的操作有三种情况,即:输出数据、输入数据和读取 P1口的位状态。
第 4章 单片机的最小系统及系统扩展图 5-2 P1口位结构第 4章 单片机的最小系统及系统扩展
5.2.1.输出数据当单片机的内部总线某一位输出
,1”时,锁存器 D端的信号为,1”,同时“写”信号来一个低电平脉冲,根据 D触发器的原理,Q端为,1”,端为
,0”,场效应管的控制端得到低电平,
场效应管不导通,P1口输出高电平
,1”。
第 4章 单片机的最小系统及系统扩展输出数据当单片机的内部总线某一位输出,0”时,
端为,1”,场效应管导通,P1口输出低电平,0”。
第 4章 单片机的最小系统及系统扩展
P1口作为输入口时,信号来自于单片机的外部,如果外部信号为低电平,0”,
读引脚来脉冲时,三态输入缓冲器 2导通,
低电平,0”信号到达内部总线的 D端,内部总线与 CPU相连 。
5.2.2.输入数据第 4章 单片机的最小系统及系统扩展输入数据为什么说 P1口是一个准双向的输入口呢?由图 5-3可以看出,当场效应管 T
导通时,无论开关 K是否闭合,P1口均为低电平。为了解决这个问题,在执行输入指令前,先用一条输出指令,向 P1
口送去高电平,1”,关闭场效应管 T;再用输入指令,采集开关 K的工作状态。这时如果开关 K断开时,输入信号为高电平
,1”。开关 K闭合时,输入信号为低电平
,0”。
第 4章 单片机的最小系统及系统扩展图 5-3 P1口作为输入口第 4章 单片机的最小系统及系统扩展
5.2.3.读取 P1口的位状态有时不知道 P1口的输出状态是高电平
,1”,还是低电平,0”。可以用一条指令读取锁存器中的数据。这时“读锁存器信号”端来一个脉冲,三态输入缓冲器 1导通。 Q端的数据通过三态输入缓冲器 1到达内部总线的 D端,再到达 CPU。
第 4章 单片机的最小系统及系统扩展说明由 P1口的内部电路可知,P1口有一个上拉电阻,当 P1口输出高电平时,形成了拉电流,
电流从单片机中流出,电阻会发热,所以电流不能太大。
当 P1口输出低电平时,形成了灌电流,电流流入单片机,场效应管只有 0.3v的电压,散耗功率很小,所以电流可以大一些。也就是说,一般情况下,最好用灌电流的形式输出信号,而尽量避免使用拉电流输出信号。
第 4章 单片机的最小系统及系统扩展
5.3用 C语言控制 P1口输出信号操作 P1口时,需要对 P1口的寄存器声明,在 C语言的编译器中,这项声明包含在 reg51.h中,在编写程序时,要把这个头文件包含在进去,声明语句如下:
#include <reg51.h>
第 4章 单片机的最小系统及系统扩展在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1
/ 6。因此它可用做对外部输出的脉冲或用于定时目的。然而要注意的是:每当用做外部数据存储器时,将跳过一个 ALE脉冲。
用 C语言控制 P1口输出信号第 4章 单片机的最小系统及系统扩展
sfr P1=0X90
也可以对 P1口的特殊寄存器声明,其语句如下:
sfr P1=0X90;
下面以 P1口控制 LED指示灯为例,说明
P1口的控制方法。
第 4章 单片机的最小系统及系统扩展图 5-3 P1口的控制电路,它的主要功能是通过 P1口的输出状态,控制相应的发光二极管的亮与灭。
例 5-1:
第 4章 单片机的最小系统及系统扩展图 5-3 P1口控制 LED指示灯第 4章 单片机的最小系统及系统扩展
P1口控制 LED指示灯 P1口外接 8个 LED
发光二极管,当 P1口输出高电平时,LED
发光二极管两端的电压相等,均为 5V,二极管中无电流,LED不亮;当 P1口输出低电平时,LED发光二极管中有电流,LED亮。
说明第 4章 单片机的最小系统及系统扩展
P1口高电平要想让 P1口高电平,可以用以下的语句:
P1=0xff;
0x表示十六进制数。
ff表示二进制数 1111 1111B。
使用这条语句时,P10~P17均输出高电平。
第 4章 单片机的最小系统及系统扩展
P1口低电平要想让 P1口低电平,可以用以下的语句:
P1=0x00;
0x表示十六进制数。
00表示二进制数 0000 0000B 。
使用这条语句时,P10~P17均输出低电平。
第 4章 单片机的最小系统及系统扩展用 P1口控制 8个发光二极管 LED亮一秒钟再灭一秒钟,周而复始,不停闪烁。
如果想让 P1口控制 LED亮一秒,再灭一秒。根据图 5-3可以使用下列程序。
例 5-2:
第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
main()
{unsigned int i;
while(1)
{P1=0x00;
for (i=0; i<50000; i++);
P1=0xff;
for (i=0; i<50000; i++);
}
}
第 4章 单片机的最小系统及系统扩展
P1口不仅可以实现字节操作,也可以实现
“位”操作,但需要声明一个“位”变量,
这里用 P10作为输出信号。
如果要让 P10输出高电平,可以用语句
P1.1=1;
注意:这里的 P必须是大写。
要让 P10输出低电平,可以用语句 P1.1=0;
5.4用位操作控制 P1口的输出第 4章 单片机的最小系统及系统扩展下面是一个灯塔信号灯的控制系统,
其工作原理如图 5-4所示。
例 5-3:
第 4章 单片机的最小系统及系统扩展图 5-4 P10口控制灯塔信号灯第 4章 单片机的最小系统及系统扩展说明图 5-4是灯塔信号灯的电气原理图,
图中用单片机 8951构成了一个单片机的最小系统,C1和 R1是单片机的复位电路,P1口在复位后输出高电平。晶振的两端分别接在单片机的 XTAL1和 XTAL2
之间。
第 4章 单片机的最小系统及系统扩展说明当 P1口输出高电平时,三极管 T1和 T2
导通。光电耦合器中的发光二极管点亮,
光敏三极管导通,双向二极管 V导通,双向可控硅 VT导通,照明灯 ZD点亮。 P1口输出为低电平,0”时,照明灯 ZD熄灭。
第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
sbit P1.0=P1^0;
void main()
{ for( ; ;)
{ P1.0=0;
delay50ms(20);
P1.0=1;
delay50ms(20);
}
}
void delay50ms(char k)
{ unsigned int i,j;
for (j=0;j<k;j++)
for (i=0;i<5000;i++);
}
第 4章 单片机的最小系统及系统扩展程序分析
sbit P1.0=P1^0;这是一个说明语句,用来说明 P1.0是一个位操作指令。
for( ; ;) 这条语句的作用是形成一个死循环,
灯塔上的照明灯一闪一闪的。
delay50ms(20); 调用 50ms的延时函数。括号中的 20是要传送给被调函数的参数,这个参数决定了延时时间的长度。
第 4章 单片机的最小系统及系统扩展程序分析
void delay50ms(char k) 这是一个延时函数,没有返回值,要接收一个
char型的数据参数。当 K值为 1时,延时 50ms。
for (j=0;j<k;j++)这是一条循环语句,
计数初值 j=0,终值取决于 K值。
第 4章 单片机的最小系统及系统扩展
5.5用开关控制 P1口的输出状态前面有关 P1口的应用属于不受控的输出系统,如果要受控就要有一个开关量的输入信号。
第 4章 单片机的最小系统及系统扩展例 5-4:
图 5-6是一个走廊照明灯的控制系统,
有人进入走廊时用手按一下开关 K,P30
变成低电平,由于手按动开关 K的时间很短,P30得到的是一个下降沿脉冲,作为输入信号。单片机采集到输入信号后,从
P10输出高电平,继电器 J线圈带电,继电器的常开触头 J闭合,照明灯 DX亮,然后延时 1分钟后,自动熄灭。
第 4章 单片机的最小系统及系统扩展图 5-6 P10口控制走廊照明灯第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
sbit P1.0=P1^0
sbit P3.0=P3^0
main()
{ unsigned i,j;
while(1)
{ if (P3.0= =0)
{ P1.0=1;
for (i=1;i<50000;i++)
for (j=1;j<50000;j++);
}
else
P1.0=0;
}
}
第 4章 单片机的最小系统及系统扩展程序分析
sbit P1.0=P1^0 sbit P3.0=P3^0是说明语句,说明 P1.0表示对 P1口的最低位进行操作,P3.0表示对 P3口的最低位进行操作。
第 4章 单片机的最小系统及系统扩展程序分析
if (P3.0= =0)有两个作用,一是将 P30
的开关状态输入单片机,二是判断开关 K
是否闭合。
P1.0=1;如果开关 K闭合,P1口的最低位输出高电平,点亮走廊灯。
第 4章 单片机的最小系统及系统扩展例 5-5:
用单片机设计一个循环彩灯的控制系统。图 5-7是循环彩灯的控制系统原理图。
第 4章 单片机的最小系统及系统扩展图 5-7循环彩灯的控制系统电气原理图第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
unsigned int i; char j,k;
void main()
{ while(1)
{ if (P3.0= =0)
{k=0x80;
for (j=0;j<8;j++)
{ P1=k;
for(i=0;i<50000;i++);
k=k>>1;
}
k=0x01;
for (j=0;j<8;j++)
{ P1=k;
for(i=0;i<50000;i++);
k=k<<1;
}
}
else
P1=0xff;
}
第 4章 单片机的最小系统及系统扩展
5.6交通信号灯的控制系统如果用两个开关控制 P1口的输出状态,又该什么样设计硬件和软件呢?下面以交通信号灯为例说明这个问题。
例 5-6:设计一个交通信号灯的控制系统。
第 4章 单片机的最小系统及系统扩展图 5-8 交通信号灯的示意图第 4章 单片机的最小系统及系统扩展根据现场的实际情况要求如下南北方向红灯亮,东西方向绿灯亮。延时 60秒。
南北方向和东西方向均为黄灯亮。延时 3秒。
南北方向绿灯亮,东西方向红灯亮。延时 60秒。
南北方向和东西方向均为黄灯亮。延时 3秒。
周而复始,循环不止。
第 4章 单片机的最小系统及系统扩展说明当开关 K1断开时,
南北方向绿灯亮,东西方向红灯亮。
当开关 K2断开时,
南北方向红灯亮,东西方向绿灯亮。
根据上述要求,可以画出控制流程图。
如图 5-9所示。
第 4章 单片机的最小系统及系统扩展图 5-9 交通信号灯的控制流程图第 4章 单片机的最小系统及系统扩展输出控制字南北方向红灯亮,东西方向绿灯亮。
输出控制字,0010 0001B=21H。
南北方向绿灯亮,东西方向红灯亮。
输出控制字,0000 1100B=0CH。
南北方向和东西方向均为黄灯亮。
输出控制字,0001 0010B=12H。
第 4章 单片机的最小系统及系统扩展图 5-10 交通信号灯的控制原理图第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
main()
{unsigned int i; char a,j,k;
while(1)
{ P1=0xff;
a=P1;
k=a&0xC0;
switch (k)
{ case 0x40,P1=0x21; break;
case 0x80,P1=0x0C; break;
default,
P1=0x21;
for(j=0;j<120;j++)
P1=0x21;
for(j=0;j<120;j++)
{for(i=0;i<50000;i++);
P1=0x12;
for(j=0;j<6;j++)
for(i=0;i<50000;i++);
P1=0x0C;
for(j=0;j<120;j++)
for(i=0;i<50000;i++);
P1=0x12;
for(j=0;j<6;j++)
for(i=0;i<50000;i++);
break;
}
}
}
}
第 4章 单片机的最小系统及系统扩展程序分析由图 5-8交通信号灯的控制原理图可以看出,
在南北方向,P10控制红灯,P11控制黄灯,P12控制绿灯。在东西方向,P13控制红灯,P14控制黄灯,P15控制绿灯。
当某一位输出高电平时,相应的灯亮;
为低电平时,相应的灯灭。
第 4章 单片机的最小系统及系统扩展程序分析在主程序中采用字节输出的方式,一共有三种状态,采用三个控制字,即,21H、
0CH和 12H,完成对系统的控制。
第 4章 单片机的最小系统及系统扩展程序分析当执行语句 P1=0x21;时,
南北方向停止通行,东西方向通行。
当执行语句 P1=0x12;时,
南北方向和东西方向都是黄灯亮。
当执行语句 P1=0x0C;时,
南北方向通行,东西方向停止通行。
第 4章 单片机的最小系统及系统扩展程序分析由于 P1口是一个准双向的输入口,在程序的开始先向 P1口输出高电平,由语句 P1=0xff 来完成。再把 P1口的工作状态通过语句 a=P1送给变量 a,“与”运算
k=a&0xC0;是把低 6位屏蔽掉。这样就可以根据变量 K的值确定系统的控制方案了。
第 4章 单片机的最小系统及系统扩展
AT29C256的性能指标单一电源供电,电源电压为 5V。
重复改写次数超过一万次。
低功耗。
工作电流为 50mA,待机电流为 300uA。
第 4章 单片机的最小系统及系统扩展图 4-7
单片机
8051
与
AT29C2
56的连线图第 5章 结束
MCS-51单片机有四个 8位的 I/O输入 /
输出端口,即,P0,P1,P2和 P3。 每个端口都是 8位的准双向输入 /输出口 。
第 4章 单片机的最小系统及系统扩展
4.1 AT89C51单片机性能介绍
单片机共有 40条引线,其中有 32条是 I/O口。每一条又都能独立地完成输入 /
输出的功能。每个端口还有一个锁存器,
它们是四个特殊功能的寄存器 P0~P3,
输出时这四特殊功能的寄存器可以作为驱动器,输入时它们又可以作为缓冲器。
第 4章 单片机的最小系统及系统扩展
5.1单片机的 I/O(输入 /输出 )接口
MCS-51单片机中的 4个 8位的 I/O端口 P0~P3,其中 P0口为三状态双向口,
负载能力为 8个 TTL门电路,P1~P3口为准双向口。准双向是指用作输入口时,
口锁存器必须先写入,1”信号。 P1~P3
口的负载能力为 4个 TTL门电路。
第 4章 单片机的最小系统及系统扩展
● MCS-51单片机中的 4个 8位的 I/O端口 P0~P3,其中 P0口为三状态双向口,
负载能力为 8个 TTL门电路,P1~P3口为准双向口。准双向是指用作输入口时,
口锁存器必须先写入,1”信号。 P1~P3
口的负载能力为 4个 TTL门电路。
图 5-1 MCS-51单片机 I/O的逻辑图第 4章 单片机的最小系统及系统扩展
5.2 P1口的内部结构单片机的四个 I/O口 P0~P3,其内部电路各不相同,但是逻辑功能基本上是一样的,为了便于理解,这里只对 P1口的内部电路进行分析。
在单片机控制系统中,P0口是数据总线,
也是地址总线的低 8位。 P2口是地址总线的高
8位。 P3口是特殊功能的 I/O口。实际上,只有
P1口才是专供用户使用的。
第 4章 单片机的最小系统及系统扩展
P1口是一个准双向的 I/O口
P1口是一个准双向的 I/O口,P1口的每一位都有一个上拉电阻。每一位口线能独立用作输入线或输出线,也就是说,既能作为输入口,也能作为输出口。
图 5-2 是 P1口的内部结构图。对于 P1
口的操作有三种情况,即:输出数据、输入数据和读取 P1口的位状态。
第 4章 单片机的最小系统及系统扩展图 5-2 P1口位结构第 4章 单片机的最小系统及系统扩展
5.2.1.输出数据当单片机的内部总线某一位输出
,1”时,锁存器 D端的信号为,1”,同时“写”信号来一个低电平脉冲,根据 D触发器的原理,Q端为,1”,端为
,0”,场效应管的控制端得到低电平,
场效应管不导通,P1口输出高电平
,1”。
第 4章 单片机的最小系统及系统扩展输出数据当单片机的内部总线某一位输出,0”时,
端为,1”,场效应管导通,P1口输出低电平,0”。
第 4章 单片机的最小系统及系统扩展
P1口作为输入口时,信号来自于单片机的外部,如果外部信号为低电平,0”,
读引脚来脉冲时,三态输入缓冲器 2导通,
低电平,0”信号到达内部总线的 D端,内部总线与 CPU相连 。
5.2.2.输入数据第 4章 单片机的最小系统及系统扩展输入数据为什么说 P1口是一个准双向的输入口呢?由图 5-3可以看出,当场效应管 T
导通时,无论开关 K是否闭合,P1口均为低电平。为了解决这个问题,在执行输入指令前,先用一条输出指令,向 P1
口送去高电平,1”,关闭场效应管 T;再用输入指令,采集开关 K的工作状态。这时如果开关 K断开时,输入信号为高电平
,1”。开关 K闭合时,输入信号为低电平
,0”。
第 4章 单片机的最小系统及系统扩展图 5-3 P1口作为输入口第 4章 单片机的最小系统及系统扩展
5.2.3.读取 P1口的位状态有时不知道 P1口的输出状态是高电平
,1”,还是低电平,0”。可以用一条指令读取锁存器中的数据。这时“读锁存器信号”端来一个脉冲,三态输入缓冲器 1导通。 Q端的数据通过三态输入缓冲器 1到达内部总线的 D端,再到达 CPU。
第 4章 单片机的最小系统及系统扩展说明由 P1口的内部电路可知,P1口有一个上拉电阻,当 P1口输出高电平时,形成了拉电流,
电流从单片机中流出,电阻会发热,所以电流不能太大。
当 P1口输出低电平时,形成了灌电流,电流流入单片机,场效应管只有 0.3v的电压,散耗功率很小,所以电流可以大一些。也就是说,一般情况下,最好用灌电流的形式输出信号,而尽量避免使用拉电流输出信号。
第 4章 单片机的最小系统及系统扩展
5.3用 C语言控制 P1口输出信号操作 P1口时,需要对 P1口的寄存器声明,在 C语言的编译器中,这项声明包含在 reg51.h中,在编写程序时,要把这个头文件包含在进去,声明语句如下:
#include <reg51.h>
第 4章 单片机的最小系统及系统扩展在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1
/ 6。因此它可用做对外部输出的脉冲或用于定时目的。然而要注意的是:每当用做外部数据存储器时,将跳过一个 ALE脉冲。
用 C语言控制 P1口输出信号第 4章 单片机的最小系统及系统扩展
sfr P1=0X90
也可以对 P1口的特殊寄存器声明,其语句如下:
sfr P1=0X90;
下面以 P1口控制 LED指示灯为例,说明
P1口的控制方法。
第 4章 单片机的最小系统及系统扩展图 5-3 P1口的控制电路,它的主要功能是通过 P1口的输出状态,控制相应的发光二极管的亮与灭。
例 5-1:
第 4章 单片机的最小系统及系统扩展图 5-3 P1口控制 LED指示灯第 4章 单片机的最小系统及系统扩展
P1口控制 LED指示灯 P1口外接 8个 LED
发光二极管,当 P1口输出高电平时,LED
发光二极管两端的电压相等,均为 5V,二极管中无电流,LED不亮;当 P1口输出低电平时,LED发光二极管中有电流,LED亮。
说明第 4章 单片机的最小系统及系统扩展
P1口高电平要想让 P1口高电平,可以用以下的语句:
P1=0xff;
0x表示十六进制数。
ff表示二进制数 1111 1111B。
使用这条语句时,P10~P17均输出高电平。
第 4章 单片机的最小系统及系统扩展
P1口低电平要想让 P1口低电平,可以用以下的语句:
P1=0x00;
0x表示十六进制数。
00表示二进制数 0000 0000B 。
使用这条语句时,P10~P17均输出低电平。
第 4章 单片机的最小系统及系统扩展用 P1口控制 8个发光二极管 LED亮一秒钟再灭一秒钟,周而复始,不停闪烁。
如果想让 P1口控制 LED亮一秒,再灭一秒。根据图 5-3可以使用下列程序。
例 5-2:
第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
main()
{unsigned int i;
while(1)
{P1=0x00;
for (i=0; i<50000; i++);
P1=0xff;
for (i=0; i<50000; i++);
}
}
第 4章 单片机的最小系统及系统扩展
P1口不仅可以实现字节操作,也可以实现
“位”操作,但需要声明一个“位”变量,
这里用 P10作为输出信号。
如果要让 P10输出高电平,可以用语句
P1.1=1;
注意:这里的 P必须是大写。
要让 P10输出低电平,可以用语句 P1.1=0;
5.4用位操作控制 P1口的输出第 4章 单片机的最小系统及系统扩展下面是一个灯塔信号灯的控制系统,
其工作原理如图 5-4所示。
例 5-3:
第 4章 单片机的最小系统及系统扩展图 5-4 P10口控制灯塔信号灯第 4章 单片机的最小系统及系统扩展说明图 5-4是灯塔信号灯的电气原理图,
图中用单片机 8951构成了一个单片机的最小系统,C1和 R1是单片机的复位电路,P1口在复位后输出高电平。晶振的两端分别接在单片机的 XTAL1和 XTAL2
之间。
第 4章 单片机的最小系统及系统扩展说明当 P1口输出高电平时,三极管 T1和 T2
导通。光电耦合器中的发光二极管点亮,
光敏三极管导通,双向二极管 V导通,双向可控硅 VT导通,照明灯 ZD点亮。 P1口输出为低电平,0”时,照明灯 ZD熄灭。
第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
sbit P1.0=P1^0;
void main()
{ for( ; ;)
{ P1.0=0;
delay50ms(20);
P1.0=1;
delay50ms(20);
}
}
void delay50ms(char k)
{ unsigned int i,j;
for (j=0;j<k;j++)
for (i=0;i<5000;i++);
}
第 4章 单片机的最小系统及系统扩展程序分析
sbit P1.0=P1^0;这是一个说明语句,用来说明 P1.0是一个位操作指令。
for( ; ;) 这条语句的作用是形成一个死循环,
灯塔上的照明灯一闪一闪的。
delay50ms(20); 调用 50ms的延时函数。括号中的 20是要传送给被调函数的参数,这个参数决定了延时时间的长度。
第 4章 单片机的最小系统及系统扩展程序分析
void delay50ms(char k) 这是一个延时函数,没有返回值,要接收一个
char型的数据参数。当 K值为 1时,延时 50ms。
for (j=0;j<k;j++)这是一条循环语句,
计数初值 j=0,终值取决于 K值。
第 4章 单片机的最小系统及系统扩展
5.5用开关控制 P1口的输出状态前面有关 P1口的应用属于不受控的输出系统,如果要受控就要有一个开关量的输入信号。
第 4章 单片机的最小系统及系统扩展例 5-4:
图 5-6是一个走廊照明灯的控制系统,
有人进入走廊时用手按一下开关 K,P30
变成低电平,由于手按动开关 K的时间很短,P30得到的是一个下降沿脉冲,作为输入信号。单片机采集到输入信号后,从
P10输出高电平,继电器 J线圈带电,继电器的常开触头 J闭合,照明灯 DX亮,然后延时 1分钟后,自动熄灭。
第 4章 单片机的最小系统及系统扩展图 5-6 P10口控制走廊照明灯第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
sbit P1.0=P1^0
sbit P3.0=P3^0
main()
{ unsigned i,j;
while(1)
{ if (P3.0= =0)
{ P1.0=1;
for (i=1;i<50000;i++)
for (j=1;j<50000;j++);
}
else
P1.0=0;
}
}
第 4章 单片机的最小系统及系统扩展程序分析
sbit P1.0=P1^0 sbit P3.0=P3^0是说明语句,说明 P1.0表示对 P1口的最低位进行操作,P3.0表示对 P3口的最低位进行操作。
第 4章 单片机的最小系统及系统扩展程序分析
if (P3.0= =0)有两个作用,一是将 P30
的开关状态输入单片机,二是判断开关 K
是否闭合。
P1.0=1;如果开关 K闭合,P1口的最低位输出高电平,点亮走廊灯。
第 4章 单片机的最小系统及系统扩展例 5-5:
用单片机设计一个循环彩灯的控制系统。图 5-7是循环彩灯的控制系统原理图。
第 4章 单片机的最小系统及系统扩展图 5-7循环彩灯的控制系统电气原理图第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
unsigned int i; char j,k;
void main()
{ while(1)
{ if (P3.0= =0)
{k=0x80;
for (j=0;j<8;j++)
{ P1=k;
for(i=0;i<50000;i++);
k=k>>1;
}
k=0x01;
for (j=0;j<8;j++)
{ P1=k;
for(i=0;i<50000;i++);
k=k<<1;
}
}
else
P1=0xff;
}
第 4章 单片机的最小系统及系统扩展
5.6交通信号灯的控制系统如果用两个开关控制 P1口的输出状态,又该什么样设计硬件和软件呢?下面以交通信号灯为例说明这个问题。
例 5-6:设计一个交通信号灯的控制系统。
第 4章 单片机的最小系统及系统扩展图 5-8 交通信号灯的示意图第 4章 单片机的最小系统及系统扩展根据现场的实际情况要求如下南北方向红灯亮,东西方向绿灯亮。延时 60秒。
南北方向和东西方向均为黄灯亮。延时 3秒。
南北方向绿灯亮,东西方向红灯亮。延时 60秒。
南北方向和东西方向均为黄灯亮。延时 3秒。
周而复始,循环不止。
第 4章 单片机的最小系统及系统扩展说明当开关 K1断开时,
南北方向绿灯亮,东西方向红灯亮。
当开关 K2断开时,
南北方向红灯亮,东西方向绿灯亮。
根据上述要求,可以画出控制流程图。
如图 5-9所示。
第 4章 单片机的最小系统及系统扩展图 5-9 交通信号灯的控制流程图第 4章 单片机的最小系统及系统扩展输出控制字南北方向红灯亮,东西方向绿灯亮。
输出控制字,0010 0001B=21H。
南北方向绿灯亮,东西方向红灯亮。
输出控制字,0000 1100B=0CH。
南北方向和东西方向均为黄灯亮。
输出控制字,0001 0010B=12H。
第 4章 单片机的最小系统及系统扩展图 5-10 交通信号灯的控制原理图第 4章 单片机的最小系统及系统扩展
#include <reg51.h>
main()
{unsigned int i; char a,j,k;
while(1)
{ P1=0xff;
a=P1;
k=a&0xC0;
switch (k)
{ case 0x40,P1=0x21; break;
case 0x80,P1=0x0C; break;
default,
P1=0x21;
for(j=0;j<120;j++)
P1=0x21;
for(j=0;j<120;j++)
{for(i=0;i<50000;i++);
P1=0x12;
for(j=0;j<6;j++)
for(i=0;i<50000;i++);
P1=0x0C;
for(j=0;j<120;j++)
for(i=0;i<50000;i++);
P1=0x12;
for(j=0;j<6;j++)
for(i=0;i<50000;i++);
break;
}
}
}
}
第 4章 单片机的最小系统及系统扩展程序分析由图 5-8交通信号灯的控制原理图可以看出,
在南北方向,P10控制红灯,P11控制黄灯,P12控制绿灯。在东西方向,P13控制红灯,P14控制黄灯,P15控制绿灯。
当某一位输出高电平时,相应的灯亮;
为低电平时,相应的灯灭。
第 4章 单片机的最小系统及系统扩展程序分析在主程序中采用字节输出的方式,一共有三种状态,采用三个控制字,即,21H、
0CH和 12H,完成对系统的控制。
第 4章 单片机的最小系统及系统扩展程序分析当执行语句 P1=0x21;时,
南北方向停止通行,东西方向通行。
当执行语句 P1=0x12;时,
南北方向和东西方向都是黄灯亮。
当执行语句 P1=0x0C;时,
南北方向通行,东西方向停止通行。
第 4章 单片机的最小系统及系统扩展程序分析由于 P1口是一个准双向的输入口,在程序的开始先向 P1口输出高电平,由语句 P1=0xff 来完成。再把 P1口的工作状态通过语句 a=P1送给变量 a,“与”运算
k=a&0xC0;是把低 6位屏蔽掉。这样就可以根据变量 K的值确定系统的控制方案了。
第 4章 单片机的最小系统及系统扩展
AT29C256的性能指标单一电源供电,电源电压为 5V。
重复改写次数超过一万次。
低功耗。
工作电流为 50mA,待机电流为 300uA。
第 4章 单片机的最小系统及系统扩展图 4-7
单片机
8051
与
AT29C2
56的连线图第 5章 结束