【51单片机实验】INT0中断计数
来源:互联网 发布:淘宝微淘在哪 编辑:程序博客网 时间:2024/05/18 03:55
前言
—中断源—
52单片机:6个中断源:
INT0:外部中断0,P3.2,引起:低电平、下降沿
INT1:外部中断1,P3.3,引起:低电平、下降沿
T0:定时器/计数器0中断,由T0计数器计满回零引起
T1:定时器/计数器1中断,由T1计数器计满回零引起
T2:定时器/计数器2中断,由T2计数器计满回零引起
TI/RI:串行口中断,引起:串行端口完成一帧字符发送/接收
优先级—51系列单片机中用于中断控制的寄存器为—
IE,中断允许控制寄存器,各位定义如下:
- (外定0;外定1;串;空空;C)
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES (IE.4),串行口中断允许位;
ET2(IE.5),定时器/计数器2中断允许位(T2:51特有)
EA (IE.7), CPU中断允许(总允许)位。
有的芯片IE.5及IE.6没用定义。
值为1,开中断;值为0,关中断
- IP,中断优先级控制寄存器,各位定义如下:
(外定0;外定1;串定2;空空)
PX0(IP.0),外部中断0优先级设定位;
PT0(IP.1),定时/计数器T0优先级设定位;
PX1(IP.2),外部中断0优先级设定位;
PT1(IP.3),定时/计数器T1优先级设定位;
PS (IP.4),串行口优先级设定位;
//PT2(IP.5) ,52芯片是无效位,定时/计数器T2优先级设定位。
IP.6和IP.7没有定义。
—中断嵌套—
高优先级能打断低优先级-》中断嵌套;同优先级则不能,按照默认级别响应,若设置优先级,则按照设置顺序相应。
—中断函数—中断函数是硬件或者操作系统自动调用的
也就是说只要满足触发条件,就会自动调用中断函数(此时主函数是停止的)。
当中断函数执行完毕,又返回主函数继续执行主函数。
然后这样不断的循环,反正只要是触发中断的条件一满足。
就会自动进入中断(前提是你的中断的配置是正确的)
实验一
INT0中断计数
流程图
程序分析计数按键:P3.2引脚(INT0),IE=0x81(1000 0001对应:EA,EX0,ET0,EX1,ET1,ES):允许INT0中断,
IT0=1:将INT0中断触发方式设为下降沿触发:按键按下,P3.2由高到低触发中断;
未释放,则不会持续触发;
只有 释放按键后再次按下,才会由跳变再次出发,累加计数值按键识别:
计数键:(中断方式:interrupt 0)
中断触发识别,中断触发即表示计数键按下,中断例程EX_INT0将自动调用,Count累加,INT0:interrupt 0清零键(查询方式 while();)
while(1);实现,循环轮询,不间断查看P3.4是否为0,若为0,清零键按下
扩展
可修改代码:交换计数键和清零键的工作方式。代码
/*每次按下计数键时,触发INT0中断,中断程序累加计数,计数值显示在3只数码管上,按下清零键时数码管清零。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[] = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00};//0~9的数字编码,最后一位为黑屏uint Count = 0;sbit Clear_Key = P3 ^ 6;void Show_Count_ON_DSY()//显示计数值{ Display_Buffer[2] = Count / 100;//获取三个数位 Display_Buffer[1] = Count % 100 / 10; Display_Buffer[0] = Count % 10; if (Display_Buffer[2] == 0)//高位为0时不显示 { Display_Buffer[2] = 0x0a;//0x0a即是10号,对应0x00 //高位为0时,如果第二位为0,则同样不显示 if (Display_Buffer[2] == 0) Display_Buffer[1] = 0x0a; } P0 = DSY_CODE[Display_Buffer[0]]; P1 = DSY_CODE[Display_Buffer[1]]; P2 = DSY_CODE[Display_Buffer[2]];}void main(){ P0 = 0xff; P1 = 0xff; P2 = 0xff; IE = 0x81; IT0 = 1; while (1) { if (Clear_Key == 0) Count = 0; Show_Count_ON_DSY(); }}void EX_INT0()interrupt 0{ Count++;}
后语
中断是单片机里的重要组成部分,在感觉学习吃力的同时,要掌控好学习进度。(学习时间:大约5小时,注意效率!)
- 【51单片机实验】INT0中断计数
- 【51单片机】INT0及INT1中断计数
- 【51单片机实验】INT0中断控制LED
- 单片机 计数/定时 中断实验
- 51单片机之——外部中断0(INT0)
- 51单片机 外部中断实验
- 按键INT0 INT1中断
- 51单片机中断实验(一)
- avr单片机INT0模拟代码
- PIC 外部中断INT0
- Linux下的51单片机简单的外部中断实验
- Int0中断的c语言编程
- INT0和INT1中断 数码管显示
- 单片机实验3(外部中断)
- STM32单片机学习(5) 定时器中断实验
- 51单片机中断问题
- 51单片机中断
- 51单片机中断系统
- java 获取时间与系统时间不一致问题
- CS231N 笔记3_卷积神经网络
- CMT-CQUPT 第一届 ACM 校赛环境搭建(PC^2)
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 判断输入框的输入格式是否正确,并禁止其他输入框输入内容
- 【51单片机实验】INT0中断计数
- 杭电ACM OJ 1010 Tempter of the Bone 图的深度搜索,奇偶剪枝,难得有一道像点样子的好题
- python实战(1):简单的数据采集与分析
- mysql sql语句执行到一半会怎么样?
- bootstrap响应式工具
- c++指针和指针的引用,指针的指针的区别
- SAC-IA粗配准+NDT精配准
- zubax_gnss简介
- 5.10