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

📄 main.lst

📁 7439的测试源程序
💻 LST
字号:
C51 COMPILER V6.02  MAIN                                                                   02/19/2005 09:19:52 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\main.c ROM(SMALL) DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          unsigned int Timer0_Pause, Timer1_Pause;
   3          unsigned char test (unsigned char Pos);
   4          
   5          void ExternalINT0_ISR (void) interrupt 0 
   6          {
   7   1          ET0 = 1; ET1 = 1; 
   8   1      	TR0 = 1; TR1 = 1;
   9   1          P1 = P1 & 0x7F;   // P1.7(INTOUT) = 0;
  10   1          P1 = P1 & 0xF7;   // P1.4(SW2) = 0;  INT;ON,  A/Z is connected in C0MMON.
  11   1          EX0 = 0;
  12   1      }
  13          
  14          void Timer0_ISR (void) interrupt 1
  15          {   
  16   1          P1 = P1 | 0x80;   // P1.7(INT) = 1; 	
  17   1          TR0 = 0; ET0 = 0;
  18   1          Timer0_Pause = 1;
  19   1      }
  20          
  21          void Timer1_ISR (void) interrupt 3  
  22          {
  23   1          TR1 = 0; ET1 = 0;
  24   1          Timer1_Pause = 1;
  25   1      }
  26          
  27          void main (void)
  28          {  
  29   1      	unsigned int Timer0_Counts, Timer1_Counts, mCheckVal, i;
  30   1          int retVal, sumVal, Index;
  31   1      	long ai;
  32   1          unsigned char mRepeatNum, bTestCh;
  33   1          EA = 1;   // Global Interrupt Enable
  34   1          TCON = 0x00;
  35   1          mRepeatNum = 30;   // Repeat Check
  36   1          mCheckVal = 2000;    // 0 Check
  37   1          Index = 0;
  38   1      	bTestCh = 0;
  39   1      DIGITAL_CHECK_PART:       
  40   1          Timer0_Pause = 0;
  41   1      	Timer1_Pause = 0; 
  42   1          
  43   1      	Timer0_Counts = 65535 - mCheckVal + 2 ;
  44   1          TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...   
  45   1      	TL0 = (unsigned char)Timer0_Counts;
  46   1         	TMOD = (TMOD & 0xF0) | 0x05;               // Set Mode1 : Set Timer0 for 16bit Counter. 
  47   1          
  48   1          Timer1_Counts = 57535;                     // 65535 - 8001 + 1;
  49   1          TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...   
  50   1      	TL1 = (unsigned char)Timer1_Counts;
  51   1         	TMOD = (TMOD & 0x0F) | 0x50;               // Set Mode1 : Set Timer1 for 16bit Counter. 
  52   1          ai = 0;
  53   1          EX0 = 1;   //External interrupt enabble
  54   1          while(1)
  55   1          {
C51 COMPILER V6.02  MAIN                                                                   02/19/2005 09:19:52 PAGE 2   

  56   2             if(Timer0_Pause)
  57   2             {
  58   3      	     ai = 0;
  59   3      	     if(bTestCh == 0)
  60   3      	     {  //******************************* 
  61   4                 for(i=0; i<20000; i++);     // about 20ms Delay 
  62   4      	       retVal = test(1);  if(retVal != 20) sumVal =  retVal;
  63   4      		   P0 = P0 & 0x7F;//Buffer 2 select
  64   4                 retVal = test(2);  if(retVal != 20) sumVal += retVal*10;
  65   4                 P0 = P0 | 0x80;//Buffer 2 unselect
  66   4      		   retVal = test(3);  if(retVal != 20) sumVal += retVal*100;
  67   4                 P2 = P2 & 0x7F;  //Buffer 4 select
  68   4                 retVal = test(4);  if(retVal != 20) sumVal += retVal*1000;
  69   4                 P2 = P2 | 0x80;  //Buffer 4 unselect
  70   4                 if( sumVal == (mCheckVal - 2000 ) )
  71   4                 {
  72   5      		       mRepeatNum = 3;
  73   5                     if( ++Index < 4 )
  74   5      			   {
  75   6                          mCheckVal = (1111 * Index) + 2000;
  76   6      			   }
  77   5      			   else
  78   5      			   {
  79   6                         if( Index < 10 )
  80   6      				   {
  81   7                            mCheckVal = (111 * Index) + 2000;
  82   7      				   }
  83   6      				   else
  84   6      				   {
  85   7                            TR1 = 0; ET1 = 0;
  86   7                            goto ANALOG_CHECK_PART;
  87   7      				   }
  88   6      			   }
  89   5                   }
  90   4      		     else
  91   4      		     {                
  92   5      				if(--mRepeatNum != 0 )
  93   5      			    {
  94   6                        TR1 = 0; ET1 = 0;
  95   6      				  goto DIGITAL_CHECK_PART;
  96   6      				}
  97   5      				else  P1 = P1 & 0xBF;  // Red On			    
  98   5      		     }
  99   4      		   }
 100   3      		   //*******************************
 101   3      	       while( Timer1_Pause == 0 );
 102   3                
 103   3      		   Timer0_Counts = 65535 - mCheckVal + 2;
 104   3                 TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...   
 105   3      	       TL0 = (unsigned char)Timer0_Counts;
 106   3         	       TMOD = (TMOD & 0xF0) | 0x05;               // Set Mode1 : Set Timer0 for 16bit Counter.        
             -    
 107   3      
 108   3      	       Timer1_Counts = 57535;      // 65535 - 8001 + 1;
 109   3                 TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...   
 110   3      	       TL1 = (unsigned char)Timer1_Counts;
 111   3         	       TMOD = (TMOD & 0x0F) | 0x50;               // Set Mode1 : Set Timer1 for 16bit Counter.     
 112   3      
 113   3                 P1 = P1 & 0x7F;           // P1.7(INTO) = 0;           
 114   3                 ET0 = 1; ET1 = 1;
 115   3                 TR0 = 1; TR1 = 1;
 116   3      		   Timer0_Pause = 0;
C51 COMPILER V6.02  MAIN                                                                   02/19/2005 09:19:52 PAGE 3   

 117   3      		   Timer1_Pause = 0;		   
 118   3             }
 119   2      	   if(++ai > 60000 ) goto Bad_Chip;     // Red On . Contact Test       
 120   2          }
 121   1      
 122   1      ANALOG_CHECK_PART:
 123   1          P1 = P1 & 0xEF;      // P1.4(SW1 Switch) = 0;   Buff:Open , INTO:Open
 124   1          P1 = P1 | 0x08;      // P1.3(SW2 Switch) = 1;   INTO:Open , INL=COMMON
 125   1          ai = 1;
 126   1          while(1)
 127   1          {
 128   2      	   mRepeatNum = 50;
 129   2             switch(ai)
 130   2      	   {
 131   3                case 1: P1 = P1 & 0xF9; break;  // P1.1(A) = 0, P1.2(B) = 0 : VIN=Vcom;+/-0000
 132   3      		  case 2: P1 = P1 | 0x02;P1 = P1 & 0xFB; break;  // P1.1(A) = 1, P1.2(B) = 0 : VIN=VREF=200mV;2000
 133   3      		  case 3: P1 = P1 | 0x06;        // P1.1(A) = 1, P1.2(B) = 1 : VIN=GND;-4 overrange
 134   3      	   }
 135   2             for(i=0; i<60000; i++);     // about 50ms Delay
 136   2      Repeat_Check:
 137   2             Index = 0;
 138   2             for(i=0; i<30000; i++);     // about 20ms Delay
 139   2      
 140   2      	   retVal = test(1);  if(retVal != 20) sumVal =  retVal;
 141   2      	                         else Index++;
 142   2      	   P0 = P0 & 0x7F;//Buffer 2 select
 143   2             retVal = test(2);  if(retVal != 20) sumVal += retVal*10;
 144   2      	                         else Index++;
 145   2             P0 = P0 | 0x80;//Buffer 2 unselect 
 146   2      	   retVal = test(3);  if(retVal != 20) sumVal += retVal*100;
 147   2      	                         else Index++;
 148   2             P2 = P2 & 0x7F;  //Buffer 4 select
 149   2             retVal = test(4);  if(retVal != 20) sumVal += retVal*1000;
 150   2             P2 = P2 | 0x80;  //Buffer 4 unselect
 151   2      	   switch(ai)
 152   2      	   {
 153   3                case 1: if(((sumVal + 2) < 2) || (sumVal > 3))
 154   3      		          {
 155   4                           if(--mRepeatNum > 0) goto Repeat_Check;
 156   4                             else goto Bad_Chip;
 157   4      				  }
 158   3      				  break;
 159   3      		  case 2: if((sumVal < (2000 - 30)) || (sumVal > (2000 - 10)))
 160   3      		          {
 161   4                           if(--mRepeatNum > 0) goto Repeat_Check;
 162   4                             else goto Bad_Chip;
 163   4      				  }
 164   3                        break;
 165   3      		  case 3:P2 = P2 & 0x7F;  //Buffer 4 select 
 166   3      		         if(!(P2 & 0x09))  //-4 overrange test
 167   3                        {
 168   4                           if(--mRepeatNum > 0) goto Repeat_Check;
 169   4                             else goto Bad_Chip;
 170   4      				  }
 171   3                        P2 = P2 | 0x80;  //Buffer 4 unselect		          
 172   3      	   }
 173   2      
 174   2             if( ++ai > 3 ) break;
 175   2          }
 176   1          if(!(P1 & 0x01))      //V- check
 177   1      	{
 178   2      	  goto Bad_Chip;
C51 COMPILER V6.02  MAIN                                                                   02/19/2005 09:19:52 PAGE 4   

 179   2      	}
 180   1          // Good_Chip:
 181   1          P1 = P1 & 0xCF;      // Green On
 182   1          // End -3888 display
 183   1      	P1 = P1 | 0x18;      // P1.4(SW1 Switch) = 1;   Buff:Open , INTO:Open
 184   1                               // P1.3(SW2 Switch) = 1;   INTO:Open , INL=COMMON
 185   1      	bTestCh = 1;
 186   1          mCheckVal = 5888;
 187   1          goto DIGITAL_CHECK_PART;
 188   1      
 189   1      Bad_Chip:
 190   1          P1 = P1 & 0xBF;      // Red On    
 191   1          while(1){}    
 192   1      }
 193          
 194          unsigned char test(unsigned char Pos)
 195          {
 196   1         unsigned char mch, mVal; 
 197   1      
 198   1         if( Pos < 4 )
 199   1         {
 200   2            switch(Pos)
 201   2      	  {
 202   3                case 1: mch = P0 & 0x7F; break;
 203   3                case 2: mch = P0 & 0x7F; break;
 204   3                case 3: mch = P2 & 0x7F;
 205   3      	   }
 206   2            switch( mch )
 207   2            {
 208   3                case 0x40: mVal = 0; break;
 209   3                case 0x79: mVal = 1; break;
 210   3                case 0x24: mVal = 2; break;
 211   3                case 0x30: mVal = 3; break;
 212   3                case 0x19: mVal = 4; break;
 213   3                case 0x12: mVal = 5; break;
 214   3                case 0x02: mVal = 6; break;
 215   3                case 0x78: mVal = 7; break;
 216   3                case 0x00: mVal = 8; break;
 217   3                case 0x10: mVal = 9; break;
 218   3      	      default:  mVal = 20; //error
 219   3            }
 220   2         }
 221   1         if( Pos == 4 )
 222   1         {
 223   2            mch = P2 & 0x3F; 
 224   2            switch( mch )
 225   2            {
 226   3                case 0x3F: mVal = 0; break;
 227   3                case 0x39: mVal = 1; break;
 228   3                case 0x14: mVal = 2; break;
 229   3                case 0x18: mVal = 3; break;
 230   3                default:  mVal = 20; //error
 231   3            }       
 232   2         }
 233   1         return (mVal);
 234   1      }
 235          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1187    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V6.02  MAIN                                                                   02/19/2005 09:19:52 PAGE 5   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      23
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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