51单片机学习心得(二).doc_第1页
51单片机学习心得(二).doc_第2页
51单片机学习心得(二).doc_第3页
51单片机学习心得(二).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机的那些事儿(续)上次说到彩灯循环的程序,使用汇编语言编写。现在我们逐一分析一下。彩灯循环:这是常见的简单程序,我们先让P0口接的LED中的一个灯亮,然后顺序左移,移到最后一个再右移。循环往复。代码如下:ORG 0000HAJMP MAINORG 0080HMAIN : MOV A , #7FH 这行是让一个灯亮起来 MOV P0 , AMOV R0,#07H 移动7次 MOV R1,#07H MOV R2 , #0FFH 用来延时,要不然太快了 MOV R3 ,#0FFHL1:RRC A MOV P0 , AL2 : DJNZ R2 , L2 NOP NOP NOP NOP DJNZ R3,L2DJNZ R0,L1MOV R3 ,#0FFHMOV R2 , #0FFHL3:RLC A MOV P0,AL4:DJNZ R2,L4 NOP NOP NOP NOPDJNZ R3, L4DJNZ R1 , L3AJMP MAINEND首先为什么要MOV A , #7FH呢,7FH转换成二进制是01111111,大家会发现,这里面只有一个零,所以,在共阳极的LED接法中,0会让LED发光,所以这里面只亮一个灯。MOV P0 , A就是把这个7FH输出,输出了才能亮起来。所以这两句表示一个初始的彩灯状态,就是只有第一个灯亮了。MOV R0,#07H MOV R1,#07H两句为什么是7次呢,因为从第一个到最后一个,我们只接通8个灯,初始状态第一个灯已经亮了,所以剩下7个灯,只能移动七次,就能让最后一个灯亮,移动8次就仍然回到第一个灯了。我们要达到的效果不是简单的从头到尾再从头到尾的循环,而是先从第一个移动到最后一个然后从最后一个再回到第一个,所以不能让每次再回到第一个。MOV R3 ,#0FFH MOV R2 , #0FFH这两句为了延长时间而设计。汇编语言中,为了延长时间,我们只能让单片机一次一次的减一,然后判断是否为零,不是零就再减一判断,就这么周而复始的消磨时间,这就是延时。 RRC A RLC A 就是整体右移和左移。DJNZ用的较为普遍,例如 DJNZ R3 , L3就是把R3当中的数自减一,然后判断是否为零,不是零就跳转到标签为L3处的程序执行。最后别忘了END,虽然它不产生编译代码,但是为了尊重程序的完整性,还是写在最后吧。单片机程序编写还有一种语言,就是C51,语言。KEIL编译器可以把C语言转化成汇编语言,然后用转化成的汇编语言再次变异hex文件。上面的彩灯循环,我们可以写成如下的方式。#include#includesfr P0 = 0x80;void delay() int a,b;for (a=0;a5000;a+)for (b=0:b20;b+);void main() char c,d,e; c=0x7f; P0 = c ; for(d=0,d1; P0 = c; delay();delay();for(e=0,e7,e+)c = c1;P0 = c;delay(); C语言最大的特点就是模块化特别强,用C语言编写的程序出了兼顾51单片机的结构,最重要的是语法规范。大家可以参照C语言教程中的语法结构来分析这段简单的程序。记得一位前辈写过,单片机程序的大体结构是首先上电复位,然后是参数初始化,之后就是个大循环体。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论