单片机循环程序及子程序设计
MCS-51单片机程序设计
+1
,当X>0
Y= 0
,当X=0
开始
-1
,当X<0
X=0
N
程序流程框图如图4.1所示。 Y
Y←0
X>0 Y
Y←1
N Y←-1
结束
程序如下: ORG
MOV CJNE MOV AJMP MP1: JB MOV LJMP MP2: MOV HERE: SJMP
1000H A,R0 A,#00H,MP1 R1,#00H HERE ACC.7 MP2 R1,#01H HERE R1,#0FFH HERE
1000H DPTR,#2000H DPL DPH DPTR,#3000H R2,DPL R3,DPH
;源数据区首地址 ;源首址暂存堆栈
;目的数据区首地址 ;目的首址暂存寄存器
LOOP:
POP POP MOVX INC PUSH PUSH MOV MOV MOVX MOV MOV DJNZ SJMP
;源数据区首地址 ;目的数据区首地址 ;循环次数 ;取数据 ;数据传送 ;源地址加1 ;目的地址加1 ;循环控制 ;结束
例4.8 外部RAM之间的数据传送程序。
把外部RAM 2000H开始单元中的数据传送到外部RAM 3000H开始的单 元中,数据个数在内部RAM的35H单元中。
START:
ORG MOV PUSH PUSH MOV MOV MOV
K=?
K=0
K=1
转向 0 分支 转向 1 分支
K= n-1
K=n
转向 n-1 分支 转向 n 分支
例4.5 设内部RAM的30H单元有一个数,根据该数值的不同 转移到不同的程序段进行处理,设数值的范围为0~10的 无符号数。
单片机课件 汇编语言程序设计PPT
4.1 概述
---- 程序头( 即定义变量和等值符号)---SCL BIT P1.2 ;定义SCL位变量 SDA BIT P1.3 ;定义SDA位变量 ByteCon DATA 30H ;定义字节变量
ByteCon ……
ORG nnnn ;CPU复位后,第一指令机器码存 放单元地址,具体值由CPU类型决定。
用到的有关寄存器,如 Acc、PSW等,即保护现场 …… ;中断服务程序实体,具体指令由程序功能决
定 POP Acc POP PSW ;恢复现场
4.1 概述
CLR TI ;清除中断标志(在51系列中,对于电平触 发的外中断INT0和 INT1、串行接收及发送中断 RI、TI 等,不自动清除,需要在中断服务结束前,通过CLR指 令清除。
例4.9 在51系列中,外部中断0的入口地址为 0003H,显然只有0000H、0001H和0002H三个单 元,刚好可以存放一条长跳转指令的机器码。
4.1 概述
----- 主程序 ----ORG yyyy ;其中yyyy就是主程序代码存放区 的首地址,如0100H Main: MOV SP,#5FH ;初始化有关寄存器,如 设置SP、选择工作寄存器组。
际问题处理程序编写能力。
4.1 概述
4.1 概述 程序设计:为了解决某一个问题,将所设计应用
系统(单片机类型)的指令按一定顺序组合在一起。即用 计算机所能接受的语言把解决问题的步骤描述出来。
单片机汇编源程序结构与通用微机汇编源程序结构 略有不同,原因是:
1、一般没有可以直接利用的监控程序,所有程 序均要自己编写。
转移。(程序走向只有一条路径。)
例4.11 将两个半字节数组合成一个字节数。 设内部RAM中40H、41H单元分别存放着8位二进制
单片机程序设计ppt课件
;为正数,求X+2
AJMP SAVE
;转到SAVE,保存数据
ZER0:MOV A,# 64H ;数据为零,Y=100
AJMP SAVE
;转到SAVE,保存数据
NEG:DEC A
CPL A
;求∣X∣
SAVE: MOV 31H,A
;保存数据
SJMP $ ;暂停
精选ppt课件
13
2.多分支选择结构 当程序的判别输出有两个以上的出口流向时,称为多分支选 择结构。8051的多分支结构程序还允许嵌套,即分支程序中 又有另一个分支程序。汇编语言本身并不限制这种嵌套的层 次数,但过多的嵌套层次将使程序的结构变得十分复杂和臃 肿,以致造成逻辑上的混乱。多分支选择结构通常有两种形 式,如图4-4所示。
LJMP END1
MEMSP2:MOV A,R0
;乘法分支
MOV B,R1
CLR C
MUL AB
MOV RESULT,A
MOV RESULT+1,B
LJMP END1
精选ppt课件
18
MEMSP3:MOV A,R0 MOV B,R1
CLR C DIV AB MOV RESULT,A MOV RESULT+1,B
精选ppt课件
24
【例】50 ms软件延时程序。
软件延时程序一般都是由DJNZ Rn,rel指令构成。执行一条 DJNZ指令需要两个机器周期。软件延时程序的延时时间主要与机 器周期和延时程序中的循环次数有关,在使用12 MHz晶振时,一 个机器周期为1μs,执行一条DJNZ指令需要两个机器周期,即 2μs。适当设置循环次数,即可实现延时功能。
精选ppt课件
9
【例】设a存放在累加器A中,b存放在寄存器B中,若a≥0,
循环结构程序
DJNZ
RET
R5,DELAY0
(2)循环体。重复执行的程序段。
(3)循环修改。在单片机中,一般用一个工作寄存器Rn作 为计数器,并给这个计数器赋初值作为循环的次数,运行程序 时,每循环一次,则对该计数器进行修改。 (4)循环控制。判断循环控制变量(保存循环次数的变量
)是否满足终止值的条件,如果满足则结束循环,顺序执行循
环短一些的程序;如果不满足,则继续重复执行循环的工作部 分,直到达到循环结束条件(死循环除外)。
【例4.4】延时10ms子程序(设晶振的频率为6MHz)。 在知道系统的晶振频率之后,延时时间主要与两个因素有关 :一是内循环中指令的执行时间;二是外循环时间常数(内循 环的循环次数)的设置。在本例中,已知晶振频率为6MHz,
则可得一个机器周期为0.5μs,执行一条 DJNZ Rn,rel的指令
的时间为两个机器周期即1μs,10ms的延时子程序设计如下: DELAY: DELAY0: DELAY1: MOV R5,#100 MOV DJNZ R4,#100 R4,DELAY1
循环结构程序
在程序设计过程中,常常遇到反复执行某一段程 序的情况,这种情况下采用循环程序结构,构,可以 缩短程序代码的长度,提高程序的质量和运行效率。 循环的这四个部分有两种情况,如图4- 3所示。
图4- 3 循环结构程序流程图
循环结构程序一般包括以下几个部分: (1)置初值。置初值是设置用于循环过程工作单元的初始 值,例如设置循环次数计数器、地址指针初值、存放变量的单 元的初值。
程序清单如下: ORG 0100H MOV R5,23H CLR A MOV R6,#00H MOV R4,#01H LOOP:ADD A,@R4 JNC NEXT INC R6 NEXT:INC R4 DJNZ R5,LOOP MOV 23H,R6 MOV 24H,A END
第3章指令系统
单片机原理 及接口技术
第3 章
89C51单片机指 89C51单片机指 令系统
LOGO
LOGO
程序设计举例
一 二 三 四 五 六
简单程序设计举例 分支程序 循环程序 子程序设计举例 代码转换程序设计举例 运算类程序设计举例
BACK
LOGO
一、 简单程序设计举例
例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段 拆字。将片内RAM 20H单元的内容拆成两段 单元的内容拆成两段, 四位。并将它们分别存入21H 22H单元中 程序如下: 21H与 单元中。 四位。并将它们分别存入21H与22H单元中。程序如下:
练习: 练习: 1.将片外RAM 2000H单元开 始的20个字节,传送到片 内RAM 30H单元开始的单元 中去。 2.将片内RAM 20H单元开始 的10个字节,传送到片内 RAM 30H单元开始的单元中 去。 3.将片内RAM BK1单元开始 的COUNT个字节,传送到片 外RAM BK2单元开始的单元 中去。
Back
LOGO
3.4
思考题与习题
1. 简述下列基本概念: 指令、指令系统、机器语言、汇编语言、高级 语言。 2. 什么是计算机的指令和指令系统? 3. 简述89C51汇编指令格式。 4. 简述89C51的寻址方式和所能涉及的寻址空间。 5. 要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
单片机——程序的基本结构
♨
✎
ORG 0000H LJMP STRAT ORG 0100H STRAT:MOV R1,#0 ; R1用于计数,R1清零 MOV DPTR,#TAB ; 设置表地址指针 GO:MOV A, R1 LOOP: MOVC A,@A+DPTR ;查表取显示码 CJNE A,#0FFH,OK ;不是结束码显示码送P0口 SJMP STRAT ;是结束码,重新开始 OK:MOV P0,A LCALL DEL ;延时1s INC R1 ;循环左移一次 SJMP GO (此处略延时程序DEL) TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH DB 0DFH,0BFH,7FH,0FFH ;LED点亮码,0FFH为结束码 .......... END
♨
✎
子程序
可以被调用的程序段称为子程序。在实际问题中,常常 会遇到在一个程序中有许多相同的运算或操作,例如多字节 的加、减、字符处理等。如果每遇到这些运算和操作,都从 头做起,则使程序非常繁琐且浪费内存。因此在实际应用中 ,通常把这些多次使用的程序段,按一定结构编好,存放在 内存中,当需要时,程序可以去调用这些独立的程序段。因
; IN为主程序或调用程序标号
┇
┇ SUB: PUSH PSW ;现场保护
PUSH ACC
子程序处理程序段 POP POP RET ACC PSW ;最后一条指令必须为RET ;现场恢复
♨
✎
【例4】编写一个通用子程序,实现N个单字节无符号数
之和(N < 100H)。调用该子程序完成将片内部30H~5FH 中存放的单字节无符号数求和,结果存入60H、61H单元 中(高位在前)。
addr11
addr16
♨
✎
第4章 单片机汇编语言程序设计
RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
单片机第4章汇编语言程序设计
4.2 伪指令
伪指令是在机器汇编中告诉汇编程序 如何汇编、对汇编过程进行控制的命令。 伪指令与汇编语言指令不同,只在源程序 中出现,不产生任何机器代码,在程序的 运行过程中不起作用,故称为“伪指令”。
处理 判断 连接
2.绘制程序流程图 简单的问题可由文字说明, 当问题复杂时,将文字说明的步骤以图形符号表示, 称流程图。
3.编写源程序 用汇编语言把流程图所表明的 步骤描述出来,实现流程图中每一框内的要求,从 而编制出一个有序的指令流,即汇编语言源程序。
4.汇编、调试 汇编语言是用指令助记符代替机 器码的编程语言,所编写的程序是不能在计算机上 直接执行的,因此利用它所编写的汇编语言程序必 须转换为单片机能执行的机器码形式的目标程序才 能运行,我们把这一过程称为汇编,进行汇编的程 序称为汇编程序。
4. 定义字伪指令DW
[标号:] DW 16位字数据表
该指令的功能与DB相似, 区别仅在于从指定地
址开始存放的是指令中的16位数据, 而不是字节串。
每个16位数据要占两个存储单元, 高8 位先存(低位
地址), 低 8 位后存(高位地址)。
1403H 3CH
ORG 1400H DATA1:DW 324AH,3CH
散转程序是分支程序的一种, 它可根据运算结果或输入数 据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指 令JMP@A+DPTR,用它可以很容易地实现散转功能。该指令 把累加器的8位无符号数与16位数据指针的内容相加, 并把相加 的结果装入程序计数器PC,控制程序转向目标地址去执行。
第4章 MCS-51单片机汇编语言程序设计
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
单片机指令的循环控制与跳转指令
单片机指令的循环控制与跳转指令单片机指令的循环控制与跳转指令是在单片机程序设计中非常重要的一部分。
通过使用循环控制指令,可以实现程序的循环执行,从而提高程序的效率和灵活性。
而跳转指令则可以改变程序的执行顺序,实现条件判断和跳转至指定位置的功能。
本文将详细介绍单片机指令的循环控制与跳转指令的分类及使用方法。
一、循环控制指令循环控制指令主要通过设置计数器或判断条件是否满足来实现程序的循环执行。
常用的循环控制指令有:循环计数指令、循环条件判断指令和循环控制指令。
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灯的闪烁控制、数码管的显示操作、按键的响应等。
通过学习这些案例,可以更好地理解和掌握单片机程序设计的基本思路和方法。
此外,还可以通过参加单片机比赛、实践项目等方式提升编程能力和设计水平。
单片机程序设计具有很广泛的应用领域。
例如,工业控制领域中,可以利用单片机实现各种自动化控制系统。
在家电领域中,可以运用单片机实现智能化、联网化的产品功能。
在通信领域中,可以使用单片机实现各种数据处理和通信控制功能。
此外,还可以利用单片机设计各种嵌入式系统、物联网设备等。
总之,单片机程序设计是一项重要的技术和领域,对于电子工程师和计算机科学家来说具有重要的意义和价值。
通过系统学习和实践,可以掌握单片机程序设计的基本理论和实践技巧,进而应用到实际项目中,为社会和经济发展做出贡献。
单片机汇编语言程序设计
6.定义空间指令DS
指令格式:
地址
ROM
[标号:]DS <表达式>
2000H
说明:DS伪指令是定义存储区,即从标
2001H 号指定的单元开始保留表达式所代表的
存储单元数。
2002H
【例】
2003H
ORG 2000H
单片机汇编语言程序设计
单片机汇编语言程序设计
1.1 源程序的编辑与汇编
1.源程序的编辑 源程序的编写要依据80C51汇编语言的基本规则,特别要用好常用
的汇编命令(即伪指令),例如: ORG 0040H MOV A,#7FH MOV R1,#44H END
这里的ORG和END是两条伪指令,其作用是告诉汇编程序此汇编源程 序的起止位置。编辑好的源程序应以.ASM扩展名存盘,以备汇编程序调 用。
这里使用的“字符名称”不是标号,不能用“:”来隔分隔符;其 中的“项”可以是一个数值,也可以是一个已经有定义的名字或可以求 值的表达式。该指令的功能是将一个数或特定的汇编符号赋予规定的字 符名称。用EQU指令赋值的字符名称可以用做数据地址、代码地址、位 地址或直接当做一个立即数使用。因此,给字符名称所赋的值可以是8 位二进制数,也可以是16位二进制数。
置循环初值
置循环初值
循环体
N 循环条件? Y
循环条件? Y
N 循环体
(a)先处理后判断方式
(b)先判断后处理方式
4.子程序结构 在汇编语言程序设计时,通过循环程序可以解决连续重复执行同
一程序段的问题,而对于不连续重复执行同一程序段的问题,为避免 重复编制程序,节省程序代码所占的存储空间,可将其编制成独立的 程序即子程序,在需要的位置采用特定的指令调用该子程序,执行后 再返回到调用位置继续执行后序程序指令。子程序调用是实现I/O操 作的重要方法。
单片机汇编语言程序设计
4.1.2 汇编语言源程序的设计步骤 汇编语言源程序的设计过程的一般步 骤是: 分析任务 当我们要编写某个功能的应用程序时, 首先应该详细分析给定的任务。明确 哪些是任务所提供的基本条件,哪些 是任务要解决的具体问题,哪些是任 务所期望的最终目标。
4.1.2 汇编语言源程序的设计步骤
确定算法 任务明确之后,下一步就是确定解决问题的 方法。将给定的任务转换成计算机处理模式, 即通常所说的算法。对于较复杂的任务,需 要先用数学方法把问题抽象出来。往往同一 个数学表达式可以用多种算法实现,我们应 综合考虑寻找出其中的最佳方案,使程序所 占内存小,运行时间短。 画程序流程图 画流程图是把所采用的算法转换为汇编语言 语言程序的准备阶段,选择合适的程序结构, 把整个任务细化成若干个小的功能,使每个 小功能只对应几条语句。
4.3.1 顺序程序设计 【例4-6】
程序清单之二(采用DPTR当基址寄存器):
【例4-5】将片内RAM 30H的中间4位,31H的 低2位,32H的高2位按序拼成一个新字节,存 入33H单元。 分析:需要灵活掌握逻辑操作指令,对存储单 元的所需位进行保留,并移到字节中正确位置, 最后将相应位合并在一个字节。 ORG 0000H LJMP START ORG 0100H START: MOV A,30H ANL A,#3CH ;保留30H的中间4位原值,
4.2 汇编语言伪指令
8、BIT 位地址符号伪指令 格式:字符名称 BIT 位地址 功能:用规定的字符名称表示位地址。 例如: X0 BIT P1.0 X1 BIT 30H 经汇编后,P1口的第0位地址赋给X0, 位地址30H赋给X1。在程序中可以分别 用X0、X1代替P1.0和位地址30H。
4.3 简单程序设计
HT单片机延时子程序设计
HT单片机延时子程序设计
(一)概述
延时指的是控制系统中,在触发开关发出开关信号之后,时间处于一定的状态之前,系统处于延时期,这段时间内不进行任何有效的操作。
延时编程是单片机应用程序的常用编程,它可以根据用户的需求在一定时间段内控制系统的动作。
AVR单片机定时器硬件的可编程功能可以满足用户的大多数延时要求,但是有时需要用户自己编写延时程序。
延时子程序的设计,结合ATmega 128单片机定时器的主要寄存器和定时/计数功能,以及定时/计数具体原理,提出了一种延时子程序设计的思路。
1、延时子程序的思路
延时子程序的思路是在确定定时/计数功能的基础上,利用单片机的定时器功能,通过计算预设时间内的CPU循环次数来实现延时操作。
具体步骤如下:
(1)定义延时时间t;
(2)使用定时/计数功能来实现定时/计数;
(3)计算CPU需要循环的次数;
(4)根据CPU循环的次数,写出延时子程序;
(5)通过程序运行来调试延时子程序,实现延时操作。
2、延时子程序的具体设计
延时子程序的设计基于ATmega 128单片机定时器0的特性,主要参考以下指标:
(1)主频:16MHz;。
den-8
四川工程职业技术学院单片机应用技术课程电子教案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存储空间的任何地方。
《单片机程序设计》课件
目录
• 单片机概述 • 单片机程序设计基础 • 单片机开发环境与工具 • 单片机程序设计的实践案例 • 单片机程序设计的常见问题与解决方案 • 单片机程序设计的未来发展与展望
01
单片机概述
单片机的定义与特点
总结词
功能强大、集成度高、体积小、可靠性高
详细描述
单片机是一种集成电路芯片,集成了CPU、存储器、定时器/计数器、输入/输 出接口等功能,具有功能强大、集成度高、体积小、可靠性高等特点,广泛应 用于智能仪表、工业控制、智能家居等领域。
03
单片机开发环境与工具
单片机开发环境的组成
硬件开发工具
用于单片机硬件设计的工具,如原理图编辑器、电路仿真器等。
软件开发工具
用于单片机软件开发的工具,如集成开发环境(IDE)、编译器、 调试器等。
辅助工具
用于单片机开发过程中的辅助工具,如烧写器、仿真器、逻辑分析 仪等。
单片机开发工具的种类与选择
详细描述
温度传感器程序设计是单片机应用中较为复 杂的案例,通过编写程序读取温度传感器数 据,实现温度的测量和控制。这个案例可以 帮助初学者了解单片机的A/D转换、传感器 接口应用等知识,提高程序设计的综合应用 能力。
液晶显示程序设计
要点一
总结词
通过液晶显示程序设计,掌握单片机的显示接口应用。
要点二
01
通用型工具
适用于多种单片机的开发工具, 如Keil、IAR等。
02
03
专用型工具
选择依据
针对特定单片机的开发工具,如 针对ARM Cortex-M核的 STM32CubeIDE等。
根据项目需求、开发人员习惯、 工具性能和价格等因素进行选择 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环程序及子程序设计
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)将程序烧录到芯片上,在开发板上观察实际拉幕灯的效果,并可进一步改变程序来观察实验的结果。