STC15F2K60S2/中断详细讲解

4 篇文章 7 订阅
订阅专栏

STC15F2K60S2中断程序详细讲解

T0中断
/****************************************************************/
/****************************2019.11.15**************************/
/********************吉林大学无线电爱好者协会********************/
/**************************单片机基础培训************************/
/************************Creat by Devilaboy**********************/
/****************************************************************/
/****************************************************************/


/*************************头文件+宏定义区************************/
#include <STC15FXXXX.H>
#define key1 P33
#define key2 P32
#define led1 P00
#define led2 P01
#define led3 P02
#define led4 P03
#define led5 P04
#define led6 P05
#define led7 P06
#define led8 P07
#define uchar unsigned char

/****************************函数声明*************************/
void breath();
void Timer0Init(void)	;
void delayus(unsigned int a);
/***************************主函数*****************************/
void main()	
{
	Timer0Init();
  breath();
}
/****************************中断函数*************************/
void Timer0Init(void)	//(我们的T0用的是16位自动重装定时器模式)
{
	TMOD=0x00;// 16位自动重装
	TL0 =( 65536-50000)%256;//低位装入	(对于晶振为12MHz的片子来说,65536-50000,意思是实现程序的50ms定时,因为一次指令周期是1us,这里执行了50000个指令周期才溢出)
	TH0 = (65536-50000)/256;//高位装入
	EA=1;   //打开全局中断
	ET0=1;  //打开定时器1中断
	//TF0 = 0;//中断溢出清零,对于TMOD=0x00模式来说,该操作由系统自动完成
	TR0 = 1;//开启定时器0
}

uchar a=0;
void TIME0() interrupt 1  //定义定时器0中断函数
{
  a=a++;
  if (a==20)//执行20次循环,即定时器中断效果显现设定为非常准确的1s
    {
      led2=~led2;led4=~led4;led6=~led6;led8=~led8;
	    a=0;
    }
}

/************breath***********/
void breath()//设计一个模拟PWM波控制的呼吸灯程序,大家可以自己想一下为什么会有这种效果
{
  int b=0,c=1600;
//  while(1)
//  { 
    for(b=1;b<c;b++)//大家可以试下让b=0,看一看灯会有什么效果,并想一想这是为什么
    {
	    led1=0;led3=0;led5=0;led7=0;
      delayus(b);
      led1=1;led3=1;led5=1;led7=1;
      delayus(c-b);
    }
	  for(b=1500;b>0;b--)
    {
	    led1=0;led3=0;led5=0;led7=0;
      delayus(b);
      led1=1;led3=1;led5=1;led7=1;
      delayus(c-b);
    }
//  }
}
void delayus(unsigned int a)		//@12.000MHz
{
	  while(--a);
}

一、上面程序涉及到的几个相关寄存器

1、TCON(可位寻址)

这里我们内部中断常用到的就是TF0/1 、TR0/1
可位寻址的意思就是,我们不用写整个寄存器的名字来设置这个寄存器,我们直接写寄存器中的某一位的名字就可以来设置了。
在这里插入图片描述

2、TMOD(不可位寻址)

在这里,我们主要设置
1、定时器的工作模式
2、是内部中断触发还是外部中断触发
其中我们常用的工作模式是
模式0:16位自动重装(在用内部时钟中断的时候常用)
模式2:8位自动重装(在设置波特率的时候常用,在我的另一篇介绍有关串口中断的文章中深有体现,附上文章链接 https://blog.csdn.net/Star19180325/article/details/103396806)
在这里插入图片描述

3、IE(中断允许寄存器)/IP(中断优先级设置寄存器)(可位寻址)

这里我们常用到的有
EA:开启全局中断
ET0/1:打开定时器0或者定时器1的中断
在这里插入图片描述

二、定时器0的介绍

设置一个定时器中断的大致过程就是
1、配置寄存器工作方式
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

三、中断级别以及中断程序的大致写法介绍

中断源默认中断级别序号(C语言用)入口地址(汇编语言用)
INT0,外部中断0最高00003H
T0,定时器/计数器0中断第21000BH
INT1,外部中断1第320013H
T1,定时器 /计数器1中断第43001BH
TI/RI,串行口中断第540023H
T2,定时器/计数器2中断最低5002BH

单片机在使用中断功能时候,通常需要设置两个与中断有关的寄存器
IE:中断允许寄存器
IP:中断优先级寄存器
具体的使用方法在上面的技术文档截图中已经介绍过了,在这里不再赘述。

void TIME0() interrupt 1  //定义定时器0中断函数
{
  a=a++;
  if (a==20)//执行20次循环,即定时器中断效果显现设定为非常准确的1s
    {
      led2=~led2;led4=~led4;led6=~led6;led8=~led8;
	    a=0;
    }
}

这里我们看到,是定时器0的中断程序的写法

普适格式如下

void 函数名() interrupt 中断号 using 工作组
{
   中断服务程序//(中断程序里面的东西最好能迅速的执行,不要有延时什么的,否则会影响正常程序的执行)
}

这里需要注意几点

  1. 中断程序不能有任何的返回值,所以函数定义的时候一定是void
  2. 函数名的名字可以随便起,但是一定要方便辨认,不要和已有的函数名冲突
  3. 中断函数里面应该不能带任何的参数,所以函数名后面的()里面是空的,或者写void
  4. 中断序号指的是单片机那几个中断源的序号,具体的请看上面的那个表;这个序号非常重要,是编译器识别不同中断的唯一符号,因此在写中断服务的时候一定一定一定要写好,写正确。
  5. using 工作组:是指这个中断函数使用单片机内存4组工作寄存器中的哪一组,对于KEIL,编译器在变异的时候会自动分配工作组,所以这个通常我们会直接忽略

四、附上其他的程序

T0+T1中断
/****************************************************************/
/****************************2019.11.15**************************/
/********************吉林大学无线电爱好者协会********************/
/**************************单片机基础培训************************/
/************************Creat by Devilaboy**********************/
/****************************************************************/
/****************************************************************/


/*************************头文件+宏定义区************************/
#include <STC15FXXXX.H>
#define key1 P33
#define key2 P32
#define led1 P00
#define led2 P01
#define led3 P02
#define led4 P03
#define led5 P04
#define led6 P05
#define led7 P06
#define led8 P07
#define uchar unsigned char

/****************************函数声明*************************/
void breath();
void Timer01Init(void)	;
void delayus(unsigned int a);
/****************************主函数*****************************/
void main()	
{
	while(1)
	{
	   Timer01Init();
       breath();
	}
}
/****************************中断函数*************************/
void Timer01Init(void)	
{
	TMOD=0x00;
	TL0 =( 65536-50000)%256;	
	TH0 = (65536-50000)/256;
	TL1 =( 65536-50000)%256;
	TH1 = (65536-50000)/256;
	EA=1;  
	ET0=1;  
	ET1=1;  
	//TF0 = 0;//中断溢出清零,对于方式0来说,由系统自动清零
	TR0 = 1;
	TR1 = 1;
}

uchar a=0,b=0;
void TIME0() interrupt 1
{
  a=a++;
  if (a==20)
    {
       led5=~led5;led6=~led6;
	   a=0;
    }
}

void TIME1() interrupt 3
{
  b=b++;
  if (b==10)
    {
       led7=~led7;led8=~led8;
	   b=0;
    }
}
/************breath***********/
void breath()
{
  int b=0,c=1600;
//  while(1)
//  { 
    for(b=1;b<c;b++)
    {
	   led1=0;led2=0;led3=0;led4=0;
       delayus(b);
       led1=1;led2=1;led3=1;led4=1;
       delayus(c-b);
    }  
	  for(b=1500;b>0;b--)
    {
	   led1=0;led2=0;led3=0;led4=0;
       delayus(b);
       led1=1;led2=1;led3=1;led4=1;
       delayus(c-b);
    }
//  }
}
void delayus(unsigned int a)		//@12.000MHz
{
	  while(--a);
}
STC15单片机 - 按键单击和长按检测(外部中断)
perseverance51博客
02-01 1388
STC15单片机 - 按键单击和长按检测(外部中断)
蓝桥杯STC15单片机复习——外部中断
weixin_44098974的博客
06-16 1392
蓝桥杯STC15单片机复习——外部中断
STC 单片机中断
czhaii的专栏
01-06 1207
【蓝桥杯(51) STC15F2K60S2】之 “外部中断实验“
world的博客
06-24 668
相关代码: #include “STC15F2K60S2.H” #include “intrins.h” sbit L1 = P0^0; sbit L8 = P0^7; void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 43; j = 6; k = 203; do { do { while (--k); } while (--j); } while (--i); } void work
stc15f2k60f2单片机定时器_自己编写STC15F2K60S2定时/计数器中断函数
weixin_39622398的博客
12-18 1029
/*****函数名:定时计数器中断初始化调用:TimerCounterIntInit_12MHz(T_C_Int, TH_Init, TL_Init);参数:bitT_C_Int(定时器中断0或定时器中断1),delay_us(多少微米)返回值:无结果:启动T/C1或T/C0并设置计数器初值*****/void TimerCounterIntInit_12MHz(bit Tx,unsigned...
STC15单片机-按键检测单击或长按(外部中断)
weixin_46251230的博客
09-02 2765
在LED闪烁(定时器)的工程中加上 KEY.c 和 KEY.h 文件,在Sys_Init.c文件中初始化外部中断0,在KEY.c中定义外部中断0中断处理函数,按键检测也是在KEY.c文件中实现。main.c -> 主函数文件,包含 main 函数等,当用外部中断翻转指示灯时 ,则不用调用函数,否则调用按键扫描函数翻转指示灯;因为在标志位清0时外部中断可能还会被触发,这可能是按键抖动引起的,标志位会重新被置1,在按键检测时会被重复判断。KEY.c -> 按键函数,包含按键检测,中断函数等。
STC15 单片机 串口使用
小游
01-03 3474
本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问 在研究串口前,我们需要看一下所有的寄存器 首先是SCON,主要是用来设置串口的工作方式 详细参数其实不需要知道的非常非常清楚,因为我们一般都是有默认情况的 文档写着麻烦,直接上例程 /*** 串口控制发送函数 ***/ #include "reg51.h" #include "intrins.h" #include "send.h" typedef unsigned char BYTE; typedef unsigned int .
基于STC15F2K60S2单片机2x4矩阵按键实验例程KEIL源码.zip
06-01
本实验涉及的是基于STC15F2K60S2单片机的2x4矩阵按键应用,通过KEIL集成开发环境进行编程。STC15F2K60S2是一款具有广泛应用的8051内核单片机,拥有丰富的I/O口和增强的性能,适合初学者和专业人士进行各种项目开发。...
宏晶 STC15F2K60S2开发板光盘资料开发板PDF原理图+30个配套的DEMO软件KEIL例程文件.zip
03-08
3.2 30个DEMO软件涵盖了STC15F2K60S2的各种应用示例,如串口通信、中断处理、定时器应用等,开发者可以通过这些例子学习到如何利用芯片的特定功能。 3.3 通过KEIL例程,开发者可以理解如何配置和调用库函数,以及...
STC15F2K60S2单片机例程集合
07-19
STC15F2K60S2是一款高性能的8位单片机,由STC公司生产,广泛应用于各类电子设备中。这个“STC15F2K60S2单片机例程集合”提供了丰富的编程示例,帮助开发者理解和掌握这款单片机的使用方法。 首先,我们要了解STC15...
STC15/STC15F2K60S2/STC15W4K32S4系列读取超声波测距模块HC-SR04距离串口显示代码实例
08-06
STC15系列单片机,包括STC15F2K60S2STC15W4K32S4等型号,是基于8051内核的增强型微控制器,广泛应用于各种嵌入式系统设计。这些单片机具有较高的处理能力和丰富的片上资源,如内置Flash、EEPROM、PWM、ADC和串行...
stc15f2k60s2的最小系统原理图
03-30
STC15F2K60S2是一款由STC公司生产的8051内核单片机,拥有较快的处理速度和丰富的外设接口,广泛应用于各类嵌入式系统开发项目中。最小系统原理图是指能够使该单片机最简单、最基础运行所需要的外围电路连接图。它...
蓝桥杯--stc15f2k60s2定时器2中断开启
weixin_64664357的博客
04-04 708
【代码】蓝桥杯--stc15f2k60s2定时器2中断开启。
STC15单片机-按键检测单击、双击和长按(状态机)
weixin_46251230的博客
09-02 9239
在单片机的应用中,利用按键实现与用户的交互功能是相当常见的,同时按键的检测也是很讲究的,众所周知,在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释放时,信号抖动一段时间后变高,然而这段抖动时间要维持10ms~50ms,这个与按键本身的材质有一定的关系,在这个范围内基本上都可以确定的。像这样的程序经常出现在大学的教科书中,在按键的扫描中,单片机的资源全部用来做按键的扫描,特别是当中的延时程序,对单片机来说,这个一个漫长的过程。这样的教科书的按键处理程序是不实用的,在实际应用中是不可取的。
单片机三种按键模式 单击 双击 长按
热门推荐
zhaoyuaiweide的博客
01-11 2万+
最近在做平衡车 ,关于平衡车的内容还未整理好,先来个不错的小技术贴! 认为好的可以关注我哦      知识在于交流 /************************************************************************** 函数功能:按键扫描 入口参数:双击等待时间 返回 值:按键状态 0:无动作 1:单击 2:双击 key=0是按下
蓝桥杯STC15单片机复习——定时计数器中断
weixin_44098974的博客
06-16 1046
蓝桥杯STC15单片机复习——定时计数器中断
STC单片机单击、双击、长按状态机程序
perseverance51博客
02-18 822
STC单片机单击、双击、长按状态机程序
关于解决12单片机定时竟然不准的问题
悟已往之不谏 知来者之可追
07-21 3276
自己不断的折腾确实挺浪费时间的,但是真的收获颇丰。 问题 今天,在用12的时候,定时器无意之间debug竟然发现,定时不准? 查查查,,,一直没有头绪,还好没有放弃一直在苦苦挣扎。 过程再现#include <stc12.h> #include <intrins.h>unsigned char T0RH; unsigned char T0RL;/* 配置并启动T0,ms-T0定时时间 */
MATLAB实现NARX非线性自回归外生模型房价预测(含完整的程序和代码详解)
最新发布
10-17
内容概要:本文详细介绍了如何使用MATLAB实现NARX非线性自回归外生模型进行房价预测。整个项目涵盖了数据准备、特征工程、模型构建、训练与预测以及GUI界面设计等环节。NARX模型通过结合历史房价数据和外生变量(如经济指标、地理位置等),提高了预测的准确性。项目的多指标评估包括均方误差(MSE)和决定系数(R²),并且设计了用户友好的GUI界面,方便用户自定义输入和展示预测结果。 适合人群:对时间序列预测感兴趣的数据分析师、研究人员及房地产从业人员。 使用场景及目标:适用于房地产市场分析、经济预测、财务决策支持等领域。主要目的是提高房价预测的准确性和可操作性。 其他说明:未来的研究方向包括纳入更多外生变量、优化模型超参数以及探索深度学习技术在房价预测中的应用。在实际应用时需要注意数据预处理和结果的合理解释与应用。
STC15F2K60S2单片机详细数据手册
"STC15F2K60S2数据手册提供了关于STC15F2K60S2单片机的详细信息,包括其主要特性、抗干扰能力、加密技术、ISP/IAP功能以及不同型号的STC15系列芯片概述。" STC15F2K60S2是STC Microcontroller Limited推出的一款...
写文章

热门文章

  • TB6612使用说明,使用方法,引脚图,实物图。 30445
  • STC15F2K60S2串口通信/波特率设置/通信初始化/发送(接收)一个数据教程 13157
  • STC15F2K60S2/中断详细讲解 9733
  • 关于解决STM32 USART底层协议中_sys_exit_(int x)函数编译时提示错误的方法 7540
  • Arduino nano analogWrite()相关不能正常输出PWM问题、nano引脚定义问题 5789

分类专栏

  • 软件使用 4篇
  • STC15F2K60S2教程 4篇
  • 概念学习 3篇
  • 1篇
  • C语言学习(巩固) 8篇
  • 芯片使用 1篇
  • STM32学习过程 2篇
  • 模块用法 3篇
  • 问题解决 5篇

最新评论

  • STM32F103核心板//双数码管//74HC595//串行输入,并行输出//程序//开发过程

    未闻花名0926: 你好,这个怎么实现级联

  • 防反接、防过压、缓启动电路相关

    立志控制全栈: 请问怎么添加啊? 可以讲讲嘛?

  • 防反接、防过压、缓启动电路相关

    huangfang8161: 这个电路可以考虑增加一些东西,使它具有过流/输出短路保护功能

  • STC15F2K60S2单片机/DHT11/OLED12864/串口通信

    2401_85647329: 用LCD12864显示该怎么修改

  • 防反接、防过压、缓启动电路相关

    somebodyunsimple: 谢谢博主的分享,但是你的后级电路中,有一个稳压二极管虽然可以保护Pmos管,但是在缓启动完成之后,也会对电路发挥稳压作用,会对后级电路产生较大的噪声纹波。同时与MOS并联的两个电容也会在缓启动之前进行储能放电,影响到缓启动的效果

大家在看

  • 在线华文拼块输入法 - 网页华文拼块输入法 - 站长工具网
  • 中继器实现时间读取和修改 889
  • 【编程基础知识】《Java 复用魔法:组合、继承与代理的奇妙之旅》 429
  • C语言 | Leetcode C语言题解之第497题非重叠矩形中的随机点
  • 蓝易云 - 在CentOS系统中,如何统计哪个进程打开了文件描述符? 117

最新文章

  • Cadence 16.6 绘制PCB封装时总是卡死的解决方法
  • Cadence 16.6 PCB Edito如何将鼠标中键反向拉拽改为正向拖拽
  • 相关电路整理(工程)相关FOC电路整理
2024年5篇
2023年1篇
2019年23篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家长沙动漫玻璃钢雕塑濮阳商场美陈绿植墙山西户内玻璃钢雕塑定做价格吉林佛像玻璃钢雕塑制作铸造校园玻璃钢景观雕塑厂家福建玻璃钢雕塑大全福建主题商场美陈现价兰州公园玻璃钢雕塑哪家好玻璃钢恐龙雕塑单价深圳季节性商场美陈销售企业福建定制玻璃钢雕塑优势玻璃钢雕塑制作工艺标书写法金华玻璃钢人物雕塑玻璃钢人物镂空雕塑价格庐阳玻璃钢花盆花器安徽景观玻璃钢雕塑批发汝南玻璃钢雕塑济源卡通玻璃钢雕塑哪家好江津玻璃钢价值观雕塑丹东玻璃钢雕塑铜陵玻璃钢雕塑定做价格商场家具美陈景区玻璃钢雕塑摆件杭州五一商场美陈江苏大型主题商场美陈价格玻璃钢雕塑人物自行车在商场美陈可分为几种蔬菜玻璃钢雕塑修复电话新郑肖像玻璃钢卡通雕塑周年商场美陈价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化