单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt

上传人(卖家):三亚风情 文档编号:3346618 上传时间:2022-08-22 格式:PPT 页数:143 大小:1.50MB
下载 相关 举报
单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt_第1页
第1页 / 共143页
单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt_第2页
第2页 / 共143页
单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt_第3页
第3页 / 共143页
单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt_第4页
第4页 / 共143页
单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt_第5页
第5页 / 共143页
点击查看更多>>
资源描述

1、第第3章章 汇编语言及其程序设计汇编语言及其程序设计3.1 汇编语言及其指令格式汇编语言及其指令格式3.2 寻址方式寻址方式3.3 单片机汇编语言指令体系单片机汇编语言指令体系3.4 汇编语言及程序设计汇编语言及程序设计3.5 基本程序设计方法基本程序设计方法3.6 程序设计举例程序设计举例3.1 汇编语言及其指令格式汇编语言及其指令格式 机器语言汇编语言74H 09HMOV A,09H 汇编人工汇编机器汇编机器语言汇编语言返回本章 指令与指令系统 MCS-51的指令系统分为:(1)数据传送类(29条)(2)算术运算类(24条)(3)逻辑运算类(24条)(4)控制转移类(17条)(5)位操作类

2、(17条)共111条指令例如:MOV P1,0FFH源操作数操作码目的操作数 在在MCS-51指令中,一般指令主要由指令中,一般指令主要由操作码、目的操作数、源操作数组成。操作码、目的操作数、源操作数组成。(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。(2)目的操作数指定操作结果存放的地址。(3)源操作数指明操作的对象或者是操作数所在的地址。指令格式指令格式LOOP:MOV A,10H ;(A)10H 标号注释标号:操作码操作码 目的操作数目的操作数,源操作数,源操作数;注释(1)Ri和Rn(2)#data(3)#data16(4)rel(5)addr16(6)add

3、r11(7)direct(8)bit(9)(10)(X)(11)(X)(12)3.2 寻址方式寻址方式 寻找操作数所在单元的地址称之为 寻址。寻址方式的多少是计算机功能强弱的重要标志。寻址方式分类寻址方式分类 3.2.1 立即寻址立即寻址 3.2.2 直接寻址直接寻址 3.2.3 寄存器寻址寄存器寻址 3.2.4 寄存器间接寻址寄存器间接寻址 3.2.5 变址寻址变址寻址 3.2.6 相对寻址相对寻址 3.2.7 位寻址位寻址返回本章 指令中直接给出操作数的寻址方式。例如:MOV P1,#0FFH MOV DPTR,#3400H MOV 30H,#40H;上述三条指令执行完后,寄存器P1中数据

4、为立即数据FFH,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。返回本节A片内RAM30H34H 指令中直接给出操作数地址的寻址方式。例如:MOV A,30H;(A)(30H)30H为直接给出的内部RAM的地址34H34H返回本节 能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOV PSW,#20H;(PSW)20H PSW为直接寻址寄存器的符号地址 MOV A,40H;(A)(40H)40H为直接给出的内部RAM的地址MOV D0H,#20HAR030H 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR、C以及R0R7。例如:MOV A

5、,R0 30H30H返回本节 看这个问题,要求从30H单元开始,取20个数,分别送入A累加器 MOV A,30H MOV A,31H MOV R7,#20 MOV R0,#30HLOOP:MOV A,R0 ;(A)(R0)INC R0 DJNZ R7,LOOP MOV A,R0 执行示意图片内RAMR034HA30H34H30H 寄存器间接寻址:以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。SP仅用于堆栈操作。返回本节 变址寻址:本指令是要在ROM的一个地址单元中找出数据

6、。单元地址:(DPTR)+(A)(PC)+(A)变址寻址只有读操作而无写操作,在指令符号上采用 MOVC 的形式,例如:MOVC A,A+DPTR;(A)((A)+(DPTR))MOVC A,A+PC ;(A)((A)+(PC))返回本节 相对寻址用于修改PC值,主要用于实现程序的分支转移。以当前当前程序计数器PC的内容为基础,加上指令给出的偏移量 rel,而构成实际操作数地址的寻址方式。当前PC值源地址转移指令字节数。偏移量rel为单字节有符号数,以补码形式表示,范围是128127相对寻址目的地址当前PC值rel 源地址转移指令字节数rel200AH程序存储器SJMP08H2000H2001

7、H2002H2000HPC当前PC2000H2(2002H)200AHPC2001HPC2002HPCrel=08H例如 SJMP 08H ;(PC)(PC)+2+08H 返回本节 位寻址其实是一种直接寻址方式,不过其地址是位地址。位寻址只能对有位地址的单元作位寻址操作。例如:SETB 10H;将位地址为10H的位置1 22H单元的D0位的位地址为10H,若22H单元中存放着数据40H执行上述指令后(22H)=41H。又如:MOV 32H,C ;(32H)(CY)SETB PSW.3 返回本节3.3 单片机汇编语言指令体系单片机汇编语言指令体系3.3.1 数据传送类指令数据传送类指令3.3.2

8、 算术运算类指令算术运算类指令3.3.3 逻辑运算与移位类指令逻辑运算与移位类指令3.3.4 控制转移类指令控制转移类指令3.3.5 位操作指令位操作指令返回本章返回本章3.3.1 数据传送类指令 数据传送类指令共29条 指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有 MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 数据传送类指令不影响标志位CY、AC、OV但可能影响奇偶标志P返回本节直接地址direct累加器A直接地址direct间接地址Ri寄存器Rn立即数#data寄存器DPTR图3-6 MCS-51单片机片内数据传送图一、内部数

9、据存储器间数据传送指令MOV A,directMOV A,#dataMOV A,RnMOV A,RiMOV Rn,AMOV Rn,directMOV Rn,#dataMOV direct,AMOV direct,RiMOV direct,#dataMOV direct,RnMOV direct2,direct1MOV Ri,directMOV Ri,#dataMOV Ri,AMOV DPTR,#Data1以以A为目的操作数为目的操作数MOV A,Rn ;(A)(Rn)MOV A,direct;(A)(direct)MOV A,Ri ;(A)(Ri)MOV A,#data;(A)#data返回一

10、、内部数据存储器间数据传送指令2以以Rn为目的操作数为目的操作数MOV Rn,A ;(Rn)(A)MOV Rn,direct ;(Rn)(direct)MOV Rn,#data ;(Rn)#data返回一、内部数据存储器间数据传送指令3以直接地址为目的操作数以直接地址为目的操作数MOV direct,A ;(direct)(A)MOV direct,Rn ;(direct)(Rn)MOV direct2,direct1;(direct2)(direct1)MOV direct,Ri ;(direct)(Ri)MOV direct,#data ;(direct)#data返回一、内部数据存储器间

11、数据传送指令4以间接地址为目的操作数以间接地址为目的操作数MOV Ri,A ;(Ri)(A)MOV Ri,direct ;(Ri)(direct)MOV Ri,#data ;(Ri)#data例如:设(30H)=6FH,R1=40H,执行:MOV R1,30H结果:(40H)=6FH。返回一、内部数据存储器间数据传送指令5以以DPTR为目的操作数为目的操作数MOV DPTR,#data16 ;(DPTR)#data16例如:执行 MOV DPTR,#2000H 结果:(DPTR)=2000H。返回一、内部数据存储器间数据传送指令例:(30H)=40H,(40H)=10H,(P1)=0CAH执行

12、:MOV R0,#30H MOV A,R0 MOV R1,A MOV 30H,R1 MOV R1,P1 MOV P2,P1问:(30H)=?(40H)=?(P1)=?(P2)=?(R1)=?(R2)=?(A)=?二、访问外部数据存储器的指令二、访问外部数据存储器的指令 访问外部存储器必须通过累加器A 采用间接寻址方式MOVX A,DPTR;(A)(DPTR)MOVX DPTR,A;(DPTR)(A)MOVX A,Ri;(A)(P2Ri)MOVX Ri,A;(P2Ri)(A)外部RAM例:已知外部RAM (0203H)=0FFH,执行:MOV DPTR,#0203HMOVX A,DPTRMOV

13、30H,AMOV A,#00HMOVX DPTR,A问:(1)程序功能 (2)(DPTR)=?(A)=?(30H)=?MOV P2,#02HMOV R0,#03HMOVX A,R0MOV 30H,AMOV A,#00HMOVX R0,A 程序程序2三、访问程序存储器的指令三、访问程序存储器的指令MOVC A,A+DPTR;(A)(A)+(DPTR))MOVC A,A+PC;(A)(A)+(当前PC)例如:已知(A)=30H,(DPTR)=3000H,程序存储器单元(3030H)=50H,执行:MOVC A,A+DPTR则:(A)=50H。例:在外部ROMEPROM中从2000H单元开始依次存放

14、09的平方值:0,1,4,81,要求依据累加器A的值(09)来查找对应的平方值。方法1 MOV DPTR,2000H MOV A,09H MOVC A,A+DPTR执行结果:(A)81,(DPTR)2000H012000H2001H2002H0212224外部ROM2009H8192方法2 MOV A,09H ADD A,0FH MOVC A,A+PC执行结果:(A)81,(PC)1FF1H74H09H24H0FH83H1FF0H012000H2001H2002H0212224外部ROMPC偏移量偏移量表首地址(表首地址(MOVC指令所在地址指令所在地址1)2009H8192偏移量2000H(

15、1FF0H1)0FH (A)=18H1FF1H当前PC四、数据交换类指令四、数据交换类指令l 字节交换XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)2 半字节交换XCHD A,Ri ;(A03)(Ri03)SWAP A ;(A03)(A47)例:(R0)=20H,(A)=3FH,(20H)=75H(1)执行执行 XCH A,R0 ;(A)=?XCHD A,R0;(A)=?SWAP A;(A)=?(2)执行程序段执行程序段 MOV A,20H XCH A,R0 MOV 20H,A SJMP$则(则(A)=?(R0)=?(20

16、H)=?五、堆栈操作类指令五、堆栈操作类指令 PUSH direct;(SP)(SP)+1,(SP)(direct)POP direct;(direct)(SP),(SP)(SP)1片内RAM50H40H11H10H50HSP30H执行PUSH指令指令 PUSH 40H 操作示意图片内RAM40H11H10HSP30H执行前50H执行前指令 POP 30H 操作示意图片内RAM40H11H10H34HSP30H执行POP指令片内RAM30H11H10HSP40H34H34H例:已知外部RAM (0203H)=0FFH,(DPTR)=1000H执行下面的程序,问(A)?,(DPTR)?。PUSH

17、 DPHPUSH DPLMOV DPTR,#0203HMOVX A,DPTRMOV 30H,AMOV A,#00HMOVX DPTR,APOP DPLPOP DPH【例例】将片内将片内RAM 30H单元与单元与40H单元中的内容互换。单元中的内容互换。方法1(直接地址传送法):MOV31H,30H MOV30H,40H MOV40H,31H SJMP$片内RAM40H11H10H34H30H31H方法2(间接地址传送法):MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$方法3(字节交换传送法):MOVA,30H XCHA,4

18、0H MOV30H,A SJMP$方法4(堆栈传送法):PUSH30H PUSH40H POP30H POP40H SJMP$返回本节3.3.2 算术运算类指令1加法指令加法指令 ADD A,Rn ;(A)(A)+(Rn)ADD A,direct;(A)(A)+(direct)ADD A,Ri;(A)(A)+(Ri)ADD A,#data;(A)(A)+#data 这四条加法指令使累加器A可以和内部RAM的任何单元内容相加,也可和8位立即数相加。参与运算的是两个8位二进制数,可以看作带符号数,也可看作无符号数。加法指令影响标志位CY,OV,AC,P 对无符号数CY=1表示溢出,对有符号数OV=

19、1表示溢出2带进位加指令带进位加指令ADDC A,Rn;(A)(A)+(Rn)+(C)ADDC A,direct;(A)(A)+(Rn)+(direct)+(C)ADDC A,Ri;(A)(A)+(Ri)+(C)ADDC A,#data;(A)(A)+#data+(C)用于多字节的加法中用于多字节的加法中ADD A,Rn;(A)(A)+(Rn)ADD A,direct;(A)(A)+(direct)ADD A,Ri;(A)(A)+(Ri)ADD A,#data;(A)(A)+#data3带借位减指令带借位减指令SUBB A,Rn;(A)(A)-(Rn)-(C)SUBB A,direct;(A)

20、(A)-(direct)-(C)SUBB A,Ri;(A)(A)-((Ri))-(C)SUBB A,#data;(A)(A)-#data-(C)例如,设(A)=39H,(R0)=20H,(20H)=32H,(C)=1执行指令:SUBB,R0结果(A)=06H。4乘法指令乘法指令 MUL AB;(B)(A)(A)(B)A和和B中各存放一个中各存放一个8位无符号数,指令执行后,位无符号数,指令执行后,16位乘位乘积的高积的高8位在位在B中,低中,低8位存位存A中。中。若乘积大于若乘积大于FFH(255),则溢出标志则溢出标志OV=1乘法指令执行后乘法指令执行后CY=0乘法指令本身只能进行乘法指令本

21、身只能进行8位数的乘法运算。位数的乘法运算。例如,(A)=30H(48),(B)=60H(96),执行:MUL AB 结果(BA)=1200H(4608)A=00H,B=12H。5除法指令除法指令DIV AB;(A)(B)商在A中,余数在B中 A和和B中各存放一个中各存放一个8位无符号数,位无符号数,A放被除数,放被除数,B放除数。放除数。指令执行后,指令执行后,A中存放商,中存放商,B中存入余数中存入余数;CY=0,OV=0若若B=00H,则指令执行后,则指令执行后OV=1,A与与B不变不变。例如,A=30H,B=07H,执行:DIV AB 结果:A=06H,B=06H。6加加1指令指令IN

22、C A ;(A)(A)+1INC Rn ;(Rn)(Rn)+1INC direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;(DPTR)(DPTR)+1例如:(30H)=22H,执行 INC 30H结果:(30H)=23H。7减减1指令指令DEC A;(A)(A)1DEC Rn;(Rn)(Rn)1 DEC direct;(direct)(direct)1DEC Ri ;(Ri)(Ri)1例如:(R0)=30H,(30H)=22H,执行:DEC R0结果:(30H)=21H。注意:加(减注意:加(减)1指令执行后不影响状态标志位指令执行后不影

23、响状态标志位8十进制调整指令十进制调整指令DA A ;把A中按二进制相加的结果调整成 按BCD码相加的结果(1)十进制调整的必要性二进制的加法运算不能完全正确适用于十进制的加法运算(2)出错原因及调整方法8.十进制调整指令十进制调整指令(3)十进制调整的方法v累加器低4位大于9或辅助进位(AC)为1,则进行低4位加6修正:(A)(A)+06Hv累加器高4位大于9或进位标志位(CY)为1,则进行高4位加6修正:(A)(A)+60Hv累加器高4位为9,低4位大于9,则进行高低4位加6修正:(A)(A)+66H例:双字节压缩BCD码加法(R5R4)+(R3R2)(R6R5R4)MOV A,R4ADD

24、 A,R2DA AMOV R4,AMOV A,R5ADDC A,R3DA AMOV R5,AMOV A,#00HADDC A,#00HMOV R6,A (R5)(R4)+(R3)(R2)(R6)(R5)(R4)返回本节3.3.3 逻辑运算与移位类指令1“与与”操作指令操作指令 ANL direct,AANL direct,#dataANL A,direct ANL A,#dataANL A,RiANL A,Rn2“或或”操作指令操作指令ORL direct,AORL direct,#dataORL A,direct ORL A,#dataORL A,RiORL A,Rn3“异或异或”操作指令操

25、作指令XRL direct,AXRL direct,#dataXRL A,direct XRL A,#dataXRL A,RiXRL A,Rn 上述与、或、异或三种逻辑运算都是按位进行的,而且不影响标志位CY、OV、AC ANL运算常用来屏蔽某些不用位;ORL运算可对某些位进行置位例:将累加器A的内容送P1口的低5位,传送时要求绝对不影响P1口的高3位ANL A,#00011111BANL P1,#11100000BORL P1,A4累加器累加器A清零与取反指令清零与取反指令CLR ACPL AA0A7CYCY5移位指令移位指令RL A ;(An+1)(An),(A0)(A7)RLC A ;(

26、An+1)(An),(CY)(A7)(A0)(CY)RR A ;(An)(An+1),(A7)(A0)RRC A ;(An)(An+1),(CY)(A0)(A7)(CY)CYCY例:已知(20H)X7 X6 X5 X4 X3 X2X1 X0 (21H)Y7 Y6 Y5 Y4Y3 Y2Y1Y0 执行下段程序 MOV 30H,20H ANL 30H,00011111B MOV A,21H SWAP A RL A ANL A,11100000B ORL 30H,A问:(30H)返回本节3.3.4 控制转移类指令控制转移类指令 1无条件转移指令无条件转移指令 LJMPaddr16;(;(PC)addr

27、16 AJMPaddr11;(;(PC)(PC)+2 (PC)100 addr11 SJMPrel;(;(PC)(PC)+2+rel JMP A+DPTR;(;(PC)(A)+(DPTR)长转移指令,三字节指令,提供16位目标地址addr16,转移范围64K绝对转移指令,双字节指令,转移范围是和当前PC在同一个2K范围内短转移指令,双字节指令,目的地址=源地址+2+rel 间接长转移指令,单字节指令,可实现多分支的选择转移 ORG 0000H MAIN MOV A,#20H ORG 0080HMAIN:MOV A,#30H 2条件转移指令条件转移指令 JZ rel;若若A=0则转移:则转移:(

28、PC)(PC)+2+rel,否则程序顺序执行否则程序顺序执行 (PC)(PC)+2 JNZ rel;若若A0则转移:则转移:(PC)(PC)+2+rel,否则程序顺序执行否则程序顺序执行 例:将外部RAM的一个数据块传送到内部RAM,两者首地址分别为DAT1和DAT2,遇到传送的数据为零时为止。MOV DPTR,#DAT1MOV R1,#DAT2LOOP:MOVX A,DPTRMOV R1,AINC DPTRINC R1 CJNEA,#data,rel CJNEA,direct,rel CJNERi,#data,rel CJNERn,#data,rel CJNE目的操作数目的操作数,源操作数源

29、操作数,rel 若目的操作数=源操作数,则(PC)(PC)+3,顺序执行顺序执行 若目的操作数源操作数,则(PC)(PC)+3+rel;CY=0,程序转移程序转移 若目的操作数源操作数,则(PC)(PC)+3+rel;CY=1 程序转移程序转移 DJNZ direct,rel;(direct)(direct)1 若(direct)=0,则(PC)(PC)+3 否则(PC)(PC)+3+rel DJNZ Rn,rel;(Rn)(Rn)1 若(Rn)=0,则(PC)(PC)+2 否则(PC)(PC)+2+rel例:将内部RAM中从DATA单元开始的10个无符号数相加,结果送SUM单元保存MOV R

30、0,#0AHMOV R1,#DATACLR ALOOP:ADD A,R1INC R1MOV SUM,A3子程序调用及返回指令子程序调用及返回指令LCALL addr16;(PC)(PC)+3,(SP)(SP)+1,(SP)(PC70);(SP)(SP)+1,(SP)(PC158);(PC)addr16 ACALL addr11;(PC)(PC)+2,(SP)(SP)+1,(SP)(PC70);(SP)(SP)+1,(SP)(PC158);(PC 100)addr11RET(PC158 )(SP),(SP)(SP)-1 ;(PC70 )(SP),(SP)(SP)-1 ;RETI(PC158)(S

31、P),(SP)(SP)-1 ;(PC70 )(SP),(SP)(SP)-1 ;子程序的调用过程MOV SP,#50HACALL DIMSDIMS:MOV R7,#64HDELAY:DJNZ R7,DELAY RET NOP ;(;(PC)(PC)+1 4.空操作指令空操作指令返回本节 1位数据传送指令位数据传送指令 MOVC,bit;C(bit)MOV bit,C;(bit)C位地址的表示方法有以下四种:直接位地址表示方式,如:D5H 点操作符表示方式,如 PSW.5 位名称表示方法,如 F0 用户定义名表示方式。2位置位指令位置位指令 CLRC;(CY)0 CLRbit;(;(bit)0 S

32、ETB C;(CY)1 SETB bit;(bit)13位逻辑运算指令位逻辑运算指令ANLC,bit;(CY)(CY)(bit)ANLC,/bit;(CY)(CY)(bit)ORLC,bit;(CY)(CY)(bit)ORLC,/bit;(CY)(CY)(bit)CPL C ;(CY)(CY)CPL bit ;(bit)(bit)4位条件转移指令位条件转移指令 1)判布尔累加器条件转移指令)判布尔累加器条件转移指令JC rel若(CY)=1,则转移:(PC)(PC)+2+rel;(CY)=0,则程序顺序执行JNC rel 若(CY)=0,则转移(PC)(PC)+2+rel;(CY)=1,则程序

33、顺序执2)判位变量条件转移指令)判位变量条件转移指令JB bit,rel ;若(bit)=1,则转移(PC)(PC)+3+rel;(bit)=0,则程序顺序执行JNB bit,rel ;若(bit)=0,则转移(PC)(PC)+3+rel;(bit)=1,则程序顺序执行 JBC bit,rel ;若(bit)=1,则(PC)(PC)+3+rel,(bit)0;(bit)=0,则程序顺序执行例例:编程序用以实现图示逻辑功能编程序用以实现图示逻辑功能 MOV C,P2.2ORL C,TF0ANL C,P1.1MOV F0,CMOV C,IE1 ORL C,/20H.0ANL C,F0ANL C,/

34、08H MOV P3.3,C 例:(20H)X7 X6 X5 X4 X3 X2X1 X0,执行 MOV C,00H RLC A MOV C,01H RLC A MOV C,02H RLC A MOV C,03H RLC A ANL A,0FH MOV 20H,A 问:(20H)=_3.4 汇编语言及程序设计汇编语言及程序设计3.4.1程序设计语言程序设计语言1机器语言机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。2汇编语言汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。3高级语言高级语言:高级语言是接近于人的自然语言,面

35、向过程而独立于机器的通用语言。3.4.2 汇编语言语句汇编语言语句结构结构汇编语言的指令类型汇编语言的指令类型(1)基本指令(2)伪指令汇编语言的语句(指令)格式标号:操作码操作数;注释START:MOV A,30H;A(30H)(1)ORG:设置目标程序起始地址 格式:标号:ORG 16位地址 ORG 2000HSTART:MOV A,#7FH3.4.3 伪指令伪指令200AH程序存储器74H7FH2000H2001H2002H(2)END:汇编结束 格式:标号:END(3)DB:定义数据字节 格式:标号:DB 项或项表 一个字节的常数或常数表 ORG 2000HTAB1:DB 30H,8A

36、H,7FH,49H DB 5,A,BCD2000H30H2001H8AH2002H7FH2003H49H2004H35H2005H41H2006H42H2007H43H2008H44H2009H(4)DW:定义数据字 格式:标号:DW 项或项表两个字节的常数或常数表 ORG 1500HTAB2:DW 1234H,0080H,1500H12H1501H34H1502H00H1503H80H(5)DS:预留存储空间 格式:标号:DS 表达式 ORG 1500H DS 20HTAB2:DW 1234H,0080H1500H1501H1502H1503H151FH1520H12H1521H34H152

37、2H00H1523H80H(6)EQU:赋值 格式:标号:EQU 项 给变量标号赋予一个确定的数值。TAB:EQU 1000H TAB1:EQU TAB(7)BIT:位地址赋值 格式:标号:BIT 位地址 AI:BIT P1.0常数,地址标号或表达式返回本章3.5 汇编语言程序设计方法汇编语言程序设计方法1分析问题2确定算法3设计程序流程图4分配地址(主要是分配内存单元)5编写汇编语言源程序6调试程序3.5.1 程序设计一般步骤程序设计一般步骤3.5.2 程序基本结构程序基本结构(1)顺序程序)顺序程序【例3.1】将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元31H(

38、高位),32H(低位)中。程序流程如图3-1所示。结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始图3-1 拆字程序流程图ORG 2000HMOV A,30H;取值ANLA,#0FH;取低4位ADDA,#30H;转换成ASCII码MOV 32H,A;保存结果MOV A,30H;取值SWAPA;高4位与低4位互换ANLA,#0FH;取低4位(原来的高4位)ADDA,#30H;转换成ASCII码MOV 31H,A;保存结果 SJMP$END(2 2)分支程序)分支程序1)分支程序的基本形式)分支程序的基本形式分支程序有三种基本形式,如下图所示。分支程

39、序结构流程图分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。2)分支程序设计举例)分支程序设计举例【例3.2】设X存在30H单元中,根据下式 1X0Y=0X=0 -1XMAX修改循环参数搜索完否?返回NYMAX 数N例3流程图参考程序参考程序:ORG 2000HLOOP:MOV R0,#BLOCK MOV R1,LEN MOV MAX,#00HLOOP1:MOV A,MAX CLR C SUBB A,R0 JNC NEXT MOV MAX,R0 ;(cy)=1,MAX0Y=100 X=0 求出Y值,并将Y值放回原处

40、。X X0解:数据块中的十个数都需要进行符号判断并作相应处理,可把一部分工作交给子程序完成,主程序只负责读取数据、调用判断处理子程序、保存数据、循环控制工作。ORG1000H MOVR0,#10 MOVR1,#30HSTART:MOVA,R1;取数;取数 LCALLDISPOSE;调用判断、处理子程序;调用判断、处理子程序SAVE:MOVR1,A;保存数据;保存数据 INCR1;修改地址指针,指向下一个地址;修改地址指针,指向下一个地址 DJNZR0,START;数据未处理完继续;数据未处理完继续 SJMP;暂停;暂停 ORG2000HDISPOSE:JBACC.7,NEG ;若为负数,转;若

41、为负数,转NEG JZZER0;若为零,转ZER0 ADD A,#02H;若为正数,求X+2 AJMP BACK;返回ZER0:MOV A,#64H;数据为零,Y=100 AJMP BACK;返回NEG:DECA CPLA;数据为负求 XBACK:RET ;返回返回本章3.6 程序设计举例程序设计举例查表程序查表程序:预先将某一数据表格存放在ROM中,程序中根据自变量X利用查表指令读出与其对应的数据。查表指令:MOVC A,A+DPTRMOVC A,A+PC在在LED显示和键盘处理程序中将会用到。显示和键盘处理程序中将会用到。3.6.1 查表程序设计查表程序设计1000H001001H1110

42、02H421003H931004H1641005H2551006H3661007H4971008H6481009H819y=x2地址X函数y的地址 =1000H +xROM中的数据表表首地址MOV DPTR,#1000HMOV A,#04HMOVC A,A+DPTR例:设有一巡回检测报警装置需对16路输入值进行比较,当某一路输入值超过该路的报警值时实现报警,编制查表程序依据路数xi查得报警值yi程序入口:(R2)=路数xi程序出口:(R4R3)=对应xi的报警值yiTABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高15TAB+

43、31Y15低报警值路数 Xi报警值yi高的地址 =TAB +2*Xi报警值地址报警值yi低的地址 =TAB +2*Xi+1利用DPTR做基地址查表(1)表格首地址送DPTR(2)查表项数送累加器A(3)执行查表指令:MOVC A,A+DPTR 查表结果回累加器A MOV DPTR,#TAB MOV A,R2 ADD A,R2 MOV R4,A MOVC A,A+DPTR XCH A,R4 INC A MOVC A,A+DPTR MOV R3,A RETTAB:DW 050FH.TABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高

44、15TAB+31Y15低报警值yi高的地址=TAB +2*XiMOVC A,A+PC报警值yi低的地址 =TAB +2*Xi+1利用PC做基地址查表(1)查表项数送累加器A(2)累加器A加上表首偏移量偏移量表首地址偏移量表首地址PC当前值当前值(A)=项数+表首地址PC当前值(3)执行查表指令:MOVC A,A+PC 查表结果回累加器AMOVC指令所在指令所在地址地址1EA MOV A,R22A ADD A,R2EC MOV R4,A2407 ADD A,#07H83 MOVC A,A+PCCC XCH A,R404 INC A2402 ADD A,#02H83 MOVC A,A+PCFB M

45、OV R3,A22 RET050F TAB:DW 050FH.83HCCH04H24H02H83HFBH22HTAB05H0TAB+10FHTAB+20EH1TAB+389H.TAB+306CH15TAB+31A0HPCTAB-1TAB-2TAB-3TAB-7例:设(R0)2FH,(R1)6,(A)01H,写出执行这段程序后30H35H各单内容。MOV DPTR,TABLELOOP:INC A INC R0 LCALL CAP DJNZ R1,LOOP HEAR:SJMP HEARCAP:PUSH A MOVC A,ADPTR MOV R0,A POP A RETTABLE:DB 00H,01

46、H,04H,09H DB 16H,25H,36H,49H DB 64H,81H END 散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。DPTRAPCA中内容为8位无符号数16位地址数3.6.2 散转程序设计散转程序设计JUMP1:MOV DPTR,JPTAB ;跳转表首送数据指针 MOV A,R7 ADD A,R7 ;2*(R7)JNC NOAD INC DPHNOAD:JMP A+DPTR ;转向形成的散转地址入

47、口JPTAB:AJMP OPR0 ;直接转移地址表 AJMP OPR1 .AJMP OPRn例例:根据根据R7的内容,转向各自对应的操作的内容,转向各自对应的操作 程序程序(R7=0,转入转入OPR0;R7=i,转入转入OPRi;n=255)源程序:源程序:指令周期指令周期DELAY:MOV R3,#(X )H 1个个T机器机器 DEL2:MOV R4,#(Y )H 1个个T机器机器 DEL1:NOP 1个个T机器机器 NOP 1个个T机器机器 DJNZ R4,DEL1 2 个个T机器机器 DJNZ R3,DEL2 2个个T机器机器 RET指令周期、机器周期指令周期、机器周期T机器机器与时钟周

48、期与时钟周期T时钟时钟的关系:的关系:T机器机器=12T时钟时钟=12*1/fosc=1s (假设晶振频率(假设晶振频率fosc为为12M)延时时间的简化计算结果:延时时间的简化计算结果:(1+1+2)*X*Y若想延时若想延时100ms,只需修改计数初始值,即,只需修改计数初始值,即(1+1+2)*200*125s=100ms#200#1253.6.3 延时程序设计延时程序设计1S延时程序延时程序源程序:源程序:DELAY:MOV R2,#10 DEL3:MOV R3,#200DEL2:MOV R4,#125DEL1:NOP NOP DJNZ R4,DEL1 DJNZ R3,DEL2 DJNZ

49、 R2,DEL3 RET例5:编程实现P1口连接的8个LED显示方式如下:从P1.0到P1.7的顺序,依次点亮其连接的LED。次数次数子程序实例引入:子程序实例引入:ORG 0000HSTART:MOV R2,#08H ;设置循环次数设置循环次数 MOV A,#0FEH ;送显示模式字送显示模式字NEXT:MOV P1,A ;点亮二极管点亮二极管 ACALL DELAY RL A ;左移一位,改变显示模式字左移一位,改变显示模式字 DJNZ R2,NEXT ;循环次数减循环次数减1,不为零,继续点亮,不为零,继续点亮 SJMP START ;下面一个二极管下面一个二极管 DELAY:MOV R

50、3,#0FFH ;时子程序开始时子程序开始DEL2:MOV R4,#0FFHDEL1:NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 18题 MOV R0,#20H MOV R1,#2FH MOV R2,#3HLOOP:MOV A,R0 MOV R1,A INC R0 DEC R1 DJNZ R2,LOOP RET19题 MOV DPTR,#1000H MOV R0,#30H MOV R1,#31HLOOP1:MOVX A,DPTR MOV R0,A MOV A,#00H MOVX DPTR,A INC R0 INC DPTR DJNZ R1,LOOP1 RET20

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(单片机微机原理及应用基础教程第章汇编语言及其程序设计课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|