帮我看一下程序,为什么检测不到时间

2020-02-05 08:50发布

本帖最后由 yibuww 于 2012-7-11 17:02 编辑

/********************************************
************重力加速度测量*******************
********************************************/
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^0;
sbit RW = P2^1;
sbit E  = P2^2;
sbit s0=P1^0;
sbit s1=P1^1;
sbit s2=P1^2;
uchar second=0;
uint ms=0;
float t1=0,t2=0,g=0;
float h1=0.193,h2=0.4425;
uchar str1[16]={"Please start"};
uchar str2[16]={"The result is"};
/**********************************/
void delayus(uint a)//微秒延时//
{
  while(a--);
}
/***********************************/
void delay(uint dell)//毫秒延时//
{
    uchar x;
    for(dell;dell>0;dell--)
    for(x=110;x>0;x--);
}
/***********************************/
void wr_com(uchar temp)//写指令//0
{
    RS=0;
    RW=0;
    P0=temp;
    E=1;
    E=0;
}
/************************************/
void wr_data(uchar num)//写数据//
{
   RS=1;
   RW=0;
   P0=num;
   E=1;
   E=0;
}
/*************************************/
void disp_lcd(uchar addr,uchar *templ)
{
uchar i;
wr_com(addr);
delay(50);
for(i=0;i<16;i++)
{
  wr_data(templ);
  delay(50);
}
}
/**************************************/
void lcd_init()//初始化液晶//
{
wr_com(0x30);
delay(50);
wr_com(0x38);
delay(50);
wr_com(0x01);
delay(50);
wr_com(0x06);
delay(50);
wr_com(0x0c);
delay(50);
}
/***************************************/
void Timer_Inint()//初始化
{
TMOD = 0x01;//T0为方式1
TH0 =0x1c;
TL0 =0x18;//1ms
ET0 = 1;
EA = 1;
}
/***************************************/
void main()
{
uchar table[9]={'G','='};
Timer_Inint();//定时器初始化
lcd_init();//1602初始化
disp_lcd(0x80,str1);
while(1)                                              **********************************************************************************
{
  if(s0==0)//检测外部信号,并计时
  TR0=1;//启动定时器
   if(s1==0)
   t1=(second*1000+ms)/1000;//时间t1(从s0为低电平到s1为低电平这段时间)                                     就是这段的问题啊,到底定时器启动没有啊?怎么时间t1,t2还是为0,
    if(s2==0)
    t2=(second*1000+ms)/1000;//时间t2(从s0为低电平到s2为低电平这段时间?
    TR0=0;//关定时器**************************************************************************************************

g=2*(h1/t1-h2/t2)/(t1-t2);
table[2]=((uint)(g*10000)/10000)|0x30;//存g的各位数据
table[3]='.';
table[4]=((uint)(g*1000)/100%10)|0x30;
table[5]=((uint)(g*1000)%100/10)|0x30;
table[6]=((uint)(g*1000)%10)|0x30;
disp_lcd(0x80,str2);//第一行显示
disp_lcd(0xc0,table);//第二行显示
}
}
/***************************************/
void time0() interrupt 1//中断服务程序
{
  TH0 =0x1c;
  TL0 =0x18;
  ms++;
if(ms==1000)
{
ms=0;
second++;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。