Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计

Similar presentations


Presentation on theme: "第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计"— Presentation transcript:

1 第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计
4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计 4.5 分支程序设计 4.6 散转程序设计 4.7 数制转换程序设计

2 4.1 汇编语言的格式与伪指令 一. 指令的格式 LOOP: MOV A, R0 ;将R0的内容送A
4.1 汇编语言的格式与伪指令 一. 指令的格式 LOOP: MOV A, R ;将R0的内容送A [标号] 操作码 第一操作数 第二操作数 [注释] (目的操作数) (源操作数) 注:白色的内容不是必须的

3 二、汇编语言格式: 地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址
地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 C MAIN: CLR C ; MAIN为程序标号 E LOOP: MOV A , @R0 ADDC A, @R1 INC R0 DA FB DJNZ R1, LOOP ;相对转移 SJMP NEXT MOV R0, #03H 003A NEXT: DEC R0 003B 80FE SJMP $ ;HERE: SJMP HERE END ; 结束标记

4 三. 伪操作指令 1、 ORG(Origin) 定义程序的起始地址 2、 END 程序结束标志 3、 DB (Define Byte) 定义字节 4、 DW (Define Word)定义字 5、 EQU(Equate) 表达式赋值

5 四、伪操作指令例子 ORG 0000H MAIN: CLR C LOOP: MOV A , @R0
MATH EQU 03H ORG 0000H MAIN: CLR C LOOP: MOV A , @R0 MOV R1, #MATH ;相当于 MOV R1, #03H NEXT: SJMP $ ORG 1100H DB 01H , 04H, 09H , 05H ; END ROM中 地址 数据

6 4.2 汇编语言程序设计步骤 1.确定方案和计算方法 2.了解应用系统的硬件配置、性能指 标。 开始 3.建立系统数学模型,确定控制算法
4.2 汇编语言程序设计步骤 1.确定方案和计算方法 2.了解应用系统的硬件配置、性能指 标。 3.建立系统数学模型,确定控制算法 和操作步骤。 4.画程序流程图, 确定程序的流向 5. 编制源程序 (1)合理分配存储器单元和了解I/O接 口地址。 (2)按功能设计程序,明确各程序之 间的相互关系。 (3)用注释行说明程序,便于阅读和 修改调试和修改。 开始 1 Y N ?

7 举例 AJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 MAIN: CLR C ; MAIN为程序标号
LOOP: MOV A , @R0 ADDC A, @R1 INC R0 DJNZ R1, LOOP ;相对转移 SJMP NEXT MOV R1, #03H NEXT: DEC R0 SJMP $ ;相当于 LOOP1: SJMP LOOP1 END ; 结束标记

8 4.3 查表程序设计 一. 用DPTR查表(查0~9平方表) 1000 C083 TA: PUSH DPH
4.3 查表程序设计 一. 用DPTR查表(查0~9平方表) C TA: PUSH DPH C PUSH DPL MOV DPTR, #TAB MOVC A, @A+DPTR D POP DPL 100A D POP DPH 100C RET ORG 2000H TAB: DB 00H, 01H, 04H, 09H

9 ORG 1000H 二. 用PC查表(查0~9平方表) 1000 C083 TA: ADD A, #01H ; # 01H 为偏移量
MOVC A, @A+PC RET DB 00H, 01H, 04H, 09H END 偏移量=表首地址-(查表指令下一条指令地址) =1004H - 1003H =01H

10 DEL: MOV R7, #200 4.4 循环程序设计 一. 延时50ms程序 DEL1: MOV R6, #125
4.4 循环程序设计 一. 延时50ms程序 DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2: DJNZ R6, DEL2 ;125*2=250us DJNZ R7, DEL1 ; 0.25ms*200=50ms RET 使用12MHz晶振时,一个机器周期为1us, 执行 DJNZ指令为2us,加其他指令的时间(250+1+2) *200+1=50.301ms 精确计算见 P327

11 二. 计算几个数据的和 例题:对内部RAM 50h开始的10个无符号数求和。

12 源程序: ADD1: MOV R7, #10 ;循环次数n=10 MOV R3, #0 ;存放结果的高8位
MOV R0, #50H ;求和的数据存放在从内部RAM 50h开始的 ;单元中,。注意:(50h)=?不知道 LOOP: MOV A, R ; ADD A, @R0 ;(R4)+(5?H)→A MOV R4, A ; 结果送回R4 CLR A ; ADDC A, R3 ; 把进位位C加到高8位去 MOV R3, A INC R ; 为下一轮循环作准备 DJNZ R7, LOOP END

13 高8位 低8位 解释: (R3) (R4) + (50h) C (A) (50h)中是什么,不知道, 不能用ADD A,#50H
高8位 低8位 (R3) (R4) + (50h) C (A) MOV A, R ADD A, @R MOV R4, A CLR A ADDC A, R3 MOV R3, A (50h)中是什么,不知道, 不能用ADD A,#50H

14 4.5 分支程序设计 一、基本分支程序: 1、若(A)< 14H, 转NEXT,否则继续执行
4.5 分支程序设计 一、基本分支程序: 1、若(A)< 14H, 转NEXT,否则继续执行 2、若(A)≤ 14H, 转NEXT, 否则继续执行 3、若(A)≥ 14H, 转NEXT, 否则继续执行 4、若(A)> 14H, 转NEXT, 否则继续执行 CJNE A,#data,rel;(A)=#data,继续 Cy←0 (A)>#data, 转 Cy←0 (A)<#data, 转 Cy←1 特点:只有<时,Cy←1 CJNE A, #14H, LOOP LOOP: JC NEXT … … (A)≤ 14H 相当于(A) < 15H CJNE A, #15H, LOOP LOOP: JC NEXT … … CJNE A, #14H, LOOP LOOP: JNC NEXT … … (A)> 14H 相当于(A) ≥ 15H CJNE A, #15H, LOOP LOOP: JNC NEXT … …

15 二、分支程序例1 ORG 0030H MOV A, 20H 例1:按下面公式编写程序, CJNE A, #21H, LOOP1
LOOP1: JC NEXT1 CJNE A, #40H, LOOP2 LOOP2: JNC NEXT2 MOV B, #2 MUL AB AJMP NEXT2 NEXT1: CPL A NEXT2: MOV 21H, A END 最终结果存在 21h中 例1:按下面公式编写程序, x为无符号数,存在20h单元 y存放在21h单元。

16 三、分支程序例2: ORG 0030H 从内部RAM 22h单元开始存有一个无符号数数据块,
长度n存于21h中。求出数据块中的最小数,存于20h中。 ORG 0030H MOV R0, #22H ;数据块起始地址 MOV R1, 21H ;数据个数n MOV 20H,#0FFH ; 最大数 LOOP: MOV A, @R ; 取新数 INC R0 ; 为取下一个新数作准备 CJNE A, 20H, LOOP1 ; 与原最大数比较 LOOP1:JNC NEXT ; 大,原最小数保留 MOV 20H, A ; 小,改变最小数 NEXT: DJNZ R1, LOOP ;循环 END 初始化 y <x y → x 取新数 y n-1=0? y N END

17 例:行李计价: 当G≤5,M=G×3; 当G>5,M=G×3+(G-5)×(5-3)
FRT: MOV A,40H ;取行李重量G放在40H MOV R3,A MOV B,#03H ;M=G×3 MUL AB MOV R2,A ;暂存3 × G在R2 MOV A,R3 ;取回G CJNE A,#06H,L1 ;G≤5 ? L1: JC WETC ;是,转至WETC SUBB A,#05H ;否则M=3G+2(G-5) RLC A ADD A,R2 WETC:MOV 41H,A ;最后结果M存41H end 指出本程序的条件限制

18 4.6 散转程序设计 ORG 0030H CLR A MOV A, R7 *AJMP … 即把PC指向子程序的起始地址;
4.6 散转程序设计 ORG 0030H JUMP1: MOV DPTR, #TAB CLR A MOV A, R7 ADD A, R7 AJMP @A+DPTR ORG H TAB: AJMP Prog0 AJMP Prog1 AJMP Prog2 …… 根据R7中的内容,转向各个子程序。 R7=0,转入Prog0 R7=1,转入Prog1 R7=2,转入Prog2 …… R7=n,转入Progn 处理 0 处理 1 处理 n R7= ? 1 n *AJMP … 即把PC指向子程序的起始地址; *R7 x 2 是AJMP @A+DPTR的机器码匹配;此处 n<127; x 3, 程序还要作相应修改。

19 4.7 数制转换程序设计 例:8位二进制转换成BCD码。(用十进制表达的二进制码) ;程序名:BINBCD1
4.7 数制转换程序设计 例:8位二进制转换成BCD码。(用十进制表达的二进制码) ;程序名:BINBCD1 ;功能: 0~FFH内的二进制数转换为BCD数 ;入口: A存要转换的二进制数 ;出口: R0 存放BCD数 百、十、个位数的地址 BINBCD1: MOV B, #100 DIV AB MOV @R0, A INC R0 MOV A, #10 XCH A, B ;(A)=原(B),(B)=10 INC R0 XCH AB RET


Download ppt "第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计"

Similar presentations


Ads by Google