1. Đặc tính kỹ thuật IC ADC0809

ADC0809 là bộ biến đổi A/D 8-bit tích hợp bộ dồn kênh 8 ngõ vào tương tự (IN0 đến IN7). Thời gian biến đổi 100μs ở tần số xung nhịp 640kHz.

2. Sơ đồ giao tiếp bus dữ liệu

Các chân địa chỉ chọn kênh A, B, C được nối vào cổng P2, trong khi các chân dữ liệu D0-D7 nối vào cổng P0 hoặc P1 của 8051.

3. Mã nguồn ASM điều khiển quét 8 kênh

#include <sfr51.inc>    ;Chen files chua cac dinh nghia ve thanh ghi trong 8051
;CT giao tiep voi ADC0809 va cam bien LM335
;Ket noi giua ADC0809 va MCU AT89S52
; P3.6 = Start
; P3.7 = Output_enable
; P1(0..7) = D0 -> D7
;********************************************  
;Ket noi cac den LED7 thanh voi AT89S52
;a...g = P2
;P0.0 = LED1 Chu C
;P0.1 = LED2 ky tu do
;P0.2 = LED3 Hang don vi
;P0.3 = LED4 hang chuc
;43H - Dia chi RAM chua so hang chuc
;42h - Dia chi RAM chua so hAng don vi
;40h,41h - Dia chi RAM chua ky hieu do C
;*******************************************
; Dinh nghia cac bien tai day
in_port equ     30h
count   equ     31h

Out_enable  bit P3.7
Start       bit P3.6

        ORG 0000h       ; Dia chi bat dau cua Rom
        LJMP MAIN

        ;ORG 0003h
        ;LJMP Read_ADC0809     ; Dia chi bat dau vecto ngat ngoai
        ;ORG 000BH       ; Vector ngat Timer0
        ;LJMP T0ISR      
        ;ORG 001BH       ; Vector ngat Timer1
        ;LJMP T1ISR

        ORG 0030H               ; Dia chi bat dau Chuong trinh chinh
MAIN:   ; Khoi tao cac gia tri ban dau
        ;SETB IT0                ; TAC DONG CANH AM (cho chan P3.2 la chan vao cua ngat ngoai)
                                ; Khi co xung tu cao xuong thap thi ngat xay ra
        ;MOV TMOD,#11H           ; CHE DO 16 BIT cho Timer0 va Timer1
        ;MOV TH0,#HIGH(-50000)   ;Nap gia tri ban dau cho TH0 va TL0
        ;MOV TL0,#LOW(-50000)
        ;MOV IE,#82H             ; Gan 81h vao thanh ghi IE la thanh ghi cho phep ngat
                                ; Cho phep cac ngat hoat dong (ngat ngoai,ngat do Timer0,1)
        MOV P1,#0FFH            ; Thiet lap P1 la chan vao du lieu
        MOV P3,#0FFH
        MOV DPTR,#LED7SEG       ; Dua DPTR tro toi bang giai ma hien thi cho LED7
        SETB P0.0               ; Tat het tat ca cac LED
        SETB P0.1
        SETB P0.2
        SETB P0.3
        CLR  Start
        CLR  Out_enable
        MOV  40H,#C6H           ; Chu C
        MOV  41H,#9CH           ; Ky tu do
        ;acall send_start
        ;acall Read_ADC0809
        mov R6,#0
        mov count,#10
        ;Setb TR0
        acall send_start
        acall read_0809
BACK:   
        acall send_start
        acall read_0809
next:                           ; Goi chuong trinh hien thi
        LCALL   DISPLAY         ; Goi chuong trinh con hien thi ra LED7
        SJMP    BACK            ; Chuan bi cho qua trinh chuyen doi tiep theo

read_0809:
        setb out_enable
        mov A,P1
        LCALL BIN2BCD
        clr out_enable
        ret

Read_ADC0809:
        nop
HERE:   JB     P3.2, HERE      ; Doi cho qua trinh chuyen doi xong(100us)
        setb    out_enable       ; Dua xung muc thap toi chan RD - cho phep doc du lieu tu ADC(Xuat ra D0..D7)
        nop
        nop
        MOV     A,P1            ; Dua du lieu 8bit tu P1 den thanh ghi A
        LCALL   BIN2BCD         ; tra bang, doi BCD -> LED 7 doan
        clr     out_enable
        ret

DISPLAY:
        MOV     P2,40H
        CLR     P0.0            ;Bat LED1
        ACALL   DELAY
        SETB    P0.0            ;TAT LED 1

        MOV     P2,41H
        CLR     P0.1
        ACALL   DELAY
        SETB    P0.1            ;TAT LED 2

        MOV     P2,42H          ; LED1 Hang don vi
        CLR     P0.2            ; ba^.t LED1 sa'ng
        ACALL   DELAY           ; delay
        SETB    P0.2            ; ta('t LED1

        MOV     P2,43H          ; LED2  hang chuc
        CLR     P0.3            ; ba^.t LED2 sa'ng
        ACALL   DELAY           ; delay
        SETB    P0.3            ; ta('t LED2
        RET

BIN2BCD:;Chuong trinh chuyen doi tu so hex sang BCD
; gia tri doc tu ADC lu trong thanh ghi A
        clr     c       ; Tinh toan gia tri chuyen doi ve do C
        subb    a,#139  ; Tru di muc dien ap ban dau 2,73V de chuyen doi tu do K ve do C
        clr     c
        rlc     a       ;Dich trai A 1 vi tri = Nhan A voi 2
        mov     b,#10   ; Chia A cho 10 de tach so hang chuc va don vi
        div     ab      ; dua ra hien thi LED 7
        mov     42H,b   ; Bien luu so hang don vi
        mov     43H,a   ; Bien luu so hang chuc

        MOV     A,42h           ; Lay thong tin ma LED7 cua so don vi
        MOVC    A,@A+DPTR
        MOV     42h,A
        MOV     A,43H           ; Lay ma LED7 cua so hang chuc
        MOVC    A,@A+DPTR
        MOV     43H,A
        RET
Send_start:
        SETB Start
        nop
        nop
        nop
        CLR  Start
        acall delay120us
        ret
delay120us:
        MOV TH1,#HIGH(-120)
        MOV TL1,#LOW(-120)
        SETB TR1
        JNB TF1,$
        CLR TR1
        CLR TF1
        RET
;*********************************************
DELAY:                          ; Tao tre trong qua trinh quet cac LED7 Thanh
        MOV     R1,#2           ; Thoi gian quet moi LED la 2x255us
LOOP:   MOV     R0,#50        ; Nguyen tac quet LED la cac LED duoc quet lien tiep nhau trong thoi gian rat ngan
loop2:  DJNZ    R0,LOOP2         ; Do su luu anh tren vong mac nguoi nen ta thay cac LED nhu sang lien tuc
        DJNZ    R1,LOOP        ; Thoi gian quet tuy thuoc ham DELAY, gia tri R1 cang lon thi cac LED se nhap nhay
        RET                     ; Toi thieu phai dam bao du 24hinh/giay

T0ISR:                          ;Ngat do Timer0
        CLR TR0                 ; Xoa TR0, tam ngung, khong cho bo dinh thoi Tomer0 hoat dong
        DJNZ count,SKIP         ; Giam count di 1 va nhay nay count != 0
        ;CLR ET0
        inc in_port             ; Chuyen sang cong analog tiep theo de doc du lieu
        mov a,in_port
        cjne a,#8,next_port
        mov in_port,#0
next_port:
        mov P2,in_port
        acall send_start
        mov count,#10
        ;LJMP EXIT
SKIP:
        MOV TH0,#HIGH(-50000)   ;Nap gia tri ban dau cho TH0 va TL0
        MOV TL0,#LOW(-50000)
        SETB TR0
EXIT:   
        RETI 

T1ISR: ;Ngat do Timer1
        CLR TR1
        MOV TH1,#HIGH(-1250)
        MOV TL1,#LOW(-1250)
        CPL P0.6
        SETB TR1
        RETI

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