学习51单片机(简单教程) 您所在的位置:网站首页 51系列单片机有 学习51单片机(简单教程)

学习51单片机(简单教程)

2023-05-18 22:32| 来源: 网络整理| 查看: 265

学习51单片机之前你一定要具备的基础知识。

1、C语言基础。

2、数字电路基础。

3、模拟电路基础。

如果你已经具备这些知识那么我们就可以来学习单片机。

学习单片准备工作:1、51单片机开发板一张。

2、电脑一台。

学习的重点:

1、51单片机的最小系统。

51单片你最小系统

①电源系统。

51单片机供电系统

电源是单片机的能量来源,没有它单片机什么也干不了。

②复位系统。

51单片机复位电路

      如果单片机死机,或者想让单片机恢复到初始状态,就需要复位电路进行复位,复位电路有两种,一种是上电复位,也就是说当你给单片机通电的时候单片机就会自动进入初始状态,另外一种就是按键复位,你在任何时候都可以让单片你恢复到初始状态,只需按下该复位按钮。

③时钟系统。

51单片机时钟电路

      通常我们所说的单片机时钟就是我们平时所说的电脑的主频一样,电脑的主频是衡量一台电脑性能好坏的重要 指标,电脑的主频越高,电脑的性能就越好,运行的速度就越快,那么我们单片机也是一样的时钟越高,单片机的运行速度就越快,但是51单片机的时钟也是有限制的不能高于33MHZ,(STC公司的单片机时钟频率可以高达40MHZ)。

51单片机的时钟、状态、机器周期和指令周期

①时钟周期

时钟周期有称为振荡周期是51单片机的最小时间单位,在一个时钟周期内,CPU仅完成一个最基本的动作。

T=1/F F为晶体振荡器的频率,如果晶体振荡器的频率为12MHZ那么T = 0x0000000833333S

②状态周期

在51单片机中把1个时钟周期定义为一个节拍(用P表示),2个节拍定义为一个状态周期(用S表示)。

③机械周期

一条指令的执行过程可以分为若干个阶段,如取指令、读存储器、写存储器等。完成某一个操作的时间称为一个机器周期。通常情况下,一个机器周期由 12个时钟周期组成。

④指令周期

执行一条指令所需要的时间称为指令周期,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同,一般由1~4个机器周期组成。

如:MOV A, Rn (数据传送指令) 就只需要一个机械周期,如果晶体振荡器为12MHZ那么执行该指令就只需要1us的时间, DIV AB (除法指令)就需要四个机械周期,执行该指令就需要4us的时间。

注意:上面讲的51单片机的汇编指令,后面我们写的程序是用C语言,但是C语言最终是会编译成汇编指令,在keil上的debug中可以看得到,后面讲的内容中延时程序就是通过以上的指令周期来进行计算的。

2、点亮一只发光二极管。

①学习单片机的I/O口操作(I/O 是input/output的简写,为输入输出接口)。

51单片机一共有4个并口,分别是P1口,P2口,P3口,P4口,每一个并口有8位,每位可以输入输出1位数据(0/1)。如P1口当中的8位分别表示为(按照从高位到低位排列):P1.7,P1.6,P1.5,P1.4,P1.3,P1.2,P1.1,P1.0。

那我们怎么操作这些I/O口呢 ?就拿P1来举例。

如: P1 = 0X01;那么P1口输出的数据如图:

51单片机每一个I/O口输出的数据

      P1.7 输出0,P1.6 输出0,P1.5输出0,P1.4 输出0,P1.3 输出0,P1.2输出0,P1.1输出0,P1.0 输出1,刚好就对应了十六进制0x01的二进制数据00000001B。51单片机I/O口操作是不是就这么简单。

②发光二极管的接法(共阴极还是共阳极)如图所示:

LED接法

     如过是共阳接法,那么单片机的I/O口就要输出低电平(也就是逻辑0)该LED就能点亮,如果是共阴接法,那么单片机I/O口就要输出高电平(也就是逻辑1)该LED就能点亮。

③代码

点亮一支发光二极管

     能明白以上例子后,我们就可以来做一个流水灯,8只LED分别点亮,间隔时间大概一秒钟,8只LED 接在单片机的P1口,假如该单片机的晶振频率为12MHZ,如图所示。

流水灯

从该电路可知,8只LED为共阳极连接,所以点亮LED的数据就应该如下:

8只LED流水显示数据

3、51单片机的中断系统

在这里一定要理解中断的概念,实际上中断很简单,就是你现在正在做事情,然后你的领导教你帮他做事情,因为这是你领导你不能拒绝所以你只能去帮领导干事情,等你把领导的事情干完了以后,再回来接着你刚刚被领导打断的那里继续做你的事情,这就是中断。中断是单片机当中的一个重要内容,中断具有响应速度快的特点。51单片机(普通)一共有5个中断源,分别是外部中断(INT0)、定时器中断(T0)、外部中断(INT1)、定时器中断(T1)、串口中断(RX TX)。

51单片机终端系统

各中断源优先级的排列和中断序号

各中断源优先级的排列和中断序号

      中断系统中一共有三个寄存器,分别是TCON,IE,IP实际上我们可以把这几个寄存器理解为设置开关(这些寄存器没有我们想象中那么复杂,它就是一个开关。为0就断开,为1就闭合),大家从上面的图都可以看出你要使用哪一个中断,你就要把相应的的开关打开。

例如我要使用外部中断(INT0)那么我首先要先择它的触发方式IT0(当IT0=0为电平触发,IT0 = 1为下降沿触发)在这里围殴选择下降沿触发,所以IT0 = 1;接下来就是EX = 1;EA是属于总中断开关所以EA = 1,接下来就是PX0,PX0为优先级选择,为1选择高优先级,为0选择低优先级,在这里我们就选则高优先级,所以PX0 = 1,这样设置先来外部中断(INT0)就可以使用了。

代码: 例子:

51单片机外部中断实验

如图所示,在单片机P1口上接了4只发光二极管LED,都在单片机P3口的P3.2/INT0和P3.3/INT1上分别接了一个按钮开关(按钮就是你按下去就打开,松手就断开,游戏机手柄上面的按钮就是这样)按钮的另外一端接的是地,当按钮按下后单片机P3.2引脚电平就被拉低,单片机就能检测出引脚的电平变化,从而做出相应的相应。

注意:这里只用外部中断0(INT0),外部中1不用,会操作INT0那么INT1也就会操作了。 要求:当按钮P1按下,全部点亮LED,当按键松开LED做流水显示。

当没有按下按钮,单片机会一直运行while循环里面的内容,当按钮按下后,单片机会立马执行int0()这个函数里面的内容,该函数里面的内容执行完毕后,有会回到主函数中while循环继续执行。

知识点: 在单片相应中断之前,单片机会自动保存当前while循环里面的运行状态(如:现在是点亮的第4只LED,那么单片机就会保存下来),在运行完中断代码后回来就会接着上次被打断的地方继续执行。

4、定时器/计数器

顾名思义就是定时,计数用的,51单片机(普通)一共有两个定时器(定时器T0和定时器T1)

我们要使用51单片机的定时器/计数器,我们就要对定时器/计数器进行设置,设置定时器/计数器一共有两个寄存器,一个是TMOD(模式控制寄存器),一个是TCON控制寄存器。

TMOD的高四位用于控制定时器T1,低四位用于控制定时器T0。在我们后面的举例中我们都是用定时器T0。

TMOD寄存器

GATE:若GATE=0,只需要把TR1/TR0设置位1就可以启动相应的定时器,若GATE = 1,则还需要将外部中断(INT0/INT1)引脚输入为高电平,才可以启动相应的定时器。

C/T:选择定时器还是计数器,C/T = 0定时模式,C/T = 1计数模式。

M1,M0:为定时器/计数器工作方式选择。

定时/计数器工作方式

         在后面的举例中都用定时器T0并且都工作在方式1(16位定时/计数器)所以M0 = 1,M1 = 0。由于工作在定时器所以C/T = 0,GATE = 0。

那么在设置TMOD的时候就可以直接设置成:TMOD = 0x01。如下图所示:

TMOD = 0x0,TMOD当中的各位数据TCON寄存器

       我们平时用得最多的是定时器/计数器中断,所以中断标志我们现在可以不管他,TCON里面位是可以进行位操作。 在后面的举例当中我们都是用定时器T0。所以要启动定时器T0,就可以直接操作TR0, TR0 = 1;就表示打开定时器T0,这是定时器T0就开始正常计数,当达到一定的计数值是就会产生中断。

      要想运用定时器,那么还要了解定时器里面的一个最重要的两个寄存器TL0和TH0(计数寄存器)TL0为低8位,TH0为高8位。你可以把计数寄存器理解位一个水缸,当水缸里面的水装满了过后就会溢出,这时候你听到水声,就会马上跑过去关闭水龙头,这个就是定时器中断。当计数寄存器装满后就会发出中断请求,然后CPU就会相应该中断。

      计数寄存器装的最大值位0-65535,当它装满65535就会发出中断请求,如:单片机的晶体振荡器位12MHZ,一个机械周期就为1us,那么计数寄存器就会1us计数一次,以此类推当计数寄存器计数到65535是,就相当于65535us,也就是65535us定时器就会发出一次中断请求。但是在我们做的项目中不需要这么长的时间响应中断,比如50000us相应一次中断,那我们怎么办呢?我们可以装入初值,65535-50000 = 15535,其中50000就为我们需要定时的时间,15535就为我为我们提前转入计数寄存器中的值,就我们有一个18升的水缸,我需要装6升水这个水缸就满了,所以我们提前就要往水缸里装如12升水。上面王计数寄存器装入初值也就是这个意思。这里我们要把15535十进制数转换成十六进制数,其中把高8位装入TH0中,把低8位装入TL0中。15535转换成十六进制为0x3caf,TH0 = 0x3c TL0 = 0xaf。

例子:用定时器中断操作流水灯,间隔时间为1S。

T0定时器中断实验

学完以上内容,你的单片你就基本入门,接下来你就要对上面内容进行强化练习,然后在学习进阶内容,比如独立按键操作,矩阵键盘操作,液晶显示操作,电机调速(PWM),UART串口通信,IIC总线,SPI总线等等。

写得不好,文章中如有错误,还请大家指出,谢谢大家。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有