找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6226|回复: 1
收起左侧

[已解决]求助:秒表程序不能计时!

[复制链接]
ID:9960 发表于 2009-4-27 11:58 | 显示全部楼层 |阅读模式
     用的是本站的51hei-5型开发板,学着写了个秒表程序(还不完善,按键程序等还没有写出来,暂时用的自动计时),但是定时器0 10ms中断不被响应,LED一直显示00.00.00.00,不知道怎么回事,请DX们帮忙分析下,谢谢!

程序如下:

#include <AT89X51.h>
#include "intrins.h"
#include "math.h"

typedef unsigned int uint;
typedef unsigned char uchar;

#define DUAN P2_6
#define WEI P2_7

uchar Hour,Mint,Sec,Ms;  //定义时,分,秒,毫秒变量static

uchar LED [8];
uchar code numtab []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ;  //共阴LED显示字库0-9

/*****************************************************
功能:T0中断初始化
描述:T0模式1,10ms定时
参数:无
返回:无
*****************************************************/
void time0_init (void)
{
 TMOD=0x1;
 TH0=(65536-10000)/256;
 TL0=(65536-10000)%256;
 EA=1;
 ET0=1;
}

/*溢出闪烁提醒子程序(待写)*/
void flash ()
{
}

 /*****************************************************
功能:数据转换
描述:将hour,min,sec,ms十六进制数据转换为BCD码
参数:无
返回:无
*****************************************************/
void to_bcd ()
{
 LED [0]=Ms%10;
 LED [1]=Ms/10;
 LED [2]=Sec%10;
 LED [3]=Sec/10;
 LED [4]=Mint%10;
 LED [5]=Mint/10;
 LED [6]=Hour%10;
 LED [7]=Hour/10;

/*****************************************************
功能:计数
描述:时,分,秒,毫秒 计数
参数:无
返回:无
*****************************************************/

void count ()
{
 if (++Ms==100)
 {
  Ms=0;
  if (++Sec==60)
  {
   Sec=0;
   if (++Mint==60)
   {
    Mint=0;
    if (++Hour==100)  //计数溢出时停止计时,LED闪烁显示FFFFFFFF
    {
     TR0=0;
     flash ();
    }
   }
  }
 }
}


/*****************************************************
功能:T0中断服务子程序
描述:T0模式1,10ms定时
参数:无
返回:无
*****************************************************/
void t0_init () interrupt 1
{
 TH0=(65536-10000)/256;
 TL0=(65536-10000)%256;
 count ();
 to_bcd ();
}

//延时子程序
void delay (uint i)
{
 for (; i>0; i--);
}

void disp ()
{
 uchar i,b=0x7f;
 for (i=0; i<8; i++)
 {
  WEI=1;
  P0=b;   
  WEI=0;
  DUAN=1;
  if (i==2 || i==4 || i==6) //2,4,6位加小数点
  {
   P0=numtab [LED ]|0x80;
  }
  else
   P0=numtab [LED ];
  DUAN=0;
  b=_cror_(b,1);
  delay (80);  //延时1ms
 }
}

/*****************************************************
功能:主函数
描述:无
参数:无
返回:无
*****************************************************/

void main (void)
{
 time0_init (); //T0中断初始化
 TR0=1;   //开始计时
  while (1)         //显示
   { 
      disp ();       
    }                 //红色部份原来是只有一条 disp ();   导致程序跑飞! 
}

 

 

 原来是main函数没有写好,disp函数只被执行了第一次就没有执行了,所以只显示00 00 00    ,就不动了。 没有实时显示(这种错误系统怎么没有提示呢?搞得我等菜鸟查错查了半天~).  
下一步来写按键和溢出提示部份.

回复

使用道具 举报

ID:1 发表于 2009-4-27 20:19 | 显示全部楼层

很好,顶一下

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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