《单片机》课件第4章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《单片机》课件第4章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课件
- 资源描述:
-
1、第第4 4章章 汇编语言与仿真系统汇编语言与仿真系统 计算机能够识别的是用二进制表示(书写时大多用十六计算机能够识别的是用二进制表示(书写时大多用十六进制)的指令,称为机器码,用机器码编写的程序称为机器进制)的指令,称为机器码,用机器码编写的程序称为机器语言,如:语言,如:“74H 03H”代表代表“MOV A,#03H”这条指令。机这条指令。机器码在书写、记忆、阅读时非常难,用来编写程序很不方便,器码在书写、记忆、阅读时非常难,用来编写程序很不方便,为了解决这一问题,人们采用一些助记符来代替机器码,用为了解决这一问题,人们采用一些助记符来代替机器码,用助记符书写的程序就是汇编语言。汇编语言的
2、缺点是可读性助记符书写的程序就是汇编语言。汇编语言的缺点是可读性比较差,只有熟悉单片机的指令系统,并具有一定的程序设比较差,只有熟悉单片机的指令系统,并具有一定的程序设计经验,才能设计出功能复杂的应用程序。高级语言计经验,才能设计出功能复杂的应用程序。高级语言(High-Level Language)是在汇编语言的基础上用自然语言)是在汇编语言的基础上用自然语言的语句来编写程序的,例如的语句来编写程序的,例如PL/M-51、Franklin C51、MBASIC 51等,程序可读性强,通用性好,适用于不熟悉单等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的用户。但高级语言编写程序的缺点
3、是实时性片机指令系统的用户。但高级语言编写程序的缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。存储器有限的单片机应用系统中没有优势。汇编语言的基本格式是:汇编语言的基本格式是:标号标号:操作码助记符操作码助记符源操作数源操作数,目的操作数目的操作数;注释;注释标号用在指令的前边,是用符号表示的地址,其后必须紧跟标号用在指令的前边,是用符号表示的地址,其后必须紧跟“:”,一般在程序中有特定用途的地方加标号,如转移目标,一般在程序中有特定用途的地方加标号,如转移目标执行指令的前面须加标号,用
4、执行指令的前面须加标号,用DB建立的表格的首个单元须建立的表格的首个单元须加标号,其他地方不必加标号;操作码助记符是每条指令都加标号,其他地方不必加标号;操作码助记符是每条指令都必须有的,代表指令的行为属性,不能省略;源操作数和目必须有的,代表指令的行为属性,不能省略;源操作数和目的操作数根据不同的指令有不同的结构,特殊指令两者可以的操作数根据不同的指令有不同的结构,特殊指令两者可以都没有(如都没有(如NOP);注释是对指令或程序功能的一种解释说);注释是对指令或程序功能的一种解释说明,属于用户自己的行为,勤做注释是一种好的习惯,其日明,属于用户自己的行为,勤做注释是一种好的习惯,其日后的回报
5、远远超出注释时的付出,需要注意的是前面必须加后的回报远远超出注释时的付出,需要注意的是前面必须加“;”。4.1 4.1 伪伪 指指 令令 伪指令不是单片机本身的指令,也没有对应的机器码,伪指令不是单片机本身的指令,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助进行不产生目标程序,不影响程序的执行,仅仅是能够帮助进行汇编的一些指令,但在程序中加入伪指令后,可以使程序结汇编的一些指令,但在程序中加入伪指令后,可以使程序结构分明,调试时参数修改、地址调整等更加方便。不同版本构分明,调试时参数修改、地址调整等更加方便。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用的
6、汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的,下面介绍几种常用的伪指令。法是相似的,下面介绍几种常用的伪指令。(1)汇编起始指令)汇编起始指令 ORG指令格式:指令格式:ORG nn该指令的作用是指明后面程序的起始地址,它总是出现在每该指令的作用是指明后面程序的起始地址,它总是出现在每段源程序的开始。其中段源程序的开始。其中nn为为 16 位地址,汇编时位地址,汇编时nn确定了此确定了此语句后面第一条指令的存放地址,此后的源程序就依次连续语句后面第一条指令的存放地址,此后的源程序就依次连续存放在以后的地址内,直到遇到另一个存放在以后的地址内,直到遇到另一个ORG指令为止。指令为
7、止。【例例4-1】ORG0050HMOVSP,60HMOVR0,2FH上述上述ORG伪指令说明其后面程序的目标代码在存储器中存放伪指令说明其后面程序的目标代码在存储器中存放的起始地址是的起始地址是0050H,即:,即:存储器地址存储器地址 目标程序目标程序0050H75 81 600053H78 2F(2)等值指令)等值指令EQU指令格式:字符名称指令格式:字符名称 EQU 数字或汇编符号数字或汇编符号功能:使指令中的字符名称等价于给定的数字或汇编符号。功能:使指令中的字符名称等价于给定的数字或汇编符号。使用等值指令可给程序的编制、调试、修改带来方便,如果使用等值指令可给程序的编制、调试、修改
8、带来方便,如果在程序中要多次使用某一地址,那么由在程序中要多次使用某一地址,那么由EQU指令将其赋值给指令将其赋值给一个字符名称,一旦需要对其进行变动,就只要改变一个字符名称,一旦需要对其进行变动,就只要改变EQU命命令后面的数字即可,而不需要对程序中涉及该地址的所有指令后面的数字即可,而不需要对程序中涉及该地址的所有指令逐句进行修改(人工逐句进行修改往往还会漏掉该修改的令逐句进行修改(人工逐句进行修改往往还会漏掉该修改的地方,从而引起程序单元使用混乱,产生严重后果)。但要地方,从而引起程序单元使用混乱,产生严重后果)。但要注意,由注意,由EQU等值的字符名称必须先赋值后使用,且在同一等值的字
9、符名称必须先赋值后使用,且在同一个源程序中,同一个标号只能赋值一次。个源程序中,同一个标号只能赋值一次。【例例4-2】8255_PA EQU 8000H即将即将8000H赋值给标号赋值给标号8255_PA,指令中可以这样写:,指令中可以这样写:MOV DPTR,#8255_PA (等同于(等同于 MOV DPTR,#8000H)在读写在读写8255_PA端口时实际上就在读写端口时实际上就在读写8000H端口,如果硬端口,如果硬件线路更改了,件线路更改了,8255_PA 的实际地址变为的实际地址变为6000H了,则只要了,则只要将上述将上述“8255_PA EQU 8000H”中的中的“8000
10、H”改成改成“6000H”即可,程序的其他地方不需调整了,这就是伪指令即可,程序的其他地方不需调整了,这就是伪指令带来的方便之处。带来的方便之处。(3)定义字节指令)定义字节指令 DB指令格式:指令格式:标号标号:DB8位二进制数表位二进制数表功能:把功能:把8位二进制数表依次存入从标号开始的连续的存储位二进制数表依次存入从标号开始的连续的存储单元中,单元中,8位二进制数表是字节常数或用逗号隔开的字节串,位二进制数表是字节常数或用逗号隔开的字节串,也可以是用引号括起来的也可以是用引号括起来的ASCII码字符串(一个码字符串(一个ASCII字符字符相当于一个字节),因此相当于一个字节),因此DB
11、又称建表指令。格式中标号可又称建表指令。格式中标号可有可无,若没有标号,则前面必须用有可无,若没有标号,则前面必须用ORG来定位,否则很难来定位,否则很难查表;有了标号,查表;有了标号,ORG可以省略,可以用标号来查表。可以省略,可以用标号来查表。【例例4-3】ORG1000HTAB:DB56H,45,A,10010101BDB45H,66HORG伪指令指定了标号伪指令指定了标号TAB的地址为的地址为1000H,而,而DB伪指令伪指令是将其后的二进制数表是将其后的二进制数表56H、45、41H、95H依次存放在依次存放在1000H、1001H、1002H、1003H这这4个连续单元之中。个连续
12、单元之中。(4)定义字指令)定义字指令 W指令格式:指令格式:标号标号:DW 16 位数据表位数据表该指令的功能与该指令的功能与DB相似,区别仅在于从指定地址开始存放相似,区别仅在于从指定地址开始存放的是指令中的的是指令中的16位数据,而不是字节串。每个位数据,而不是字节串。每个16位数据要占位数据要占两个存储单元,高两个存储单元,高8位先存,低位先存,低8位后存,这和位后存,这和MCS-51指令指令中的中的16位数据存放顺序是一致的。位数据存放顺序是一致的。(5)位地址定义指令)位地址定义指令 BIT指令格式:字符名称指令格式:字符名称 BIT 位地址位地址该伪指令的功能是将位地址赋予该伪指
13、令的功能是将位地址赋予BIT前面的字符,经赋值后前面的字符,经赋值后可用该字符代替可用该字符代替BIT后面的位地址。例如:后面的位地址。例如:【例例4-4】OUT_1 BIT P1.0OUT_2 BIT P1.1例例4-4定义了两个输出端定义了两个输出端OUT_1和和OUT_2,它们实际对应的,它们实际对应的是是P1.0和和P1.1,在程序中就可以把,在程序中就可以把OUT_1和和OUT_2作为位地作为位地址来使用。上述址来使用。上述“BIT”可以换成可以换成“EQU”。(6)汇编结束指令)汇编结束指令 END指令格式:指令格式:END功能:提供汇编结束标志。汇编程序遇到功能:提供汇编结束标志
14、。汇编程序遇到“END”后就停止后就停止汇编,对汇编,对“END”以后的语句不予处理(以后的语句不予处理(END后的语句视作后的语句视作没有),故没有),故“END”应放在程序的结束处。请切勿把它当作应放在程序的结束处。请切勿把它当作程序运行结束命令!程序运行结束命令!4.2 4.2 汇编语言程序设计汇编语言程序设计 程序设计是学习单片机的重要内容,因为单片机系统都程序设计是学习单片机的重要内容,因为单片机系统都是在软件的控制下完成规定的动作或功能,所以软件是硬件是在软件的控制下完成规定的动作或功能,所以软件是硬件的灵魂。程序设计也是单片机教与学的难点,有些同学因为的灵魂。程序设计也是单片机教
15、与学的难点,有些同学因为不会程序设计而最终无法跨入单片机应用的大门。要学好程不会程序设计而最终无法跨入单片机应用的大门。要学好程序设计,除了应熟悉、掌握常用的指令外,还必须多看(对序设计,除了应熟悉、掌握常用的指令外,还必须多看(对程序设计来说,模仿往往是学习的起步,不但要看程序,更程序设计来说,模仿往往是学习的起步,不但要看程序,更要看流程图)、多练(练习是基本知识的消化、巩固过程和要看流程图)、多练(练习是基本知识的消化、巩固过程和编程技巧的领悟途径)、多总结(如循环程序等很有规律,编程技巧的领悟途径)、多总结(如循环程序等很有规律,总结出规律后,几乎可以一劳永逸地采用)。当然程序也并总结
16、出规律后,几乎可以一劳永逸地采用)。当然程序也并非都由自己亲手编制,现在的网络资源非常丰富,利用网络非都由自己亲手编制,现在的网络资源非常丰富,利用网络可以整合众人的智慧,互相可以整合众人的智慧,互相“借用借用”别人的别人的“劳动成果劳动成果”(比如现成的子程序)也是一种方法或途径。(比如现成的子程序)也是一种方法或途径。4.2.1 4.2.1 简单程序设计简单程序设计 图图4-1 顺序结构顺序结构:简单程序也就是顺序结构的程序,如图简单程序也就是顺序结构的程序,如图4-1所示,其所示,其特点是按指令的排列顺序一条条地执行,直到全部特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。
17、在一个复杂的程序中,总可以指令执行完毕为止。在一个复杂的程序中,总可以分解成若干顺序程序段,所以顺序结构是最简单、分解成若干顺序程序段,所以顺序结构是最简单、最基本的程序结构。本节通过实例介绍几个常用的最基本的程序结构。本节通过实例介绍几个常用的简单程序的设计方法。简单程序的设计方法。【例例4-5】4字节(双字)无符号数加法:将内部字节(双字)无符号数加法:将内部RAM 20H开始的开始的4个单元中存放的个单元中存放的4字节十六进制数字节十六进制数(20H高位,高位,23H低位)和内部低位)和内部RAM 30H单元开始单元开始的的4个单元中存放的个单元中存放的4字节十六进制数相加,结果存字节十
18、六进制数相加,结果存放到放到40H开始的单元中。开始的单元中。首先,根据题意可以画出加法过程的示意图(如图4-2所示)。图图4-2 加法过程示意图加法过程示意图其次,由加法规则可知:23H单元与33H单元相加用指令“ADD”外,其余单元都用“ADDC”。程序如下:说明:说明:(1)若是)若是BCD码加法,在上述的码加法,在上述的“ADD”或或“ADDC”指令指令后紧跟后紧跟“DA A”即可。即可。(2)上述程序中最后的)上述程序中最后的“SJMP$”必须要加,这条指令是让必须要加,这条指令是让程序停止往下执行,相当于程序停止往下执行,相当于“原地踏步原地踏步”,因为,因为“END”并并非程序停
19、止的命令。非程序停止的命令。【例例4-6】数据合并程序:设在数据合并程序:设在20H和和21H单元中各有一个单元中各有一个8位数据位数据(20H)=x7x6x5x4x3x2x1x0(2lH)=y7y6y5y4y3y2y1y0现在要从现在要从20H单元中取出低单元中取出低4位,从位,从21H单元中取出高单元中取出高4位完位完成拼装并送成拼装并送22H单元保存,数据要求如下:单元保存,数据要求如下:(22H)=y3y2y1y0 x3x2x1x0数据的拆、拼常常利用逻辑指令数据的拆、拼常常利用逻辑指令ANL、ORL来完成,来完成,“拆拆”是利用是利用ANL的屏蔽功能的屏蔽功能“与与0得得0,与,与1
20、不变不变”的性质来实现,的性质来实现,“拼拼”是利用是利用“或或0不变不变”的性质来实现,高、低位的交换的性质来实现,高、低位的交换用用SWAP 指令,程序清单如下:指令,程序清单如下:ORG0000HSJMP STARTORG0050HSTART:MOVA,20H;将;将x7x0传送到传送到AANLA,#00001111 B;将高;将高4位屏蔽掉,得到位屏蔽掉,得到0000 x3x2x1x0MOV22H,A;将;将0000 x3x2x1x0暂存到暂存到22HMOVA,21H;将;将y7y6y5y4y3y2y1y0传传送到送到ASWAP A;将高、低;将高、低4位互换,变位互换,变成成y3y2
21、y1y0y7y6y5y4yANLA,#11110000 B;将低;将低4位屏蔽掉,得到位屏蔽掉,得到y3y2y1y0000ORLA,22H;0000 x3x2x1x0 和和y3y2y1y0000 相相或或MOV22H,A;将结果保存到;将结果保存到 22HSJMP$END上面两个程序中的开头用了上面两个程序中的开头用了ORG程序定位指令,尽管在这样程序定位指令,尽管在这样简单的程序中省掉也没什么影响,但对于养成规范的编程习简单的程序中省掉也没什么影响,但对于养成规范的编程习惯是有好处的,否则看到一个具体应用程序时就会无所适从,惯是有好处的,否则看到一个具体应用程序时就会无所适从,同时也与第同时
22、也与第2.3节关于程序存储器的叙述相吻合。节关于程序存储器的叙述相吻合。【例例4-7】双字节数依次左移程序:将双字节数依次左移程序:将20H(高位)、(高位)、21H(低位)组成的双字节数向左移一次。(低位)组成的双字节数向左移一次。根据题意可表示成图根据题意可表示成图4-3,先用,先用RLC指令将指令将21H单元左移(实单元左移(实际必须将际必须将21H单元送到单元送到A 后才能用后才能用RLC指令)一次,此时指令)一次,此时21H单元的最高位进入单元的最高位进入Cy,最低位暂时由原来的,最低位暂时由原来的Cy填入(最填入(最后必须用后必须用20H单元的最高位来补);然后再用单元的最高位来补
23、);然后再用RLC指令将指令将20H单元左移,此时单元左移,此时Cy(原来(原来21H的最高位)进入了的最高位)进入了21H的的最低位,最低位,21H的最高位则进入的最高位则进入Cy,用此,用此Cy“补补”到到20H单元单元最低位即可完成双字节数的移位。最低位即可完成双字节数的移位。图4-3 双字节数依次左移示意图程序如下:程序如下:ORG0000HSJMP STARTORG0050HSTART:MOVA,20H;20H传送到传送到ARLCA;20H带带Cy左移左移MOVA,21H;21H传送到传送到A RLCA;21H带带Cy左移左移MOV20H,C;注意,这里的;注意,这里的20H是是20
24、H单元单元的的D0位地址位地址SJMP$END【例例4-8】将将30H单元中的十六进制数转换为三位单元中的十六进制数转换为三位BCD码,分码,分别存放在别存放在22H、21H、20H中,如中,如(30H)=FFH,则结果,则结果(22H)=02H,(21H)=05H,(20H)=05H,即十六进制的,即十六进制的“FF”等于十进制的等于十进制的“255”。十六进制到十六进制到BCD码的转换,通常是用除法将码的转换,通常是用除法将“百位百位”、“十十位位”、“个位个位”逐一分离,对于位数更多的十六进制转换也逐一分离,对于位数更多的十六进制转换也是如此,由于没有直接的双字节除法指令,所以除法用减法
25、是如此,由于没有直接的双字节除法指令,所以除法用减法来实现,因为涉及判断转移(属于分支程序范畴),这里仅来实现,因为涉及判断转移(属于分支程序范畴),这里仅作说明,用户可以从相关资料或网站中获取。本题程序如下:作说明,用户可以从相关资料或网站中获取。本题程序如下:ORG0000HSJMP STARTORG0030HSTART:MOVA,30H;30H传送到传送到AMOVB,#64H;相;相当于当于100DIVAB;原;原来数据除以来数据除以100MOV22H,A;百位数据送;百位数据送22H单元单元MOVA,B;取回余数;取回余数MOVB,#10DIVAB;除以;除以10MOV21H,A;十位
展开阅读全文