1 / 138

第 3 章

第 3 章. 单片机指令系统. 本章主要内容. 汇编语言的语句格式. 80C51 的寻址方式. 常用指令使用方法. +5V. P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7. 80C51. 项目引入:彩灯控制器. 2 、项目电路. 1 、项目内容. 将 8 只发光二极管分别接到单片机 P1 口的 8 只引脚上, 实现 8 只 LED 依次闪烁,间隔时间为 50ms , 并一直循环下去。. 点亮第 1 只 LED. 延时 50ms. 依次点亮下一只 LED. 判断 8 只 LED 是否点亮完毕?. +5V.

mikaia
Download Presentation

第 3 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 3 章 单片机指令系统 本章主要内容 汇编语言的语句格式 80C51的寻址方式 常用指令使用方法

  2. +5V P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51 项目引入:彩灯控制器 2、项目电路 1、项目内容 将8只发光二极管分别接到单片机P1口的8只引脚上,实现8只LED依次闪烁,间隔时间为50ms,并一直循环下去。

  3. 点亮第1只LED 延时50ms 依次点亮下一只LED 判断8只LED 是否点亮完毕? +5V 3、设计程序流程图 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 程序开始 N Y 80C51

  4. 点亮第1只LED 延时50ms 依次点亮下一只LED N Y 4、程序设计 ORG 0030H MOV P1,#0FEH YY: 程序开始 MOV R0,#08H MOV A,P1 QQ: ACALL DELAY RL A MOV P1,A DJNZ R0,QQ AJMP YY 判断8只LED 是否点亮完毕? DELAY:MOV R7,#200 DEL1: MOV R6,#123 NOP DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET END

  5. 5、完整电路

  6. 80C51指令类别 80C51单片机具有111条指令,可分为: ① 数据传送类指令 ;如MOV A,#08H ② 算术运算类指令 ;如ADD A,#08H ③ 逻辑运算类指令 ;如ANL A,#08H ④循环类指令 ;如RL A ⑤ 控制转移类指令 ;如AJMP START ⑥位操作类指令 ;如SETB P1.0

  7. 一、 指令格式及常用符号 ▼计算机能直接识别和执行的指令是二进制编码指令, 称为机器指令 ▼采用有一定含义的符号(助记符)来表示机器指令, 称为符号指令 ▼对于8051单片机及其兼容型单片机,目前有四种 语言支持:汇编语言、BASIC语言、PL/M语言 和C语言

  8. 汇编语言与C语言特点 ▼汇编语言有执行效率高、速度快、与硬件结合紧密等 特点。尤其在进行I/O端口管理时,使用汇编语言有快 捷、直观的优点。但是使用汇编语言相对于使用高级 语言编程难度要大一些,且程序可读性低、开放性差, 从系统开发时间来看,效率不是很高。

  9. 汇编语言与C语言特点 ▼C语言是一种编译型程序设计语言,它兼顾了多种高 级语言的特点,并具备汇编语言的功能。具有较高的 可移植性,提供了种类丰富的运算符据类型,极大地 方便了程序设计,同时,它有功能丰富的库函数,运 算速度快、编译效率高,且可以直接实现对系统硬件 的控制,它是一种结构化程序设计语言,在软件开发 中可以采用模块化程序设计方法。

  10. +5V ORG 0030H MOV P1,#0FEH YY: P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 MOV R0,#08H MOV A,P1 汇 编 程 序 QQ: ACALL DELAY RL A MOV P1,A DJNZ R0,QQ AJMP YY DELAY:MOV R7,#200 DEL1: MOV R6,#123 NOP DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET 80C51 END

  11. +5V P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 #include <AT89X51.H> C语言程序 void delay (void) /*延时子程序 */ { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }   /*主程序在下一页*/ 80C51

  12. /*续上页,以下为主程序*/ void main(void) { while(1) { temp=0xfe; P1=temp; delay(); for(i=1;i<8;i++) { a=temp<<i; // 左移 b=temp>>(8-i); P1=a|b; delay(); } } } C语言程序

  13. 1、 汇编语言的语句格式 指令格式: [ ]内容可有可无 [标号] 操作助记符 [操作数或操作数地址] [注释] START: ANL A,#40H ;功能是将立即数“40H”同累加器 ;A中的数进行“与”操作,结果送回累加器。 ▼START 为指令的标号; ▼ANL为“与”操作的助记符; ▼立即数“40H”为源操作数; ▼累加器A为目的操作数。

  14. 汇编语言的语句格式说明 ①标号由1~8个ASCII字符组成,第一个字符必须是 字母,标号后边必须跟冒号。 ②不能使用该汇编语言已定义了的符号作为标号, 如指令助记符、寄存器符号名称等。 ③十六进制数以字母A~F开头时应在其前面加上数字“0”。

  15. 7 0 操作码 7 7 7 0 0 0 7 7 0 0 操作码 操作码 数据或寻址方式 数据或寻址方式 数据或寻址方式 2、 机器指令的编码格式 指令按字节的长度可分为: INC A MOV A,R0 单字节指令: 双字节指令: MOV A,#50H 三字节指令: MOV 20H,#50H;三字节指令

  16. 机器指令的编码 单字节指令 如:INC A ;编码为:0000 0100B; 如:MOV A,R0 ;编码为:1110 1000B,高5位为操作码,低3位为放操作数的寄存器编码 双字节指令 如:MOV A,#50H;编码为0111 0100B,0101 0000B 三字节指令 如:MOV 20H,#50H;编码为 ;0111 0101B,0010 0000B,0101 0000B。

  17. 二、 80C51的寻址方式 80C51的寻址方式有七种。 ①寄存器寻址 ②直接寻址 什么是寻址方式? ③寄存器间接寻址 ▼寻址方式即寻找地址的方式; ④立即寻址 ▼寻找操作数或指令的地址的方式; ⑤变址寻址 ▼寻址方式均指源操作数的寻址方式 ⑥相对寻址 ⑦位寻址

  18. ①寄存器寻址 源操作数放在寄存器中, 指令中直接给出寄存器的名称。 MOV A,R0 累加器A中 寄存器R0的内容 寄存器可以是: MOV 30H,A R0~R7 A B MOV A,B MOV A,DPH DPTR

  19. ②直接寻址 指令操作码之后的字节存放的是操作数的地址, 操作数本身存放在该地址指示的存储单元中。 MOV A,50H 50H单元的内容 累加器A中 若(50H)=3CH,指令MOV A,50H执行后, 则 (A)=3CH

  20. 片内RAM 50H SFR MOV A,50H执行示意图 已知(50H)=3CH 采用直接寻址的存储空间为: ▼片内RAM低128字节 (以地址形式表示) 3CH ▼SFR(以地址形式或SFR的 符号形式表示均可) 如 MOV A,P1 MOV A,90H 功能一样 常用 3CH A 不常用

  21. ③寄存器间接寻址 寄存器中的内容为地址,从该地址去取操作数。 MOV A ,@R0 以R0的内容为地址, 该地址单元的内容 R0的内容 累加器A中 所以称为寄存器间接寻址 若(R0)=30H,(30H)=5AH 指令MOV A,@R0执行后,则(A)=5AH

  22. 片内RAM 30H SFR 已知(R0)=30H, (30H)=5AH MOV A, ,@R0执行示意图 寄存器间接寻址对应的空间为: R0 30H ▼片内RAM MOV A,@R0 MOV A,@R1 5AH ▼片外RAM 5AH MOVX A,@R0 MOVX A,@DPTR A

  23. ④立即寻址 指令编码中直接给出操作数的寻址方式 MOV A,#50H 数据50H 累加器A中 立即数可以为一个字节,也可以是两个字节, 并要用符号“#”来标识。 如 MOV DPTR,#13F9H 立即寻址所对应的寻址空间为:ROM

  24. 课堂练习 若(A)=C6H,(R0)=30H,(30H)=2AH,(50H)=0FH, 试写出下列各指令独立执行后有关寄存器和 存储单元的内容, 1、MOV A,#50H 答案1、(A)=50H 2、MOV A, 50H 答案2、(A)=0FH 3、MOV A,R0 答案3、(A)=30H 4、MOV A,@R0 答案4 、(A)=2AH

  25. ⑤变址寻址 以一个基地址(数据指针DPTR或程序计数器PC)加上一个偏移量地址(累加器A)形成操作数地址的寻址方式。 MOVC A,@A+ DPTR 以和为地址单元,该地址单元的内容 累加器A中的内容与数据指针DPTR求和 累加器A中 若(A)=0FH,(DPH)=24H,(DPL)=00H,即 (DPTR)=2400H,(240FH)=88H。 执行指令 “MOVC A,@A+DPTR”,则(A)=88H

  26. 片内RAM ROM SFR 00H DPL 24H DPH 已知(A)=0FH, (DPH)=24H, (DPL)=00H MOVC A,@A+DPTR执行示意图 ▼变址寻址所对应的寻址空间为: ROM 93H 2400H ▼另外两条寻址指令为: MOVC A,@A+PC JMP @A+DPTR 88H 2400H 88H 0FH A

  27. 项目:求平方值 项目内容:有一个数在R0中,要求用查表的方法确定 它的平方值(此数的取值范围是0-5) MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR . . . TABLE: DB 0,1,4,9,16,25

  28. ⑥相对寻址 相对寻址是以程序计数器PC的当前值(指读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址)为基准,加上指令中给出的相对偏移量 rel (rel的真值)形成目标地址的寻址方式 。 JZ rel JNZ rel

  29. 相对寻址实例 ORG 0030H CLR A JNZ L1;若A的内容不为零,则跳转到L1 INC A JNZ L2 L1: MOV A,#09H L2: MOV A,#0AH END

  30. ⑦位寻址 对位地址中的内容进行操作的寻址方式 SETB P1.2 CLR P3.0 习惯上,特殊功能寄存器的寻址位常用符号位地址表示。 如: CLR ACC.0 MOV 30H,C 寻址空间为:片内RAM的20H~2FH单元中的128可寻址位; SFR的可寻址位。

  31. 闪烁灯 VCC VCC R2=4.7K 单片机 P1.0 220Ω P3.0/RXD ORG 0030H START: JNB P3.0,LIG GND SETB P1.0 SJMP START LIG: CLR P1.0 SJMP START END

  32. 符号 含义 三、常用指令使用方法 1、符号指令及其注释中常用的符号 Rn (n=0~7) 当前选中的工作寄存器组中的寄存器 R0~R7之一 Ri (i=0,1) 当前选中的工作寄存器组中的寄存器 R0或R1 @ 间址寄存器前缀 #data 8位立即数

  33. 符号 含义 1、符号指令及其注释中常用的符号 #data16 16位立即数 direct 内部128个RAM单元地址及 SFR地址号名称表示) addr11 11位目的地址 addr16 16位目的地址 rel 补码形式表示的8位地址偏移量, 值在 -128~+127范围内

  34. 符号 含义 1、符号指令及其注释中常用的符号 将箭头右边的内容送入箭头左边的单元中 / 位操作数的取反操作前缀 (×) 表示×地址单元或寄存器中的内容 ((×)) 表示以×单元或寄存器内容为地址间接 寻址单元的内容 bit 片内RAM位地址、SFR的位地址 (可用符号名称表示)

  35. 2、数据传送类指令(29条) ▼一是采用MOV操作符,称为一般传送指令; 8位传送:MOV A,#40H 16位传送:MOV DPTR,#1234H ▼二是采用非MOV操作符,称为特殊传送指令, 如MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP

  36. (1) 一般传送指令 ▼ 16位传送:MOV DPTR,#1234H 仅此一条16位传送指令,上面指令执行后 (DPH)=12H,(DPL)=34H。 ▼ 8位传送:属于字节传送,完成的任务是将源字节内容拷贝到目的字节,而源字节的内容不变。 MOV A,R0 ;将寄存器R0的内容传送到累加器A,但R0的内容不变

  37. 8位传送 通用的格式为: MOV <目的字节>,<源字节> 源字节可以为: 目的字节可以为: A A Rn Rn direct direct @Ri @Ri #data #data ▼在5种源字节中,只有#data不能用作目的字节。

  38. ① 以A为目的 ▼源字节与目的字节不相同(除direct外) Rn direct MOV A, @Ri #data 若(R1)=20H,(20H)=55H,执行指令 ”MOV A,@R1”后,(A)=55H

  39. ②以Rn为目的 ▼源字节不能是工作寄存器及其间址方式寻址。 A direct MOV Rn, #data 若(50H)=40H,执行指令 ”MOV R6,50H”后, (R6)=40H

  40. ③以direct为目的 A Rn MOV direct, direct @Ri #data × MOV 40H,40H direct地址单元的内容可以送到另一个direct地址单元,但不能送给同一个direct地址单元。 MOV 40H,3FH √

  41. ④以@Ri为目的 ▼源字节不能是工作寄存器及其间址方式寻址。 A MOV @Ri, direct #data 若(R1)=30H,(A)=20H 执行指令 ”MOV @R1, A”后 (30H)=20H

  42. (2)特殊传送指令 特殊传送指令为: ① ROM查表:MOVC A,@A+DPTR ;MOVCA,@A+PC ②读写片外RAM:MOVX A,@DPTR ;MOV A,@Ri MOVX @DPTR,A; MOVX @Ri,A ③堆栈操作:PUSH direct ;POP direct ④数据交换:SWAP A;XCH A,Rn等

  43. ① ROM查表(2条) ▼ DPTR内容为基址 MOVC A,@A+DPTR ;A ←((A)+(DPTR)) ▼ PC内容为基址 MOVC A,@A+PC ;A ←((A)+(PC)) ;PC先增1,以增1后的当前值去执行16位无 ;符号加法,指令执行后PC内容不变。

  44. ROM查表项目:求平方 项目内容: 有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5) ORG 0030H MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR . . . TABLE: DB 0,1,4,9,16,25 END 程序设计:

  45. ② 读写片外RAM(4条) ▼读片外RAM MOVX A,@DPTR ;在DPH中的高8位地址由P2 ;接口输出,在DPL中的低8位地址由P0接口分时输出。 MOVX A,@Ri ;低8位地址在R0或R1中,由P0接口 ;分时输出。 ▼写片外RAM MOVX @DPTR , A MOVX @Ri , A 读写外部RAM的数据必需要通过累加器A

  46. +5V 74LS373 6264 80C31 OE OE WE RD WR CE EA RAM 扩展 8KB RAM P2.7 P2.0~P2.4 A8~A12 ALE G A7 … A0 D7 … D0 Q7 … Q0 CS P0 D0~D7

  47. D 触发器 D0 三态门 地址锁存器 D G Q0 G Q G Q 74LS373 D7 … D0 Q7 … Q0 . . . . . . D7 D Q7 OE OE G 地址锁存器的结构 地址锁存器一般选用带三态缓冲输出的8D锁存器74LS373。

  48. 8D 锁存器 三态门 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 D0 D1 D2 D3 D4 D5 D6 D7 OUT IN G OE 地址锁存器的工作原理 G高电平Q=D D锁存在Q中 G低电平,D变化时Q不再随之变化

  49. 8KB RAM SFR A 6264 读写片外RAM项目 试将片外RAM 0000H单元内容传送到片外RAM 0002H单元。 55H 0000H 55H 0001H 55H 0002H MOV DPTR,#0000H MOVX A,@DPTR MOV DPTR,#0002H 01FFH MOVX @DPTR,A

More Related