




已阅读5页,还剩520页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片微机原理与接口技术,主 讲: 王晓荣 Email: 参考教材:例说51单片机(第3版)(C语言版) 南工大测控QQ群: 90783283,D301实验室网络设置,无线网络:D301_2、D301_3、D301_4 无线网络密码:D301D303 入网登录账号:zdh25 入网登录密码: 301303,目录,第一章 单片机系统设计入门 第二章 深入探讨单片机系统硬件设计 第三章 内部RAM存储空间 第四章 MCS51指令系统 第五章 伪指令 第六章 输出口的应用 第七章 输入口的应用 第八章 外部RAM的扩展,目录,第九章 中断的应用 第十章 定时器/计数器的应用 第十一章 串行口的应用 第十二章 C程序设计规范 第十三章 STC89C52RC 第十四章 液晶显示技术 第十五章 DS18B20温度传感器,第一章 单片机系统设计入门,1,什么是单片机,一个单片的微型计算机 英文简写:MCU (Microcontroller Unit),AT89S51芯片文字说明,ATMEL : 公司名 AT89S51: 芯片型号 1-3 24PU: 最大晶振24M,工业级(PC为民用级) 0940A: 09年第40批,STC89C52,STC89C52芯片文字说明,STC : 公司名 89C52RC: 芯片型号39 40C: 最大晶振40M,民用级(I为工业级) PDIP: 封装类型 40:引脚数,STC89C52同AT89S51的区别,STC89C52功能更多,更强。 STC89C52兼容AT89S51的功能。 具体区别,后面会陆续介绍。,单片机系统设计案例,1,单片机系统设计案例,例题:LED_asm 功能:用汇编语言编写程序实现1个LED闪烁,并在学习板上运行。 硬件设计简介 软件设计,硬件设计简介,1,电路图,AT89S51,AT89S51一共有多少个引脚? 引脚号的确定:缺口朝上,左边最上面的引脚为1号引脚,晶振电路,提供时间基准 晶振频率越高,指令执行速度越快。,复位电路,复位电路后面的课程详细讲。,存储器设置电路,31号引脚接高电平,使用内部ROM;接低电平,不使用内部ROM。,电源,双列直插式芯片的电源引脚一般为: 左下角接地 右上角接电源正极 图中的C6起滤波作用,以后详细讲。,LED电路,LED电路,参考如下:,思考,当P1.0引脚电压为0时,发光LED亮还是灭? 当P1.0引脚电压为VCC时,发光LED亮还是灭?,电路图,AT89S51硬件电路的最小系统,上述电路图除发光LED电路外的其它电路都是单片机正常工作必不可少的,称为单片机硬件电路的最小系统。,课堂练习,打开42。在学习板电路图中找到单片机最小系统(晶振电路、复位电路、存储器设置电路、电源)的电路图。 透彻理解该部分电路,并利用万用表,在学习板上找到相关元器件。 分析学习板电路图上LED的电路,并在学习板上找到相关元器件。,软件设计,1,课堂练习,参考52,新建一个LED_asm项目。,main.asm,讲解“main.asm”汇编程序,课堂练习,在学习板上实现前4个LED和后4个LED交替闪烁。,课后练习,在学习板上实现: 1P83霹雳灯实验。,版本号,版本号:v0.0.0 当版本号带有第3个数字时,为调试版本,当修改程序时,需保存老版本,并增加该数字的值在新版本上修改。 当程序调试成功,可以发布时,可增加中间的数字,并去掉第3个数字。 当可发布的版本有重大改进,可增加第1个数字。,AT89S51内部结构简介,1,AT89S51的内部结构图,单片机的内部结构,单片机的内部结构主要有以下几部分: CPU ( Central Processing Unit ,中央处理器) ROM ( Read-Only Memory,只读存储器) RAM ( Random Access Memory,随机存取存储器) 其它内部设备,单片机系统设计,单片机系统设计包括: 硬件设计(上图中的绿色部分) 软件设计(上图中的黄色部分) 硬件设计:设计单片机及外部设备的硬件电路 软件设计:用C语言或汇编语言编写程序并烧写到ROM中,CPU,CPU也称为内核 内核为MCS51的单片机统称为51系列单片机 AT89S51、STC89C52均为51系列单片机 CPU的作用 :读取指令,执行指令,指令5,指令是用不同的二进制代码来表示的。 思考:1字节为8位(bit),请问1字节最多可以表示多少条指令? MCS51核可识别111条指令。 每条指令的长度为1-3B 。 思考:为什么有些指令超过1个字节呢?,汇编语言,用助记符代替二进制指令代码的语言就是汇编语言。 汇编语言可通过编译生成机器语言,然后烧写到ROM中。,ROM,ROM: 用于存放指令代码 MCS51核可读取(不能写) ROM中的指令代码。 MCS51核通过内部总线读取内部ROM。,例题,打开项目“LED_asm”,观察指令的二进制代码。 点击“ ”,进入调试环境。 点击“ ”,打开“Memory”窗口。 在窗口中“Address”右边的编辑框写入“c:0”,观察保存在ROM中的指令代码。 读懂全部的二进制代码。,思考,上述例题程序在ROM中总共占用多少个字节? “MOV 0X07, 0X06”指令的含义是? 参考4,写出“MOV 0X07, 0X06”的二进制代码。,内部存储空间,MCS51核内部存储空间是256个字节 地址范围是:0x00-0xff 其中, 0x00-0x7f 为128B的RAM, 0x80-0xff散布着20多个(不同型号数量不同)专用寄存器(见图)。 专用寄存器:有专门用途的存储单元,例题,打开项目“LED_asm”,观察内部存储空间数据的变化。 在“Memory”窗口中“Address”右边的编辑框写入“d:0”,观察内部存储空间的数据。 看看0x90处的初始值是多少? 点击“ ”1次,运行1条指令,观察0x90处的变化。,指令周期,每条指令执行时间为1-2个机器周期(乘除指令除外) 1个机器周期 = 12 * 晶振振荡周期,思考,如果晶振选用12MHz,执行1条单片机指令需要多长时间? 如果晶振选用12MHz,参考4, 计算案例中延时子程序的精确延时时间是多少? 利用调试环境,观察计算结果是否正确。 如果将#0xFF换成#0x00,精确延时时间是多少?,程序计数器PC,作用:存放CPU将要读取的ROM地址 占用2个字节 默认值为:0x0000 读取ROM1个字节后,PC值自动加1,课堂练习,调试项目“LED_asm”,观察PC值的变化。,内部总线,内部总线分为: 地址总线 数据总线 控制总线,CPU读取ROM中指令的全过程,CPU端: 1.将PC值通过地址总线送出 3.给读ROM控制总线短暂低信号 5.将数据总线数据读至CPU 6.PC值自动加1 ROM端: 2.根据地址选中相应存储单元 4.当有读ROM控制总线有低信号时,将选中的单元数据送数据总线。,内部设备,CPU通过对专用寄存器的读写间接控制内部设备。,外部设备,外部设备通过引脚连接到部分内部设备上 CPU通过对专用寄存器的读写间接控制内部设备,进而控制外部设备。,例题,例题:LED_asm(v0.2版) 功能:对v0.1版作了改进,思考,观察修改指令的二进制代码,看看与修改前有什么不同?,通用寄存器,R0R7称为通用寄存器。 默认情况下, R0R7对应于内部RAM的0x000x07。 使用通用寄存器,代码效率更高。,例题,例题:LED_c 功能:用C语言实现LED的闪烁。,课堂练习,读懂例题的反汇编程序。,课后练习,熟悉keil编程环境,熟悉keil调试环境 熟悉程序的烧录过程。 通过调试程序,熟悉MCS51核的工作原理。 编程实现:利用软件延时实现LED每隔1秒定时闪烁,并在学习板上试验。 用AltiumDesigner画出电路图。 复习:C语言,第二章 深入探讨单片机系统硬件设计,1,第二章 深入探讨单片机系统硬件设计,复位电路 电源电路 LED电路 单片机IO口的内部结构简介,复位电路,1,复位电路,复位电路,单片机9号引脚保持高电平(2.8V)时间超过10ms 时, AT89S51自动复位。 思考:复位电路上电后,9号引脚电压如何变化?请写出电压变化公式。,三个重要公式,复位电路分析,课堂练习,求9号引脚电压值。,一阶微分方程求解,电容电压求解,9号引脚电压,9号引脚电压变化曲线图,电容和电阻的取值,当t=RC时,9号引脚电压约为0.37*VCC 通常:电阻选择10K,电容选择10uF 此时, 9号引脚电压保持高电平(2.8V)时间接近100ms,可以可靠复位。,思考,思考:复位电路可否采用大电阻小电容形式? 答:也可以。但该电路抗干扰能力差。 思考:如何添加复位键?,课本中添加复位键的方法,电源设计,1,思考,普通5V稳压电源能直接给单片机供电吗? AT89S51单片机的供电电压:4V-5.5V 我们先研究一下普通稳压电源的内部结构。,稳压电源的内部结构图,(a)是普通稳压电源的内部结构图 (b)是未加电容时输出电压波形图。,添加电容后输出电压波形图,电容越大滤波效果越好(RL为负载电阻)。,电解电容,大容量电容几乎都是电解电容。主要有两种: 铝电解电容 钽电解电容 铝电解电容一般简称:电解电容 钽电解电容一般简称:钽电容,电解电容规格,额定耐压值需大于正常工作电压的2倍。 常见耐压值有: 6.3V、 10V、 16V、 25V、 35V、 50V、 63V、 80V、 100V、 250V、 400V 、 500V、630V。 常见电容值有:0.47uF、 1.0uF、 2.2uF、 3.3uF、 4.7uF、 10uF、 22uF、 33uF、 47uF、 100uF、 220uF、 330uF、 470uF、 680uF、 1000uF、 2200uF、 3300uF、 4700uF、 6800uF,钽电容规格,额定耐压值需大于正常工作电压的2倍。 常见耐压值有: 6.3V、 10V、 16V、 25V、 35V。 常见电容值有:0.47uF、 1.0uF、 2.2uF、 3.3uF、 4.7uF、 10uF、 22uF、 33uF、 47uF、 100uF、 220uF、 330uF、 470uF、 680uF,电解电容,钽电容,电解电容与钽电容比较,电解电容 优点:价格便宜,耐压值高,容量大 缺点:误差大,稳定性差,寿命低。 钽电容 优点:误差小,稳定性高,寿命高。 缺点:价格高,耐压值低,稳压电源能直接给单片机供电吗?,答:不可以,稳压电源的电源电压波动太大,直接给单片机供电,将影响单片机工作的稳定性,甚至会损坏单片机。 一般需添加稳压芯片。,常见的稳压芯片7-10,线性稳压芯片:LM7805,LM1117 开关稳压芯片:LM2596 观察学习板上使用的稳压芯片。,LM7805 7,性能指标 输出电压: +5V 输出电流: 1A (添加散热器可达1.5A) 线性调整率: 100mV 负载调整率: 100mV 输入电压: 8V-15V 淘宝价格: 约0.5元,线性调整率和负载调整率,线性调整率:输入电压变化时输出电压变化指标 负载调整率:负载变化时输出电压变化指标,lm1117-3.3 8,性能指标 输出电压: +3.3V 输出电流: 800mA 线性调整率: 0.2% 负载调整率: 0.4% 输入电压: 4.75V-10V 淘宝价格:约0.2元,Lm2596 5.0 9,性能指标 输出电压: +5.0V 输出电流: 3A 输出电压误差: 4% 输入电压: 7V-40V 效率: 80% 淘宝价格:约2元,关于输出电流,如果系统长期运行,系统中稳压芯片的实际输出电流不能超过额定电流的1/3。,学习板电源电路,下面我们来研究一下,学习板的电源电路。 请同学们拿出学习板,观察学习板电源电路的相关元器件。,学习板电源电路图,思考,为什么稳压芯片两端需加电容? 答:电源滤波。,电容滤波原理,把电容后面的电路等效为1个等效阻抗。,思考,为什么用两个电容并联? 这个问题比较复杂,先学习一下基本知识。,电解电容,电解电容并不是理想地呈现容性,也存在很小的电阻和电感。,电解电容的阻抗,电解电容的阻抗,电解电容的电阻和电感非常小,因此,当频率较低时,电解电容呈现容性。 但是,当频率非常高时,电解电容反而呈现感性。,电解电容阻抗随频率变化的图形,思考,根据电流分流定理,思考电解电容对电源信号的影响。,电解电容,结论:电解电容可以滤除电源电路中的低频干扰,但不能滤除高频干扰。 11,12 陶瓷电容感性非常小,可以滤除高频干扰。 独石电容和薄膜电容现在使用越来越少。,贴片陶瓷电容,独石电容,薄膜电容,课堂练习,请画出陶瓷电容阻抗随频率变化的图形,并与电解电容进行比较。,学习板电源电路中的电解电容,思考:C1、C2的作用? C1的电容值一般大于C2,防止断电后C1放电过快,稳压芯片电压反转损坏芯片。 思考:当外接稳压电源时,C1可以省略吗?,学习板电源电路中的的电容,C3、C4用于滤除高频干扰,该电容的正极需尽可能靠近稳压芯片的管脚。 一般情况下,高频干扰对IC芯片影响较大,而PCB板的走线很容易受环境影响产生高频干扰信号。 解决办法:在每个芯片的输入电源处加一个0.1uF的高频滤波电容,并尽可能靠近芯片的电源正极引脚。,提问:C6的作用是?,LED电路,1,思考,限流电阻取多大比较合适?,LED(Light-Emitting Diode),LED即发光二极管,一般电流达到3mA以上可正常发光 特性如图,当电压达到约1.7V时,电压变化很小。,限流电阻,为使LED正常发光,例题中的限流电阻不能超过 1K LED的电流最好不要超过100mA,否则容易被烧坏。,思考,限流电阻取100R可以吗? LED可以反接吗? 我们还需要进一步熟悉单片机IO口的内部结构。,单片机IO口的内部结构简介,2,单片机IO口简介,单片机有4个输入输出口(P0、 P1、 P2、 P3),每个口8个引脚,共32个引脚均可接LED电路。,思考,AT89S51单片机一共多少个引脚? 有多少引脚我们已经学过了? 还剩/P/S/E/N引脚和ALE引脚没学过。 这两个引脚现在已经很少使用,后面会简单提及这两个引脚的接法。 下面对P1口的引脚作部分讲解。,单片机P1.x的内部结构,P1.x的内部结构,P1.x主要由1个D锁存器,两个三态门,1个上拉电阻(约30K)和1个场效应管组成。 可实现的功能:写引脚,读引脚,读锁存器。 今天,我们仅研究写引脚。,P1.x的D锁存器,D锁存器的工作原理。 D: 接内部数据总线(共8根)中的1根 CL:由“写RAM”控制总线 + 地址总线共同得到锁存信号。,写引脚举例,指令:MOV 0x90, #0xfe CPU端: 1. CPU将#0xfe送内部数据总线 3. CPU将#0x90送地址总线 4. CPU给“写RAM”控制总线控制信号 P1.0引脚: 2. D锁存器的D端得到信号“0” 5. D锁存器的CL端得到上升沿信号 6. D锁存器的/Q端锁存为信号“1” 7. 场效应管导通,P1.0引脚呈现电压0,AT89S51引脚的驱动能力,当引脚流过的电流过大时,容易引起单片机工作不稳定,甚至损毁。 AT89S51引脚的驱动能力: P0口-P3口的每个引脚: 10mA P1口- P3口的8个引脚合计: 15mA P0口的8个引脚合计: 26mA,STC89C52引脚的驱动能力,STC89C52引脚的驱动能力: P0口的每个引脚: 12mA P1口-P3口的每个引脚: 6mA 参见44P62,回答思考题,限流电阻取100R可以吗? 答:不可以,超过AT89S51芯片引脚的驱动能力。 当该芯片P1口仅接1个LED时,限流电阻一般可取为:330R 1K 。 LED可以反接吗? 答:不可以,由于内部上拉电阻较大,使电流太小, LED不亮。,LED电路,思考,限流电阻取500R可以吗? 答:可以取470R或510R 6 ,最好不要取500R, 500R的电阻不好买,价格较高,第二章课后练习,用学习板实现十字路口交通灯系统,其中,绿灯切换为红灯前用黄灯过渡1秒钟(用汇编语言和C语言两种语言编写) 。熟悉电解电容的特性和低频滤波功能。 熟悉陶瓷电容的特性和高频滤波功能。 熟悉电容的相关公式。 熟悉IO口的内部结构。,第三章 内部RAM存储空间,6,第三章 内部RAM存储空间,内部RAM区 通用寄存器区 位寻址区 堆栈区 普通存储区 专用寄存器区 位寻址区相关指令,AT89S51的内部结构图,内部RAM存储空间,内部RAM存储空间,内部RAM存储空间分为两部分: 内部RAM区 专用寄存器区 内部RAM区:128B(0x00-0x7f) 专用寄存器区:散布着若干个专用寄存器。 专用寄存器区的剩余空间未被使用。,内部RAM,内部RAM又分为: 通用寄存器区 位寻址区 堆栈区 普通存储区,内部RAM,通用寄存器区,R0-R7共4组(0组,1组,2组,3组) 地址分别为:0x00-0x07, 0x08-0x0f, 0x10-0x17, 0x18-0x1f 上电复位后,默认使用第0组通用寄存器。,例题,观察例题LED_asm(v0.2版)调试过程中通用寄存器区值的变化。,MOV P1, #0xfe,为便于编写对专用寄存器的读写操作指令,专用寄存器均可用特定的符号代替专用寄存器的地址。 在汇编时,自动将符号转换为相应的地址值。 观察该指令代码与上次课例题相应的指令代码是否相同。,MOV R7, #0xff,观察该指令代码与上次课例题相应的指令代码是否相同。 观察该指令执行后,RAM的变化与上次课例题是否相同。 结论:用不同的指令,实现了相同的运行结果。,两条指令代码的区别4,MOV direct,#data 指令代码:75H 操作内容:directdata 字节数: 3 机器周期:2 MOV Rn, #data 指令代码:0x780x7F 操作内容:Rndata,n07 字节数: 2 机器周期:1,两条指令代码的区别,第1条指令可以写整个内部RAM空间 第2条指令只能写通用寄存器 第2条指令效率更高:占用空间小,执行速度快。 一般子程序中的临时变量多使用通用寄存器。,通用寄存器组,在子程序调用时,如果主程序中已经使用了通用寄存器,在子程序中使用同样的通用寄存器后,再返回会引起错误。 为什么?怎么解决? 子程序调用时,可以改变寄存器的组号。 通用寄存器组号的更改通过写专用寄存器PSW(程序状态字)实现。,PSW(0D0H),P: 奇偶校验位(自动变化) CY: 进位标志(自动变化);位累加器 RS0、RS1: 寄存器组选择位,课堂练习,写出改用第1组通用寄存器的指令。 答:MOV PSW, #0X08,课堂练习,观察下列指令执行后内部RAM的变化: MOV A, #0X08 MOV PSW, A SETB C CLR RS0 SETB RS1 MOV R2, #0X55,间接寻址,通用寄存器中的R0、R1还支持间接寻址。,课堂练习,观察下列指令执行后内部RAM的变化: MOV R0, #0x30 MOV R0, #0x55 试试看以下指令是否错误?为什么? MOV R2, #0x55 (R2错误) MOV 0x00, #0x55,课堂练习,观察下列指令执行后PSW的值: MOV A, #0X10 MOV PSW, A 观察下列指令执行后内部RAM的变化: MOV PSW, #0X08 MOV R2, #0X55,提问,AT89S51的内部RAM空间是多大? AT89S51的内部RAM是多大? AT89S51的内部RAM分为几个区? 通用寄存器共几组?每组几个? 哪些通用寄存器可间接寻址?,STC的内部RAM,STC的内部RAM为512B。 STC的内部RAM中有128B,读写方式同AT89S51相同。其余字节的读写方式以后介绍。,位寻址区,1,位寻址区,内部RAM中,0x20-0x2f共16个单元可以进行位操作,且有专门的位地址。 专用寄存器区也有11个专用寄存器可以进行位操作,且有专门的位地址。 PSW、P0、 P1、 P2、 P3都可位操作。 指令系统中与位操作相关的指令有17条。见20第三章P68,内部RAM中位寻址区位地址,从0x20.0-0x2f.7共128位,位地址为:0x00-0x7f。,位寻址区的位地址(部分),思考:空白处的位地址,思考,0x22.4的位地址是? 0x2f.0的位地址是? 答:0x14,0x78,11个专用寄存器位地址,位操作的相关指令,1,位操作的相关指令,位传送指令 2条 位修改指令 6条 位逻辑与指令 2条 位逻辑或指令 2条 位条件转移指令 5条,位传送指令,MOV C,bit MOV bit,C,课堂练习,下列关于位操作的指令正确吗? MOV C, 0x20.7 MOV 0x90, C MOV C, #0x01 MOV C , 0x90.0 MOV C , 0xc0 MOV 0x01 , 0x02 答: ,课堂练习,观察下列指令执行后内部RAM的变化: MOV 0x20 ,#0x55 MOV C,0x01 MOV 0x90,C MOV C, 0x20.0 MOV P1.0 ,C,课堂练习,写出将0x20.1中的值传送到0x20.0中的指令。 答: MOV C, 0x20.1 MOV 0x20.0, C,位修改指令,CLR C CLR bit CPL C CPL bit SETB C SETB bit,课堂练习,观察下列指令执行后内部RAM的变化: MOV 0x20 ,#0x55 CPL 0x20 SETB C CLR 0x20.6 SETB 0x07 CLR C,课堂练习,使用位修改指令,改进第1个例题,并在学习板上实现。,位逻辑与指令,ANL C,bit (相与) ANL C,/bit (取反,相与),课堂练习,观察下列指令执行后内部RAM的变化: SETB C ANL C, 0x00 SETB C ANL C, /0x00,位逻辑或指令,ORL C,bit ORL C,/bit,课堂练习,观察下列指令执行后内部RAM的变化: ORL C, /0x00 CLR C ORL C, 0x00,位条件转移指令,JC rel ;如Cy=1,转移 JNC rel ;如Cy=0,转移 JB bit,rel;如bit =1,转移 JNB bit,rel;如bit =0,转移 JBC bit,rel;如bit =1,转移, 并清0 Rel(偏移量),JC rel,指令代码:40H 操作内容: 若(C)1,则PC(PC)+2 若(C)1,则PC(PC)+2+rel 字节数: 2,关于rel,rel占用1个字节,因此跳转范围受到限制。 写汇编程序时,可以用标号代替rel,汇编时,该标号会被计算好的rel值。,课堂练习,打开案例“JC指令”,先看懂程序,然后输入不同的R0值调试程序,观察运行结果。 案例中用到新的指令:“CJNE A,dircet,rel ”请参考4自学,例题,熟悉例题(LED_c)的反汇编程序,C语言与汇编语言比较,C语言优点: 可读性好 移植性好 编写容易 汇编语言优点: 代码效率高 C语言成为主流,但学习汇编语言有利于熟悉微机原理和更好地编写C语言程序,堆栈区,1,堆栈区,作用:子程序或中断程序调用时保护断点和保护现场 堆栈区的地址: 0x08-0x7f(默认) 堆栈区的大小可通过改变SP的值来实现。 SP(0x81):堆栈指针,默认值是0x07 通过课堂练习来熟悉SP和堆栈区的作用。,课堂练习,观察例题“LED_asm(v0.2版)” 的RAM变化 添加指令“MOV SP, #0X60”后,观察RAM的变化。,课堂练习,观察“堆栈区”例题的RAM变化 例题中涉及新的指令,请参考4,子程序(中断程序)调用过程,汇编程序: 子程序(中断程序)调用时,自动保护断点,人工保护现场; 子程序(中断程序)退出时,人工恢复现场,自动恢复断点。 C程序:全部自动保护,普通存储区,1,普通存储区,内部RAM均可作为普通存储区。 熟悉普通存储区的相关指令。(direct),累加器A,累加器A是使用最频繁的寄存器,与A相关的指令最多。 熟悉与累加器A相关的指令。,专用寄存器,思考:我们已经学过的专用寄存器有哪些? 答:P0, P1, P2, P3,PSW,SP, PC,ACC 其余专用寄存器我们会陆续学习,第三章课后练习,熟悉内部RAM存储空间。 参考4-5,理解位操作指令,熟悉其余汇编指令。 用学习板实现十字路口交通灯系统,其中,绿灯切换为红灯前用黄灯过渡1秒钟(用C语言编写,并熟悉其反汇编程序)。,回答问题,电容的滤波原理 复位电路原理 MOV P1, #0xfe的执行过程 子程序调用时,内存变化情况,第四章 MCS51指令系统,1,第四章 MCS51指令系统,数据传送类指令(28条) 算术运算类指令(24条) 逻辑操作类指令(25条) 控制转移类指令(17条) 位操作类指令(17条),MCS51指令系统,MCS51指令系统共111条指令,按功能分为五类: 数据传送类指令(28条) 算术运算类指令(24条) 逻辑操作类指令(25条) 控制转移类指令(17条) 位操作类指令(17条),数据传送类指令(28条),1,以A为目的操作数的指令,MOV A,Rn MOV A, Ri MOV A,direct MOV A,#data,A与ACC,观察和思考下面指令的区别: MOV ACC , #0x33 MOV A , #0x33 答:2条指令不同,但效果相同。第1条指令等同于: MOV 0xE0 , #0x33;第2条指令代码效率更高。,MOV A, Ri,为间接寻址标识。 内部RAM空间的间接寻址不能寻址专用寄存器区。,STC89C52的内部RAM,STC89C52内部有512B的RAM AT89S52内部有256B的RAM AT89S52内部RAM中低128B的读写方法同AT89S51,高128B的读写方法只能采用间接寻址。 STC89C52内部RAM中低256B的读写方法同AT89S52 ,高256B的读写方法以后介绍 。,AT89S52高128BRAM读写方法,汇编: MOV A, Ri MOV Ri, A C语言: unsigned char idata test;,课堂练习,观察下列程序的反汇编代码: unsigned char t1; unsigned int data t2; unsigned int idata t3; t1 = 0x11; t2 = 0x2222; t3 = 0x3333;,以Rn为目的操作数的指令,MOV Rn ,A MOV Rn ,direct MOV Rn ,#data,课堂练习,写出将R2中的内容转到R1中的指令。,以direct为目的操作数的指令,MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data,以寄存器间接地址为目的操作数的指令,MOV Ri,A MOV Ri,direct MOV Ri,#data,16位地址传送指令,MOV DPTR,#data16,DPTR,DPTR是16位的专用寄存器, 用于存放16位地址,后面会详细讲。 它由2个8位专用寄存器组成: DPL (0x82) DPH(0x83) 上述也可写成: MOV DPH,#data MOV DPL,#data,堆栈操作指令,PUSH direct POP direct,课堂练习,将PSW中的内容读入A,下列指令正确的是: (1) MOV A, PSW (2) MOV A, 0D0H (3) MOV R0, #0D0H MOV A, R0 (4) PUSH PSW POP ACC 答: (1) (2) (4),外部RAM传送指令(后面详细讲),MOVX A,DPTR MOVX A,Ri MOVX DPTR,A MOVX Ri ,A,查表指令(后面详细讲),MOVC A,A+PC MOVC A,A+DPTR,字节交换指令,XCH A,Rn XCH A,direct XCH A,Ri XCHD A,Ri ;半字节交换,课堂练习,编写程序,测试字节交换指令和半字节交换指令,算术运算类指令(24条),1,加法指令,ADD A,Rn ADD A,direct ADD A,Ri ADD A,#data ADDC A,Rn ;带进位标志加 ADDC A,direct ADDC A,Ri ADDC A,#data,加法指令说明,所有加法指令都有A参与,且结果存于A中。 加法指令对所有的标志位(Cy、Ac、OV、P)都有影响。,加法指令对标志位的影响,如果有溢出(位7有进位),则Cy=1,否则Cy=0 如果有符号数有溢出(位6有进位,位7没有进位,或者位7有进位,位6没有进位),则OV=1 ,否则OV=0 如果位3有进位(已很少使用,可不学),Ac=1,否则Ac=0,课堂练习,观察下面指令运行后,RAM的变化: MOV A, #0xff ADD A, #0x02 结果:PSW = 0xc1;A = 1 观察下面指令运行后,RAM的变化: MOV A, #0x7f ADD A, #0x02 结果:PSW = 0x44 ;A = 0x81,课堂练习,观察下面指令运行后,RAM的变化: MOV A, #0xff ADD A, #0xff 结果:PSW = 0xc1 ;A = 0xfe 观察下面指令运行后,RAM的变化: MOV A, #0xf0 ADD A, #0x81 结果:PSW = 0x84 ;A = 0x71,课堂练习,下列指令执行后, ,RAM的变化 SETB C MOV A,0x50 ADD A, 0x50 ADDC A, 0x50 答: A = 0xf0,思考,如果1个单元(单字节)用于存放无符号整数(正整数),该单元可存放值的范围是? 答:0255 如果2个单元(双字节)用于存放无符号整数(正整数),该单元可存放值的范围是? 答:065536,例题,双字节无符号加法。,思考,如果用补码表示有符号整数(整数), 1个单元(单字节)可存放值的范围是? 答:-128127,补码,补码的最高位为符号位,“0”,表示正数,“1” 表示负数 下面举几个补码的例子,请大家思考补码是如何表示的: 0xff代表-1 0xf0代表-16 0x80代表-128 0x7f代表+127,思考,连续2个单元(双字节)中,如果存放的是有符号整数, 值的范围是? 答:-3276832767,例题,双字节有符号加法。,课堂练习,编程实现单字节有符号加法,结果存在两个单元中。,增1指令,INC A INC Rn INC direct INC Ri INC DPTR,课堂练习,下面指令执行后,A = ? MOV A, #0x33 INC A 下面指令执行后,A = ? CY = ? MOV A, #0xff INC A,增1指令,增1指令不影响标志位(除P外)。,十进制调整指令,DA A 对压缩的BCD码(一个字节存放2位BCD码)的加法结果进行十进制调整。 BCD码现在已经很少使用。,例题,观察和分析下列指令执行后的结果: MOV R7, #0X50 MOV A, #0X50 ADD A, R7 DA A 最后两条指令合在一起相当于压缩BCD码的加法。 结果为: A = 0;CY = 1,课堂练习,观察和分析下列指令执行后的结果: MOV 0x60,#0x2B MOV 0x61,#0x61 CLR C MOV A,#0x91 SUBB A, 0x60 ADD A, 0x61 DA A 答: A = 0x27; CY = 1,带借位减法指令,SUBB A,Rn ;A = A Rn - Cy SUBB A,direct SUBB A,Ri SUBB A,#data,对标志的影响,如果位7需借位则Cy置1,否则Cy清0; 如果位6借位而位7不借位,或者位7借位而位6不借位,则溢出标志位OV置“1”,否则OV清“0”。 如果位3需借位则Ac置1,否则Ac清0;,课堂练习,观察下面指令运行后的结果: MOV A, #0x00 SUBB A, #0x01 结果:PSW = 0xc0;A = 0xff 观察下面指令运行后,RAM的变化: MOV A, #0x7f SUBB A, #0x80 结果:PSW = 0x84 ;A = 0xff,减1指令,DEC A DEC Rn DEC direct DEC Ri,减1指令,减1指令不影响标志位(除P外)。,乘法指令,MUL AB 积的低字节在累加器A中,高字节在B中。 如果积大于255,则OV置1,否则OV清0。Cy标志总是清0。,除法指令,DIV AB 指令执行后,商(整数)存于A中,余数存于B中,Cy和OV清“0”。 如果B的内容为0(即除数为0),指令执行后,A、B中内容不定,OV置1。,例题,双字节无符号乘法。,逻辑操作类指令(25条),1,逻辑与指令,ANL A,Rn ANL A,direct ANL A,#data ANL A,Ri ANL direct,A ANL direct,#data,思考,下列指令实行后的结果: MOV A, #0x07 MOV R7, # 0xfd ANL A,R7 答:A = 0x05,逻辑或指令,ORL A,Rn ORL A,direct ORL A,#data ORL A,Ri ORL direct,A ORL direct,#data,思考,下列指令实行后的结果: MOV A, #0x07 MOV R7, # 0xfd ORL A,R7 答:A = 0xff,逻辑异或指令,XRL A,Rn XRL A,direct XRL A,#data XRL A,Ri XRL direct,A XRL direct,#data,思考,下列指令实行后的结果: MOV A, #0x07 MOV R7, # 0xfd XRL A,R7 答:A = 0xfa,其它逻辑操作指令,CLR A CPL A RL A RLC A RR A RRC A SWAP A ;高半字节与低半字节互换,思考,下列指令实行后的结果: MOV A, #0x57 SWAP A 答:A = 0x75,控制转移类指令(17条),1,直接跳转指令,LJMP addr16 PC = addr16 AJMP addr11 PC = PC + 2 PC0-10= addr11 SJMP rel PC = PC + 2 PC = PC + rel,间接跳转指令,JMP A+DPTR PC = A + DPTR 该指令用于实现多分支转移,条件转移指令,JZ rel 若A = 0,PC = PC + 2 + rel 若A != 0, PC = PC + 2 JNZ rel 若A != 0,PC = PC + 2 + rel 若A = 0, PC = PC + 2,比较转移指令,CJNE A, #data,rel 若A = data ,PC = PC + 3; CY = 0 若A data ,PC = PC + 3 + rel; CY = 0 若A data ,PC = PC + 3 + rel; CY = 1 CJNE A, direct,rel CJNE Rn,#data,rel CJNE Ri, #data,rel,减1条件转移指令,DJNE Rn, rel Rn = Rn 1 若Rn != 0, PC = PC + 2 + rel 若Rn = 0, PC = PC + 2 DJNE direct , rel,调用子程序指令,LCALL addr16 PC = PC + 3 SP = SP + 1 (SP) = PC7-0 SP = SP + 1 (SP) = PC15-8 PC = addr16 ACALL addr11,返回指令,RET ;子程序返回 PC15-8 = (SP) SP = SP - 1 PC7-0 = (SP) SP = SP - 1 RETI ;中断程序返回 除上述功能外,还清除了中断响应时被置1的内部中断优先级寄存器的中断优先级状态,空指令,NOP PC = PC + 1,位操作类指令(17条),1,位操作类指令,第三章已作介绍。,第四章课后练习,熟悉全部111条指令。 实现双字节无符号减法。 实现双字节有符号减法。 实现双字节无符号除法。,第五章 伪指令,1,汇编语言程序设计概述,程序是指令的有序集合。 汇编语言程序:用汇编语言编写的程序。 汇编语言的两种基本语句: 指令语句 伪指令语句,伪指令,是控制汇编(翻译)过程的一些控制命令。在汇编时没有机器代码与之对应。,伪指令,ORG /汇编起始地址命令 END /汇编终止命令 EQU /标号赋值命令 DB /定义数据字节命令 DW /定义数据字命令 DS /定义存储区命令 BIT /位定义命令,例题,我们先学习一下七段LED数码管,然后讲关于伪指令的例题。,七段LED数码管,1,七段LED数码管,七段LED数码管的内部结构,七段LED数码管,说明,上图中,“6”,“9”通常更习惯添上一横。,七段LED数码管,当采用共阳极七段LED数码管时,显示“0”的代码是:0xc0 思考:显示“1”的代码是? 思考:显示“2”的代码是?,例题,七段LED数码管+1(C语言)。 七段LED数码管+1(汇编)。 功能:实现1位七段LED数码管显示值自动加一。 硬件图: 打开42 为什么加三极管,下一章详细讲。,DS,定义存储区命令 从指定地址开始,保留指定数目的字节单元作为存储区,供程序运行使用。 例如: TABEL:DS 10 表示从TABEL代表的地址开始,保留10个连续的地址单元。,BIT,位定义命令 例如: LED0 BIT P1.0 功能是把P1.0的位地址赋给变量LED0 。,课堂练习,在最右边的数码管上实现:七段LED数码管+1。 在最右边的数码管上实现:光标循环转动。,第六章 输出口的应用,1,第六章输出口的应用,输出口的内部结构 蜂鸣器 三极管 让蜂鸣器发出声音 让蜂鸣器发出音乐 多个七段LED数码管组合 动态显示技术 继电器,P1口内部结构回顾,1,单片机P1.x的内部结构,30k,P1.x的内部结构,P1.x主要由1个D锁存器,两个三态门,1个上拉电阻(约30K)和1个场效应管组成。 可实现的功能:写引脚,读引脚,读锁存器。,P1.x的D锁存器,D锁存器的工作原理。 D: 接内部数据总线(共8根)中的1根 CL:由“写RAM”控制总线 + 地址总线共同得到锁存信号。,写引脚举例,指令:MOV 0x90, #0xfe CPU端: CPU将#0xfe送内部数据总线 CPU将#0x90送地址总线 CPU给“写RAM”控制总线控制信号 P1.0引脚: D锁存器的D端得到信号“0” D锁存器的CL端得到上升沿信号 D锁存器的/Q端锁存为信号“1” 场效应管导通,P1.0引脚呈现电压0,AT89S51引脚的驱动能力,当引脚流过的电流过大时,容易引起单片机工作不稳定,甚至损毁。 AT89S51引脚的驱动能力: P0口-P3口的每个引脚: 10mA P1口- P3口的8个引脚合计: 15mA P0口的8个引脚合计: 26mA,STC89C52引脚的驱动能力,STC89C52引脚的驱动能力: P0口的每个引脚: 12mA P1口-P3口的每个引脚: 6mA 参见44P62,其它输出口的内部结构,2,其它输出口的内部结构,当作为输出口使用时,P2口、P3口的内部结构同P1口完全相同。 P0口当作为输出口使用时,同P1口的区别只是:没有上拉电阻。,单片机P0.x口的内部结构,蜂鸣器,1,蜂鸣器,蜂鸣器分为有源蜂鸣器和无源蜂鸣器。这里的“源” 是指震荡源。 有源的一通电就会叫; 无源的必须用频率为1K5K的信号才能鸣叫。 蜂鸣器的内阻约为几十R,驱动电压一般1.5V-15V都可以。,有源蜂鸣器,无源蜂鸣器,学习板上的蜂鸣器,学习板上是无源蜂鸣器 用万用表测量学习板上无源蜂鸣器的电阻。,思考,如果给无源蜂鸣器引脚接5V电源,蜂鸣器流过的电流为多大? 可以用单片机引脚直接驱动吗? 回答:不可以,电流太大。 一般采用三极管驱动蜂鸣器。 打开参考资料42,看看学习板上蜂鸣器的电路图。,三极管,1,三极管的管脚,三极管的特性曲线,三极管的特性,3个区域:截止区、放大区、饱和区 截止区(VBE 0.7V ):关断状态 (IC=0) 放大区:电流被控状态(IC=IB ) 饱和区:导通状态 举例:三极管开关电路(发射极接1K电阻,基极接100K电阻;将100K电阻降为1K),思考,学习板蜂鸣器电路中三极管IB约为多大? 学习板蜂鸣器电路中三极管ICE约为多大? 三极管允许的最大ICE是多少? 参考13,对13的补充,5551 NPN 160V 600mA 625mW 300MHz 放大倍数30-250 5401 PNP 150V 600mA 625mW 300MHz 放大倍数50-240,让蜂鸣器发出声音,1,例题,利用学习板实现:无源蜂鸣器发出声音。,声音1P240,音频的范围:20HZ200kHZ 人耳辨认的声音: 20kHZ,课本中的蜂鸣器驱动电路,1,驱动电路11P39,说明,同学习板不同的是增加了泄放电阻。 泄放电阻的作用:快速释放BE间储存的少数载流子,使三极管快速关断。 课后练习(选做):熟悉三极管的结构和原理,理解泄放电阻的作用。 思考:上图基极电流是多大? 答:约1mA(4.3/3.3k -0.7/3.3k),驱动电路21P39,说明,思考:左图电阻上的电流是多大? 答:(5v-0.7v-0.7v)/31k 思考:左图用1个三极管可以吗? 答:不可以,驱动能力不够 达林顿管:2个9013组合 左图不能用于P0口,为什么? 右图可以用于P0口。,达林顿管,ULN2003芯片14-15,如果电路中使用的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园安全教育日主题班会
- 水利水电工程新项目评审试题及答案
- 2025年中级经济师重要考点试题及回答
- 线护理工作总结与改进计划
- 在c语言期末考试试题及答案
- 孵化跳水测试题及答案
- 医疗机构考试试题及答案
- 钓螃蟹面试题及答案
- 主管工作中的数据分析利用计划
- 学校环境中的艺术装置设计计划
- 2025年下半年山东新华书店集团限公司德州分公司招聘20人易考易错模拟试题(共500题)试卷后附参考答案
- 质量、环境、职业健康安全三合一程序文件
- 学校教辅征订管理“三公开、两承诺、一监督”制度
- 2024-2025公司员工安全培训考试试题及答案典型题
- 2025年全国国家版图知识竞赛(中小学组)题库及答案(共五篇)汇编
- 2025年高考语文作文终极押题03 关于Deepseek(押题理由+作文真题++审题立意+高分范文)(全国)
- 抖音商务BD培训
- 中马钦州产业园管委会笔试试题
- 中药处方培训课件
- (高清版)DB12∕T 934-2020 公路工程资料管理技术规程
- 防火门工程验收单模板
评论
0/150
提交评论