控制灯闪烁的MCS-51单片机程序举例及详解

发布者:EtherealGaze最新更新时间:2015-08-26 来源: eefocus关键字:控制灯闪烁  MCS-51  单片机 手机看文章 扫描二维码
随时随地手机看文章
要让灯持续地闪烁,这就有一定的实用价值了,比如能把它当成汽。怎样才能让灯持续地怎样才能让灯持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:
SETB P10
CLR P10 ……
这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也没有机会让灭了。
  为了解决这两个问题,我们能做如下设想,第一,在执行完SETB P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,持续地在原地兜圈,我们称之为"循环",这样就能完成任务了。
以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):
;主程序:
LOOP: SETB P10     ;(1)
    LCALL DELAY   ;(2)
    CLR P10     ;(3)
    LCALL DELAY   ;(4)
    AJMP LOOP    ;(5)
;以下子程序
DELAY: MOV R7,#250  ;(6)
D1: MOV R6,#250    ;(7)
D2: DJNZ R6,D2    ;(8)
  DJNZ R7,D1     ;(9)
  RET         ;(10)
  END         ;(11)
按上面的设想分析一下前面的五条指令。
  第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们能认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,能称它为A,X等等,当然,这个时候,第五条指令LJMP后面的名字也得跟着改了。
  第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实有RET指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。
  在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。 程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。
单片机内部结构分析:为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从R1开始,R1被称之为工作寄存器。什么是工作寄存器呢?让我们从现实生活中来找找答案。如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么不难了吧?我们会怎样做呢?如果有张纸,就不难了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,一般要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中能吗?显然不行,因为计算机要将结果写进去,而ROM是不能写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能将数据写进去。 特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区
关键字:控制灯闪烁  MCS-51  单片机 引用地址:控制灯闪烁的MCS-51单片机程序举例及详解

上一篇:C8051F340系统时钟配置
下一篇:51 单片机综合学习系统之 1602字符型液晶显示篇

推荐阅读最新更新时间:2024-03-16 14:30

以C8051F340单片机为核心的USB数据采集系统设计
1引言 电子设备运行状态的稳定性直接影响到现代企业的生产, 设备发生故障后高昂的维修费以及设备停机后给企业生产带来的损失, 使得各个企业纷纷采取措施, 降低设备的故障率。通过数据采集系统准确的获取设备运行特征数据, 并对数据进行分析,判断设备的运行状态是否良好, 达到提前预防故障出现、减少停机检修的目的。实际应用中对数据采集系统的可靠性, 准确性和便携性要求很高。目前常用的数据传输网络(如RS232 /RS485, CAN 等)已经不能满足大量采集数据和高速实时数据传输的要求。而USB传输具有高速可靠传输的优势, 具有成本低、可靠性高、维护方便等优点。本文以带有片上USB 和高速AD转换器的C8051F340为核心控制器件, 利用
[单片机]
以C8051F340<font color='red'>单片机</font>为核心的USB数据采集系统设计
单片机00到99秒表的课程设计
这是我上个月做的单片机秒表课程设计,这个课程设计是实现00到99秒的一个秒表, 并且有开始和复位功能, 用了一个星期的时间, 附件里面包含秒表的单片机源程序,proteus仿真电路图和课设文档, 都是自己做的,请大家多多指教。 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 秒表的设计与仿真 一、设计要求 设计一个2位的LED数码显示的“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。 二、方案论证 方案一: 用数字电路来实现秒表的设计。由NE555定时器组成的多谐振荡器通过开关控制,把脉冲送到计数器,通过计数器计数,在送入译码器进行译码,最后送入数码管进行显示。框图如下
[单片机]
<font color='red'>单片机</font>00到99秒表的课程设计
单片机逆向分析浅谈
山外有山,天外有天,学无止境,做产品,搞技术更是如此。没有任何个人及公司能够闭门造车研发出好产品来,需要不断的学习别人先进的东西,取长补短,这样人类才能不断的进步,社会才能不断的发展。当今社会,商品经济环境早已成为主流,学习、创新能力变得越来越重要,没有学习,就不可能有创新。 要学习、学会先进技术,对于嵌入式产品而言,要了解硬件原理,有电路板就可以,这也容易获得,买个设备就可以了。而对于嵌入式软件,最好莫过于得到源代码。而源代码是公司的命脉,外界的人不可能获得。除非去偷,这是犯法伤德的事,可不能干。就没有其它方法了?非也,那就是以技攻技,即以更前沿、更具技术含量的方案去解决,我这里称这方法为逆向分析。 第一步,得有被学习、研究的对象
[单片机]
STOP状态下通过串口唤醒MCU
/* STOP状态下通过串口唤醒MCU 唤醒机制:在MCU进入STOP状态后,不能直接通过UART等外设唤醒, 在MCU进入STOP前将RX脚设为EXTI模式,并使能对应的中断。 */ /*************************************************************************************** ** 函数名称: main ** 功能描述: 起始入口 **-------------------------------------------------------------------------------------- ** 修 改 人: ** 日  期: *
[单片机]
基于AT90CAN128单片机的某车型CAN总线系统设计
引言 现场总线技术 是目前自动化控制领域发展比较迅速的一门技术,其中CAN(Controller Area Network)总线 是在国际上应用最广泛的现场总线之一。近几年随着汽车电子行业的发展,现代汽车中CAN总线已经成为必须采用的装置之一。本文以ATMEL公司新近生产的一款内置CAN控制器的单片机——AT90CAN128为基础,设计了一款车载CAN总线系统,通过CAN智能测控仪表对车中部分单元参数量进行实时监控,使各单元之间协调运转。另外,传输线束大大简化,可靠性得到了极大的提高,有效节约了线束安装空间和系统成本。 1 AT90CAN128特性概述 1.1 基本特性 AT90CAN128 是基于AVR RISC
[单片机]
基于AT90CAN128<font color='red'>单片机</font>的某车型CAN总线系统设计
关于stm32单片机低功耗的实现和唤醒
最近做的项目中要求低功耗,在单片机完成了手头上的工作之后,就进入低功耗模式,项目的需求是单片机进入低功耗模式的时候系统时钟从HSE切到HSI,但是在未进入低功耗模式之前引脚是什么状态,进入低功耗模式之后也不应该改变。可以通过RTC定时唤醒,或者接收到串口数据就唤醒,处理完数据后再进入stop模式。查询了一些资料之后,发现stop模式最符合项目需求。下面讲述一下什么是低功耗: 一、stm32支持三种低功耗模式,可以在低功耗,短启动,多种唤醒模式下寻找平衡。 1、SleepMode睡眠模式,只有CPU停止运行,所有的外设处于工作状态并且可以在发生中断/事件时唤醒CPU。 2、StopMode停机模式,保持SRAM和寄存器内容不丢失,达
[单片机]
单片机设计的电子琴
功能说明: 此电子琴小巧、声音悦耳、便于携带、成本低、美观大方,能演奏绝大部分音乐。本作品采用的 16键设计方法,也可以扩展成 21 键的。另外还能在这个基础上附加一些功能。 1. 由 4 4 组成的 16 个按钮矩阵,设计成 16 个音。 2. 硬件原理图: 程序附录: 实物图: 原理图: 源代码: ;************* 单片机--电子琴 *******************; ;*MCU: AT89C52 ; ;*MCU-crystal: 12M ; ;*Ve
[单片机]
<font color='red'>单片机</font>设计的电子琴
PIC16F877单片机在直流电机闭环调速系统中的应用
0引 言        现代工业生产中,电动机是主要的驱动设备,目前在电力拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ-D拖动系统,取代了笨重的发电动一电动机的F-D系统,又伴随着微电子技术的不断发展,中小功率直流电机采用单片机控制,调速系统具有频率高,响应快,本文论述了采用PIC16F877单片机作为主控制元件,充分利用了PIC16F877单片机捕捉、比较、模/数转换模块的特点作为触发电路,其优点是:结构简单,能与主电路同步,能平稳移相且有足够的移相范围,控制角可达10000步,能够实现电机的无级平滑控制,脉冲前沿陡且有足够的幅值,脉宽可设定,稳定性与抗干扰性能好等。       1 直流电机调速原理分析   
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved