打印

程序调试!!请各位老大帮小弟分析

[复制链接]
1919|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddaitt99|  楼主 | 2008-5-6 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器
#include<reg51.h>
#define uint  unsigned int
#define uchar unsigned char
sbit beep=P3^7;
uint a,flag0,flag1;
void init();
void beep4();
void beep2();
void beep1();
void delay(uchar z);
void main()
{
    init();
    while(1)
    {    
        if(flag0==1)
            {
                flag0=0;
                if(a==1)    
                {
                    do
                    {
                        beep4();
                    }
                    while(flag0==0);
                }
                if(a==2)    
                {
                    do
                    {
                        beep2();
                    }
                    while(flag0==0);
                }
                if(a==3)    
                {
                    do
                    {
                        beep1();
                    }
                    while(flag0==0);
                }
                if(a==4)
                beep=1;
                
            }                        
                
    }

}
void init()
{
    TMOD=0x20;
    TH1=0xfd;
    TH0=0xfd;
    TR1=1;
    EA=1;
    ES=1;
    SCON=0x50;    
}
void ser() interrupt 4
{
    if(RI==1)
    {    
        RI=0;
        a=SBUF;
        SBUF=a;
        P1=a;
        flag0=1;
    }
    if(TI==1)
    {    
        TI=0;
    }
}
void delay(uchar z)
{
    uchar x,y;    
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void beep4()
{    
    beep=0;
    delay(400);
    beep=1;
    delay(400);
}
void beep2()
{
    beep=0;
    delay(200);
    beep=1;
    delay(200);
}
void beep1()
{
    beep=0;
    delay(100);
    beep=1;
    delay(100);    
}


p37控制蜂鸣器!
写完调试发现:当上位机发1,2,3时可以按要求蜂鸣器变化频率,发4也可以关闭蜂鸣器,可是当发别的任意数的时候,蜂鸣器都被关闭啦,再发1,2,3也可以启动蜂鸣器的,好像就是只要发1.2.3意外的数就可以关掉蜂鸣器!!
请各位老大指教!!

相关帖子

沙发
ddaitt99|  楼主 | 2008-5-6 12:42 | 只看该作者

刚刚想到~~

当发1.2.3.4以外的数时进入中断flag0置1,while(flag0==0);跳出了循环,因为发的数据不是1.2.3中的一个,所以不执行发声循环,就相当于关闭啦啊!!
但还是没想到办法解决!!

使用特权

评论回复
板凳
ddaitt99|  楼主 | 2008-5-6 12:53 | 只看该作者

~~~

想让单片机接受1.2.3.4以外的数不去处理,该怎么写???

使用特权

评论回复
地板
zhizuzhe| | 2008-5-6 14:20 | 只看该作者

晕,你继续加判断条件不就OK了

判断一下flag0=1的时候是收到的什么数啊!!如果是1~4中的一个数,则跳出来,并改变a值,否则,a值不变。

使用特权

评论回复
5
ddaitt99|  楼主 | 2008-5-6 15:33 | 只看该作者

经过提点改好啦

经过提点改好啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

105

帖子

0

粉丝