MCS-51系列单片机的程序设计.ppt
《MCS-51系列单片机的程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS-51系列单片机的程序设计.ppt(60页珍藏版)》请在三一办公上搜索。
1、MCS-51系列单片机的程序设计,第四章,交叉汇编语言MASM51,单片机汇编语言程序设计方法及技巧,了解交叉汇编语言MASM51的特点,掌握顺序程序、分支程序、循环程序、查表程序、子程序的基本设计方法和技巧,掌握汇编语言程序设计的一般步骤,4.1 交叉汇编语言MASM51,汇编语言源程序是由汇编指令和伪指令组成的文件,其扩展名为“ASM”。,1)人工汇编 人工汇编是通过人工查出源程序中所有汇编指令的机器码,并依次将机器码输入单片机中,使之成为单片机能直接执行的目标程序。,2)机器汇编 机器汇编是指在计算机上通过汇编程序对源程序进行汇编,即从源程序到目标程序的转换过程是由计算机上的汇编程序自动
2、完成的。,3)交叉汇编 是指用一种计算机上的汇编程序去汇编另一种计算机的源程序,为另一种计算机产生目标程序。,单片机MCS-51汇编语言程序设计步骤:1 分析问题 2 确定算法 3 设计程序流程图 4 分配内存单元 5 编写汇编语言源程序 6 调试程序,4.2 程序设计方法及技巧,4.2.1 顺序程序设计,分析:应注意片内和片外的寻址指令不同,ORG 1000HMOV R0,#68HMOV A,R0;片内RAM104单元内容送累加器MOV DPTR,#0104HMOVX DPTR,A;完成片内RAM104单元内容送片;外104H单元中INC R0MOV A,R0;片内RAM105单元内容送累加
3、器INC DPTRMOVX DPTR,A;完成片内RAM105单元内容送片;外105H单元中SJMP$END,1.简单分支程序,4.2.2 分支程序设计,图4.1 简单分支程序转移,分析:只要将两数进行比较,用比较的结果作为分支转移的条件就很容易地找出其中的大数。,ORG 1000HCLR CMOV R0,#FIRST;第一个数地址送R0中MOV A,R0;取第一个数INC R0;R0指向第二个数地址SUBB A,R0;两数比较JC BIG;第二个数大转BIGDEC R0;R0指向第一个数地址BIG:MOV SECOND,R0;存大数SJMP$END,参考程序,2)多路分支程序(散转程序),图
4、4.2 多路分支程序转移,1)把AJMP或LJMP指令组成一个分支程序的 转移表,表的首地址放入DPTR中;2)调整后的出口信息放入累加器A中;3)执行JMP A+DPTR转向对应的分支程序。,可通过间接转移指令JMP A+DPTR和无条件转移指令中的AJMP或LJMP指令来实现多路分支转移:,例 4.3,已知R0中存放有一数字关键码,要求根据码值的不同,分别转向对应的码值程序段去执行。即当R0=K时,便执行CODEK程序。,ORG 1000H MOV DPTR,#TAB;表首址送DPTR MOV A,R0;取数字关键码 ADD A,R0;每条AJMP指令占用两个字;节,将关键码乘以2 JNC
5、 LESS;关键码小于128转LESS INC DPH LESS:JMP A+DPTR TAB:AJMP CODE0;关键码为0,转CODE0执行 AJMP CODE1;关键码为1,转CODE1执行 AJMP CODE255;关键码为255,转CODE255;执行,AJMP指令的转移范围不超出所在的2KB字节区间,如各小段程序较长,在2KB字节内无法全部容纳,上面的程序应该怎样修改?,思考,1)循环初始化 设置循环的初始状态,位于循环程序的开头位置2)循环处理 循环程序的主体部分,是通过反复执行来完成数据的具体处理,它位于循环体内。,4.2.3 循环程序设计,循环程序由4部分组成:,3)循环控
6、制 也在循环体内,是用于控制循环的继续与否。4)循环结束 通常位于循环体后,是用来存放循环处理的最终结果及恢复各寄存器与工作单元的原始值。,设MCS-51单片机内部RAM从40H开始的连续16个单元中,每个单元中分别存放有单字节的带符号数。要求将其中的正数存入50H开始的连续单元中,负数存入60H开始的连续单元中,并将正数、负数和零的个数分别存入70H、71H、72H单元中。,例 4.4,1)带符号数的最高位为符号位,可通过最高位来判断正负。2)程序中需要分别从40H、50H 和60H单 元开始取源数、存放正数和负数,故需要三个地址指针来指向对应的内存单元;设对应的地址指针分别为R0、R1和R
7、2,由于R2不能用间接寻址方式,故R2需要同R1或R0进行交换后,才能进行负数的存放。,分析,图4.3 程序流程图,参考程序:ORG 1000H CLR A MOV 70H,A;存放正数的个数单元清0 MOV 71H,A;存放负数的个数单元清0 MOV 72H,A;存放零的个数单元清0 MOV R3,#10H;设循环计数器初值 MOV R0,#40H;设源数地址指针 MOV R1,#50H;设正数地址指针 MOV R2,#60H;设负数地址指针,LOOP:MOV A,R0;取源数 JZ ZERO;源数为0,转ZER0 JNB ACC.7,POSI;源数为正,转POSI INC 71H;负数个数
8、加1 MOV R4,A;暂存源数 MOV A,R2 XCH A,R1;R1与R2中的内容交换 XCH A,R4 MOV R1,A;存负数 XCH A,R4 XCH A,R1;R1与R2中的内容交换 INC R2;调整负数地址指针 SJMP LOOP1;转循坏控制,POSI:INC 70H;正数个数加1 MOV R1,A;存正数 INC R1;调整正数地址指针 SJMP LOOP1ZERO:INC 72H;零的个数加1LOOP1:INC R0;调整源数地址指针 DJNZ R3,LOOP;未送完,继续 SJMP$END,查表就是把事先计算或测得的数据按照一定的顺序编制成表格存放在存储器中,然后根据
9、输入的数据,从表格中查出所需的结果。,4.2.4 查表程序设计,片内RAM的EGA单元中有一个大写的英文字母,要求将此字母在英文字母表中的位置送入片内的COUNT单元中,如EGA单元中字母为I时,则COUNT单元中需送入数字9。,例 4.6,如果将26个英文字母按照顺序编成一个表,通过查表法得到一个字母与EGA单元中的字母比较,若不相等再查,同时记录查表的次数。查完后,将记录次数送COUNT单元。,分析,ORG 1000HEGA EQU 50HCOUNT EQU 60H MOV COUNT,#00H MOV A,#16;调整地址LOOP:PUSH A MOVC A,A+PC;查表 CJNZ A
10、,EGA,NF;所查字母与EGA中字母比较 SJMP LAST;相等则转到LASTNF:POP A INC A;调整地址 INC COUNT;记数值加1 SJMP LOOP;继续查LAST:INC COUNT;记数值加1 SJMP$;等待ALPT:DBA,B,Y,Z,求y=n!(n=0,1,9),已知n的值在片内RAM的NUM单元中,求得的y 值用BCD码表示且存放到片内GETY开始的单元中。,例 4.6,分析:可将函数值列成表,采用查表法求y=n!当n=9时,y=362880H,需要三个单元存放结果。设每个n对应的y值都用3个单元来存放,则y值在表格中的首地址的计算公式为:y地址=函数表首址
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 系列 单片机 程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6512379.html