找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4977|回复: 10
打印 上一主题 下一主题
收起左侧

单片机外部中断0实验 “while(1)”语句的作用是什么?

  [复制链接]
跳转到指定楼层
楼主
ID:447549 发表于 2019-11-3 21:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个外部中断0程序,请问在main函数中,“while(1)”语句的作用是什么???,为什么会在"Int0Init()"函数后面???

/**************************************************************************************
*                              外部中断0实验                                                                                                  *
实现现象:下载程序后,按照光盘内操作视频接线,操作K3按键使LED1(D11)状态取反
注意事项:无。                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

sbit k3=P3^2;  //定义按键K3
sbit led=P2^0;         //定义P20口是led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}

/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能                   : 设置外部中断1
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int0Init()
{
        //设置INT0
        IT0=1;//跳变沿出发方式(下降沿)
        EX0=1;//打开INT0的中断允许。        
        EA=1;//打开总中断        
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{        
        Int0Init();  //        设置外部中断0
        while(1);               
}

/*******************************************************************************
* 函 数 名         : Int0()        interrupt 0
* 函数功能                   : 外部中断0的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Int0()        interrupt 0                //外部中断0的中断函数
{
        delay(1000);         //延时消抖
        if(k3==0)
        {
                led=~led;
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 8#
ID:266429 发表于 2019-11-4 20:04 | 只看该作者
      换个方式解释:这个东西,放在任何程序的任何地方,单片机运行时遇到它就会始终执行这个单调的“原地踏步”动作。貌似只有中断才会打断这个动作,然后单片机就会去执行中断中的程序。也就是说,如果没有中断来打断,则程序就此进入无限循环,不再做其它任何事。所以,有时候,我们会在程序的末尾加上这么个东西,让程序终止,其实也不是终止,而是让单片机始终运行这个单调而又不影响前面运行结果的动作,以保持住前面的运行结果,否则,程序可能会跑飞(也就是说否则它会继续运行程序存储器中后面的内容),甚至可能会产生影响前面运行结果的情况出现。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:94031 发表于 2019-11-4 09:16 | 只看该作者
“while(1)”语句的作用是在执行完"Int0Init()"函数后程序踏步空转。放前面"Int0Init()"函数就没法执行了。
回复

使用道具 举报

板凳
ID:282850 发表于 2019-11-4 09:20 | 只看该作者
while(1)是永远在这句执行,相当于停在这句。
可以理解与这句相同:
while(aa>0) {   执行1;执行2;aa--;       };
回复

使用道具 举报

地板
ID:411550 发表于 2019-11-4 10:04 | 只看该作者
主函数的while(1)目的是让单片机在while下一直运行,如果while放在Int1nint前面的话 就不会运行Int1nint函数了
回复

使用道具 举报

5#
ID:282431 发表于 2019-11-4 10:12 | 只看该作者
Int0Init();  //        设置外部中断0
        while(1);
停止等待外部中断0的到来。
回复

使用道具 举报

6#
ID:631219 发表于 2019-11-4 15:43 | 只看该作者
while (1)就是空转,等到中断到来时,由中断服务程序作点事情,作完后仍旧回到while(1)空转。比较容易读的应该写成while(1) {;};
回复

使用道具 举报

7#
ID:635438 发表于 2019-11-4 17:06 | 只看该作者
延时的作用 直到减为0退出
回复

使用道具 举报

9#
ID:635561 发表于 2019-11-4 20:09 | 只看该作者
空转延时
回复

使用道具 举报

10#
ID:447549 发表于 2019-11-4 21:19 | 只看该作者
bojue35091 发表于 2019-11-4 17:06
延时的作用 直到减为0退出

老哥,你这个回答就有点扯了啊!!!
回复

使用道具 举报

11#
ID:625113 发表于 2019-12-18 00:14 来自手机 | 只看该作者
等待下一次中断到来吧,没有的话,程序直接执行完了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表