用的是本站的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 ,就不动了。 没有实时显示(这种错误系统怎么没有提示呢?搞得我等菜鸟查错查了半天~). 下一步来写按键和溢出提示部份.
|