MCS-51系列单片机的程序设计.ppt
《MCS-51系列单片机的程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS-51系列单片机的程序设计.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MCS-51系列单片机的程序设计第四章 交叉汇编语言交叉汇编语言MASM51MASM51 单片机汇编语言程序设计方法及技巧单片机汇编语言程序设计方法及技巧 本章内容本章内容本章内容本章内容 了解交叉汇编语言了解交叉汇编语言MASM51MASM51的特点的特点掌握掌握顺序程序、分支程序、循环程顺序程序、分支程序、循环程序、查表程序、子程序的基本设计序、查表程序、子程序的基本设计方法和技巧方法和技巧学习目的学习目的学习目的学习目的掌握汇编语言程序设计的一般步骤掌握汇编语言程序设计的一般步骤4.1 交叉汇编语言交叉汇编语言MASM51 汇编语言源程序是由汇编指令和伪指令组成汇编语言源程序是由汇编指令
2、和伪指令组成汇编语言源程序是由汇编指令和伪指令组成汇编语言源程序是由汇编指令和伪指令组成的文件,其扩展名为的文件,其扩展名为的文件,其扩展名为的文件,其扩展名为“ASM”ASM”。源程序编辑完后只有转换为机器码表示的源程序编辑完后只有转换为机器码表示的源程序编辑完后只有转换为机器码表示的源程序编辑完后只有转换为机器码表示的目标程序计算机才能执行,这个转换的过程称目标程序计算机才能执行,这个转换的过程称目标程序计算机才能执行,这个转换的过程称目标程序计算机才能执行,这个转换的过程称为为为为汇编汇编汇编汇编。1)1)人工汇编人工汇编人工汇编人工汇编 人工汇编是通过人工查出源程序中所人工汇编是通过人
3、工查出源程序中所人工汇编是通过人工查出源程序中所人工汇编是通过人工查出源程序中所有汇编指令的机器码,并依次将机器码输有汇编指令的机器码,并依次将机器码输有汇编指令的机器码,并依次将机器码输有汇编指令的机器码,并依次将机器码输入单片机中,使之成为单片机能直接执行入单片机中,使之成为单片机能直接执行入单片机中,使之成为单片机能直接执行入单片机中,使之成为单片机能直接执行的目标程序。的目标程序。的目标程序。的目标程序。2)2)机器汇编机器汇编机器汇编机器汇编 机器汇编是指在计算机上通过汇机器汇编是指在计算机上通过汇机器汇编是指在计算机上通过汇机器汇编是指在计算机上通过汇编程序对源程序进行汇编,即从源
4、程编程序对源程序进行汇编,即从源程编程序对源程序进行汇编,即从源程编程序对源程序进行汇编,即从源程序到目标程序的转换过程是由计算机序到目标程序的转换过程是由计算机序到目标程序的转换过程是由计算机序到目标程序的转换过程是由计算机上的汇编程序自动完成的。上的汇编程序自动完成的。上的汇编程序自动完成的。上的汇编程序自动完成的。3)3)交叉汇编交叉汇编交叉汇编交叉汇编 是指用一种计算机上的汇编程序去是指用一种计算机上的汇编程序去是指用一种计算机上的汇编程序去是指用一种计算机上的汇编程序去汇编另一种计算机的源程序,为另一种汇编另一种计算机的源程序,为另一种汇编另一种计算机的源程序,为另一种汇编另一种计算
5、机的源程序,为另一种计算机产生目标程序。计算机产生目标程序。计算机产生目标程序。计算机产生目标程序。单片机单片机单片机单片机MCS-51MCS-51汇编语言程序设计步骤:汇编语言程序设计步骤:汇编语言程序设计步骤:汇编语言程序设计步骤:1 1 分析问题分析问题分析问题分析问题 2 2 确定算法确定算法确定算法确定算法 3 3 设计程序流程图设计程序流程图设计程序流程图设计程序流程图 4 4 分配内存单元分配内存单元分配内存单元分配内存单元 5 5 编写汇编语言源程序编写汇编语言源程序编写汇编语言源程序编写汇编语言源程序 6 6 调试程序调试程序调试程序调试程序4.2 程序设计方法及技巧程序设计
6、方法及技巧4.2.1 4.2.1 顺序程序设计顺序程序设计顺序程序设计顺序程序设计例4.1 请用MCS-51汇编指令编写程序,将片内RAM104、105单元中的内容分别传送到片外数据存储器 104H、105H单元中。分析:应注意片内和片外的寻址指令不同分析:应注意片内和片外的寻址指令不同 ORG 1000H ORG 1000HMOV R0 MOV R0,#68H#68HMOV A MOV A,R0 R0 ;片内片内片内片内RAM104RAM104单元内容送累加器单元内容送累加器单元内容送累加器单元内容送累加器MOV DPTR MOV DPTR,#0104H#0104HMOVX DPTR MOV
7、X DPTR,A A ;完成片内完成片内完成片内完成片内RAM104RAM104单元内容送片单元内容送片单元内容送片单元内容送片 ;外外外外104H104H单元中单元中单元中单元中INC R0INC R0MOV A MOV A,R0 R0 ;片内片内片内片内RAM105RAM105单元内容送累加器单元内容送累加器单元内容送累加器单元内容送累加器INC DPTRINC DPTRMOVX DPTR MOVX DPTR,A A ;完成片内完成片内完成片内完成片内RAM105RAM105单元内容送片单元内容送片单元内容送片单元内容送片 ;外外外外105H105H单元中单元中单元中单元中SJMP$SJM
8、P$END END 1.1.简单分支程序简单分支程序简单分支程序简单分支程序YN 顺序执行条件满足?转向目标程序4.2.4.2.2 2 分支程序设计分支程序设计分支程序设计分支程序设计图4.1 简单分支程序转移分析:只要将两数进行比较,用比较的结果作为分分析:只要将两数进行比较,用比较的结果作为分分析:只要将两数进行比较,用比较的结果作为分分析:只要将两数进行比较,用比较的结果作为分支转移的条件就很容易地找出其中的大数。支转移的条件就很容易地找出其中的大数。支转移的条件就很容易地找出其中的大数。支转移的条件就很容易地找出其中的大数。已知片内已知片内已知片内已知片内RAM FIRST RAM F
9、IRST 开始的两个单元中各开始的两个单元中各开始的两个单元中各开始的两个单元中各存放有一个存放有一个存放有一个存放有一个8 8位无符号二进制数,要求找出其中的位无符号二进制数,要求找出其中的位无符号二进制数,要求找出其中的位无符号二进制数,要求找出其中的大数并存入片内大数并存入片内大数并存入片内大数并存入片内RAMRAM的的的的SECONDSECOND单元中。单元中。单元中。单元中。例例 4.2 ORG 1000HORG 1000HCLR CCLR CMOV R0,#FIRSTMOV R0,#FIRST ;第一个数地址送第一个数地址送第一个数地址送第一个数地址送R0R0中中中中MOV A,R
10、0 MOV A,R0 ;取第一个数取第一个数取第一个数取第一个数INC R0 INC R0 ;R0 ;R0指向第二个数地址指向第二个数地址指向第二个数地址指向第二个数地址SUBB A,R0 SUBB A,R0 ;两数比较两数比较两数比较两数比较JC BIG JC BIG ;第二个数大转第二个数大转第二个数大转第二个数大转BIGBIGDEC R0 DEC R0 ;R0 ;R0指向第一个数地址指向第一个数地址指向第一个数地址指向第一个数地址BIG:BIG:MOV SECOND,R0 ;MOV SECOND,R0 ;存大数存大数存大数存大数SJMP$SJMP$ENDEND参考程序参考程序参考程序参考
11、程序2 2)多路分支程序(散转程序)多路分支程序(散转程序)多路分支程序(散转程序)多路分支程序(散转程序)K=n K=n-1 K=2 转向分支n-1 转向分支2 转向分支1 转向分支n K=?K=1 图图图图4.2 4.2 多路分支程序转移多路分支程序转移多路分支程序转移多路分支程序转移1 1)把)把)把)把AJMPAJMP或或或或LJMPLJMP指令组成一个分支程序的指令组成一个分支程序的指令组成一个分支程序的指令组成一个分支程序的 转移表,表的首地址放入转移表,表的首地址放入转移表,表的首地址放入转移表,表的首地址放入DPTRDPTR中;中;中;中;2 2)调整后的出口信息放入累加器)调
12、整后的出口信息放入累加器)调整后的出口信息放入累加器)调整后的出口信息放入累加器A A中;中;中;中;3 3)执行)执行)执行)执行JMP A+DPTRJMP A+DPTR转向对应的分支程序。转向对应的分支程序。转向对应的分支程序。转向对应的分支程序。可通过间接转移指令可通过间接转移指令可通过间接转移指令可通过间接转移指令JMP A+DPTRJMP A+DPTR和和和和无条件转移指令中的无条件转移指令中的无条件转移指令中的无条件转移指令中的AJMPAJMP或或或或LJMPLJMP指令来实现指令来实现指令来实现指令来实现多路分支转移:多路分支转移:多路分支转移:多路分支转移:例例 4.3 已知已
13、知已知已知R0R0中存放有一数字关键码,要求根据中存放有一数字关键码,要求根据中存放有一数字关键码,要求根据中存放有一数字关键码,要求根据码值的不同,分别转向对应的码值程序段去执码值的不同,分别转向对应的码值程序段去执码值的不同,分别转向对应的码值程序段去执码值的不同,分别转向对应的码值程序段去执行。即当行。即当行。即当行。即当R0=KR0=K时,便执行时,便执行时,便执行时,便执行CODEKCODEK程序。程序。程序。程序。ORG 1000HORG 1000H MOV DPTR MOV DPTR,#TAB#TAB ;表首址送表首址送表首址送表首址送DPTRDPTR MOV A MOV A,R
14、0 R0 ;取数字关键码取数字关键码取数字关键码取数字关键码 ADD A ADD A,R0 R0 ;每条每条每条每条AJMPAJMP指令占用两个字指令占用两个字指令占用两个字指令占用两个字;节,将节,将节,将节,将关键码关键码关键码关键码乘以乘以乘以乘以2 2 JNC LESS JNC LESS ;关键码小于关键码小于关键码小于关键码小于128128转转转转LESSLESS INC DPH INC DPH LESS:JMP A+DPTRLESS:JMP A+DPTR TAB:AJMP CODE0 TAB:AJMP CODE0 ;关键码为关键码为关键码为关键码为0 0,转,转,转,转CODE0C
15、ODE0执行执行执行执行 AJMP CODE1 AJMP CODE1 ;关键码为关键码为关键码为关键码为1 1,转,转,转,转CODE1CODE1执行执行执行执行 AJMP CODE255 AJMP CODE255 ;关键码为关键码为关键码为关键码为255255,转,转,转,转CODE255CODE255;执行执行执行执行 AJMPAJMP指令的转移范围不超出所在的指令的转移范围不超出所在的指令的转移范围不超出所在的指令的转移范围不超出所在的2KB2KB字节区间,如各小段程序较长,在字节区间,如各小段程序较长,在字节区间,如各小段程序较长,在字节区间,如各小段程序较长,在2KB2KB字节内无法
16、全部容纳,上面的程序应该怎样字节内无法全部容纳,上面的程序应该怎样字节内无法全部容纳,上面的程序应该怎样字节内无法全部容纳,上面的程序应该怎样修改?修改?修改?修改?思考思考1)1)循环初始化循环初始化循环初始化循环初始化 设置循环的初始状态,位于循环程序的开设置循环的初始状态,位于循环程序的开设置循环的初始状态,位于循环程序的开设置循环的初始状态,位于循环程序的开头位置头位置头位置头位置2)2)循环处理循环处理循环处理循环处理 循环程序的主体部分,是通过反复执行来循环程序的主体部分,是通过反复执行来循环程序的主体部分,是通过反复执行来循环程序的主体部分,是通过反复执行来完成数据的具体处理,它
17、位于循环体内。完成数据的具体处理,它位于循环体内。完成数据的具体处理,它位于循环体内。完成数据的具体处理,它位于循环体内。4.2.4.2.3 3 循环程序设计循环程序设计循环程序设计循环程序设计循环程序由循环程序由4部分组成:部分组成:3)3)循环控制循环控制循环控制循环控制 也在循环体内,是用于控制循环的继续也在循环体内,是用于控制循环的继续也在循环体内,是用于控制循环的继续也在循环体内,是用于控制循环的继续与否。与否。与否。与否。4)4)循环结束循环结束循环结束循环结束 通常位于循环体后,是用来存放循环处通常位于循环体后,是用来存放循环处通常位于循环体后,是用来存放循环处通常位于循环体后,
18、是用来存放循环处理的最终结果及恢复各寄存器与工作单元的理的最终结果及恢复各寄存器与工作单元的理的最终结果及恢复各寄存器与工作单元的理的最终结果及恢复各寄存器与工作单元的原始值。原始值。原始值。原始值。设设设设MCS-51MCS-51单片机内部单片机内部单片机内部单片机内部RAMRAM从从从从4040HH开始的连开始的连开始的连开始的连续续续续1616个单元中,每个单元中分别存放有单字节个单元中,每个单元中分别存放有单字节个单元中,每个单元中分别存放有单字节个单元中,每个单元中分别存放有单字节的带符号数。要求将其中的正数存入的带符号数。要求将其中的正数存入的带符号数。要求将其中的正数存入的带符号
19、数。要求将其中的正数存入5050HH开始的开始的开始的开始的连续单元中,负数存入连续单元中,负数存入连续单元中,负数存入连续单元中,负数存入6060HH开始的连续单元中,开始的连续单元中,开始的连续单元中,开始的连续单元中,并将正数、负数和零的个数分别存入并将正数、负数和零的个数分别存入并将正数、负数和零的个数分别存入并将正数、负数和零的个数分别存入7070HH、71H71H、72H72H单元中。单元中。单元中。单元中。例例 4.41 1)带符号数的最高位为符号位,可通过)带符号数的最高位为符号位,可通过)带符号数的最高位为符号位,可通过)带符号数的最高位为符号位,可通过最高位来判断正负。最高
20、位来判断正负。最高位来判断正负。最高位来判断正负。2 2)程序中需要分别从)程序中需要分别从)程序中需要分别从)程序中需要分别从40H40H、50H 50H 和和和和60H60H单单单单 元开始取源数、存放正数和负数,故需要三元开始取源数、存放正数和负数,故需要三元开始取源数、存放正数和负数,故需要三元开始取源数、存放正数和负数,故需要三个地址指针来指向对应的内存单元;设对应个地址指针来指向对应的内存单元;设对应个地址指针来指向对应的内存单元;设对应个地址指针来指向对应的内存单元;设对应的地址指针分别为的地址指针分别为的地址指针分别为的地址指针分别为R0R0、R1R1和和和和R2R2,由于由于
21、由于由于R2R2不不不不能用间接寻址方式,故能用间接寻址方式,故能用间接寻址方式,故能用间接寻址方式,故R2R2需要同需要同需要同需要同R1R1或或或或R0R0进行进行进行进行交换后,才能进行负数的存放。交换后,才能进行负数的存放。交换后,才能进行负数的存放。交换后,才能进行负数的存放。分析分析分析分析图图图图4.3 4.3 程序流程图程序流程图程序流程图程序流程图参考程序:参考程序:参考程序:参考程序:ORG 1000HORG 1000H CLR A CLR A MOV 70H,A MOV 70H,A ;存放正数的个数单元清存放正数的个数单元清存放正数的个数单元清存放正数的个数单元清0 0
22、MOV 71H,A MOV 71H,A ;存放负数的个数单元清存放负数的个数单元清存放负数的个数单元清存放负数的个数单元清0 0 MOV 72H,A MOV 72H,A ;存放零的个数单元清存放零的个数单元清存放零的个数单元清存放零的个数单元清0 0 MOV R3,#10H MOV R3,#10H ;设循环计数器初值设循环计数器初值设循环计数器初值设循环计数器初值 MOV R0,#40H MOV R0,#40H ;设源数地址指针设源数地址指针设源数地址指针设源数地址指针 MOV R1,#50H MOV R1,#50H ;设正数地址指针设正数地址指针设正数地址指针设正数地址指针 MOV R2,#
23、60H MOV R2,#60H ;设负数地址指针设负数地址指针设负数地址指针设负数地址指针LOOP:MOV A,R0 LOOP:MOV A,R0 ;取源数取源数取源数取源数 JZJZ ZERO ZERO ;源数为源数为源数为源数为0 0,转,转,转,转ZER0ZER0 JNB ACC.7,JNB ACC.7,POSI POSI ;源数为正,转源数为正,转源数为正,转源数为正,转POSIPOSI INC 71H INC 71H ;负数个数加负数个数加负数个数加负数个数加1 1 MOV R4,A MOV R4,A ;暂存暂存暂存暂存源源数数数数 MOV A,R2 MOV A,R2 XCH A,R1
24、 XCH A,R1 ;R1;R1与与与与R2R2中的内容交换中的内容交换中的内容交换中的内容交换 XCH A,R4XCH A,R4 MOV R1,A MOV R1,A ;存负数存负数存负数存负数 XCH A,R4XCH A,R4 XCH A,R1 XCH A,R1 ;R1 ;R1与与与与R2R2中的内容交换中的内容交换中的内容交换中的内容交换 INC R2 INC R2 ;调整负数地址指针调整负数地址指针调整负数地址指针调整负数地址指针 SJMPSJMP LOOP1 LOOP1 ;转循坏控制转循坏控制转循坏控制转循坏控制POSI:INC 70HPOSI:INC 70H;正数个数加正数个数加正数
25、个数加正数个数加1 1 MOV R1,A MOV R1,A ;存正数存正数存正数存正数 INC R1 INC R1 ;调整正数地址指针调整正数地址指针调整正数地址指针调整正数地址指针 SJMP LOOP1SJMP LOOP1ZERO:INC 72H ZERO:INC 72H ;零的个数加零的个数加零的个数加零的个数加1 1LOOP1:INC R0 LOOP1:INC R0 ;调整源数地调整源数地调整源数地调整源数地址指针址指针址指针址指针 DJNZ R3,LOOP DJNZ R3,LOOP ;未送完,继续未送完,继续未送完,继续未送完,继续 SJMP$SJMP$END END 查表指令有:查表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 系列 单片机 程序设计
限制150内