单片机循环程序及子程序设计
- 格式:doc
- 大小:37.50 KB
- 文档页数:2
单片机指令的循环控制与跳转指令单片机指令的循环控制与跳转指令是在单片机程序设计中非常重要的一部分。
通过使用循环控制指令,可以实现程序的循环执行,从而提高程序的效率和灵活性。
而跳转指令则可以改变程序的执行顺序,实现条件判断和跳转至指定位置的功能。
本文将详细介绍单片机指令的循环控制与跳转指令的分类及使用方法。
一、循环控制指令循环控制指令主要通过设置计数器或判断条件是否满足来实现程序的循环执行。
常用的循环控制指令有:循环计数指令、循环条件判断指令和循环控制指令。
1. 循环计数指令循环计数指令是通过设置计数器来实现循环执行的,其中最常用的指令是“循环次数”指令。
这种指令会将一个寄存器初始化为一个初始值,并在每次循环执行时,自动将该寄存器的值减1,直到该寄存器的值为0时,跳出循环。
例如,在8051单片机中,循环计数指令可以使用“DJNZ”(Decrement and Jump if Not Zero)指令来实现。
具体语法为:DJNZ A, label其中,A为一个寄存器,初始值为循环次数。
label是跳转的目标地址,即循环体的开始地址。
每次循环执行时,A的值会自动减1,并判断是否为0,如果不为0,则跳转至label位置继续执行,否则跳出循环。
2. 循环条件判断指令循环条件判断指令是通过判断一个条件是否成立来控制循环执行的。
常见的循环条件判断指令有“JZ”(Jump if Zero)和“JNZ”(Jump if Not Zero)指令。
“JZ”指令用于判断一个寄存器或内存单元的值是否为0,如果为0,则跳转至指定地址继续执行;如果不为0,则程序继续顺序执行。
“JNZ”指令则与之相反,用于判断一个寄存器或内存单元的值是否不为0,如果不为0,则跳转至指定地址继续执行;如果为0,则程序继续顺序执行。
3. 循环控制指令除了通过计数和条件判断来控制循环执行外,还可以使用循环控制指令来实现循环执行的控制。
8051单片机中常用的循环控制指令有“CJNE”(Compare and Jump if Not Equal)指令和“JC”(Jump if Carry)指令。
实验一仿真软件的使用,简单程序设计一.实验目的:1.掌握单片机仿真软件的基本操作方法;2.熟悉汇编语言源程序的编辑、汇编、运行和检查运行结果的方法(能查看各存储空间中值的变化);3.掌握简单程序编写的基本方法和技巧;二.实验内容:1. 将内部RAM的30H—33H四个存储单元內分别存放01H、02H、03H、04H 四个数;然后送至工作寄存器R0—R3。
2.将内部RAM的30H—33H四个存储单元內的数分别传送至外部RAM的2030H--2033H存储单元中。
3. 将内部RAM的30—32H的连续3个字节中的无符号数相加,结果的低位送33H 单元,高位送34H单元实用文档三.实验步骤:1.实验内容1的步骤(1)新建文件,输入能实现实验内容1的源程序并以 .ASM为扩展名存盘;(2)编译并运行程序,检查运行结果:检查R0—R3的内容;(3)单步运行程序,并检查运行结果:检査R0—R3的内容;(4)查看程序的机器码。
2.实验内容2的步骤(1)新建文件,输入能实现实验内容2的源程序并以 .ASM为扩展名存盘(2)编译并运行程序,检查运行结果:检査外部RAM 2030H—2033H单元的內容(3)单步运行程序,并检查运行结果;(4)查看程序的机器码。
3.实验内容3的步骤(1)新建文件,输入能实现实验内容3的源程序并以 .ASM为扩展名存盘;(2)编译并运行程序,检查运行结果;实用文档(3)单步运行程序,并检查运行结果,检查33H、34H单元内容;(4)查看程序的机器码四.实验程序1.实验内容1的程序ORG 0000HMOV 30H,#00HMOV 31H,#01HMOV 32H,#02HMOV 33H,#03HMOV R0,30HMOV R1,31HMOV R2,32HMOV R3,33HEND实用文档2.实验內容2的程序ORG 0000HMOV 30H,#00HMOV 31H,#11HMOV 32H,#22HMOV 33H,#33HMOV DPTR,2030HMOV R0,#30HMOV R1,#04HLOOP:MOV A,·R0HMOVX ·DPTR,AINC R0INC DPTRDJNZ R1,LOOPSJMP $实用文档END3.实验内容3的程序ORG 0000HMOV 30H,#0F8HMOV 31H,#0C6HMOV 32H,#0D9HCLR CMOV A,30HADD A,31HJC NEXT1SJMP NEXT2NEXT1:INC R1NEXT2:ADD A,32HMOV 33H,AJC NEXT3实用文档SJMP NEXT4NEXT3:INC R1NEXT4:MOV 34H,R1SJMP $五.实验报告要求:1.对实验内容1和实验内容2的程序加注释。
单片机程序设计范文单片机程序设计是指利用单片机进行程序编程开发,实现各种功能或控制操作的过程。
单片机是一种微型计算机系统,它具有CPU、内存、输入输出接口等基本组成部分,并且集成在一个芯片上。
单片机程序设计是利用这种芯片进行软件开发,从而实现各种应用需求。
在进行单片机程序设计时,需要掌握一些基本的知识和技巧。
首先,需要了解硬件系统的基本结构和功能,包括CPU、存储器、输入输出接口等。
其次,需要熟悉单片机的指令集和编程语言,如汇编语言或C语言等。
此外,还需要了解各种外设的接口和控制方法,如LED灯、数码管、按键等。
单片机程序设计的流程主要包括以下几个步骤:分析需求、设计框架、编写代码、调试测试和优化改进。
首先,要对需求进行分析,明确所需实现的功能和控制要求。
然后,根据需求设计单片机系统的框架,包括硬件连接和软件模块划分。
接着,根据设计完成编程工作,编写相应的代码。
编写代码时,需要考虑到系统的实时性、稳定性和可扩展性等方面。
编写完成后,需要进行调试测试,确保系统正常运行和实现预期功能。
最后,还需要对系统进行优化改进,提高性能和稳定性。
在实际的单片机程序设计中,有很多经典的案例和实践经验可以借鉴。
例如,LED灯的闪烁控制、数码管的显示操作、按键的响应等。
通过学习这些案例,可以更好地理解和掌握单片机程序设计的基本思路和方法。
此外,还可以通过参加单片机比赛、实践项目等方式提升编程能力和设计水平。
单片机程序设计具有很广泛的应用领域。
例如,工业控制领域中,可以利用单片机实现各种自动化控制系统。
在家电领域中,可以运用单片机实现智能化、联网化的产品功能。
在通信领域中,可以使用单片机实现各种数据处理和通信控制功能。
此外,还可以利用单片机设计各种嵌入式系统、物联网设备等。
总之,单片机程序设计是一项重要的技术和领域,对于电子工程师和计算机科学家来说具有重要的意义和价值。
通过系统学习和实践,可以掌握单片机程序设计的基本理论和实践技巧,进而应用到实际项目中,为社会和经济发展做出贡献。
HT单片机延时子程序设计
(一)概述
延时指的是控制系统中,在触发开关发出开关信号之后,时间处于一定的状态之前,系统处于延时期,这段时间内不进行任何有效的操作。
延时编程是单片机应用程序的常用编程,它可以根据用户的需求在一定时间段内控制系统的动作。
AVR单片机定时器硬件的可编程功能可以满足用户的大多数延时要求,但是有时需要用户自己编写延时程序。
延时子程序的设计,结合ATmega 128单片机定时器的主要寄存器和定时/计数功能,以及定时/计数具体原理,提出了一种延时子程序设计的思路。
1、延时子程序的思路
延时子程序的思路是在确定定时/计数功能的基础上,利用单片机的定时器功能,通过计算预设时间内的CPU循环次数来实现延时操作。
具体步骤如下:
(1)定义延时时间t;
(2)使用定时/计数功能来实现定时/计数;
(3)计算CPU需要循环的次数;
(4)根据CPU循环的次数,写出延时子程序;
(5)通过程序运行来调试延时子程序,实现延时操作。
2、延时子程序的具体设计
延时子程序的设计基于ATmega 128单片机定时器0的特性,主要参考以下指标:
(1)主频:16MHz;。
四川工程职业技术学院单片机应用技术课程电子教案Copyright © 第讲8指令功能及汇编语言程序设计(二)本讲主要内容:8-1. 设计范例——数码管循环显示。
8-2. 控制转移类指令(1)的特点及使用。
8-3. 熟练掌握延时程序的设计和延时时间的计算方法。
8-4. 子程序的设计方法。
8-5. 循环程序设计的基本方法。
要求在最右侧的数码管上循环显示数字1~5。
P0口P3.2P3.3P3.4P3.5 P1.3P1.2P1.1P1.0范例分析:✧硬件分析设计中要求选中最右侧的数码管,根据电路结构,应通过P3.2选中该位数码管。
✧软件设计设计中要求循环显示1~5,很显然应采用循环的方法来实现,最简单的方法是将1~5的段码依次由P0口送出。
准备程序:ORG 0000HMAIN:CLR P3.2MOV P0,#0F9HMOV P0,#0A4HMOV P0,#0B0HMOV P0,#99HMOV P0,#92H SJMP MAIN延时一段时间相邻数字之间需要间隔一段时间吗?如果不间隔时间,在数码管上会看到什么现象?相邻数字之间需要间隔一段时间吗?如果不间隔时间,在数码管上会看到什么现象?长转移指令LJMP 目标语句说明:目标语句可以是程序存储器64KB空间的任何地方。
绝对转移指令AJMP 目标语句例:4002H AJMP MM……4600H MM:MOV A,#00H注意:目标语句必须和当前语句同页。
在51单片机中,64KB程序存储器分成32页,每页2KB(7FFH)。
短跳转指令SJMP 目标语句(rel)例:4060H SJMP LOOP……4090H LOOP:MOV A,#0FFH……注意:短跳转的目标语句地址必须在当前语句向前127(7FH)字节,向后128(80H)字节,否则在进行程序编译时会出错。
变址寻址转移指令JMP @A+DPTR该指令主要用于多分支的跳转程序设计。
跳转的目标地址是累加器A 和数据指针DPTR之和,它可以是64KB存储空间的任何地方。
循环程序及子程序设计
1、软件延时
【实验原理】
延时程序的延时时间主要与两个因素有关,一是所用晶振,二是延时程序的循环次数,一旦晶振确定以后,则主要是如何设计与计算需给定的延时循环次数。
汇编语言常用延时程序所用到的指令
指令占用机器周期数
MOV Rn,#Data 1
DJNZ Rn,rel 2
RET 2
NOP 1
【实验程序】
编写15us、5ms、1s延时程序
(1)15us延时程序
MOV R0,#6
D1: DJNZ R0,D1
RET
(2)5ms延时程序
MOV R1,#10
D1: MOV R0,#248
D2: DJNZ R0,D2
DJNZ R1,D1
RET
(3)1s延时程序
MOV R2,#8
D1: MOV R1,#249
D2: MOV R0,#250
D3: DJNZ R0,D3
DJNZ R1,D2
DJNZ R2,D1
RET
【实验要求】
(1)能根据延时要求设计与计算需给定的延时循环次数。
(2)运行源程序检查结果。
2、拉幕灯:使8个发光二极管顺序点亮并保持,然后按相反顺序变化,形如
拉幕效果。
【实验程序】
ORG 0000H
START: MOV R2,#08H ;设置循环次数
MOV A,#01H ;送显示模式字
NEXT: MOV P0,A ;点亮连接P0.0的发光二极管
ACALL DELAY ;调用延时子程序
SETB C ;Cy置1
RLC A ;左移一位,改变显示模式字
DJNZ R2,NEXT ;循环次数减1,不为零,继续点亮下面一个二极管
MOV R2,#08H ;设置循环次数
MOV A,#7FH ;送显示模式字
NEXT1: MOV P0,A ;灭掉连接P0.0的发光二极管
ACALL DELAY ;调用延时子程序
CLR C ;Cy清零
RRC A ;右移一位,改变显示模式字
DJNZ R2,NEXT1 ;循环次数减1,不为零,继续灭掉下面一个二极管
ACALL DELAY ;调用延时子程序
SJMP START ;无限循环
DELAY: MOV R3,#080H ;延时子程序开始
DEL2: MOV R4,#000H
DEL1: NOP
【实验要求】
(1)可修改延时子程序中的R3和R4中从而改变灯亮或暗的时间,并注意观察;(2)运行源程序检查结果;
(3)将程序烧录到芯片上,在开发板上观察实际拉幕灯的效果,并可进一步改变程序来观察实验的结果。