单片微型计算机C第8-9讲(机械)_第1页
单片微型计算机C第8-9讲(机械)_第2页
单片微型计算机C第8-9讲(机械)_第3页
单片微型计算机C第8-9讲(机械)_第4页
单片微型计算机C第8-9讲(机械)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、上节内容回顾 MCS51单片机的指令数据传送类(28条)算术运算类(24条)逻辑运算类(25条)控制转移类(17条)位操作类(17条)练习 已知累加器A当前的内容为23H,进位位C为1,执行下列指令后,累加器A和进位位C各为多少?ANL A,#7FHORL A,#35XRL A,#FFHRLC ACJNE A,#40H,AAINC ASJMP BBAA:ADD A,#23HBB:SJMP $第8-9讲教学目的和要求【教学目标】通过讲述MCS-51单片机的汇编语言程序设计的基本步骤、基本方法,使学生对指令系统有进一步的认识和理解,同时使得学生掌握使用汇编语言进行程序设计的方法,通过实例加以巩固。

2、【教学重点】单片机程序设计的基本方法; 查表、差值运算、译码等简单程序设计方法;【教学难点】如何将实际问题转换成单片机能识别和解决的问题第五章 MCS-51的汇编语言程序设计5.1 汇编语言程序设计概述语言的发展机器语言(Machine Language):二进制表示指令和数据,能被机器直接识别的计算机语言。速度快、占用内存少。汇编语言(Assembly Language):采用助记符表示的程序设计语言。内存空间少,而且执行速度快,但移植性差。高级语言(High Level Language):高级语言则是面向用户的语言,移植性较好。MCS51单片机支持用汇编语言和C高级语言进行编程,在单片机

3、内部最终转换成机器语言存储和运行。 源程序的编辑与汇编p解决实际问题时,往往需要根据业务逻辑和支持的指令,完成程序的编写、调试、编译、烧制等过程。汇编语言程序的结构 汇编语言程序的四分段书写格式标号字段 操作码字段操作数字段注释字段START:MOV A,#00H;0AMOV R1,#10;10R1MOV R2,#00000011B ;3R2LOOP:ADD A,R2;(A)+(R2) ADJNZ R1,LOOP;R1减1,若不为0则循环NOP;延迟1个机器周期HERE:SJMP HERE;原地跳转END;程序结束5.1.1 指令的格式注意:标号:表示该指令所在的符号地址,一般由字母和数字组成

4、,第一位为字母,其余位为字母、数字任选。操作助记符不能缺少;操作数个数可为:1、2、3个,根据指令本身而定;2个操作数的指令,目的操作数在左边;一般格式标号: :操作助记符 目的操作数, ,源操作数; ;注释汇编程序设计中,每一行书写一条指令。指令的补充说明p所有的符号均为英文符号,尤其注意常用的”,”、”;”。若书写错误,编译程序将提示“不能识别的符号”。p标号的书写标号后必须跟冒号。标号最大支持18个字符,且必须以字母开头同一标号在一个程序中只能定义一次不允许用系统保留字作为标号一般只有别的指令需要访问的语句才有标号汇编时,汇编程序自动将标号转换成地址。指令的补充说明p立即数和直接地址的书

5、写若是十进制数,后缀可无,也可以写D;其他进制必须带后缀。二进制B、八进制O、十六进制H。可以是字符串,如A、YU,编译时自动转换成其ASCII可以是指令的标号p美元符号$的使用。$符号表示当前地址,一般在程序结束或原地跳转时使用,以下两条指令等价:HERE:SJMP HERESJMP $5.1.2 伪指令 伪指令,也称汇编命令。仅对汇编过程进行指示,方便汇编程序将代码转换成机器代码。 伪指令无对应的单片机可执行代码 伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编,分配存储空间等功能。 快速理解伪指令:如分配存储空间伪指令,汇编程序在编译时,根据伪指令的指示,完成存储空间的划分、初

6、值的置入等工作。无需单片机去执行。5.1.2.1 ORG伪指令n起始地址设定伪指令n用于指定接下来指令在ROM中的存放位置n使用格式:ORG 16位地址(以四位十六进制方式书写)n举例:有如下指令段 ORG 2000H START:MOV A,#00Hp注意ORG可以多次使用使用顺序必须由小到大ROMMOV A,#00H74H2000H00HORG 伪指令ORG 2500HORG 2000HORG 3000HORG 2000HORG 2500HORG 3000H错误的书写方式正确的书写方式5.1.2.2 END伪指令n汇编终止伪指令n用于告诉汇编程序,将某一段源程序翻译成机器指令的工作到此为止

7、。后面的指令将忽略。n在整个源程序的最后添加END语句。n举例MOV A,#12HMOV A,#23HENDMOV A,#45HROMMOV A,#12H74H12H74H23HMOV A,#23H5.1.2.3 DB 伪指令 定义字节数据表伪指令 用于从指定地址开始,在ROM的连续单元中定义字节数据 格式:标号: DB 字节数据表。用”,”分割表中的多个数 举例:ORG 1000HTABLE:DB 20H,32,A,8p编译时:十进制等自动转换成十六进制字符转换成ASCII码ROM1000H20H20H41H38H1001H1002H1003HASCII码表09 :30H39HAZ:41H5

8、AHaz :61H7AH5.1.2.4 DW 伪指令 定义字数据表伪指令 从指定地址开始,在ROM的连续单元中定义16位的数据字 格式:标号: DW 字数据表。用”,”分割表中的多个字 举例:ORG 2000HTABLE:DW 1246H,10ROM2000H12H46H00H0AH2001H2002H2003H5.1.2.5 EQU 伪指令 用于给标号赋值 赋值后,后续程序中可用此标号表示对应的数据 格式:标号 EQU 数据或汇编表达式。 举例:LEN EQU 10*3SUM EQU 21HMOV R7,LEN MOV SUM, A对于常用的常量,采用此种方式后,当该常量发生变化时,无需频繁

9、更改主程序内容,只需修改之前的赋值语句即可。5.1.2.6 BIT 伪指令 将位地址定义成为符号名指令 赋值后,后续程序中位地址可直接用符号名符号名表示,增加程序的可读性。 格式:符号名 BIT 位地址表达式。 举例:ST BIT P1.0 ;将P1.0的位地址赋给符号名STCF BIT 0D7H ;将位地址为D7H的位定义为符号名p注意:用BIT定义的“符号名”一经定义便不能重新定义和改变5.2汇编语言程序设计步骤 分析问题根据任务的要求,确定程序的功能要求、输入输出、解决步骤等问题。 算法设计将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度)汇编语言程序设计步骤 流程

10、描述将算法的内容用流程图的形式表示,更加直观。典型外设查询程序流程汇编语言程序设计步骤 分配内存等资源将片内RAM资源合理分配,把内存区、堆栈区、各种缓冲区进行合理分配。确定每个区域的首地址,便于编程使用。 程序的编写与调试根据以上工作,结合MCS51单片机的指令系统,完成源代码的编写,并上机调试,考查各种边界情况。源程序的编辑 依据汇编语言规则 用好伪指令 符号不用中文 SJMP $ 用于调试 以 .ASM存盘 ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJN

11、Z R7,LOOP SJMP $ ENDROMLJMP 0040H02H0000H00H40H7FH0040H10HMOV R7,#1680H004BHFEHSJMP $程序汇编及连接p源程序的汇编n 汇编源程序转为目标程序的过程叫汇编n 汇编通常在Windows下的集成开发环境完成n 用A51.EXE汇编生成.OBJ、.LIB及.LSTp目标程序的连接n.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件n绝对地址目标文件可以用于仿真器调试n调试无误的目标文件用OH51.EXE转换为.HEX文件n.HEX文件经编程器写入单片机存储器注意事项n强化模块观念p程序模块(主程序模块、

12、各种子程序模块)p模块化优点:分块设计、便于阅读、调试方便n采用循环和子程序p使程序占用空间减少、结构清晰p循环初值和结束条件,避免“死机”现象p子程序的现场保护(注意栈平衡、寄存器内容)5.3汇编语言程序基本结构汇编语言程序主要包含四种结构p顺序结构p分支结构p循环结构p子程序结构5.3.1 顺序结构 指令执行时,其执行顺序按照指令在存储器中的存放顺序进行的。开始语句1语句n结束 【特点】顺序执行,程序通常简单;无分支、无循环、无转移图中无判断框;顺序结构举例1 数据传送:内部RAM的2AH2EH单元中存储的数据如图所示。试编写程序实现图示的数据传送结果。2EH78H56H34H12H2DH

13、2CH2BH00H2AHACC2EH56H34H12H00H2DH2CH2BH00H2AHACC78H方法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

14、ACC78H方法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个机器周期2EH78H56H34H12H2DH2CH2BH00H2AHACC00H12H00H34H12H56H34H78H56H2EH56H34H12H00H2DH2CH2BH00H2AHACC78H顺序结构举例2 码制转换:片内RAM的21H单元存放一个十进制数据十位的ASCII

15、码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。 20H36H34H21H22Hp数字字符的ASCII码为30H+数p如字符3的ASCII码为33H。p右侧表示存放的为数据64。64H程序ASCII到压缩BCD码的转换 分析p取21H单元低位数据,移至高位p取22H单元内容,去掉高位p上述结果组合,传送至20H单元20H36H34H21H22H64H程序ASCII到压缩BCD码的转换程序ORG 0040HSTART: MOV A,21H ;取十位ASCII码ANL A,#0FH ;保留低半字节SWAP A ;移至高半字节MOV 20H,A ;存入

16、20H单元MOV A,22H ;取个位ASCII码ANL A,#0FH ;保留低半字节ORL 20H,A ;合并到结果单元SJMP $END20H36H34H21H22HACC36H06H60H60H34H04H64H20HX21H程序平方表区顺序结构举例3 查表程序:有一变量存放在片内RAM的20H单元,其取值范围为:00H05H。要求编制一段程序,使用查表指令,根据变量值求其平方值,并存入片内RAM的21H单元。 X2开始A (21H)(20H)A表格首地址DPTRMOVC A,A+DPTR结束查表操作程序 ORG 1000HSTART:MOV DPTR,#TABLE MOV A,20H

17、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结束练习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+

18、4TABLE+5RL APUSH ACCPOP ACCMOV DPTR,#TABLERL APUSH ACCMOVC A,A+DPTRMOV B,APOP ACCINC AMOVC A,A+DPTR5.3.2 分支结构p指令执行时,根据不同的情况执行不同的程序段。单分支 双分支 多分支单分支结构 设累加器A中存储有符号数的原码,编程转换成补码开始保存A最高位结束最高位为0NA数据位取反+1恢复符号位YCMPT:JNB Acc.7, RETURN MOV C,Acc.7 CPL A ADD A,#1 MOV Acc.7,CRETURN:SJMP $ END双分支结构n设变量x以补码的形式存放在片

19、内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 DONE5.3.3 循环结构p按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构。例1 延时程序 编写一段延时50ms的程序p若晶振频率为12MHz,则一个机器周期为1s,延时50ms,则程序的执行时间为50000个机器周期。p立即数取指在0255之间,可考虑200*250=50000。p需要用到减1,

20、结果不为0则重复的指令。p执行一条DJNZ指令需要2个机器周期,即 2s。采用循环计数法实现延时,需要用到双重循环。延时程序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例2 未知次数的循环将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buffer的存储区域内,直到发现$ 字符停止传送。data?H?Hdata+1

21、内部RAM$?bufferbuffer+1外部RAM问题何时终止传送?对取出的数进行与S进行比较,判断是否相等。用CJNE 例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 5.4 子程序及其调用p在实际应用中,经常会遇到一

22、些带有通用性的问题,在一个程序中可能要使用多次。这时可以将其设计成通用的子程序供随时调用,减少代码冗余。n一个程序中可以多次调用一个子程序n多个程序可以调用一个子程序n子程序可以调用子程序,最多支持8级p调用子程序时,单片机能自动保存PC内容,遇RET返回时,能自动恢复PC程序1子程序RET程序2子程序结构 子程序编写完成后,使用pACALL 函数名(短距离调用)pLCALL 函数名(整个ROM区调用) 此处的函数名,实际上是一个标号,编译后形成具体的地址。n 子程序的处理过程中,可能要影响PSW、ACC,以及其他的一些功能寄存器,若这些影响是子程序功能的一部分,则无需保护;否则,一定要保护现

23、场,使得主程序得以正确执行。保护现场子程序处理恢复现场RET子程序函数名:通过堆栈进行现场的保护SUB1:PUSH PSW ;保护现场 PUSH ACC ; PUSH B ; MOV PSW,#10H ;换当前工作寄存器组 POP B ;恢复现场 POP ACC ; POP PSW ; RET注意:保护和恢复的工作在子程序中进行。保护与恢复的顺序要对应。子程序结构 子程序参数的传递。p调用子程序时,语句中无法携带子程序运行所需的参数。p明确子程序的功能后,对子程序使用的参数,应在调用之前完成数据的赋值等工作。p类似乘法指令MUL AB,必须在此指令之前将AB赋值,运算才有意义。保护现场子程序处

24、理恢复现场RET子程序函数名:子程序举例n编写程序,实现c=a2+b2 。设a,b,c分别存于内部RAM的30H,31H,32H三个单元中 如何求数的平方 MUL AB 左移 查表开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H方法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

25、AB; POP PSW RET开始调用求平方子程序结束a2R1(31H)A(30H)AA+R1A调用求平方子程序A32H方法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方法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调用求平方子程序A32H5.5 综合举例 设有一串字符,依次存放在内部RAM从30H单元开始的连续单元中,该字符串以0AH为结束标识(0AH不计

温馨提示

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

评论

0/150

提交评论