1. Tổng quan mạch đo nhiệt độ LM35 và ADC0804

LM35 cung cấp ngõ ra điện áp tuyến tính 10mV/°C. Điện áp này được đưa vào ngõ vào Vin(+) của bộ biến đổi ADC0804 8-bit.

2. Sơ đồ khối nguyên lý hoạt động

Vi điều khiển 8051 kích xung chân WR của ADC0804 để bắt đầu quá trình biến đổi, sau đó chờ chân INTR xuống mức thấp để đọc byte dữ liệu 8-bit từ cổng P1.

3. Mã nguồn Assembly xử lý đọc ADC0804

;CT giao tiep voi ADC0804 va cam bien LM35D
;Ket noi giua ADC0804 va MCU AT89S52
; P3.5 = RD
; P3.6 = W/R
; P3.7 = INTR
; P1(0..7) = D0 -> D7
;Chan CS(chon chip) cua ADC noi voi GND (luon luon cho phep ADC hoat dong)
;********************************************  
#include <sfr51.inc>    ;Chen files chua cac dinh nghia ve thanh ghi trong 8051

do_F    equ 32h
canh_bao equ 1
count_l equ 30h
count_h equ 31h

        ORG 0000h       ; Dia chi bat dau cua Rom
        LJMP MAIN
        ORG 0003H       ;NGAT NGOAI 0
        LJMP EX0ISR

        ORG 0030H               ; Dia chi bat dau Chuong trinh chinh
MAIN:   ; Khoi tao cac gia tri ban dau
        MOV P1,#0FFH            ; Thiet lap P1 la chan vao du lieu
        MOV DPTR,#LED7SEG       ; Dua DPTR tro toi bang giai ma hien thi cho LED7
        MOV P2,#0h
        mov P0,#0h
        MOV  40H,#C6H           ; Chu C
        mov count_l,#0
        mov count_h,#0
; Khoi tao cho ngat ngoai 0
        setb ex0
        setb IT0
        setb ea
        mov do_F,#0h
        acall laymau
BACK:   
        cjne a,#10,next
        mov count_l,#0
        mov count_h,#0
        acall laymau
next:   lcall   DISPLAY        ; Goi chuong trinh hien thi LED 7
        inc count_l
        mov a,count_l
        cjne a,#0FFh,no_inc_count_h
        inc count_h
no_inc_count_h:
        jnb canh_bao,temp_ok
        setb p2.5
        clr p2.4
        sjmp temp_not_ok
temp_ok:
        setb p2.4
        clr p2.5
temp_not_ok:
        mov a,count_h
        SJMP    BACK            ; Chuan bi cho qua trinh chuyen doi tiep theo
;===========END MAIN FUNCTION ==================
laymau:
        CLR     P3.7            ; Tao xung tu cao xuong thap tai chan P3.7(Tuc W/R cua ADC)
        NOP
        SETB    P3.7            ; Cho phep ADC0804 bat dau qua trinh chuyen doi tu tuong tu sang so
;here:   JB      P3.5,here
        acall delay_100us
        CLR     P3.6           ; Dua xung muc thap toi chan RD - cho phep doc du lieu tu ADC(Xuat ra D0..D7)
        MOV     A,P1            ; Dua du lieu 8bit tu P1 den thanh ghi A
        acall   BIN2BCD         ; tra bang, doi BCD -> LED 7 doan
        ret

BIN2BCD:;Chuong trinh chuyen doi tu so hex sang BCD
; gia tri doc tu ADC lu trong thanh ghi A
; So sanh gia tri nhiet do voi MAX va MIN
     MOV     R4,A
     CLR     C
     SUBB    A,#30  ; Gia tri nhiet do MAX de so sanh
     JC      nho_hon_40
     setb     canh_bao
     SJMP    thoat_kt
nho_hon_40:
     MOV     A,R4
     CLR     C
     SUBB    A,#20  ; Gia tri nhiet do MIN de so sanh
     JNC     lon_hon_15
     setb     canh_bao
     SJMP    thoat_kt
lon_hon_15:
     clr     canh_bao
thoat_kt:
;===============================
     mov    a,do_F
     jz     nhiet_do_C
     mov    a,r4
     mov    b,#18
     mul    ab
     mov    b,#10
     div    ab
     add    a,#57
     sjmp nhiet_do_F
nhiet_do_C:
     mov    a,r4
nhiet_do_F:
     mov     b,#100
     div     ab
     mov     44H,a
     mov     a,b
     mov     b,#10
     div     ab
     mov     43h,a
     mov     42h,b
     RET
; Chuong trinh con phuc vu ngat ngoai
EX0ISR:
    PUSH    ACC
    cpl P3.4    ; Chan dieu khien bat tat LED
    MOV     A,do_F
    JNZ     C0007
    mov     do_F,#01h
    SJMP    C0009
C0007:
    mov     do_F,#0h
C0009:
    POP     ACC
   RETI    

DISPLAY:
        mov a,do_F
        jnz      hien_chu_F
        MOV     P0,40H
        sjmp    hien_chu_C
hien_chu_F:
        mov     p0,#8Eh ;Chu F
hien_chu_C:
        CLR     P2.0            ;Bat LED1
        ACALL   DELAY
        SETB    P2.0            ;TAT LED 1

        MOV     A,42h           ; Lay thong tin LED7 cua so don vi
        MOVC    A,@A+DPTR
        MOV     P0,A
        clr     P0.7
        CLR     P2.1
        ACALL   DELAY
        setb    P0.7
        SETB    P2.1            ;TAT LED 2

        MOV     A,43H           ; Lay ma LED7 cua so hang chuc
        MOVC    A,@A+DPTR
        MOV     P0,A          ; LED1 Hang don vi
        CLR     P2.2            ; ba^.t LED1 sa'ng
        ACALL   DELAY           ; delay
        SETB    P2.2            ; ta('t LED1

        MOV     A,44H           ; Lay ma LED7 cua so hang chuc
        MOVC    A,@A+DPTR
        MOV     P0,A          ; LED2  hang chuc
        CLR     P2.3            ; ba^.t LED2 sa'ng
        ACALL   DELAY           ; delay
        SETB    P2.3            ; ta('t LED2

        RET

DELAY:                          ; Tao tre trong qua trinh quet cac LED7 Thanh
        MOV     R6,#30          ; Nguyen tac quet LED la cac LED duoc quet lien tiep nhau trong thoi gian rat ngan
loop2:  DJNZ    R6,LOOP2        ; Do su luu anh tren vong mac nguoi nen ta thay cac LED nhu sang lien tuc
        RET                     ; Thoi gian quet tuy thuoc ham DELAY, gia tri R1 cang lon thi cac LED se nhap nhay
                                ; Toi thieu phai dam bao du 24hinh/giay

delay_100us:
        mov R7,50
loop3:  djnz R7,loop3           ; 2us x 60 = 120uS
        ret

LED7SEG:
        DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        DB      88H,0C6H,86H,8EH,82H,89H,7FH,FFH
        END        

4. Hiệu chuẩn & kết quả đo

Điện áp tham chiếu Vref/2 chân 9 của ADC0804 được chỉnh bằng biến trở tinh chỉnh để đạt độ phân giải 1°C trên mỗi bước nhảy số.