打印

初出茅庐:请看我用DS1302写的整点报时程序

[复制链接]
4773|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
5号工作室|  楼主 | 2010-9-25 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
BCD, CD, GB, os, AD
以下是中断中的任务:
void timer0() interrupt 1//中断任务:取时间,显示时间
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
miao=turnBCD(read_1302(0x81));//读取秒
fen=turnBCD(read_1302(0x83));//读取分
shi=turnBCD(read_1302(0x85));//读取时
if((fen==0)&&(miao==0))//判断整点的到来 {
  flagbaoshi=1;//报时标志变为1
}
然后在主程序中判断中断标志的到来:
    if(flagbaoshi==1)//判断整点报时到来
    {
  flagbaoshi=0;//使标志变回0
     Beep();启动报时
    }
所遇问题为:一到整点就不停的报时,请各位大哥帮帮忙,看看是否哪里出了问题,一万个感谢!

相关帖子

沙发
永不落的星| | 2010-9-26 11:35 | 只看该作者
报时的时间没设定

使用特权

评论回复
板凳
5号工作室|  楼主 | 2010-9-26 12:00 | 只看该作者
你好!if((fen==0)&&(miao==0))//判断整点的到来    这一句不是设定了时间的多少吗?每到整点都报一次时,是否有什么漏洞呢?

使用特权

评论回复
地板
5号工作室|  楼主 | 2010-9-27 15:18 | 只看该作者
求人回答啊~~~~!!!!

使用特权

评论回复
5
hailan13| | 2010-9-27 15:40 | 只看该作者
报时的时间设置问题:Beep();启动报时,看一下你的BEEP()程序

使用特权

评论回复
6
hailan13| | 2010-9-27 15:43 | 只看该作者
你好!if((fen==0)&&(miao==0))//判断整点的到来    这一句不是设定了时间的多少吗?每到整点都报一次时,是否有什么漏洞呢?

这个是判断整点的到来,但是报时时你的BEEP程序没有时间限定,也就是说响铃没有多长时间关闭。

使用特权

评论回复
7
5号工作室|  楼主 | 2010-9-27 15:57 | 只看该作者
6# hailan13    你好!我用的是无源蜂鸣器,程序如下:void Beepkey()//按键音函数
{
for(a=100;a>0;a--)
{
  beep=~beep;
  delay(1);//经测试,大于1毫秒响一次时声音较好听
}
}

使用特权

评论回复
8
5号工作室|  楼主 | 2010-9-27 15:58 | 只看该作者
已经设定了时间限制了,for(a=100;a>0;a--)  不太明白为什么,请兄弟继续帮帮忙

使用特权

评论回复
9
hailan13| | 2010-9-27 16:34 | 只看该作者
void delay(uint z)          //延时函数
{
uint x,y;
for(x=z;x>0;i--)
for(y=110;y>0;y--);
}
void di()           //蜂鸣器发声函数
{
beep=0;
delay(100);
beep=1;
}

使用特权

评论回复
10
john_light| | 2010-9-27 17:28 | 只看该作者
变量名很可爱,中西合璧啊。

使用特权

评论回复
11
5号工作室|  楼主 | 2010-9-27 17:56 | 只看该作者
10# john_light    呵呵~~我的英文四级还没有过呢?

使用特权

评论回复
12
fzjswn| | 2010-9-27 18:00 | 只看该作者
启动了报时,没看到停止报时啊

使用特权

评论回复
13
fzjswn| | 2010-9-27 18:01 | 只看该作者
看到Beep()了,这个不是让他响一百次吗?

使用特权

评论回复
14
5号工作室|  楼主 | 2010-9-27 18:23 | 只看该作者
13# fzjswn   不是的,我的蜂鸣器是无源的,要用交流变化的频率才能响,不是一通电就响个不停的那种。

使用特权

评论回复
15
原野之狼| | 2010-9-28 00:20 | 只看该作者
看不出问题

使用特权

评论回复
16
hailan13| | 2010-9-28 13:51 | 只看该作者
楼主程序调好了?

使用特权

评论回复
17
zjswuyunbo| | 2010-10-2 18:40 | 只看该作者
9# hailan13 晕!X=z;x> 0;i--.这里错了吧

使用特权

评论回复
18
hailan13| | 2010-10-4 10:31 | 只看该作者
17# zj 我更晕,是的,嘿嘿,错了,写错了。

使用特权

评论回复
19
hwwyhy| | 2010-10-4 11:08 | 只看该作者
这是你全部的中断程序吗?秒等于0后什么时候会自加,是在turnBCD()函数里实现吗?
你可以这样来调试,
1 先关中断,在主程序里看能不能实现报时一段时间,关了一段时间,检测你的报时程序是否正确,
2 如果第一步正确,就跟踪flagbaoshi标志,查询它在整点报时后是否又置1了。

使用特权

评论回复
20
天雨粟| | 2010-10-6 20:52 | 只看该作者
beep()函数的问题
由于采取beep=~beep;这种机制
退出beep()函数时,beep可能是高,也可能是低
故退出beep()前,一定要有一条
beep=1;强制停止报时的语句。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
5号工作室 + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

144

帖子

1

粉丝