下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51单片机程序示例上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯持续地闪烁,这就有一定的实用价值了,比如能把它当成汽车上的一个信号灯用了。怎样才能让灯持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETBP1.0后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLRP1.0指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLRP10后,不会再去执行SETBP1.0指令,所以以后再也没有机会让灭了。为了解
2、决这两个问题,我们能做如下设想,第一,在执行完SETBP1.0后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,持续地在原地兜圈,我们称之为"循环",这样就能完成任务了。以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):;主程序:LOOP:SETBP1.0;(1)熄灭灯LCALLDELAY;(2)延时一段时间CLRP1.0;(3)点亮灯LCALLDELAY;(4)延时一段时间AJMPLOOP;(5)跳转到第一句LOOP处;以下子程序DELAY:MOVR7,#250;(6)D1:
3、MOVR6,#250;(7)D2:DJNZR6,D2;(8)DJNZR7,D1;(9)RET;(10)END;(11)本例keil工程文件点击这里下载按上面的设想分析一下前面的五条指令。第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,AJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们能认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一
4、个名字,便于使用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,能称它为A,X等等,当然,这个时候,第五条指令AJMP后面的名字也得跟着改了。第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实有RE
5、T指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。单片机内部
6、结构分析:为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从R1开始,R1被称之为工作寄存器。什么是工作寄存器呢?让我们从现实生活中来找找答案。如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么不难了吧?我们会怎样做呢?如果有张纸,就不难了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1252。这其中1252是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中
7、做运算和这个类似,为了要得到最终结果,一般要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中能吗?显然不行,因为计算机要将结果写进去,而ROM是不能写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能将数据写进去。特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区,上面程序用到的R6,R7就是在这个区里面,这我们会在第7课有详细的介绍。其实如果我们用C语言来写程序的话用根本不用了解工作寄存器这个概念了因为C编译器会自动处理看上面的程序如果用c来写就是#include<at89x52.h>
8、voidDELAY()/延时函数unsignedchari,j;for(i=0;i<250;i+)for(j=0;j<200;j+);voidmain()/程序从这里开始执行while(1)/这句的作用就是反复的执行下面这个中包含的4句P1_0=1;/(1)熄灭灯DELAY();/(2)延时一段时间P1_0=0;/(3)点亮灯DELAY();/(4)延时一段时间在汇编例子中程序是从第一条语句开始执行的,而c不同在c语言里程序是从main()这里开始执行的,关于(1)(2)(3)(4)这几句的解释和上面的汇编一样,不再敖述。循环部分这里是用了一个while(1)语句下面打了一个大括号,这样大括号中的这4条语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧煤场系统工程施工方案
- 电鸣乐器调试工创新实践知识考核试卷含答案
- 2025-2026学年北师大版(2022)小学劳动技术三年级(上册)期末测试卷附答案
- 机器人教学实验位姿控制实践指南
- 解析现代小说魅力
- 四年级生涯心理探析
- 专题01 一元二次方程【知识梳理+解题方法+专题过关】-2025-2026学年九年级数学上学期期中期末挑战满分冲刺卷(人教版)(原卷版)
- 2025-2031全球与中国工程机械市场现状及未来发展趋势 Sample wp
- 2025陕西榆林府谷能源投资集团有限公司选聘24人笔试历年参考题库附带答案详解
- 2025年国家能源投资集团有限责任公司高校毕业生统招6400余人(河北有岗)笔试历年参考题库附带答案详解
- 临床合理用药培训
- 4.1中国的机遇与挑战(课件)-2025-2026学年统编版道德与法治九年级下册
- 2025首创证券校园招聘笔试历年难易错考点试卷带答案解析试卷3套
- 资源税法课件
- 扬尘施工方案交底
- 2025海南大华会计师事务所(特殊普通合伙)海南分所人才招聘笔试考试备考试题及答案解析
- 雨课堂学堂云在线《中国特色社会主义理论与实践研究(北理 )》单元测试考核答案
- 十五五规划纲要:应急管理体系现代化的顶层设计与能力提升
- 学术论文标准格式规范
- 2025年秋季川省成都国有企业招聘(纪检)练习题及答案
- 供配电技术考试及答案
评论
0/150
提交评论