找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8102|回复: 0
打印 上一主题 下一主题
收起左侧

怎么用单片机测量两个脉冲的时间间隔啊!

[复制链接]
跳转到指定楼层
楼主
ID:44893 发表于 2012-10-9 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit P10=P1^0;
sbit P11=P1^1; //位码口
sbit P12=P1^2;
sbit P13=P1^3;

sbit P32=P3^2;

unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};   //对应0---9
unsigned char  Data_Buffer[4]={0,0,0,0};  //存放统计的数据。 单位为(100uS)

uint time=0;

 

void fenge()    //分割数据,以便于统计较大间隔时间。
{
    Data_Buffer[0]=time/1000;
   Data_Buffer[1]=time/100%10;
   Data_Buffer[2]=time/10%10;
   Data_Buffer[3]=time%10; 
}

void display()  //用于四个数码管显示数据
{
 uchar Bit=0;
 while(1)
 {
   Bit++;
  if(Bit>=4)
  Bit=0;
  P0=Duan[Data_Buffer[Bit]]; //数据的输出
  switch(Bit)//开位码
   {
    case 0: P10=0;break;
    case 1: P11=0;break;
    case 2: P12=0;break;
    case 3: P13=0;break;
   }  
 } 
}

void mian()
{
 EX0=0;
 EA=1;
 IT0=0;//低电平有效

 TMOD=0x02;   //设置为自动重载方式
 TH0=0x92;   //设置为100uS的计数
 TL0=0x92;
 TR0=0;

  while(1)
 {
  fenge();
  display();
  time=0;    //当前显示完毕后,清当前time的值
  EX0=1;    //开启外部中断
 }

}

void zhongduan() interrupt 0
{
 TR0=1;
 if(TH0==1)  //100uS定时器溢出
 {
  time++;   //统计两个脉冲的时间
  TH0=0;
 }
 if(P32==1)   //如果外部中断变为高电平,关闭中断。保证统计的是两个脉冲的间隔时间。为主函数显示数据争取时间。
 EX0=0; 

}

 

有点问题,谁能帮我改改吗!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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