51单片机中断级别

中断源                                默认中断级别    序号(C语言用)
INT0---外部中断0                   最高              0 
T0    ---定时器/计数器0中断    第2               1
INT1---外部中断1                    第3               2
T1   ----定时器/计数器1中断    第4               3
TX/RX---串行口中断                第5               4
T2   ---定时器/计数器2中断     最低              5
————————————————

定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。

D0~D3为T0定时/计数器的设置,D4~D7为T1定时/计数器的设置 。

GATE  :为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。

GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能 工作。

C/T    :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。

M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。

TCON 定时器控制寄存器

定时器控制寄存器,作用是控制定时器的启、停,标志定时器溢出和中断情况。

TF1  :TF1=1表示T1有中断产生。(Timer Flag,定时器标志位)

TR1  :TR1=1表示T1开始运行。(单片机中T0引脚,需要高低电平的驱动)

TF0  :TF0=1表示T0有中断产生。

TR0  :TR0=1表示T0开始运行。(单片机中T1引脚,需要高低电平的驱动)

IE1   :IE1=1表示INT1有中断产生。

IT1   :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。

IE0   :IE0=1表示INT0有中断产生。

IT0   :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。

外部中断:

IE0/IE1:外部中断请求标志位

当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,

CPU开始响应,处理中断,而当入中断程序后由单片机自动置0.

IT0/IT1:外部中断触发方式控制位          //选择有效信号

IT0/IT1=1:脉冲触发方式,下降沿有效。

IT0/IT1=0:电平触发方式,低电平有效。
————————————————

中断允许寄存器  IE (A8H)

EA    :整体中断允许位;EA=1允许中断。

ET2   :T2中断允许位;ET2=1允许中断(S52才有)。

ES    :串行中断允许位;ES=1允许中断。

ET1   :T1中断允许位;ET1=1允许中断。

EX1   :INT1中断允许位;EX1=1允许中断。

ET0   :T0中断允许位;ET0=1允许中断。

EX0   :INT0中断允许位;EX0=1允许中断。


在程序中,通过设订两个8位寄存器中TH与TL的值,来决定定时值和计数值。TH与TL的计算过程如下:

假设定时器的时间常数为X,定时器的位数为N
定时时间T=(2的N次方-X)12/单片机晶振频率   (例如11.0592MHZ的振荡器频率F=1/11.0592)
N为定时器的工作方式(关于定时/计数器的4中工作方式,以下会有具体介绍):

方式0时,N=13(此为TH为8位,TL为5位)
 方式1时,N=16(此为TH为8位,TL为8位)
 方式2时,N=8(此为TH为8位,TL为0位)                                                                                                                                       方式3时,N=8(此为TH为8位,TL为8位,只适用于T0,且T0被分成两个独立的8位计数器TH与TL)

根据定时时间和工作方式,通过公式:定时时间T=(2的N次方-X)12/单片机晶振频率,计算出时间常数X
把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。

定时器的3种工作方式图解:

工作方式0:

工作方式1:

工作方式2:

工作方式3:

总结定时器的操作步骤如下:

1.选择工作方式(设置M0,M1的值)

2.选择控制方式GATE(为0是只要软件设定好参数即可,为1则需要软件设定参数,且定时器/计数器的中断引脚需要为高电平)

3.确定定时器的工作模式,是定时模式还是计数模式 C/T.

4.给定时器设初值(设置THX与TLX)

5.开启定时器中断(设置ET0或ET1)

6.开启总中断(设置EA的值)

7.定时器/计数器的选择T0/T1(设置TR1或TR0的值)

例:设置一个LED灯每500ms的评率闪烁

#include<reg52.h>
 
sbit led = P1^0;
int i = 0;
 
void timer1_init()
{
    TMOD = 0x10; //定时器0选择工作方式1
    TH1 = 0x4C;     //设置初始值,定时50ms
    TL1 = 0x00; 
    EA = 1;             //打开总中断
    ET1 = 1;         //打开定时器0中断
    TR1 = 1;         //启动定时器0
}
 
void main()
{
    led = 1;
    timer1_init();//定时器1的初始化
    while(1)
    {
        if(i==10)
        {
          led = ~led;
          i = 0; //注意i需要零
        }
    }
}
 
void timer1() interrupt 3
{
    TH1 = 0x4C;     //设置初始值,定时50ms
    TL1 = 0x00;
    i++;
}
¡定时器操作步骤:

选择工作方式(设

¡定时器操作步骤:

选择工作方式(设置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/T)

给定时/计数器赋初值(设置THx和TLx

开启定时器中断(设置ET0或ET1

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/T)

给定时/计数器赋初值(设置THx和TLx

开启定时器中断(设置ET0或ET1)

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

定时器操作步骤

选择工作方式(设置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/

给定时/计数器赋初值(设置THx和TLx)

开启定时器中断(设置ET0或ET1

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0 
————————————————

SCON 串口控制寄存器

SM0、SM1工作方式控制位

SM2:多机通信控制位,1-允许、0-不允许

REN:串行接收允许位。1-允许、0-不允许

TB8:发送数据第九位

RB8:接收数据第九位

TI:发送中断标志位

RI:接收中断标志位

①SM0和SM1 :串行口工作方式选择位 ,两个选择位对应四种通信方式,如下图所示,其中fosc是振荡频率

SM2:多机通信控制位,主要用于方式2和方式3。

若SM2 = 1;则允许多机通信。多机通信协议规定,第9位数据(D8)为1,说明本帧数据为地址帧;若第9位数据为0,则本帧数据为数据帧。当一个89c51(主机)与多个89c51(从机)通信时,所有从机的SM2位都置1,主机首先发送的一帧数据为地址,即某从机号,其中第9位为1,所有的从机接收数据后,将其中第9位数据装入RB8中。各个从机根据接收到的第9位数据(RB8中)的值来决定从机是否再接收主机的信息、若(RB8)= 0,说明是数据帧,则使接收中断标志位RI = 0,信息丢失,若RB8 = 1,说明是地址帧,数据装入SBUF并置RI = 1,中断所有从机,被寻址的目标从机清除SM2,以接收主机发来的一帧数据,其它从机仍然保持SM2 = 1。

若SM2 = 0,即不属于多机通信情况,则接收完一帧数据后,不管第9位数据是0还是1,都置RI = 1,接收到的数据装入SBUF中。在方式0时SM2必须置0。在方式1时,若SM2 = 1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据。

REN:允许接收控制位,由软件置1或清0

REN = 1时,允许接收,相当于串行接收的开关

REN = 0时,禁止接收

在串行通信接收控制过程中,如果满足RI = 0和REN = 1的条件,就允许接收。

TB8:发送数据的第9位(D8)装入TB8中。在方式2或方式3中,根据发送数据的需求由软件置位或复位。在许多通信协议中可用作奇偶校验位,也可以在多机通信中作为发送地址帧或者数据帧的标志位。

RB8:接收数据的第9位,原理同TB8

TI:发送中断标志位,在一帧数据发送完时被置位。在串行发送到停止位的开始时由硬件置位,可用软件查询。它同时也申请中断。TI置位意味着向CPU提供“发送缓冲器SBUF已空”的信息,CPU可以准备发送下一帧数据。串行口发送中断被响应后,TI不会自动清0,必须软件清0.

RI:接收中断标志,在接收到一帧数据后由硬件置位。当RI = 1时,申请中断,表示一帧数据接收结束,并已装入接收SBUF中,要求CPU取走数据,CPU响应中断,取走数据。RI位也必须由软件来清0,。

串行发送中断标志TI和接收中断标志RI是同一个中断源,CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求,所以,在全双工通信时,必须由软件来判别。复位时SCON所有位都清0.

/*
SMOD为PCON的最高位
9600==(2^SMOD / 32)*(T1溢出率)

T1溢出率==11059200/12/(256-TH)

9600=(1/32)*( 11059200/12/(256-TH) )

TH==256-11059200/12/32/9600==256-3=0xFD
*/

/*
*****************************************
**函数功能:串口初始化函数
*****************************************
*/
void UART_Init()
{
     
            TMOD = 0x20; //定时器1工作模式2,自动重装8位计数器
            TH1 = 0xfd;
            TL1 = 0xfd;   //定时器溢出时,会自动将高8位中的值赋值给低8位.比特率9600
            TR1 = 1;
            SM0 = 0;
            SM1 = 1;
            REN = 1;
            EA = 1;
            ES = 1;
}
/*
********************************************
**函数名称:串口中断函数
********************************************
*/
void UART() interrupt 4
{
    if(RI == 1)        //如果接收到计算机发的数据
        {
            num = SBUF;  //取出数据
            num++;       
            RI = 0;       //清除标志位
            SBUF = num;  //把数据加1后再发送给计算机
        }
        if(TI == 1)    //如果发送完毕
        {
            TI = 0;       //清除标志位
        }
}
————————————————

PCON 电源控制位寄存器

电源控制位寄存器PCON中只有SMOD位与串口工作有关,如下图所示

SMOD:波特率倍增位。在方式1、2、3中,当SMOD = 1时,波特率提高一倍。

51单片机定时器TMOD与TCON、SCON相关推荐

  1. 51单片机定时器(T0/T1)的使用与配置流程

    第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...

  2. 51单片机定时器/计数器(定时器中断)

    51单片机定时器/计数器(中断系统:定时器中断) 实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1.51单片机定时器原理 定时器实质上就是一个加1 ...

  3. C语言课设项目-51单片机-定时器和计数器

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一.定时器的原理 1.CPU时序的有关知识 2.在学习定时器之前需要明白的 3.定时/计数器的工作原理 ...

  4. 51单片机c语言定时器程序,51单片机定时器设置入门与程序解析

    89C51单片机有两个计数器T0和T1,每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535. 其次.提供给定时器 ...

  5. 51单片机定时器的查询和进入中断处理

    51单片机定时器可用两种方式处理:查询和进入中断处理. 1.查询方式 void Init_T0 (void) 定时器初始化 { TMOD = 0x01;//计时器模式 TH0 = (65535-650 ...

  6. 【51MCU】51单片机定时器中断写MIDI音乐(按键可切换音乐)

    Author: Manba Cople 专业:IOT 说明:记录和输出学习内容 文章目录 前言 定时器 音乐播放 音乐库 总结和展望 前言 程序思路:该程序是利用51单片机的定时器中断,另外根据音符的 ...

  7. 51单片机定时器及其应用(2)(测量脉冲宽度)

    51单片机定时器及其应用(2)(测量脉冲宽度) 上一篇文章讲了如何使用51单片机的定时器功能制作一个简易的数字钟,上次有一个GATE位没有涉及到,因此这次来介绍一下定时器的这个GATE位的应用,也就是 ...

  8. 51单片机定时器及其应用(3)(测量脉冲频率)

    51单片机定时器及其应用(3)(测量脉冲频率) 前面介绍了定时器的一般应用以及定时器GATE位的应用,还有一个位没有介绍,那就是定时器C/TˉC/\bar{T}C/Tˉ位.前面讲解定时器时总是写作定时 ...

  9. 51单片机定时器频率计算

    频率是周期的倒数 51单片机定时器中TH与TL可以改变周期来改变频率. 举例如下 3000us=3ms=0.003s   T=0.003s频率=333HZ    2000us=2ms=0.002s   ...

  10. 51单片机定时器及其应用(1)(时钟功能)

    51单片机定时器及其应用(1)(时钟功能)   STC89C51单片机有2个定时器,叫做定时器0和定时器1,可以用作普通定时器,计数器.普通定时器可以用来进行中断定时,波特率发生等,计数器可以用来对脉 ...

最新文章

  1. MySQL · 引擎介绍 · Sphinx源码剖析(三)
  2. freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
  3. python中csv文件的读写
  4. IOS登陆+注册+抽奖+排行榜
  5. 大数据数据科学家常用面试题_进行数据科学工作面试
  6. vivoiqooz1鸿蒙系统,iQOOZ1评测:vivo新一代性价比神机
  7. 面试官系统精讲Java源码及大厂真题 - 05 ArrayList 源码解析和设计思路
  8. 用python统计图片中的点_用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)...
  9. C#.Net工作笔记017---C#事件的理解以及自定义事件的方法
  10. 只存活了9天,谷歌AI伦理委员会解散了:严重低估员工的战斗力
  11. C# Conditional(方法,属性的忽略)使用
  12. MySQL 如何优化大分页查询?
  13. 一图掌握ICT项目管理流程图【实例】
  14. 火星坐标系、WGS84坐标系、百度坐标系和Web墨卡托坐标系相互转换(基于Python实现)
  15. QCC3071与QCC3072有什么区别?
  16. @ 剑指offer(python)最小的k个数
  17. IIS 配置网站出现500内部服务器错误,显示具体错误信息
  18. 联想TinkPad S3-490 后盖拆机教程
  19. Sql递归(用with 实现递归查询)
  20. 解决android studio编译报错:Failed to find Build Tools revision xx.x.xx

热门文章

  1. PTA离散数学集合论自测(有答案)
  2. matlab生成39码,LaTeX技巧357:MATLAB如何直接生成latex代码?
  3. win8 32位系统上如何运行校园翼讯客户端
  4. 8.2 自制操作系统: risc-v Machine寄存器说明mstatus和mstatush
  5. [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
  6. office批量打印助手(excel批量打印word批量打印)
  7. vb.net 教程 3-8 窗体编程 容器 3 SplitContainer
  8. 三星线刷工具Odin3_V3.12.7
  9. 一篇文告诉你各行业视频监控录像的要求,看看你是否达标
  10. android stagefright