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

桂林旅游网站建设龙岗网站制作

桂林旅游网站建设,龙岗网站制作,网站建设开发维护,品牌建设部门的规章制度引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…

引言

在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在中断服务函数中直接进行延时,另一种是在中断服务函数中设置标志变量,在主循环中进行延时。

硬件连接

首先,我们需要将J5处的跳帽接到2~3引脚,这样S5按键将连接到P32/INT0,S4按键将连接到P33/INT1。这样,当按下S5按键时,P32引脚将产生一个下降沿信号,触发外部中断0。

代码实现

1. 直接在中断服务函数中延时

在这种方式中,我们将在中断服务函数中直接进行延时操作。以下是完整的代码实现:

#include <REGX52.H>

sbit L1 = P0^1;  // 定义L1指示灯
sbit L8 = P0^7;  // 定义L8指示灯

void SeletcHC573()
{
    P2 = (P2 & 0x1f) | 0x80;  // 选择HC573锁存器
}

void Delay(unsigned int t)
{
    while(t--);  // 简单的延时函数
}

void working()
{
    SeletcHC573();
    L1 = 0;  // 点亮L1
    Delay(60000);  // 延时
    L1 = 1;  // 熄灭L1
    Delay(60000);  // 延时
}

void Init_INT0()
{
    IT0 = 1;  // 设置INT0为下降沿触发
    EX0 = 1;  // 使能外部中断0
    EA = 1;   // 使能总中断
}

void ServiceINT0() interrupt 0 
{
    L8 = 0;  // 点亮L8
    Delay(60000);  // 延时
    Delay(60000);
    Delay(60000);
    Delay(60000);
    Delay(60000);
    Delay(60000);
    L8 = 1;  // 熄灭L8
}

void main()
{
    Init_INT0();  // 初始化外部中断0
    while(1)
    {
        working();  // 主循环中不断调用working函数
    }
}

2. 在中断服务函数中设置标志变量,在主循环中延时

在这种方式中,我们将在中断服务函数中设置一个标志变量,然后在主循环中根据这个标志变量来控制L8的亮灭。以下是完整的代码实现:

#include <REGX52.H>

sbit L1 = P0^1;  // 定义L1指示灯
sbit L8 = P0^7;  // 定义L8指示灯

void SeletcHC573()
{
    P2 = (P2 & 0x1f) | 0x80;  // 选择HC573锁存器
}

void Delay(unsigned int t)
{
    while(t--);  // 简单的延时函数
}

void working()
{
    SeletcHC573();
    L1 = 0;  // 点亮L1
    Delay(60000);  // 延时
    L1 = 1;  // 熄灭L1
    Delay(60000);  // 延时
}

void Init_INT0()
{
    IT0 = 1;  // 设置INT0为下降沿触发
    EX0 = 1;  // 使能外部中断0
    EA = 1;   // 使能总中断
}

unsigned char stat_int = 0;  // 定义中断标志变量

void ServiceINT0() interrupt 0 
{
    stat_int = 1;  // 设置中断标志变量
}

void LEDINT()
{
    if(stat_int == 1)
    {
        L8 = 0;  // 点亮L8
        Delay(60000);  // 延时
        Delay(60000);
        Delay(60000);
        Delay(60000);
        Delay(60000);
        Delay(60000);
        L8 = 1;  // 熄灭L8
    }
    stat_int = 0;  // 清除中断标志变量
}

void main()
{
    Init_INT0();  // 初始化外部中断0
    while(1)
    {
        working();  // 主循环中不断调用working函数
        LEDINT();   // 检查中断标志变量并控制L8
    }
}

代码解析

1. 直接在中断服务函数中延时

  • SeletcHC573():选择HC573锁存器,确保P0口的输出能够控制LED。

  • Delay():一个简单的延时函数,通过循环递减来实现延时。

  • working():控制L1指示灯不断闪烁。

  • Init_INT0():初始化外部中断0,设置为下降沿触发,并使能中断。

  • ServiceINT0():中断服务函数,当按下S5按键时,进入该函数,点亮L8并进行延时后熄灭。

2. 在中断服务函数中设置标志变量,在主循环中延时

  • stat_int:定义一个全局变量作为中断标志。

  • ServiceINT0():中断服务函数,当按下S5按键时,设置stat_int为1。

  • LEDINT():在主循环中检查stat_int,如果为1,则点亮L8并进行延时后熄灭,最后清除stat_int

总结

本文详细介绍了如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们通过两种不同的方式实现了这一功能:一种是在中断服务函数中直接进行延时,另一种是在中断服务函数中设置标志变量,在主循环中进行延时。这两种方式各有优缺点,第一种方式简单直接,但可能会影响主循环的执行;第二种方式更加灵活,能够更好地处理复杂的任务。

http://www.ds6.com.cn/news/61589.html

相关文章:

  • 做一公司网站google引擎入口
  • 谁能做网站开发百度认证考试
  • 做食材的网站seo实战密码电子版
  • 营口网站建设价格关键词完整版免费听
  • 做电影网站如何赚钱广州网站优化排名
  • 建立个人网站要钱吗阿里指数怎么没有了
  • aspx网站模板站长工具seo综合查询工具
  • 网站点击弹出下载框 怎么做网络公司seo教程
  • 网站建设主题大全查排名的软件有哪些
  • 衡阳建设学校官方网站app推广方法及技巧
  • 辽宁网站建设多少钱百度快照是什么意思
  • 怎么不花钱做网站百度指数1000搜索量有多少
  • 广西南宁电商网站建设营销方案策划书
  • 管理公司网站建设友情链接交换的作用在于
  • 有需求或做任务赚钱的网站么腾讯云域名注册
  • 陕西网站建设电话网站推广的技巧
  • 怎么在百度建设网站培训机构招生7个方法
  • 专做网站的公司如何线上推广自己产品
  • 网站建设合同纠纷管辖上海网站建设服务
  • 汽车4s网站设计单页网站怎么优化
  • 广州建网站加备案南京网络建站公司
  • 百度软件应用市场百度自然搜索排名优化
  • 网站开发模板带css样式信息流广告投放渠道
  • 专业做婚庆的网站有哪些谷歌chrome安卓版
  • 网站中怎么做下载链接企业建站流程
  • 个人网站建设素材比较好的网站建设网站
  • 做汽配的网站seo推广优化外包公司
  • 网站做的不好使青岛seo服务哪家好
  • 自己的电脑做网站云存储什么都不懂能去干运营吗
  • 番禺网站优化百度快速排名软件下载