单片机汇编语言的循环程序设计
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的 无符号数。
单片机学习第四章汇编语言程序设计
ORG START:CLR
MOV SUBB JC MOV XCH MOV NEXT: NOP SJMP END
1000H C A,60H A,61H NEXT A,60H A, 61H 60H,A
$
;0→CY
;做减法比较两数 ;若(60H)小,则转移
;交换两数
整理课件
【例4.6】将R2中的一位十六进制数转换为 ASCII码,结果仍存放于R2中。
MOV R0, #0 SJMP NEXT4 NEXT2:MOV R0,A DEC R0 NEXT4:MOV 31H,R0 SJMP $ END
;取X ;与5比较
;X<5,则转NEXT2 ; ;设10<X,Y=X十1
;与1l比较 ;x>10,则转NEXT4
;5≤X≤10,Y=0
;X<5,Y=X-1 ;存结果
MOV
@R0,A
;保存结果
SJMP $
;原地踏步
END
整理课件
【例4.2】假设两个双字节无符号数,分别存 放在R1R0和R3R2中,高字节在前,低字 节在后。编程使两数相加,用R2R1R0存放 和。 对多字节的加法,存在最高位的进位问题。 如果最高位有进位,则和的字节数要比加 数或被加数的字节数多一个。
经常用于定义一个地址表。Yi为双字节数据, 它可以为十进制或十六进制的数,也可以 为一个表达式。高位数在前,低位数在后。
整理课件
• 例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从1000H单元开始的6个单元 赋值,赋值情况如何呢? (1000H)=32H,(1001H)=41H, (1002H)=12H,(1003H)=34H, (1004H)=00H,(1005H)=78H。
单片机课件 汇编语言程序设计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位二进制
单片机汇编语言程序设计实验报告
单片机实验1 汇编语言程序设计实验---- 存储器块赋值一.实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。
例如将4000H 开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。
)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPU Lab8000/Lab6000通用微控制器 MCS51实验 8051前3个软件实验勾选√使用伟福软件模拟器四实验步骤注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
编译器默认设置:程序框图参考例程序:Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #10 ; 清10个字节mov a, #33h ; 将33H赋值给aLoop:movx @dptr, a 将a写入外部RAMinc dptr ; 指向下一个地址djnz r0, Loop ; 记数减一ljmp $ ; $当前程序指针相当于一直执行自己;ljmp $ end说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp $,程序死循环要求赋值数据为10,9,8,7,6,5,4,3,2,1则以上程序该如何改动? 自己修改程序实现。
汇编语言程序设计
…… 跳转到出口处end
……
casen:
跳转到出口处end ……
(执行条件n成立的语句)
end 分支结束出口
图9.13 汇编语言多重分支方第式14页
2021/12/8
下面我们用相应的例子来详细的说明这两种分支结构。
例 阶跃函数
说明:这是一个典型的双分支结构,输入值大于等于0时则返回1,输入值小于0时返 回0。r1>=0?r1=0r1=1退出图9.14 阶跃函数流程图NY
//与0比较 //大于等于0则跳转到非负数处理 //小于0则返回0 //跳转到程序结束处
//大于0,则返回1
第16页
2021/12/8
3、循环程序设计
(1) 循环程序的结构形式
循环程序可以有两种结构形式,一种是WHILE_DO结构 形式;另一种是DO_UNTIL结构形式。如图9.16所示.
初始化
初始化
入口参数:R1;(有符号数) 出口参数:R1
流程图如图9.14所示。
N
Y
R1>=0 ?
r1=0
r1=1
退出
图9.14 阶跃函数流程图
第15页
2021/12/8
程序的代码如下: .PUBLIC F_Step; .CODE F_Step: .proc CMP R1,0; JGE ?negtive; R1 = 0; JMP ?Step_end; ?negtive: R1 = 1; ?Step_end: RETF; .ENDP
1.4 嵌套与递归
1、 子程序的嵌套
子程序嵌套就是指子程序调用子程序。其中嵌套的层数称为嵌套深度。图9.27表
示了三重嵌套的过程。
SUB1
主 程 序
第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
第3章_MCS-51单片机指令系统及汇编语言程序设计2
3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
第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
第4章 MCS-51单片机的汇编语言程序设计
下面介绍一些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起 始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址 8000H 单元开 始存放,即标号START的值为8000H。
【例4.5】多分支程序。根据R7的内容分别转向相应的处理程序。 设R7的内容为处理程序的序号0~N,对应的处理程序的入口地 址分别为A0~AN。 程序如下: START:MOV DPTR,#TAB ;设置数据指针 MOV A,R7 ;处理程序的序号送A ADD A,R7 ;序号加倍后作为偏移量 MOV R3,A ;偏移量暂存于R3 MOVC A,@A+DPTR ;取处理程序入口地址高8位 XCH A,R3;偏移量交换于A中,入口地址高8位交换于R3中 INC A ;偏移量加1 MOVC A,@A+DPTR ;取处理程序入口地址低8位 MOV DPL,A ;低8位地址送DPL MOV DPH,R3 ;高8位地址送DPH CLR A ;A 清0 JMP @A+DPTR ;转向相应的处理程序 TAB: DW A0,A1,A2, A,41H
MOV R1,A CLR A ADDC A,#00H MOV R0,A MOV A,42H ADD A,R1 MOV R1,A CLR A ADDC A,RO MOV R0,A
;取40H单元值 ;40H单元值+41H单元值,结果存 ;于A中,并影响标志位CY ;结果暂存于R1 ;A清0 ;进位标志CY送A ;CY送高位 ; 取42H单元值 ;前两单元和的低位与42H单元内容相加, ;并影响标志位CY ;和的低位存于R1 ; ;两次高位相加 ;高位和存于R0
单片机汇编语言程序设计
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 简单程序设计
单片机 第四章 80C51单片机汇编语言程序设计
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境
经典:80C51单片机汇编语言程序设计
上例中,如果采用CJNE指令,应如何修改程序? 18
XAD EQU
1000H;
BUF EQU
2000H;
ORG 1000H
START:MOV DPTR, #XAD ;数据X的地址送数据指针DPTR
MOVX A,
@DPTR; A←取数据X
CJNE A, #0, ANZ ; X≠0转ANZ
SJMP SAV;
难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。
2
4.1.2 单片机使用的高级语言
对于8051单片机,现有4种语言支持,即汇编、 PL/M、C和BASIC。
C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移 植性好。 高级语言的不足:生成的目标代码较长,导致应用程 序运行速度较慢。
分支程序
BR1: …
BRn: …
21
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP @A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
顺序结构程序是最简单的程序结构。程序既无分支、 循环,也不调用子程序,程序执行时一条接一条地 按顺序执行指令。
6
2、程序设计的一般步骤
(1)分析任务 (2)确定算法 (3)画流程图 (4)编写程序 (5)上机调试
查错、改错, 用指令的形式
对程序进行 将程序流程图
优化。
实现出来。
当接到程序设计的任务后, 首先对任务进行详尽的分析, 搞清楚已知的数据和想要得 到的结果,程序应该完成何 种的功能。明确在程序设计 时应该 “做什么” 。
单片机汇编语言程序设计
汽车电子系统的复杂度不断提高,单片机在发动机控制、车身控 制等方面的应用越来越广泛,汇编语言在实时性和可靠性方面有
优势。
智能家居领域
智能家居市场快速发展,单片机在家用电器控制、安防系统等方 面的应用逐渐增多,汇编语言在资源受限的环境中有一定优势。
未来展望
绿色环保设计
未来单片机设计将更加注重绿色环保,汇编语言程序设计将更加注 重低功耗、节能减排等方面的优化。
软件工具支持丰富
随着单片机技术的发展,支持汇编语言编程的软件工具也 日益丰富,包括编译器、调试器、仿真器等,提高了编程 效率和可维护性。
网络化与智能化
单片机正朝着网络化、智能化的方向发展,这要求汇编语 言程序设计在实时性、可靠性、安全性等方面有更大的突 破。
应用领域拓展
物联网领域
随着物联网技术的普及,单片机在传感器节点、网关设备等应用 中发挥重要作用,汇编语言在低功耗、低成本设计中具有优势。
单片机汇编语言可以用于实现工业自动化控制系统的底层驱动程序,如电机控制、传感器数据采集等。此外,单片机汇编语 言还可以用于实现生产过程的监控和管理,提高生产效率和产品质量。
05
单片机汇编语言的发展趋势与展 望
技术发展趋势
硬件集成度提高
随着半导体工艺的进步,单片机的集成度越来越高,功能 越来越强大,为汇编语言程序设计提供了更广阔的空间。
算法设计
根据需求设计合适的算法,确保 程序逻辑正确。
流程图绘制
使用流程图表示程序执行过程, 便于理解和优化。
优化与改进
根据测试结果,优化程序性能和 代码质量。
调试与测试
在单片机上运行程序,检查功能 是否正常。
编写代码
根据流程图,使用汇编语言编写 程序。
第4章 单片机汇编语言程序设计
功能:从标号指定的地址单元开始,将8位二进制 数据按顺序依次存入形成数据表。数据表可以是 一个或多个字节数据、字符串或表达式,各项数 据用“,”分隔,一个数据项占一个字节单元。
ORG 1000H
TAB:DB -2,-4,100,30H,‘A’, ‘C’
用单引号括起来的字符存其ASCII码,负数存其 补码。
第4章 单片机汇编语言程序设计
4.1.2 伪指令
1.设置起始地址伪指令 ORG 格式: [标号:] ORG nn 该指令总是出现在每段源程序或数据块的开始。
汇编时,nn确定了后面第一条指令或数据的地 址,此后的源程序或数据块就依次连续存放在 以后的地址内,直到遇到另一个ORG指令为止。 如:
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识 4.2 汇编程序设计方法 4.3 综合编程举例
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识
4.1.1 汇编语言的语句格式
MCS-51单片机汇编语言的语句格式表示如下: [标号:] <操作码> [操作数] [;注释]
MOV A, R4 MOV R0, A M1: RET
第4章 单片机汇编语言程序设计
多分支程序,还可根据运算结果或输入数据将程 序转入不同的分支。
在多分支程序中,因为可能的分支会有 N个,若 采用多条 CJNE 指令逐次比较,程序的执行效率 会降低很多,特别是分支较多时更加明显。
一般采用跳转表的方法,通过两次转移来实现多 分支结构。
第4章 单片机汇编语言程序设计
ORG 2500H BR2: MOV R0, #00H MOV A, R1 ACALL COMP ;R0 清零 ;第一个数(R1)送A ; 比较(R1)与(R0)大小
第3章-51系列单片机的汇编语言设计
6
1分析任务:确定算法或解题思路。 2按功能划分模块:确定模块间的关系。 3用流程图表示程序结构和功能 4编写源程序:进行必要的注释,方便 阅读、调试和修改。 5将源程序汇编、连接,生成可执行的 目标代码(.bin或.hex)。 6仿真调试:修改,直至满足任务要求。 7烧写:将调试好的目标文件烧录到单 片机内,运行。
例: GH :DW 1234H,5678H,8
GH
12 34
GH+2
56 78
GH+4
00
08
11
4.保留字节 标号:DS (数值表达式) 功能: 指示在程序存储器中保留以标号为起始地址的若干 字节单元,其单元个数由数值表达式指定。 例: L1:DS 32 ; 从L1地址开始保留32字节的存储单元。 5. 等值指令 标号 EQU(EQUate)(数值表达式) 功能:表示EQU两边的量等值,用于为标号或标识符赋值。
程序的过程称为汇编。
汇编程序:能将汇编语言源程序转换成机器语
言目标程序的系统软件称为汇编程序(汇编器)。
汇编的方法: 1.手工汇编: 人工查指令表,查出程序中每条指令对应的机器代码。
2.机器汇编:
用计算机中的汇编程序对用户源程序进行汇编。
汇编的作用 提供错误信息; 确定程序中每条汇编语言指令的机器码; 确定每条指令在存储器中的存放地址; 提供目标执行文件(*.BIN/*.HEX)和列表文件(*.LST)。
NEXT: ED:
当程序中的某些指令需要反复执行多次时,采用循环程序 的方式,这样会使程序缩短,节省存储单元(并不节省执 行时间)。 循环次数的控制,有两种控制方式: 第一种方法:先判断再处理。即先判断满不满足循环条件, 如满足,就循环;否则,就不循环。大多以循环条件控制。 第二种方法:先处理再判断。即执行一遍循环体后,再判 断循环还需不需要进行,多以循环次数控制。 在多重循环中,内外循环不能交叉,也不允许外循环跳入 内循环。
第4章单片机汇编语言程序设计
Y A=0? N A>0? N A←-1 Y N A←X
Y
A=0? N R1←-1
A←1
A>0? Y R1←1 存数
存数
2012-6-5 电气与自动化学院 18
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 2、分支程序设计
程序:
ORG 2000H VAR DATA 40H FUN DATA 41H START:MOV A,VAR JZ SAVE JNB ACC.7,ZHENG MOV A,#0FFH SJMP SAVE ZHENG:MOV A,#01H SAVE: MOV FUN,A SJMP $ END
第四章汇编语言程序设计 第四章汇编语言程序设计 本章重点: §4.1 汇编语言程序设计基础
4.1.3 伪指令
§4.2 MCS-51汇编语言程序设计
4.2.1 顺序结构程序设计 4.2.2分支结构程序设计 4.2.3循环结构程序设计 4.2.4查表程序设计 4.2.5 子程序设计
§习题分析及解答
第四章汇编语言程序设计 4.1.3 伪指令
2012-6-5 电气与自动化学院 9
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 1、顺序结构程序设计
2012-6-5
例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的 32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单 元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区 的20H单元中 程序: ORG 2000H CLR C MOV @R0,A MOV R0,#32H MOV R1,#35H DEC R0 MOV A,@R0 DEC R1 ADD A,@R1 MOV A,@R0 MOV @R0,A ADDC A,@R1 DEC R0 MOV @R0,A DEC R1 MOV A,@R0 MOV 20H,C ADDC A,@R1 SJMP $ END
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
小结
循环程序的结构 循环程序组织方式
作业: 1.编一段10ms的延时子程序
2.编程序实现统计片内RAM中以data为首地址存 放的一个以‘ $ ’字符为结尾的 字符串的长度并送 NUM单元
谢谢各位!
数据块传送程序中: MOV A,@R0 CJNE A,#24H #?,, LOOP1 LOOP1
置初值 循环体
置初值
是
循环结束否? 退出循环
循环修改
否
循环体
否
循环结束否?
是
退出循环
循环修改
(a)先执行后判断
(b)先判断后执行
循环组织方式流程图
一、先执行后判断
例1 编程实现50ms的延时程序。
采用循环计数法实现延时,循环次数可以通过计算获 得,并选择先执行后判断的循环结构。 分析计算计数器初始值 50ms=50000 μs =(250×200) μs 令(R7)=200,假设(R6)=N,则根据程序结构 则 [ 1+(2×N)+2 ] μs =250 μs 则 [ 1+1+(2×N)+2 ] μs =250 μs 则N=123 即(R6)=123
延时程序 若单片机的晶振频率为12MHz,则一个机器周期为 1μs。执行一条DJNZ指令需要2个机器周期,即 2μs。循环执行DJNZ指令可实现一定时间的延时。
MOV R6,#50 ;1us DEL1: DJNZ R6,DEL1 ;2us*50=100us
本段程序延时时间为: 1+100=101us 单循环最长延时时间为: 1+256*2=513us
数据块传送程序中: INC R0
INC DPTR
4、循环控制部分
根据循环结束条件,判断是否结束循环。
循环控制部分每循环一次,检查结束条件, 当满足条件时,就停止循环,往下继续执行 其他程序 89C51可采用DJNZ指令来自动修改控制变 量并能结束循环。
4、循环控制部分
延时程序中: DEL1:DJNZ R6,DEL1
延时程序中:MOV R6,#50 数据传送程序中: MOV R0,#data MOV DPTR,#buffer
2、循环体(循环工作部分)
重复执行的程序段部分,分为循环工作部 分和循环控制部分。
延时程序中: DEL1:DJNZ R6,DEL1 数据块传送程序中: MOVX @DPTR,A
3、修改控制变量
数据块传送程序
片内RAM
data a buffer buffer
片外RAM
a b s r …
b
s r …
t $
t
循环程序结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分 其组织方式如图所示。
1、置循环初值
对于循环程序中所使用的工作单元,在循 环开始时应置初值。 例如,工作寄存器设置计数初值,累加器 A清0,以及设置地址指针、长度等。
DJNZ R7,DEL2 ;2μs RET ;2μs 共计 [1+(1 + 1 +2×123+ 2)×200+2] μs, 即50.003ms 双重循环最长延时时间为: 即132.099ms
[1+(2×256+2+ 2)×256+2] μs
二、先判断后执行
例2 将内部RAM中起始地址为data的数据串传送到 外部RAM中起始地址为buffer的存储区域内,直到 发现‘$ ’字符停止传送。 分析:结合前述循环程序的四个组成部分 由于循环次数事先不知道,但循环条件可以测试 到。所以,采用先判断后执行的结构比较适宜。 程序段如下页:
MOV R0,#data MOV DPTR,#buffer LOOP0:MOV A,@R0 CJNE A,#24H,LOOP1 ;判断是否为‘ $ ’字符 SJMP LOOP2 ;是‘ $ ’字符,转其它程序 LOOP1:MOVX @DPTR,A ;不是‘ $ ’字符,执行传送 INC R0 INC DPTR SJMP LOOP0 ;传送下一数据 LOOP2:… …
单片机汇编语言的循环程序设计
复习
顺序程序设计
程序按顺序一条一条地执行指令。
分支程序设计
程序分支是通过条件转移指令实现的,即 根据条件对程序的执行进行判断、满足条 件则进行程序转移,不满足条件就顺序执 行程序。例如:JZ KS
循环程序设计
在程序运行时,有时需要连续重复执行某 段程序,可以使用循环程序。 例如
在循环程序中,必须给出循环结束条件。 常见的是计数循环,当循环了一定的次数 后,就停止循环。 在单片机中,一般用一个工作寄存器Rn作 为计数器,对该计数器赋初值作为循环次 数。每循环一次,计数器的值减1,即修改 循环控制变量,当计数器的值减为0时,就 停止循环。
3、修改控制变量
延时程序中: DEL1:DJNZ R6,DEL1
50ms延时程序如下页:
一、先执行后判断
DEL:MOV R7,#200 ;1 μs DEL2:MOV R6, #N #123 ;; 1 μs 1 μs NOP ; NOP ;1 1 μs μs DEL1 DEL1 : : DJNZ DJNZR6 R6 , , DEL1 DEL1; ; 2μs 2μs ,计( ,计( 2× 2× 123 N) ) μs μs