⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 7439的测试源程序
💻 C
字号:
#include <reg51.h>
unsigned int Timer0_Pause, Timer1_Pause;
unsigned char test (unsigned char Pos);

void ExternalINT0_ISR (void) interrupt 0 
{
    ET0 = 1; ET1 = 1; 
	TR0 = 1; TR1 = 1;
    P1 = P1 & 0x7F;   // P1.7(INTOUT) = 0;
    P1 = P1 & 0xF7;   // P1.4(SW2) = 0;  INT;ON,  A/Z is connected in C0MMON.
    EX0 = 0;
}

void Timer0_ISR (void) interrupt 1
{   
    P1 = P1 | 0x80;   // P1.7(INT) = 1; 	
    TR0 = 0; ET0 = 0;
    Timer0_Pause = 1;
}

void Timer1_ISR (void) interrupt 3  
{
    TR1 = 0; ET1 = 0;
    Timer1_Pause = 1;
}

void main (void)
{  
	unsigned int Timer0_Counts, Timer1_Counts, mCheckVal, i;
    int retVal, sumVal, Index;
	long ai;
    unsigned char mRepeatNum, bTestCh;
    EA = 1;   // Global Interrupt Enable
    TCON = 0x00;
    mRepeatNum = 30;   // Repeat Check
    mCheckVal = 2000;    // 0 Check
    Index = 0;
	bTestCh = 0;
DIGITAL_CHECK_PART:       
    Timer0_Pause = 0;
	Timer1_Pause = 0; 
    
	Timer0_Counts = 65535 - mCheckVal + 2 ;
    TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...   
	TL0 = (unsigned char)Timer0_Counts;
   	TMOD = (TMOD & 0xF0) | 0x05;               // Set Mode1 : Set Timer0 for 16bit Counter. 
    
    Timer1_Counts = 57535;                     // 65535 - 8001 + 1;
    TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...   
	TL1 = (unsigned char)Timer1_Counts;
   	TMOD = (TMOD & 0x0F) | 0x50;               // Set Mode1 : Set Timer1 for 16bit Counter. 
    ai = 0;
    EX0 = 1;   //External interrupt enabble
    while(1)
    {
       if(Timer0_Pause)
       {
	     ai = 0;
	     if(bTestCh == 0)
	     {  //******************************* 
           for(i=0; i<20000; i++);     // about 20ms Delay 
	       retVal = test(1);  if(retVal != 20) sumVal =  retVal;
		   P0 = P0 & 0x7F;//Buffer 2 select
           retVal = test(2);  if(retVal != 20) sumVal += retVal*10;
           P0 = P0 | 0x80;//Buffer 2 unselect
		   retVal = test(3);  if(retVal != 20) sumVal += retVal*100;
           P2 = P2 & 0x7F;  //Buffer 4 select
           retVal = test(4);  if(retVal != 20) sumVal += retVal*1000;
           P2 = P2 | 0x80;  //Buffer 4 unselect
           if( sumVal == (mCheckVal - 2000 ) )
           {
		       mRepeatNum = 3;
               if( ++Index < 4 )
			   {
                    mCheckVal = (1111 * Index) + 2000;
			   }
			   else
			   {
                   if( Index < 10 )
				   {
                      mCheckVal = (111 * Index) + 2000;
				   }
				   else
				   {
                      TR1 = 0; ET1 = 0;
                      goto ANALOG_CHECK_PART;
				   }
			   }
             }
		     else
		     {                
				if(--mRepeatNum != 0 )
			    {
                  TR1 = 0; ET1 = 0;
				  goto DIGITAL_CHECK_PART;
				}
				else  P1 = P1 & 0xBF;  // Red On			    
		     }
		   }
		   //*******************************
	       while( Timer1_Pause == 0 );
          
		   Timer0_Counts = 65535 - mCheckVal + 2;
           TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...   
	       TL0 = (unsigned char)Timer0_Counts;
   	       TMOD = (TMOD & 0xF0) | 0x05;               // Set Mode1 : Set Timer0 for 16bit Counter.            

	       Timer1_Counts = 57535;      // 65535 - 8001 + 1;
           TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...   
	       TL1 = (unsigned char)Timer1_Counts;
   	       TMOD = (TMOD & 0x0F) | 0x50;               // Set Mode1 : Set Timer1 for 16bit Counter.     

           P1 = P1 & 0x7F;           // P1.7(INTO) = 0;           
           ET0 = 1; ET1 = 1;
           TR0 = 1; TR1 = 1;
		   Timer0_Pause = 0;
		   Timer1_Pause = 0;		   
       }
	   if(++ai > 60000 ) goto Bad_Chip;     // Red On . Contact Test       
    }

ANALOG_CHECK_PART:
    P1 = P1 & 0xEF;      // P1.4(SW1 Switch) = 0;   Buff:Open , INTO:Open
    P1 = P1 | 0x08;      // P1.3(SW2 Switch) = 1;   INTO:Open , INL=COMMON
    ai = 1;
    while(1)
    {
	   mRepeatNum = 50;
       switch(ai)
	   {
          case 1: P1 = P1 & 0xF9; break;  // P1.1(A) = 0, P1.2(B) = 0 : VIN=Vcom;+/-0000
		  case 2: P1 = P1 | 0x02;P1 = P1 & 0xFB; break;  // P1.1(A) = 1, P1.2(B) = 0 : VIN=VREF=200mV;2000
		  case 3: P1 = P1 | 0x06;        // P1.1(A) = 1, P1.2(B) = 1 : VIN=GND;-4 overrange
	   }
       for(i=0; i<60000; i++);     // about 50ms Delay
Repeat_Check:
       Index = 0;
       for(i=0; i<30000; i++);     // about 20ms Delay

	   retVal = test(1);  if(retVal != 20) sumVal =  retVal;
	                         else Index++;
	   P0 = P0 & 0x7F;//Buffer 2 select
       retVal = test(2);  if(retVal != 20) sumVal += retVal*10;
	                         else Index++;
       P0 = P0 | 0x80;//Buffer 2 unselect 
	   retVal = test(3);  if(retVal != 20) sumVal += retVal*100;
	                         else Index++;
       P2 = P2 & 0x7F;  //Buffer 4 select
       retVal = test(4);  if(retVal != 20) sumVal += retVal*1000;
       P2 = P2 | 0x80;  //Buffer 4 unselect
	   switch(ai)
	   {
          case 1: if(((sumVal + 2) < 2) || (sumVal > 3))
		          {
                     if(--mRepeatNum > 0) goto Repeat_Check;
                       else goto Bad_Chip;
				  }
				  break;
		  case 2: if((sumVal < (2000 - 30)) || (sumVal > (2000 - 10)))
		          {
                     if(--mRepeatNum > 0) goto Repeat_Check;
                       else goto Bad_Chip;
				  }
                  break;
		  case 3:P2 = P2 & 0x7F;  //Buffer 4 select 
		         if(!(P2 & 0x09))  //-4 overrange test
                  {
                     if(--mRepeatNum > 0) goto Repeat_Check;
                       else goto Bad_Chip;
				  }
                  P2 = P2 | 0x80;  //Buffer 4 unselect		          
	   }

       if( ++ai > 3 ) break;
    }
    if(!(P1 & 0x01))      //V- check
	{
	  goto Bad_Chip;
	}
    // Good_Chip:
    P1 = P1 & 0xCF;      // Green On
    // End -3888 display
	P1 = P1 | 0x18;      // P1.4(SW1 Switch) = 1;   Buff:Open , INTO:Open
                         // P1.3(SW2 Switch) = 1;   INTO:Open , INL=COMMON
	bTestCh = 1;
    mCheckVal = 5888;
    goto DIGITAL_CHECK_PART;

Bad_Chip:
    P1 = P1 & 0xBF;      // Red On    
    while(1){}    
}

unsigned char test(unsigned char Pos)
{
   unsigned char mch, mVal; 

   if( Pos < 4 )
   {
      switch(Pos)
	  {
          case 1: mch = P0 & 0x7F; break;
          case 2: mch = P0 & 0x7F; break;
          case 3: mch = P2 & 0x7F;
	   }
      switch( mch )
      {
          case 0x40: mVal = 0; break;
          case 0x79: mVal = 1; break;
          case 0x24: mVal = 2; break;
          case 0x30: mVal = 3; break;
          case 0x19: mVal = 4; break;
          case 0x12: mVal = 5; break;
          case 0x02: mVal = 6; break;
          case 0x78: mVal = 7; break;
          case 0x00: mVal = 8; break;
          case 0x10: mVal = 9; break;
	      default:  mVal = 20; //error
      }
   }
   if( Pos == 4 )
   {
      mch = P2 & 0x3F; 
      switch( mch )
      {
          case 0x3F: mVal = 0; break;
          case 0x39: mVal = 1; break;
          case 0x14: mVal = 2; break;
          case 0x18: mVal = 3; break;
          default:  mVal = 20; //error
      }       
   }
   return (mVal);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -