第3章MCS1单片机指令系统及编程举例_第1页
第3章MCS1单片机指令系统及编程举例_第2页
第3章MCS1单片机指令系统及编程举例_第3页
第3章MCS1单片机指令系统及编程举例_第4页
第3章MCS1单片机指令系统及编程举例_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理及应用微机原理及应用 对于任何一台计算机,必须有软件(程对于任何一台计算机,必须有软件(程序)的支持,才能工作。但是市场上所售序)的支持,才能工作。但是市场上所售的单片机是裸机,在使用之前要现对它编的单片机是裸机,在使用之前要现对它编程,将程序固化在芯片内,才能使用。程,将程序固化在芯片内,才能使用。 指令系统是一种指令系统是一种cpu所能直接执行的所所能直接执行的所有命令的集合,有命令的集合,cpu的主要功能是由它的的主要功能是由它的指令系统来体现的。任何计算机语言编写指令系统来体现的。任何计算机语言编写的任何程序,都必须转换为指令系统中相的任何程序,都必须转换为指令系统中相应指令代

2、码的有序集合,应指令代码的有序集合,cpu才能执行才能执行 。 单片机的指令系统是单片机能够识别单片机的指令系统是单片机能够识别并执行的所有指令的集合。并执行的所有指令的集合。 3.1指令系统简介指令系统简介 每一种每一种cpu都有其独立的指令系统。都有其独立的指令系统。 mcs-51系列单片机指令系统共有系列单片机指令系统共有111条条指令,其中有指令,其中有49条条单字节单字节指令,指令,45条条双字双字节节指令和指令和17条条三三字节指令。字节指令。 mcs-51指令系统的功能十分强大,它指令系统的功能十分强大,它把体现单片机的各种功能的寄存器组织在把体现单片机的各种功能的寄存器组织在统

3、一的地址空间中,统一的地址空间中,mcs-51指令系统在其指令系统在其存储空间、时间的利用率及工作效率方面存储空间、时间的利用率及工作效率方面都是较高的。都是较高的。 1. 指令格式指令格式 mcs-51指令系统中的每一条指令都有指令系统中的每一条指令都有两级指令格式:两级指令格式: cpu可直接识别并执行的机器语言指令可直接识别并执行的机器语言指令(机器语言)。(机器语言)。 汇编语言指令(简称汇编指令)。汇编语言指令(简称汇编指令)。 符号说明:见书上符号说明:见书上.p.34 mcs-51汇编语言指令格式,由以下几个部汇编语言指令格式,由以下几个部分组成:分组成: 标号:标号: 操作码操

4、作码 目的操作数目的操作数 ,源操作源操作数数 ;注释;注释 例:例:loop:mov a,r1;ar1 mov a,r1 inc a nop 3.2 寻址方式寻址方式 所谓寻址方式就是寻找或获得操作数的所谓寻址方式就是寻找或获得操作数的方式。方式。 指令的一个重要组成部分是操作数。由指令的一个重要组成部分是操作数。由寻址方式指定参与运算的操作数或操作数寻址方式指定参与运算的操作数或操作数所在单元的地址。所在单元的地址。 mcs-51指令系统的寻址方式有以下指令系统的寻址方式有以下7种:种: 1. 立即寻址立即寻址 2. 直接寻址直接寻址 3. 寄存器寻址寄存器寻址 4. 寄存器间接寻址寄存器

5、间接寻址 5. 变址寻址变址寻址 6. 相对寻址相对寻址 7. 位寻址位寻址 立即寻址立即寻址:操作数直接出现在指令中,可以:操作数直接出现在指令中,可以是是8位,也可是位,也可是16位。该方式寻址中的位。该方式寻址中的操作数操作数称为立即数,称为立即数,用用“”表示表示。 例:例:mov a,#30h ;a30h 执行结果:执行结果:a=30h 例:例:mov dptr,#1000h;dptr1000h 执行结果:执行结果: dptr1000h,注意注意:只有:只有mov dptr,#date16指令的立即指令的立即数为数为16位,位,dptr分为分为dph和和dpl,在上述,在上述例子中,

6、例子中, dph=10h, dpl=00h 直接寻址直接寻址:操作数的地址直接出现在指令:操作数的地址直接出现在指令中。这类寻址方式的中。这类寻址方式的操作数操作数只能是存放在只能是存放在内部内部ram和和sfr中。中。(1)sfr例:例:mov a,p1执行结果:将执行结果:将p1口的口的内容内容送到送到a中。中。若若p1的内容为的内容为78h,执行该指令后,执行该指令后,a=78h见.p.23 (2)内部内部ram的低的低128字节字节 例:例:mov a,76h 执行结果:将执行结果:将76h单元的内容送到单元的内容送到a中。中。 若若(76h)=3fh,执行该指令后,执行该指令后,a=

7、3fh注意:若要表示某个单元的内容,将该单元用括号扩起注意:若要表示某个单元的内容,将该单元用括号扩起来,如来,如(43h)、()、(76h)、()、(r0)等。)等。 寄存器寻址寄存器寻址:操作数为:操作数为寄存器的内容寄存器的内容。 此处的寄存器指的是工作寄存器此处的寄存器指的是工作寄存器r0r7、累加器、累加器a、通用寄存器、通用寄存器b、数据、数据指针寄存器指针寄存器dptr和位累加器和位累加器c(即进位(即进位位位c)。)。例例 :mov a,r0执行结果:将执行结果:将r0的内容送入的内容送入a中。中。若若r0的内容(的内容(r0)=5ah,则,则a=5ah 寄存器间接寻址寄存器间

8、接寻址:将指定:将指定寄存器寄存器中的中的内容内容作为地址作为地址,该,该地址对应的内容地址对应的内容才才是操作数是操作数,用用表示。表示。 例:例:mov a,r0 执行结果:将执行结果:将r0的内容作为地址,再将该的内容作为地址,再将该地址对应的内容送入地址对应的内容送入a中。中。 若(若(r0)=46h,(,(46h)=2fh,则:,则: a=(r0)=(46h)=2fh 例:例:mov r1 , 76h 执行结果:执行结果: (r1) (76h) 。 若(若(76h)=0fh, (r1)=23h,则:,则: (23h)=0fh 变址寻址变址寻址:以程序指针:以程序指针pc或数据指针或数

9、据指针dptr为基址,以累加器为基址,以累加器a作为变址,两者作为变址,两者内容相加(即内容相加(即基址偏移量基址偏移量)形成)形成16位地位地址。址。例: 地址地址 目标代码目标代码 汇编指令汇编指令 2100 7406 mov a,#06h 2102 83 movc a,a+pc 2103 00 nop 2104 00 nop 2109 32 db 32h 执行结果分析:当执行到执行结果分析:当执行到movc a,a+pc时,时,pc=2103h(基址基址),a=06h(偏移量偏移量),因,因此此a+pc所示的地址所示的地址=2103h+06h=2109h,(2109h)=32h,所以,所

10、以a=32h例: mov a,#01h mov dptr,#table movc a,a+dptrtable: db 41h db 42h 执行结果分析:基址的首地址执行结果分析:基址的首地址= table偏移量偏移量= 01h, 程序执行到程序执行到movc a,a+dptr时,时, a+dptr所指的地址所指的地址= table +01h,因此,该指令执行后,因此,该指令执行后a=42h 相对寻址相对寻址:以:以pc的当前值为的当前值为基址基址,与指令,与指令中的第二字节给出的中的第二字节给出的偏移量偏移量rel(8位位有符号有符号数数)相加,所得之和为程序的转移地址。)相加,所得之和为程

11、序的转移地址。转移转移范围范围为为+127-128字节之间。字节之间。 例:例:sjmp 08h;双字节指令;双字节指令 分析:若分析:若pc=2000h为该条指令的地址,则为该条指令的地址,则转移目标地址转移目标地址=2000h+02h+08h=200ah 位寻址位寻址:对:对片内片内ram的的20h2fh字节地址字节地址中中的的所有位所有位和和部分部分sfr的的位进行寻址位进行寻址。 区分指令中是位地址还是存储器单元地址不太区分指令中是位地址还是存储器单元地址不太容易,主要是由另一个操作数来区分。容易,主要是由另一个操作数来区分。 例:例:setb ex0 ;ex01,位寻址,位寻址 mo

12、v c,07h ;c(07h) ,位寻址,位寻址 mov a,20h ;a(20h) ,直接寻址,直接寻址 mov c,20h ;c(20h) ,位寻址,位寻址 3.3 指令系统指令系统 指令分类:指令分类:mcs-51指令系统共有指令系统共有111条指条指令,分成令,分成5大类:大类:(1)数据传送类)数据传送类(2)算术运算类)算术运算类(3)逻辑运算类)逻辑运算类(4)控制程序转移类)控制程序转移类(5)布尔变量操作(位操作类)布尔变量操作(位操作类)3.4 汇编语言程序设计基础汇编语言程序设计基础 用汇编用汇编语言编语言编写的源写的源程序程序汇编程序汇编程序目标程序目标程序 汇编语言汇

13、编语言是一种是一种采用助记符采用助记符表示的表示的机器语机器语言言,即用助记符号来代表指令的操作码和,即用助记符号来代表指令的操作码和操作数,操作数,用标号用标号或或符号代表地址符号代表地址、常数常数或或变量变量。而助记符一般都是英文单词的缩写,。而助记符一般都是英文单词的缩写,因此使用方便。这种用助记符编写的程序因此使用方便。这种用助记符编写的程序称为称为源程序源程序。 汇编语言汇编语言源程序源程序必须必须翻译翻译成机器语言的目成机器语言的目标代码,亦称标代码,亦称目标程序目标程序,计算机才能执行。,计算机才能执行。其翻译工作可由汇编程序自动完成,其翻译工作可由汇编程序自动完成,汇编汇编程序

14、的功能程序的功能就是就是将用助记符号编写的源程将用助记符号编写的源程序翻译成用机器语言表示的目标程序序翻译成用机器语言表示的目标程序。 汇编语言程序的组成:汇编语言程序的组成: 汇编语言源程序是由汇编语句组成的,汇编语言源程序是由汇编语句组成的,一般情况下,一般情况下,汇编语言语句汇编语言语句可分为:可分为:指令指令性语句性语句(即(即汇编指令汇编指令)和)和指示性语句指示性语句(即(即伪指令伪指令)。)。 指令性语句指令性语句(可(可简称指令简称指令)是是进行汇编语进行汇编语言程序设计的言程序设计的可执行语句可执行语句,每条指令都产生,每条指令都产生相应的机器语言的目标代码。源程序的主要相应

15、的机器语言的目标代码。源程序的主要功能是由指令性语句去完成的。功能是由指令性语句去完成的。 指示性语句指示性语句(伪指令伪指令)又称)又称汇编控制指汇编控制指令令。它是控制汇编(翻译)过程的一些命令,。它是控制汇编(翻译)过程的一些命令,程序员通过伪指令通知汇编程序在进行汇编程序员通过伪指令通知汇编程序在进行汇编时的一些指示。因此,伪指令不产生机器语时的一些指示。因此,伪指令不产生机器语言的目标代码,言的目标代码,是是进行汇编语言程序设计的进行汇编语言程序设计的不可执行语句不可执行语句。伪指令:伪指令:1、 org (汇编起始地址汇编起始地址) 例:例: org 3000h start: mo

16、v a, r1 2、 end (结束汇编结束汇编)3、 equ (等值或赋值等值或赋值)格式:格式:标识符标识符 equ 数或汇编符号数或汇编符号功能:把数或汇编符号赋给标识符,且只能赋值功能:把数或汇编符号赋给标识符,且只能赋值1次。次。 例:例: int-1 equ 001bh org int-1 ajmp lp1 注意注意:equ与前面的标与前面的标号之间不要使用冒号,号之间不要使用冒号,只用一个空格进行分隔。只用一个空格进行分隔。4、 db (定义字节定义字节) 格式:格式:标号:标号: db x1,x2,x3,xn功能:将功能:将项或项表项或项表中的中的8位字节数据位字节数据依次存入

17、依次存入标号标号所示的存储单元中所示的存储单元中例:例:delay:db 50h ;将;将50h存入存储单存入存储单 ;元;元delay中。中。例:例: org 2000h tab:db 12h,0afh,00111001b,”9”结果结果:(2000h)=12h, (2001h)=0afh, (2002h)=00111001b, (2003h)=9(字符字符) 。(自学自学5,6,7)5、 dw (定义字定义字) 格式:格式:标号:标号: dw x1,x2,x3,xn功能:将功能:将项或项表项或项表中的中的16位字数据位字数据依次存入依次存入标号标号所所示的存储单元中。示的存储单元中。6、

18、ds(定义存储单元定义存储单元)格式:标号:格式:标号: ds 数字数字功能:从标号所指示的单元开始,根据数字的值保功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,留给以后存储数据留一定数量的字节存储单元,留给以后存储数据用。用。例:例: space:ds 10 表示从表示从space开始保留开始保留10个存储单元,下条个存储单元,下条指令将从指令将从space+10处开始汇编。处开始汇编。7、 bit (地址符号命令地址符号命令)格式:标识符格式:标识符 bit 位地址位地址功能:将位地址赋予标识符。功能:将位地址赋予标识符。例:例: a1 bit p1.0 mov c

19、,a1汇编语言程序设计实例汇编语言程序设计实例 1、简单程序(顺序程序)、简单程序(顺序程序)例:例: 将片内将片内ram的的30h和和31h的内容相加,结的内容相加,结果存入果存入32h。 org 2000h mov a, 30h ; a(30h) add a, 31h ; aa+(31h) mov 32h, a ;结果存入结果存入32h end例:例: 拼字:将外部数据存储器拼字:将外部数据存储器3000h和和3001h的低的低4位取出拼成一个字,送到位取出拼成一个字,送到3002h中。中。 org 2000h mov dptr, #3000h ;dptr外部存储器地址外部存储器地址300

20、0h movx a, dptr ;a(3000h) anl a, #0fh ;屏蔽高屏蔽高4位位(即取低即取低4位位) swap a ;交换高低交换高低4位位 mov r1, a ;暂存于暂存于r1中中 inc dptr ;指向下一单元指向下一单元3001h movx a, dptr ;a(3000h) anl a, #0fh ;屏蔽高屏蔽高4位位(即取低即取低4位位) orl a, r1 ;拼成一个字拼成一个字 inc dptr ;指向下一单元指向下一单元3002h movx dptr, a ;送结果到送结果到3002h单元单元 sjmp $ end2、分支程序、分支程序 在解决实际问题时,

21、常常需要根据不同的条件去执行不同的处理结果,这样,程序就产生了分支,这种结构的程序,称为分支程序。条件成立ny分支程序分支程序常用的指常用的指令令指令功能jz reljnz reljc reljnc reljb bit,reljnb bit,reljbc bit,relcjne a,direct,relcjne a,#data,relcjne rn,#data,relcjne rn,#data,rel的内容为零转移此位为转移,并将此位清零的内容非零转移转移转移此位为转移此位非转移两数不相等转移两数不相等转移两数不相等转移两数不相等转移例:把片外例:把片外ram的首地址为的首地址为10h开始存放

22、的数开始存放的数据块,传送给片内据块,传送给片内ram首地址为首地址为20h开始的数开始的数据块中去,如果数据为据块中去,如果数据为“0”,就停止传送。,就停止传送。 org 2000h mov r0, #10h mov r1, #20hloop: movx a, r0here: jz here mov r1, a inc r0 inc r1 sjmp loop end例:求符号函数,设例:求符号函数,设x、y分别为分别为30h、31h。 1 x0 y= 0 x=0 -1 x0结束结束y=1y=-1ynnlp0:lp1:分析:分析:x是有符号数,判断符号位是是有符号数,判断符号位是0还是还是1

23、可利用可利用jb或或jnb指令。指令。 判断判断x是否等于是否等于0则直接可以使则直接可以使用累加器用累加器a的判的判0指令。指令。例例3-24:内部ram 30h开头的20个连续单元中,存放有20个数,统计等于8的单元个数,结果放在r2中。分析:取一个数与8比较,相等r2加1,不相等跳过。并作20次重复即可。流程如右图,程序如下: org 1000hstart:mov r0, #30hmov r7, #20mov r2, #0loop:cjne r0,#08h,nextincr2next:incr0djnz r7,loop sjmp 3、循环程序、循环程序 在程序执行过程中,当需要多次反复执

24、行某段程序时,可采用循环结构。循环开始循环开始循环结束循环结束循环控制循环控制设置循环初值设置循环初值循环体循环体循环修改循环修改完成完成未完未完完成完成循环开始循环开始循环结束循环结束循环控制循环控制设置循环初值设置循环初值循环体循环体循环修改循环修改未完未完循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:djnz、cjne、jc、jnc等控制类指令。例:有例:有20个数存放于内部个数存放于内部ram从从41h开始的连续单开始的连续单元中,试求其和,并将结果存放于元中,试求其和,并将结果存放于40h单元(和数单元(和数是一个是一个8

25、位二进制数,不考虑进位问题)位二进制数,不考虑进位问题) org 2000h mov a, #00h ;累加器清累加器清0 mov r7, #14h ;r7为循环计数器,为循环计数器,r7=20 mov r0, #41h ;建立内存数据指针建立内存数据指针,首地址为首地址为41hloop: add a, r0 ;累加累加 inc r0 ;指向下一数据单元指向下一数据单元 djnz r7, loop ;r7-10,表示累加未结束表示累加未结束,继续累加继续累加; ;否则否则,往下执行。往下执行。 mov 40h, a ;结果存放于结果存放于40h单元单元 end 例:在内部例:在内部ram的的4

26、2h开始的连续单元中存放一组开始的连续单元中存放一组8位无符号数,该数组长度为位无符号数,该数组长度为n(n3dh)存放于存放于41h中,中,找出该组数中最大的数,并将其存入内部找出该组数中最大的数,并将其存入内部ram的的40h单元。单元。 org 2000h mov r0, #42h ;第第1个数送个数送40h单元单元 mov 40h, r0 dec 41h ;设置计数器初值(循环次数)设置计数器初值(循环次数)loop: inc r0 ;取下一个数取下一个数a mov a, r0 cjne a, 40h, comp ;a-(40h)0,转移转移comp: jc next ;cy=1时表示

27、不够减时表示不够减,转移转移 mov 40h, a ;较大数存较大数存40hnext: djnz 41h, loop ;控制循环次数控制循环次数 sjmp $ end例:设计延时例:设计延时0.1s的子程序,设晶振频率为的子程序,设晶振频率为12mhz.分析:晶振频率为分析:晶振频率为12mhz,所以,机器周期为,所以,机器周期为1us 执行时间(机器周期)执行时间(机器周期)delay: mov r7, #c3h 1 loop1: mov r6, #0ffh 1loop2: djnz r6, loop2 2 djnz r7, loop1 2 ret 2执行时间:内循环共执行时间:内循环共255次,次,(

温馨提示

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

评论

0/150

提交评论