MCS-51单片机学习及其心得
MCS-51单片机学习及其心得
机械电子工程学院09电子(2)班曹小迪201*10330236
201*-201*上学年我们专业开设了MCS-51单片机的原理及接口技术这么专业课程,对于电子专业学生的我们是非常有必要的。单片机是一切自动智能电子产品必须具备的一个不可或缺的控制中枢系统。通俗点讲就是电子产品的“大脑”。所以学习单片机对于做电子设计的我们来说有着远的意义。
MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。
MSC-51的基本组成:
运算器
一、MCS51的CPU由运算器和控制器组成。
运算器以完成二进制的算术/逻辑运算部件ALU为核心,再加上暂存器TMP、累加器ACC、寄存器B、程序状态标志寄存器PSW及布尔处理器。累加器ACC是一个八位寄存器,它是CPU中工作最频繁的寄存器。在进行算术、逻辑运算时,累加器ACC往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。寄存器B主要用于乘法和除法操作。标志寄存器PSW也是一个八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。其每位的具体含意如下所示:控制器
控制器是CPU的神经中枢,它包括定时控制逻辑电路、指令寄存器、译码器、地址指针DPTR及程序计数器PC、堆栈指针SP等。这里程序计数器PC是由16位寄存器构成的计数器。要单片机执行一个程序,就必须把该程序按顺序预先装入存储器ROM的某个区域。单片机动作时应按顺序一条条取出指令来加以执行。因此,必须有一个电路能找出指令所在的单元地址,该电路就是程序计数器PC。当单片机开始执行程序时,给PC装入第一条指令所在地址,它每取出一条指令(如为多字节指令,则每取出一个指令字节),PC的内容就自动加1,以指向下一条指令的地址,使指令能顺序执行。只有当程序遇到转移指令、子程序调用指令,或遇到中断时,PC才转到所需要的地方去。8051CPU指定的地址,从ROM相应单元中取出指令字节放在指令寄存器中寄存,然后,指令寄存器中的指令代码被译码器译成各种形式的控制信号,这些信号与单片机时钟振荡器产生的时钟脉冲在定时与控制电路中相结合,形成按一定时间节拍变化的电平和时钟,即所谓控制信息,在CPU内部协调寄存器之间的数据传输、运算等操作。存储器
存储器是单片机的又一个重要组成部分,每个存储单元对应一个地址,如256个单元共有256个地址,用两位16进制数表示,即存储器的地址(00H~FFH)。存储器中每个存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。存储器的存储单元地址和存储单元的内容是不同的两个概念,不能混淆。(1)程序存储器
程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。
(2)数据存储器
单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用寄存器区。实际使用时应首先充分利用内部存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。因为将来在学习指令系统和程序设计时会经常用到它们。8051内部数据存储器地址由00H至FFH共有256个字节的地址空间,该空间被分为两部分,其中内部数据RAM的地址为00H~7FH(即0~127)。而用做特殊功能寄存器的地址为80H~FFH。(3)特殊功能寄存器
特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。
在学习单片机的基本原理组成的时,充分用到了之前学习的专业基础课包括:电路基础、模拟电子技术、数字电路基础等课程,从而使我们再一次的对上述课程的巩固学习,从新的对知识梳理了一遍更加深刻了对知识的印象,了解到了知识串接的重要性。单片机的指令系统
MSC-51单片机有包括:数据传送指令、算数运算指令、逻辑运算指令、控制转移指令、位操作指令111条,有立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、变址寻址、位寻址7种寻址方式。在学习单片机的指令系统时候我们学习了一种跟机器打交道的比较实用的汇编语言,在这个学习过程是非常有趣的,你可要通过自己编写程序区控制单片机。通过设计可以用单片机制造一些电子产品输入自己设计的程序是它完成我们所需要的功能。
MCS-单片机作为最早的单片机其结构简单,容易较好的让我们初学者入门,而一切所以的后来的单片机的原理都是由MCS-拓展的,所以我们学习MSC-51为我们单片机打下坚实的基础。
扩展阅读:MCS51单片机入门学习心得
MSC51单片机入门学习心得
1、Keil&C51基本知识和技巧:
(1)调试时间之前记得调整晶振频率
(2)程序改过之后要点击“rebuildalltargetfile”才能更新hex文件(3)新建text文件后要保存为“文件名.c”,然后放进工程(4)引用各串口时记得用大写(如“P0”)
(5)用STC-ISP烧程序时,当hex文件进行了更新,需要重新“打开程序文件”(6)用sbit可以给单片机上某个指定I/O口进行定义,如“sbitD1=P0^0”(7)对程序进行调试之前需要进行保存和编译
(8)宏定义#define的格式:#define字符串字符串代表的内容(不需要加分号)(9)如要调用子函数,需在主函数之前进行声明,(声明格式:“函数类型函数名(形
参类型);”,如“voiddelay(unsignedint);”。记得其后要加分号)
(10)主函数里面记得先添加一个大循环while(1){}(11)每当需要放{}的时候记得要成对地放
(12)延时函数一般用嵌套的for()语句来设计,无限循环则一般用while()来实现(13)求反码的技巧:以用8位二进制表示的数00000001为例,求反码只需用1111
1111减去00000001,用十六进制表示即为0xff0x01,相减的结果即为00000001(0x01)的反码
(14)向左循环移位函数“_crol_(变量名,移位的位数)”能够实现二进制数的循环左
移,使用该函数须添加头文件“”
(15)向右循环移位函数“_cror_(变量名,移位的位数)”能够实现二进制数的循环右
移,使用该函数须添加头文件“”
(16)char型变量一个字节(8位二进制),int型变量2个字节(16位二进制),longint
型4个字节(32位二进制)
(17)用C51编程的时候出现“warning”的主要原因:定义出来的变量或者函数在程
序执行过程中无法用到,一般出现了warning也要重新修正程序
(18)用keil编程时,不能在变量声明语句之前加其它语句(C51看作是严格的C语
言)
(19)return语句的作用是退出函数和返回函数值,一个函数内部允许有多个return
函数。如果函数有返回值,则函数的类型不能为Void型
(20)在函数A中被调用的函数B中的break不能对函数A产生作用(21)特殊延时函数:voiddelay(){;;},延时时间大约为5us(22)在keil环境下,需要按两下backspace才能删掉一个中文字
2、单片机硬件知识:
(1)单片机复位管脚RST:复位信号输入端,高电平有效,当输入不少于2个机器
周期的高电平时,单片机复位,内部的程序指针指向0;单片机正常工作时RST加0.5V的低电平电压;RST管脚同时还是单片机的备用电源接入端VPD,当Vdd过低时,单片机接上连接在VPD端的备用电源,用来保证单片机RAM内的数据不丢失
(2)单片机只在上电之后检测计算机是否有传来下载指令,如果有则上电后先从计算机上下载hex文件,然后再运行;单片机上电后则无法对其发送下载指令(单片机只能在上电之后运行之前进行下载)
(3)关于P3总线:P3总线的每一个管脚除了能作为I/O接口,还有另外一个功能。
8个管脚默认为I/O接口,要改变管脚的功能需要对内部寄存器进行设置
P3总线的第二功能介绍:
P3.0串行输入口RXDP3.1串行输出口TXDP3.2外部中断0INT0P3.3外部中断1INT1
P3.4定时器0/外部计数输入T0&P3.5定时器1/外部计数输入T1:能够对管脚输入的方波数(高低电平转换次数)进行计数
(4)30管脚ALE/PROG:单片机正常工作时向外输出周期为六分之一个时钟周期
的方波,用于检测单片机是否正常工作
(5)31管脚EA/Vpp:低电平时单片机只访问外部存储器,高电平时当单片机内部
存储器不够用就访问外部存储器
3、数码管的显示:
(1)数码管的动态显示:利用了人类的视觉停留效应,即一个人正在看某个物体,
如果这个物体消失了,但能够在1mS(0.001S)内重新出现,则人眼会觉得物体没有消失过。则在设计数码管动态显示时,只要保证每位数码管都能在消失后0.01s内重新出现。(每位数码管的发光时间应该尽量长,保证有足够的发光亮度)
(2)在数码管的动态显示中,先改变段选再改变位选能够有效提高各段数码管的清
晰度
3、定时器:
工作模式寄存器TMOD
控制寄存器TCON
(1)
定时器/计数器计数一次的时间约为0.0000011S(2)定时器的工作特征:每12个时钟周期计数一次;计数完成后执行一次定时器
中断,定时器中断其执行的一般是对计时器的重新赋值;
(3)打开定时/计数器中断的语句是“ET0/ET1=1;”,打开总中断的语句是“EA=1;”(4)定时器无法启动的原因:
1、没有打开总中断(EA没有置1)2、没有打开定时器中断(IE没有置1)
3、没有设定定时器的工作方式(以上原因属于定时器初始化失败);4、没有给计数变量count赋初值;5、没有打开定时器(TR没有置1)
(5)需要定时器/计数器计数N次,则给定时器/计数器赋的初值应该是65536-N(6)使用定时器定时比较麻烦,而且定时器的数量有限,通常在需要精确定时的情
况下才用
(7)定时器中不能处理进行太多的数据处理,否则会影响定时的准确性(8)工作模式寄存器(TMOD):
1、GATE:当GATE=0时,TR置1即可启动定时器;当GATE=1时,则需要在外部引脚信号INT=1的条件下把TR置1才能启动定时器2、C/T:定时器/计数器选择位,C/T=1时为计数方式,C/T=0时为定时方式
3、M0M1:工作方式选择位,一般选择M1=0,M0=1,此时定时器工作在16位定时器方式
(9)控制寄存器(TCON):
1、TR:定时器运行控制位,当GATE=0时,TR=1启动定时器,TR=0关闭定时器
2、TF:定时器溢出标志位(与外部中断有关)3、IE:外部中断请求标志位
5、中断:
(1)中断的两种触发方式1、电平触发,中断发生在低电平,除非重新回到高
电平,否则单片机无法返回中断;2、CP脉冲上升/下降沿触发,中断在CP脉冲的上升/下降沿触发,中断响应完之后程序自动返回中断继续执行主程序
(2)外部中断的使用方法(以外部中断0为例):首先必须打开CPU中断和外部中
断,具体在主程序中写入“EA=1;EX0=1;”;然后编写中断后要执行的程序,格式为“void函数名()interrupt0”;设置外部中断触发方式,“IT0=1;”代表脉冲边沿触发,“IT0=0”代表电平触发;IT0,EX0,EA的默认值都为0
(3)8051支持的5个中断源分别为外部中断0、定时器0溢出中断、外部中断1、
定时器1溢出中断和串口中断。对应的中断号为0、1、2、3、4;
(4)中断函数不需要在主函数之前声明6、独立键盘:
(1)使用独立键盘的技巧:如果需要系统按一下按键执行一次指令,则应设定为按
下按键后进入死循环,松开按键后才执行指令,则按键按下的时间不会影响到执行指令的次数,避免了系统的错误工作;同样是针对按一下按键执行一次指令的系统,按下按键后和松开按键后设定约10毫秒的延时能够消除由于振荡而造成的错误执行
(2)消抖一般是延时10ms,是否要进行消抖需要结合具体情况进行分析7、IIC总线:(1)
I^2C总线由两条线组成:SCL(时间线)和SDA(数据线),当SCL为低电平时,SDA的高低电平才能发生变化,SCL为高电平时SDA上的数据被读取,此时SDA上的数据应该保持稳定
(2)
(3)(4)(5)(6)(7)(8)
(起始信号与终止信号)
在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(发送T/接收R),0代表主机发送数据,1代表主机接收数据
当接收器要处理内部中断,无法继续接收数据时,可以先把SCL拉低使发送器暂停工作,等到可以继续接收数据时再释放SCL
用IIC总线传送数据时,stop信号和start信号之间应该有一定的时间间隔。时间间隔太短机器有可能反应不过来
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定
养成良好习惯,数据总线不用的时候要将其释放
IIC总线空闲时,SCL和SDA两根线均为高电平;各器件与SCL、SDA的关系都是线“与”的关系
IIC主机进行读操作时,步骤是:起始信号从机地址+0(主机发送数据)应答从机内部存储单元地址应答再次发送起始信号从机地址+1(主机读取数据)应答读取指定存储单元中的数据非应答终止信号(使用IIC总线的关键是严格按照操作步骤进行操作!)IIC主机发出终止信号之后要隔一段时间才能重新发送起始信号传送数据时从数据的最高位开始传送
数据传送进行到应答位时,要保证应答位时钟脉冲出现后和消失前SDA保持稳定低电平
当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。
无论是读数据还是写数据,读/写完一个字节之后必须添加应答信号
(9)(10)(11)(12)
(13)
8、继电器:
继电器的作用是利用小电流控制大电流,相当于一个电控开关。常用的继电器有五个引脚,其中两个通电后继电器进入“常闭”状态。不通电时继电器处于“常开”状态。
9、时钟芯片DS1302:
用BCD码来存储数据,BCD码的高4位对应一个十进制数的十位,低4位对应十进制数的个位
友情提示:本文中关于《MCS-51单片机学习及其心得》给出的范例仅供您参考拓展思维使用,MCS-51单片机学习及其心得:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。