《第4章 MCS-51程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章 MCS-51程序设计.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章 MCS51程序设计,4.1 汇编语言的格式与伪指令4.2 汇编语言程序设计步骤4.3 查表程序设计4.4 循环程序设计4.5 分支程序设计4.6 散转程序设计4.7 数制转换程序设计,4.1 汇编语言的格式与伪指令,一. 指令的格式 LOOP: MOV A, R0 ;将R0的内容送A 标号 操作码 第一操作数 第二操作数 注释 (目的操作数) (源操作数) 注:白色的内容不是必须的,二、汇编语言格式: 地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址0000 20 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址0030 C3
2、MAIN: CLR C ; MAIN为程序标号0031 E6 LOOP: MOV A , R00032 37 ADDC A, R10033 08 INC R00034 DA FB DJNZ R1, LOOP ;相对转移0036 80 03 SJMP NEXT0038 78 03 MOV R0, #03H003A 18 NEXT: DEC R0003B 80FE SJMP $ ;HERE: SJMP HERE END ; 结束标记,三. 伪操作指令,1、 ORG(Origin) 定义程序的起始地址 2、 END 程序结束标志 3、 DB (Define Byte) 定义字节 4、 DW (Def
3、ine Word)定义字 5、 EQU(Equate) 表达式赋值,四、伪操作指令例子,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中地址 数据1100 011101 041102 091103 05,4.2 汇编语言程序设计步骤,1.确定方案和计算方法2.了解应用系统的硬件配置、性能指 标。3.建立系统数学模型,确定控制算法 和操作步骤。4.画程序流程图, 确
4、定程序的流向 5. 编制源程序 (1)合理分配存储器单元和了解I/O接 口地址。 (2)按功能设计程序,明确各程序之 间的相互关系。 (3)用注释行说明程序,便于阅读和 修改调试和修改。,举例 ORG 0000H ; 整个程序起始地址 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
5、 END ; 结束标记,4.3 查表程序设计,一. 用DPTR查表(查09平方表) 1000 C083 TA: PUSH DPH 1002 C082 PUSH DPL 1004 902000 MOV DPTR, #TAB 1007 93 MOVC A, A+DPTR 1008 D082 POP DPL 100A D083 POP DPH 100C 22 RET ORG 2000H TAB: DB 00H, 01H, 04H, 09H 2000 00 2001 01 2002 04 2003 09,二. 用PC查表(查09平方表),ORG 1000H1000 C083 TA: ADD A, #0
6、1H ; # 01H 为偏移量1002 83 MOVC A, A+PC1003 22 RET 1004 00 DB 00H, 01H, 04H, 09H1005 01 END1006 041007 09偏移量表首地址(查表指令下一条指令地址) 1004H 1003H 01H,4.4 循环程序设计,一. 延时50ms程序 DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2: DJNZ R6, DEL2 ;125*2=250us DJNZ R7, DEL1 ; 0.25ms*20050ms RET 使用12MHz晶振时,一个机器周期为1us, 执行DJNZ指令为2u
7、s,加其他指令的时间(25012)*200150.301ms 精确计算见 P327,二. 计算几个数据的和,例题:对内部RAM 50h开始的10个无符号数求和。,源程序:,ADD1: MOV R7, #10 ;循环次数n10 MOV R3, #0 ;存放结果的高8位 MOV R4, #0 ;存放结果的低8位 MOV R0, #50H ;求和的数据存放在从内部RAM 50h开始的 ;单元中,。注意:(50h)?不知道LOOP: MOV A, R4 ; ADD A, R0 ;(R4)+(5?H)A MOV R4, A ; 结果送回R4 CLR A ; ADDC A, R3 ; 把进位位C加到高8位
8、去 MOV R3, A INC R0 ; 为下一轮循环作准备 DJNZ R7, LOOP END,解释:,高8位 低8位 (R3) (R4) + (50h) C (A),MOV A, R4 ADD A, R0 MOV R4, A,CLR A ADDC A, R3 MOV R3, A,(50h)中是什么,不知道, 不能用ADD A,50H,4.5 分支程序设计,一、基本分支程序: 1、若(A) 14H, 转NEXT, 否则继续执行,(A) 14H相当于(A) 14H相当于(A) 15H,CJNE A, #15H, LOOPLOOP: JNC NEXT ,CJNE A, #14H, LOOPLOO
9、P: JNC NEXT ,CJNE A, #14H, LOOPLOOP: JC NEXT ,CJNE A,#data,rel;(A)=#data,继续 Cy0(A)#data, 转 Cy0(A)#data, 转 Cy1特点:只有时,Cy1,例1:按下面公式编写程序, x为无符号数,存在20h单元 y存放在21h单元。,ORG 0030H MOV A, 20H CJNE A, #21H, LOOP1LOOP1: JC NEXT1 CJNE A, #40H, LOOP2LOOP2: JNC NEXT2 MOV B, #2 MUL AB AJMP NEXT2NEXT1: CPL ANEXT2: MO
10、V 21H, A END最终结果存在 21h中,二、分支程序例1,三、分支程序例2:,从内部RAM 22h单元开始存有一个无符号数数据块,长度n存于21h中。求出数据块中的最小数,存于20h中。,ORG 0030H MOV R0, #22H ;数据块起始地址 MOV R1, 21H ;数据个数n MOV 20H,#0FFH ; 最大数LOOP: MOV A, R0 ; 取新数 INC R0 ; 为取下一个新数作准备 CJNE A, 20H, LOOP1 ; 与原最大数比较LOOP1:JNC NEXT ; 大,原最小数保留 MOV 20H, A ; 小,改变最小数NEXT: DJNZ R1, L
11、OOP ;循环 END,FRT: MOV A,40H ;取行李重量G放在40H MOV R3,A MOV B,#03H;M=G3 MUL AB MOV R2,A;暂存3 G在R2 MOV A,R3;取回G CJNE A,#06H,L1;G5 ?L1: JC WETC;是,转至WETC SUBB A,#05H;否则M=3G+2(G-5) RLC A ADD A,R2WETC:MOV 41H,A ;最后结果M存41H end,例:行李计价:当G5,M=G3; 当G5,M=G3+(G-5)(5-3),指出本程序的条件限制,4.6 散转程序设计,根据R7中的内容,转向各个子程序。 R70,转入Prog
12、0 R71,转入Prog1 R72,转入Prog2 R7n,转入Progn,ORG 0030HJUMP1: MOV DPTR, #TAB CLR A MOV A, R7 ADD A, R7 AJMP A+DPTR ORG 0100HTAB: AJMP Prog0 AJMP Prog1 AJMP Prog2 ,*AJMP 即把PC指向子程序的起始地址;*R7 x 2 是AJMP A+DPTR的机器码匹配;此处 n127;*如用LJMP A+DPTR,则R7 x 3, 程序还要作相应修改。,4.7 数制转换程序设计,例:8位二进制转换成BCD码。(用十进制表达的二进制码),;程序名:BINBCD1;功能: 0FFH内的二进制数转换为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 DIV AB MOV R0, A INC R0 XCH AB MOV R0, A RET,