C51单片机学习(二):中断系统和定时器

发布者:科技创客最新更新时间:2018-12-19 来源: eefocus关键字:C51  单片机  中断系统  定时器 手机看文章 扫描二维码
随时随地手机看文章

中断系统:

中断概念

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); 

CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 

待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。


中断的结构图

 这里写图片描述 

其中一些说明: 

1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降 

沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时, 

中断标志IE0(TCON.1)置1,向CPU申请中断。 

2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。 

3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。 

4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。 

5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。


TCON的中断标志

 这里写图片描述 

说明: 

T0(TCON.0),外部中断0触发方式控制位。 

当IT0=0时,为电平触发方式。 

当IT0=1时,为边沿触发方式(下降沿有效)。 

IE0(TCON.1),外部中断0中断请求标志位。 

IT1(TCON.2),外部中断1触发方式控制位。 

IE1(TCON.3),外部中断1中断请求标志位。 

TF0(TCON.5),定时/计数器T0溢出中断请求标志位。 

TF1(TCON.7),定时/计数器T1溢出中断请求标志位。


SCON中断标志

 这里写图片描述 

RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。 

TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。


关于优先级:

51单片机中断优先级: 

CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。 

正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。 

正在进行的低优先级中断服务,能被高优先级中断请求所中断。


为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。


同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:


这里写图片描述

中断响应条件:

中断源有中断请求; 

此中断源的中断允许位为1; 

CPU开中断(即EA=1)。


实例(外部中断0)

 /*以下设置的时候数码管开始从0到f循环,当触发中断(杜邦线将GND和P3^2口连接)

 此时因为IT0默认为0,所以是低电平触发,由此LED灯亮,松开时,灯灭。将IT0置为1是,即下降沿有效

 此时将P3^2引脚杜邦线接入瞬间LED灯亮,继续接入或者拔开灯灭*/

#include

#define uint unsigned int 

#define uchar unsigned char 

sbit dula=P2^6;

sbit wela=P2^7;

sbit d1=P1^0;

uchar num,flag = 0;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint z);

void init(){

    EA=1;//开总中断

    EX0=1;//开外部中断0

    //IT0=1;   //寄存器内默认全为0,IT0为1则是下降沿有效,否则是低电平有效,可以通过杜邦线和GND接口连接达到测试目的

    //TCON=0x01;  //和上面一句含义一样,具体看上面TCON的说明

    wela=1;//11111110   //位选第一个数码管

    P0=0xfe;

    wela=0;


}

void main(){

    init();

    while(1){

        for(num=0;num<16;num++){

                d1=1;

                dula=1;

                P0=table[num];

                dula=0;

                delay(1000);    

            }


    }

}


void delay(uint z){

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--); 

}


void exter0() interrupt 0{ //中断控制的函数

    d1=0;

}


定时/计数器

51单片的定时器可以使用1.软件中断(就是上面的delay函数),2.可编程芯片定时,3.时基电路定时(定时值和范围不能由软件控制)


这里主要阐述第二种:


定时/计数器的工作原理

加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 

可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。


设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。 

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s。 (了解下就好)


50c51主要由两个寄存器TMOD,TCON控制


TMOD

 这里写图片描述 

GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。(一般置为0) 

:定时/计数模式选择位。 =0为定时模式; =1为计数模式。 

M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。


定时器4种工作方式

这里写图片描述

TCON

 这里写图片描述 

TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。 

TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。 

TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。 

TR0(TCON.4):T0运行控制位,其功能与TR1类同。


关于定时器的初始化

推荐:定时器的初始化


定时器实例(定时器工作方式1)


//关键:init函数和中断的time0函数

//通过定时器控制数码管从0到f循环显示

#include

#define uint unsigned int 

#define uchar unsigned char 

sbit dula=P2^6;

sbit wela=P2^7;

sbit d1=P1^0;

uchar num,num1;tt;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint z);

void init(){    

    TMOD=0x1;//设置定时器0为工作方式1

    TH0=(65536-10000)/256;

    TL0=(65536-10000)%256;

    EA=1;//开总中断

    ET0=1;//开定时器0中断

    TR0=1;//启动定时器0

    wela=1;//11101010

    P0=0xea;

    wela=0;

    dula=1;

    P0=0x3f;

    dula=0;

}

void main()

{

    num=0;

    tt=0;

    init();

    while(1){

        if(tt==100)

           {

                tt=0;

                num++;

                if(num==16)

                num=0;

                dula=1;

                P0=table[num];

                dula=0; 

            }

    }

}


void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--); 

}


void time0() interrupt 1

{

    TH0=(65536-10000)/256;

    TL0=(65536-10000)%256;

    tt++;

}


声明

大多数代码实例借鉴郭天祥的视频,我只是添加了部分注释,看起来更清晰。^-^



关键字:C51  单片机  中断系统  定时器 引用地址:C51单片机学习(二):中断系统和定时器

上一篇:51定时器中断程序编写
下一篇:单片机 uart中断处理函数例子

推荐阅读最新更新时间:2024-03-16 16:20

便携式胰岛素泵的系统设计策略
胰岛素泵 是一种便携式医疗设备,在美国,其设计和制造由美国食品与药物管理局(FDA)监管。这意味着:其设计和建造必须遵循准确规定的流程;其性能必须满足严格的文档化管理、开发测试、生产测试和现场维护等要求。如图1中设备,还必须包含全面的自检和故障显示功能,从而需要额外电路以及使用具有自检功能的器件。 便携性 胰岛素泵是可佩戴的设备,因此,必须非常小而轻(图2)。其体积通常约2×3×0.75英寸(5.7×7.6×1.9厘米),重量为2和4盎司(57克和113克)。这些外形要求,使 设计师 在选择器件时,会优先考虑其大小和功耗。 图1:胰岛素泵系统功能框图;美信可提供蓝色部分的解决方案。
[医疗电子]
便携式胰岛素泵的系统设计策略
基于AT89S52单片机和ATF1508AS可编程逻辑器件实现LED显示屏的硬件设计
0 引言 LED显示屏主要由电流驱动电路及LED点阵阵列、控制系统和PC端管理软件三部分构成(图1)。控制系统负责接收、转换和处理各种外部信号,并实现扫描控制,然后驱动LED点阵显示需要的文字或图案。控制系统作为LED显示屏的核心部分,直接决定了显示屏的显示效果和性能的优劣。本文详细分析采用Verilog HDL对ATF1508AS进行编程,实现双口RAM访问和产生LED点阵驱动电路所需的各种时序信号。 1 LED显示屏的基本结构及关键技术 本系统设计中,控制系统采用单片机+CPLD的方案来实现,整个控制系统可分为:信号接收及处理模块和CPLD的扫描控制模块和LED点阵驱动模块,如图1 所示。本系统的关键技术是使用双口
[单片机]
基于AT89S52<font color='red'>单片机</font>和ATF1508AS可编程逻辑器件实现LED显示屏的硬件设计
采用ARM9微控制器实现上层控制算法解析方案
  引言   在很多嵌入式控制系统中,系统既要完成大量的信息采集和复杂的算法,又要实现精确的控制功能。采用运行有嵌入式Linux操作系统的ARM9微控制器完成信号采集及实现上层控制算法,并向 DSP 芯片发送上层算法得到控制参数,DSP芯片根据获得的参数和下层控制算法实现精确、可靠的闭环控制。   1 多机系统组成   该多机控制系统以ARM9微控制器s3c2440为核心,采用I2C总线挂载多个DSP芯片TMS320F28015作为协控制器,构成整个控制系统的核心。   1.1 S3C2440及TMS320F28015简介   Samsung公司的处理器S3C2440是内部集成了ARM公司ARM920T处理器内核的32位微控制器,
[单片机]
采用ARM9<font color='red'>微控制器</font>实现上层控制算法解析方案
七彩灯综合C程序
/*此程序是一款普通的彩灯,它的功能主要有四种模式: 第一种模式:开机四种颜色以0.5秒速度循环1次,然后 在白颜色上停止循环,即显示白光 第二种模式:按下功 能键后,它以1秒速度四种颜色不停的循环 第三种模式: 当按键按下后,它会记住第二种模式的颜色,比如第二种 模式现在亮得是绿色,你按下按键时,它会先闪一下,然 后在绿颜色上停下来 第四模式:当你再按下开关时,它 自动回到模式一下,(当然还可以写出三种颜色) 本程序是第一个版本,第二版功能更强大参见: http://www.51hei.com/mcu/1531.html */ #include reg52.h #define uint unsigned int #defi
[单片机]
乐鑫科技全新WiFi MCU芯片助力物联网高速安全连接
乐鑫科技举行科创板上市酒会及新品发布会,公司正式发布了新一代WiFi MCU芯片ESP32-S2。该产品具有超低功耗、优异的射频性能和高安全性等特性,适用于从消费领域到工业用例的各种应用。此外,它的计算能力和内存可扩展性也使其适合于简单的边缘机器学习的应用程序。   作为科创板首批上市企业之一,乐鑫科技于7月22日登陆科创板。在本次发布会上,来自复星、赛富等的投资人均对乐鑫科技的发展前景表示乐观看好。   新产品性能优越   ESP32-S2是一款安全可靠的低功耗、高集成的2.4 GHz Wi-Fi 系统级芯片(SoC),搭载 Xtensa® 32-bit LX7 单核处理器,工作频率高达240MHz,可支持Wi-Fi
[嵌入式]
单片机能做什么创意小发明?新手怎么制作单片机智能小车?
曾经,有一个老板跟我说,很羡慕我们这些做技术的。 我们都感觉有点讽刺,一个身价上千万的人,羡慕我们这些年收入不到20万的。 不过从他的说话方式来看,似乎是认真的,他说他也喜欢研究技术,只是年纪大了,学不动了。 不管你身在处于什么身份,相信每个男人心中啊,都有一个创客梦。 先不说通过技术去改变世界了,大多数人都是普通人,不是托尼史塔克。 不过即便是自己动手DIY一个小发明,写个小程序,烧录进去,让这个小玩意按照自己的程序逻辑去执行,也是成就感满满的。 当初,我也是这样被骗进单片机开发这个行业的,没想到一入坑就10年。 这10年技术生涯,虽然没让我过上衣食无忧的生活(这个完全是自己的问题),但是至少我现在想做一个什么小发明还是游刃有余
[单片机]
MCS51系列单片机软件的抗干扰技术中的误区介绍
单片机中存在这样一种广泛流传的误解:在MCS-51系列单片机中,只要用指令使程序从起始地址开始执行,就可以复位单片机,摆脱干扰。通过一个简单的实验,揭示了软件复位的可靠方法。 有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系统单片机虽然没有复位指令,但片内集成了WATCHDOG电路,故抗干扰也不成问题。而普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又不带硬件WATCHDOS,如果没有外接硬件WATCHDOG电路,就必须采用软件抗干扰技术。常用的软件抗干扰技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位就是用
[单片机]
适合单片机裸机的开源软件框架:Zorb
很多时候,做单片机项目,会因为性能和内存资源的限制,没办法运行一些“大型”的通用框架,这个时候,一些轻量级的软件框架有显得尤为重要了。 这里就给大家分享一款一款适合单片机裸机的开源软件框架:Zorb Zorb简介 Zorb Framework是一个基于面向对象的思想来搭建一个轻量级的嵌入式框架。 搭建Zorb Framework的目的是为在不能运行Linux的芯片上快速开发应用,不用反复造轮子。 Zorb Framework的初步设计功能有: 1、时间系统功能zf_time 2、环形缓冲区功能zf_buffer 3、列表功能zf_list 4、状态机功能zf_fsm 5、事件功能zf_event 6、定时器功能zf_time
[单片机]
适合<font color='red'>单片机</font>裸机的开源软件框架:Zorb
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved