《单片微型计算机c第89讲机械》由会员分享,可在线阅读,更多相关《单片微型计算机c第89讲机械(61页珍藏版)》请在金锄头文库上搜索。
1、Microcontrollers Principle and ApplicationsMicrocontrollers Principle and ApplicationsC C单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1 1上节内容回顾MCS51单片机的指令数据传送类(28条)算术运算类(24条)逻辑运算类(25条)控制转移类(17条)位操作类(17条)单片微型计算机原理及应用单片微型计算机原理及应用C C
2、Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2 2练习已知累加器A当前的内容为23H,进位位C为1,执行下列指令后,累加器A和进位位C各为多少?ANL A,#7FHORL A,#35XRL A,#FFHRLC ACJNE A,#40H,AAINC ASJMP BBAA:ADD A,#23HBB:SJMP $单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontro
3、llers Principle and Applications3 3第8-9讲教学目的和要求【教学目标】通过讲述MCS-51单片机的汇编语言程序设计的基本步骤、基本方法,使学生对指令系统有进一步的认识和理解,同时使得学生掌握使用汇编语言进行程序设计的方法,通过实例加以巩固。【教学重点】单片机程序设计的基本方法; 查表、差值运算、译码等简单程序设计方法;【教学难点】如何将实际问题转换成单片机能识别和解决的问题单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Princi
4、ple and Applications4 4第五章 MCS-51的汇编语言程序设计单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5 55.1 汇编语言程序设计概述语言的发展机器语言(Machine Language):二进制表示指令和数据,能被机器直接识别的计算机语言。速度快、占用内存少。汇编语言(Assembly Language):采用助记符表示的程序设计语言。内存空间少,而且执行速度快,但移植性差。高级语言
5、(High Level Language):高级语言则是面向用户的语言,移植性较好。MCS51单片机支持用汇编语言和C高级语言进行编程,在单片机内部最终转换成机器语言存储和运行。 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications6 6源程序的编辑与汇编p解决实际问题时,往往需要根据业务逻辑和支持的指令,完成程序的编写、调试、编译、烧制等过程。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontr
6、ollers Principle and ApplicationsMicrocontrollers Principle and Applications7 7汇编语言程序的结构汇编语言程序的四分段书写格式单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications8 85.1.1 指令的格式注意:标号:表示该指令所在的符号地址,一般由字母和数字组成,第一位为字母,其余位为字母、数字任选。操作助记符不能缺少;操作数个数可为:1、2
7、、3个,根据指令本身而定;2个操作数的指令,目的操作数在左边;一般格式标号: :操作助记符 目的操作数, ,源操作数; ;注释汇编程序设计中,每一行书写一条指令。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications9 9指令的补充说明p所有的符号均为英文符号,尤其注意常用的”,”、”;”。若书写错误,编译程序将提示“不能识别的符号”。p标号的书写标号后必须跟冒号。标号最大支持18个字符,且必须以字母开头同一标号在一个程序
8、中只能定义一次不允许用系统保留字作为标号一般只有别的指令需要访问的语句才有标号汇编时,汇编程序自动将标号转换成地址。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1010指令的补充说明p立即数和直接地址的书写若是十进制数,后缀可无,也可以写D;其他进制必须带后缀。二进制B、八进制O、十六进制H。可以是字符串,如A、YU,编译时自动转换成其ASCII可以是指令的标号p美元符号$的使用。$符号表示当前地址,一般在程序结
9、束或原地跳转时使用,以下两条指令等价:HERE:SJMP HERESJMP $单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications11115.1.2 伪指令伪指令,也称汇编命令。仅对汇编过程进行指示,方便汇编程序将代码转换成机器代码。伪指令无对应的单片机可执行代码伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编,分配存储空间等功能。快速理解伪指令:如分配存储空间伪指令,汇编程序在编译时,根据伪指令的指示,完成存
10、储空间的划分、初值的置入等工作。无需单片机去执行。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications12125.1.2.1 ORG伪指令n起始地址设定伪指令n用于指定接下来指令在ROM中的存放位置n使用格式:ORG 16位地址(以四位十六进制方式书写)n举例:有如下指令段 ORG 2000H START:MOV A,#00Hp注意ORG可以多次使用使用顺序必须由小到大ROMMOV A,#00H74H2000H00H单片
11、微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1313ORG 伪指令ORG 2500HORG 2000HORG 3000HORG 2000HORG 2500HORG 3000H错误的书写方式正确的书写方式单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applica
12、tions14145.1.2.2 END伪指令n汇编终止伪指令n用于告诉汇编程序,将某一段源程序翻译成机器指令的工作到此为止。后面的指令将忽略。n在整个源程序的最后添加END语句。n举例MOV A,#12HMOV A,#23HENDMOV A,#45HROMMOV A,#12H74H12H74H23HMOV A,#23H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications15155.1.2.3 DB 伪指令定义字节数据表
13、伪指令用于从指定地址开始,在ROM的连续单元中定义字节数据格式:标号: DB 字节数据表。用”,”分割表中的多个数举例:ORG 1000HTABLE:DB 20H,32,A,8p编译时:十进制等自动转换成十六进制字符转换成ASCII码ROM1000H20H20H41H38H1001H1002H1003H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications1616ASCII码表09 :30H39HAZ:41H5AHaz :
14、61H7AH单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications17175.1.2.4 DW 伪指令定义字数据表伪指令从指定地址开始,在ROM的连续单元中定义16位的数据字格式:标号: DW 字数据表。用”,”分割表中的多个字举例:ORG 2000HTABLE:DW 1246H,10ROM2000H12H46H00H0AH2001H2002H2003H单片微型计算机原理及应用单片微型计算机原理及应用C C Microco
15、ntrollers Principle and ApplicationsMicrocontrollers Principle and Applications18185.1.2.5 EQU 伪指令用于给标号赋值赋值后,后续程序中可用此标号表示对应的数据格式:标号 EQU 数据或汇编表达式。举例:LEN EQU 10*3SUM EQU 21HMOV R7,LEN MOV SUM, A对于常用的常量,采用此种方式后,当该常量发生变化时,无需频繁更改主程序内容,只需修改之前的赋值语句即可。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle a
16、nd ApplicationsMicrocontrollers Principle and Applications19195.1.2.6 BIT 伪指令将位地址定义成为符号名指令赋值后,后续程序中位地址可直接用符号名符号名表示,增加程序的可读性。格式:符号名 BIT 位地址表达式。举例:ST BIT P1.0 ;将P1.0的位地址赋给符号名STCF BIT 0D7H ;将位地址为D7H的位定义为符号名p注意:用BIT定义的“符号名”一经定义便不能重新定义和改变单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and Applicat
17、ionsMicrocontrollers Principle and Applications20205.2汇编语言程序设计步骤分析问题根据任务的要求,确定程序的功能要求、输入输出、解决步骤等问题。算法设计将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度)单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2121汇编语言程序设计步骤流程描述将算法的内容用流程图的形式表示,更加直观。典型外设查询程序
18、流程单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2222汇编语言程序设计步骤分配内存等资源将片内RAM资源合理分配,把内存区、堆栈区、各种缓冲区进行合理分配。确定每个区域的首地址,便于编程使用。程序的编写与调试根据以上工作,结合MCS51单片机的指令系统,完成源代码的编写,并上机调试,考查各种边界情况。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle a
19、nd ApplicationsMicrocontrollers Principle and Applications2323源程序的编辑依据汇编语言规则用好伪指令符号不用中文SJMP $ 用于调试以 .ASM存盘 ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ ENDROMLJMP 0040H02H0000H00H40H7FH0040H10HMOV R7,#1680H004BHFEHSJMP $单片微型计算机原理及应用单片微型计
20、算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2424程序汇编及连接p源程序的汇编n汇编源程序转为目标程序的过程叫汇编n汇编通常在Windows下的集成开发环境完成n用A51.EXE汇编生成.OBJ、.LIB及.LSTp目标程序的连接n.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件n绝对地址目标文件可以用于仿真器调试n调试无误的目标文件用OH51.EXE转换为.HEX文件n.HEX文件经编程器写入单片机存储器单片微型计算机原理及
21、应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2525注意事项n强化模块观念p程序模块(主程序模块、各种子程序模块)p模块化优点:分块设计、便于阅读、调试方便n采用循环和子程序p使程序占用空间减少、结构清晰p循环初值和结束条件,避免“死机”现象p子程序的现场保护(注意栈平衡、寄存器内容)单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicr
22、ocontrollers Principle and Applications26265.3汇编语言程序基本结构汇编语言程序主要包含四种结构p顺序结构p分支结构p循环结构p子程序结构单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications27275.3.1 顺序结构指令执行时,其执行顺序按照指令在存储器中的存放顺序进行的。开始语句1语句n结束 【特点】顺序执行,程序通常简单;无分支、无循环、无转移图中无判断框;单片微型计算机
23、原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications2828顺序结构举例1数据传送:内部RAM的2AH2EH单元中存储的数据如图所示。试编写程序实现图示的数据传送结果。2EH78H56H34H12H2DH2CH2BH00H2AHACC2EH56H34H12H00H2DH2CH2BH00H2AHACC78H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and Applica
24、tionsMicrocontrollers Principle and Applications2929方法1内部RAM的2AH2EH单元内容传递至2BF2EF、A中。MOV A,2EH ;2字节,1个机器周期MOV 2EH,2DH ;3字节,2个机器周期MOV 2DH,2CH ;3字节,2个机器周期MOV 2CH,2BH ;3字节,2个机器周期MOV 2BH,#00H ;3字节,2个机器周期使用14个字节的指令代码,执行时间为9个机器周期2EH78H56H34H12H2DH2CH2BH00H2AHACC78H56H34H12H00H2EH56H34H12H00H2DH2CH2BH00H2AH
25、ACC78H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications3030方法2内部RAM的2AH2EH单元内容传递至2BF2EF、A中。CLR A ;1字节,1个机器周期XCH A,2BH ;2字节,1个机器周期XCH A,2CH ;2字节,1个机器周期XCH A,2DH ;2字节,1个机器周期XCH A,2EH ;2字节,1个机器周期使用9个字节的指令代码,执行时间为5个机器周期2EH78H56H34H12H2DH2C
26、H2BH00H2AHACC00H12H00H34H12H56H34H78H56H2EH56H34H12H00H2DH2CH2BH00H2AHACC78H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications3131顺序结构举例2码制转换:片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。 20H36H34H21H22Hp数
27、字字符的ASCII码为30H+数p如字符3的ASCII码为33H。p右侧表示存放的为数据64。64H程序单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications3232ASCII到压缩BCD码的转换分析p取21H单元低位数据,移至高位p取22H单元内容,去掉高位p上述结果组合,传送至20H单元20H36H34H21H22H64H程序单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Pr
28、inciple and ApplicationsMicrocontrollers Principle and Applications3333ASCII到压缩BCD码的转换程序ORG 0040HSTART: MOV A,21H ;取十位ASCII码ANL A,#0FH ;保留低半字节SWAP A ;移至高半字节MOV 20H,A ;存入20H单元MOV A,22H ;取个位ASCII码ANL A,#0FH ;保留低半字节ORL 20H,A ;合并到结果单元SJMP $END20H36H34H21H22HACC36H06H60H60H34H04H64H单片微型计算机原理及应用单片微型计算机原理及
29、应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications343420HX21H程序平方表区顺序结构举例3查表程序:有一变量存放在片内RAM的20H单元,其取值范围为:00H05H。要求编制一段程序,使用查表指令,根据变量值求其平方值,并存入片内RAM的21H单元。 X2开始A (21H)(20H)A表格首地址DPTRMOVC A,A+DPTR结束单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and App
30、licationsMicrocontrollers Principle and Applications3535查表操作程序 ORG 1000HSTART:MOV DPTR,#TABLE MOV A,20H MOVC A,A+DPTR MOV 21H,A SJMP $ ORG 2000HTABLE:DB 00,01,04,09,16,25 END 开始A (21H)(20H)A表格首地址DPTRMOVC A,A+DPTR结束单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontroller
31、s Principle and Applications3636练习n根据累加器A的值(0 7FH)查平方表,求平方值,结果放在BA中。TABLE:DW 0000H,0001H,0004H,0009H DW 0010H,0019H,MOV DPTR,#TABLEMOVC A,A+DPTRMOV B,AINC AMOVC A,A+DPTRTABLE00H00H00H01HTABLE+100HROM04HTABLE+2TABLE+3TABLE+4TABLE+5RL APUSH ACCPOP ACCMOV DPTR,#TABLERL APUSH ACCMOVC A,A+DPTRMOV B,APOP
32、ACCINC AMOVC A,A+DPTR单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications37375.3.2 分支结构p指令执行时,根据不同的情况执行不同的程序段。单分支 双分支 多分支单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications383
33、8单分支结构设累加器A中存储有符号数的原码,编程转换成补码开始保存A最高位结束最高位为0NA数据位取反+1恢复符号位YCMPT:JNB Acc.7, RETURN MOV C,Acc.7 CPL A ADD A,#1 MOV Acc.7,CRETURN:SJMP $ END单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications3939双分支结构n设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:p当x0
34、时,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 Applications42425.3.3 循环结构p按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构。单片微型计算机原理及应用单片微型计算
35、机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications4343例1 延时程序编写一段延时50ms的程序p若晶振频率为12MHz,则一个机器周期为1s,延时50ms,则程序的执行时间为50000个机器周期。p立即数取指在0255之间,可考虑200*250=50000。p需要用到减1,结果不为0则重复的指令。p执行一条DJNZ指令需要2个机器周期,即 2s。采用循环计数法实现延时,需要用到双重循环。单片微型计算机原理及应用单片微型计算机原理及应用C C Micr
36、ocontrollers Principle and ApplicationsMicrocontrollers Principle and Applications4444延时程序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 a
37、nd ApplicationsMicrocontrollers Principle and Applications4545例2 未知次数的循环将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buffer的存储区域内,直到发现$ 字符停止传送。data?H?Hdata+1内部RAM$?bufferbuffer+1外部RAM问题何时终止传送?对取出的数进行与S进行比较,判断是否相等。用CJNE 单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Prin
38、ciple and Applications4646例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 Ap
39、plicationsMicrocontrollers Principle and Applications47475.4 子程序及其调用p在实际应用中,经常会遇到一些带有通用性的问题,在一个程序中可能要使用多次。这时可以将其设计成通用的子程序供随时调用,减少代码冗余。n一个程序中可以多次调用一个子程序n多个程序可以调用一个子程序n子程序可以调用子程序,最多支持8级p调用子程序时,单片机能自动保存PC内容,遇RET返回时,能自动恢复PC程序1子程序RET程序2单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and Applicatio
40、nsMicrocontrollers Principle and Applications4848子程序结构子程序编写完成后,使用pACALL 函数名(短距离调用)pLCALL 函数名(整个ROM区调用)此处的函数名,实际上是一个标号,编译后形成具体的地址。n子程序的处理过程中,可能要影响PSW、ACC,以及其他的一些功能寄存器,若这些影响是子程序功能的一部分,则无需保护;否则,一定要保护现场,使得主程序得以正确执行。保护现场子程序处理恢复现场RET子程序函数名:单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and Applica
41、tionsMicrocontrollers Principle and Applications4949通过堆栈进行现场的保护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 Appli
42、cations5050子程序结构子程序参数的传递。p调用子程序时,语句中无法携带子程序运行所需的参数。p明确子程序的功能后,对子程序使用的参数,应在调用之前完成数据的赋值等工作。p类似乘法指令MUL AB,必须在此指令之前将AB赋值,运算才有意义。保护现场子程序处理恢复现场RET子程序函数名:单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5151子程序举例n编写程序,实现c=a2+b2 。设a,b,c分别存于内部R
43、AM的30H,31H,32H三个单元中如何求数的平方MUL AB左移查表开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5252方法1:直接相乘START:MOV A,30H ;取a ACALL SQR ;调用乘法 MOV R1,A ;a2 暂存于R1中 MOV A,31H ;取b ACALL SQR ;调用查平方表 ADD A
44、,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 Applications5353方法2:左移1次START:MOV A,30H ;取a ACALL SQR ;调用乘法 MOV R1,A ;a2 暂
45、存于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 Applications5454方法3:查表START:MOV A,30H ;取a
46、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 App
47、licationsMicrocontrollers Principle and Applications55555.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 Microc
48、ontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5656改进 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 Microco
49、ntrollers Principle and ApplicationsMicrocontrollers Principle and Applications5757综合举例设在30H和31H单元中各有一个8位数据: (30H)=x7x6x5x4x3x2x1x0 (3lH)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,即 (40H)=y2y1y0x4x3x2x1x0。n分析:n从最终结果来看,40H单元的数与30H单元的数较为接近,可以30H 单元数据作为初始操作数据。n30H单元最高3位无用,可先去掉。得000
50、x4x3x2x1x0n将31H单元高低位交换,可得到y3y2y1y0y7y6y5y4 ,左移1位可得y2y1y0y7y6y5y4y3 ,再去掉低5位,即y2y1y000000。再拼装即可。单片微型计算机原理及应用单片微型计算机原理及应用C C Microcontrollers Principle and ApplicationsMicrocontrollers Principle and Applications5858综合举例设在30H和31H单元中各有一个8位数据: (30H)=x7x6x5x4x3x2x1x0 (3lH)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并
51、从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,即 (40H)=y2y1y0x4x3x2x1x0。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 Applications5959本章小结1、伪指令:ORG、DB、DW、EQU、END等。2、程序设计步骤。3、常用程序结构:顺序结构、分支结构、循环结构 (1)顺序程序:直线程序或简单程序单重分支 (2)分支程序 (3)循环程序: 构成:初始化、循环体、控制变量的修改、循环次数的控制。本节作业P79 第7题P80 第8、10题