《例说8051:单片机程序设计案例教程》——2-7 实例演练

2-7 实例演练

如图2-16所示为本单元的实验电路,在此将进行单灯左移、双灯左移,以及霹雳灯的实验。

2-7-1 单灯左移

在此的“单灯左移”是从Port 2输出的8个LED中,从P2.0所连接的LED开始亮,任何时刻只有一个LED亮,如图2-17所示。

设计要点

1.如图2-14所示,若要LED亮,则P2输出0;因此,刚开始时输出11111110,即可使最右边的LED亮,其余不亮。

2.若要从右边第一个LED亮,转成第二个LED亮,可用左移指令,即

3.在此要介绍8051的“计数循环”结构的格式,如下所示:

其中Rn为记录次数的寄存器,例如要重复执行循环体5次,则

4.每个LED亮的时间约0.1s,因此需要一个延迟子程序,在此将应用前述的计数循环,如下所示:

其中的“DJNZ R6, $”指令是对本身那一条指令执行R6次。对于12MHz时钟脉冲的8051系统而言,12个周期(1个机器周期)刚好是1s,整个子程序的延迟时间T为

R6=250,R7=200,则延迟时间T0.1s。

流程图与程序设计

       ORG  0    ;程序从0地址开始
START: MOV  A, #FEH   ;让ACC的内容为11111110
LOOP:  MOV  P2, A   ;从Port 2输出ACC的内容
      RL  A    ;将ACC的内容左移
      CALL  DELAY   ;调用延迟子程序
      JMP  LOOP    ;跳到LOOP处执行
;===================================================
DELAY:       ;延迟子程序(0.1s)
      MOV  R7, #200   ;R7寄存器加载次数200
D1:   MOV  R6, #250   ;R6寄存器加载次数250
      DJNZ  R6, $   ;本行执行R6次
      DJNZ  R7, D1   ;D1循环执行R7次
      RET      ;返回主程序
      END      ;结束程序

ch2-1.asm

软件仿真

经过汇编与连接后,即可以AVSIM51进行软件仿真,但要注意下列事项:

1.软件仿真并不能正确反应延迟子程序的延迟时间,若以R7=200、R6=250仿真,恐怕要等非常久;最好能改短一点,例如R7=20、R6=25即可。以本延迟子程序为例,通常R6的值尽量大一点,R7的值尽量小一点,时间误差比较小。

在线仿真

连接好图2-13所示的电路,再连接好在线仿真器,然后加载经过汇编与连接后的*.hex文件,以进行在线仿真。对于延迟子程序而言,在线仿真能真正反映延迟时间,因此要记得把R7与R6恢复正常。

举一反三

1.认识单灯左移的程序之后,修改该程序,让它变成单灯右移的功能。

2.试设计一个双灯左移的程序。

3.在本单元里采用一个0.1s的延迟子程序,若要得到0.01s的延迟,要如何修改?1s的延迟子程序又如何设计?

2-7-2 霹雳灯

“霹雳灯”是只有一个LED亮,由右边移至左边,再移回右边,如此不断地来回移动。在此将以图2-14所示的电路为例设计一个霹雳灯程序。

设计要点

1.一般地,霹雳灯程序可以看作是单灯左移与单灯右移的组合,即

2.若一开始是单灯左移,则其初始值为“11111110”,即最右边LED亮,其他不亮。

3.左移7次后,将变成最左边LED亮,其他不亮。紧接着是单灯右移,右移7次后,又恢复为最右边LED亮,其他不亮。如此周而复始,即为霹雳灯。

流程图与程序设计

       ORG  0   ;程序从0地址开始
;单灯左移==================================================
START: MOV  A, #FEH  ;让ACC的内容为11111110
LOOP:  MOV  R0, #7  ;以R0为左移的计次计数器
LOOPL: MOV  P2, A  ;从Port 2输出ACC的内容
       RL  A   ;将ACC的内容左移
       CALL  DELAY  ;调用延迟子程序
       DJNZ  R0, LOOPL ;LOOPL循环执行R0次
;单灯右移==================================================
       MOV  R0, #7  ;以R0为右移的计次计数器
LOOPR: MOV  P2, A  ;从Port 2输出ACC的内容
       RR  A   ;将ACC的内容右移
       CALL  DELAY  ;调用延迟子程序
       DJNZ R0, LOOPR  ;LOOPR循环执行R0次
       JMP  LOOP   ;重新开始
;延迟子程序==============================================
DELAY:      ;延迟子程序(0.1s)
       MOV  R7, #200  ;R7寄存器加载次数200
D1:    MOV  R6, #250  ;R6寄存器加载次数250
       DJNZ  R6, $  ;本行执行R6次
       DJNZ  R7, D1  ;D1循环执行R7次
       RET     ;返回主程序
       END     ;结束程序

ch2-2.asm

软件仿真

经过汇编与连接后,即可以AVSIM51进行软件仿真,注意事项与2-7-1节相同。

在线仿真

连接好图2-13所示的电路,再连接在线仿真器(ICE),即可下载经过汇编与连接后的*.hex文件,以进行在线仿真。

举一反三

认识单灯的霹雳灯程序之后,修改该程序,让它变成双灯的霹雳灯功能。

时间: 2024-10-23 01:46:56

《例说8051:单片机程序设计案例教程》——2-7 实例演练的相关文章

《例说8051:单片机程序设计案例教程》——2-1 认识MCS-51的存储器结构

2-1 认识MCS-51的存储器结构 例说8051:单片机程序设计案例教程除了无ROM型的8031及8032外,MCS-51的存储器包括程序存储器(ROM)与数据存储器(RAM)两部分,一般这两部分是独立的个体.标准的8x51系列具有4KB程序存储器.128B数据存储器,而标准的8x52系列具有8KB.256B数据存储器,刚好是8x51系列的两倍.不管是8x51.8031.8032还是8x52,其外部扩展的程序存储器或数据存储器最多为64KB,如表2-1所示. 近年来许多半导体厂商所推出的MCS

《例说8051:单片机程序设计案例教程》——2-6 数据传送指令

2-6 数据传送指令 例说8051:单片机程序设计案例教程数据转移指令的功能是将源操作数的数据复制到目的操作数里:或将指定的操作数内容交换.数据转移指令属于8051指令里的最大的一类,包括28条指令,在此将它们分为5大类来介绍. 圓 数据传送指令数据传送指令的功能是将源(source)操作数的数据复制到目的(destination)操作数,如下所示: 其中的源操作数可为存储器(RAM)地址direct的数据.寄存器Rn的内容.以间接寄存器Ri内容为地址(@Ri)的数据.立即数#data.ACC的

《例说8051:单片机程序设计案例教程》——第 1 章 轻松看8051

第 1 章 轻松看8051 例说8051:单片机程序设计案例教程本章内容丰富,主要包括3部分: anniu 8051部分 8051的基本认识,包括结构.引脚.封装.MCS-51系列,以及8051的基本电路等. anniu 开发工具部分 8051软硬件的开发流程,包括源程序的编写.汇编.连接,以及软硬件模拟等. anniu 程序与实作部分 闪烁灯的程序设计及其汇编.连接与软件仿真.

《例说8051:单片机程序设计案例教程》——2-8 实时练习

2-8 实时练习 例说8051:单片机程序设计案例教程在本章里,介绍了8051的存储器结构.输入/输出端口.输出电路的设计等硬件部分:在软件方面,则介绍了指令格式.寻址方式,以及数据转移指令,这些都是学习8051不可或缺的相关知识.在此试着回答下列问题,以验证学习成效. 1.8051内部的程序存储器与数据存储器容量各为多少?而外部扩展的程序存储器与数据存储器最多容量各为多少? 2.在8051电路里,若要使用外部程序存储器,应如何连接?而访问外部数据存储器必须使用哪个指令? 3.8051内部有多少

《例说8051:单片机程序设计案例教程》——2-4 指令格式

2-4 指令格式 例说8051:单片机程序设计案例教程8051源程序的指令格式包括四个字段,最左边字段为标号字段(label),第二个字段是指令操作码字段(mnemonic),第三个字段是操作数字段(operand),第四个字段是注释字段(comment),如下所示: 标号字段的功能是放置标号,作为子程序的起始标志或跳转指令的参考位置.若不放置标号,则标号字段必须为空.而第二个字段就是放置指令操作码,如MOV.ADDC等. 在第三个字段里放置操作数,随着指令的不同,就有不同个数的操作数,某些指令

《例说8051:单片机程序设计案例教程》——导读

前言 例说8051:单片机程序设计案例教程单片机,单片机,还是单片机 从8048开始,"单片机"即成为广受欢迎的代名词,8051更成为电机.电子类专业必修的课程.当然,应用单片机制作电子系统项目,既简单又经济实惠,早已成为学生的最爱.在电路设计方面,需求量较大.电路较复杂的系统可采用为客户专用而设计的IC(即ASIC),如芯片组.控制芯片等,虽然ASIC的单位成本不高,但总体成本很高.开发时间也比较长.需求量不是很大,而电路变化较多的系统则多采用可编程逻辑器件(如CPLD.FPGA).

《例说8051:单片机程序设计案例教程》——1-1 微型计算机与单片机

1-1 微型计算机与单片机 例说8051:单片机程序设计案例教程一般来说,微型计算机包括中央处理单元(CPU).存储器(Memory)及输入/输出单元(I/O)三大部分如图1-1所示.CPU就像是人的大脑一样,主宰整个系统的运行:Memory则是存放系统运行所需的程序及数据,包括只读存储器(Read Only Memory,ROM)及随机存取存储器(Randon Access Memory,RAM),通常ROM用来存储程序或永久性的数据,称为程序存储器,RAM则是用来存储程序执行时的临时数据,称

《例说8051:单片机程序设计案例教程》——1-2 8051基本知识

1-2 8051基本知识 "8051"源自Intel公司的MCS-51系列,而目前所使用的8051并不是都采用Intel公司所生产的芯片,而多采用其他厂商所推出的兼容芯片,如Atmel公司的89C51/89S51系列,其价格低廉,质量稳定,开发工具齐全,广为学校或培训机构所欢迎. 在此,先介绍8051的基本结构,包括基本结构.引脚.基本电路及51系列等,其中很多知识最好要"记"在脑中,本书也会提供很多快速记忆的技巧,让读者能在极短的时间里记住40个引脚.基本电路等.

《例说8051:单片机程序设计案例教程》——1-4 实例演练

1-4 实例演练 单片机系统的设计中,软件与硬件息息相关,采用不同的电路设计,程序可能就不太一样.因此,在编写程序之前,必须确定电路的连接状态,例如要利用8051的Port 2来控制8个LED,让这8个LED分成两组(高四位与低四位),交互闪烁,其设计步骤如下: 如图1-19所示的电路中,当Port 2的引脚输出低电平(0)时,其所连接的LED因正向导通而亮:若将引脚输出高电平(1)时,其所连接的LED因反向截止而不亮.因此,我们的程序设计就要让Port 2输出为"00001111",