找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 819|回复: 5
收起左侧

单片机程序出现问题 中断不行,加载不了主程序里

[复制链接]
ID:278457 发表于 2024-1-23 08:00 | 显示全部楼层 |阅读模式
中断不行,加载不了主程序里
51hei4.png
51hei3.png
51hei2.png
51hei1.png
回复

使用道具 举报

ID:69038 发表于 2024-1-23 09:42 | 显示全部楼层
中断不用声明;
中断不应该放在main中,更不应该放在while(1)里。
回复

使用道具 举报

ID:226055 发表于 2024-1-23 09:43 | 显示全部楼层
    定时器初始化里面开启中断即可,程序主循环里面不需要调用中断服务函数。换句话说,需要调用,那么中断还有什么意义?
回复

使用道具 举报

ID:1064915 发表于 2024-1-23 09:45 | 显示全部楼层
中断,当启动位打开,CNT计数溢出的时候,会触发溢出标志位置位,进而送入中断系统(比如日常生活中,我们在做一件事,突然烧水壶开了,我们即要先暂时放弃做目前的事,转而去处理烧开水这个中断事件,当处理完成过后,又返回来继续处理之前的事)
而这里的举例:处理烧开水即中断程序;之前所做的事即main函数里面的主程序#include<reg52.h>
sbit LED=P1^0;
sbit buzzer=P2^0;

void delay(void);
void main(void)
{       
        IT0=1;//设置外部中断触发方式为下降沿触发
        EX0=1;//对应的中断允许位打开
        EA=1;//总中断打开
        PX0=0;//IE0低优先级
        buzzer=0;//开启蜂鸣
        delay();
        buzzer=1;//关闭蜂鸣
        while(1)
        {
                LED=0;//点亮LED
                delay();
                LED=1;//熄灭LED
                delay();
    }       
}

//中断服务程序
void INT0_ISR(void) interrupt 0
{
        //IE0=0;对应的中断标志位是硬件自动清零,所以无需再软件清零
        buzzer=0;//开启蜂鸣
        delay();
        buzzer=1;//关闭蜂鸣
}

void delay(void)
{
        unsigned char i,j;
        for(i=0;i<200;i++)
        {
                for(j=0;j<200;j++){;}
        }
}


回复

使用道具 举报

ID:883242 发表于 2024-1-23 13:02 | 显示全部楼层
楼上说的对,就是没有理解中断在硬件上面的意义,才会写出这么不符合逻辑的软件。
回复

使用道具 举报

ID:278457 发表于 2024-1-23 23:43 | 显示全部楼层
谢谢各位
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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