µÚ4Õ Èí¼þ²¿·ÖµÄÉè¼Æ
4.1 Èí¼þÉè¼ÆË¼Â·
ÔÚ¼ÆÊýÆ÷¹¤×÷·½Ê½Ï£¬¼ÓÖÁÍⲿÒý½ÅµÄ´ý²âÐźŷ¢Éú´Ó1µ½0µÄÌø±äʱ¼ÆÊýÆ÷¼Ó1¡£ÍⲿÊäÈëÔÚÿ¸ö»úÆ÷ÖÜÆÚ±»²ÉÑùÒ»´Î£¬ÕâÑù¼ì²âÒ»´Î´Ó1µ½0µÄÌø±äÖÁÉÙÐèÒª2¸ö»úÆ÷ÖÜÆÚ£¨24¸öÕñµ´ÖÜÆÚ£©£¬ËùÒÔ×î´ó¼ÆÊýËÙÂÊΪʱÖÓÆµÂʵÄ1/24£¨Ê¹ÓÃ12MHzʱÖÓ£¬×î´ó¼ÆÊýËÙÂÊΪ500kHz£©,Ò²¾ÍÊÇ˵£¬Ê¹ÓÃ12MHzʱÖÓµÄAT89C51µ¥Æ¬»úÉè¼ÆµÄƵÂʼÆÊýÆ÷ϵͳ£¬Ëù²âÐÅºÅµÄÆµÂʲ»ÄÜ´óÓÚ500kHz£¬Èô´óÓÚÔò±ØÐëͨ¹ý·ÖƵÆ÷·ÖƵ²ÅÄܲâÊÔ£¬¶ø±¾´ÎÈÎÎñµÄÒªÇóÊǶÔ0-300kHzµÄÐźŽøÐвâÁ¿£¬ËùÒÔ¿ÉÒÔÖ±½Ó½øÐС£
ÀûÓÃAT89C51µ¥Æ¬»úµÄTO£¬T1µÄ¶¨Ê±/¼ÆÊýÆ÷¹¦ÄÜ£¬À´Íê³É¶ÔÊäÈëµÄÐźŽøÐÐÆµÂʼÆÊý¡£ÉèÖö¨Ê±Æ÷0¹¤×÷·½Ê½1£¬¶¨Ê±1s,²¢²úÉú·½²¨ÐźŴÓP1.1Òý½ÅÊä³ö¡£ÉèÖö¨Ê±Æ÷1¹¤×÷ÔÚ¼ÆÊý·½Ê½1£¬¶ÔÊäÈëÂö³å½øÐмÆÊý£¬Òç³ö²úÉúÖжϡ£½«¶¨Ê±Æ÷1Öж϶¨ÒåΪÓÅÏÈ¡£ÓÉÓÚ16λ¶þ½øÖƼӷ¨¼ÆÊýÆ÷µÄ×î´ó¼ÆÊýֵΪ65535,1sÖ®ÄÚ¿ÉÄÜ»á²úÉú¶à´ÎÒç³ö£¬ËùÒÔÐèÒªÔÚÖжϴ¦Àí³ÌÐòÀï¶ÔÖжϴÎÊý½øÐмÆÊý¡£1sµ½ºó£¬½«ÖжϴÎÊýºÍ¼ÆÊýÆ÷ÀïµÄÊýֵȡ³ö½øÐÐ×ۺϴ¦Àí£¬´¦ÀíºóµÄÊý¾ÝËÍÏÔʾ¡£
¶¨Ê±Æ÷T0µÄ¼ÆÊý³õÖµ£ºÓÉÓÚ¶¨Ê±Æ÷T0¹¤×÷ÔÚ¶¨Ê±·½Ê½Ê±×î´óµÄ¶¨Ê±Ê±¼ä´óԼΪ65ms£¬ÈôÒª¶¨Ê±1s,¿ÉÒÔ²ÉÓö¨Ê±10ms,ÖжÏ100´ÎÀ´Íê³É1sµÄ¶¨Ê±¡£¶ÔÓÚ¶¨Ê±10msÀ´Ëµ£¬Óö¨Ê±Æ÷·½Ê½1¿ÉʵÏÖ¡£
»úÆ÷ÖÜÆÚΪ£º
Tp=12/¾§ÕñƵÂÊ=12/12MHz=1¦Ìs ¼ÆÊý³õֵΪ£º
X=2^n-Tc=2^16-50000=15536=3CB0H ¹ÊTHO=3CH,TL0=E0H¡£
ÐÅºÅÆµÂʵļÆË㣺T1¹¤×÷ÔÚ¼ÆÊý·½Ê½Ê±×î´óµÄ¼ÆÊýֵΪ2^16£¬¼ÙÉè1sÄÚÒç³öC1´Î£¬×îºóδÒç³öµÄ¼ÆÊýֵΪC2£¬F=C1*2^16+C2=C1*65536 +(TH1*256+TL1)¡£
8
4.2 Èí¼þÉè¼ÆÁ÷³Ìͼ
¿ªÊ¼ÉèÖÃÊäÈëÐÅºÅÆµÂÊÖµÊǸ´Î»£¿·ñ¼ÆÊýÆ÷¡¢¶¨Ê±Æ÷¹¤×÷ÊýÂë¹ÜÏÔʾƵÂÊÖµ½áÊø
Èí¼þÉè¼ÆÁ÷³Ìͼ
4.3 Ô´³ÌÐò±àд
#include
unsigned long g_iCnt=0,g_CntLock; unsigned char g_cdisnum[6];
code unsigned char g_cDistable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char cnt10ms=0; //ÑÓʱ
9
void delay(unsigned int cnt) {
while(--cnt); }
/*------------------------------------------------ ¶¨Ê±Æ÷³õʼ»¯×Ó³ÌÐò
------------------------------------------------*/ void Init_Timer0(void) {
TMOD |= 0x01; //ʹÓÃģʽ1£¬16λ¶¨Ê±Æ÷£¬Ê¹ÓÃ\·ûºÅ¿ÉÒÔÔÚʹÓöà¸ö¶¨Ê±
Æ÷ʱ²»ÊÜÓ°Ïì
TH0=0x3C; //¸ø¶¨³õÖµ£¬ÕâÀïʹÓö¨Ê±Æ÷×î´óÖµ´Ó0¿ªÊ¼¼ÆÊýÒ»Ö±µ½10msÒç³ö TL0=0xB0;
EA=1; //×ÜÖжϴò¿ª ET0=1; //¶¨Ê±Æ÷Öжϴò¿ª TR0=1; //¶¨Ê±Æ÷¿ª¹Ø´ò¿ª }
void ShowToSeg(unsigned long uiNumber) {
static unsigned long PreuiNumber; if(PreuiNumber != uiNumber) {
g_cdisnum[0]=uiNumber/100000; //°Ñ¼ÆËãÊý×ÖµÄÿ¸öλ´æÈëÊý×é¡£ g_cdisnum[1]=(uiNumber/10000); g_cdisnum[2]=(uiNumber/1000); g_cdisnum[3]=(uiNumber/100); g_cdisnum[4]=(uiNumber/10); g_cdisnum[5]=(uiNumber); }
PreuiNumber = uiNumber; }
void Show() {
static char num=0;
ShowToSeg(g_CntLock); P1 = num;
P0=g_cDistable[g_cdisnum[num]]; num++; if(num>5) num=0; delay(40); }
char flag=0;
10
void main() {
EX0=1; //ÍⲿÖжÏ0¿ª IT0=1; //±ßÑØ´¥·¢ Init_Timer0();
EA=1; //È«¾ÖÖжϿª while(1) {
//ÔÚ´ËÌí¼ÓÆäËû³ÌÐò Show(); } }
/*------------------------------------------------ ÍⲿÖжϳÌÐò
------------------------------------------------*/ void ISR_Key(void) interrupt 0 using 1 {
g_iCnt++; }
void Timer0_isr(void) interrupt 1 using 1 {
TH0=0x3C; //¸ø¶¨³õÖµ£¬ TL0=0xB0;
cnt10ms++; P2^=0x01; if(20==cnt10ms) {
cnt10ms=0;
g_CntLock=g_iCnt; g_iCnt=0; } }
11
Ïà¹ØÍÆ¼ö£º