单片机原理第五章PPT课件_第1页
单片机原理第五章PPT课件_第2页
单片机原理第五章PPT课件_第3页
单片机原理第五章PPT课件_第4页
单片机原理第五章PPT课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章汇编语言程序设计,1程序设计方法2顺序程序3分支程序4循环程序5子程序6算术运算程序,第五章汇编语言程序设计,5-1-2汇编语言程序设计步骤一.分析问题。二.确定算法。三.制定程序流程图:表示程序结构和程序功能四.编制源程序1.合理分配存储器单元和了解I/O接口地址。2.按功能设计程序,明确各程序之间的相互关系。3.用注释行说明程序,便于阅读和修改调试和修改。五.程序调试。,第五章汇编语言程序设计,5-1-3评价程序质量的标准(1)程序的执行时间。(2)程序所占用的内存字节数。(3)程序的逻辑性、可读性。(4)程序的兼容性、可扩展性。(5)程序的可靠性。,5-2顺序程序直线程序又称简单程序,程序走向只有一条路径。例1双字节变补程序(设数据在R4R5中)双字节变补程序(设数据在R4R5中):MOVA,R5;取低字节CPLAADDA,#1;低字节变补MOVR5,AMOVA,R4;取高字节CPLAADDCA,#0;高字节变补MOVR4,A,第五章汇编语言程序设计,第五章汇编语言程序设计,例2压缩式BCD码分解成为单字节BCD码。,MOVR0,#40H;设指针MOVA,R0;取一个字节MOVR2,A;暂存ANLA,#0FH;清0高半字节INCR0MOVR0,A;保存数据个位MOVA,R2SWAPA;十位换到低半字节ANLA,#0FHINCR0MOVR0,A;保存数据十位,十个,第五章汇编语言程序设计,例5-1假设两个双字节无符号数,分别存放在R1R0和R3R2中,高字节在前,低字节在后。编程使两数相加,和数存放回R2R1R0中。ORG1000hCLRCMOVA,R0;取被加数低字节至AADDA,R2;与加数低字节相加MOVR0,A;存和数低字节MOVA,Rl;取被加数高字节至AADDCA,R3;与加数高字节相加MOVRl,A;存和数高字节MOVA,#0ADDCA,#0;加进位位MOVR2,A;存和数进位位SJMP$;原地踏步END,第五章汇编语言程序设计,5-3分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。5-3-1单重分支程序一个判断决策框,程序有两条出路。两种分支结构。例1求R2中补码绝对值,正数不变,负数变补。MOVA,R2JNBACC.7,NEXT;为正数?CPLA;负数变补INCAMOVR2,ANEXT:SJMPNEXT;结束,第五章汇编语言程序设计,5-3-2多重分支程序多次使用条件转移指令,形成两个以上判断框。例5-7设30H单元存放的是一元二次方程ax2+bx+c=0根的判别式=b2-4ac的值。解:值为有符号数,有三种情况,即大于零、等于零、小于零。,第五章汇编语言程序设计,编程:ORG1000HSTART:MOVA,30H;值送AJNBACC.7,YES;=0转YESMOV31H,#0;0转TOWMOV31H,#1;=0有相同实根SJMPFINISHTOW:MOV31H,#2;有两个不同实根FINISH:SJMP$,第五章汇编语言程序设计,5-3-3N路分支程序N路分支程序是根据前面程序运行的结果,可以有N种选择,并能转向其中任一处理程序。,第五章汇编语言程序设计,例5-10128路分支程序。功能:根据R3的值(00H7FH)转到128个目的地址。参考程序:JMPl28:MOVA,R3RLA;(A)2MOVDPTR,#PRGTBL;散转表首址送DPTRJMPA+DPTR;散转PRGTBL:AJMPROUT00AJMPROUT01AJMPROUT7F;128个AJMP指令占256个字节,第五章汇编语言程序设计,5-4循环程序包含多次重复执行的程序段,循环结构使程序紧凑。5-4-1循环程序的导出各个环节任务:一初始化部分循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。二循环体循环工作部分:需多次重复处理的工作。循环控制部分:1.修改指针和循环控制变量。2.检测循环条件:满足循环条件,继续循环,否则退出循环。三.结束部分处理和保存循环结果。1)已知循环次数2)循环次数未知允许0次循环的循环结构:在循环工作之前检测循环条件。,第五章汇编语言程序设计,单重循环简单循环结构:循环体中不套循环。例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。SUM:MOVR0,#42H;设指针MOVA,R0MOVR2,A;循环计数器R2nCLRA;结果单元清0MOVR3,AADD1:INCR0;修改指针ADDA,R0;累加JNCNEXT;处理进位INCR3;有进位,高字节加1NEXT:DJNZR2,ADD1;循环控制:数据是否加完?MOV40H,A;循环结束,保存结果MOV41H,R3RET,第五章汇编语言程序设计,循环控制方法:计数控制、特征标志控制。一.计数控制:设循环计数器,控制循环次数。正计数和倒计数两种方式。例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。MOVDPTR,#2100HMOVXA,DPTRMOVR2,ANEXT:INCDPTRMOVXA,DPTRORLA,#80HJNBP,PASS;判断是否加校验MOVXDPTR,A;是,则加奇校验PASS:DJNZR2,NEXTDONE:SJMPDONE,第五章汇编语言程序设计,二.特征控制:设定循环结束标志实现循环控制。例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。START:MOVDPTR,#LIST;数表首地址MOVB,#127;预置最小值NEXT:MOVXA,DPTR;取数INCDPTR;修改指针CJNEA,#0FFH,NEXT1;是否为数表结尾?SJMPDONE;循环结束NEXT1:CJNEA,B,NEXT2;比较NEXT2:JNCNEXT;Cy=1,则ABMOVB,A;保存较小值SJMPNEXTDONE:SJMPDONE,第五章汇编语言程序设计,5-4-2多重循环循环体中套循环结构。以双重循环使用较多。例:将内存一串单字节无符号数升序排序。步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较N-1次,取数据表中最大值。第二次循环,比较N-2次,取到次大值。第N-1次循环:比较一次,排序结束。,第五章汇编语言程序设计,SORT:MOVA,#N-1;N个数据排序MOVR4,A;外循环次数LOOP1:MOVA,R4MOVR3,A;内循环次数MOVR0,#TAB;设数据指针LOOP2:MOVA,R0;取二数MOVB,AINCR0MOVA,R0CJNEA,B,L1;比较L1:JNCUNEX;AB,不交换DECR0;否则交换数据XCHA,R0INCR0MOVR0,AUNEX:DJNZR3,LOOP2;内循环结束?DJNZR4,LOOP1;外循环结束?RET,第五章汇编语言程序设计,软件延时程序用循环程序将指令重复多次执行,实现软件延时。试计算延时程序的执行时间。源程序指令周期(M)指令执行次数DELAY:MOVR6,#64H1I1:MOVR7,#0FFH1I2:DJNZR7,I22DJNZR6,I12RET2,延时时间计算:(设时钟f=12MHz)t=(11+1100+2100255+2100+21)M=51.3ms,11001002551001,第五章汇编语言程序设计,5.5.2编写循环程序应注意的问题1)循环体前应注意安排循环初始化;2)内外循环间不应相互交叉。,第五章汇编语言程序设计,5-5查表程序例5-19一个十六进制数存放在HEX单元的低四位,将其转换成ASCII码并送回HEX单元。编程:ORG0100HHEXEQU30HHEXASC:MOVA,HEXANLA,#00001111BADDA,#3;变址调整MOVCA,A+PCMOVHEX,A;2字节RET;1字节ASCTAB:DB30H,3lH,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HEND,第五章汇编语言程序设计,5-6子程序设计子程序:能完成某项特定功能的独立程序段,可被反复调用。优点:(1)不必重复书写同样的程序,提高编程效率;(2)程序的逻辑结构简单,便于阅读;(3)缩短了源程序和目标程序的长度,节省了程序存储器空间;(4)使程序模块化、通用化,便于交流,共享资源;(5)便于按某种功能调试。,第五章汇编语言程序设计,1.子程序结构一子程序入口用标号作为子程序名。二调用子程序之前设置好堆栈。三用返回指令RET结束子程序,并保证堆栈栈顶为调用程序的返回地址。四.子程序嵌套须考虑堆栈容量。五.提供足够的调用信息:如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,第五章汇编语言程序设计,2.参数传递入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。(1)子程序无须传递参数,如延时子程序。DELAY:MOVR6,#64HI1:MOVR7,#0FFHI2:DJNZR7,I2DJNZR6,I1RET,第五章汇编语言程序设计,(2)用累加器和工作寄存器传递参数例5-24双字节求补子程序CPLD。解入口参数:(R7R6)=16位数出口参数:(R7R6)=求补后的16位数CPLD:MOVA,R6CPLAADDA,#1MOVR6,AMOVA,R7CPLAADDCA,#0MOVR7,ARET,INCA,第五章汇编语言程序设计,(3)通过操作数地址传递参数例5-25n字节求补子程序。解入口参数:(R0)=求补数低字节指针,(R7)=n-1出口参数:(R0)=求补后的高字节指针CPLN:MOVA,R0CPLAADDA,#1MOVR0,ANEXT:INCR0MOVA,R0CPLAADDCA,#0MOVR0,ADJNZR7,NEXTRET,第五章汇编语言程序设计,(4)通过堆栈传递参数例5-26在HEX单元存放两个十六进制数,将它们分别转换成ASC码并存入ASC和ASC+1单元。解由于要进行两次转换,故可调用查表子程序完成。主程序:MAIN:PUSHHEX;取被转换数LCALLHASC;转子*PCPOPASC;ASCLASCMOVA,HEX;取被转换数SWAPA;处理高四位PUSHACCLCALLHASC;转子程序POPASC+1;ASCHASC+1,第五章汇编语言程序设计,子程序:HASC:DECSPDECSP;修改SP指向HEXPOPACC;弹出HEXANLA,#0FH;屏蔽高四位ADDA,#5;变址调整MOVCA,A+PC;查表PUSHACC;结果入栈(2字节)INCSP;(1字节)INCSP;修改SP指向断点位置(1字节)RET;(1字节)ASCTAB:DB012.7DB89A.F,第五章汇编语言程序设计,3.现场保护推入与弹出的顺序应按“先进后出”,或“后进先出”的顺序,才能保证现场的恢复。例:十翻二子程序的现场保护。BCDCB:PUSHACCPUSHPSWPUSHDPL;保护现场PUSHDPHPOPDPHPOPDPLPOPPSW;恢复现场POPACCRET,第五章汇编语言程序设计,4.设置堆栈调用子程序时,主程序的断点将自动入栈;转子后,现场的保护都要占用堆栈工作单元,尤其多重转子或子程序嵌套,需要使栈区有一定的深度。由于MCS-51的堆栈是由Sp指针组织的内部RAM区,仅有128个地址空间,堆栈并非越深越好,深度要恰当。,第五章汇编语言程序设计,5.6.3子程序的调用及嵌套1子程序调用2子程序嵌套,第五章汇编语言程序设计,2子程序嵌套,断点入栈,断点出栈,第五章汇编语言程序设计,1、计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为12MHz)。MOVR3,#15;1个机器周期DL1:MOVR4,#255;1个机器周期DL2:MOVP1,R3;2个机器周期DJNZR4,DL2;2个机器周期DJNZR3,DL1;2个机器周期RET;2个机器周期,答:15348us析:(22)25512)151215348us,第五章汇编语言程序设计,2、试编写程序,查找在内部RAM的30H50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。,答:START:MOVR0,#30HMOVR2,#21HLOOP:MOVA,R0CJNEA,#0AAH,NEXTMOV51H,#01HLJMPEXITNEXT:INCR0DJNZR2,LOOPMOV51H,#00HEXIT:RET,第五章汇编语言程序设计,3、试编写程序,查找在内部RAM的20H40H单元中出现“00H”这一数据的次数。并将查找到的结果存入41H单元。,答:START:MOV41H,#0MOVR0,#20HMOVR2,#21HLOOP:MOVA,R0JN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论