搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2012-7-11 15:44:34 | 显示全部楼层 |阅读模式
本帖最后由 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++;
}
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-7-11 16:04:59 | 显示全部楼层
本帖最后由 shmtspd 于 2012-7-11 16:06 编辑

RS=0;
    RW=0;
    P0=temp;
    E=1;
    E=0;


你这段程序这是不是要加点延时啊?E置1后,马上就置0了。我刚学C,只是个人想法。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 18:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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