《51单片机应用开发从入门到精通》——2.1 简单点亮发光二极管实例

2.1 简单点亮发光二极管实例

51单片机应用开发从入门到精通
单片机最简单的实例之一就是点亮发光二极管(LED)闪烁。本节通过点亮1只发光二极管的实例来介绍单片机的I/O口操作。

本节首先介绍单片机I/O口结构的基础知识,接着介绍实例的硬件电路,然后给出了实例程序,最后将分析操作单片机的I/O口的技巧与注意点。

2.1.1 基础知识

8051单片机有4个并行I/O口:P0~P3。这4个I/O口中只有P0口是真正的双向口,P1~P3是准双向口,P3口还具有第二功能,为系统提供一些控制信号。4个并行I/O口的结构如表2-1所示。由I/O口结构可知,P0口的输出三态门由两只场效应管(FET)组成,所以是一个真正的双向口,同时可以提供较强的输出高电平(拉电流)和低电平(灌电流)驱动能力;P1~P3口中,上拉电阻代替了场效应管,输出缓冲器不是三态的,因此不是真正的双向口,只能称为准双向口,同时这些I/O口的输出高电平驱动能力较弱,只能提供较强的输出低电平驱动能力。因此,在使用I/O口直接驱动LED等电流负载时,需要使用输出低电平驱动的接法。

2.1.2 硬件电路图

本实例中,硬件电路主要包括8051单片机最小系统电路(包括5V电源,正极接40引脚,负极(地)接20引脚;振荡电路,使用晶体振荡器,接18、19脚;复位电路;EA引脚接到正电源端)和发光二极管LED电路(由1只LED和1只限流电阻串联而成),具体的连接原理电路图如图2-1所示。当P1.0引脚输出低电平时,点亮LED;当P1.0引脚输出高电平时,LED熄灭。

2.1.3 软件程序设计

要实现LED的闪烁效果需要通过程序控制单片机连接到LED的I/O引脚,点亮LED,延时一段时间后,再控制I/O引脚使LED熄灭,如此循环就可以实现LED的闪烁。下面,着重介绍延时程序,并给出完整的软件程序实例。

1.延时程序
首先,通过下面的代码演示单片机如何通过程序实现延时一段时间。

;延时子程序
DELAY:
    MOV R7,#10H              ;(1)
DELAY0:
    MOV R6,#7FH              ;(2)
DELAY1:
    MOV R5,#7FH              ;(3)
 DJNZ R5,$                   ;(4)
 DJNZ R6,DELAY1              ;(5)
 DJNZ R7,DELAY0              ;(6)
 RET                         ;(7)

程序(1)为数据传送指令,该指令的作用为将数据10H传送到寄存器R7中。8051单片机执行程序(1)~程序(3)后,寄存器R5、R6、R7的值分别为7FH、7FH和10H。程序(4)为减1不为0转移指令,该指令的作用为将寄存器R5中的数据减1,如果结果不为0,则程序跳转。其中“$”符号表示该指令的地址,所以若减1不为0则程序发生跳转,再次执行程序(4)。同理,程序(5)为将寄存器R6中的数据减1,如果结果不为0,则程序跳转到标号“DELAY1”处继续执行。程序(7)为子程序返回指令,执行该指令使程序返回调用子程序时的断点,继续执行断点之后的程序。

以上代码实例使用了数据传送指令和控制转移指令,8051单片机的数据传送指令及控制转移指令如表2-2、表2-3所示。表2-2、表2-3中的其他一些数据传送指令及控制转移指令将在后面的实例中陆续详细介绍。

以上代码实例是一个完整的子程序。所谓子程序,就是完成确定任务,并能被其他程序反复调用的程序代码段,子程序在结构上具有通用性和独立性。子程序的编写必须注意以下几点:

 子程序调用使用LCALL指令。
 子程序必须通过RET指令返回。
 子程序第一条必须有标号,以实现LCALL指令的调用。
 正确传递入口参数和出口参数。
 子程序需要注意现场的保护和恢复。
 如果需要子程序嵌套,应注意嵌套深度与堆栈区大小的问题。
该延时子程序,可以实现约0.5秒的延时,下面看看如何来计算延时子程序的延时时间。8051单片机的一个机器周期包括12个时钟周期,本实例中单片机晶振为12MHz,则它的1个时钟周期是1/12微秒,1个机器周期是1微秒。DJNZ指令是双周期指令,执行1次要2个微秒,延时子程序一共执行258064次DJNZ指令,一共为516128微秒,约为0.5秒。

2.程序全貌
本实例的软件程序全貌如下:

;-----------------------------------
;                   简单点亮发光二极管实例
;功能:点亮发光管LED并闪烁
;-----------------------------------
LED_PIN  EQU  P1.0           ;(1)
ORG 0000H   ;伪指令,指定程序从0000H开始存放
LJMP  MAIN   ;跳转指令,程序跳转到MAIN处
ORG 0100H   ;伪指令,指定以下程序从0100H开始存放
MAIN:
   MOV SP,#60H  ;给堆栈指针赋初值       (2)
LIGHT:
   SETB LED_PIN  ;置一P1.0,LED灭       (3)
   LCALL DELAY  ;调延时子程序        (4)
   CLR LED_PIN  ;清零P1.0,LED亮       (5)
   LCALL DELAY  ;调延时子程序        (6)
   SJMP LIGHT  ;跳转,程序继续        (7)
;延时子程序
DELAY:
   MOV R7,#10H
DELAY0:
   MOV R6,#7FH
DELAY1:
   MOV R5,#7FH
   DJNZ R5,$
   DJNZ R6,DELAY1
   DJNZ R7,DELAY0
   RET
END```
程序(1)为伪指令,伪指令是在汇编程序中起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生实际的机器指令。程序(1)的作用是定义常数,也就是说,在该伪指令以下程序中出现的LED_PIN都是指代P1.0。8051单片机编程中常用的伪指令如表2-4所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/aa72ec41aae04f210efb3b358fe111416b097df5.png" width="" height="">
</div>

8051单片机在上电复位后程序计数器PC中的值为0000H,也就是说程序是从0000H单元开始执行的。通过伪指令ORG 0000H指定程序从0000H单元开始存放,并在该单元写入跳转指令LJMP MAIN,使程序跳转到MAIN处开始执行。“MAIN:”称为标号,它代表了当前行的程序存储器地址。

程序(2)为给堆栈指针赋初值指令。所谓堆栈是一个RAM区域,堆栈存放和取用数据的方式比较特殊:先进后出,后进先出。堆栈的数据传输指令有两条,即PUSH和POP指令,堆栈的操作还涉及一个寄存器:堆栈指针SP。每当执一次PUSH指令时,SP的值就自动加1,然后数据被放到SP所指示的RAM单元中。每当执行一次POP指令,数据从SP所指示的RAM单元中取出,然后SP的值自动减1。由于上电复位后,SP的初始值为07H,这样就使堆栈数据从08H单元开始往后存放,而08H到1FH这个区域正是8051单片机的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。所以使用MOV SP,#60H指令设置堆栈指针,把堆栈设置在从60H开始的RAM单元中。

程序(3)、程序(5)为位操作指令,8051单片机的位操作指令见表2-5。

表2-5 位操作指令

<div style="text-align: center"><img src="https://yqfile.alicdn.com/ec97a635ca122da65d04da3743d28b1f7ddd27ae.png" width="" height="">
</div>

通过直接寻址位取反指令CPL,程序(3)~(7)也可写作如下:

LIGHT:
CPL LED_PIN ;取反P1.0,改变LED的亮灭状态
LCALL DELAY ;调延时子程序
SJMP LIGHT ;跳转,程序继续

3.运行结果
本实例的运行结果为LED不停闪烁。

####2.1.4 技巧总结
本实例从单片机点亮1只发光二极管出发,演示8051单片机是如何操作I/O口的。在单片机I/O口操作中应注意以下的技巧。

硬件连接过程中应注意各I/O口的内部结构,选择合适的引脚及连接方式。一般来说,对于I/O口驱动电流负载的情况,应采用输出低电平驱动电路的形式。对于许多新型的51内核的单片机,引脚提供了输出20mA电流的LED驱动能力,输出高电平时也可以直接驱动LED。
操作I/O口的指令主要是SETB bit、CLR bit、CPL bit。
时间: 2024-12-03 17:18:57

《51单片机应用开发从入门到精通》——2.1 简单点亮发光二极管实例的相关文章

《51单片机应用开发从入门到精通》——2.2 跑马灯实例

2.2 跑马灯实例 51单片机应用开发从入门到精通 在上一节点亮1只LED的基础上,让我们来看看如何控制多只LED实现跑马灯效果. 2.2.1 硬件电路图 本实例中,硬件电路和上一节的硬件电路相似,为了实现跑马灯,本实例电路连接了8只LED,原理电路图如图2-2所示. 2.2.2 软件程序设计 控制多只LED实现跑马灯效果可以有多种实现方式,下面给出其中两种,请对比这两种实现方式的优劣. 1.程序全貌 首先,使用上节学习的直接寻址位置1指令SETB bit和直接寻址位清0指令CLR bit控制P

《51单片机应用开发从入门到精通》——2.9 交通灯实例

2.9 交通灯实例 51单片机应用开发从入门到精通 定时器/计数器是单片机中最常用.最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用方法,并复习如何使用上节学习的散转程序. 本节首先介绍交通灯的基础知识以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的编程以及程序的全貌,最后将总结一下本实例的技巧与注意点. 2.9.1 基础知识 交通灯控制器实例主要使用了8051单片机的定时器/计数器,本实例的基础知识主要包括:交通灯的变化规律.定时器/计数器的概念

《51单片机应用开发从入门到精通》——2.10 变频报警实例

2.10 变频报警实例 51单片机应用开发从入门到精通 本实例是用软件延时方法实现变频振荡报警,即用P3.4端口输出1kHz和2kHz的变频信号以示报警,每隔1s交替变换1次.本节硬件设计与上节相同. 2.10.1 程序设计 本程序利用软件延时方法,使P3.4端口输出1kHz和2kHz的变频信号,每隔1s交替变换1次. 1.流程图 程序设计流程如图2-16所示. 2.程序 汇编语言编写的变频报警源程序FS02.ASM代码如下: 01: MAIN: MOV R1,#8 ;1kHz持续时间 02:

《51单片机应用开发从入门到精通》——2.11 歌曲演奏实例

2.11 歌曲演奏实例 本实例是利用单片机演奏一首生日快乐歌. 2.11.1 编程演奏器原理 1.演奏器原理 (1)通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音节的声音. (2)用软件延时来控制发音时间的长短,控制节拍,表2-14是各调1/4节拍的时间表. (3)把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中.由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间. (4)表2-15为单片

《51单片机应用开发从入门到精通》——2.3 流水灯实例

2.3 流水灯实例 本节基于上一节的硬件电路,首先介绍关于寻址方式的基础知识,然后给出了运用查表法实现的流水灯实例程序. 2.3.1 基础知识 寻址方式是指寻找.确定参与操作的数据地址的方式,8051单片机的寻址方式包括寄存器寻址.直接寻址.寄存器间接寻址.立即寻址以及基址寄存器加变址寄存器间接寻址,这5种寻址方式的功能见表2-7.下面将详细介绍基址寄存器加变址寄存器间接寻址的寻址方式. 基址寄存器加变址寄存器间接寻址方式一般用于访问程序存储器中的数据表格,这种寻址方式,是以DPTR或PC作基址

《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

2.4 延时时间计算实例 51单片机应用开发从入门到精通 在单片机的实时控制系统中,常常需要用到延时操作,所以,延时子程序往往是编写单片机程序中不可缺少的一部分.延时方法有硬件延时和软件延时,硬件延时将在后面有关章节中介绍,本节将介绍软件延时方法. 所谓软件延时,就是让计算机重复执行一些无具体任务的程序,利用执行程序的时间来达到延时的目的. 2.4.1 机器周期和指令周期 单片机读.写操作都需要消耗一定的时间,机器周期是指单片机完成一个基本操作所用的时间,如读操作.写操作等.当石英晶体为12MH

《51单片机应用开发从入门到精通》——导读

前言 51单片机应用开发从入门到精通 随着微处理器技术和SoC技术的发展,从较早的4位机到8位机,一直发展到现在的32位机,单片机的应用逐渐渗透到生产.生活的各个领域.本书主要针对MCS-51体系单片机,从硬件.软件两个方面的基础知识开始进行介绍.MCS-51体系单片机由于具有简单易学.稳定性好.成本低等优点,在工业控制.家用电器.汽车电子乃至航天电子等许多领域都有着重要的应用. 本书主要针对初.中级读者群,通过众多的实例介绍单片机开发的基础知识.基本工具.基本过程及简单应用,既方便初学者入门,

《51单片机应用开发从入门到精通》——1.3 Keil uVision2集成开发环境

1.3 Keil uVision2集成开发环境 51单片机应用开发从入门到精通 uVision2 IDE是Keil software公司的产品,它集项目管理.编译工具.代码编写工具.代码调试以及完全仿真于一体,特别适用于个人开发或者人数少.对开发过程的管理还不成熟的开发团体.这一功能强大的软件提供简单易用的开发平台,可以让开发者在开发过程中集中精力于项目本身,加快开发速度. 1.3.1 uVision2介绍 uVision2的界面窗口如图1-13所示,该软件提供了丰富的工具,常用命令都具有快捷工

《51单片机应用开发从入门到精通》——1.5 测试方法和工具

1.5 测试方法和工具 51单片机应用开发从入门到精通 完成一个用户样机,首先要完成硬件组装工作,然后进入软件设计.调试和硬件调试阶段.硬件组装就是在设计.制作完毕的印制板上焊好元件与插座,然后就可用仿真开发工具进行软件设计.调试和硬件调试工作. 1.用户样机软件的设计.调试 用户样机软件设计.调试的过程如图1-25所示,可为以下几个步骤. 第一步,建立用户源程序.用户通过开发系统的键盘.CRT显示器及开发系统的编辑软件,按照所要求的格式.语法规定,把源程序输入到开发系统中,并存在磁盘上. 第二