51单片机学习心得(二)

51单片机学习心得(二)

ID:15947944

大小:29.50 KB

页数:5页

时间:2018-08-06

51单片机学习心得(二)_第1页
51单片机学习心得(二)_第2页
51单片机学习心得(二)_第3页
51单片机学习心得(二)_第4页
51单片机学习心得(二)_第5页
资源描述:

《51单片机学习心得(二)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、51单片机的那些事儿(续)上次说到彩灯循环的程序,使用汇编语言编写。现在我们逐一分析一下。彩灯循环:这是常见的简单程序,我们先让P0口接的LED中的一个灯亮,然后顺序左移,移到最后一个再右移。循环往复。代码如下:ORG0000HAJMPMAINORG0080HMAIN:MOVA,#7FH这行是让一个灯亮起来MOVP0,A    MOVR0,#07H移动7次MOVR1,#07HMOVR2,#0FFH用来延时,要不然太快了MOVR3,#0FFHL1:RRCAMOVP0,AL2:DJNZR2,L2NOPNOPNOPNOPDJNZR3,L2DJNZR0,L1MOVR3,#0FFHMOVR2,#0FFH

2、L3:RLCAMOVP0,AL4:DJNZR2,L4NOPNOPNOPNOPDJNZR3,L4DJNZR1,L3AJMPMAINEND首先为什么要MOVA,#7FH呢,7FH转换成二进制是01111111,大家会发现,这里面只有一个零,所以,在共阳极的LED接法中,0会让LED发光,所以这里面只亮一个灯。MOVP0,A就是把这个7FH输出,输出了才能亮起来。所以这两句表示一个初始的彩灯状态,就是只有第一个灯亮了。MOVR0,#07HMOVR1,#07H两句为什么是7次呢,因为从第一个到最后一个,我们只接通8个灯,初始状态第一个灯已经亮了,所以剩下7个灯,只能移动七次,就能让最后一个灯亮,移动8

3、次就仍然回到第一个灯了。我们要达到的效果不是简单的从头到尾再从头到尾的循环,而是先从第一个移动到最后一个然后从最后一个再回到第一个,所以不能让每次再回到第一个。MOVR3,#0FFHMOVR2,#0FFH这两句为了延长时间而设计。汇编语言中,为了延长时间,我们只能让单片机一次一次的减一,然后判断是否为零,不是零就再减一判断,就这么周而复始的消磨时间,这就是延时。RRCARLCA就是整体右移和左移。DJNZ用的较为普遍,例如DJNZR3,L3就是把R3当中的数自减一,然后判断是否为零,不是零就跳转到标签为L3处的程序执行。最后别忘了END,虽然它不产生编译代码,但是为了尊重程序的完整性,还是写在

4、最后吧。单片机程序编写还有一种语言,就是C51,语言。KEIL编译器可以把C语言转化成汇编语言,然后用转化成的汇编语言再次变异hex文件。上面的彩灯循环,我们可以写成如下的方式。#include#includesfrP0=0x80;voiddelay(){inta,b;for(a=0;a<5000;a++)for(b=0:b<20;b++);}voidmain(){charc,d,e;c=0x7f;P0=c;for(d=0,d<7,d++){c=c>>1;P0=c;delay();}delay();for(e=0,e<7,e++){c=c<<1;P0=c

5、;delay();}}C语言最大的特点就是模块化特别强,用C语言编写的程序出了兼顾51单片机的结构,最重要的是语法规范。大家可以参照C语言教程中的语法结构来分析这段简单的程序。记得一位前辈写过,单片机程序的大体结构是首先上电复位,然后是参数初始化,之后就是个大循环体。每个循环体开始要有使能标志,以便取舍。这一篇先告一段落,下一篇分享一下定时器/计数器的应用,以及矩阵键盘,中断应用,还有LCD1602的驱动方式。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。