资源描述
C C C C单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1 1上节内容回顾MCS51单片机的指令数据传送类(28条)算术运算类(24条)逻辑运算类(25条)控制转移类(17条)位操作类(17条)单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2 2第8-9讲教学目的和要求【教学目标】通过讲述MCS-51单片机的汇编语言程序设计的基本步骤、基本方法,使学生对指令系统有进一步的认识和理解,同时使得学生掌握使用汇编语言进行程序设计的方法,通过实例加以巩固。【教学重点】单片机程序设计的基本方法;查表、差值运算、译码等简单程序设计方法;【教学难点】如何将实际问题转换成单片机能识别和解决的问题单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications3 3第五章 MCS-51的汇编语言程序设计5.2 汇编语言程序设计步骤5.1 汇编语言程序设计概述5.4 子程序及其调用5.3 汇编程序的基本结构5.5 汇编程序设计综合举例单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications4 45.3.2 分支结构p指令执行时,根据不同的情况执行不同的程序段。单分支 双分支 多分支单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5 5双分支结构n设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:p当x0时,y=x;p当x=0时,y=20H;p当x0时,y=x;p当x=0时,y=20H;p当x0,转结束MOV A,#05H ;x 0处理ADD A,30H MOV 30H,A ;X+05H送YSJMP DONE单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications8 85.3.3 循环结构p按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications9 9例1 延时程序编写一段延时50ms的程序p若晶振频率为12MHz,则一个机器周期为1s,延时50ms,则程序的执行时间为50000个机器周期。p立即数取指在0255之间,可考虑200*250=50000。p需要用到减1,结果不为0则重复的指令。p执行一条DJNZ指令需要2个机器周期,即 2s。采用循环计数法实现延时,需要用到双重循环。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1010延时程序DEL:MOV R7,#200 ;1 sDEL1:NOP ;1 sDEL1:MOV R6,#?;1 s NOP ;1 sDEL2:DJNZ R6,DEL2 ;2s DJNZ R7,DEL1;2s DEL1:MOV R6,#123 ;1 s共计(21232 2)200+1 s,即50.001ms单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1111例2 未知次数的循环将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buffer的存储区域内,直到发现$字符停止传送。data?H?Hdata+1内部RAM$?bufferbuffer+1外部RAM问题何时终止传送?对取出的数进行与S进行比较,判断是否相等。用CJNE 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1212例2 未知次数的循环程序将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buffer的存储区域内,直到发现$字符停止传送。MOV R0,#data MOV DPTR,#bufferLOOP:MOV A,R0 CJNE A,$,继续执行地址 结束 LP:MOVX DPTR,A INC R0 INC DPTR SJMP LOOPLP2:SJMP$END SJMP LP2 CJNE A,$,LP 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications13135.4 子程序及其调用p在实际应用中,经常会遇到一些带有通用性的问题,在一个程序中可能要使用多次。这时可以将其设计成通用的子程序供随时调用,减少代码冗余。n一个程序中可以多次调用一个子程序n多个程序可以调用一个子程序n子程序可以调用子程序,最多支持8级p调用子程序时,单片机能自动保存PC内容,遇RET返回时,能自动恢复PC程序1子程序RET程序2单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1414子程序结构子程序编写完成后,使用pACALL 函数名(短距离调用)pLCALL 函数名(整个ROM区调用)此处的函数名,实际上是一个标号,编译后形成具体的地址。n子程序的处理过程中,可能要影响PSW、ACC,以及其他的一些功能寄存器,若这些影响是子程序功能的一部分,则无需保护;否则,一定要保护现场,使得主程序得以正确执行。保护现场子程序处理恢复现场RET子程序函数名:单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1515通过堆栈进行现场的保护SUB1:PUSH PSW ;保护现场 PUSH ACC ;PUSH B ;MOV PSW,#10H;换当前工作寄存器组 POP B ;恢复现场 POP ACC ;POP PSW ;RET注意:保护和恢复的工作在子程序中进行。保护与恢复的顺序要对应。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1616子程序结构子程序参数的传递。p调用子程序时,语句中无法携带子程序运行所需的参数。p明确子程序的功能后,对子程序使用的参数,应在调用之前完成数据的赋值等工作。p类似乘法指令MUL AB,必须在此指令之前将AB赋值,运算才有意义。保护现场子程序处理恢复现场RET子程序函数名:单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1717子程序举例n编写程序,实现c=a2+b2。设a,b,c分别存于内部RAM的30H,31H,32H三个单元中如何求数的平方MUL AB左移查表开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1818方法1:直接相乘START:MOV A,30H ;取a ACALL SQR ;调用乘法 MOV R1,A ;a2 暂存于R1中 MOV A,31H ;取b ACALL SQR ;调用查平方表 ADD A,R1 ;a2+b2 存于A中 MOV 32H,A ;存结果 SJMP$SQR:PUSH PSW MOV B,A MUL AB;POP PSW RET开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1919方法2:左移1次START:MOV A,30H ;取a ACALL SQR ;调用乘法 MOV R1,A ;a2 暂存于R1中 MOV A,31H ;取b ACALL SQR ;调用查平方表 ADD A,R1 ;a2+b2 存于A中 MOV 32H,A ;存结果 SJMP$SQR:PUSH PSW RL A POP PSW RET开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2020方法3:查表START:MOV A,30H ;取a ACALL SQR ;调用乘法 MOV R1,A ;a2 暂存于R1中 MOV A,31H ;取b ACALL SQR ;调用查平方表 ADD A,R1 ;a2+b2 存于A中 MOV 32H,A ;存结果 SJMP$SQR:MOV DPTR,#TAB ;子程序 MOVC A,A+DPTR;RET TAB:DB 0,1,4,9,16,25,36,49,64,81 DB 开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications21215.5 综合举例设有一串字符,依次存放在内部RAM从30H单元开始的连续单元中,该字符串以0AH为结束标识(0AH不计入字符长度),编写程序,统计该字符串个数,将该数放入累加器A中。30H?H?H?H?HRAM0AH个数A MOV R1,#30H MOV R0,#00H LP:CJNE R1,#0AH,NE SJMP EDNE:INC R0 INC R1 SJMP LPED:MOV A,R0 SJMP$END 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2222改进 MOV R1,#30H MOV R0,#00H LP:CJNE R1,#0AH,NE SJMP EDNE:INC R0 INC R1 SJMP LPED:MOV A,R0 SJMP$END MOV R1,#2FH MOV R0,#0FFHNE:INC R0 INC R1 LP:CJNE R1,#0AH,NE MOV A,R0 SJMP$END 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2323综合举例设在30H和31H单元中各有一个8位数据:(30H)=x7x6x5x4x3x2x1x0 (3lH)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,即(40H)=y2y1y0 x4x3x2x1x0。n分析:n从最终结果来看,40H单元的数与30H单元的数较为接近,可以30H 单元数据作为初始操作数据。n30H单元最高3位无用,可先去掉。得000 x4x3x2x1x0n将31H单元高低位交换,可得到y3y2y1y0y7y6y5y4,左移1位可得y2y1y0y7y6y5y4y3,再去掉低5位,即y2y1y000000。再拼装即可。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2424综合举例设在30H和31H单元中各有一个8位数据:(30H)=x7x6x5x4x3x2x1x0 (3lH)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,即(40H)=y2y1y0 x4x3x2x1x0。MOV 40H,30H ANL 40H,#00011111BMOV A,31H SWAP A RL A ANL A,#11100000BORL 40H,A 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2525本章小结1、伪指令:ORG、DB、DW、EQU、END等。2、程序设计步骤。3、常用程序结构:顺序结构、分支结构、循环结构 (1)顺序程序:直线程序或简单程序单重分支 (2)分支程序 (3)循环程序:构成:初始化、循环体、控制变量的修改、循环次数的控制。本节作业P79 第7题P80 第8、10题
展开阅读全文