首页 > 编程知识 正文

51单片机基础知识总结,单片机的中断系统

时间:2023-05-03 11:54:41 阅读:9219 作者:333

这篇文章主要针对的是单片机编程中的中断知识。单片机编程其实很简单(就是C语言编程),难的是各种外围器件的学习,以及看懂芯片手册和对芯片进行初试化的操作。因为单片机编程中常常涉及到中断,要对各种寄存器进行操作。所以我统一罗列出来,方便后面编程时查阅。本篇不介绍单片机编程中的基本知识(包括c语言知识、单片机基础知识)。

文章目录1、单片机时钟定时单位(晶振周期/节拍、状态、机械周期、指令周期) 2、单片机最小系统结构5个部分)单片机、晶振电路、复位电路单片机管脚解释)单片机的40个管脚大致分为电源、时钟、控制和I/O管脚。 一、中断概述: 1,89c 51的中断系统有5个中断源,有2个优先级,可以实现两级中断嵌套。 2、中断寄存器(1)定时器控制寄存器TCON:axdbbt与定时器有关,低位与外部中断有关()串行端口控制寄存器SCON(3)允许中断寄存器ie )4)中断优先级控制寄存器计数器中断)使用的寄存器)1)寄存器的详情:【注】:作为编程中计时器/计数器的使用方法的外部中断:使用的控制寄存器TCON (主要是低位4位,高位4位与计时器有关) )

注意:

Stc89c51/52单片机的P0端口是开放泄漏输出,用作普通I/O端口时,需要增加上拉电阻,否则不能输出高电平。 (注: P1、P2、P3均为准双向输出)

其中上拉电阻的作用: 1、加大普通IO端口的驱动能力。 2、发挥限流作用。 3、抗电磁干扰。 1、单片机时钟定时单位(晶振周期/拍节、状态、机械周期、指令周期);

2、单片机最小系统结构五部分:单片机、晶振电路、复位电路、电源电路、下载电路

3、单片机引脚解释:单片机40个引脚大致分为电源、时钟、控制和I/O引脚。 (电源) VCC -芯片电源,5V连接; VSS -接地端; 时钟: XTAL1、XTAL2 -晶体振荡电路的反相输入端子和输出端子。 控制线(控制线共4条,) ALE/PROG )地址锁存允许/片上EPROM编程脉冲 ALE功能)用于锁存P0端口发送的低位8位地址 PROG功能)片上安装EPROM的芯片 PSEN )外ROM读门通信号。 RST/VPD :复位/备用电源。 rst(reset )功能:复位信号输入端子。 VPD功能: Vcc电源关闭时,连接备用电源。 ( EA/Vpp )内外ROM选择/片上EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:芯片内有EPROM芯片,在EPROM编程中加载编程电源Vpp。 (I/O线80C51上共有4个8位并行I/O端口,P0、P1、P2、P3端口,共计32针。 P3端口还具有用于特殊信号的输入输出和控制信号(控制总线)的第二功能。 一、中断概述:

1,89c 51的中断系统有5个中断源,2个优先级,可以实现二次中断嵌套。

! 注意:如果程序包含中断,则此图非常有用。 初始化中断时,基本上需要从该图的左向右进行寄存器的设定。 只有这样中断才能工作。

2、中断寄存器(1)定时器控制寄存器TCON:axdbbt与定时器有关,低位与外部中断有关

(IT0 )外部中断0触发方式控制位。 IT0=0时,电平触发方式(低电平有效)。 IT0=1时,为边缘触发方式(下降沿有效)。 IE0 :外部中断0中断请求标志位。 当Cpu检测到外部中断引脚有中断请求信号时,硬件会自动将IE0设置为1。 注意:如果选择IT0作为边缘触发器,则当CPU响应此中断时硬件将清除IE0位。 如果触发了IT0选择位级别,则中断服务程序需要软件清除IE0。 (IT1 )外部中断1触发方式控制位。 同上IE1 :外部中断1中断请求标志位。 同上TR0、TR1是启动控制计时器0/1的TF0 :计时器/计数器T0溢出中断请求标志位。 开始T0计数后,如果T0从初始值增加1个计数,计数器计数到最上面并发生溢出,硬件会自动将TF0设置为1,向CPU发送中断请求。 当CPU响应此中断时,硬件将清除TF0位。 TF1 :定时器/计数器T1溢出中断请求标志位。 同上)串行端口控制寄存器SCON

SM0、SM1 :串行端口动作方式选择位:

SM2 :多级通信控制位。 只有在串行端口的工作和方式为2/3时,该位才有意义。 注意: SM2=1时,串行端口的动作和方式为2/3。 此时,仅在接收到的第9位的数据为1,即RB8=1时,将8位的数据发送给SUBF,通过硬件设定RI=1来产生中断请求。 否则,将丢弃接收到的8位数据。 然而,如果SM2=0,则尽管接收到的第九数据位是0/1,但高8位数据被发送到SBUF,从而在RI=1处产生中断请求。 REN :允许串行接收位。 在软件中设定REN=1时,启动串行端口接收数据; 如果软件REN=0,则禁止接收。 TB8 )在方式2或方式3中,它是发送数据的第9个,可以由用户软件进行设定。 它可以用作数据的奇偶校验位,也可以在多机通信中用作地址帧/数据帧的标志位。 方式0和方式1没有使用此位。 RB8 :在方式2或方式3中为接收

数据的第9位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。TI:发送中断标志位。在方式0时,当串行发送第8位数据进入缓冲区SBUF时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。RI:接收中断标志位。在方式0时,当串行接收完第8位数据时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。 (3)中断允许寄存器IE:

EX0:外部中断0允许位;//值为0,禁止中断,值为1,允许中断。下面几个都是一样的。ET0:定时/计数器T0中断允许位; EX1:外部中断0允许位;ET1:定时/计数器T1中断允许位;ES: 串行口中断允许位;EA :CPU中断允许(总允许)位。 (4)中断优先级控制寄存器IP:

PS:串行口优先级控制位;1:高优先级,0:低优先级PT0/PT1:定时器/计数器0/1中断优先级控制位;1:高优先级,0:低优先级 PX0/PX1:外部中断管0/1中断优先级控制位;1:高优先级,0:低优先级

注: 默认中断优先级

(5)电源控制寄存器PCON:

SMOD:串行口波特率倍增位。在串口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。系统复位时,SMOD=0。!!注意:如果以相同的波特率,用波特率加倍的方式比不加倍的方式计算的误差小。 二、定时器/计数器篇 1、定时器/计数器中断:用到的寄存器

(1)两个特殊功能寄存器TH0/TH1(高8位)和TL1/TL0(低8位)
(2)控制寄存器TCON(主要是高四位)

TF1:T1溢出中断请求标志位。TR1:T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TF0:T0溢出中断请求标志位。TR0:T0运行控制位。

(3)工作方式寄存器TMOD:高四位是定时器T1工作字段,低四位为T0的工作字段

(1)寄存器每位详解:

——寄存器中第三位 C/T 是定时或者计数模式选择位。值等于0时,计数脉冲来自CPU内部,计数脉冲频率为时钟信号频率的12分频(即一个机器周期),为定时模式;值等于1时,计数脉冲来自与p3.4或p3.5相接的外部频率,此时为计数模式。

——GATE是启动方式控制位,值为1,则定时器启动由TCON寄存器中的TR0/TR1位和芯片的引脚INT0或INT1共同控制(双保险)。而值为0,则只受TCON寄存器中的TR0/TR1位控制。
*
注:定时器初值计算方法:TC=M-(T/TCY),其中M:定时器/计数器的最大次数(与工作方式有关),T:我们需要定时器定时的时间。TCY:计数器计数脉冲的周期(晶振周期的12倍或者一个机器周期,若单片机晶振为12Mhz,则机器周期=((1/12Mhz)12=1us)。TC:定时器需要预置的初值,当然从公式中知当TC=0时,即从预置初值0开始计数,定时时间T最大,最大TMAX为TCTCY。

**从而可以得出各种工作方式定时器的最大定时时间为:
工作方式0:Tmax=2^13 * 1us=8.192ms //其中的1us就是计数脉冲周期(机器周期)
工作方式1:Tmax=2^16 * 1us=65.536ms
工作方式2/3:Tmax=2^8 * 1us=0.256ms

所以在编程时,我们选择定时器时,要看是否在当前所选工作方式的量程内,不要出现这种情况:你要我1ms进入一次定时中断,而你又选择的工作方式2/3,这样超过它的量程。这样是不行的。
**

【注】:在编程中定时器/计数器的使用方法: 1.对TMOD赋值,以确定T0和T1的工作方式。2.根据要定时的时间,由公式计算初值,并将其写入TH0、TL0或TH1、TL1。3.中断方式时,打开定时器中断(ET0/ET1)及总中断EA。4.使TR0或TR1置位,启动定时/计数器定时或计数 三、外部中断篇 1、外部中断:用到的控制寄存器TCON(主要是低四位,高四位与定时器有关):

1、IT0:外部中断0触发方式控制位。当IT0=0时,为电平触发方式(低电平有效)。当IT0=1时,为边沿触发方式(下降沿有效)。
2、IE0:外部中断0中断请求标志位。Cpu检测到外部中断引脚存在中断请求信号时,硬件自动将IE0置1。注意:当IT0选择为边沿触发时,当CPU响应此中断时由硬件将IE0位清零。若IT0选择位电平触发时,则需要在中断服务程序中由软件将IE0清零。
3、IT1:外部中断1触发方式控制位。同上
4、IE1:外部中断1中断请求标志位。同上

注:编程时外部中断的使用方法 1、设置IT0或IT1确定外部中断的触发方式;2、打开外部中断(EX0/EX1)及总中断EA。 四、串口中断篇 1、串口中断:用到的相关寄存器

(1)串口控制寄存器SCON,每位具体说明见前面分析。

(2)电源控制寄存器PCON,分析见前面。

注意:
1、 方式0总共8位(8位数据位);方式1总共10位(1位起始位、8位数据位、1位停止位);方式2和方式3总共11位(1位起始位、9位数据位(包括有一位TB8或RB8,需提前置好)、1位停止位)。如果有停止位,在串口调试助手中就要选择!
2、 串口中双方通信,就要确定好一个传送速率(波特率),波特率的计算要涉及到定时器的参与。所以在串口中断编程中既要设置串口的寄存器,还要设置选择的定时器的寄存器。
3、 一个小知识:除了往SBUF中发送数据给串口外,还可以使用printf的方式(前提引入#include<stdio.h>的头文件)

4、 编程操作流程:

a)设置串口的工作方式(SCON)。b)设置计数器工作方式(TMOD)。c)确定波特率是否加倍(PCON)。d)根据波特率的计算公式,求出定时器/计数器的计数初值(TH0、TL0或TH1、TL1)。

5、 中断方式时,打开定时器中断(ET0/ET1)及总中断EA。
6、 使TR0或TR1置位,启动定时/计数器定时或计数。

实例

注:上图中,因为定时器工作在方式2/方式3时,是8位自动重装,通常对TLX、THX初始化时装入相同的定时器/计数器初值,以便以相同的初值进行连续计数/定时。

2、波特率计算方法:

串口通信中引入:波特率的计算与串口的工作方式有关。

方式0的波特率 = fosc/12 //(fosc为晶振频率)方式2的波特率 =((2*SMOD)/64)· fosc 方式1的波特率 =((2*SMOD)/32)·(T1溢出率)方式3的波特率 =((2*SMOD)/32)·(T1溢出率)T1 溢出率 = fosc /{12×(256-X)} //X表示定时器/计数器1的计数初值。

注:当串行口工作工作于方式1或3时,通常以定时器/计数器1工作于方式2,即8位重装计数初值方式,作为串口工作于方式1或3的波特率发生器。

溢出率为溢出周期的倒数。若计数初值为X(即从X开始计数),那么以工作在方式2的8位自动重装计数,则可以计数256,从而需要计数的位数为:256-X。这么多位数需要多少个机器周期呢? 1/fosc易知为一个晶振周期(也就是拍节),12/fosc也就是一个机器周期(因为单片机中一个机器周期为12个晶振周期)。所以溢出的周期为:(12/fosc)*(256-X)。溢出率也就出来了。

通常使用定时器/计数器1工作与方式2作为波特率发生器,串口工作与方式1。是因为该方式具有自动重装计数初值功能,可避免反复重装计数初值带来的定时误差,使波特率更加稳定。按上述公式可以推得计数初值为:X=2^8-((fosc *2^SOMD)/(32 * 12 * 波特率))

小知识点:
无源和有源蜂鸣器的区别:

无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
正是根据无源蜂鸣器的这一特点,可以通过控制给蜂鸣器引脚输入高低电平的时间,使蜂鸣器发出“哆啦咪法索拉稀”的声音,而有源蜂鸣器则不可以控制音频。

CH340芯片–>用于usb转串口;DS1302–低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

未完待续!。。。。。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。