打印

脉搏测量 急求

[复制链接]
5585|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

粉丝