您的位置 首页 传感器

开始知道51单片机

前面我们学会了如何操作一个MCU的管脚(P10),让它设置为低电平(sbitLED=P1^0;LED=0),那么我们很容易的就能想到如何将MCU的管脚设置

前面咱们学会了怎么操作一个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端口以及怎么经过软件延时了。

下面咱们来看看就这两招精干什么工作?

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/263498.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部