ADC0808

Photo of author

By Jackson Taylor

In this program 8051 is interfaced with  adc adc0808  /* MICROCONTROLLER -AT89S51/52 COMPILER —MIKROC BY—EMERGING TECHNOLOGIES –WWW.EMERGINGTECHS.ORG */  #define AN0 0 #define AN1 1 #define AN2 2 #define AN3 3 #define AN4 4 #define AN5 5 #define AN6 6 #define AN7 7 /* MICROCONTROLLER -AT89S51/52 COMPILER —MIKROC BY—EMERGING TECHNOLOGIES –WWW.EMERGINGTECHS.ORG */ #define Data_Bus  P0 #define HalfCycleDelay 10 void InitADC(void); unsigned char ReadADC(unsigned char);      unsigned char ADC_Value = 0; // To capture ADC value unsigned char Digit[3] = { 0,0,0 }; // To make digits to display on LCD sbit LCD_RS at P1_1_bit; sbit LCD_EN at P1_0_bit;  sbit LCD_D4 at P1_4_bit; sbit LCD_D5 at P1_5_bit; sbit LCD_D6 at P1_6_bit; sbit LCD_D7 at P1_7_bit; // End Lcd module connections sbit switch1 at P3_0_bit; sbit led1 at P3_1_bit; sbit ADD_A at P2_0_bit;   // Address pins for selecting input channels. sbit ADD_B at P2_1_bit; sbit ADD_C at P2_2_bit; sbit ale at P2_3_bit;    //address latch enable sbit eoc at P2_4_bit;    //end of conversion sbit oe at P2_5_bit;    //output enable sbit start at P2_6_bit;    //start conversion sbit clk at P2_7_bit;    // clock //sfr input_port=0x80;//P0 port void main(){   Lcd_Init();                        // Initialize Lcd   Lcd_Cmd(_LCD_CLEAR);               // Clear display   Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off   Lcd_Out(1,6,”hai”);                 // Write text in first row   delay_ms(1000); InitADC(); delay_ms(1000);    Lcd_Cmd(_LCD_CLEAR);   while(1)   {   ADC_Value = ReadADC(AN1);   Digit[2] = (unsigned char)( ADC_Value/100);   // Find out first digit Digit[1] = (unsigned char)( ADC_Value/10) – Digit[2]*10; // Find out second digit Digit[0] = ADC_Value – Digit[2]*100 – Digit[1]*10; // Find out third digit Lcd_Cmd(_LCD_CLEAR); // Clear LCD Lcd_Out(1,6,”temp= “); // Display string Lcd_Chr_cp(Digit[2]+0x30); // Display first digit Lcd_Chr_cp(Digit[1]+0x30); // Display second digit Lcd_Chr_cp(Digit[0]+0x30); // Display third digit  if( switch1 ==0)   { led1=1; Lcd_Out(2,1,”gas found caution”);  }    else   { led1=0;   Lcd_Out(2,1,”                       “); } delay_ms(100);   } } unsigned char ReadADC(unsigned char Channel) { unsigned int i = 0; unsigned int ADC_value = 0; // Select Channel switch(Channel) { case AN0: Add_C = 0;  Add_B = 0;  Add_A = 0; break; case AN1: Add_C = 0;  Add_B = 0;  Add_A = 1; break; case AN2: Add_C = 0;  Add_B = 1;  Add_A = 0; break; case AN3: Add_C = 0;  Add_B = 1;  Add_A = 1; break; case AN4: Add_C = 1;  Add_B = 0;  Add_A = 0; break; case AN5: Add_C = 1;  Add_B = 0;  Add_A = 1; break; case AN6: Add_C = 1;  Add_B = 1;  Add_A = 0; break; case AN7: Add_C = 1;  Add_B = 1;  Add_A = 1; break; } delay_us(HalfCycleDelay); // 250kHz Frequency ALE = 1; // Enable Address Latch CLK = 1; // Make CLK High delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 0; // Make CLK Low START = 1; // Start ADC Conversion delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 1; // Make CLK High ALE = 0; // Disable Address Latch delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 0; // Make CLK Low START = 0; // Complete the start pulse for(i=0;i<2000;i++) { CLK = !CLK; // Toggle Clock delay_us(HalfCycleDelay); // 250kHz Frequency if(!EOC)   // Wait for EOC to be low break; } for(i=0;i<2000;i++) { CLK = !CLK; // Toggle Clock delay_us(HalfCycleDelay); // 250kHz Frequency   if(EOC)   // Wait for EOC to be High break; } CLK = 0; // Make CLK Low OE = 1; // Enable Output delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 1; // Make CLK High delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 0; // Make CLK Low delay_us(HalfCycleDelay); // 250kHz Frequency CLK = 1; // Make CLK High ADC_value = Data_Bus; // Read value delay_us(HalfCycleDelay); // 250kHz Frequency OE = 0; // Disable Output CLK = 0; // Make CLK Low delay_us(HalfCycleDelay); // 250kHz Frequency return ADC_value; // Return ADC value } void InitADC(void) { Add_A = 0;  // Make output Add_B = 0;  // Make output Add_C = 0;  // Make output ALE   = 0;  // Make output EOC   = 1;  // Make input OE    = 0;  // Make output START = 0;  // Make output CLK   = 0;  // Make output Data_Bus = 0xFF;  // Make Inputs }
See also
2 HP DC MOTOR ADJUSTABLE SPEED CONTROL