前面咱们学会了怎么操作一个MCU的管脚(P1.0),让它设置为低电平(sbit LED= P1^0; LED=0),那么咱们很简单的就能想到怎么将MCU的管脚设置成高电平. 这一讲,咱们就来评论怎么操控单片机的IO口,也便是输入输出端口(input and output port)
2.1单片机IO口操作与延时
已然咱们学会了怎么操控P1.0,那么相同的办法咱们就能操控P1.1,P1.2, … P1.7了。很古怪,为什么单片机的引脚从P1.0开端到P1.7,为什么不是从P1.1到P1.8?基本上你所见到的操控芯片都是以0为开始的。咱们把P1.0到P1.7叫做P1端口。那么这样的端口有多少个呢,在STC89C52中,一共有4组这样的端口,分别是P0,P1,P2,P3. 每个端口都有8个管脚,这样很快,咱们应该知道操作这4组共32个管脚了。我信任写到这儿,每个人都现已知道了怎么运用这32个恣意一个管脚来操控LED。
已然咱们学会了怎么操控一个LED,那么怎么操控两个LED?很简单的能猜到代码如下:
#include
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P2^1;
void main(void)
{
while(1)
{
LED1=0;
LED2=0;
LED3=0;
}
}
经过以上办法咱们能用恣意的IO端口来点亮LED。这儿就不再赘述了。
已然咱们学会了怎么点亮一个LED,信任平息一个LED也会了,而且你能很快的写出代码:
#include
sbit LED = P1^0;
void main(void)
{
while(1)
{
LED = 0;
LED = 1;
}
}
这样对不对?是对的。LED=0,灯亮了,LED=1灯灭了。程序确实是没有问题,LED也是这样操作的。问题是人的肉眼分辩不出来,为什么呢?这儿就触及到了单片机的运转速度以及人眼的分辩距离。下面咱们来剖析从LED=0(亮)到LED=1(灭),中心的距离是多长时刻?这个触及到单片机的碑文速度与时钟周期,机器周期,指令周期相关,咱们暂且不评论。现在咱们经过keil软件调试的办法找到从LED=0到LED=1这个进程花了多长时刻。
(1) 翻开keil软件,新建一个工程,并将以上代码拷入led.c文件
(2) 点击Project->options for Target Target1…
(3) 在弹出的对话框中挑选target, Xtal挑选11.0592,然后点击OK
(4) 点击debug图标,赤色方框所示
(5) 弹出来的界面比较糟糕,能够自己调理,怎么调理?这儿举一个比方,比方我想移动Register这个窗口,用鼠标左键点击Register窗口的标题栏(窗口的蓝色部分),按住鼠标不松开并拖动。
此刻界面如上图所示,四个赤色方框内的方框一共四个方向。此刻将鼠标不松开持续拖动到右边赤色方框中(留意是要把鼠标放到方框内),成果如下:
此刻右边区域会变为蓝色,该区域一共Register行将寄存的区域,然后松开鼠标,拖动完毕。
点击Register窗口中Auto hide图标,如下图赤色方框所示,将Register窗口主动隐藏。
其他窗口的调整办法相似。
(6) 刺进断点。如下图所示,在赤色方框方位双击鼠标,则主动刺进断点,而且呈现赤色断点标志。
这儿咱们刺进两个断点如图所示
点击赤色方框(1)中的RST,然后点击赤色方框(2)中的run,此刻黄色箭头会跳到赤色方框(3)处,记载赤色方框(4)中的时刻t1=0.00042209s
点击方框(2)中的run,此刻黄色箭头会跳到赤色方框(5)处,记载赤色方框(4)中的时刻t2=0.00042426s,那么t2-t1=0.00000217s=2.17us,
一共LED从点亮到平息只用了2.17微秒,而人眼的最小分辩时刻距离大约为0.27s(270000微秒),因而感知不到灯的亮灭进程。你能够将这个程序下载到单片机中做做试验,你会发现LED很暗。事实上以上程序将导致LED循环亮灭,咱们改变时刻太快,几个微秒,咱们无法感知,因而给人的感觉便是灯很暗。现在咱们怎么设置延时,让咱们能更清楚的调查灯的亮灭进程?思路很简单,让单片机点亮LED后,去干点其他工作,然后再平息LED。这个就好比你坐火车时,提早到了一个小时,你能够看看书,玩玩手机。意图是坐火车,看书,玩手机只起到消磨时刻的效果。那么相同,在本例中,咱们让单片机干什么工作呢?能够挑选休眠(咱们后边讲到),或许让它去数数。比方从1数到10000等等。这种办法就叫做软件延时。
#include
sbit LED = P1^0;
void main(void)
{
unsigned int i;
while(1)
{
LED = 0;
for(i=0;i<40000;i++);
LED = 1;
for(i=0;i<40000;i++);
}
}
将以上代码复制到led.c文件中并保存。该段代码中,经过去做其他工作来到达延时的效果。咱们再次调试看看LED平息和点亮时刻的距离,设置断点如下:
以上能够看出,1.60636393s-0.00042318s 大约1.6s,远远大于人的分辩时刻。
已然咱们能操控一个LED的亮灭了,那么同理可知,咱们当然知道怎么操控并延时其他LED了,这样咱们就学会怎么操作单片机的IO端口以及怎么经过软件延时了。
下面咱们来看看就这两招精干什么工作?