当前位置: 首页 > news >正文

自学嵌入式 day43 中断系统

一、中断概念:

        cpu在处理一个任务时,外界来了一个更为紧急的事件,要求cpu暂停当前的工作,转而去处理这个紧急事件,处理完后再回之前的任务继续向下执行

二、中断源

        打断cpu执行当前任务的事件/源头

        个数:五个,外部中断0,timer0,外部中断1,timer1,UART(串口),优先级从左到右

三、外部中断:

        引脚电平变化所引发的中断

四、中断优先级

        在执行中断的过程中,如果外界又发生一次中断,比较优先级,先处理优先级高的

五、中断处理流程

        1、中断源发送出中断请求

        2、检查cpu是否允许中断,及该中断源是否被屏蔽

        3、比较中断的优先级

        4、保护现场

        5、执行中断服务函数

        6、恢复现场

六、中断寄存器

        1、IE:中断允许寄存器(可位寻址)

                1)EA(B7):手动置一,代表cpu响应允许所有的中断

                2)EX(B1):手动置一,代表外部中断0允许中断

        2、TCON寄存器:定时控制寄存器

                1)ITO(B0):置一,代表外部中断0下降沿触发中断

七、程序

        1、外部中断0初始化函数:

                1)P3寄存器中的第二个位置置一

                2)IE寄存器中的第7位和第0位置一

                3)TCON寄存器中的第0位置一

        2、编写中断服务函数

                void einto_handler(void) intereupt0

注:中断向量表:函数指针数组

八、定时器初值
九、定时器相关配置

        1、中断总开关:定时器开关

        2、TMOD寄存器配置:

                1)将TMOD寄存器低4位清零

                2)将TMOD寄存器第0位置1,第一位清零

        3、赋初值

        4、TCON寄存器(bit4)置1,开启计时

        5、IE寄存器配置

                1)IE寄存器B7置1,打开总开关

                2)IE寄存器B1置1,打开定时器0中断开关

十、PWM

        1、脉冲宽度调制器,引脚波形,引脚周期性发生电平翻转

        2、PWM周期:一个方波经历的时间,(从一个上升沿/下降沿到下一个上升沿/下降沿所经历的时间)

        3、PWM控制蜂鸣器以200频率进行工作,占空比为50%

注:有源蜂鸣器:有震荡源,无源蜂鸣器:无震荡源

#include <reg51.h>
#include "led.h"
#include "digiter.h"
#include "key.h"
unsigned int g_n = 0;
unsigned int g_i = 0;
#define HZ200 63035
#define HZ400 64285
#define HZ600 64701
#define HZ800 64910
#define HZ1000 65035

void Timer0_Handler(void) interrupt 1
{
int ret = 0;
unsigned short n = 0;
ret = key_press();
switch(ret)
{
case 1:
{
n = HZ200;
break;
}
case 2:
{
n = HZ400;
break;
}
case 3:
{
n = HZ600;
break;
}
case 4:
{
n = HZ800;
break;
}
case 5:
{
n = HZ1000;
break;
}
default:
break;
}


TH0 = n >> 8;
TL0 = n;

P2 ^= (1 << 1) ;    

}

void Timer0_Init(void)
{
key_init();
TMOD &= ~(0x0F << 0);          
TMOD |= (1 << 0);

    TH0 = HZ200 >> 8;
TL0 = HZ200;

    TCON |= (1 << 4);

    IE |= (1 << 7) | (1 << 1);
}

http://www.dtcms.com/a/317293.html

相关文章:

  • 1-知识图谱—知识图谱表示与建模:给知识 “搭框架”,让每句话都有条理
  • Java学习第一百一十一部分——Jenkins(二)
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话
  • 周鸿祎:AI 时代安全智能体,能否重塑数字安全格局?
  • 【数据库】Oracle学习笔记整理之一:ORACLE的核心组成部分
  • 亚矩阵云手机:解锁 Shopee/Lazada 东南亚电商运营“通关密码
  • Cortex-M MCU 默认的分散加载文件分析
  • CSS高频属性速查指南
  • SG105 Pro 网管交换机的3种VLAN配置
  • Uniapp生物识别(SOTER)
  • 什么是逻辑外键?我们要怎么实现逻辑外键?
  • 【C++详解】STL-set和map的介绍和使用样例、pair类型介绍、序列式容器和关联式容器
  • sqli-labs靶场less40-less45
  • uniapp 通用地磅称重系统手机端
  • 生成网站sitemap.xml地图教程
  • android 设置字体样式
  • QT----QAxObject在子线程中调用,发现excel指针为空
  • NCD57080CDR2G 安森美onsemi 通用驱动器, SOIC, 8针, 20V电源, 8 A输出NCD57080CDR2电流隔离式栅极驱动器
  • Excel制作尖刀图,直观展示业绩涨跌
  • 【Excel】通过Index函数向下拖动单元格并【重复引用/循环引用】数据源
  • Unity模型显示在UI上
  • mysql 8递归查询
  • AMD二季度净利润同比下降31%
  • 企业级建模平台Sparx EA的云服务实现全域架构协同
  • imx6ull-驱动开发篇11——gpio子系统
  • django permission_classes = [AllowAny] 如何限制到具体接口
  • 得物向量数据库落地实践
  • 智慧二次供水管理系统解决方案:城市供水“最后一公里”
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • Docker swarm 常用的命令集合