1、单片机原理及应用技术MCS51程序设计交通信号灯模拟系统设计任务一任务一 MCS-51 MCS-51指令系统入门指令系统入门任务二任务二 指令系统指令系统任务三任务三 汇编语言程序设计基础汇编语言程序设计基础任务四任务四 典型应用典型应用交通信号灯模拟交通信号灯模拟 系统设计系统设计Project3 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门任务1MCS-51指令系统入门4 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门指令系统概述one由于单片机的硬件只能识别二进制数,因此最初的指令采用二进制表示,后来用八进制和十六进制
2、表示,这些都称为机器语言机器语言。机器语言不易理解,不易记忆,编制程序容易出错机器语言不易理解,不易记忆,编制程序容易出错。为了便于阅读和书写,一些厂商根据指令功能和操作对象的不同,给出不同指令的英文缩写符号,称为助记符助记符。用助记符表示的指令称为汇编语言指令。我们将要学习的就是这种指令,需要注意的是,汇编语言指令不能直接运行,它要翻译为机器语言指令后才能运行汇编语言指令不能直接运行,它要翻译为机器语言指令后才能运行。指令是单片机能够识别和执行的命令单片机能够识别和执行的命令,一个单片机能够执行的全部指令的集合单片机能够执行的全部指令的集合称为这个单片机的指令系统。提示单片机的指令系统由其生
3、产厂商定义,因此,不同的单片机具有不同的指令系统。5 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门指令格式two一条指令通常由操作码操作码和操作数操作数两部分组成。操作操作码码表示本条指令所要执行的操作表示本条指令所要执行的操作,操作数操作数则表示本条指令的则表示本条指令的操作对象操作对象。指令格式如下:操作码 操作数1,操作数2,操作数3操作码和操作数之间必须空一个格,操作数之间用逗操作码和操作数之间必须空一个格,操作数之间用逗号号“,”隔开隔开。操作码一般使用2 25 5个英文字母的助记符个英文字母的助记符表示,如JC,MOV,SUBB等。在不同的指令中
4、,操作数的数量从03个不同。它可以是一个数据,也可以是一个地址或寄存器符号。6 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门指令格式two在MCS-51系统中采用变长指令变长指令,对于不同类型的指令,或者相同指令的操作数类型不同,其长度是可变的,因此,MCS-51MCS-51指令为变长指令指令为变长指令。大部分指令的长度为13个字节。提示对于双操作数指令来说,一般操作数1是目的操作数,操作数2是源操作数。采用RISC的单片机,每条指令的长度相同,如ARM芯片全部指令都是32位的。7 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统
5、入门指令中常用符号three符号含义A累加器ACCB寄存器BRi寄存器间接寻址的寄存器(i=0或1)Rn当前工作寄存器R0R7的一个bit具有位寻址功能的位地址rel用补码形式表示的偏移量,范围为 128+127#data指令中的8位立即数,即00HFFH#data16指令中的16位立即数,即0000HFFFFHaddr1111位的目的地址,只限于ACALL和AJMP中使用addr1616位的目的地址,只限于LCALL和LJMP中使用direct8位片内RAM的00H7FH地址范围和SFRMCS-51系列单片机指令中常用助记符及含义8 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 M
6、CS-51指令系统入门符号含义(X)X的内容(X)以X的内容为地址的内容/加在位地址之前,表示对该位取反#立即数前缀间址寄存器前缀程序计数器PC的当前值箭头右面的数据传送到箭头左面逻辑与运算逻辑或运算逻辑异或运算DPTR16位片外数据指针,范围为0000HFFFFH续上表9 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门指令分类fourMCS-51MCS-51系列单片机指令系统系列单片机指令系统共有111条指令,可分为以下5大类。数据传送类指令(29条)算数运算类指令(24条)逻辑运算类指令与位移指令(24条)控制转移类指令(17条)位操作指令(17条)10
7、项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门寻址方式five大部分指令都需要使用操作数,在执行指令过程中,去何处取得操作数是需要解决的问题,寻找操作数地址的方式寻找操作数地址的方式就称为寻址方式。源操作数和目的操作数都存在寻址问题。在MCS-51系列单片机中设有7种寻址方式,即立即寻址立即寻址、直接寻址直接寻址、寄存器寻址寄存器寻址、寄存器寄存器间接寻址间接寻址、变址寻址变址寻址、相对寻址相对寻址和位寻址位寻址。寻址方式越丰富,CPUCPU功能越强,灵活性就越大,功能越强,灵活性就越大,处理数据的效率也就越高处理数据的效率也就越高。11 项目三 MCS51程
8、序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门寻址方式相应寻址空间立即寻址程序存储器ROM直接寻址片内RAM寄存器寻址R0R7、A、B、DPTR等寄存器间接寻址片内RAM中00H7FH区间及片外RAM变址寻址程序存储器ROM相对寻址以当前PC值为基址,偏移范围128+127字节的ROM位寻址片内RAM位寻址区202FH及部分SFR寻址方式的设定与单片机的存储空间单片机的存储空间有关,MCS-51单片机不同寻址方式对应不同的寻址空间,如表所示。MCS-51系列单片机寻址方式所对应寻址空间12 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门1)立即寻
9、址立即寻址是指在指令中直接给出参加运算的操作数的寻址方式在指令中直接给出参加运算的操作数的寻址方式。这种形式的操作数称为立即数立即数。为了与直接寻址指令中的直接地址相区别,立即数前面要加“#”标志。【例3-1】编号汇编语言指令机器语言指令功能aMOV A,#40H7440H(A)40HbMOV DPTR,#4000H904000H(DPTR)4000H立即寻址方式如表所示:提示MCS-51指令表中可以查到指令a的机器码为74H data,指令b的机器码为90H data。13 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门项目三寻址方式的例子中均假设PC初值为
10、40H,立即寻址方式具体操作立即寻址方式具体操作如图所示:A4074ROMPC 40HDPTR0040ROM90DPHDPLPC 40H提示立即数是指令的一部分,存放在程序存储器ROM中。在8051单片机的指令系统中,仅有一条指令MOV DPTR,#X的操作数是16位的立即数。(a)MOV A,#40H(b)MOV DPTR,#4000H14 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门2 直接寻址直接寻址是指在指令中直接给出操作数地址在指令中直接给出操作数地址的寻址方式。指令中出现的是操作数的地址(指令表中以“directdirect”标识),此单元地址中
11、的内容才是实际参与运算或操作的操作数。在8051系列单片机中,CPUCPU通过直接寻址方式可以访问片内通过直接寻址方式可以访问片内RAMRAM区间区间00H00HFFHFFH共共128128单元(包括位单元(包括位寻址区寻址区20H20H2FH2FH)以及特殊功能寄存器)以及特殊功能寄存器SFRSFR。【例3-2】编号编号汇编语言指令汇编语言指令机器语言机器语言指令功能指令功能aMOV A,60HE560H(A)(60H)bMOV A,88HE588H(A)(88H)cMOV A,TCONE588H(A)(88H)编号汇编语言指令机器语言指令功能直接寻址方式如表所示:15 项目三 MCS51程
12、序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门在项目二中,我们知道定时器控制字TCON的地址是88H单元。所以编号b和编号c两条指令的表述是等价的,翻译为机器指令后是相同的。自然,其执行结果也相同,即将其执行结果也相同,即将88H88H单元的内容送累加器单元的内容送累加器A A。XX片内RAM60H41HAPC 40HROM60E5 88H TCONSFR41HPC 40HROM88E5A(a)MOV A,60H(b)MOV A,88H/MOV A,CON直接寻址方式具体操作如图所示:提示对于SFR,可以采用16进制的地址形式表示,也可以用它们各自的名称符号来表示,以增强程序的可
13、读性。16 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门3 寄存器寻址寄存器寻址是指以指令中寄存器的内容作为操作数以指令中寄存器的内容作为操作数的寻址方式。指令中用寄存器的名字来表示实际参与运算或操作的操作数的地址。这些寄存器有工作寄存器工作寄存器R0R0R7R7、累加器、累加器A A、通用寄存器、通用寄存器B B、数据指针、数据指针DPTRDPTR、进位、进位CyCy等。【例3-3】寄存器寻址方式如表所示:编号编号汇编语言指令汇编语言指令机器语言机器语言指令功能指令功能aMOV A,R011101000(E8H)(A)(R0)bINC R300001011
14、(0BH)(R3)(R3)+117 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门指令a(MOV A,R0)中,目的操作数与源操作数均采用寄存器寻址方式,该指令二进制形式的低三位该指令二进制形式的低三位000000是是RnRn寄存器编码寄存器编码;指令指令b b(INC R3INC R3)只有一个操)只有一个操作数,指令执行加作数,指令执行加1 1操作操作。指令a的具体操作如图所示,指令b的原理相同:XXPC 40HROM11101000AR1 001R0 000R7 111寄存器寻址示意图18 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-
15、51指令系统入门4 寄存器间寻址寄存器间接寻址是指以指令中寄存器的内容作为操作数地址以指令中寄存器的内容作为操作数地址的寻址方式。寄存器中存放的不是操作数本身,而是操作数的地址操作数的地址。寄存器Ri(i=0或1)和DPTR用于寄存器间接寻址。采用寄存器间址寻址方式时,在寄存器前加“”符号,以便区分于寄存器寻址方式。对片内RAM的低128个字节(007FH)进行访问时,通常使用使用RiRi作为间作为间址寄存器址寄存器。通过项目一的学习我们知道,R0R0和和R1R1均为均为8 8位寄存器位寄存器,寻址范围可以达到达到2 28 8字节即字节即256256字节字节。对片外RAM的64K存储空间进行访
16、问时,应该使用DPTR作为间址寄存器。DPTR是一个16位寄存器,寻址范围可以达到64K。19 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门【例3-4】编号编号汇编语言指令汇编语言指令机器语言机器语言指令功能指令功能aMOV A,R111100111(E7H)(A)(R1)bMOVX A,DPTR11100000(E0H)(A)(DPTR)寄存器间址寻址方式如表所示:两条指令寻址过程类似,这里只以其中一条为例。假设R1中内容为60H,指令a的具体操作如图所示:寄存器间接寻址示意图PC 40HROM1110011160R1A60H片内RAMXX提示不能通过寄存
17、器间接寻址方式访问特殊功能寄存器SFR。20 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门5 变址寻址变址寻址方式是指以某个寄存器的内容为基本地址,在基本地址的基础以某个寄存器的内容为基本地址,在基本地址的基础上加上地址偏移量上加上地址偏移量后,才能得到真正的操作数地址的寻址方式。在MCS-51系列单片机中,数据指针DPTR和程序计数器PC作为基址寄存器,累加器A用来存放地址偏移量。【例3-5】变址寻址方式如表所示:编号编号汇编语言指令汇编语言指令机器语言机器语言指令功能指令功能aMOVC A,A+PC83H(A)(A)+(PC)bMOVXC A,A+DPT
18、R93H(A)(A)+(DPTR)cJMP A+DPTR73H(PC)(A)+(DPTR)注意在MCS-51系统中变址寻址的指令只有上表中的3条,只用来对ROM寻址。前2条指令主要用于查表操作,第3条是无条件转移指令。PC的值是随程序的执行情况自动改变的,我们不可以随便地给PC赋值,累加器A是一个8位的寄存器,因此指令a的寻址范围是在当前指令下的256个地址单元。21 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门当前PC的内容为40H,CPU到40H单元取出指令83H后,将PC中的内容0040H与A中内容20H送ALU相加(同时PC指向下一条将要执行的指令)
19、,相加得到的结果60H即为我们所要寻找的操作数的地址。随后,60H地址单元的内容被送往累加器A,整条指令完成。我们假设累加器A的内容为20H,指令a的具体操作如图所示:寄存器寻址示意图XX 60H83HPCA0040H 40HROM20HALU22 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门6 相对寻址相对寻址是指以当前PC内容加上指令中给出的相对偏移量形成程序转移的目的地址的寻址方式。这种寻址方式专为实现程序的跳转功能而设计。指令的操作数部分给出的是地址的相对偏移量,在MCS-51系列单片机中常以“rel”表示。它是一个带符号的8位二进制补码数,可正可负
20、,范围是128+127,向地址小的方向转移时为负,向地址大的方向转移时为正。【例3-6】编号汇编语言指令机器语言指令功能aSJMP 04H8004H(PC)(PC)+2+04HbJZ rel60 rel若A0时,(PC)(PC)+2若A=0时,(PC)(PC)+2+rel相对寻址方式如表所示:23 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门在指令a中,我们可以看到,PCPC的当前值加上地址偏移量的当前值加上地址偏移量04H04H构成了程序跳转的目的地址构成了程序跳转的目的地址。需要注意的是,这里所说的PC的当前值是指执行完本条转移指令后的PC值,即PC值加
21、上该指令字节数2。指令b是一条条件转移指令条件转移指令,以累加器A的内容是否为0作为判断条件。为了方便区分,这里将PC的源地址记作PC源,取出本条指令后PC的值记为PC当前,最后形成的目的地址记为PC目的。指令a的具体操作如图所示:相对寻址示意图注意我们人工计算目的地址时,会采用公式PC目的=PC源+指令所占字节数+rel。从图3-6中可知,实际上CPU在取出2个字节的指令码后,PC指针已经指向了PC当前的位置,因此,在机器运算中PC目的是由PC当前和rel直接相加得到的。rel=04HPC当前=0042HPC目的 0046HPC当前 0042H0041HPC源 0040H0480ROMALU
22、24 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门7 位寻址位寻址是指对位寻址空间按位进行寻址的操作对位寻址空间按位进行寻址的操作,指令表中以“bit”表示。在进行位操作处理时,一般借助进位位Cy作为位操作累加器C。MCS-51系列芯片中有以下两个位寻址区。1111个特殊功能寄存器个特殊功能寄存器SFRSFR分布在RAM的80FFH地址单元,它们的地址单元均能被8整除。具体分布情况参见表2-4。片内片内RAMRAM的位寻址区的位寻址区地址范围是202FH,共128位,每一位都可以作为独立操作数。具体分布情况参见表2-3。25 项目三 MCS51程序设计交通信
23、号灯模拟系统设计任务一 MCS-51指令系统入门(1)直接用物理地址00HFFH来表示MCS-51MCS-51系列芯片系列芯片中有以下四种位地址表示方式:【例3-7】MOV C,2BH指令含义是将位地址为将位地址为2BH2BH的位内容送的位内容送CyCy。2BH是位地址的物理形式,表示片内RAM25H单元的D3位。位寻址方式是位操作指令专用的,不必担心位地址会与直接寻址中的地址混淆。技巧26 项目三 MCS51程序设计交通信号灯模拟系统设计任务一 MCS-51指令系统入门(2)采用地址单元加位数的表示方法。上面的指令可以改写为:MOV C,2BH.3(3)对于SFR可以采用寄存器名加位数的表示
24、方法。(4)采用伪指令定义方式。详见任务三汇编语言程序设计基础中的伪指令部分。【例3-8】MOV C,P3.4,指令含义是将并行接口P3口的D4位内容送Cy。27 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统任务2指令系统28 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统数据传送类指令one根据这些指令作用的不同,将其分为内部数据传送指令数据传送指令、外部数据传送指令外部数据传送指令、访问程序存访问程序存储器指令储器指令、堆栈操作指令堆栈操作指令和数据交换指令数据交换指令5类。“传送传送”是指将源地址单元内容送到目的单元中去,数据传送后,源地址单元内容保
25、持不变;“交换交换”是指将源地址单元内容和目的地址单元内容互换。数据传送类指令中,执行目的操作数为执行目的操作数为A A或对或对A A进行单独操作的指令后,会影响进行单独操作的指令后,会影响PSWPSW中奇偶中奇偶标志位标志位P P。其他情况不影响标志位。数据传送类指令是编程时使用最多的指令。MCS-51系列单片机数据传送指令共有29条,用到的助记符有MOVMOV、MOVXMOVX、MOVCMOVC、XCHXCH、XCHDXCHD、SWAPSWAP、PUSHPUSH和POPPOP共8种。29 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统1 内部数据传送指令内部数据传送指令共
26、16条,助记符均为“MOV”,英文为“Move”。(1)以累加器A为目的操作数的传送指令编号编号指令格式指令格式机器语言机器语言指令功能指令功能字节数字节数指令周期数指令周期数aMOV A,RnE8EF(A)(Rn)11bMOV A,directE5 direct(A)(direct)21cMOV A,RiE6E7(A)(Ri)11dMOV A,#data74 data(A)data2130 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统指令指令a a和指令指令c c源操作数分别采用寄存器寻址寄存器寻址和寄存器间接寻寄存器间接寻址址方式。由指令的机器语言形式可以看出,这两条指
27、令占用字节数较少,都为1字节;指令指令b b和指令指令d d分别采用直接寻址直接寻址和立即寻址立即寻址方式,两条指令都占2个字节数。上述上述4 4条指令的指令周期数都为条指令的指令周期数都为1 1个机器周期个机器周期。指令a中,n=07,机器语言E8EF分别对应源操作数为R0R7的指令;指令c中,i=0或1,机器语言E6E7对应源操作数为R0和R1的指令。31 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-9】以累加器A为目的操作数的传送指令示例;将工作寄存器R3内容送A,A中内容保持不变MOVA,R3;将30H地址单元的内容送A,30H地址单元的内容保持不变MOVA
28、,40H;以R0的内容为地址,将找到的地址单元中的内容送A。该地址单元的内容及R0的内容均保持不变MOVA,R0;将立即数66H送A,本条指令执行完成后,A中内容为66HMOVA,#66H32 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统(2)以寄存器Rn和DPTR为目的操作数的传送指令编号编号指令格式指令格式机器语言机器语言指令功能指令功能字节数字节数指令周期数指令周期数aMOV Rn,#data787F data(Rn)data21bMOV Rn,directA8AF direct(Rn)(direct)22cMOV Rn,AF8FF(Rn)(A)11dMOV DPTR
29、,#data1690 dataH dataL(DPH)dataH(DPL)dataL32以寄存器Rn为目的操作数的传送指令共3条,以操作数为DPTR的指令有1条。4条指令如表所示。33 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统指令指令a a、指令指令b b和指令指令c c中源操作数分别采用立即寻址立即寻址、直接寻址直接寻址和寄存器寻址寄存器寻址方式。这3条指令的功能是将最终获得的8位数据送当前工作寄存器Rn。【例3-10】以寄存器Rn为目的操作数的传送指令示例;将立即数68H送R0,指令执行完成后,R0中内容为68HMOV R0,#68H;将40H地址单元的内容送R1,
30、40H地址单元的内容保持不变MOVR1,40H;将累加器A中内容送R2,A中内容保持不变MOVR2,A注意工作寄存器Rn之间不能直接传送数据,如“MOV Rn,Rn”和“MOV Rn,Rn”都是错误的。要在工作寄存器之间传递数据,可以由累加器A作为中介。34 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统指令指令d d是是MCS-51MCS-51指令系统中唯一一条指令系统中唯一一条1616位的立即数传送指令位的立即数传送指令。它的功能是将16位的立即数#data16送数据指针DPTR,其中高8位dataH送DPH,低8位dataL送DPL。【例3-11】三字节双周期指令示例M
31、OVDPTR,#2046H;将16位的立即数送DPTR。MOVDPH,#20H;数据的高8位20H送DPH。MOVDPL,#46H;数据的低8位46H送DPL。实际上,本条指令的执行过程相当于执行以下两条8位数据传送指令。35 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统(3)以直接地址direct为目的操作数的传送指令编号编号指令格式指令格式机器语言机器语言指令功能指令功能字节数字节数指令周期数指令周期数aMOV direct,#data75 direct data(direct)data32bMOV direct,AF5 direct(direct)(A)21cMOV
32、direct,Rn888F direct(direct)(Rn)22dMOV direct,Ri8687 direct(direct)(Ri)22eMOV direct1,direct285 direct1,direct2(direct1)(direct2)32以直接地址direct为目的操作数的传送指令共5条,这里需要注意的是directdirect的地的地址范围是片内址范围是片内RAMRAM的的00007FH7FH地址单元和地址单元和SFRSFR地址单元地址单元。5条指令具体情况如表所示:36 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统上述5条指令均是8 8位数送位数
33、送directdirect。指令e的源操作数和目的操作数均为直接寻址方式。由此我们可以知道,片内片内RAMRAM之间的数之间的数据可以直接传送,而不必以累加器据可以直接传送,而不必以累加器A A为中介为中介。注意direct的地址范围并不是00FFH。在表1-5中我们已经知道片内RAM的80FF地址单元并没有完全定义,对未定义的地址单元进行存取和访问,会得到不确定的数,建议用户不要使用。37 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-12】以直接地址direct为目的操作数的传送指令示例;将立即数68H送片内RAM的80H地址单元。并行接口P0端口的物理地址为80
34、H,指令执行完成后,P0端口的内容为68H。MOV 80H,#68H;将累加器A的内容送片内RAM的20H地址单元,指令执行完成后,20H地址单元内容与A中内容相同MOV20H,A;将工作寄存器R4的内容送片内RAM的30H地址单元。MOV30H,R4;以R0的内容为地址,将找到的地址单元中的内容送片内RAM的40H地址单元MOV40H,R0;将P0端口的内容送累加器A(累加器A的物理地址为E0H)MOVE0H,80H38 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统(4)以寄存器间址Ri为目的操作数的传送指令编号编号指令格式指令格式机器语言机器语言指令功能指令功能字节数字
35、节数指令周期数指令周期数aMOV Rn,#data787F data(Rn)data21bMOV Rn,directA8AF direct(Rn)(direct)22cMOV Rn,AF8FF(Rn)(A)11dMOV DPTR,#data1690 dataH dataL(DPH)dataH(DPL)dataL32以寄存器间址Ri为目的操作数的传送指令共3条,如表所示。三条指令的功能均是把源操作数所指定的内容送把源操作数所指定的内容送RiRi所指向的地址单元所指向的地址单元。39 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-13】以寄存器间址Ri为目的操作数的传送指
36、令示例;将立即数68H送工作寄存器R0所指向的地址单元MOV R0,#68H;将片内RAM的68H地址单元的内容送工作寄存器R0所指向的地址单元MOV R0,68H;将累加器A的内容送工作寄存器R1所指向的地址单元MOV R1,A40 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统编号指令格式机器语言指令功能字节数指令周期数aMOVX Ri,AF2F3(Ri)(A)12bMOVX A,RiE2E3(A)(Ri)12cMOVX DPTR,AF0(DPTR)(A)12dMOVX A,DPTRE0(A)(DPTR)122 外部数据传送指令MCS-51系列单片机指令系统中,外部数据传
37、送指令共外部数据传送指令共4 4条,用于和外部数据存储器之间传送数据条,用于和外部数据存储器之间传送数据。助记符均为“MOVXMOVX”,来自英文“Move External RAM”。指令如表所示:41 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统由上表我们可以看出,与外部数据存储器之间的数据传送都是以累加器A作为中介进行的。指令令a a和指令和指令c c是将是将A A中的内容送达通过间接寻址获得的外中的内容送达通过间接寻址获得的外部数据单元部数据单元,即对外部存储器进行写操作对外部存储器进行写操作。指令指令b b和指令和指令d d是将通过间接寻是将通过间接寻址方式获得的
38、外部数据单元的内容送达址方式获得的外部数据单元的内容送达A A,即对外部存储器进行读操作对外部存储器进行读操作。指令指令a a和指令指令b b采用8 8位位RiRi作为间址寄存器间址寄存器。8位地址和数据均由P0口分时输入或输出。R0和R1都是一个字节,因此前两条指令的寻址范围是256字节。如果超出此范围,一般选用P2口来输出高8位地址,并在MOVX指令前将高8位地址写入P2口。指令指令c c和指令指令d d采用1616位数据指针位数据指针DPTRDPTR作为间址寄存器间址寄存器,可寻址64KB的外部数据存储器。16位地址读取采用分开的方式进行,低8位地址DPL由P0口输出,高8位地址DPH由
39、P2口输出。42 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-14】将片内存储器40H地址单元的内容送到外部数据存储器2046H单元。这里给出两种实现方式。;40H地址单元的内容送AMOV A,40H;将外部数据存储器2046H高8位20H送P2端口MOV P2,#20H;将外部数据存储器2046H低8位46H送R0MOV R0,#46H;将片内存储器40H地址单元的内容送到片外RAM2046H单元MOVX R0,A方法一:方法一:43 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统;40H地址单元的内容送AMOVDPTR,#2046;将外部数据存
40、储器2046H高8位20H送P2端口MOVA,40H;将片内存储器40H地址单元的内容送到片外RAM2046H单元MOVXDPTR,A方法二:方法二:44 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统编号指令格式机器语言指令功能字节数指令周期数aMOVC A,A+DPTR93(A)(A)+(DPTR)12bMOVC A,A+PC83(A)(A)+(PC)123 访问程序存储器指令MCS-51MCS-51系列单片机指令系统中,访问程序存储器指令有系列单片机指令系统中,访问程序存储器指令有2 2条,用于查询存放在程序存储器的固定条,用于查询存放在程序存储器的固定表格或常数表格或
41、常数,因此,这两条指令也被称为查表指令查表指令。助记符均为“MOVCMOVC”,来自英文“Move Code”。指令具体情况如表所示。45 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统指令a和指令b源操作数均采用变址寻址方式变址寻址方式,寻址过程类似。但是,两条指令的基址寄存器不同,因此指令的适用范围也就不同。指令指令a a以以DPTRDPTR作为基址寄存器作为基址寄存器。DPTR是一个16位的寄存器,寻址范围可达64KB。每次查表前,只需将表头地址送入DPTR,就可以方便地使用本条指令查找存放在程序存储器64KB范围内的远程表格或数据了。指令指令b b以以PCPC作为基址
42、寄存器作为基址寄存器,PC的功能比较特殊,它指向的是当前执行指令的地址。由于PC的值已经确定,查表范围是由累加器A决定的,所以本条指令所能查找的数据只能存放在以当前PC值为起始地址的256字节范围内,一般称为本地表。46 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-15】假设表头地址为41H,A的内容为02H,指令a的执行过程如图所示。在指令a执行过程中,首先要通过变址寻址方式获得源操作数的地址,取出DPTR的值与累加器A的内容相加,即50H+02H=52H。然后将52H中的内容送累加器A,PC内容加1,整条指令完成。指令b的寻址和执行过程与指令a相似。需要注意的是
43、,指令b中的PC值是随程序的执行而变化的。A52HXX50HDPTR 41HMOVC A,A+DPTRPC 40H93ROMALU02H指令a执行过程示意图47 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统编号指令格式机器语言指令功能字节数指令周期数aPUSH directC0(SP)(SP)+1,(SP)(direct)12bPOP directD0(direct)(SP),(SP)(SP)1124 堆栈操作指令用于堆栈操作的命令有两条,POP和PUSH命令,它们的操作数只有一个direct,如表所示。48 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统
44、堆栈指令的操作对象堆栈指令的操作对象是采用直接寻址方式表示的片内采用直接寻址方式表示的片内RAMRAM低低128128字节或字节或SFRSFR单元的内容单元的内容。堆栈操作遵循“后进先出后进先出”原则,对堆栈指针SP所指向的地址单元进行压入和弹出操作,PUSH指令和POP指令要成对使用指令指令b b的功能的功能指令b的功能是将栈顶单元的内容弹出送direct地址单元中。在指令执行过程中,数据首先被弹出,然后堆栈指针减1,指向新的栈顶单元。指令指令a a的功能的功能指令a的功能是将direct地址单元的内容压入堆栈。在指令执行过程中,堆栈指针SP先加1,升高栈顶,指向新数据所要存入的地址单元,然
45、后,将数据压入。49 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统【例3-16】假设片外ROM地址单元从2046H开始存放着19的立方值。数据指针的初值为4000H,用查表指令取得2048H地址单元的数据后,要求保持DPTR的初值不变。程序如下,指令执行完成结果为:(A A)=1BH=1BH,(,(DPTRDPTR)=4000H=4000H。;2048H2046H的地址偏移量02H送AMOVA,#02H;保护DPTR的高8位入栈PUSHDPH;保护DPTR的低8位入栈PUSHDPL;改变数据指针DPTR的初值MOVDPTR,#2046H;采用间接寻址方式将2048H地址单元
46、内容送AMOVCA,A+DPTR;弹出DPTR低8位POPDPL;弹出DPTR高8位POPDPH从上边的例子可以看出,在改变DPTR指针的内容前我们先将其初值4000H压入栈中。当获得2048H地址单元的内容即33后,依照“后进先出”的原则将DPTR的初值弹出。50 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统编号编号指令格式指令格式机器语言机器语言指令功能指令功能字节数字节数指令周期数指令周期数aXCH A,RnC8CF(A)(Rn)11bXCH A,directC5 direct(A)(direct)21cXCH A,RiC6C7(A)(Ri)11dXCHD A,RiD
47、6D7(A)(Ri)3-011eSWAP AC4(A)7-4 (A)3-0115 数据交换指令MCS-51系列单片机指令系统中,数据交换指令有5条。用到的助记符有为“XCHXCH”、“XCHDXCHD”和“SWAPSWAP”,这三个助记符来源于均具有“交换”词意的英文单词“Exchange”和“Swap”。指令的具体情况如表所示:51 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统5 5条指令的目的操作数均为累加器条指令的目的操作数均为累加器A A,寻址空间为内部,寻址空间为内部RAMRAM。前3条指令均为整字节交换指令,指令功能是将通过不同寻址方式获得的指令功能是将通过不同
48、寻址方式获得的片内片内RAMRAM地址单元的内容和累加器地址单元的内容和累加器A A的内容交换的内容交换。后面两条指令是半字节交换指令,指令d是将寻址获得的地址单元内容的低四位与A中的低四位进行交换,高四位保持不变;指令e是将累加器A本身的低四位与高四位交换。52 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统算术运算类指令two在MCS-51系列单片机指令系统中,算术运算类指令共有24条。用到的助记符有ADDADD、ADDCADDC、SUBBSUBB、DADA、INCINC、DECDEC、MULMUL和DIVDIV共9种。算术运算类指令可以进行加、减、乘、除和十进制调整等算
49、术运算类指令可以进行加、减、乘、除和十进制调整等运算运算。执行这些指令会影响到PSW的相关标志位,如进位位Cy、辅助进位位AC、溢出位OV和奇偶校验位P,参见项目二程序状态字PSW。下面将24条指令按功能分为加法和减法指令、乘法和除法指令两部分进行讲述。53 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统1 加法和减法指令(1)不带进位的加法运算指令编号指令格式机器语言指令功能字节数指令周期数aADD A,#data24 data(A)(A)+data21bADD A,Rn282F(A)(A)+(Rn)11cADD A,direct25 direct(A)(A)+(direc
50、t)21dADD A,Ri2627(A)(A)+(Ri)11不带进位的加法运算指令共4条,使用助记符ADD,来自英文“AdditionAddition”。指令具体情况如表所示。这四条指令的功能是将累加器A的内容与源操作数(源操作数可以通过表中4种寻址方式获得)相加,结果存放A中,运算结果将对PSW的相关位产生影响。54 项目三 MCS51程序设计交通信号灯模拟系统设计任务二 指令系统这里设8位数从低到高为07位,执行运算指令后,单片机按以下规则对PSW的各标志位置位。不管最初将数定义为无符号数还是有符号数,运算器在做加法运算过程中,总是将各位的值当无符号数去进行运算将各位的值当无符号数去进行运