资源描述
第一节第一节指令简介指令简介一、指令概述一、指令概述指令是规定单片机进行某种操作的命令。一条指令只能完成有指令是规定单片机进行某种操作的命令。一条指令只能完成有限的功能,为使单片机完成一定的或复杂的功能就需要一系列指限的功能,为使单片机完成一定的或复杂的功能就需要一系列指令。单片机能够执行的各种指令的集合就称为指令系统。令。单片机能够执行的各种指令的集合就称为指令系统。MCS-51单片机指令系统共有单片机指令系统共有33种功能,种功能,42种助记符,种助记符,111条指条指令。令。二、指令格式二、指令格式不同指令翻译成机器码后字节数也不一定相同。按照机器码个不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种。数,指令可以分为以下三种。MCS-51单片机指令系统包括49条单字节指令、45条双字节指令和17条三字节指令。采用助记符表示的汇编语言指令格式如下:标号:操作码目的操作数,源操作数;注释标号是加在指令的前面表示该指令位置的符号地址,可有可无;标号由18个字符组成,第一个字符必须是英文字母,不能是数字或其它符号;标号后必须用“:”。操作码是由助记符表示的字符串,表示指令所实现的操作功能;如MOV表示数据传送操作、ADD表示加法操作等。操作数指出了参加运算的数据或数据存放的位置。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CLRP1.0指令;有两个操作数,如MOVA,#0EFH指令,操作数之间以逗号相隔;有三个操作数,如CJNEA,#08H,NEXT指令,操作数之间也以逗号相隔。注释是对语句的解释说明,用以提高程序的可读性,注释前必须加“:”。计算机对它不作处理,注释部分不影响指令的执行。第二节第二节寻址方式寻址方式MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。1立即数寻址立即数寻址在这种寻址方式中,指令多是双字节的。立即数寻址是指将操在这种寻址方式中,指令多是双字节的。立即数寻址是指将操作数直接写在指令中。例如:指令作数直接写在指令中。例如:指令MOVA,#3AH执行的操作是执行的操作是将立即数将立即数3AH送到累加器送到累加器A中,该指令就是立即数寻址。注意:立中,该指令就是立即数寻址。注意:立即数前面必须加即数前面必须加“#”号,以区别立即数和直接地址。该指令的执号,以区别立即数和直接地址。该指令的执行过程如图所示。行过程如图所示。2直接寻址直接寻址在这种寻址方式中,把存放操作数的内存单元的地址直接写在在这种寻址方式中,把存放操作数的内存单元的地址直接写在指令中。在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器区和特殊功能寄存器SFR区。设内部区。设内部RAM3AH单元的内容单元的内容是是88H,那么指令,那么指令MOVA,3AH的执行过程如图所示。的执行过程如图所示。3寄存器寻址寄存器寻址寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器存器R0R7、累加器、累加器A、通用寄存器、通用寄存器B、地址寄存器、地址寄存器DPTR等。执等。执行行MOVR1,A指令后,内部指令后,内部RAM09H单元的值就变为单元的值就变为20H,如,如图所示。图所示。4寄存器间接寻址寄存器间接寻址寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器存器R0R7、累加器、累加器A、通用寄存器、通用寄存器B、地址寄存器、地址寄存器DPTR等。执等。执行行MOVR1,A指令后,内部指令后,内部RAM09H单元的值就变为单元的值就变为20H,如,如图所示。图所示。5变址寻址变址寻址在这种寻址方式中,是将基址寄存器与变址寄存器的内容相加,在这种寻址方式中,是将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。结果作为操作数的地址。DPTR或或PC是基址寄存器,累加器是基址寄存器,累加器A是变是变址寄存器。该类寻址方式主要用于查表操作。设累加器址寄存器。该类寻址方式主要用于查表操作。设累加器A=02H,DPTR=0300H,外部,外部ROM(0302H)=55H,则指令,则指令MOVCA,A+DPTR的执行结果是累加器的执行结果是累加器A的内容为的内容为55H。该指令的执行过。该指令的执行过程如图所示。程如图所示。6相对寻址相对寻址相对寻址是指程序计数器相对寻址是指程序计数器PC的当前内容与指令第二字节所给的当前内容与指令第二字节所给出的数相加,其结果作为跳转指令的转移地址(也称目的地址)。出的数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。现假设该指令存放于该类寻址方式主要用于跳转指令。现假设该指令存放于0100H、0101H单元,且单元,且rel=30H,若(,若(C)1,因,因PC当前值(下一条指当前值(下一条指令的地址)为令的地址)为0102H,故执行完该指令后,程序转向,故执行完该指令后,程序转向(PC)+30H=0132H地址执行。地址执行。0132H地址称为目的地址,地址称为目的地址,0100H称为源地址。该指令执行过程如图所示。称为源地址。该指令执行过程如图所示。7位寻址位寻址位寻址是指按位进行的操作,位寻址是指按位进行的操作,MCS-51单片机中,操作数不仅单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。一位作为操作数时,这个操作数的地址称为位地址。例如:指令例如:指令SETB3DH执行的操作是将内部执行的操作是将内部RAM位寻址区中位寻址区中的的3DH位置位置1。设内部。设内部RAM27H单元原来的内容是单元原来的内容是00H,执行,执行SETB3DH后,由于后,由于3DH对应着内部对应着内部RAM27H的第的第5位,因此该位位,因此该位变为变为1,也就是,也就是27H单元的内容变为单元的内容变为20H。该指令的执行过程如图。该指令的执行过程如图所示。所示。第三节第三节汇编语言指令系统汇编语言指令系统MCS-51单片机指令系统包括111条指令,按功能可以划分为五类:数据传送指令(29条)算术运算指令(24条)逻辑运算指令(24条)控制转移指令(17条)位操作指令(17条)3.1 3.1 3.1 3.1 指令系统中的符号说明指令系统中的符号说明指令系统中的符号说明指令系统中的符号说明符号符号含含义义Rn表示当前选定寄存器组的工作寄存器表示当前选定寄存器组的工作寄存器R0R7Ri表示作为间接寻址的地址指针表示作为间接寻址的地址指针R0或或R1#data表示表示8位立即数,即位立即数,即00HFFH#data16表示表示16位立即数,即位立即数,即0000HFFFFHaddr16表示表示16位地址,用于位地址,用于64K范围内寻址范围内寻址addr11表示表示11位地址,用于位地址,用于2K范围内寻址范围内寻址direct8位直接地址,可以是内部位直接地址,可以是内部RAM区的某一单元区的某一单元或某一专用功能寄存器的地址或某一专用功能寄存器的地址Rel带符号的带符号的8位偏移量(位偏移量(-128+127)Bit位寻址区的直接寻址位位寻址区的直接寻址位(X)X地址单元中的内容地址单元中的内容(X)将将X地址单元中的内容作为地址,该地址单元中的内容地址单元中的内容作为地址,该地址单元中的内容将将后面的内容传送到前面去后面的内容传送到前面去1以累加器以累加器A为目的地址的传送指令(为目的地址的传送指令(4条)条)3.2 3.2 3.2 3.2 数据传送类指令数据传送类指令数据传送类指令数据传送类指令数据传送类指令是最常用、最基本的一类指令,包括内部RAM、寄存器、外部RAM以及程序存储器之间的数据传送。一、内部一、内部8位数据传送指令位数据传送指令目的地址目的地址目的地址目的地址源地址源地址源地址源地址MOV ,助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVA,RnARnn=071MOVA,directA(direct)1MOVA,RiA(Ri)i=0,11MOVA,#dataA#data12以以Rn为目的地址的传送指令(为目的地址的传送指令(3条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVRn,ARnAn=071MOVRn,directRn(direct)n=071MOVRn,#dataRn#datan=0713以直接地址为目的地址的传送指令(以直接地址为目的地址的传送指令(5条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVdirect,A(direct)A1MOVdirect,Rn(direct)Rnn=071MOVdirect2,direct1(direct2)(direct1)2MOVdirect,Ri(direct)(Ri)i=0,12MOVdirect,#data(direct)#data24以寄存器间接地址为目的地址的传送指令(以寄存器间接地址为目的地址的传送指令(3条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVRi,A(Ri)Ai=0,11MOVRi,direct(Ri)(direct)i=0,12MOVRi,#data(Ri)#datai=0,11二、二、16位数据传送指令(位数据传送指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVDPTR,#data16DPTR#data16把把16位常数装入数据指针位常数装入数据指针2三、外部数据传送指令(三、外部数据传送指令(4条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVXA,DPTRA(DPTR)把把DPTR所对应的外部所对应的外部RAM地址中的内地址中的内容传送给累加器容传送给累加器A2MOVXA,RiA(Ri)i=0,12MOVXDPTR,A(DPTR)A结果不影响结果不影响P标志。标志。2MOVXRi,A(Ri)Ai=0,1,结果不影响,结果不影响P标志。标志。2四、交换和查表类指令四、交换和查表类指令1字节交换指令(字节交换指令(3条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期XCHA,RnARnA与与Rn内容互换内容互换1XCHA,directA(direct)1XCHA,RiA(Ri)i=0,112半字节交换指令(半字节交换指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期XCHDA,RiA3-0(Ri)3-0低低4位交换,高位交换,高4位不变位不变13累加器累加器A中高中高4位和低位和低4位交换(位交换(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期SWAPA(A)3-0(A)7-4高、低高、低4位互相交换位互相交换14查表指令(查表指令(2条)条)5堆栈操作指令(堆栈操作指令(2条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVCA,A+PCA(A+PC)A+PC所指外部程序存储单所指外部程序存储单元的值送元的值送A2MOVCA,A+DPTRA(A+DPTR)A+DPTR所指外部程序存储所指外部程序存储单元的值送单元的值送A2助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期PUSHdirectSPSP+1(SP)(direct)将将SP加加1,然后将源地址单元中的,然后将源地址单元中的数传送到数传送到SP所指示的单元中去所指示的单元中去2POPdirect(direct)(SP)SPSP-1将将SP所指示的单元中的数传送到所指示的单元中的数传送到direct地址单元中地址单元中,然后然后SPSP-121加法指令(加法指令(8条)条)2减法指令(减法指令(4条)条)3.3 3.3 3.3 3.3 算术运算类指令算术运算类指令算术运算类指令算术运算类指令一、加、减法指令一、加、减法指令助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期ADDA,RnAA+Rnn=071ADDA,directAA+(direct)1ADDA,RiAA+(Ri)i=0,11ADDA,#dataAA+#data1ADDCA,RnAA+Rn+Cyn=071ADDCA,directAA+(direct)+Cy1ADDCA,RiAA+(Ri)+Cyi=0,11ADDCA,#dataAA+#data+Cy1助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期SUBBA,RnAA-Rn-Cyn=071SUBBA,directAA-(direct)-Cy1SUBBA,RiAA-(Ri)-Cyi=0,11SUBBA,#dataAA-#data-Cy13BCD码调正指令(码调正指令(1条)条)4加加1减减1指令(指令(9条)条)助记符格式助记符格式指令说明指令说明机器周期机器周期DAABCD码加法调正指令码加法调正指令1助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期INCAAA+1影响影响PSW的的P标志标志1INCRnRnRn+1n=071INCdirect(direct)(direct)+11INCRi(Ri)(Ri)+1i=0,11INCDPTRDPTRDPTR+12DECAAA-1影响影响PSW的的P标志标志1DECRnRnRn-1n=071DECdirect(direct)(direct)-11DECRi(Ri)(Ri)-1i=0,11二、乘、除法指令二、乘、除法指令1乘法指令(乘法指令(1条)条)2除法指令(除法指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MULABBAA*B无符号数相乘,高位存无符号数相乘,高位存B,低位存,低位存A4助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期DIVABAA/B的商的商BA/B的余数的余数无符号数相除,商存无符号数相除,商存A,余,余数存数存B43.4 3.4 3.4 3.4 逻辑运算及移位类指令逻辑运算及移位类指令逻辑运算及移位类指令逻辑运算及移位类指令一、逻辑运算指令一、逻辑运算指令1逻辑与指令(逻辑与指令(6条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期ANLA,directAA(direct)按位相与按位相与1ANLA,RnAA Rnn=071ANLA,RiAA(Ri)i=0,11ANLA,#dataAA#data1ANLdirect,A(direct)(direct)A不影响不影响PSW的的P标志标志1ANLdirect,#data(direct)(direct)#data不影响不影响PSW的的P标志标志22逻辑或指令(逻辑或指令(6条)条)3逻辑异或指令(逻辑异或指令(6条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期ORLA,directAA(direct)按位相与按位相与1ORLA,RnAA Rnn=071ORLA,RiAA(Ri)i=0,11ORLA,#dataAA#data1ORLdirect,A(direct)(direct)A不影响不影响PSW的的P标志标志1ORLdirect,#data(direct)(direct)#data不影响不影响PSW的的P标志标志2助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期XRLA,directAA(direct)按位相与按位相与1XRLA,RnAA Rnn=071XRLA,RiAA(Ri)i=0,11XRLA,#dataAA#data1XRLdirect,A(direct)(direct)A不影响不影响PSW的的P标志标志1XRLdirect,#data(direct)(direct)#data不影响不影响PSW的的P标志标志24累加器累加器A清清0和取反指令(和取反指令(2条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期CLRA(A)00HA中内容清中内容清0,影响,影响P标志标志1CPLA(A)()A中内容按位取反,影响中内容按位取反,影响P标志标志1二、循环移位指令(二、循环移位指令(4条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期RLAA7-A0循环左移循环左移1RLCACyA7-A0带进位循环左移带进位循环左移,影响影响Cy标志标志1RRAA7-A0循环右移循环右移1RRCACyA7-A0带进位循环右移带进位循环右移,影响影响Cy标志标志13.5 3.5 3.5 3.5 控制转移类指令控制转移类指令控制转移类指令控制转移类指令控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。一、无条件转移指令(一、无条件转移指令(4条)条)1长转移指令长转移指令助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期LJMPaddr16PCaddr16程序跳转到地址为程序跳转到地址为addr16开始的开始的地方执行地方执行22绝对转移指令绝对转移指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期AJMPaddr11PC10-0addr11程程 序序 跳跳 转转 到到 地地 址址 为为PC1511addr11开开始始的的地地方方执执行行,2k内绝对转移内绝对转移23相对转移指令相对转移指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期SJMPrelPCPC+rel-80H(-128)7FH(127)短转移)短转移24间接寻址的无条件转移指令(间接寻址的无条件转移指令(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期JMPA+DPTRPCA+DPTR64K内相对转移内相对转移2二、条件转移指令(二、条件转移指令(8条)条)1累加器累加器A判判0指令(指令(2条)条)3减减1非零转移指令(非零转移指令(2条)条)助记符格式助记符格式相应操作相应操作机器周期机器周期JZrel若若A=0,则则PCPC+rel,否则顺序执行否则顺序执行2JNZrel若若A0,则则PCPC+rel,否则顺序执行否则顺序执行22比较转移指令(比较转移指令(4条)条)记符格式记符格式相应操作相应操作机器周期机器周期CJNEA,#data,rel若若A#data,则则PCPC+rel,否则顺序执行;若,否则顺序执行;若A#data,则,则Cy=1,否则,否则Cy=02CJNERn,#data,rel若若Rn#data,则,则PCPC+rel,否则顺序执行;若,否则顺序执行;若Rn#data,则,则Cy=1,否则,否则Cy=02CJNERi,#data,rel若若(Ri)#data,则,则PCPC+rel,否则顺序执行;若,否则顺序执行;若(Ri)#data,则则Cy=1,否则,否则Cy=02CJNEA,direct,rel若若A(direct),则),则PCPC+rel,否则顺序执行;,否则顺序执行;若若(A)(direct),则),则Cy=1,否则,否则Cy=02助记符格式助记符格式相应操作相应操作机器周期机器周期DJNZRn,relRnRn-1,若,若Rn0,则,则PCPC+rel,否则顺序执行否则顺序执行2DJNZdirect,rel(direct)(direct)-1,若(,若(direct)0,则,则PCPC+rel,否则顺序执行,否则顺序执行2三、三、调用和返回指令(调用和返回指令(5条)条)1绝对调用指令(绝对调用指令(1条)条)3返回指令(返回指令(2条)条)2长调用指令(长调用指令(1条)条)助记符格式助记符格式相应操作相应操作机器周期机器周期ACALLaddr11PCPC+2SPSP+1,SPPC0-7SPSP+1,SPPC8-15PC0-10addr112助记符格式助记符格式相应操作相应操作机器周期机器周期LCALLaddr16PCPC+3SPSP+1,SPPC0-7SPSP+1,SPPC8-15PCaddr162助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期RETPC8-15SP,SPSP-1PC0-7SP,SPSP-1子程序返回子程序返回2RETIPC8-15SP,SPSP-1PC0-7SP,SPSP-1中断程序返回中断程序返回24空操作(空操作(1条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期NOP空操作空操作消耗消耗1个机器周期个机器周期13.6 3.6 3.6 3.6 位操作类指令位操作类指令位操作类指令位操作类指令1位传送指令(位传送指令(2条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期MOVC,bitCy(bit)位传送指令,结果影响位传送指令,结果影响Cy标志标志2MOVbit,C(bit)Cy位传送指令,结果不影响位传送指令,结果不影响PSW22位置位和位清零指令(位置位和位清零指令(4条)条)助记符格式助记符格式相应操作相应操作指令说明指令说明机器周期机器周期CLRCCy0位清位清0指令,结果影响指令,结果影响Cy标志标志1CLRbit(bit)0位清位清0指令,结果不影响指令,结果不影响PSW1SETBCCy1位置位置1指令,结果影响指令,结果影响Cy标志标志1SETBbit(bit)1位置位置1指令,结果不影响指令,结果不影响PSW13位运算指令(位运算指令(6条)条)4位运算指令(位运算指令(6条)条)助记符格式助记符格式相应操作相应操作机器周期机器周期JBbit,rel若(若(bit=1),则),则PCPC+3+rel,否则顺序执行,否则顺序执行2JNBbit,rel若(若(bit=0),则),则PCPC+3+rel,否则顺序执行,否则顺序执行2JBCbit,rel若(若(bit=1),则),则PCPC+3+rel,并使并使(bit)0,否则顺序执行,否则顺序执行25判判CY标志指令(标志指令(2条)条)助记符格式助记符格式相应操作相应操作机器周期机器周期JCrel若若CY=1,则,则PCPC+2+rel,否则顺序执行,否则顺序执行2JNCrel若若CY=0,则,则PCPC+2+rel,否则顺序执行,否则顺序执行25判判CY标志指令(标志指令(2条)条)助记符格式助记符格式相应操作相应操作机器周期机器周期JCrel若若CY=1,则,则PCPC+2+rel,否则顺序执行,否则顺序执行2JNCrel若若CY=0,则,则PCPC+2+rel,否则顺序执行,否则顺序执行23.7 3.7 3.7 3.7 常用伪指令常用伪指令常用伪指令常用伪指令1定位伪指令定位伪指令ORG格式:标号:ORG地址表达式功能:规定程序块或数据块存放的起始位置2定义字节数据伪指令定义字节数据伪指令DB格式:标号:DB字节数据表功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。3定义字数据伪指令定义字数据伪指令DW格式:标号:DW字节数据表功能:功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。4定义空间伪指令定义空间伪指令DS格式:标号:DS地址表达式功能:从指定的地址开始,保留多少个存储单元作为备用的空间。5符号定义伪指令符号定义伪指令EQU或或=格式:符号名EQU表达式符号名=表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。6数据赋值伪指令数据赋值伪指令DATA格式:符号名DATA表达式功能:将表达式的值或某个特定汇编符号定义一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。7数据地址赋值伪指令数据地址赋值伪指令XDATA格式:符号名XDATA表达式功能:将表达式的值或某个特定汇编符号定义一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。第四节第四节C语言指令系统语言指令系统4.1 C4.1 C4.1 C4.1 C语言优点语言优点语言优点语言优点C语言有如下优点。(1)对单片机的指令系统不需要了解,仅要求对存储器有了解。(2)编译器管理寄存器的分配、不同存储器的寻址及数据类型等细节。(3)程序结构化,程序有规范的结构,可以通过函数实现小功能执行。(4)具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性。(5)用近似人的思维来使用关键字和运算函数。(6)提供强大包含有多个标准子程序的库,具有较强的数据处理能力。(7)很容易将新程序植入已编写好的程序,因为C语言具有模块化编程技术。(8)编程和程序调试时间短,编程效率高。4.2 C4.2 C4.2 C4.2 C语言程序结构语言程序结构语言程序结构语言程序结构单片机C5l语言是一种结构化的程序设计语言,C语言程序的结构如图所示。1.顺序结构(顺序结构(sequence)顺序结构就是按顺序地执行各条语句,无需循环也无需跳转,顺序结构就是按顺序地执行各条语句,无需循环也无需跳转,它是最简单也是最基本的流程控制语句。它是最简单也是最基本的流程控制语句。2.选择结构(选择结构(selection)选择结构又称判断结构或分支结构,它根据是否满足给定的条选择结构又称判断结构或分支结构,它根据是否满足给定的条件而从多组操作中选择一种操作。选择结构的主要语句是件而从多组操作中选择一种操作。选择结构的主要语句是if语句。语句。3.循环结构(循环结构(repetition)循环结构又称为重复结构,即在一定条件下反复执行某一部分循环结构又称为重复结构,即在一定条件下反复执行某一部分的操作,循环结构的主要语句是的操作,循环结构的主要语句是for,while,do-while语句。语句。4.3 C4.3 C4.3 C4.3 C语言基本语句语言基本语句语言基本语句语言基本语句从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支(选择)结构和循环结构。1.表达语句与复合语句1)表达式语句表达式语句是众多语句中最基本的一种语句。所谓表达式语句就是由一个表达式构成的一个程序语句。1)基本if语句基本if语句的格式如下:if(表达式)语句组1;else 语句组2;2)复合语句复合语句就是把多个语句用“”括起来组成一个语句,组合在一起形成具有一定功能的模块,这种由若干条语句组成的语句块称为复合语句。2.选择语句选择语句又称为条件语句(分支语句),此语句能够改变程序的流程。2)if-else-if语句当有多个分支选择时,可采用if-else-if语句,其一般格式如下:if(表达式)语句组1;elseif(表达式2)语句组2;elseif(表达式3)语句组3;elseif(表达式m)语句组m;elseif(表达式n)语句组n;3)switch语句当编程遇到的判断条件较少时(3个判断条件以下),if语句执行效果较好,但是当遇到判断条件较多时,if语句就会降低程序的可读性。C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:switch(button)case常量表达式1:语句组1;break;case常量表达式1:语句组1;break;case常量表达式n:语句组n;break;default:语句组n+1;执行该语句时,先计算“表达式”的值,并逐个与case后面的“常量表达式”的值相比较,当“表达式”的值与某个“常量表达式”的值相等时,即执行其后的语句,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如表达式的值与所有case后的“常量表达式”均不相同时,则执行default后的语句。3.循环语句循环语句循环语句作用:当条件满足时,重复执行程序段,执行程序循环语句作用:当条件满足时,重复执行程序段,执行程序功能。给定的条件称为循环条件,反复执行的程序段称为循环功能。给定的条件称为循环条件,反复执行的程序段称为循环体。体。在在C语言中,循环程序结构分为三种语句:语言中,循环程序结构分为三种语句:while语句、语句、do-while语句和语句和for语句。语句。1)while语句语句while语句的一般形式为:语句的一般形式为:while(表达式表达式)语句组语句组;/循环体循环体其中表达式是循环条件,语句组为循环体while语句的执行过程是计算表达式的值,当值为真(非0)时,执行循环体语句;当值为假(0)时,则退出整个while循环语句,while语句执行过程如图所示。2)do-while语句do-while语句的一般形式为:do语句组;/循环体while(表达式);此循环与while循环的区别在于:它先执行一次循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。do-while语句执行过程如图所示。3)for语句在C语言中,for语句使用最为灵活,它完全可以取代while语句。它的最简单最常用的形式为:for(循环变量赋初值;循环条件;修改循环变量)语句组;/循环体for语句的执行过程如下:(1)首先执行“循环变量赋初值”,一般为一个赋值表达式。(2)判断“循环条件”,若其值为真(非0),则执行for语句中指定的内嵌语句组,然后执行下面第(3)步;若其值为假(0),则结束循环,转到第(5)步。该语句决定什么时候退出循环。(3)执行“修改循环变量”,定义每一次循环后变量如何变化。(4)转回上面第(2)步继续执行。(5)循环结束,执行for语句下面一条语句。其执行过程如图所示。三种循环的比较:(1)while和do-while循环,循环体中应包括使循环趋于结束的语句。(2)for语句功能最强,也最常用。(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句包括实现循环变量的初始化。4.4 C4.4 C4.4 C4.4 C语言数据与运算语言数据与运算语言数据与运算语言数据与运算1.C语言数据类型单片机C51语言的基本数据类型如表所示。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类。表列出了KeiluVision3C51支持的数据类型。类型说明类型说明关键字关键字所占字节数所占字节数取值范围取值范围有符号整型有符号整型signedint2-32768+32767无符号整型无符号整型unsignedint2065535有符号长整型有符号长整型signedlong4-2147483648+2147483647无符号长整型无符号长整型unsignedlong404294967295有符号字符型有符号字符型signedchar1-128+127无符号字符型无符号字符型unsignedchar10255浮点型浮点型float41.175494E-383.402823E+38指针型指针型*13对象的地址对象的地址位类型位类型bit1位(位(1bit)0或或1可寻址位可寻址位sbit1位(位(1bit)0或或18位特殊功能寄存器位特殊功能寄存器sfr1025516位特殊功能寄存器位特殊功能寄存器Sfr1620655351)整型(int)整型分为有符号整型(signedint)和无符号整型(unsignedint)两种,默认为signedint。它们都在内存中占2个字节,用来存放双字节数据。表示有符号整型数的signedint,数值范围为-32768+32767。字节中最高位表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。如果超出这个范围,int数据将会溢出。2)长整形(long)long表示长整形,分为signedlong和unsignedlong两种,默认为signedlong。两者在内存中占4个字节。有符号长整形signedlong的数值取值范围是-2147483648+2147483647,无符号长整型数unsignedlong的数值取值范围是04294967295。3)字符型(char)char表示字符型,分为signedchar和unsignedchar两种,默认为signedchar。长度为1个字节,用来存放单字节的数据。signedchar类型表示范围为-128+127,unsignedchar类型表示范围为0255。4)浮点型(float)float型在十进制中有7位有效数字,符合IEEE-745标准的单精度浮点型数据。它在内存中占4个字节,字节中最高位表示数据的符号,“1”表示负数,“0”表示正数,数值范围是1175494E-383402823E+38。字母E(或e)表示以10为底的指数,如123E3=1231000,但字母之前必须有数字,且之后必须为整数。5)指针型(*)指针型(*)是一种特殊的数据类型,它本身就是一个变量,这个变量存放的是指向另一个数据的地址,它占据一定的内存单元。指针长度一般为l3个字节。根据所指的变量类型不同,可以是整型指针(int*)、浮点型指针(float*)和字符型指针(char*)等。例如int*point表示一个整型的指针变量。6)位类型(bit)位类型是单片机C51语言编译器的一种扩充数据类型,可以定义一个位类型变量,但不能定义位指针,也不能定义位数组。它的值只能是一个二进制位:“0”或“1”。7)可寻址位(sbit)可寻址位(sbit)也是单片机C51语言编译器的一种扩充数据类型,其作用是可以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。其定义方法有三种:sbit位变量名=位地址;sbit位变量名=特殊功能寄存器名位位置;sbit位变量名=字节地址位位置。8)8位特殊功能寄存器(sfr)8位特殊功能寄存器(sfr)也是单片机C51语言编译器的一种扩充数据类型,占用1个字节,值域为0255,利用它可以访问单片机内部所有的8位特殊功能寄存器。定义方法如下:sfr特殊功能寄存器=地址常数。9)16位特殊功能寄存器(sfrl6)在一些新型8051单片机中,特殊功能寄存器经常组合成16位来使用。采用关键字sfrl6可以定义这种16位的特殊功能寄存器。2.C语言运算符运算符是编译程序执行特定算术或逻辑操作的符号,单片机C51语言和C语言基本相同,主要有三大运算符:算术运算符、关系与逻辑运算符和位操作运算符,具体如表所示。7)可寻址位(sbit)可寻址位(sbit)也是单片机C51语言编译器的一种扩充数据类型,其作用是可以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。其定义方法有三种:sbit位变量名=位地址;sbit位变量名=特殊功能寄存器名位位置;sbit位变量名=字节地址位位置。8)8位特殊功能寄存器(sfr)8位特殊功能寄存器(sfr)也是单片机C51语言编译器的一种扩充数据类型,占用1个字节,值域为0255,利用它可以访问单片机内部所有的8位特殊功能寄存器。定义方法如下:sfr特殊功能寄存器=地址常数。9)16位特殊功能寄存器(sfrl6)在一些新型8051单片机中,特殊功能寄存器经常组合成16位来使用。采用关键字sfrl6可以定义这种16位的特殊功能寄存器。2.C语言运算符运算符是编译程序执行特定算术或逻辑操作的符号,单片机C51语言和C语言基本相同,主要有三大运算符:算术运算符、关系与逻辑运算符和位操作运算符,具体如表所示。运算符名运算符名运算符运算符赋值运算符赋值运算符=算术运算符算术运算符+-*/%+-关系运算符关系运算符=!=逻辑运算符逻辑运算符!&位运算符位运算符&条件运算符条件运算符?:逗号运算符逗号运算符,&指针和地址运算符指针和地址运算符*&求字节运算符求字节运算符sizeof强制类型转换运算符强制类型转换运算符(类型)(类型)下标运算符下标运算符函数调用运算符函数调用运算符()1)赋值运算符(1)赋值表达式及类型转换规则“=”运算符称为赋值运算符,它的作用是将等号右边一个数值赋给等号左边的一个变量,赋值运算符具有右结合性。赋值语句的格式如下:变量=表达式2)复合赋值运算符复合赋值运算符就是在赋值符“=”之前加上其他运算符,具体如表所示。其语句格式的表达式如下:例如:a+=b;/a=(a+b)x*=b+c;/x=(x*(b+c)a=6;/a=(a6)运算符运算符作用作用+=加法赋值加法赋值-=减法赋值减法赋值*=乘法赋值乘法赋值/=除法赋值除法赋值%=取余赋值取余赋值=右移位赋值右移位赋值&=逻辑与赋值逻辑与赋值=逻辑或赋值逻辑或赋值=逻辑异或赋值逻辑异或赋值=逻辑非赋值逻辑非赋值3)算术运算符单片机C51语言包括7种算术运算符,具体作用如表所示。运算符运算符作用作用-减法,求两个数的差,例如减法,求两个数的差,例如10-5=5+加法,求两个数的和,例如加法,求两个数的和,例如5+5=10*乘法,求两个数的积,例如乘法,求两个数的积,例如5*5=25/除法,求两个数的商,例如除法,求两个数的商,例如20/5=4%取余,求两个数的余数,例如取余,求两个数的余数,例如20%9=2+自加自加1,变量自动加,变量自动加1,例如,例如+j、j+-自减自减1,变量自动减,变量自动减1,例如,例如-j、j-除法运算符两侧的操作数可为整数或浮点数,取余运算符两侧的操作数均为整型数据,所得结果的符号与左侧操作数的符号相同。+和-运算符只能用于变量,不能用于常量和表达式。4)关系运算符在单片机C51程序设计中,有6种关系运算符,具体如表所示。运算符运算符作用作用大于大于=大于等于大于等于小于小于=小于等于小于等于=等于等于!=不等于不等于用关系运算符将运算对象连接起来的式子称为关系表达式。它的一般形式为:表达式关系运算符表达式关系表达式的值为逻辑值,其结果只能取真(用1表示)和假(用0表示)两种值。5)关系运算符在单片机C51程序设计中,有6种关系运算符,具体如表所示。运算符运算符作用作用&逻辑与(逻辑与(AND)逻辑或(逻辑或(OR)!逻辑非(逻辑非(NOT)逻辑与条件式1&条件式2逻辑与条件式1&条件式2逻辑非!条件式逻辑表达式的逻辑运算结果如表所示条件条件1条件条件2逻辑运算逻辑运算AB!AA&BAB真真真真假假真真真真真真假假假假假假真真假假真真真真假假真真假假假假真真假假假假和其他运算符比较,优先级从高到低的排列顺序如下:!算术运算符关系运算符&赋值运算符6)位运算符单片机c5l语言支持位运算符,这使其具有了汇编语言的一些功能,能够支持I/O端口的位操作,使程序设计具有强大灵活的位处理能力。C5l语言提供了6种位运算符,具体如表所示。位运算的作用是按照二进制位对变量进行运算,其真值表如表所示。运算符运算符作用作用按位取反,即将按位取反,即将0变变1,1变变0左移,例如:左移,例如:a右移,例如:右移,例如:a4,a中数值右移动中数值右移动4位,对无符号位左端补位,对无符号位左端补0。如果。如果a为负数,即符号位为为负数,即符号位为1,则左端补入全为,则左端补入全为1&按位与,两位都为按位与,两位都为1则结果为则结果为1,有一位为,有一位为0则结果为则结果为0按位异或,两位数值相同为按位异或,两位数值相同为0,相反为,相反为1按位或,两位中有一位为按位或,两位中有一位为1则结果为则结果为1,两位都为,两位都为0则结果为则结果为0位变量位变量1位变量位变量2位运算位运算ABAA&BABABAB00110000110011100101111001107)条件运算符条件运算符的一般格式为:如果逻辑表达式的值为真,则将表达式1的值赋给逻辑表达式;如果逻辑表达式的值为假,则将表达式2的值赋给逻辑表达式。8)逗号运算符逗号表达式的一般形式为:表达式1,表达式2,表达式n程序从左到右依次计算出各个表达式的值,逗号中最右边表达式的值就是整个逗号表达式的值。9)指针变量、指针和地址运算符(1)指针变量的定义数据类型*指针变量名(2)为变量i赋值的方法为变量赋值的方法有两种。直接方式间接方式(3)指针和地址运算符“&”运算符为地址运算符,“*”运算符为指针运算符,它们都是单目运算符。取地址运算符取地址运算符&是单目运算符,其功能是取变量的地址取内容运算符取内容运算符*是单目运算符,用来表示指针变量所指单元的内容,在*运算符之后跟的必须是指针变量,一般形式为:变量=*指针变量4.5 4.5 4.5 4.5 常量和变量常量和变量常量和变量常量和变量1.常量常量包括整型常量(整型常数)、浮点型常量(有十进制表示形式和指数表示形式)、字符型常量(单引号内的字符)及字符串常量(双引号内的单个或多个字符)等。2.变量在使用变量之前,必须先进行定义,用一个标识符作为变量名并指出其数据类型和存储模式,以便编译系统为它分配相应的存储单元。1.常量常量包括整型常量(整型常数)、浮点型常量(有十进制表示形式和指数表示形式)、字符型常量(单引号内的字符)及字符串常量(双引号内的单个或多个字符)等。2.变量在使用变量之前,必须先进行定义,用一个标识符作为变量名并指出其数据类型和存储模式,以便编译系统为它分配相应的存储单元。对变量的定义格式如下:存储种类数据类型存储器类型变量名其中,内选项是可选项。变量的存储种类有4种:自动(auto)、外部(extern)、静态(static)和寄存器(register)。定义变量时如果省略存储种类选项,则默认为自动变量。1)存储种类(1)自动变量(auto)自动变量是单片机C5l语言中使用最为广泛的一种类型,大多数变量都属于自动变量。(2)外部变量(extern)外部变量可以被程序中的所有函数引用,是在函数外部定义的变量。它的作用范围是整个程序。(3)静态变量(static)静态变量就是希望函数中局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值就是上一次函数调用结束时的值。(4)寄存器变量(register)在单片机C5l语言程序设计中,如果有一些变量使用频繁,则为了存取变量的值花费不少时间,为了提高执行效率,将局部变量的值放在CPU的寄存器(可以理解为是一种超高速的存储器)中,需要用时直接从寄存器取出参加运算。2)存储器类型单片机C51语言将程序存储器和数据存储器分开,KeilC51编译器所能识别的存储器类型如表所示。一般在定义变量时经常省略存储器类型的定义,采用默认的存储器类型,而默认的存储器类型与存储器模式有关。KeilC51编译器支持的存储器模式如表所示。存储器类型存储器类型说明说明DATA直接寻址的片内数据存储器(直接寻址的片内数据存储器(128B),访问速度最快),访问速度最快BDATA可位寻址的片内数据存储器(可位寻址的片内数据存储器(16B),允许位与字节混合访问),允许位与字节混合访问IDATA间接访问的片内数据存储器(间接访问的片内数据存储器(256B),允许访问全部片内地址),允许访问全部片内地址PDATA分页寻址的片外数据存储器(分页寻址的片外数据存储器(256B)XDATA片外数据存储器(片外数据存储器(64KB)CODE程序存储器(程序存储器(64KB),变量可固化在程序存储区),变量可固化在程序存储区存储器类型存储器类型说明说明small参数及局部变量放入可直接寻址的内部数据存储器中参数及局部变量放入可直接寻址的内部数据存储器中(最大最大128B,默认存,默认存储器类型为储器类型为data)compact参数及局部变量放入外部数据存储器的前参数及局部变量放入外部数据存储器的前256B中中(最大最大256B,默认存储,默认存储器类型为器类型为pdata)large参数及局部变量直接放入外部数据存储器中参数及局部变量直接放入外部数据存储器中(最大最大64KB,默认存储器类型,默认存储器类型为为xdata)C语言程序是由函数组成的。虽然每个程序有且只有一个主函数main(),但都包含多个具有特殊功能的子函数,因此函数是C语言程序的基本模块,通过对函数模块的调用能实现特定的功能。1.函数分类从C语言程序的结构上划分,C语言函数分为主函数main()和子函数两种。而对于子函数,从不同的角度或以不同的形式又可分为:库函数和用户自定义函数。1)库函数库函数也称为标准函数或标准库函数,是由C51的编译器提供的,用户无须定义,也不必在程序中作类型说明,只需在程序前给出包含有该函数原型的头文件即可在程序中直接调用。2)用户自定义函数用户自定义函数是由用户按需要写的函数。从函数定义的形式上划分为:无参数函数、有参数函数和空函数。2.函数定义及调用在程序中通过对函数的调用来执行函数体,其过程与其他语言的子程序调用相似。4.5 C4.5 C4.5 C4.5 C语言函数语言函数语言函数语言函数1)函数定义函数定义的一般形式如下:函数类型函数名(形式参数表)形式参数说明;局部变量定义;函数体语句;Return语句;(1)函数类型函数类型说明自定义函数返回值的类型。分为两种:有返回值函数和无返回值函数。有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值,如数学函数。无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。(2)函数名函数名是自定义函数的名字,函数名必须是合法标识符,各函数名的定义是独立的。(2)函数名函数名是自定义函数的名字,函数名必须是合法标识符,各函数名的定义是独立的。(3)形式参数表形式参数表给出函数被调用时传递数据的形式参数,形式参数的类型必须说明。如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省略。(4)局部变量定义局部变量定义是对函数内部的局部变量进行定义,也称为内部变量。(5)函数体语句函数体语句实现函数功能而编写的语句。(6)return语句return语句用于返回函数执行的结果。2)函数调用函数调用的一般形式为:函数名(实际参数列表)在一个函数中需要用到某个函数的功能时,就调用该函数。调用者称为主调函数,被调用者称为被调函数。若被调函数是有参函数,则主调函数必须把被调函数所需的参数传递给被调函数。传递给被调函数的数据称为实际参数,简称实参。根据被调用函数在主调用函数中出现的位置,函数调用有三种形式。(1)函数语句。被调用函数以主调用函数的一条语句的形式调用。例如:P1_0=0;delay(200);(2)函数表达式。被调用函数以一个运算对象的形似出现在一个表达式中。这种表达式称为函数表达式。例如:c=8*min(a,b);(3)函数参数。被调用函数作为另一个函数的实参或者本函数的实参。例如:n=min(a,min(b,c);第五节第五节单片机开发过程单片机开发过程5.1 5.1 5.1 5.1 单片机开发系统单片机开发系统单片机开发系统单片机开发系统本节简述单片机应用系统开发中所必需的开发工具以及用它们调试单片机应用系统的基本方法。单片机应用系统中电路和程序的正确与否、程序的装入等,都必须借助于单片机开发系统,单片机开发系统是单片机编程调试的必需工具。单片机开发系统在硬件上增加了目标系统的在线仿真器、编程器等部件,所提供的软件除有简单的操作系统之外,还增加了目标系统的汇编和调试程序等。1.在线仿真功能单片机的仿真器具有与所要开发的单片机应用系统有同的单片机芯片(如AT89C51或AT89S51等),仿真器就是一个单片机系统。当单片机用户系统接线完毕后,由于自身无法验证好坏,无调试能力,那么我们
展开阅读全文