单片机程序的完善

发布者:salahc1983最新更新时间:2012-11-07 来源: 21ic 关键字:单片机程序  程序指令  标志 手机看文章 扫描二维码
随时随地手机看文章

怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要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,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。

关键字:单片机程序  程序指令  标志 引用地址:单片机程序的完善

上一篇:基于单片机的UPS数字化锁相技术
下一篇:基于tinyAVR和Nokia3310 LCD的温度绘图仪

推荐阅读最新更新时间:2024-03-16 13:12

51单片机与USB芯片PDIUSBD12接口固件程序
此函数库可以直接使用PHILIPS的Demo驱动D12TEST 以下只用了端点1进行控制传输,端点2的数据传输自己添加,没有使用 DMA 功能,为简单的固件程序 /************************************************************************** PHILIPS PDIUSBD12 FIRMWAR COPYRIGHT (c) 2005 BY JJJ. -- ALL RIGHTS RESERVED -- File Name: D12_USB.h Author: Jiang Jian
[单片机]
如何快速掌握一款新的MCU程序设计
任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握: * MCU的特点:要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作 电压 及功耗等等。 * 了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本
[单片机]
直接测量微控制器总线时钟的程序
  飞思卡尔(Freescale)公司的HC08与最新HCS08 微控制器 系列都是多功能的外设模块。它们使用的时钟发生器也没有特殊之处,可以是内部时钟(省出了I/O脚),也可以是外接晶体或振荡器。一旦选定了时钟源,就有多种选择控制最终的总线频率。例如,为MC9S08GB微控制器连接一个32768Hz晶体就可以使用FLL(锁频环)生成高达18.874MHz的多个总线频率。选择时钟源、分频器和FLL设置固然能实现多功能性,但也带来了复杂性。   一旦编写完 总线时钟 初始化例程,可能希望先验证一下总线是否确实以期望的速度运行,然后再进入项目的其它部分。本设计实例的例程,可在任何I/O端口输出一个精确等于1/10总线速度
[测试测量]
直接测量<font color='red'>微控制器</font>总线时钟的<font color='red'>程序</font>
Windows下PIC 8位单片机程序汇编和固化(五)
  5 在MPLAB中PIC单片机源程序的汇编   在PC机上应用MPLAB集成开发软件对源程序PIC COUNTASM汇编的准备工作经上述介绍的几次操作已完成,余下的操作即可立刻对指定的源程序进行汇编。读者将会看到,即将介绍的汇编操作十分简单。初学PIC单片机汇编源程序时,应熟练掌握已介绍的各种操作,即建立和编辑指定PIC单片机的源程序→存盘装载观察源程序→创建(源程序)项目→编辑(源程序)项目→进入对源程序PIC COUNTASM汇编。所以在完成创建项目和编辑项目的操作之后,紧接着用鼠标键单击project(项目)项,即可打开project的下拉菜单,在该下拉菜单下用鼠标键单击Make project(制作项目)命令,即可
[单片机]
单片机+AS608的使用,并带程序
之前在AS608的使用上走了许多弯路,这次希望身为初学者的我们可以吸取经验,特此介绍AS608. 指纹模块AS608的使用: 1脚红线:Vcc,连接3.3V电源供电,勿接3.3V以上电源 2脚黄线:接单片机串口TX端 3脚白线:接单片机串口RX端 4脚黑线:GND,3.3V电源的GND 5脚蓝线:模块触摸感应信号输出(高电平为检测到触摸),需要接VTI到3.3V 6脚绿线:模块触摸感应电路电源,可以与红线并接 在本次程序中5,6脚可以不接,2,3脚分别先连在单片机上的TX,RX,保证通信正常。本次程序基于51单片机设计可以通过LCD1602显示,带有录入指纹,检测指纹等等功能。 单片机源程序如下: #include reg52.
[单片机]
<font color='red'>单片机</font>+AS608的使用,并带<font color='red'>程序</font>
单片机的数字时钟程序
#include reg52.h #include absacc.h #define unit unsigned int #define uchar unsigned char /*定义字型字位口*/ #define DIGPORT XBYTE #define WORDPORT XBYTE /*定义P1口各管脚*/ sbit K0=P1^0; sbit K1=P1^1; sbit K2=P1^2; sbit BEEP=P1^3; sbit L0=P1^4; sbit L1=P1^5; sbit L2=P1^6; sbit L3=P1^7; uchar data BUFFER ={0,0
[单片机]
AVR单片机8位数码管显示的程序实现
我们接着来完成8位数码管的显示实验。现在我们开始动手编写程序; 根据前面的介绍,我们应该已经能够知道编写一个 AVR单片机 的C语言程序的基本步骤和方法了。 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句、全局变量的定义、函数的声明、主函数、函数定义。如果你还不能够准确找出这几部分,那么需要把前面的内容再详细阅读一下。 主程序代码 #include avr/io.h //io端口寄存器配置文件,必须包含 #include util/delay.h //GCC中的延时函数头文件 #include hc595.h //u
[单片机]
用PIC10F202单片机制作两路开关源程序
//=======================================用户配置区,供用户修改=========================================== #define TIME2 1000 //长按键时间设置,单位ms ,1000 = 1s 范围:1~10s //========================================================================================================= //************************************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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