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

自学嵌入式 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.xdnf.cn/news/17329.html

相关文章:

  • 数据结构与算法的认识
  • Linux 防火墙(firewalld)详解与配置
  • 【概念学习】早期神经网络
  • IPS知识点
  • spring-dubbo
  • ##Anolis OS 8.10 安装oracle19c
  • 从零开始的CAD|CAE开发: 单柱绕流+多柱绕流
  • vue封装一个cascade级联 多选 全选组件 ,原生写法Input,Checkbox,Button
  • 看不见的伪造痕迹:AI时代的鉴伪攻防战
  • Codeforces Round 987 (Div. 2)
  • 数据结构—队列和栈
  • 问题定位排查手记1 | 从Windows端快速检查连接状态
  • Java面试宝典:类加载器分层设计与核心机制解析
  • PyCharm vs. VSCode 到底哪个更好用
  • C++、STL面试题总结(二)
  • 图论(邻接表)DFS
  • SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现
  • 【Linux系统】进程间通信:命名管道
  • 生成模型实战 | Transformer详解与实现
  • 分布式光伏气象站:安装与维护
  • 人大金仓数据库逻辑备份与恢复命令
  • 基于模式识别的订单簿大单自动化处理系统
  • Git 分支迁移完整指南(结合分支图分析)
  • JavaWeb(04)
  • 每日五个pyecharts可视化图表-bars(5)
  • SQL的条件查询
  • PDF注释的加载和保存的实现
  • jspdf或react-to-pdf等pdf报错解决办法
  • QT自定义控件
  • 学习日志29 python