资源描述
1,单片机系统设计技术,主讲教师:栗 华 ,山东大学信息科学与工程学院,大学生电子设计竞赛培训,2,单片机系统设计的重要性:,在工业测、控领域中,单片机作为智能测控系统的“大脑”,占据了核心位置的地位。在电子设计竞赛中,往往设计的对象也都是智能测控系统,自然,单片机系统的设计也就具有成了系统设计中一个至关重要的组成部分。,3,在前期单片机原理与应用课程的基础上,扩展介绍利用单片机这一智能单元来设计一个智能电子系统时所需要的各种接口知识、单元知识、和系统实现时所需要的各种系统知识 ,使大家不仅学习并理解单片机,更要学会如何使用单片机来构建我们自己的应用系统,让单片机按照我们的意图来为我们服务。从而,为大家参加电子设计大赛,在规定的时间内完成智能电子系统的设计与实现储备足够的经验知识和应用技能 ,最终能够在电子设计大赛中取得良好的成绩,为以后的职业生涯也能够奠定良好的基础。,培训目的:,4,(1 )单片机基本知识的回顾,重点是回顾单片机的内部组成结构、特点以及在应用单片机的这些内部构件时应该注意的问题。 (2 )单片机有关接口设计方法及常用接口芯片介绍,从系统设计的角度出发,以功能实现为依据,分类介绍一些常用的接口设计方法。 (3 )单片机系统设计有关技术,从系统实现的角度,介绍系统设计时应该考虑的一些问题,为了使系统能够长期可靠地运行应该采取哪些技术。,培训的内容:,5,第一章 单片机应用系统设计基础,一、综述 1、单片机系统设计的内容 智能 应用系统的设计一般包括单片机系统设计、接口设计和多种类型的辅助电路(如:模拟信号调理电路、功率驱动电路、电源电路等)设计内容。而单片机系统设计往往是其中最主要、最复杂的设计部分。,6,2、单片机的定义与特点 单片机全称为单片微型计算机(Single Chip Microcomputer),又称微控制论器(Micro-Controller Unit)或嵌入式控制器(Embedded Controller)。它是将传统计算机的各种基本组成部件(如:CPU、ROM、RAM、并行I/O口、串行I/O口、定时计数器、中断控制、系统时钟和系统总线控制等)微型化并集成到一块芯片上的微型计算机。 单片机有体积小、集成度高、功能强、功耗低、性能价格比高、易于实现各种智能系统。,7,3、单片机的种类 按总线宽度分成4位单片机、8位单片机、16位单片机、32位单片机。 (1)4位单片机:主要用于各种小型智能电子设备如:计算器、遥控器、玩具控制、电子钟、简单游戏机、游戏杆等。目前主要集中在日本的一些厂家如:OKI的MSM64164C、MSM64481、NEC的75006x系列、EPSON的SMC62系列等。 (2)8位单片机:用于各种中等智能电子设备,产品种类最多、功能较强、性价比最高、应用最广泛。8位单片机分成两大类:一类是MCS-51系列及其兼容机,另一类是非MCS-51系列。,8,(a)MCS51系列单片机:特点是结构简单、内部资源比较丰富,易学易用、资料齐全、应用广泛,是一种传统的单片机。 有: Intel的8031、8051、8751,ATMEL的89C5x系列和89S5x等,WINBOND的W77E5x、W78E5x,PHILIPS的P87LPC7x、P89C5x、P87C5x,ST公司的uPSD系列等。 (b)非MCS51系列单片机:和MCS-51不兼容,有各自的特点,如: ATMEL公司的AVR单片机(常用的是:Atmega32、Atmega64、Atmega128等,特点是:芯片上拥有Flash存储器,一般不用外部扩展程序存储器. 片内有EEPROM也方便了数据的保存。采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力. 另外还有一些丰富的外部接口如A/D、PWM、SPI等)。,9, Motorola单片机: 从M6800开始,开发了广泛的品种,4位,8位,16位32位的单片机, 8位机M6805,M68HC05系列,8位增强型M68HC11,M68HC12 , 16位机M68HC16, 32位机M683XX. Motorola单片机的特点之一是在同样的速度下所用的时钟频率较Intel类单片机低得多,因而使得高频噪声低,抗干扰能力强,更适合于工控领域及恶劣的环境 . Motorola单片机在家电、汽车电子和通信产品领域应用较广。,10, MicroChip单片机: MicroChip单片机的主要产品是PIC 16C系列和17C系列8位单片机,CPU采用RISC结构,分别仅有33,35,58条指令,采用Harvard双总线结构,运行速度快,低工作电压,低功耗,较大的输入输出直接驱动能力,价格低,小体积. 适用于用量大,档次低,价格敏感的产品.在自动化设备,智能仪器仪表, 工业控制等领域,PIC系列单片机占据了主导地位. (3)16位单片机:总线宽度为16位,CPU执行速度和效率都比8位单片机都有很大提高。目前以Intel的MCS-96/196系列、TI公司的MSP430系列、Motorola公司的68HC11为主。主要用于工业控制、智能仪器仪表、便携式电子设备、智能IC卡读写系统等领域。,11,(4)32位单片机:32位单片机是单片机市场的发展趋势,其特点是资源和接口更丰富、内部采用RISC架构和哈佛总线结构,CPU处理速度和处理能力更强、支持基于操作系统的开发,因此能够实现更加复杂的处理任务、人机界面也更灵活。ATMEL、MOTOROLA、SAMSUNG、HITACH等厂家都有32位单片机产品,这些产品一般以ARM嵌入式处理器内核为基础(ARM公司自己并不生产嵌入式处理器,而是研究和发展嵌入式处理器的内核知识产权核,即IP核,然后将IP核的生产和使用许可协议卖给各IC生产厂家),所以32位单片机一般都是指ARM系统。,12,二、MCS-51单片机的内部资源,13,ATMEL 51单片机选型指南,14,1、程序存储器配置,三、单片机的存储器配置,(一)程序存储器,15,2、与程序存储器配置有关的伪指令:,伪指令:指的是汇编程序用的一些控制信息的指令,它们只能被汇编程序所识别,不是单片机的CPU可执行的指令。,伪指令主要用来指定程序位置,定义一个数据块,为中间运算结果保留一部分存储空间,或者定义一些变量的别名以及表示程序的结束等。,定位伪指令ORG 格式: 标号: ORG m m是一个16位二进制数,代表地址。 功能:它放在一段程序或数据块的前面,说明紧跟其后的程序段或数据块的起始地址就是指令中的16位地址。,16,例如: ORG 0000H AJMP MAIN ORG 0003H AJMP INT0_S ORG 000BH AJMP T0_S ORG 0013H AJMP INT1_S ORG 001BH AJMP T1_S ORG 0023H AJMP SI_S ORG 0100H ;Main program MAIN: MOV P1,#0FEH AJMP $ INT0_S: RETI,17,3、与常数表格定义有关的伪指令:,功能:在程序存储器从标号开始的连续单元开始定义一些字节数据单元,用来存放指令中指出的这些常数和字符。 例如: ORG 2000H TAB1: DB 30H , 8AH , 7FH , 73 DB 5 , A , BCD,30H,8AH,7FH,49H,35H,41H,42H,43H,44H,2000H,2001H,2002H,2003H,2004H,2005H,2006H,2007H,2008H,(1)定义字节伪指令DB(Define Byte) 格式:标号: DB X1,X2, ,Xn Xi:单字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。,18,(2)、定义字伪指令DW(Define Word) 格式:标号: DW Y1,Y2,Yn Yn:双字节二进制、十进制、十六进制数。 功能:同DB,不同的是为16位数据。执行汇编时,机器会自动按高8位先存入,低8位后存入的格式排列。,例如: ORG 1500H TAB2: DW 1234H , 80H,12H,34H,00H,80H,1500H,1501H,1502H,1503H,19,1、数据存储器配置,(二)数据存储器,20,2、内部存储器的分布,21,(1)工作寄存器区,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,R0,R2,R1,R3,R4,R5,R6,R7,07H,02H,01H,00H,06H,04H,05H,03H,08H,1FH,工作寄存器区3,工作寄存器区2,工作寄存器区1,工作寄存器区0,0FH,10H,17H,18H,22,片内RAM前32个单元(00H1FH)是工作寄存器区 (由PSW中的RS1,RS0决定),CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,PSW.4 PSW.3,例如: SETB PSW.3 ; (PSW.3) 1 CLR PSW.4 ; (PSW.4) 0 其功能是将PSW中的RS0置为1, RS1清0,选择当前工作寄存器区为1区 。,23,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,27H,22H,21H,20H,26H,24H,25H,23H,28H,2FH,单元地址,07 06 05 04 03 02 01 00,0F 0E 0D 0C 0B 0A 09 08,17 16 15 14 13 12 11 10,1F 1E 1D 1C 1B 1A 19 18,27 26 25 24 23 22 21 20,2F 2E 2D 2C 2B 2A 29 28,37 36 35 34 33 32 31 30,3F 3E 3D 3C 3B 3A 39 38,47 46 45 44 43 42 41 40,7F 7E 7D 7C 7B 7A 79 78,位地址,总共128个可按位寻址的位,片内RAM中有128个可按位寻址的位。 位地址:00H7FH 分布在:20H2FH单元,(2)位寻址区,24,位操作又称布尔操作,它是以位为单位进行的各种操作。 MCS-51单片机内部设置了一个位处理器(布尔处理机),它有自己的累加器C(PSW中的进位标志位CY),自己的存储器(即:内部RAM中的20H2FH共128个位,以及特殊功能寄存器中的可以进行位寻址的各个位),同样,也有相应的位操作指令集,共17条,用来完成位传送,位运算和基于位的转移。 位操作指令中的位地址有4 种表示形式,以下表示的都是PSW中的位5 :,直接地址方式(如,0D5H);,点操作符方式(如,0D0H.5、PSW.5等);,位名称方式(如,F0,RS0,RS1);,伪指令定义方式。,25,格式: 位地址别名 BIT 位地址 功能:使程序中的所出现的位地址别名均表示BIT后面的位地址。一般放置在程序开始的位置。,例如: LEFT BIT P1.0 RIGHT BIT P1.1 ORG 0100H SETB LEFT ;左转 LCALL WAIT30S ;等待30秒 CLR LEFT SETB RIGHT;右转,位地址赋值伪指令BIT,26,(3)普通RAM区,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,27,堆栈: 在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。,功用: 1)子程序调用和中断服务时CPU自动将当前PC 值压栈保存,返回时自动将PC值弹栈。 2)保护现场/恢复现场 3)数据传输,28,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SP栈顶,下一个进栈的数据将存在此,数据进栈,已经进栈的数据存放在此,初始 SP,复位后 SP=07H,数据进栈时:首先SP自动增 1 ,放进数据, SP仍指着栈顶,堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,通常放在RAM区的靠后的位置。 89C51的堆栈一般设在30H7FH的范围内。,入栈,29,从堆栈取出数据时:取出的数据是最近放进去的一个数据,也就是当前栈顶的数据。然后SP再自动减1,仍指着栈顶,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SP栈顶,当前要出栈的数据,数据出栈,SP-1指向下一个将要出栈的数据,初始 SP,出栈,30,特殊功能寄存器(SFR) ,又称专用寄存器。它专用于控制、管理单片机内部算术逻辑部件、并行I/O口锁存器、串行口数据缓冲器、定时器/计数器、中断系统等功能模块的工作,SFR的地址空间为80HFFH。 MCS-51有18个专用寄存器,其中3个为双字节寄存器,共占21个字节。MCS-52有21个专用寄存器,其中5个为双字节寄存器,共占26个字节。SFR中共有12个专用寄存器可以位寻址,他们的字节地址可以被8整除,共有93个可寻址位。,(4)特殊功能寄存器区,31,注意: 除A、B,DPTR 外,其他SFR只能采用直接寻址方式。如:MOV A,P0。对于内部RAM具有高128字节即:80HFFH的MCS-52单片机而言,这些RAM与SFR地址重迭,只能用寄存器间接寻址访问,而不能用直接寻址方式访问。,32,33,四、CPU时序及有关概念,一条指令可以分解为若干基本的微操作,而这些微操作所对应的脉冲信号,在时间上有严格的先后次序,这些次序就是计算机的时序。时序是非常重要的概念,它指明单片机内部以及内部与外部互相联系所遵循的规律。 震荡周期: 指为单片机提供定时信号的振荡源的周期。 时钟周期: 又称状态周期或S周期,因为时钟发生器就是上述的2分频触发器,所以它是振荡周期的两倍,,34, 机器周期:一个机器周期由6个状态(12个振荡脉冲)组成,即6个时钟贮存器期,12个振荡周期。 指令周期: 指执行一条指令所占用的全部时间,一个指令周期通常含有14个机器周期。,35,单片机各种周期的相互关系,若外接晶振为12MHZ,MCS-51单片机的四个周期的具体值为: 振荡周期=1/12s; 时钟周期=1/6s; 机器周期=1s; 指令周期=14s;,36,五、单片机的存储器访问,(一)寻址方式,寻址方式:指令中的操作数给出参与运算的数和数的地址,确定操作数地址的方式为寻址方式。寻址方式的多少是计算机功能强弱的重要标志。 MCS-51指令寻址方式主要有7种: (1)寄存器寻址 (2)立即寻址 (3) 寄存器间接寻址 (4)直接寻址 (5)基址寄存器变址寄存器间接寻址 (6)相对寻址 (7)位寻址,37,1、寄存器寻址,指令直接给出该寄存器名称,该寄存器的内容就是操作数,这种寻址方式就是寄存器寻址。采用寄存器寻址可以获得较高的传送和运算速度。,寄存器寻址方式寻址范围: (1)内部RAM中的32个工作寄存器R0R7; (2)A、B、CY(或C)、DPTR;,例如: MOV A,R0 ;(A)(R0) MOV DPTR , #1234H,38,2、立即寻址,操作数以常数的形式出现,直接跟在操作码后面,以指令字节的形式存放在ROM中,由于不需再去寄存器或存储器中去取数,可以从指令机器码中立即得到,因此,这种寻址方式为立即寻址。 立即数前面冠以“#”号表示这是一个数,而不是地址。立即数可以是8位,也可以是16位。如: MOVA,#0FH MOV P1,#00000111B MOV R3,#18 立即数主要用来给寄存器或存储器赋初值,并且只能用于源操作数,而不能用作目的操作数。,39,3、直接寻址,在指令直接给出操作数所在的存储单元的地址的寻址方式称为直接寻址。,直接寻址的寻址范围: (1)内部数据存储器的低128字节,00H7FH;如:MOV A,40H;(A) (40H) (2)特殊功能寄存器,注意除A、B,DPTR 外,其他SFR只能采用直接寻址方式。如:MOV A,P0。,40,4、间接寻址,指令中指出某一个寄存器的内容作为操作数的地址的寻址方法叫做寄存器间接寻址。寄存器间接寻址以符号“”指明。,其寻址范围: (1)以R0,R1为地址指针,寻址内部RAM 007FH 和外RAM的低256B;如:MOV A,R0 (2)以DPTR,或R0、R1(须用P2指定高8位地址)为地址指针,寻址外部RAM空间和扩展I/O口。 如:MOVX A,R0 ;访问外部RAM 00HFFH MOVX DPTR,A ;访问外部RAM 0000HFFFFH,41,5、变址寻址,以基址寄存器(PC、 DPTR)和变址寄存器(A)的内容作无符号数相加,形成16位地址,该地址就是操作数所在的地址,这种寻址方式就是变址寻址。变址寻址常用来访问程序存储器,完成查询表格功能。两种形式: MOVC A,A+PC ;(A)(A)+(PC) MOVCA,A+DPTR ;(A)(A)+(DPTR),例: MOVC A,A+DPTR,42,6、相对寻址,指令中给定地址的相对偏移量rel,以PC当前值为基地址,加上rel所得结果为操作数实际地址的寻址方式为相对寻址。用于程序存储器访问,常出现在相对转移指令中。 当前PC值=PC源地址+转移指令字节数 目的地址=当前PC值+rel。 rel:有符号数,单字节补码,-128+127。负数表示向上转移,正数表示向下转移。 例如:JZ 08H,表示累加器A 为零时,从源地址(设为:2050H) 向下转移10个字节。,43,7、位寻址,MCS-51中具有一些可以直接寻址的位,并且可以对这些位进行操作,指令中直接给出位的地址的寻址方式为位寻址。位寻址空间是:内部RAM中的20H2FH共16个字节128个位和SFR中的93个位。 例如: SETB PSW.3 ; (PSW.3) 1 其功能是将PSW中的RS0置为1。指令代码为:D2H D3H,其中的第2个字节D3H就是PSW.3的位地址。,44,(二)程序存储器访问的有关指令-ROM查表指令,(1) DPTR内容为基址,程序存储器除存放程序外,还可存放一些常数,这些常数的数 据结构一般称为表格。查表指令就是把存放在程序存储器(ROM)中的表格数据读出,传送到累加器A 的指令。查表指令采用变址寻址方式,共有2条指令,这两条指令都是单字节双周期指令。,MOVC A,A+DPTR ;A (A)+(DPTR),45,(2) PC 内容为基址,MOVC A,A+PC ;A (A)+(PC),取出该单字节指令后PC的内容增1,以增1后的当前值去执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址。然后将该地址单元的内容传送到累加器A。指令执行后PC的内容不变。,优点: 不改变PC的状态,根据A的内容取表格常数。 缺点:(a)表格只能存放在查表指令以下的256个单元内。,(b)当表格首地址与本指令间有其他指令时,须用调整偏移量,调整量为下一条指令的起始地址到表格首址之间的字节数。,46,补充:单片机非线性运算快速实现的基本方法,(1)查表法,查表是非线性运算和非数值计算数据处理中常用的方法之一。利用查表可以免去复杂的计算,节省时间,具有灵活性强、运行速度高及实时性好的特点。表分为有无序表和有序表;一维表、二维表、三维表及多维表等。常用的表格一般是线性表,这种表中的数据元素具有线性一维关系。查表就是根据变量x,在表格中查找函数值y,使得y = f(x)。换句话说,查表就是根据输入值来确定表的地址,然后从该地址中找出相应的函数值。 采用这种方法首先要根据自变量的变化范围和精度要求制作一个表格,把有关数据固化在程序存储器中,一旦表格内容确定之后就不能再改变。然后编写查表程序,通过输入值来寻找表格中的相应值。这样就使运算量变的较少,甚至完全不用进行运算,就可获得满足精度要求的输出。因此在数字信号处理中,特别是在智能化测试仪表和数字发动机控制应用中,查表法是经常使用的一种操作。,47,(2)查表法举例,【例3.5 】累加器A中存有压缩的BCD码,将其转化为八段显示码,并将结果送至P1口(送高位)和P2口(送低位)。如A中数据为48H,则P1口连接的数码管显示4,P2口连接的数码管显示8(假设所使用的数码管都是共阳极数码管)。,分析:这是一个典型的查表程序。所显示数字与所输出的二进制数(显示码)之间的关系为:,48,参考程序为: ORG 0000h SJMP START ORG 0030H START: MOV R0,A ;备份BCD数 ANL A,#0FH ;取低位 MOV DPTR,#TABLE MOVC A,A+DPTR ;取低位显示码 MOV P2,A ;从P2口输出显示码 MOV A,R0 ;恢复BCD数 ANL A,#0F0H ;取高位 SWAP A MOVC A,A+DPTR ;取高位显示码 MOV P1,A ;从P1口输出显示码 SJMP $ TABLE: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH END,49,(2)插值法,在智能仪表和数字发动机控制应用中,表格插值是经常要做的一种操作,对一些计算精度要求不高但运行速度要求较高的场合,应避开复杂的计算,尽量采用通用性强、实时性好的分段线性插值法或二次抛物线插值法来逼近真实函数值。,50,分段线性插值法:,假设:已知函数Y= f(X)的曲线如右图 所示。按一定要求将X轴分为x0、x1、 xi、xi+1、 xn,则对应的函数输出为y0、y1、 yi、yi+1、 yn,它们都是已知的。把曲线上两两相临的分段点用直线连接起来,如图中虚线所示,当n取得足够大时,这些虚线可以近似的代替原曲线,这就是一般分段线性插值法的原理。显然,对于落在(xi,xi+1)区间内的输入x,有相应的输出近似值:,Y =yi + (x-xi) =yi + ki(x-xi),51,因此,可将n点输入输出对照值储存在程序存储器内,当输入量x落在第i段内时,可通过三个步骤算出相应的输出值, 第一步:查表,在区间xi,xi+1上找到点x的位置,计算x-xi ; 第二步:计算ki; 第三步:求得结果y= yi+ ki(x- xi)。 显然,采用线性插值逼近法时,只要分段数n取得足够大,就可以获得要求的精度。一般的,只要分段点取得合理,分段数愈多,则逼近精度愈高,但同时所要求的计算机内存容量也将增加。 因此,应该根据精度要求和函数曲线的斜率及曲率大小来决定分段点的选取。只要给定了允许误差和函数的理论计算公式,就可以求得合理的分段点,使得既满足精度要求又尽可能地减少分段数目。,52,线性插值节点选取的一般方法,采用分段线性插值近似算法时,首先要考虑如何选取插值节点的问题。解决这一问题的出发点是:在满足精度要求的前提下,使插值节点数目减至最少,从而使表格存储器的容量减少,节省硬件资源,同时使插值搜索过程加快。,(a)固定步长选取法 固定步长选取法就是沿X轴等距离地选取插值节点,又称为等距选取法。采用固定步长的插值节点时,可以减少表格的长度,仅存储xmin、xmax、n值以及纵坐标上各节点的函数yi值。 该方法的主耍缺点是,当被逼近函数的曲率或斜率变化较大时,为了使曲率或斜率较大的区域不超差,插值间距需取得较小。因而插值节点数将大大增加,使表格变长,运行也变长。所以,固定步长插值法适用于非线性程度不大的函数。,53,(b)非固定步长选取法 非固定步长选取法根据函数曲线形状的变化而修正插值间距的大小,又称为非等距选取法。对于非线性程度较大的函数,插值节点数可以大大减少,但是在表格中,需要对每个节点存放三个常教xi 、yi 和ki ,显然,表格的长度较长,占用的存储单元较多。当然也可以在表格中只存储xi 、yi这两个常数,然后在插值过程中再去计算ki值,但这样作增加了运算量,使运行速度减慢,这在某些应用场合是不允许的。,54,55,(三)外部数据存储器访问的有关指令,MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O接口进行数据传送的指令。采用寄存器间接寻址,通过累加器A来完成。 片外数据的传送是通过P0口和P2口配合来完成的,其中P2口输出高8位地址,P0口分时输出低8位地址和数据。这类数据传送指令共有4条指令,其中2条读指令,2条写指令,这4条指令都是单字节双周期指令。,56,(四)堆栈操作指令,栈顶的位置(地址)由栈指针SP指示(即SP的内容是栈顶的地址)。在80C51中,堆栈的生长方向是向上的(地址增大)。系统复位时,SP的内容为07H。通常用户应在系统初始化时对SP重新设置(SP的值越小,堆栈的深度越深) 。 堆栈操作有进栈和出栈操作,即压入和弹出数据。常用于现场保护和恢复。这类指令共有2条,这2条指令都是双字节双周期指令。,57,六、MCS-51单片机的汇编指令简介,(一)指令分类,1、按指令字节数分类,MCS-51指令含有的操作码和操作数都有相应的二进制代码,根据指令包含的字节数的多少不同,单片机指令系统(共111条指令)分成单字节指令(49条) 、双字节指令(45条)和三字节指令(17条) 。,2、按指令的执行时间分类,单片机指令系统(共111条指令)根据指令执行的时间长短分类,可以分成: (1) 单周期指令(64条) (2) 双周期指令(45条) (3) 四周期指令(只有乘除2条)。,58,3、按指令的功能分类,单片机指令系统(共111条指令)根据指令所完成的功能分类,可以分成: (1) 数据传送类指令(28条) (2) 算术运算类指令(24条) (3) 逻辑运算及移位类指令(25条) (4) 控制转移类指令(17条) (5) 位操作(布尔操作)类指令(17条),59,(二)指令简介,1、数据传送类指令,数据传送类指令一般不影响程序状态字PSW寄存器。只有在往累加器A中传送数时有可能影响PSW的奇偶位P,其它位不受影响。当然,往PSW寄存器里面传送数据肯定影响PSW。 传送类指令可以分成两大类。一是采用MOV操作符,称为一般传送指令;二是采用非MOV操作符,称为特殊传送指令。,60,61,MCS-51单片机一般数据传送指令数据传递关系图,62,立即数可以为累加器A、寄存器Rn和DPTR、直接寻址或间接寻址的RAM赋初值,只能作为源操作数,不能作为目的操作数。 累加器A可以和寄存器Rn、直接寻址或间接寻址的RAM之间相互赋值,既可以作为源操作数,也可以作为目的操作数。 直接寻址的RAM可以和累加器A、寄存器Rn、直接寻址或间接寻址的RAM之间相互赋值,既可以作为源操作数,也可以作为目的操作数。 间接寻址的RAM可以和累加器A、直接寻址的RAM之间相互赋值,既可以作为源操作数,也可以作为目的操作数。但不能和寄存器Rn与间接寻址的RAM之间相互赋值。 寄存器Rn可以和累加器A、直接寻址的RAM之间相互赋值,既可以作为源操作数,也可以作为目的操作数。但不能和寄存器Rn与间接寻址的RAM之间相互赋值。,63,特殊数据传送指令,64,2、算术运算类指令,包括、加1、减1、十进制调整指令,共有24条。,65,66,算术运算类指令一般影响PSW中的CY、AC、OV、P 标志位。进位(借位)标志CY为无符号整数的多字节加法、减法、移位等操作提供了方便;溢出标志OV可方便的控制补码运算;辅助进位标志AC用于BCD码运算。,67,加减 1 指令仅 INC A、 DEC A 影响P标志(即使有进位或借位,CY也不变)。其余指令都不影响标志位的状态。,DA A指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整(加6修正) ,只影响CY位。该指令的使用条件:,(1)只能紧跟在加法指令(ADD/ADDC)后进行 (2)两个加数必须已经是BCD码 (3)只能对累加器A中结果进行调整,68,DIV AB指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数 ,商的整数部分存放在累加器A中,余数部分存放在寄存器B中。当除数为0时,则结果的A和B的内容不定,且溢出标志位(OV)=1。而标志CY总是被清0。,MUL AB指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘 ,乘积的低8位留在累加器A中,高8位存放在寄存器B中。当乘积大于FFH时,溢出标志位(OV)=1。而标志CY总是被清0。,69,3、逻辑运算和循环移位类指令,70,71,逻辑“与”指令常常用于屏蔽字节中的某些位。若清除某位,则用“0”与该位进行逻辑“与”,若保留某位,则用“1”与该位进行逻辑“与”。,逻辑“或”指令常常用于使字节中的某些位置“1”。若置“1”某位,则用“1”与该位进行逻辑“或”,若保留某位,则用“0”与该位进行逻辑“或”。,逻辑“异或”指令常用于使字节中的某些位取反。若用“1”与某位进行逻辑“异或”则该位取反 ,若保留某位,则用“0”与该位进行逻辑“异或”。还可以利用异或指令对某个单元进行自身异或,以实现清零操作。,逻辑运算指令(共18条)可以完成与、或、异或、清0和取反操作,当以累加器A为目的操作数时,对P标志有影响。,72,A7,A0,A7,A0,CY,RR A,RRC A,A7,A0,A7,A0,CY,RL A,RLC A,右移:,左移:,使累加器A的各位逐位左移1位相当于原内容乘2;使累加器A的各位逐位右移1位相当于原内容除2;预先清零CY,采用带进位位的左移和右移,能够保留乘除产生的进位和余数 。,73,4、控制转移类指令,控制程序的转移要利用转移指令。MCS-51的转移指令(共17条)分无条件转移、条件转移及子程序调用与返回等。利用这些控制转移类指令可以方便地实现程序的向前、向后跳转,并根据条件分支运行、循环运行、调用子程序等。,74,75,AJMP指令的转移范围为AJMP下面一条指令的存储地址相同的2KB区间内,可以向前也可以向后,指令的执行不影响PSW的状态标志位。,SJMP rel ,rel 是一个带符号的偏移字节数(2的补码),取值范围为 128 127 (00H7FH对应表示0 127,80HFFH对应表示1281)。负数表示反向转移,正数表示正向转移。,JMP A+DPTR指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针DPTR的16位数作为基址和累加器A的8位数作为相对偏移量进行无符号数相加形成,并将相加结果直接装入PC。该指令执行时对标志位无影响。 该指令常用于多分支转移。,76,散转程序举例:,【例3.21】 根据R0的值转向7个分支程序。 R0=60,转向SUB6;,分析:,程序流程如下图所示。,77,参考程序如下: ORG 2000H MOVDPTR,#TAB;取转移指令表首地址 MOV A,R0 ;取数 MOV B,#10 DIV AB ;A10,商在A中 CLR C RLC A ;A2A JMP A+DPTR ;PC A+DPTR TAB: AJMP SUB0 ;转移指令表 AJMP SUB1 AJMP SUB2 AJMP SUB6,78,RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继续执行。,RETI指令是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)与中断优先,开放低级中断的功能。,79,5、位操作类指令,80,【例3.18】利用位逻辑指令,模拟下图3.11所示的逻辑电路功能。,位操作程序举例:,实现该功能的程序如下: PR2: MOV C,P1.1 ;(CY) (P1.1) ORL C, P1.2 ;(CY) (P1.1)V (P1.2) ,得出A点逻辑状态 ANL C, P1.0 ;(CY) (P1.0)A点状态 CPL C ; 取反,得出B点逻辑状态 MOV F0, C ;F0内暂存B点状态 MOV C,P1.3 ;(CY) (P1.3) ANL C, P1.4 ;(CY) (P1.3)(P1.4) CPL C ; 取反,得出C点逻辑状态 ORL C, F0 ;B点状态与C点状态进行逻辑或 MOV P1.5, C ;运算结果送入P1.5 RET,81,七、MCS-51单片机的辅助电路,单片机的复位状态,82,上电复位电路和开关复位组合电路,83,单片机的时钟电路 内部时钟方式 、外接时钟方式,84,八、MCS-51单片机的最小系统,85,8051/8751最小应用系统的特点是: (1)全部I/O口线均可作为并行口供用户使用。 (2)内部存储器容量有限(只有128B的RAM和4KB地址 空间)。 (3)应用系统开发具有特殊性。因为P0和P2口在开发系统 时作为数据、地址总线,而在应用系统中如果作为普 通I/O口,调试时不方便硬件调试,只能用模拟的方法 调试。,86,第二章 中断、定时计数器、串行接口,87,一、定时,MCS-51有几个定时器/计数器? MCS-51有2个定时器/计数器T0和T1 在单片微机控制系统中为什么要使用它们? 在单片微机控制系统中,常要求一些外部实时时钟,以实现定时或延时;也常要求有一些外部计数器,以实现对外部事件进行计数。 T0/T1是几位的计数器/定时器? T0/T1是16位的计数器/定时器,通过编程的方式可以用来设定为定时器或者为计数器。,(一)、MCS-51定时器/计数器,88,计数器/定时器本质区别是什么? 计数器/定时器的基本核心是一个加1计数器 加1计数器的脉冲有两个来源: 外部脉冲源; 内部的时钟振荡器。 * 定时器 对内部的时钟振荡器标准脉冲计数 * 计数器 对外部脉冲计数,89,与计数器/定时器相关的特殊功能寄存器有哪几个? 工作方式控制寄存器,90,GATE:门控位的作用:,当GATE=0时,定时计数器的启动不受外部中断信号的影响,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1)。 当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚 INT0 (P3.2)或INT1 (P3.3)信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚INT0(P3.2) 或INT1(P3.3)的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。,91,定时器控制寄存器 用于用于T-用于中断控制 溢出中断标志:溢出自动置,硬件自动清或 供软件查询和清 定时器运行控制位,由软件置或清 用于中断控制,92,、功能 : 寄存计数初值,均可以通过软件赋值,系统复位时,均为 讨论,当工作于方式时,是的高位,是的低位,组成的位计数器,加到后,再加便溢出,置为“” 当工作于方式时,是的高位,是的低位,组成的位计数器,加到后,再加便溢出,置为“”; 当工作于方式时,是的计数初值寄存器,是的位计数器,组成的位计数器,加到后,再加便溢出,置为“”,同时将中的计数初值装入,于是又在的新值基础上计数,周而复始。(自动装入常数),93,当工作于方式时,只使用于定时器,把分成两个独立的位定时器计数器,位定时器,位定时器计数器,94,定时器工作方式的选择 定时器有4种工作方式,选择哪一种,首先要看这几种工作方式所允许的最大时间间隔。 当时钟为6MHz时,一个机器周期为2s由于定时器是对机器周期计数的,所以: 8位定时器最大定时间隔 =282S=512s 13位定时器最大定时间隔 =2132S=16.384ms 16位定时器最大定时间隔 =2162S=131.07ms,95,定时器定时常数的选择,定时器定时时长与装入TL0、TH0或TL1、TH1的常数有关,定时常数TC的计算公式为: 其中,f为单片机应用系统的晶体频率;X与系统采用的定时方式有关,方式0、1、2、3的X分别是13、16、8、8。 例:当 =6MHz,采用方式1,求定时10ms的定时常数。T=10ms=10,000us,X=16,根据方式公式可以得到: TC=216-10000*f/12=60536=0EC78H,即: TL0=78H,TH0=ECH,96,我们可以将定时器/计数器的编程要点概括如下: 确定方式控制字 MOV TMOD,#DATA 予置时或计数初值 MOV THX,#DATAH MOV TLX,#DATAL 启动定时/计数器工作 SETB TRx 查询 WAIT:JBC TFX NEXT SJMP WAIT 允许定时/计数中断,相应命令为: SETB EA SETB ETx 重新装入定时/计数初值 NEXT : MOV THX,#DATAH MOV TLX,#DATAL,定时器/计数器的编程要点,97,(二)、实时时钟及其软硬件实现方法,单片机的实时时钟通常由两种方法实现: (1)通过内部的定时/计数器,结合软件的方式实现,这种方式一般适合于定时时间精度要求不高的场合。 (2)通过采用时钟芯片,比较典型的有:Motorola公司的MC146818,Dallas公司的DS12887和DS1302和Philips公司的PCF8563、PCF8583。早期的时钟芯片一般采用并行接口的方式:如MC146818 ,现在流行的则是采用SPI、I2C总线等接口的串行芯片,如DS1302 和PCF8563 。这种实现方式精度较高,还能节省大量的单片机CPU指令周期,所以广泛被人们使用。,98,1、DS1302芯片简介,实时时钟DS1302芯片内部除了有时钟管理外,还有31B的RAM,使用SPI串行接口仅需用到三个口线( RES 复位、 I/O 数据线和SCLK)与单片机进行通信。可以提供秒、分、时、日、月、年的信息,每月和闰年的天数还可以自动进行调整,可以选择12小时或24小时工作方式。DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW。 DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。,99,DS1302外部引脚结构如下图所示:,DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。 RST是复位/片选线当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。 I/O为串行数据输入输出端(双向)。SCLK始终是输入端。,100,2、DS1302芯片与单片机的连接,3、DS1302芯片的控制字节,DS1302的控制字如下图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。,101,4、DS1302芯片的数据输入输出(I/O),在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。,102,5、DS1302芯片的内部寄存器,DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见下表:,103,104,二、串行口,MCS-51有一个可编程的全双工串行通信接口,可作为通用异步接收/发送器UART,也可作为同步移位寄存器。它的帧格式有8位、10位和11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性。,105,一、MCS-51串行口的结构,106,MCS-51单片机的串行口主要由2个物理上独立的串行数据缓冲器SBUF、输入移位寄存器和控制器等组成。还有2个SFR寄存器SCON和PCON,用于串行口的初始化编程。,SCON 是一个特殊功能寄存器,用以设定串行口的工作方式,控制数据的接收和发送,并标示串行口的工作状态等。该寄存器的字节地址为98H,可位寻址,其位格式为:,SM0、SM1:串行口工作方式控制位,两位对应四种工作方式,如下表所示(fosc是晶振频率):,107, SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB80时不激活RI,收到的信息丢弃;RB81时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。,在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。,REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。,108,TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。 在方式0和方式1中,该位未用。,RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。,TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。,RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。,109,PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,该寄存器中只有一位SMOD与串行口工作有关,它的位格式为:,SMOD GF1 GF0 PD 1DL,PCON (97H),D7 D6 D5 D4 D3 D2 D1 D0, SMOD:波特率倍增位。串行口工作在方式1、方式2、方式3时,若SMOD=1,则波特率提高一倍;若SMOD=0,则波特率不提高一倍。单片机复位时,SMOD=0。,110,一、方式0,方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。,1、方式0输出,111,发送:当一个数据写入SBUF后,串行数据将由RxD逐位移出;TxD输出移位时钟,频率=fosc1/12; 每送出8位数据 TI就自动置1; 再次发送前需要用软件清零 TI。,112,2、方式0 输入,113,接收:串行数据由RxD逐位移入SBUF中; TxD输出移位时钟,频率=fosc1/12; 每接收 8位数据RI就自动置1; 再次接收前需要用软件清零 RI。,114,例:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示09。,AB,CLK,h g f e d c b a,CLR,+5V,VCC,TxD,RxD,51单片机,74LS164,共阳LED数码管,115,二、方式1,方式1是8位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。 8位UART(1+8+1位)波特率可变。,116,波特率可变 用定时器T1作波特率发生器: 公式:波特率 =(2SMOD/32)T1的溢出率, 溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。, 初值 X = 2n -,2SMOD fosc 32 波特率 12, 波特率 =,2SMOD fosc 32 12(2n - X),其中:X 是定时器初值,117, 例已知晶振频率=6MHz,SMOD=0,要求用T1工作于方式2来产生波特率1200,求出T1的初值:,初值 X = 28 -,20 6106 32 1200 12,= 256 - = 256 - 13.02,6106 460800, 243 = 0F3H,118,T1作波特率发生器时初始化包括: 选定时器工作方式2(TMOD选8位自动重装); 将计算(或查表)出的初值X赋给TH1,TL1; 启动T1 (SETB TR1); 对T1不要开中断 !,串行口的初始化包括: 对SCON选工作方式 对PCON设波特率加倍位“SMOD”(缺省值=0) 如果是接收数据,仍要先置“1”REN位,119,1、方式1输出,串行口以方式1发送数据时,数据位由TXD端输出,发送一帧信息为10位,其中1位起始位,8位数据位(先低位后高位),1位停止位。 CPU执行1条写入发送缓冲器的指令后,就会启动发送器发送,当发送完数据后,就置中断标志TI为1。,120,2、方式1输入,用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。,121,三、方式2
展开阅读全文