单片机第二讲_第1页
单片机第二讲_第2页
单片机第二讲_第3页
单片机第二讲_第4页
单片机第二讲_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南理工学院机械学院湖南理工学院机械学院单片机原理 及应用教程第三章第三章 MCS-51单片机指令系统及编程举例单片机指令系统及编程举例本章重点:MCS-51单片机的寻址方式;MCS-51单片机的指令集;伪指令;汇编语言简单程序设计; 指令是计算机功能的集中体现,不同的计算机具有不同的指令系统,但从格式上看都包含两大部分:操作码 操作数功能描述对象描述四类操作对象:特殊功能寄存器操作对象;片内数据存储器操作对象(工作寄存器、位);片外数据存储器操作对象;程序存储器操作对象;寻址方式:按指令中地址的表现形式获取不同操作对象的方式。例如:ADD A,60H;助记指令 或:25H 60H;机器指令目

2、的操作数源操作数指令系统简介操作数51单片机根据功能和寻址方式的不同其指令集包含111条指令。2、每条指令在存储器中占用一定的空间,以字节为单位,按所占的字节数分为:单字节(49条)、双字节(45条)、三字节(17条)。3、每条指令在执行中要花一定时间,以机器周期为单位,按所占的机器周期数分为:单机器周期(64条)、双机器周期(45条)、4个机器周期(2条)。1、按指令的功能分:数据传送类指令:29条;算术运算类:24条逻辑与移位类:24条;控制转移类:17条位操作类:17条;寻址方式1、MCS51共有七种寻址方式:2、指令描述中的符号注释Rn:当前选用的工作寄存器(n=07),8个工作寄存器

3、分别用R0R7表示;Ri:当前工作寄存器中的可作地址指针的寄存器(i=0,1)即R0,和R1;#data:表示 8 立即数;#data16表示16位的立即数;direct:8位片内RAM的直接地址;addr11:11位的目的地址;addr16: 16位的目的地址;rel:相对地址(128127);:寄存器间接寻址符;/:位操作指令中的取反符. 还有几个符号在后面介绍.立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,变址寻址,相对寻址和位寻址。寻址的空间: 程序存贮器空间。该寻址方式所表示的操作对象紧跟在指令后面的存储单元; 例如:指令 : MOV A , #45H 机器码:74 45HPC10

4、00H1001H744545A2.操作对象表现形式:在数的前面加一个#“字号;3.应用:一般用于初始化数据常数或地址常数;立即寻址直接寻址1.寻址的空间:片内数据存贮器空间,SFR寄存器,位地址空间。该寻址方式所表示的操作对象在指令中占1个字节单元;2.表现形式:用直接的地址数据表示。注意:所有内部数据及位地址空间都能直接寻址访问,特殊功能寄存器只能直接寻址访问,但A、B、DPTR和位累加器Cy以及当前工作寄存器也能够寄存器寻址访问) 。 例如: 指 令: MOV A ,45H 机 器 码: E5 45E545PC1000H10012F2FA程序存贮器片内RAM45H寄存器寻址:例如:指 令:

5、 MOV A , R3 机器码: E BH (11101011)5811101011PC58A程序存贮器片内RAM13H (R3)特点:该寻址方式所表示的操作对象与操作码编在1个字节中。表现形式:用寄存器名表示.应用:用寄存器来保存中间结果.寻址空间: A,B,DPTR,Rn(R0R7) , Cy.指令中的寄存器的内容为操作数。能寄存器寻址的特殊功能寄存器有:A,B,DPTR,Rn(R0R7),位操作中的进借位标志Cy。这种指令的操作数一般隐含在操作码中。 指令中寄存器的内容为地址,对该地址所指定的RAM单元的内容进行访问。可作间寻址的寄存器有:工作寄存器R0,R1和数据指针DPTR。例如:指

6、 令: MOV A , R0 机器码: E 6H (11100110)11100110PC5E7878程序存贮器片内RAMA00H(R0)5E特点:该寻址方式所表示的操作对象与操作码编在1个字节中。表现形式:用前缀符来限定R0,R1。应用:一般用于对数组类型的数据进行访问。寻址空间:片内RAM低128个单元。寄存器间接寻址变址寻址(基址寄存器+变址寄存器寻址)例如: MOVC A , A+DPTR 机器码:9 3H (1001 0011)93H5CH472000+2030H2047HADPHDPL47程序存贮器SFR其中A=47HDPTR=2000H2047H=5CH结果:A=5CH特点: 该

7、指令为一个字节;表示:加上前缀;应用: 一般用于查表操作;寻址空间:程序存贮器空间;注意注意:A中的内容为正数中的内容为正数,可查以可查以PC或或DPTR为基址的为基址的256个字节个字节范围的任一存贮单元。范围的任一存贮单元。程序计数器程序计数器PC或数据指针或数据指针DPTR作为基址寄存器作为基址寄存器,累加累加器器A的内容为变址寄存器的内容为变址寄存器,操作数的有效地址为操作数的有效地址为: 有效地址有效地址=基址寄存器基址寄存器(PC,DPTR)+变址寄存器寻址变址寄存器寻址(A)5C相对寻址该寻址方式仅用于相对转移类指令,与其它寻址方式不同的是寻找的是指令的地址。相对寻址的有效地址(

8、目的地址) D=PC+指令的字节数b+rel。即 rel=D+(PCb)例如: 指 令:JC 18H 机器码:40 18H 特点:该当指令执行后PC的内容发生了改变。表示:rel 是位8位有符号的数其取值范围为:128+127。因此,既可以向后转移也可以向前转移。应用:实际编程的源程序中,相对偏移量用标号表示。+40181001H101AH1000H101AH18H0CyPC1000H1Cy1002H101A1002H位寻址1.位寻址的空间:RAM区可寻址的128个位地址(00H7FH),以及特殊功能寄存器中的一些位。2.访问方式:这些位用立即寻址方式访问,只有位累加器Cy采用寄存器寻址方式。

9、例如: SETB 3AH SETB P1.0 SETB C 机 器码: D2 3A 机器码:D2 90 机器码: D 3 3.位地址在指令中的四种表示形式:(1)直接位地址表示:80H(2)位名表示:RS0,F0(3)单元地址加位序号表示:90H.0 (4)特殊功能寄存器名加位号表示:P1.0 , PSW.3,ACC.6MCS51 指令系统的七种寻址方式小结寻址方式使用变量 寻址空间立即寻址立即 数 # data程序存贮器直接寻址直接地址 addr8片内RAM、 SFR寄存器寻址R0R7,A,B,DPTR,Cy工作寄存器Rn,A,B,DPTR,Cy寄存器间接寻址R0,R1,SP片内RAMR0,

10、R1,DPTR片外数据存贮器变址寻址A+DPTR,A+PC程序存贮器相对寻址PC+rel程序存贮器位寻址bit,C片内20H2FH,SFR中的位指令系统MCS51单片机,共有111条指令按指令的功能分为以下五类进行介绍: (1)、数据传送类指令;(2)、算术运算类指令;(3)、逻辑运算类指令;(4)、程序控制类指令;(5)、位(布尔)操作类指令 ;数据传送类指令该类指令实现片内RAM(包括工作寄存器,SFR,A,B)各单元之间的数据传送;片外RAM与累加器A之间的数据传送;程序存贮器与累加器A之间的数据传送。一、通用数据传送指令(16条): 一般格式:MOV 目的, 源1.以累加器为目的操作数

11、的指令(4条)MOV A , direct ; A (direct)MOV A , Ri ; A (Ri)MOV A , #data ; A data MOV A , Rn ; A Rn直接寻址单元间接寻址单元工作寄存器立即数A例如:已知 (A)=40H,(R6)=50H,(6FH)=32H,(R0)=18H,(18H)=10H,执行下列程序段:MOV A , R6 ; A 50HMOV A , 6FH ; A (6FH)MOV A , R0 ; A (R0)MOV A , #6FH ; A 6FH2.寄存器Rn为目的操作数的指令(3条)MOVRn ,A ; Rn AMOV Rn , dire

12、ct ; Rn direct MOV Rn , #data ; Rn #data 例如:已知A=3FH,(4EH)=2FH,R1=20H,R3=30H,执行行下列程序段:MOV A , #2EH ;A 2EHMOV R1 , A ; R1 A MOV R2 , 4EH ;R2 (4EH)MOV R3 , #6FH ;R3 6FH执行后,A=2EH, R1= 2EH, R2= 2FH, R3= 6FH3. 以直接地址为目的操作数的指令(5条)MOV direct , A ; direct AMOV direct , Rn ; direct RnMOV direct , direct ; dire

13、ct (direct) MOV direct , Ri ; direct (Ri)MOV direct , #data ; direct data注意:以下两条指令是三字节指令,第二和第三字节为8位的地址或8位的立即数。MOV direct , direct ; direct (direct) MOV direct , #data ; direct data8例如: 已知: (30H)=1FH, (40H)=5FH,执行下列指令;MOV 30H , 40H ; 30H (40H)MOV 50H , #40H ; 50H 40H执行后,(30H)=5FH,(40H)=5FH,(50)=40H4.

14、间接地址为目的操作数的指令(3条)MOV Ri , A ; (Ri) A MOV Ri ,direct ; (Ri) (direct)MOV Ri , #dara ; (Ri) data注意:该类指令使用时,应先对Ri 赋地址初值.对于8051系列单片机,片内低128个单元才可间接寻址去访问 .例如:设片内RAM中,(30H)=40H, (40H)=20H,P1口为输入口,其输入的数据为CAH,执行下列程序段:MOV R0 , #30H ; R0 30HMOV A , R0 ; A (30H)MOV R1 , A ; R1 40HMOV B , R1 ; B 20HMOV R1 , P1 ;

15、(R1) CAH程序控制执行结果为: A=40H,R0 =30H ,R1= 40H, B =20H, (40H)= 0CAH5.立即数送数据指针:MOV DPTR , #data16.如: MOV DPTR , #2000H通用数据传送类指令小结:直接寻址单元间接寻址单元工作寄存器立即数DPTR16位注意:下列指令是不存在的:MOV Rn, Rn; MOV Ri, RnA改错题: 指出下列指令中的错误,并更正:1.MOV R2 ,R5更正: MOV A ,R5 MOV R2 ,A2.MOV R0 , R4更正: MOV A , R4 MOV R0 , A二、堆栈操作指令(2条)进栈操作:PUS

16、H direct ; SP SP+1, (SP) (direct) 出栈操作:POP direct ; (direct) SP , SP SP1注意:堆栈操作指令的操作数是直接寻址方式,对累加器进行堆栈操作时,用ACC表示。例子如:设SP=30H,(50H)=80H ,执行下列程序段。PUSH 50HPOP 40HSP 30H8050H 31H SP 31H SP 30H31H 808050H40H8050H30H8080三、查表指令MOVC A, A+PC ; PC PC+1, A (A+PC)MOVC A , A+DPTR ; PC PC+1, A (A+DPTR)1 .都属于单字节指令。

17、2. 对程序存储器空间进行访问。3. 一般用于查表操作。首先在程序存贮器的一块连续存贮空间中建立数据表,表的首地址或PC的内容为基址,表的偏移地址即为变址。4. 基址确定后,查表范围为基址后256个字节,累加器A中的数据为正数。5. PC的值同指令所处的位置确定,而DPTR的值可以通过赋值改变。 例如,在程序存贮器中,数据表格为: 2000H: 01H 2001H: 23H 2002H: 45H 2003H: 67H;程序如下: 1000H: MOV A , #03H 1002H: MOV DPTR ,#2000H 1005H: MOVC A , A+DPTR结果为: A=67H,DPTR=2

18、000H.039000012345671000H1001H1002H1003H1004H1005H1006H7420932000H2001H2002H2003H032000ADPTR+123例如,在程序存储器中,数据表格为: 1010H:01 1011H:02 1012H:03程序如下: 1000H: MOV A,#0DH ;A 0DH 1002H: MOVC A,A+PC ;A (0DH+1003H) 该程序运行的结果为:A=01H, PC= 1003H0D830102031000H1001H1002H1003H1010H1011H1012H740DAPC+01H四.累加器与片外数据存贮器间

19、的数据传送指令(4条)注意注意:Ri间址只能访问片外RAM的低256个单元,这时的地址由P0口输出,P2口仍可作一般I/O口使用.DPTR间址可访问64KB的空间DPTR中的低8位地址由P0口输出,高8位地址由P2口输出.1)、MOVX A , Ri ;A (Ri)2)、MOVX Ri , A ;(Ri) A3)、MOVX A, DPTR ; A (DPTR)4)、MOVX DPTR , A ; (DPTR) A 问题:下列两个程序段的功能是否相同?为什么?1、MOV R1 , #10H MOV P2, #20H MOVX A , R1 2、MOV DPTR , #2010H MOVX A ,

20、 DPTR问题:下列指令正确吗?MOV A , 2000H MOVX A , 2000H MOVC A , 2000H问题:若当前工作寄存器使用第一组,下列四组指令的功能相同吗?1、MOV A , 0AH 2、MOV A , R2 3、MOV R0 ,#0AH MOV A , R0 4、MOV SP , #0AH POP ACC 五.交换指令XCH A , Rn ;A RnXCH A , direct ;A (direct) XCH A , Ri ;A (Ri)例如:已知R0=10H,A=4EH, (10H)=5FH,执行指令 : 1.字节交换指令XCH A , R0.结果: A=5FH, 1

21、0H=4EHA10H5FH(4EH)4EH(5FH)R010H2、 半字节交换指令.XCHD A , Ri ;A. 3 0 (Ri). 3 0例如:R0=10H, A=35H,片内RAM(10H)=46H;执行指令:XCHD , R0程序运行结果为:A=36H,(10H)=45H;可见低4位发生了交换,高4位不变.0 0 1 1 0 1 0 1A35H0 1 0 0 0 1 1 0 (10H)46H10HR03、SWAP A ;累加器中的高4 位相互交换.算术运算类指令分类:加法,减法,乘法, 除法.加1,减1,二十进制调整。注意:算术运算类指令一般会影响状态标志位,数据传送类指令只有以累加器

22、为目的操作数的影响标志,其它都不影响标志位。 ADDA,Rn ;A A+Rn ADD A , direct ;A A+(direct) ADD A , Ri ;A A+(Ri) ADD A , #data ;A A+data一加法类指令加法指令(条):2.带进位的加法指令 ADDC A , Rn ;A A+Rn+Cy ADDC A , direct ;A A+(direct)+Cy ADDC A , Ri ;A A+(Ri)+Cy ADDC A , #data ;A A+data +Cy加法类指令对标志位的影响:结果的第七位向第八位有进位时,置位Cy,结果的第七位和第六位只有一位向高位有进位时

23、,置位OV,结果的第三位向第四位有进位时,置位AC,累加器A中的结果有奇数个1置于位P,否则各位清零。1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0+0 0 1 0 0 0 1 11结果:Cy= 1, OV = 1, AC =1 ,P = 10 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 1+ 1 1 1 0 1 1 0 1结果:Cy = 0 , OV = 0, AC =1, P=0注意:带进位的加法运算常用于多字节的求和。例如:设A=85H, (R0)=20H, (20H)=9EH;执行指令:ADD ,0例如,A =4EH,R0 =20H,(20H) = 9E

24、H, Cy =1 ;执行指令:ADDC A , R0 INC A ; A A+ 1 INC direct ;(direct) (direct) + 1 INC Ri ; (Ri) (Ri)+ 1 INC Rn ; Rn Rn+ 1 INC DPTR ; DPTR DPTR+1只有INC A指令影响P标志,当计数到255时再加1则结果为0,不影响进标志Cy,半进位标志AC,溢出标志OV!3. 加1 指令注意:加1 指令常用在循环程序中作计数器使用!4.二十进制调整指令(1条)DA A ;对压缩BCD码加法的结果自动修正.二 . 减法类指令SUBB A , Rn ;A A Rn CySUBB A

25、, direct ;A A (direct) CySUBB A , Ri ;A A (Ri) CySUBB A , #data ;A A data Cy1.带借位的减法指令(4条).由于没有不带借位的减法指令,两个单字节数相减时,应先清Cy,否则会错误地将结果多减一个1。减法指令可用来比较两个无符号数的大小。2 . 减1指令(4条) :DEC A ; A DEC Rn ; Rn RnDEC direct ; (direct) (direct)DEC Ri ; (Ri) (Ri)减1指令对标志位的影响同加1指令,一个为00H的数减1的结果为FFH(255)。三. 乘法指令(1条)MUL AB ;

26、A B BA功能:该指令将累加器A中的被乘数与B寄存器中的乘数相乘,结果的低8位保存到A,高8位保存到B中。对标志位的影响:总是清Cy标志,若乘积小于FFH(255)则清OV,否则OV置1。A中的数的奇/偶性会影响P标志。例如:A=40H,B=5EH;执行指令:MUL AB.结果为:A=80H,B=17H; OV=1,Cy=0, P=1 0 H5 E H 3 8 01 4 0+ 1 7 8 0 H四. 除法指令DIV AB ; A B的商到A ,余数到了B功能:将累加器中的8位无符号整数除B寄存器中的8位无符号整数.,所得的商的整数部分存于A中,余数存于B中。对标志位的影响:总是清Cy为零,若

27、当除数B中的内容为零时置OV=1,否则清OV=0.A中的结果影响P标志。例如,设A=18H , B=12H;执行指令:DIV AB。结果为: A=01H,B=06H; Cy=0,OV=0,P=1.逻辑运算与移位类指令(24条)功能:对8位数进行逻辑与/或/异或/取反/清零以及循环移位等运算。一. 逻辑与指令(6条) ANL A , Rn ; A ARn ANL A , direct ; direct A (direct)ANL A ,Ri ;A A (Ri) ANL A , #data ;A A data ANL direct , A ; direct (direct) ANL direct

28、, #data ; direct (direct) data后两条指令若是以端口P0P3为目的操作数,则称之为具有读修改写特性的指令.应用:逻辑与指令常用来屏蔽某些位.1 0 0 0 1 1 0 10 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 例如:已知 A= 8DH,R0 = 0FH,执行ANL A , R0后,结果 为:A = 0DH;二 . 逻辑或指令(6条)ORL A , Rn ; A A Rn ORL A , direct ; direct A (direct)ORL A ,Ri ;A A (Ri) ORL A , #data ;A A data ORL direc

29、t , A ; direct (direct) ORL direct , #data ; direct (direct) data后两条指令若是以端口P0P3为目的操作数,则称之为具有读修改写特性的指令.应用: 逻辑或指令常用来使某些位置1.例如:已知 A= 86H,R0 = 79H,执行 ORL A , R0后,结果 为:A = FFH.1 0 0 0 0 1 1 00 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 三 . 逻辑异或指令(6条)XRL A , Rn ; A A Rn XRL A , direct ; direct A (direct)XRL A ,Ri ;A A

30、 (Ri) XRL A , #data ;A A data XRL direct , A ; direct(direct)XRL direct , #data ; direct (direct) data后两条指令若是以端口P0P3为目的操作数,则称之为具有读修改写特性的指令应用: 逻辑异或指令常用来把某些位取反。例如:已知 A= 87H,R0 = F9H,执行 XRL A , R0后,结果 为:A = 7EH。1 0 0 0 0 1 1 11 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 四 . 累加器A清零,取反和循环移位指令(6条)D7 D01).循环左移指令: RL A;

31、1.累加器清零指令: CLR A ; A 02.累加器取反指令: CPL A ;A A3.循环移位类指令(4条) D7 D0Cy3 ).带进位的循环左移指令: RLC A ;D7 D0Cy4).带进位的循环右移指令: RRC A ;D7 D02).循环右移指令: RR A控制转移类指令分类:转移指令,子程序调用指令,返回指令。一. 转移指令 长转移 LJMP addr16 ; PC addr16绝对转移 AJMP addr11; PC PC+2, PC. 10PC.0addr11相对转移 SJMP rel ; PCPC+ 2, PCPC+ rel散转指令JMP A +DPTR; PC A+DP

32、TR1、无条件转移指令问题1: 若执行指令: 1803: AJMP 100H, 问PC= ? 解: PC+2=1805= 0001 1000 0000 0101中的低11位用100H= 001 0000 0000替代后得PC = 0001 1001 0000 0000 =1900H。(1900H)问题2:散转指令的特点:问题3:如何使用JMP A+DPTR 实现多分支结构(即散转)。Prog : AJMP prog0;转prog0分支程序. AJMP prog1 ; 转prog1分支程序. AJMP prog2 ; 转prog2分支程序. MOV DPTR , #prog RL A JNC N

33、EXT INC DPHNEXT: JMP A+DPTR (1)、动态特性;(2)、区域特性( 模216 加运算 )。首先建立一个散转表 Prog+2Prog+42、 条件转移指令(10条) 根据给定的条件进行检测,若条件满足则转移,否则继续往下执行。转移范围在当前指令的下一条指令为起始地址的128127之间.1、累加器判零指令(2条)JZ rel ;若A=0,则PCPC+2+rel 转移 .否则,PCPC+2,不转移.往下顺序执行.JNZ rel ;若A 0,则PCPC+2+rel 转移 .否则,PCPC+2,不转移.往下顺序执行.2、 判Cy转移指令JC rel ; 若Cy=1,则PCPC+

34、2+rel,转移.否则PCPC+2 不转移,继续往下执行.JNC rel ; 若Cy = 0, 则PCPC+2+rel,转移。否则PCPC+2 不转移,继续往下执行.3、比较转移指令CJNE A , direct , rel ; 若A (direct),则PCPC+3+rel,转移;否则, PCPC +3,不转移. CJNE A , #data , rel;若A data,则PCPC+3+rel,转移;否则, PC PC +3,不转移.CJNE Ri , #data , rel;若(Ri) data,则PC PC+3+rel,转移;否则, PCPC +3,不转移.CJNE Rn , #data

35、 , rel;若Rn data,则PCPC+3+rel,转移;否则, PCPC +3,不转移.4.计数循环指令(循环转移指令2条)DJNZ Rn , rel;若Rn-1 0,则PC PC+2+rel,转移;否则,PCPC+2,不转移.DJNZ direct , rel ;若(direct)-1 0,则PC PC+3+rel,转移;否则,PC PC+3,不转移.二、调用子程序及返回指令1. 调用子程序指令1)、长调用:LCALL addr16 ;(1) 、保护断点:PCPC+3, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2) . 产生目的地址( 转移 ) :PCad

36、dr16SPSP+1SPPC70SP+1SPPC1582)、绝对调用:ACALL addr11 ;(1).保护断点:PC PC+2, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2). 产生目的地址( 转移 ) :PC addr112 . 返回指令RET ; PC158 (SP) ;PC70 (SP )(2)、中断子程序返回指令(1)、子程序调用返回指令RETI ; PC158 (SP) ;PC70(SP )SPSP-1SPPC70SP-1SPPC158注意:RET指令用于子程序返回;RETI指令用于中断服务程序返回;两者都有恢复断点的功能 .但RETI指令还有清内部

37、优先级状态触发器的功能,所以两者不能互换使用!三、空操作指令 NOP ;PC PC+1;这是一条单字节,单机器周期指令,执行时不作任何操作,只是耗用了一个机器周期。位操作对可位寻址空间的数据进行操作。为了便于记忆,在汇编语言编程时,位地址一般有以下四种表示方式:1、直接位地址表示方式;如:07H,1FH2、点操作符表示方式;如:20H.7,PSW.13、位名方式;如RS0,C,F04、用户使用伪指令定义方式; FLAG BIT P3.3位操作类指令(17条)一、位传送指令(2条)MOV C , bit ; C(bit)MOV bit , C ; bit C例如:已知片内RAM(20H)=8AH

38、=10001010B,P1口输出的数据为0110 0110B执行下列程序: MOV C , 07H MOV P1.7, C结果:CY=1,P1.7=1。P1口的其它位不发生变化。二、置位复位指令(4条)3)、位逻辑非指令 CPL C CPL bitCLR C ; C0; CLR bit;bit0三、位逻辑运算类指令(6条)1)、位逻辑与ANL C , bit ;C Cbit ANL C , /bit ;C C bit2)、位逻辑或 ORL C , bit ;C Cbit ORL C , /bit ;C C bitSETB C ; C1 SETB bit ; bit1位指令应用举例:用位指令实现

39、组合逻辑电路的功能:1&UVWY算法:Y=(U V) & W 开始取U到CU与C或结果存CC与W的非与后存于C存结果到Y暂停U BIT 20H.0 ;定义符号地址V BIT 20H.1W BIT 20H.2Y BIT 20H.3MOV C , U ;C UORL C , V ;C U VANL C , /W ;C (U V) & W MOV Y , C ;C Y如图所示电路,设U、V、W分别放在20H.0,20H.1,20.2H单元。结果Y保存到20H.3单元.程序如下:JB bit, rel;若bit=1,则PCPC+3+rel;否则PCPC+3JNB bit, re

40、l;若bit=0,则PCPC+3+rel;否则PCPC+3JBC bit , rel;若bit=1,则 bit0, PCPC+3+rel;否则PCPC+3该类指令常用于测试端口的某一位端线的状态. SETB P1.7 JB P1.7 , NEXT MOV P1 ,#0FFH MOV A , P1 NEXT:MOV P2 , 30H四、位条件转移指令1.状态位判转类指令2 2. 判Cy转移指令JC rel ; 若Cy=1,则PCPC+2+rel,转移.否则PCPC+2 不转移,继续往下执行.JNC rel ; 若Cy=0, 则PCPC+2+rel,转移.否则PCPC+2 不转移,继续往下执行.小

41、结:(1):不同的存储空间寻址方式不同,适用的指令不同,要注意区别。(2):指令是程序设计的基础,按功能分类记忆每条指令的功能、操作的对象和结果以及对标志位的影响,要求熟记。汇编语言程序设计基础一、程序设计语言的分类:机器语言,汇编语言,高级语言1、机器语言:表现形式上是二进制代码,用一串二进制代码来表示一条指令,因此机器能直接识别并执行.缺点是不便于记忆和交流,容易出错.2、汇编语言:是机器指令系统的符号表示.不能直接执行必须转换成目标代码(汇编). 汇编效率高、能直接对硬件资源进行操作。汇编语言源程序汇编程序目标代码3、高级语言:类似人类自然语言或数学语言,编程效率高,便于交流,但编译效率

42、低.二、 汇编语言的组成汇编语言语言的程序含有两种语句:指令性语句,指示性语句。1、指令性语句:每条指令都产生相应机器语言的目标代码,程序的功能靠指令性语句去完成.2、指示性语句:为汇编程序提供汇编过程的控制信息(汇编控制指令或伪指令)三、 伪指令格式:ORG 16位地址功能:规定该伪指令后的源程序经汇编后的目标程序在程序存贮器空间的起始地址.1、ORG(origin汇编起始地址):例如: ORG 2000H START:MOV A , R12、END(汇编结束伪指令)格式: END | END 标号通知汇编程序不再继续往下汇编。如果源程序是一子程序则END后不加标号,若是主程序所加标号应为主

43、程序的首地址,否则汇编后的目标程序从0000H单元开始存放。3、EQU(equate等值)格式: 标识符号 EQU 数或汇编符号把数或汇编符号赋给标识符,只能赋值一次。例如 : LOOP EQU 10H LP EQU R2MOV R2,#LOOPMOV LP,#10H4、DB(Define Byte定义字节)格式: 标号: DB 项或项表把项或项表中的字节数据依次存入到标号开始的存贮单元。5、DW(Define Word字定义)格式: 标号: DW 项或项表把项或项表中的字数据依次存入到了标号开始的存贮单元.按高低原则存贮.例如:WORD: DW 1234H,5678H12H34H56H78H

44、WORDWORD+1WORD+2WORD+3WORD+4 ORG 1000H CON :DB 50H SEG: DB 30H,06H,5B例如:TAB:DB 12, “a”,“abcvy”SEGSEG+1SEG+250HCON30H06H5BH6、DS(Define Store预留存贮单元)格式 : 标号:DS 数字从标号开始按数字的值保留相应数量的存贮单元.例如: 指令 SPACE: DS 0AH预留10个存贮单元,下条指令从SPACE+10开始存放.7、BIT(位地址符号指令)格式: 标识符 BIT 位地址功能:将位地址赋给标识符.例如: A1 BIT P1.0 A2 BIT P1.1四、

45、 汇编语言程序设计 . 分析问题,明确任务; .确定解决问题的算法; .根据算法,分配资源,画出程序流程图; .根据流程图,编写源程序; .对源程序汇编、调试;.全盘符号化,既增强了程序的可读性,又便于修改;.程序结构模块化.每个模块一个入口一个出口;.在模块中慎用无条件转移指令;.循环程序体内要尽可能优化;.各模块使用各自的工作寄存器,注意相互之间的切换;.模块间的参数传递仅可能用累加器完成;.在中断服务程序中做好现场的保护,做到进栈的数据愈少愈好,尽量避免堆栈溢出;1.方法(步骤):2.好的程序设计风格:五、几种基本程序设计举例1、顺序程序例1:将一个字节的压缩BCD码转换成ASCII码,

46、存入RAM的两个单元。解:算法:ASCII码=BCD码+30H资源按排:设BCD码数据存在片内RAM的30H单元。转换的结果高位BCD码存入到了31H单元,低位存入32H单元。开始取BCD码转换个位存结果取BCD码转换十位存结果暂停 MOV A ,30H SWAP A ANL A , #0FH ADD A, #30H MOV 31H , A SJMP $ END例1:将一个字节的压缩BCD码转换成ASCII码,存入RAM的两个单元.解: ORG 0000h MOV A , 30H ANL A , #0FH ADD A , #30H MOV 32H , A例2:编程将外部数据存储器000EH和0

47、0FH单元的内容相交换。分析:外部数据存储器操作数只能用MOVX指令访问且只能与A之间传送,因此必须用一个中间环节作暂存,设用20H。用R0、R1指示两个单元的低8位地址,高8位地下由P2指示。程序如下:MOV 20H , AORG 0000HMOV P2 , #0MOV R0 , #0EHMOV R1 , #0FHMOVX A ,R0ENDMOVX A,R1XCH A, 20HMOVX R1,AMOV A, 20HMOVX R0,ASJMP $例3:将内部数据存储器的(31H)(30H) 中的16位数求其补码后放回原单元。分析: 先判断数的正、负,因为正数的补码=原码,而负数的补码=反码 +

48、 1,因此,算法是低位取反加1,高位取反后再加低位的进位Cy,由于INC 指令不影响Cy标志,低位加1不能用INC指令。编程如下:2、分支程序设计ORG 0000HMOV A , 31HJB ACC.7 ,CPLLSJMP EOFCPLL:MOV A , 30HCPL A ADD A , #1MOV 30H ,AMOV A , 31HXRL A , #7FHADDC A, #0MOV 31H ,AEOF :SJMP EOFEND例4:设变量以补码形式存放在片内RAMR 30H单元,函数Y和X有如下关系: X X0Y= 20H X=0 X+5 X0?(30H)+05(30H)结束YNYNORG

49、0000HMOV A , 30HJZ NEXT ;判断是否为零ANL A , #80H ;判断符号位JZ EOFMOV A , #05 ;X0,完成X+5ADD A, 30HMOV 30H , ASJMP EOFNEXT: MOV 30H ,#20HEOF: SJMP EOFEND多分支散转程序有一类分支程序根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这类程序通常用JMP A+DPTR间接指令实现转移。有如下两种设计方法: 例5:根据R3的内容转向对应的程序,设R3的内容为0n,处理程序的入口符号地址分别为PR0、PR1PRn(n128)。 分析:将PR0PRn的地

50、址列在表格中,每一项占两个单元 ,PRn在表格中的偏移量分别为2n ,因此将R3乘2即得PRn在一表格中的偏移地址 ,从偏移地址2n 和 2n+1 两个单元分别取PRn的高8位地址和低 8 位地址送DPTR寄存器 ,用JMP A+DPTR指令(先清A为零) PRn的入口执行。用转移地址表实现转移; 用转移指令表实现转移; TAB:DW PR0,PR1,PR2,PRnORG 0000HMOV DPTR ,#TABMOV A , R3ADD A , R3MOV B , AMOVC A , A+DPTRXCH B, AINC AMOVC A, A+DPTRMOV DPL , AMOV DPH ,BC

51、LR AJMP A +DPTRPR0: LJMP EOFPR1: LJMP EOFPRn:EOF:SJMP $END例6:根据R3的内容转向对应的程序设R3的内容为0n,处理程序的入口符号地址分别为PR0、PR1PRn(n(R1)?内循环结束?交换标志为1?结束源程序如下:NOMIN: DJNZ R2, LP1 JB F0, LP2 EOF: SJMP EOF END SETB F0NEXT : INC R0 INC R1 ORG 0000H MOV B , #09HLP2: MOV R2,B DEC B CLR F0 MOV R0 , #30H MOV R1 , #31HLP1: MOV A

52、 , R0 CLR C SUBB A ,R1 JC NEXTMOV A,R0 XCH A ,R1XCH A ,R05、 子程序设计、什么是子程序:功能独立的程序段。、怎么写一个子程序:子程序的基本结构。子程序名:保护现场 子程序体 . . . 恢复现场 RETLCALL ARETRETLCALL B、子程序的嵌套调用与返回保护现场恢复现场保护现场恢复现场传递参数传递参数例:设计一个延时10ms的子程序,已知单片机的晶振频率为6MHz。分析:延时时间与两个因素有关,一个是晶振频率,一个是循环次数。由于晶振频率为6MHz,一个机器周期是2s,用单循环实现 1ms的延时,外循环10次即可达到10ms

53、的延时。内循环如何1ms的延时呢?程序中先用MT代替,再根据程序执行的时间计算(机器周期从附录指令表中查到)。DL: MOV R2 ,#0AH;外循环10次DL2: MOV R3 ,#MTDL1: NOP NOP DJNZ R3,DL1 DJNZ R2,DL2 RET机器周期数1111222内循环MT次外内循环DL1到 指令DJNZ R3,DL1的计算: (1+1+2)2 s MT=1000 s MT=125=7DH将7DH代入上面的MT,计算总的延时时间为: (1+2+(1+(1+1+2) 125+2) 10) 2 s =10066 s =10.066msP1.0P1.1 P1.2 P1.3

54、 P1.4 P1.55VK1K2K3K4K5K6一)、独立式键盘1、独立式键盘接口电路键盘与单片机的接口程序设计2、在系统仅有很少的功能键时,使用独立键盘。3、键盘的抖动与去抖动t1t2软件去抖动与硬件去抖动:4、软件设计 顺序查询端口相应的引脚,分析击键的键号,采取相应的操作。使用JB或JNB指令实现查询。sR0R0+5VQ开始P1.0=1?P1.0=1?0号键处理P1.1=1?延时P1.2=1?2号键处理P1.3=1?P1.3=1?延时延时1号键处理延时3号键处理P1.1=1?P1.2=1?NNNNNNNN程序如下: JB P1.0 ,NX1 LCALL DELAY JB P1.0 , N

55、X1 LCALL KEY0NX1:JB P1.1 , NX2 LCALL DELAY JB P1.1 , NX2 LCALL KEY1 NX2:JB P1.2 , NX3 LCALL DELAY JB P1.2 , NX3 LCALL KEY2NX3:JB P1.3 , NX4 LCALL DELAY JB P1.3 , NX4 LCALL KEY3NX4:JB P1.4 , NX5 LCALL DELAY JB P1.4 , NX5 LCALL KEY4NX5:JB P1.5 , NX6 LCALL DELAY JB P1.5 , NX6 LCALL KEY5NX6:JB P1.6 , NX

56、7 LCALL DELAY JB P1.6 , NX7 LCALL KEY6NX7: .二 )、矩阵键盘1、矩阵键盘的工作原理 0 1 2 3 4 5 6 7 8 9 A B C D E FP1.0P1.1P1.2P1.3P1.7P1.6P1.5P1.41)、击键检查2)、延时去抖动3)、键识别:键盘扫描 键号=行首号+列号 0 1 2 3 4 5 6 7 8 9 A B C D E FP1.0P1.1P1.2P1.3P1.7P1.6P1.5P1.44)、一次闭合一次处理键释放后读取键值程序框图:开始延时有击键?有击键?键分析取键值键释放?延时无击键返回返回键值结束NNNYYY;键盘处理子程序

57、: BUFF EQU 7FH ORG 0030HKEY:LCALL CHKEY JZ REOF LCALL DELAY LCALL CHKEY JZ REOF LCALL VAKEYLP0: LCALL DELAY LCALL CHKEY JNZ LP0 SJMP EOF REOF: MOV BUFF,#0FFHEOF: RET击键检查子程序:CHKEY:MOV P1,#0FH ;初始化P1口低4位为输入口 ;高4位送0000B MOV A , P1 ;取击键信息到累加器A ORL A , #0F0H CPL A RET延时子程序:DELAY:MOV R7 , #0AHDL0: MOV R6

58、, #0FAHDL1: NOP NOP DJNZ R6 , DL1 DJNZ R7 , DL0 RET 键分析子程序:开始清行、列寄存器送扫描码P1.0=0?行首号+列号码 A返回行首号为4P1.1=0?行首号为8P1.2=0?行首号为12P1.3=0?P1.7=0?A 0FFH列号+1扫描字左移初始化扫描字NNNNN键盘分析子程序:VAKEY:MOV R2, #OEFH CLR A MOV R3 , A;清行计数器 MOV R4 , A;清列计数器LOOP: MOV P1 , R2 JB P1.0 , NEX1TAL: MOV A , R3 ADD A , R4 MOV BUFF,ARTN:

59、 RETNEX1: JB P1.1 ,NEX2 MOV R3 ,#04H SJMP TALNEX2: JB P1.2 , NEX3 MOV R3 , #08H SJMP TAL NEX3:JB P1.3 , NXE4 MOV R3 ,#0CH SJMP TALNXE4:JB P1.7 , NEX5 MOV A ,#0FFH SJMP RTNNEX5:MOV A , R2 RL A ORL A , #0FH MOV R2 , A INC R4 SJMP LOOP显示器接口电路程序设计应用系统中的两类信息:状态信息、数据信息。状态信息一般用单一的发光二极管指示。数据显示可以用LED(七段数码显示器

60、),或LCD(液晶显示器)1、LED状态指示选用LED指示器件时,一般要根据规程的要求用不同颜色的LED指示不同的状态。常用指示电路8051P1.0P1.1P1.2P1.78*R8051P1.0P1.1P1.2P1.78*R+5V当状态显示较多时,可以使用简单I/O口扩展的方法。如下图:8051P0DCPEQ0Q7DCPEQ0Q7DCPEQ0Q7G2AG1G2BABCP2.7P2.0P2.1P2.2Y0Y1Y2Y7WR64位状态显示驱动74LS37774LS138+VCC+5V在串行通信一讲,介绍了用单片机串口扩展并行I/O口驱动状态指示灯(请同学们复习)。2、数据的显示(1)、LED显示器的结构abcdefg图1

温馨提示

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

评论

0/150

提交评论