用的是本站的51hei-5型開發(fā)板,學(xué)著寫了個(gè)秒表程序(還不完善,按鍵程序等還沒(méi)有寫出來(lái),暫時(shí)用的自動(dòng)計(jì)時(shí)),但是定時(shí)器0 10ms中斷不被響應(yīng),LED一直顯示00.00.00.00,不知道怎么回事,請(qǐng)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; //定義時(shí),分,秒,毫秒變量static
uchar LED [8]; uchar code numtab []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ; //共陰LED顯示字庫(kù)0-9
/***************************************************** 功能:T0中斷初始化 描述:T0模式1,10ms定時(shí) 參數(shù):無(wú) 返回:無(wú) *****************************************************/ void time0_init (void) { TMOD=0x1; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; }
/*溢出閃爍提醒子程序(待寫)*/ void flash () { }
/***************************************************** 功能:數(shù)據(jù)轉(zhuǎn)換 描述:將hour,min,sec,ms十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為BCD碼 參數(shù):無(wú) 返回:無(wú) *****************************************************/ 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; }
/***************************************************** 功能:計(jì)數(shù) 描述:時(shí),分,秒,毫秒 計(jì)數(shù) 參數(shù):無(wú) 返回:無(wú) *****************************************************/
void count () { if (++Ms==100) { Ms=0; if (++Sec==60) { Sec=0; if (++Mint==60) { Mint=0; if (++Hour==100) //計(jì)數(shù)溢出時(shí)停止計(jì)時(shí),LED閃爍顯示FFFFFFFF { TR0=0; flash (); } } } } }
/***************************************************** 功能:T0中斷服務(wù)子程序 描述:T0模式1,10ms定時(shí) 參數(shù):無(wú) 返回:無(wú) *****************************************************/ void t0_init () interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; count (); to_bcd (); }
//延時(shí)子程序 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位加小數(shù)點(diǎn) { P0=numtab [LED ]|0x80; } else P0=numtab [LED ]; DUAN=0; b=_cror_(b,1); delay (80); //延時(shí)1ms } }
/***************************************************** 功能:主函數(shù) 描述:無(wú) 參數(shù):無(wú) 返回:無(wú) *****************************************************/
void main (void) { time0_init (); //T0中斷初始化 TR0=1; //開始計(jì)時(shí) while (1) //顯示 { disp (); } //紅色部份原來(lái)是只有一條 disp (); 導(dǎo)致程序跑飛! }
原來(lái)是main函數(shù)沒(méi)有寫好,disp函數(shù)只被執(zhí)行了第一次就沒(méi)有執(zhí)行了,所以只顯示00 00 00 ,就不動(dòng)了。 沒(méi)有實(shí)時(shí)顯示(這種錯(cuò)誤系統(tǒng)怎么沒(méi)有提示呢?搞得我等菜鳥查錯(cuò)查了半天~ ). 下一步來(lái)寫按鍵和溢出提示部份.
|