找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2896|回复: 9
收起左侧

有一段单片机的中断程序看不懂,麻烦大神有空进来看看

[复制链接]
ID:528126 发表于 2019-5-6 00:40 | 显示全部楼层 |阅读模式
void main (void)
{     
    static int value;
(这里一段无关程序 省略)            
value ++;
                if(value >= 200)
                {
                        value = 0;
                        clock_h_l();   //报警
                }
                delay_1ms(1);
        }
}

/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{       
        static uchar value;
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms
        value ++;         
        if(value >= 20)   
        {
                flag_1s = 1;           //1秒
                value = 0;
        }
}
这段程序主要就是达到预设值时,蜂鸣器一下一下地响。
我的问题是:value大于200有什么作用呢?
                    怎么让蜂鸣器长鸣,而不是间歇性报警呢?

回复

使用道具 举报

ID:213173 发表于 2019-5-6 06:37 | 显示全部楼层
value这个变量名分别在主程序和中断程序中被定义为静态变量,编译器自动识别为两个不同变量。
没有看到clock_h_l()函数内容,无法判断蜂鸣器的控制方式,只能知道value>=200报警程序被调用。
回复

使用道具 举报

ID:123289 发表于 2019-5-6 07:55 | 显示全部楼层
正常value=0-19,不会>=200;如value>=200说明定时器中断失效了。所以……
回复

使用道具 举报

ID:528181 发表于 2019-5-6 08:56 | 显示全部楼层
去掉if
回复

使用道具 举报

ID:142320 发表于 2019-5-6 09:50 | 显示全部楼层
同学们编程不规范,所以问题一大堆
回复

使用道具 举报

ID:116773 发表于 2019-5-6 10:04 | 显示全部楼层
yzwzfyz 发表于 2019-5-6 07:55
正常value=0-19,不会>=200;如value>=200说明定时器中断失效了。所以……

请参考2楼的帖子,这实际上是两个变量。
回复

使用道具 举报

ID:528313 发表于 2019-5-6 10:54 | 显示全部楼层
value实际是两个变量的,主程序中大于200调用蜂鸣器驱动。
回复

使用道具 举报

ID:528126 发表于 2019-5-6 14:36 | 显示全部楼层
wulin 发表于 2019-5-6 06:37
value这个变量名分别在主程序和中断程序中被定义为静态变量,编译器自动识别为两个不同变量。
没有看到clo ...

这是void clock_h_l()的程序   请问为什么蜂鸣器是间歇性的响,而不是长鸣呢?
void clock_h_l()
{
        if(LJ * 10 > set_LJ)
        {
                beep = ~beep;           //蜂鸣器报警       
        }
        else
        {
                beep = 1;                //取消报警
        }       
}
回复

使用道具 举报

ID:528126 发表于 2019-5-6 14:58 | 显示全部楼层
wulin 发表于 2019-5-6 06:37
value这个变量名分别在主程序和中断程序中被定义为静态变量,编译器自动识别为两个不同变量。
没有看到clo ...

第一个VALUE有什么用呢? 感觉去掉了也没什么影响啊。
毕竟是否报警是由 clock_h_l()中的程序来判断的
回复

使用道具 举报

ID:478236 发表于 2019-5-7 15:14 | 显示全部楼层
yanghaan 发表于 2019-5-6 14:36
这是void clock_h_l()的程序   请问为什么蜂鸣器是间歇性的响,而不是长鸣呢?
void clock_h_l()
{

看判断条件,0(低电平)才报警的,要一直报警的话直接改成beep=0;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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