第二章单片机技术(基础)课件

上传人:无*** 文档编号:241973936 上传时间:2024-08-08 格式:PPT 页数:84 大小:2.17MB
返回 下载 相关 举报
第二章单片机技术(基础)课件_第1页
第1页 / 共84页
第二章单片机技术(基础)课件_第2页
第2页 / 共84页
第二章单片机技术(基础)课件_第3页
第3页 / 共84页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,大家好,第二章,M,CS-51,系列单片机系统结构,2.1 MCS-51,单片机的硬件结构(,8051,),2.2 MCS-51,的中央处理器,CPU,2.3 MCS-51,的同步时钟和复位,2.4 CPU,的时序(定时),2.5,存储器组织,2.6,指令系统基本概念,2.7,指令格式,2.8,寻址方式,2.9,数据操作和指令类型,2.10,MCS-51,指令系统简介,2.11,汇编语言程序设计方法,2.1 MCS-51,单片机的硬件结构,一,总体结构(,8051,),图,2-1,(89C52),图,2-2,二,内部资源,CPU8,位,程序存储器:,4KROM,(,89C52,有,8K,),数据存储器:,128,字节,RAM,(,89C52,有,256,字节),定时器,/,计数器:,2,个(,89C52,有,3,个),并行口:,4,个,串行口:,1,个,中断源:,5,个(,89C52,有,6,个),时钟频率:,1.5MHZ12MHZ,三,外部引脚和逻辑符号,图,2-3,和图,2-4,P0,口,P3,口:,4,832,根线,ALE,,,PSEN,,,EA,:系统扩展控制线,3,根,XTAL1,,,XTAL2,:时钟电路接入线,2,根,RST,:复位线,1,根,V,CC,,,V,SS,:工作电源线,接地线,2,根,2.2 MCS-51,的中央处理器,CPU,一运算器,1.,算术逻辑运算器,ALU,运算数据宽度:,8,位或,1,位,运算功能包括:,1),逻辑与、或、异或、循环移位、求补、清零及,1,位变量的置,1,、清零、求补、位测试转移、与、或,2),算术加、减、乘、除,2.,累加器,A,数据宽度:,8,位,功能包括:,1)ALU,输入数据之一,2)CPU,数据传送中转寄存器,3),具有数据加,1,和减,1,、移位等功能,3.,寄存器,B,数据宽度:,8,位,功能:乘除法中的,“,乘数,”,或,“,除数,”,及结果的数据寄存单元,也可用作一般的数据寄存单元。,2.2 MCS-51,的中央处理器,CPU,一运算器,4.,程序状态字寄存器,PSW,PSW,格式:,PSW,中的各位功能:,(,1,),Cy,(,Psw.7,)进位标志位,也是位累加器,C,(,2,),Ac,(,Psw.6,)辅助半进位标志。,(,3,),F0,(,Psw.5,)用户状态标志,(,4,),RS1,、,RS0,(,Psw.4,、,Psw.3,),4,组工作寄存器区选择控制位,(,5,),OV,(,Psw.2,)溢出标志,(,6,),F1,(,Psw.1,)用户状态标志,(,7,),P,(,Psw.0,)奇偶标志位,判断累加器,A,中的为“,1”,位的奇偶性。,Cy,Ac,F0,RS1,RS0,OV,F0,P,D7 D6 D5 D4 D3 D2 D1 D0,PSW,D0H,2.2 MCS-51,的中央处理器,CPU,二控制器,1.,程序计数器,PC,程序计数器是一个可并行预置的,16,位计数器,作用是提供下一条将要执行的指令的在程序存储器中存放的地址值。,工作方式:,(,1,)程序计数器在时钟脉冲控制下自动加,“,1,”,,达到顺序执行程序,(,2,)由转移指令直接并行置入新值,达到程序转移执行,(,3,)由调用子程序指令直接并行置入新值,达到执行子程序,2.,指令寄存器,指令寄存器,IR,是用来存放正在执行的指令的操作码,3.,指令译码器,指令译码器是对指令操作码进行译码、识别,产生对应的指令控制信号,从而完成指令的功能。,4.,指令控制逻辑电路,在指令译码信号指示下产生完成具体的指令功能的控制信号,控制各部件完成指令功能。,2.3 MCS-51,的同步时钟和复位,一同步,时钟和时钟电路,单片机实际上是一个复杂的同步时序电路,所以必须在一个同步时钟控制下才能工作,时钟电路即产生该同步时钟信号。,内部时钟电路时钟产生法,该方法由内部时钟电路和外接晶振构成,接法,如图,2-8,所示,外部直接时钟输入法,该方法将外部时钟信号直接由时钟引脚输入,接法,如图,2-9,所示,二,复位和复位电路,通过复位功能使单片机上电后从初始的固定状态开始工作。,复位后内部寄存器的初始状态 如,表,2-6,所示,上电自动复位电路 如,图,2-12a,所示(微分电路),人工复位电路 如,图,2-12b,所示,系统总复位电路,时序上要求是,CPU,比其它部件同时或延后退出复位,,不得先退出复位,其实现电路,如图,2-13,所示,2.4 CPU,的时序(定时),一,CPU,的指令执行时序,如,图,2-10,所示,CPU,每条指令的执行过程可以分成几个微操作完成,而每个微操作又可分成几个微步;这些微步、微操作、及指令执行所需的时间分别用,状态周期、机器周期、指令周期描述,。,二,MCS-51,的状态周期、机器周期、指令周期,状态周期,需,2,个时钟周期,(P1,,,P2),机器周期,需,6,个状态周期组成,(S1,,,S2,,,,,S6,),若晶振是,12MHz,,则一个机器周期是,1us,指令周期,需,1,至,4,个机器周期,三,MCS-51,指令周期特点,大多数指令是,1,至,2,个机器周期,MUL(,乘法,),和,DIV(,除法,),指令是,4,个机器周期,1,字节,1,个机器周期、,2,字节,1,个机器周期、,1,字节,2,个,机器周期。如,图,2-10,所示,2.5,存储器组织,MCS-51,单片机的,5,个独立 的存储器寻址空间,如图,2-5,所示,64K,字节程序存储器空间(,0,0FFFFH,),128,字节内部,RAM,空间(,00,7FH,)(,89C52,有,256,字节,000FFH,),128,字节内部特殊功能寄存器空间(,80,0FFH,),位寻址空间(,0,0FFH,),(通用位存储器,128,个,特殊位存储器,83,个),64K,字节外部数据存储器(,RAM/IO,)空间(,0,0FFFFH,),存储器系统按功能分成两部分:,程序存储器:,64KB,数据存储器:,64K+128256,字节,存储器系统按空间分成两部分:,片内存储器:程序存储器,032KB,字节,数据存储器,128256,个字节。,片外存储器:程序存储器,数据存储器,64K,。,存储器系统按存放信息的位数来分:,字节存储器,8,位,位存储器:,1,位,共有,211,位,2.5,存储器组织,一,.,程序存储器,图,2-5,程序存储器空间:,片内,片外,编址:,共,64K,,片内,片外统一编址,用,16,位二进制编地址。,控制线:,EA,,,PSEN,,,ALE,EA=1,,表示允许选用片内程序存储器,地址从,0000H,开始,如果有,4K,,则末地址为,0FFFH,;片外程序存储器的地址从,1000H,开始。,EA=0,,表示禁止选用片内程序存储器,程序存储器全部在片外。片外程序存储器的地址从,0000H,开始。,PSEN,:是系统访问外部程序存储器的读出信号专线,低电平有效。,ALE,:地址锁存控制信号,用于将访问片外程序存储器的低,8,位地址打入地址锁存器。,CPU,复位后,程序计数器,PC,为,0,,,CPU,总是从地址为,0,的单元取指令开始执行程序。特殊用途单元,图,2-6,2.5,存储器组织,二,.,数据存储器,图,2-5,1,概述,数据存储器空间:,片内,128 byte,(,89C52,为,256,字节);片外,064KB,;,编址:,片内数据存储器用,8,位二进制编地址;片外数据存储器用,16,位二进制编地址。,控制线:,2,根。,RD,:对片外数据存储器进行读(取)操作。,WR,:对片外数据存储器进行写(存)操作。,2,片外数据存储器,CPU,可寻址,64K,字节的外部数据存储器,CPU,对外部扩展,RAM,和,I/O,是统一编址,既读,/,写一个,I/O,口相当于读,/,写一个存储器单元。,2.5,存储器组织,二,.,数据存储器,3.,片内数据存储器,一般为,128,(,89C52,为,256,)个字节,按功能分可分为:工作寄存器区、位寻址区、堆栈和数据缓冲器,如,图,2-7,所示,工作寄存器区:,01FH,,分,4,个区,,表,2-1,。,4,个区由,PSW,标志寄存器的,RS0,(,D3,)和,RS1,(,D4,)选择。如,表,2-2,所示。,位寻址区:,20H2FH,,用于存放各种程序标志,位控制变量。表,2-4,,每一位有一个地址,位地址的表示法。例,3.1 66H=,(,2CH,),.6,。,堆栈和数据缓冲器:,30H7FH,。,数据缓冲器:用于存放数据和运算结果。,堆栈:是一种特殊结构的缓冲器,里面的数据进出按先进后出,后进先出的原则操作。用于存放数据和断,点地址。其物理实体仍是数据存储器。,2.5,存储器组织,二,.,数据存储器,4.,特殊功能寄存器,它们是一组专用寄存器,具有特定的功能,地址分布在,80HFFH,。,表,2-3,。,ACC,:,(Accumulator),累加器,PSW,:,(Program State Word),程序状态字寄存器,用于保存指令执行的结果,工作寄存器区的设置等,,表,。,SP,:,是,8,位的堆栈指针,用于管理堆栈缓冲区,使堆栈具有先进后出功能。,DPTR,:,是,16,位的数据指针,一般作为访问外部数据存储器的地址指针使用。,部分特殊功能寄存器位地址,:见,表,2-5,。位地址表示法:,例,3.2 ACC,中的,D3,位,可以表示为:,E3,、,ACC.3,;,例,3.3 PSW,中的,D4,位,可以表示为,,RS1,和,PSW.4,。,2.6,指令系统基本概念,一,机器指令,用一组二进制的编码来描述计算机的某一个操作,这组编码就是机器指令。,计算机的指令系统是一套描述所有计算机的操作的编码,这套二进制编码称为机器码语言。,二,汇编指令,用一种符号来描述计算机的某一个操作,这种符号就是汇编指令。用汇编指令来描述计算机的指令系统,这套汇编指令称为汇编语言。,三,汇编程序,将汇编语言指令编译成机器语言指令的程序,称为汇编程序。,2.6,指令系统基本概念,四,源程序和目标程序,用汇编语言编制的应用程序称为汇编语言程序,简称源程序。,将源程序汇编成机器码程序,这机器码程序称为目标程序。,五,伪指令:汇编命令,在汇编语言程序汇编过程需要一些汇编操作,指出这些汇编操作的指令称为伪指令。,2.7,指令格式及伪指令,一,汇编语言指令格式,操作码:,表示指令的功能。,操作数:,数据和地址,操作数可以是,1,、,2,、,3,个,或者没有;数据以,09,数字开头,如遇到,16,进制数,AF,,则前面加,0,。,例,4.1,MOV A,,,#34H,(,MOV A,,,#0A3H,),LJMP 8100H,二,伪指令,定位伪指令:,ORGm,;,说明指令和数据的位置。,定义字节伪指令:,DB X1,,,X2,,,Xn,;,将程序涉及到的数据和符号作为程序的一部分,其中,Xi,是一个字节。,例,4.2,、例,4.3,定义字伪指令:,DW Y1,,,Y2,,,Yn,;,将程序涉及到的 数据作为程序的一部分,其中,Yi,是一个字,,16,位二进制数。,例,4.4,、例,4.5 ,操作码,操作数,2.7,指令格式及伪指令,二,伪指令,汇编结束伪指令:,END,;表示源程序结束,汇编程序对后面的源程序不再翻译。,标号和注释:,带标号和注释后的程序行。,标号:操作码,操作数,1,),操作数,2,操作数,3;,注释,2.7,指令格式及伪指令,三,常用的缩写符号,A,累加器,ACC,AB,累加器,ACC,和寄存器,B,组成的寄存器对,direct,直接地址,取值为,0,0FFH,,其中,80H,0FFH,可用特殊寄存器名表示,#data,立即数,表示一个常数,0,0FFH,间接寻址,传送,寄存器,(),寄存器的内容,(),由寄存器寻址的存储器单元内容,rrr,在指令编码中表示寄存器,Rn,的号码,,R0,R7,对应的号码是,000,111,$,指本条指令起始地址,rel,相对偏移量,其值为,128,127,2.8,寻址方式,寻找操作数的方式,即寻找数据的方式和寻找地址的方式。,一立即寻址:,指令中直接给出操作数本身。,例,4.6,MOVA,,,#70H,;,该指令是将常数,70H,复制至累加器,ACC,中,,70H,就称为立即数。指令代码见下图。,该指令中,70H,又称为源操作数,,A,称为目的操作数。,例,4.7,LJMP 9010H,;,该指令是将程序跳转到,9010H,位置,操作数,9010H,是地址,把它送入程序计数器,PC,。指令代码为,02H,、,90H,、,10H,。,程序存储器,01110100,01110000,PC,PC+1,70H,操作码,立即数,ACC,2.8,寻址方式,二直接寻址:,指令中直接给出操作数的地址。,例,4.8,MOV A,,,70H,;,指令代码为,,E5H,、,70H,;内部,RAM,地址为,70H,的内容可以作为一个操作数。若执行前存储单元,70H,中的内容为,0DFH,,则执行后,ACC,的内容为,0DFH,。如下图所示,其地址的形成如,图,4-2,注意:,直接寻址方式能访问以下三种存储空间,特殊功能寄存器(只能直接寻址),内部数据存储器的低,128,字节,位地址空间,程序存储器,11100101,01110000,PC,PC+1,操作码,直接地址,内部,RAM,0DFH,70H,0DFH,ACC,2.8,寻址方式,三寄存器寻址:,指令中给出操作数所在的寄存器地址,即操作数在寄存器中。,例,4.9,MOV A,,,R3,;,指令代码为,,11101rrr,即,11101011,。若执行前,R3,中的内容为,0DFH,,则执行后,ACC,的内容为,0DFH,。如下图所示,其地址形成如,图,4-1,所示,注意:,能用作寄存器寻址的寄存器有以下几个,R0,R7,、,ACC,、,B,、,DPTR,、,C,程序存储器,11101,011,XX,PC,PC+1,操作码,内部,RAM,0DFH,R3,0DFH,ACC,2.8,寻址方式,四寄存器间接寻址:,指令中给出的寄存器,其内容不是操作数,而是操作数地址。用,表示,例,4.10,MOVA,,,R1,;,若执行前,R1,的内容为,30H,,,30H,的内容为,56H,,,ACC,的内容为,78H,。则执行后,ACC,的内容为,56H,。如下图所示,这种寻址方式的地址构成如,图,4-3,所示,注意:,1),能用作间接寻址的寄存器有:,R0,、,R1,、,DPTR,2)R0,、,R1,能寻找内部存储器和外部存储器,00H,0FFH,3)DPTR,只能寻找外部存储器单元,0000H,0FFFFH ,程序存储器,1110011,1,XX,PC,PC+1,操作码,内部,RAM,30H,R1,56H,ACC,XX,56H,30H,2.8,寻址方式,四寄存器间接寻址:,这种寻址方式适用于处理批量数据。,例,4.11,要求将以,30H,为首地址的内部数据存储器中的,10,个数据,a,0,a,9,,传送到以,40H,为首地址的内部数据存储器中去。,如果按直接寻址的方式编程序,则如下所示:,MOV40H,,,30H,MOV41H,,,31H,MOV42H,,,32H,:,:,MOV49H,,,39H,2.8,寻址方式,四寄存器间接寻址:,如果按寄存器间接寻址的方式编程序,则如下所示:,MOVR0,,,#30H,MOVR1,,,#40H,MOVR7,,,#10,LOOP:MOVA,,,R0,MOVR1,ACC,INCR0,INCR1,DJNZR7,LOOP,2.8,寻址方式,五基寄存器加变址寄存器间接寻址:,这种寻址方式以,PC,程序计数器或,DPTR,数据指针为基寄存器,以,ACC,累加器为变址寄存器,两者相加的结果就是操作数地址。,注意:,所寻找的存储单元是程序存储器,例,4.12,MOVC A,,,A+PC,;,源操作数地址,=,(,PC,),+,(,ACC,),例,4.13,MOVC A,,,A+DPTR,;,源操作数地址,=,(,DPTR,),+,(,ACC,),其中变址寄存器,ACC,的内容是一个正整数。,2.8,寻址方式,六相对寻址:,操作数是一个地址偏移量,e,,实际转移地址为当前,PC,值加上偏移量,e,例,4.14,SJMP e,;转移地址,=,当前,PC,值,+e,注意:,1,),e,是一个偏移量,用,8,位二进制数的补码表示。,2,)当前,PC,值是指该转移指令的后一条指令的地址,当前,PC,值,=340DH+2=340FH,,若,e=05H,,该指令地址为,340DH,,则转移地址,=340FH+05H=3414H,当前,PC,值,=1005H+2=1007H,,若,e=80H,,该指令地址为,1005H,,则转移地址,=1007H+80H=0F87H,,其中,80H,实际是,0FF80H,,其执行过程如,图,4-5,所示,七隐含寻址:,指令码中不含操作数。,例,4.15,RET,;子程序返回指令。,2.9,数据操作和指令类型,一数据操作,数据操作是指:数据传送,算术运算,逻辑运算,布尔处理,控制转移等操作。,PSW,用于存放数据被操作后的状态。,PSW,的格式和功能,CY,位:进位,/,借位标志。,AC,位:半进位,/,半借位标志。,OV,位:溢出标志,用于补码运算。,P,位 :奇偶标志,仅表示,ACC,的奇偶特性。,RS1,位、,RS0,位:工作寄存器区选择位。,F1,位、,F0,位:用户程序标志位。,D7,D6,D5,D4,D3,D2,D1,D0,CY,AC,F0,RS1,RS0,OV,F1,P,PSW,2.9,数据操作和指令类型,二,指令类型,按功能分,:,数据传送指令,共,28,条,算术运算指令,共,24,条,逻辑运算指令,共,25,条,位操作指令 ,共,17,条,控制指令 ,共,17,条,按指令长度分:,单字节指令,共,49,条,双字节指令,共,45,条,3,字节指令 ,共,17,条,按指令执行时间分:,1,个机器周期指令,共,64,条,2,个机器周期指令,共,45,条,4,个机器周期指令,共,2,条,2.10,MCS-51,指令系统简介,数据传送指令,牢记,MOV,、,PUSH,、,POP,、,XCH,、,XCHD,、,MOVX,、,MOVC,指令的在不同的寻址方式下所实现的功能,算术运算指令,牢记,ADD,、,ADDC,、,INC,、,DA,、,SUBB,、,DEC,、,MUL,、,DIV,指令在不同的寻址方式下所实现的功能和指令执行后对,PSW,特殊寄存器的相关位的影响,逻辑运算指令,牢记,CLR,、,CPL,、,RL,、,RLC,、,RR,、,RRC,、,SWAP,、,ANL,、,ORL,、,XRL,指令在不同的寻址方式下所实现的功能和指令执行后对,PSW,特殊寄存器的相关位的影响,2.10,MCS-51,指令系统简介,位操作指令,牢记,MOV,、,CLR,、,CPL,、,SETB,、,ANL,、,ORL,指令在不同的寻址方式下所实现的功能,控制转移指令,牢记,AJMP,、,SJMP,、,LJMP,、,JMP,、,JZ,、,JNZ,、,JC,、,JNC,、,JB,、,JNB,、,JBC,、,CJNE,、,DJNZ,、,ACALL,、,LCALL,、,RET,、,RETI,指令在不同的寻址方式下所实现的功能和指令执行后对程序运行顺序影响,CPU,执行指令的时序,牢记,CPU,的时钟周期、状态、机器周期、指令周期基本概念,以及,CPU,执行指令的时序。,2.11,汇编语言程序设计方法,一程序设计的步骤,分析问题,明确所要解决问题的要求,确定算法,解决问题的方法,制定程序框图,确定程序运行的步骤,确定数据格式,分配工作单元,根据程序的流程图编写程序,程序测试,程序优化,2.11,汇编语言程序设计方法,二,程序流程图的绘制,程序流程图主要由一些有向线段和一些框图组成。框图的种类有以下几种:,设置指针,执行框:表示某些操作,用一个写有文字的矩形表示,比如,判断框:表示程序的分支处,用图形 或 表示,框内写上判断的条件。,A0?,开始框:表示某一程序的开始。用图形 表示。,结束框:表示某一程序的结束。用图形 表示。,开始,结束,2.11,汇编语言程序设计方法,三汇编语言程序基本结构,无论再复杂的程序,总可以将程序分解成三种程序结构,即顺序结构、分支结构、循环结构。以下逐一阐述各种程序结构。,2.11,汇编语言程序设计方法,1,、顺序结构程序设计,顺序结构程序不仅是最简单的程序结构,而且是最基本的程序结构,其特点是程序按指令顺序排列依次逐条执行。无论多么复杂的程序,总是可以分解成若干个顺序结构的程序段。,例,4-7,:,若寄存器,R2R3,和,R4R5,分别存放了一组压缩,8421BCD,码,要求编一程序段将这两组,BCD,码数据相加,结果放在寄存器,R6R7,,进位放在,Cy,中。,2.11,汇编语言程序设计方法,1,、顺序结构程序设计,解:根据题意,程序编制如下:,BCDADD:MOV A,R3 ;,取低位,BCD,码数据于,A,。,ADD A,R5 ;,两个,BCD,码数据低位相加。,DA A ;BCD,码相加后调整。,MOV R7,A ;,存放,BCD,码数据低位相加的结果。,MOV A,R2 ;,取高位,BCD,码数据于,A,。,ADDC A,R4 ;,两个,BCD,码数据高位相加,并加上,;,低位,BCD,码数据相加产生的进位。,DA A ;BCD,码相加后调整。,MOVR6,A ;,存放,BCD,码数据高位相加结果。,SJMP$;,程序在此打住。,$,表示该指令的首地址。,END ;,源程序结束。,以上程序段执行时,从头开始(,BCDADD:MOV A,R3;,),顺序依次逐条执行至最后(,SJMP$;,)。,2.11,汇编语言程序设计方法,2,、分支结构程序设计,分支程序结构就是根据不同情况,采用不同处理方法的一种程序结构。具体实现的方法是,根据指定的条件,使程序转向不同的程序段。,例,4-8,:,编制一程序,实现以下符号函数。设,x,是一个单字节补码变量,,y,也采用单字节补码表示。,2.11,汇编语言程序设计方法,2,、分支结构程序设计,解:根据题意,程序编制如下:,x DATA 30H ;,定义变量,x,于内部,RAM30H,元。,y DATA 31H ;,定义变量,y,于内部,RAM31H,单元。,START:MOV A,x ;,取变量,x,于累加器,A,。,JNZ NEXT1 ;,若,x,不等于零,转入,NEXT1,执行。,MOV y,#00H ;,若,x,等于零,则,y=0,。,SJMP STOP ;,转入程序结束处。,NEXT1:JBACC.7,NEXT2;,若,x,小于零,转入,NEXT2,执行。,MOV y,#01H ;,若,x,大于零,则,y=1,。,SJMP STOP ;,转入程序结束处。,NEXT2:MOV y,#0FFH ;,因,x,小于零,故,y=-1,。,STOP:SJMP$;,程序在此打住。,END ;,源程序结束。,2.11,汇编语言程序设计方法,3,、循环程序的设计,循环结构程序是指某程序段被反复执行若干次的程序,其特点是程序代码被反复利用,从而缩短了程序代码,减少了占用程序存储器的资源。,循环结构程序一般由以下几部分组成:,1,)初始化部分,初始化是为循环执行作准备工作,包括设立指针、设置计数器、设置变量的初值、累加器清零、设置标志位等。,2,)工作部分,工作部分是循环程序的主体,是完成某任务的程序段。,3,)修改部分,修改一些继续循环需要的参数,比如修改地址指针、循环次数计数值等。,2.11,汇编语言程序设计方法,3,、循环程序的设计,4,)控制部分,控制部分用于检测循环条件,决定循环是否继续下去。,5,)结束处理部分,结束处理部分是用于对循环结果进行适当处理,比如存放结果,恢复某寄存器的内容等。有的循环结构程序没有这一部分。,2.11,汇编语言程序设计方法,3,、循环程序的设计,例,4-10,:编制一段程序,找出数据块中最小的数据并存放在暂存器,B,。设数据块位于外部数据存储器,3000H,为首地址的内存中,数据是单字节无符号数据,共有,200,个数据。,解:根据题意,画出程序流程图(图,4-3,)。,2.11,汇编语言程序设计方法,3,、循环程序的设计,(,1,),START:MOVDPTR,#3000H ;,设置外部数据区指针。,(,2,),MOVR6,#199 ;,设置比较次数。,(,3,),MOVXA,DPTR ;,取第一个数至,A,。,(,4,),MOVB,A ;,将第一个数送至,B,。,(,5,),INC DPTR ;,调整指针至下一个数据。,(,6,),LOOP:MOVXA,DPTR ;,取下一个数据至,A,。,(,7,),CJNEA,B,COMP ;,比较两数。,(,8,),COMP:JNC NEXT ;,若(,A,)(,B,),;转入,NEXT,处执行。,(,9,),MOV B,A ;,若(,A,)(,B,),(,A,),B,。,(,10,),NEXT:INC DPTR ;,地址指针加,1,。,(,11,),DJNZR6,LOOP ;,若数据块比较没完,;程序循环至,LOOP,。,(,12,),SJMP$;,若数据块比较完毕,,;程序原处暂停。,(,13,),END ;,程序结束。,2.11,汇编语言程序设计方法,3,、循环程序的设计,例,5.1,计算,n,个单字节数据和(结果为二个字节),解:,根据题意需要运算的数是单字节无符号整数,运算的结果是双字节形式,画出数据在存储器的存放形式的,示意图,设立一个累加单元(双字节),一个取数指针单元,一个取数计数单元,然后逐个取数相加,一直到数据加完为止。,画,程序框图,将,R3R4,作为累加单元,,R2,作为计数器,,R0,作为数据区指针,编制,程序,2.11,汇编语言程序设计方法,否,是,开始,设立一个累加单元,设立一个计数器,设立一个指针,取数据,相加,修改指针,结束,求和结束?,2.11,汇编语言程序设计方法,例,5.1,ORG8100H,START:MOVR3,#0,MOVR4,#0,MOVR0,#50H,MOV R2,#10,LOOP:MOVA,R4,ADDA,R0,MOVR4,A,CLRA,ADDCA,R3,MOVR3,A,INCR0,DJNZR2,LOOP,STOP:SJMPSTOP,END,2.11,汇编语言程序设计方法,3,、循环程序的设计,例,5.2,将内部,RAM,中,30H32H,的内容左移,4,位,移出部分送,R2,。,解:,根据题意,程序要完成的内容如图所示,利用交换指令,进行,4,位二进制数的搬移,制定程序框图:,图,-3,编制,程序,R2,30H,31H,0,32H,2.11,汇编语言程序设计方法,2.11,汇编语言程序设计方法,RL43:MOVR0,#32H,CLRA,LOOP:XCHDA,R0,SWAPA,XCHA,R0,DECR0,CJNER0,#2FH,LOOP;,指针值作为循环终止的条件,SWAPA,MOVR2,A,RET,2.11,汇编语言程序设计方法,4,、多重循环程序的设计,例,5.3,50ms,延时子程序设计,设系统的时钟频率为,12MHZ,,则一个机器周期的时间为,T=12/12MHZ=1s,,延时程序的算法是通过循环执行,DJNZ,指令来达到延时的目的,由于延时的时间比较长,所以采用双重循环的程序结构。程序如下:,DEL:MOVR7,#200,DEL1:MOVR6,#125,DEL2:DJNZR6,DEL2,DJNZR7,DEL1,RET,指令,DEL2:DJNZR6,DEL2,执行一次所需时间为,2T,,即,2s,。以上程序该指令共执行了,125200=25000,次,共需时间为,250002 s=50 ms,2.11,汇编语言程序设计方法,4,、多重循环程序的设计,例,5.4,比较精确的,50ms,子程序的设计,例,5.3,的程序的延时时间是不太精确的,实际所化的时间为(,125 2+1+2,),200+2=50.302ms,。如果需要更精确的延时,可将以上的程序修改如下:,DEL:MOVR7,#200,DEL1:MOVR6,#123,NOP,DEL2:DJNZR6,DEL2,DJNZR7,DEL1,RET,总的延时时间为(,123 2+1+1+2,),200+2+1=50.003ms,。,2.11,汇编语言程序设计方法,4,、多重循环程序的设计,例,5.5,试编制一个产生方波的程序段,解:设单片机的工作频率为,12MHZ,,在,P1.1,线输出一个频率为,0.2KHZ,的方波。,因为方波的频率为,0.2KHZ,,则它的周期为,5ms,,波形的示意图如下:,CLR P1.1,DL,:,MOV30H,,,#05H,DL0,:,MOV31H,,,#0FAH,DL1,:,DJNZ31H,,,DL1,;,指令执行需要,2,个机器周期,一个机器周期需,DJNZ30H,,,DL0,;,时,1s,,即该指令执行需时,2s,,这一指令,CPL P1.1,;,执行,1250,次,就能耗时,2.5ms,。每隔,2.5 ms,改,SJMP DL,;,变一次,P1.1,的状态,就可使,P1.1,产生,5ms,周期的方波。,2.11,汇编语言程序设计方法,4,、多重循环程序的设计,例,5.6,例,5.2,程序的另一种实现方法。将内部,RAM,中,30H32H,的内容左移,4,位,移出部分送,R2,。,解:,采用双重循环方法,第一循环是将存储器有关内容左移一位,第二循环是将第一循环的内容进行四次。,程序框图如下:,图,6-4,编制程序,R2,30H,31H,0,32H,C,2.11,汇编语言程序设计方法,A,B,A,B,C,2.11,汇编语言程序设计方法,RLC43:MOVR7,#4,MOVR2,#0,LOOP0:MOVR0,#32H,MOVR6,#3,CLRC,LOOP1:MOVA,R0,RLCA,MOVR0,A,DECR0,DJNZR6,LOOP1,MOVA,R2,RLCA,MOVR2,A,DJNZR7,LOOP0,RET,2.11,汇编语言程序设计方法,四子程序设计和参数传递方法,1,子程序的基本结构,保护现场:保护子程序将要用到的有关寄存器的内容,使得子程序调用更方便安全。一般可将需要保护的内容压入堆栈,或采用改变工作寄存器区。,程序主体:是子程序为完成有关功能而编制的程序段。,恢复现场:若保护现场是用压入堆栈,则恢复现场要注意先进后出。,返回:采用返回指令将程序返回到原先调用子程序的地方。,开始,保护现场,程序主体,恢复现场,返回,2.11,汇编语言程序设计方法,三子程序设计和参数传递方法,2,子程序的参数,入口参数:,子程序入口地址,被处理数据存放的位置,影响哪些寄存器。,出口参数:,有关结果数据的存放位置,有关指针的内容。,3,用工作寄存器或累加器来传递参数,例,5.7,将十六进制数的,ASCII,码转换成十六进制数。,1,)根据,ASCII,码与,16,进制数之间的关系,程序框图如下:,图,6-6,2,)被转换的数据在,R0,中。,3,)编制程序,0,9,30H,39H,;,A,F,41H,46H,2.11,汇编语言程序设计方法,ASCH,:,PUSH PSW,PUSH ACC,CLR C,MOV A,R0,SUBB A,,,#30H,CJNE A,,,#10,,,$+3,JC AH10,SUBB A,,,#07,AH10,:,MOV R0,A,POP ACC,POP PSW,RET,2.11,汇编语言程序设计方法,三子程序设计和参数传递方法,4,用存储器来传递参数,例,5.8,将(,R0,)和(,R1,)指出的内部,RAM,中两个,3,字节无符号数相加,结果送(,R0,)指出的内部,RAM,中。,:,R0,R1,入口参数:,(,R0,)和(,R1,)分别指向加数和被加数的低位字节的内存地址。,出口参数:,(,R0,)指向结果的高位字节的内存地址。,2.11,汇编语言程序设计方法,编制程序如下:,NADD:PUSH ACC,PUSH PSW,MOV R7,#3,CLR C,NADD1:MOV A,R0,ADDC A,R1,MOV R0,A,DEC R0,DEC R1,DJNZ R7,NADD1,INC R0,POP PSW,POP ACC,RET,2.11,汇编语言程序设计方法,三子程序设计和参数传递方法,5,用堆栈来传递参数,例,5.9,将一位十六进制数转换成,ASCII,码,入口参数:调用该子程序前,已将一位,16,进制数压入堆栈。,出口参数:将转换好了的,ASCII,码存放在原来,16,进制数的堆栈位置。,HASC:MOVR0,SP,DECR0,DECR0,XCHA,R0,ANLA,#0FH,ADDA,#2,MOVCA,A+PC,XCHA,R0,RET,DB0123456789,DBABCDEF,7,PCL,PCH,(,SP,),(,SP,1,),(,SP,1,),2.11,汇编语言程序设计方法,三子程序设计和参数传递方法,5,用堆栈来传递参数,例,5.10,把内部,RAM,中,50H,,,51H,的双字节十六进制数转换成,4,位,ASCII,码,存放于(,R1,)指向的,4,个内部,RAM,单元。数据存放的方法如下图所示:,50H,51H,(,R1,),2.11,汇编语言程序设计方法,编制程序如下:利用例,9,的程序来完成本程序的编制,HA24:MOV A,50H SWAP A,SWAP A PUSH ACC,PUSH ACC ACALL HASC,ACALL HASC POP ACC,POP ACC MOV R1,A,MOV R1,A INC R1,INC R1 MOV A,51H,MOV A,50H PUSH ACC,PUSH ACC ACALL HASC,ACALL HASC POP ACC,POP ACC MOV R1,A,MOV R1,A RET,INC R1,MOV A,51H,2.11,汇编语言程序设计方法,例,5.11,一个字节的,2,位十六进制数转换为二个,ASCII,码子程序。在调用该子程序前刚刚将需转换的一个字节的,2,位十六进制数压入了堆栈,在退出该子程序后,转换好的相应,ASCII,码放在堆栈的顶部。,解:设进入该子程序时,堆栈顶的地址为,ADDR,,则根据题意进入该子程序时和退出该子程序时的堆栈情况如下所示。,堆栈,断点地址高,断点地址低,h1h0,堆栈,ASCII-1,ASCII-0,Add,Add-1,Add-2,Add,Add-1,Add-2,(SP),(SP),转换成,的相应,ASCII,码,转换前,转换后,2.11,汇编语言程序设计方法,子程序如下:,HTA2:MOVR0,SP XCHA,R0,DECR0 INCR0,DECR0 XCHA,R0,PUSHACC INCR0,MOVA,R0 XCHA,R0,ANLA,#0FH RET,ADDA,#14 DB 0123456789,MOVCA,A+PC DB ABCDEF,XCHA,R0,SWAPA,ANLA,#0FH,注意执行过程中堆栈内容的变化。,ADDA,#7,MOVCA,A+PC,INCR0,2.11,汇编语言程序设计方法,三子程序设计和参数传递方法,6,程序段参数传递,如果需要大量参数,并且这些参数均为常数时,程序段参数传递方法是很有效的。,例字符串传送子程序,SOUT:POP PDH MP1:ACALL SOUT,POP DPL DB MCS-51,SOT1:CLR A DB CONTROLLER,MOVC A,A+DPTR DB 0AH,0DH,0,INC DPTR MP2:,JNZ SEND,MOV R0,A,INC R0,SJMP SOT1,SEND:JMP A+DPTR,总体结构(,8051,)图,总体结构(,8051,)图,外部引脚和逻辑符号,内部时钟电路和外部直接时钟产生法,复位后内部寄存器的初始状态,复位电路,CPU,的时序,存储器组织,程序存储器的特殊用途单元,片内数据存储器,工作寄存器区,工作寄存器区选择表,位寻址区,特殊功能寄存器,部分特殊功能寄存器位地址,4.2,指令格式,存储器地址,存储器,8203H,4,8202H,3,8201H,2,8200H,1,存储器地址,存储器,8203H,34,8202H,33,8201H,32,8200H,31,例,4.2 ORG 8200H,;,DB 1,,,2,,,3,,,4,;,例,4.3 ORG8200H,;,DB 1234,;,例,4.2,例,4.3,2.8,指令格式,存储器地址,存储器,8207H,04H,8206H,00H,8205H,03H,8204H,00H,8203H,02H,8202H,00H,8201H,01H,8200H,00H,存储器地址,存储器,8207H,XXH,8206H,XXH,8205H,XXH,8204H,XXH,8203H,04H,8202H,03H,8201H,02H,8200H,01H,例,4.4ORG8200H DW 1,,,2,,,3,,,4,例,4.5ORG 8200H DW 0102H,,,0304H,例,4.4,例,4.5,寄存器寻址,INC R0,;(,R0,),1,R0,直接寻址,ANL 70H,,,#48H,;(,70H,),48H,70H,寄存器间接寻址,ANL A,,,R0,;(,A,),(R),A,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!