ADC 0804 interfacing with microcontroller

Discussion in 'Embedded Systems and Microcontrollers' started by bmnaik.ec, Nov 1, 2011.

  1. bmnaik.ec

    Thread Starter New Member

    Nov 1, 2011
    3
    0
    actually i'm supposed to design fire alarm system in embedded system so i want to interface adc 0804 with 8051 microcontroller, but it is not giving me the correct digital output. this output has to be considered for high temperatures i mean threshold voltage.
     
  2. Georacer

    Moderator

    Nov 25, 2009
    5,142
    1,266
    Some people prefer to read all their stuff on the browser:
    Code ( (Unknown Language)):
    1.  
    2. org 00h
    3. mov p1,#0xff; input configuration
    4. clr p3.0;     chip select
    5. setb p3.1 ;RD= 1
    6. clr p3.3   ;WR= 0
    7. setb p3.3  ;WR= 1
    8. wait:jb p3.2,wait ;INTR
    9. clr p3.0;  Chip select low means adc enabled
    10. clr p3.1; RD= 0
    11. setb p3.1;RD=1 makes data reading from adc
    12. mov a,p1;
    13.  LCD_RS    BIT     P2.5
    14.  LCD_EN    BIT     P2.4
    15.  
    16.  LCD       EQU     P0
    17.  
    18. CALL    INIT_LCD
    19.        
    20.      
    21.                  
    22. again:
    23.         CALL    GET_SENSOR_DATA
    24.        
    25.         MOV               A,#81H  
    26.                 CALL        WR_LCD_COMMAND
    27.                CALL DELAY
    28.  
    29.                 JNC HERE
    30.                 MOV       A,#' '
    31.                 CALL        WR_LCD_CHR
    32.                 MOV       A,#'F'
    33.                 CALL        WR_LCD_CHR
    34.                 MOV       A,#'I'
    35.                 CALL        WR_LCD_CHR
    36.                 MOV       A,#'R'
    37.                 CALL        WR_LCD_CHR
    38.                 MOV       A,#'E'
    39.                 CALL        WR_LCD_CHR
    40.                 MOV       A,#' '
    41.                 CALL        WR_LCD_CHR
    42.                 MOV       A,#'A'
    43.                 CALL        WR_LCD_CHR
    44.                 MOV       A,#'L'
    45.                 CALL        WR_LCD_CHR
    46.                 MOV       A,#'A'
    47.                 CALL        WR_LCD_CHR
    48.                 MOV       A,#'R'
    49.                 CALL        WR_LCD_CHR
    50.                 MOV       A,#'M'
    51.                 CALL        WR_LCD_CHR
    52.                 MOV       A,#' '
    53.                 CALL        WR_LCD_CHR
    54.                 MOV       A,#'#'
    55.                 CALL        WR_LCD_CHR
    56.                 MOV       A,#' '
    57.                 CALL        WR_LCD_CHR
    58.        
    59.         CLR     P2.3
    60.  
    61.        
    62.         MOV               A,#31H
    63.                 CALL        WR_LCD_CHR
    64.  
    65.         JMP    AGAIN
    66.  
    67. HERE:   MOV          A,#' '
    68.                 CALL        WR_LCD_CHR
    69.                 MOV       A,#' '
    70.                 CALL        WR_LCD_CHR
    71.                 MOV       A,#' '
    72.                 CALL        WR_LCD_CHR
    73.                 MOV       A,#' '
    74.                 CALL        WR_LCD_CHR
    75.                 MOV       A,#'N'
    76.                 CALL        WR_LCD_CHR
    77.                 MOV       A,#'O'
    78.                 CALL        WR_LCD_CHR
    79.                 MOV       A,#'R'
    80.                 CALL        WR_LCD_CHR
    81.                 MOV       A,#'M'
    82.                 CALL        WR_LCD_CHR
    83.                 MOV       A,#'A'
    84.                 CALL        WR_LCD_CHR
    85.                 MOV       A,#'L'
    86.                 CALL        WR_LCD_CHR
    87.                 MOV       A,#' '
    88.                 CALL        WR_LCD_CHR
    89.                 MOV       A,#' '
    90.                 CALL        WR_LCD_CHR
    91.                 MOV       A,#' '
    92.                 CALL        WR_LCD_CHR
    93.                 MOV       A,#' '
    94.                 CALL        WR_LCD_CHR
    95.                 MOV       A,#' '
    96.                 CALL        WR_LCD_CHR
    97.  
    98.         SETB    P2.3
    99.              
    100.         JMP AGAIN
    101.  
    102.  
    103.  
    104. INIT_LCD:
    105.         MOV      A,#38H                ;2 line 5x7
    106.         CALL    WR_LCD_COMMAND  
    107.         MOV      A,#0EH                ;LCD on cursor on
    108.         CALL    WR_LCD_COMMAND
    109.         MOV      A,#01H                ;clear LCD
    110.         CALL    WR_LCD_COMMAND
    111.         MOV      A,#06H                ;shift cursor right
    112.         CALL    WR_LCD_COMMAND
    113. DISP:       MOV       A, #81H  ; Curser at LINE # 1, Position # 3
    114.                 CALL        WR_LCD_COMMAND
    115. RET
    116.  
    117.  
    118.  
    119. WR_LCD_COMMAND:
    120.                 CALL DELAY
    121.                 MOV  LCD,A
    122.         CLR  LCD_RS
    123.       ;  CLR  LCD_RW
    124.         SETB LCD_EN
    125.         CLR  LCD_EN
    126. RET
    127.  
    128.  
    129. WR_LCD_CHR:
    130.                 CALL DELAY
    131.                 MOV  LCD,A
    132.         SETB LCD_RS
    133.        ; CLR  LCD_RW
    134.         SETB LCD_EN
    135.         CLR  LCD_EN
    136.        
    137. RET
    138.  
    139.  
    140. DELAY:
    141.                 mov        r5, #0ffh                 ; delay loop instead of checking bit-7
    142.                 djnz        r5, $
    143. RET
    144.  
    145. GET_SENSOR_DATA:
    146.  
    147.         MOV C, P1.4
    148.         ANL C, P1.5
    149.    
    150. mov r1,#3
    151. mov a,p1
    152. loop:rlc a
    153. jnc next
    154. RET
    155. next: djnz r1,loop
    156. RET
    157. END
     
    Last edited: Nov 1, 2011
  3. bmnaik.ec

    Thread Starter New Member

    Nov 1, 2011
    3
    0
    org 00h
    mov p1,#0xff; input configuration
    clr p3.0; chip select
    setb p3.1 ;RD= 1
    clr p3.3 ;WR= 0
    setb p3.3 ;WR= 1
    wait:jb p3.2,wait ;INTR
    clr p3.0; Chip select low means adc enabled
    clr p3.1; RD= 0
    setb p3.1;RD=1 makes data reading from adc
    mov a,p1;
    LCD_RS BIT P2.5
    LCD_EN BIT P2.4

    LCD EQU P0

    CALL INIT_LCD



    again:
    CALL GET_SENSOR_DATA

    MOV A,#81H
    CALL WR_LCD_COMMAND
    CALL DELAY

    JNC HERE
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#'F'
    CALL WR_LCD_CHR
    MOV A,#'I'
    CALL WR_LCD_CHR
    MOV A,#'R'
    CALL WR_LCD_CHR
    MOV A,#'E'
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#'A'
    CALL WR_LCD_CHR
    MOV A,#'L'
    CALL WR_LCD_CHR
    MOV A,#'A'
    CALL WR_LCD_CHR
    MOV A,#'R'
    CALL WR_LCD_CHR
    MOV A,#'M'
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#'#'
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR

    CLR P2.3


    MOV A,#31H
    CALL WR_LCD_CHR

    JMP AGAIN

    HERE: MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#'N'
    CALL WR_LCD_CHR
    MOV A,#'O'
    CALL WR_LCD_CHR
    MOV A,#'R'
    CALL WR_LCD_CHR
    MOV A,#'M'
    CALL WR_LCD_CHR
    MOV A,#'A'
    CALL WR_LCD_CHR
    MOV A,#'L'
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR
    MOV A,#' '
    CALL WR_LCD_CHR

    SETB P2.3

    JMP AGAIN



    INIT_LCD:
    MOV A,#38H ;2 line 5x7
    CALL WR_LCD_COMMAND
    MOV A,#0EH ;LCD on cursor on
    CALL WR_LCD_COMMAND
    MOV A,#01H ;clear LCD
    CALL WR_LCD_COMMAND
    MOV A,#06H ;shift cursor right
    CALL WR_LCD_COMMAND
    DISP: MOV A, #81H ; Curser at LINE # 1, Position # 3
    CALL WR_LCD_COMMAND
    RET



    WR_LCD_COMMAND:
    CALL DELAY
    MOV LCD,A
    CLR LCD_RS
    ; CLR LCD_RW
    SETB LCD_EN
    CLR LCD_EN
    RET


    WR_LCD_CHR:
    CALL DELAY
    MOV LCD,A
    SETB LCD_RS
    ; CLR LCD_RW
    SETB LCD_EN
    CLR LCD_EN

    RET


    DELAY:
    mov r5, #0ffh ; delay loop instead of checking bit-7
    djnz r5, $
    RET

    GET_SENSOR_DATA:

    MOV C, P1.4
    ANL C, P1.5

    mov r1,#3
    mov a,p1
    loop:rlc a
    jnc next
    RET
    next: djnz r1,loop
    RET
    END
     
  4. t06afre

    AAC Fanatic!

    May 11, 2009
    5,939
    1,222
    Your block diagram looks OK. Then problems like this arise. The first thing I do is fire up my debugger. Have you tried that. And you also say "but it is not giving me the correct digital output" can you elaborate on this matter. Aslo do you have a schematic of your circuit you can post. That would help
     
  5. bmnaik.ec

    Thread Starter New Member

    Nov 1, 2011
    3
    0
    i don't have a schematic for the circuit i planned to do through the block diagram which is attached above.i'm giving the lm35(temperature sensor)output to adc which is around 0.305volts.
     
Loading...