定时中断实验【嵌入式系统】

简介: 定时中断实验【嵌入式系统】

前言

2023-6-6 16:25:44

以下内容源自《【嵌入式系统】》

仅供学习交流使用

推荐

GPIO实验【嵌入式系统】

定时中断实验

定时器控制LED按节奏闪烁,要求一个定时器控制三个LED分别以0.1S、0.5S及1S时长闪烁(10分)

实验结果

第一个灯以0.1s闪烁

第二个灯以0.5s闪烁

第三个灯以1s闪烁

5个一闪1个二

2个二闪1个三

嵌入式中断实验

main

//宏定义
#include "lpc213x.h"
#include "TypeDef.h"
#include "IrqFiqCtrl.h"
extern  void IRQEnable(void);
extern  void IRQDisable(void);
extern  void FIQEnable(void);
extern  void FIQDisable(void);
#define KET1 1<<16
#define KEY2 1<<17
#define KEY3 1<<18
#define KEY4 1<<19
#define KEY5 1<<20
#define KEY6 1<<21
#define KEYS 0x3f<<16
volatile uint8 count =0;
uint8 key_value;
volatile uint32 Vkey=0;
#define BEEP  1 << 7  
      /* P0.7控制BEEP,低电平蜂鸣   */
//#define Fpclk 11059200      
// system clock freq  for ADS
#define Fosc  11059200          // 开发板外时钟频率
#define Fcclk (5*Fosc)        // Keil 默认的CPU时钟设置
#define Fpclk (Fcclk/4)       // Keil 默认的DEV时钟设置
int time_100ms_flag=0;
int time_500ms_flag=0;
int time_1000ms_flag=0;
int time_2000ms_flag=0;
const uint32 LED1 = (1 << 18); // P1.18对应LED1
const uint32 LED2 = (1 << 19);
const uint32 LED3 = (1 << 20);
const uint32 LED4 = (1 << 21);
const uint32 LED5 = (1 << 22);
//const uint32 LED6 = (1 << 23);
//const uint32 LED7 = (1 << 24);
//const uint32 LED8 = (1 << 25);
const uint32 LEDS8 = (0xFF << 18);
//P1[25:18] LED8~LED1
#define HC595_CS  (1 << 29)
//定时器中断部分
void __irq IRQ_Timer0 (void)
{
  count = count+1;
    time_100ms_flag=1;    /*0.1S标志*/
  if ((count %5)==0)
    time_500ms_flag =1;   /*0.5S标志*/
  if ((count %10)==0)
    time_1000ms_flag =1;    /*1S标志*/
  /*if ((coumnt %20)==0)
    time_2000ms_fiag =1;  2S标志*/
  T0IR=0x01; //清除中断标志
  VICVectAddr=0x00;//通知VIC中断处理结束
}
//主程序初始化
int main (void)
{
  PINSEL0 = 0x00000000;     // 设置管脚 P0[15:0] 连接 GPIO
  PINSEL1 = 0x00;
  PINSEL2 &=(~0x08);//P1[25:16]  GPIO
  IO1DIR |=LEDS8;//设置P1[25:16 (LED1)输出
  IRQEnable();// IRQ中断使能
  /* 定时器0初始化 */
  T0TC   = 0;           // 定时器设置为0  
  T0PR   = 0;           // 时钟不分频
  T0MCR  = 0x03;        // 设置T0MR0匹配后复位T0TC,并产生中断标志
  T0MR0  = Fpclk/10 ;     // 1秒钟定时 --- 匹配目标值
  T0TCR  = 0x01;        // 启动定时器  
  /*设置定时器0初始化IRQ*/
  VICIntSelect =0x00;//所有中断通道读孟为IQ中新
  VICVectCntl0= 0x20|0x04;//投置定时器0中断通道分配到VIC_slot_0
  VICVectAddr0= (uint32)IRQ_Timer0;//设置中断服务程序地址
  VICIntEnable = 1 << 0x04;//使能定时器0中断
  IO0DIR = 0x00000000;
  IO0DIR|=BEEP;
  IO0SET =BEEP;
  while (1)
  {
      Vkey = (IO0PIN&KEYS);
      if(Vkey ==KEYS)
        IO0SET = BEEP;
      else
        IO0CLR = BEEP;
      key_value =0;
      if(time_100ms_flag ==1)
        { time_100ms_flag =0;
            if((IO1SET & LED1) == 0)
              IO1SET = LED1;//关闭LED1
            else
              IO1CLR = LED1;//点亮LED1
        }
      if(time_500ms_flag == 1)
        {time_500ms_flag =0;
            if ((IO1SET & LED2) == 0)
              IO1SET = LED2;//关闭LED2
            else
              IO1CLR = LED2;//点亮LED2
        }
      if(time_1000ms_flag ==1)
        {time_1000ms_flag =0;
            if((IO1SET & LED3) == 0)
              IO1SET = LED3;//关闭LED3
            else
              IO1CLR = LED3; //点亮LED3
        }
  }
}

注意

记得ReBuild一下


最后

2023-6-6 16:27:42

你对我百般注视,

并不能构成万分之一的我,

却是一览无余的你。

祝大家逢考必过

点赞收藏关注哦

相关文章
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
4977 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
数据采集 人工智能 自然语言处理
AI Agent 金融助理0-1 Tutorial 利用Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股) AI Finance Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
安全 搜索推荐 数据安全/隐私保护
Python基础之破解加密压缩包
Python基础之破解加密压缩包
709 0
|
负载均衡 druid 算法
SpringBoot-MybatisPlus-Dynamic(多数据源)
SpringBoot-MybatisPlus-Dynamic(多数据源)
1759 0
SpringBoot-MybatisPlus-Dynamic(多数据源)
|
设计模式 存储 前端开发
Java Web开发中MVC设计模式的实现与解析
Java Web开发中MVC设计模式的实现与解析
582 0
|
存储 缓存 算法
Python性能优化:让你的代码更快更流畅
本文介绍了优化 Python 代码性能的十二个技巧,包括使用内置数据类型和函数、避免不必要的循环和递归、使用局部变量、利用生成器节省内存、选择合适的数据结构、并行和并发处理、使用第三方库、缓存减少重复计算、代码剖析和性能分析、优化算法和数据结构以及减少 I/O 操作。通过这些方法,开发者可以编写出运行更快、效率更高的 Python 程序。
|
Java Apache Maven
Maven环境变量配置
Maven环境变量配置
282 0
|
JavaScript 前端开发 测试技术
基于Vue、Axios、Node.js的图书管理系统【网页前端高级编程】
基于Vue、Axios、Node.js的图书管理系统【网页前端高级编程】
基于Vue、Axios、Node.js的图书管理系统【网页前端高级编程】