我们首先需要了解什么是中断?
中断是指CPU在执行某一过程中由于外界原因必须暂停现在的事情,处理别的事情,处理完了再回去执行暂停的事情。
中断的优点?
1.分时操作。
2.实时响应
3.可靠性高
中断中用到的寄存器:
中断优先级寄存器IP
IP寄存器:
作用是选择优先级的,解决中断优先级问题。
PX0:外部中断0优先级设定位
PT0:定时/计数器T0优先级设定位
PX1:外部中断0优先级设定位
PT1:定时/计数器T1优先级设定位
PS :串行口优先级设定位
PT2:定时/计数器T2优先级设定位
中断允许寄存器IE
IE寄存器:
EX0:外部中断0允许位;
ET0:定时/计数器T0中断允许位;
EX1:外部中断1允许位;
ET1:定时/计数器T1中断允许位;
ES :串行口中断允许位;
EA :CPU中断允许(总允许)位。
52单片机中一共有6个中断源,他们的符号,名称,及产生的条件分别是:
INT0—外部中断0,由P3.2端口引入,低电平或电平下降沿引起
INT1—外部中断1,由P3.3端口引入,低电平或电平下降沿引起
T0—定时器/计数器0中断,由T0计数器计满回零引起
T1—定时器/计数器1中断,由T1计数器计满回零引起
T2—定时器/计数器2中断,由T2计数器计满回零引起
TI/RI—串行口中断,串行端口完成一帧字符发送/接收后引起
中断优先级顺序由高到低:
外部中断0(INT0)->定时/计数器0(T0)->外部中断1(INT1)->
定时/计数器1(T1)->串行口(R1或T1)->定时/计数器2(T2)
首先响应的是优先级高的中断请求,正在中断的不会被新的中断请求打断,正在进行低优先级中断服务,能被高优先级中断请求中断。
中断函数一般形式:
void 函数名() interrupt n
{}
(n代表中断号,中断号是编译器识别不同中断的唯一编号)
中断函数和普通函数的异同:
同:函数的形式非常类似,中断响应过程和普通函数调用过程也非常相似
异:中断函数不需要声明,普通函数需要声明
使用中断函数需要遵循以下规则:
(1)中断函数不能进行参数传递
(2)在任何情况下,都不能直接调用中断函数
中断响应条件
中断源有中断请求
此中断源的中断允许位为1
开中断(即EA=1)
关键字:C51 单片机 定时器 计数器 中断功能
引用地址:
C51单片机定时器/计数器中断功能详细分析(一)
推荐阅读最新更新时间:2024-11-07 13:46
c51写的93C46的读写程序
#include reg52.h sbit CS=P2^7; sbit SK=P2^6; sbit DI=P2^5; sbit DO=P2^4; /* extern unsigned char ReadChar(unsigned char address); extern void WriteChar(unsigned char address,unsigned char InData); extern void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number); extern void WriteStr
[单片机]
以前的一些单片机DIY作品
1、用ATmega8单片机做的电池内阻测试仪 文章刊载:《无线电》2009年2期 对于干电池和充电电池,人们常用万用表判断其好坏,最基本的方法就是测量电压,根据电压高低对电池的好坏作出判断。其实这种方法并不十分科学,电压正常不等于电池就是好的,还要看它有没有供电能力,这就涉及到电池的另一个重要指标:内阻,我们常常看到有经验的人用万用表的大电池挡直接接在电池的两端,测量电池短路电流的大小,这样可大概估计一下电池内阻的大小,由于万用表的电流挡本身就有一定的电阻,所以很难准确测出电池的内阻到底有多大,往往只能用来对几节电池内阻的大小作出比较。另外,这样的测量对电池也有损害。 要精确测量电池的内阻,必需使用电池内阻测试仪,这里介绍
[单片机]
单片机控制交流接触器
PIC16F877A型单片机控制普通继电器》控制交流接触器。该过程的思路是:单片机给普通继电器一个控制信号,把普通继电器当做一个开关使用,然后接交流接触器。电路原理图如图1所示: 图1 说明:图1的电路在仿真环境下毫无影响。实际电路当中只要继电器不接交流接触器单片机就不会出现复位的怪异现象,而且不论是接~220V电灯还是~220V电机都不会有问题。但是只要接上交流接触器单片机就会复位。其中交流接触器的接法如图2: 图2 在该过程中想到的解决办法。分析:由于是控制端的强电对单片机系统有影响因此一直是在信号的传递方面想办法,试着用光耦进行光电隔离但是不行还会出现单片机复位现象。试着用MAC97A6
[单片机]
51单片机-数码管模块-计数器
#include reg52.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit DULA = P2^6; sbit WELA = P2^7; unsigned char code WETable = { ~0x80,~0x40,~0x20,~0x10, ~0x08,~0x04,~0x02,~0x01 }; unsigned char code DUTable = { 0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x7
[单片机]
52单片机IO口输出-蜂鸣器(硬核)
什么是蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,广泛应用于电子产品中作发声器件,起到警报提醒的作用。 有源蜂鸣器与无源蜂鸣器 这里的“源”不是指电源,而是指震荡源。 有源蜂鸣器内部带震荡源,所以只要异同点就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。需要用2K~5K的方波去驱动它,有源蜂鸣器往往比无源的贵,就是因为里面多个振荡电路。 无源蜂鸣器的优点是: 1.便宜 2.声音频率可控,可以做出音乐里基本七音符的效果 有源蜂鸣器的优点是: 程序控制方便,接通电源就可以工作,程序简单。 三极管的工作原理 什么是三极管: 三极管全称半导体三极管,也称晶体三极管,是一种控制电流的半导体器件其作用是把
[单片机]
手把手教你学51单片机:C语言基础以及流水灯的实现
一、进制 二进制:0和1 前缀0b 十六进制:四个二进制为一位,0~9加上A~F(或a~f) 前缀0x 二、C语言变量类型和范围 字符型、整型、长整型、浮点型。每一种又分为有符号/无符号。 前三种除了长度不一样外,都只能表达整数,无符号只能表示正整数。 表示小数必须用浮点型。 三、C语言基本运算符 + - * / % ++ -- == != …… 区分:++a(先加后执行),a++(先执行后加) eg: b=a++;a=1、b=0; b=++a;a=1、b=1; 四、for循环语句 for(;判断语句;) for(;;); 死循环 五、while语句 while(表达式),若表
[单片机]
IAR FOR AVR 定时器中断的使用
首先看下在iar 里面 iom16.h里面的中断向量表 /* NB! vectors are specified as byte addresses */ #define RESET_vect (0x00) #define INT0_vect (0x04) #define INT1_vect (0x08) #define TIMER2_COMP_vect (0x0C) #define TIMER2_OVF_vect (0x10) #define TIMER1_CAPT_vect (0x14) #define TIMER1_COMPA_vect (0x18) #define
[单片机]
基于单片机和车辆检测器的车型分析技术研究
1 引言 在科学技术飞速发展的今天,单片机也日新月异,迅速发展。目前,他不仅在工业上有极广泛的应用,而且已普遍地渗透到国民经济各个部门,特别在交通建设中起着重要的作用。在目前和今后的交通系统中,车辆检测器以其交通控制的“耳目”而引起交通工程专家们的高度重视,车辆检测器可为交通监视与控制系统提供车辆感应信号,提供有关交通环境条件的情报与数据。车辆检测器的种类很多,检测方式也各不相同,目前主要使用的车辆检测器有电磁式车辆检测器、地磁式车辆检测器、超声波式车辆检测器、环形线圈(有源和无源两种)车辆检测器等。这些检测器的主要工作原理各不相同,但他们都是基于车辆通过或存在,使检测器中能量发生变化而产生车辆感应信号。 2 国内外车
[汽车电子]