打印

脉搏测量 急求

[复制链接]
4515|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
未知四月|  楼主 | 2013-5-18 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是做的脉搏测量, 经过整流滤波后,输出的方波在示波器上显示的很正确,可是当输入单片机再显示的时候显示的数字变化总是比示波器上变化的快,脉搏每分钟都达到一百四五,,求求各位大神帮助,毕业设计啊 老师让下周演示

相关帖子

沙发
tyw| | 2013-5-18 16:28 | 只看该作者
是不是把脉冲的前后沿都计数了?数字翻倍了

使用特权

评论回复
板凳
huangxz| | 2013-5-18 16:30 | 只看该作者
计算的有问题吧

使用特权

评论回复
地板
未知四月|  楼主 | 2013-5-18 16:30 | 只看该作者
也不是 有的时候他会正确几个读书 有的时候就变话很快,大多数是变化快,,大神给给指点吧  

使用特权

评论回复
5
未知四月|  楼主 | 2013-5-18 16:32 | 只看该作者
tyw 发表于 2013-5-18 16:28
是不是把脉冲的前后沿都计数了?数字翻倍了

也不是 有的时候他会正确几个读书 有的时候就变话很快,大多数是变化快,,大神给给指点吧

使用特权

评论回复
6
未知四月|  楼主 | 2013-5-18 16:34 | 只看该作者
huangxz 发表于 2013-5-18 16:30
计算的有问题吧

应该不是啊 程序已经换了好几个了 还是这样  大神给弟弟指点吧  下周老师就看了

使用特权

评论回复
7
huangxz| | 2013-5-18 16:39 | 只看该作者
未知四月 发表于 2013-5-18 16:34
应该不是啊 程序已经换了好几个了 还是这样  大神给弟弟指点吧  下周老师就看了 ...

一般测量20个周期,取平均值就够了,不知道你是怎么做的?

使用特权

评论回复
8
未知四月|  楼主 | 2013-5-18 16:46 | 只看该作者
huangxz 发表于 2013-5-18 16:39
一般测量20个周期,取平均值就够了,不知道你是怎么做的?

#include "REG52.H"
#include"intrins.h"
#include"12864.h"
#include"ds1302.h"       
uint num,maibo;
bit wanbiflag=0;
sbit k1=P1^0;
sbit k2=P2^0;
uint i,time;
void t0_init() //定时器、计数器设置函数
{
        TMOD=0x11; //指定定时/计数器的工作方式为3
        TH1=0;  //定时器T0的高四位=0
        TL1=0;  //定时器T0的低四位=0
        IT1=1;
        EA=1;  //系统允许有开放的中断
        ET1=1; //允许T0中断
//        EX1=1;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        ET0=1;
        TR0=0;
        TR1=1; //开启中断,启动定时器
}
void main()
{
        lcd_init();
        ds1302_init();
        Locat_XY(0,0);
        Write_Datas("00时00分00秒");
        t0_init();
        while(1)
        {
                if(k1==0)
                {
                        Locat_XY(0,1);
                        Write_Datas("开始测量");
                        Locat_XY(0,2);
                        Write_Datas("        ");
                        i=0;
                        time=200;
                        num=0;
                        EX1=1;
                        TR0=1;
                        wanbiflag=0;
                }
                if(k2==0)
                {
                        EX1=1;
                }
        }
}
void int0() interrupt 2
{
        num=num++;
}

void t0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        i=i+1;
        if(i==time)
        {
                EX1=0;
                TR0=0;
                maibo=num*6;
                wanbiflag=1;
        }
}

void timer1() interrupt 3
{
        fen = BCD_Decimal(read_1302(0x83));
        shi = BCD_Decimal(read_1302(0x85));
        miao = BCD_Decimal(read_1302(0x81));
        write_date(0x82,fen);
        write_date(0x80,shi);
        write_date(0x84,miao);

        Locat_XY(5,1);
        Write_Dat(num/1000+'0');
        Write_Dat(num%1000/100+'0');
        Write_Dat(num%100/10+'0');
        Write_Dat(num%10+'0');

        if(wanbiflag==1)
        {
                Locat_XY(0,1);
                Write_Datas("测量完毕");
                Locat_XY(0,2);
                Write_Dat(maibo/1000+'0');
                Write_Dat(maibo%1000/100+'0');
                Write_Dat(maibo%100/10+'0');
                Write_Dat(maibo%10+'0');
                wanbiflag=0;
        }
}
大神 给弟弟看看这个对不对 啊   看看计数有问题吗 先谢谢了

使用特权

评论回复
9
huangxz| | 2013-5-18 16:55 | 只看该作者
未知四月 发表于 2013-5-18 16:46
#include "REG52.H"
#include"intrins.h"
#include"12864.h"

你那些操作别放在中断里面处理啊

使用特权

评论回复
10
上天如一| | 2013-5-18 17:03 | 只看该作者
huangxz 发表于 2013-5-18 16:55
你那些操作别放在中断里面处理啊
大号现身,你说的是显示部分??

使用特权

评论回复
11
huangxz| | 2013-5-18 17:22 | 只看该作者
上天如一 发表于 2013-5-18 17:03
大号现身,你说的是显示部分??

void timer1() interrupt 3
里面处理的太多了,移出去吧

使用特权

评论回复
12
Daojia211| | 2013-5-18 17:23 | 只看该作者

使用特权

评论回复
13
未知四月|  楼主 | 2013-5-18 17:29 | 只看该作者
Daojia211 发表于 2013-5-18 17:23

大神也给点指点把  弟弟都着急死了

使用特权

评论回复
14
tyw| | 2013-5-18 18:32 | 只看该作者
本帖最后由 tyw 于 2013-5-18 18:36 编辑

1. 中断里只收一个脉冲信号,做个标记就出来
2. 定时中断里只修改一个时标
3. 传感器过来的信号加微分电路,即触发脉宽不要太大,够响应即可,因为外中断开门时间长了,中断处理早就结束,中断大门还是开着,会多次进入中断,影响其他程序,你用示波器看一下

使用特权

评论回复
15
上天如一| | 2013-5-18 20:12 | 只看该作者
tyw 发表于 2013-5-18 18:32
1. 中断里只收一个脉冲信号,做个标记就出来
2. 定时中断里只修改一个时标
3. 传感器过来的信号加微分电路, ...

1.这里说的中断指的是外部中断1 interrupt 2吗?这里只有一个num的数据处理,每次下降沿进入interrupt 2,加完一次就出来了?
2.这里说的定时器中断是指定时器1interrupt 3吗?这个部分就是拿来作显示用的,这个的响应时间是65535个时钟周期,应该足够里面的处理了。
3.“外部中断开门时间长”是什么意思?因为是下降沿触发,每次响应之后,标志位都清除了,应该不存在多次进入的情况吧?

使用特权

评论回复
16
上天如一| | 2013-5-18 20:14 | 只看该作者
huangxz 发表于 2013-5-18 17:22
void timer1() interrupt 3
里面处理的太多了,移出去吧

void timer1() interrupt 3
它的时间应该足够处理里面的东西了吧?

使用特权

评论回复
17
tyw| | 2013-5-18 20:28 | 只看该作者
本帖最后由 tyw 于 2013-5-18 21:12 编辑
上天如一 发表于 2013-5-18 20:12
1.这里说的中断指的是外部中断1 interrupt 2吗?这里只有一个num的数据处理,每次下降沿进入interrupt 2, ...


3. 是指硬件信号,若是低有效,能触发中断的话,触发好了,中断口的低电平立即应该撤消.你用示波器看,实际这个低电平维持了多久?清标志位没用的.
你清标志,禁止中断,当中断返回后,RETI 指令会自动置位EMI ,允许中断服务.这时中断口如果低电平还未撤,就会重新进入中断.
根据你描述的现象,有时正常,说明程序是好的,唯有中断开门时间过长这个原因了.把触发信号加级微分,变成窄脉冲试.( 串只103瓷片+2k上拉电阻→再接中断口)

使用特权

评论回复
18
tsj1992| | 2013-5-18 21:00 | 只看该作者
计数管脚是否有接上拉下拉电阻之类的,最好不要出现悬空,否则容易乱跳。个人的一点实际经验。

使用特权

评论回复
19
未知四月|  楼主 | 2013-5-18 22:05 | 只看该作者
tyw 发表于 2013-5-18 20:28
3. 是指硬件信号,若是低有效,能触发中断的话,触发好了,中断口的低电平立即应该撤消.你用示波器看,实际这 ...

C:\Users\zxb\Desktop\新建文件夹 (2)C:\Users\zxb\Desktop\新建文件夹 (2)

使用特权

评论回复
20
tyw| | 2013-5-18 22:17 | 只看该作者
点"高级模式"→点"批量上传"→才能把你c盘里的东东上传坛子里来哦

使用特权

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

本版积分规则

3

主题

21

帖子

0

粉丝