1. Trang chủ
  2. » Tất cả

Kĩ thuật lập trình 8051 giao tiếp với adc0804 do an 1 v9

19 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 231,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhận Xét của giáo viên Hướng Dẫn Nhận Xét của giáo viên Hướng Dẫn Ngày Tháng Năm Nhận xét của giáo viên phản biện Ngày Tháng Năm Lời nói đầu Với khoa học và kĩ thuật phát triển như hiện nay thì việc đ[.]

Trang 1

Nhận Xét của giáo viên Hướng Dẫn

Ngày…….Tháng…… Năm………

Trang 2

Nhận xét của giáo viên phản biện

Ngày…… Tháng……

Năm………

Trang 3

Lời nói đầu

Với khoa học và kĩ thuật phát triển như hiện nay thì việc đo nhiệt độ của môi trường có thể thực hiện được dẽ dàng bằng nhiệt kế thủy ngân, hoặc cũng có thể là mạch đo nhiệt độ được trình bày ở đồ án này, tuy nhiên chúng em muốn nói đến kĩ thuật lập trình 8051 giao tiếp với ADC0804 Với một con cảm biến LM35, ADC0804, 89C51, LCD và một số phụ kiện khác là ta có thể dễ dàng ráp 1 mạch

đo nhiệt độ có thể hiển thị chính xác và rõ ràng trên màn hình tinh thể lỏng Một điều đáng nói đến nữa là mạch có thể dễ dàng nâng cấp để đo được nhiệt độ cao hơn bằng cách thay cảm biến nhiệt và điều chỉnh một ít mã của chương trình

Do chưa có nhiều kinh nghiệm và điều kiện có hạn nên đề tài của chúng em còn nhiều sai sót Rất mong sự đóng góp ý kiến chân tình của thầy cô và các bạn

để đề tài được hoàn chỉnh hơn

Trang 4

Mục lục

o0o 1 Giới thiệu và mô tả chức năng ……… … Trang 5

2 Hoạt động của ADC0804……….Trang 5

3 Cảm biến LM35D……… Trang 6

4 Hoạt động của LCD……… Trang 6

5 Lưu đồ giải thuật………Trang 10

6 Chương trình……… Trang 12

Trang 5

1 Giới thiệu và mô tả chức năng

C 2

V R 1

1K

V C C + 5V

S W 1

8951

29 30

31 19 18

9

39 38 37

36 35 34 33 32

1 2 3

4 5 6 7 8

21 22 23 24 25 26 27 28

10 11 12 13 14 15 16 17

P S E N

A LE

E A

X 1

X 2

R S T

P 0.0/A D 0

P 0.1/A D 1

P 0.2/A D 2

P 0.3/A D 3

P 0.4/A D 4

P 0.5/A D 5

P 0.6/A D 6

P 0.7/A D 7

P 1.0

P 1.1

P 1.2

P 1.3

P 1.4

P 1.5

P 1.6

P 1.7

P 2.0/A 8

P 2.1/A 9

P 2.2/A 10

P 2.3/A 11

P 2.4/A 12

P 2.5/A 13

P 2.6/A 14

P 2.7/A 15

P 3.0/R X D

P 3.1/T X D

P 3.2/IN T 0

P 3.3/IN T 1

P 3.4/T 0

P 3.5/T 1

P 3.6/W R

P 3.7/R D

A D C 0804

6

9

11 12 13 14 15 16 17 18

19

4

5

2 3

+ IN

V R E F /2

D B 7

D B 6

D B 5

D B 4

D B 3

D B 2

D B 1

D B 0

C LK R V

C LK IN

IN T R

R D

W R

R 1 10K

C 1 150p\

C 5

100u

LC D

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

R 3

R

V R 2

Y 1

T her

1 2 3

V + out

G nd

Do đặc tính của LM35D nên mạch có đo đuợc khoảng nhiệt độ từ 0

->100oC, có thể ứng dụng mạch để đo nhiệt độ phòng

Mạch hoạt động dựa trên nguyên tắc chung như sau: cảm biến đo nhiệt độ biến thiên theo tỉ lệ 10mV/1oC , sau đó được đưa vào bộ biến đổi ADC để biến đổi thành mã nhị phân 8 bit, sau đó dữ liệu được đưa vào 89C51 Vi xử lý kiểm tra

thị trị số nhiệt độ đo được

2 Hoạt động của ADC0804

RD (Read) – đọc

Đây là chân tín hiệu vào, tích cực mức thấp, đây là tín hiệu điều khiển cho phép đọc Khi bộ ADC đã chuyển đổi xong tín hiệu tương tự sang số và giữ

nó ở một thanh ghi trong Nếu có tính hiệu RD (xung cao xuống thấp) thì dữ liệu số dạng 8 bit được đưa tới các chân dữ liệu từ D0 – D7

WR (Write) – Ghi

Đây là chân vào tích cực mức thấp được dùng để báo cho ADC0804 bắt đầu quá trình chuyển đổi tín hiệu tương tự sang số Lượng thời gian cần thiết cho quá trình chuển đổi phụ thuộc vào tần số đưa vào chân CLK IN và CLK R Khi việc chuyển đổi hoàn tất thì thì chân INTR được ADC0804 hạ xuống mức thấp

Trang 6

INTR (Interrupt) – Ngắt

Đây là chân xuất, tích cực mức thấp Bình thường chân này ở mức thấp khi việc chuyển đổi dữ liệu được hoàn tất thì nó hạ xuống thấp để báo cho VDK

đã kết thúc quá trình chuyển đổi, và sẵn sàng để đọc dữ liệu (RD)

D0 – D7

Đây là các chân dữ liệu số ra (D7 là bit có trọng số cao nhất MSB) Giá trị

số đầu ra được tính theo công thức:

Vref/2

Đây là chân điện áp đầu vào dùng làm điện áp tham chiếu.Nếu chân này hở thì dãy điện áp đầu vào Vin nằm trong dãy 0 -> 5V (giá trị đo được tại Vref/2 là 2.5V) Nếu cấp áp cho Vref thì dãy điện áp đầu vào Vin nằm trong khoảng 0 -> 2Vref/2

(R=2Vref / 256) phải bằng 10mV Vì vậy dãy điện áp Vin nằm trong khoảng 0 -> 2,56V, đó là lý do ta cấp cho Vref/2 một điện áp là 1,28V Chiết áp VR1 dùng để thay đổi trị số R (10 ± α), Vì vậy ta có thể dùng VR1 chỉnh lại trị số nhiệt độ của mạch sao cho hiển thị chính xác nhiệt độ thực tế của môi trường

Chương trình con đọc dữ liệu từ ADC0804

READ_ADC:

(WRITE)

NOP

MOV A,ADC ;Đọc giá trị đã chuyển đổi vào thanh ghi A

SETBREAD

RET

3 Cảm biến LM35

Đây là cảm biến nhiệt, mạch tích hợp, chính xác cao, có điện áp đầu ra tỉ lệ tuyến tính với nhiệt độ theo thang độ Celsius (độ C) Cảm biến nhiệt này không yêu cầu cân chỉnh bên ngoài vì nó đã được căn chỉnh rồi Cảm biến này cho ra điện áp 10mV/1oC, và dãi nhiệt độ của nó từ 0 -> 100oC

4 Hoạt động của LCD

Trang 7

Chức năng của từng chân LCD

Chân 3: là chân điều khiển VEE dùng để thay đổi độ tương phản của màn hiển thị

Lý tưởng thì chân này nên nối nguồn điện áp thay đổi được, người ta thực hiện bằng cách gắn mạch chia áp dùng biến trở có đầu ra thay đổi đưa vào chân này; tuy nhiên nên chú ý là một số module cần nguồn điện DC – 7V Đơn giản nhất là người ta nối chân này với 0V (xuống đất )

Chân 4: là đường RS (Register Select=chọn thanh ghi ) đây là 1 trong 3 ngõ vào

điều khiển lệnh.Khi chân này để mức thấp thì các dữ liệu được truyền đến LCD được xử lí như các mệnh lệnh và các dữ liệu đọc ra chỉ trạng thái của nó Bằng cách đưa đường RS này lên mức cao thì dữ liệu ký tự có thể xuất /nhập trên

module này

Chân 5: là đường R/W (read / wile ) Chân này được kéo xuống mức thấp để ghi

các lệnh hay dữ liệu ký tự vào module hoặc được léo lên mức cao để đọc dữ liệu

ký tự hay thông tin trạnh thái từ các thanh ghi của nó

Chân 6: là đường E (enable), ngõ vào này dùng để khởi động việc chuyển các

lệnh hay dữ liệu ký tự giữa module và các đường dữ liệu Khi ghi ra màn hình hiển thị LCD, dữ liệu chỉ được chuyển khi có cạnh xuống ở tín hiệu E này Tuy nhiên khi đọc ra từ LCD thì dữ liệu khã dụng sau khi có chuyển tiếp từ thấp lên cao và duy trì dữ liệu khã dụng cho đến khi tín hiệu xuống thấp một lần nữa

 Gửi lệnh đến LCD

Trang 8

Dựa trên các chân điều khiển RS, RW, EN ta có thể viết đoạn lệnh thực hiện gởi lệnh đến LCD như sau:

SEND_COM:

CLR RS ; RS = 0 : Dữ liệu được truyền xử lý như

; mệnh lệnh

CLR RW ; RW = 0 : Ghi lệnh

MOV DATABUS,A ; Mã lệnh chứa trong A

CLR EN ; Xung Enable

NOP

SETB EN

LCALL WAIT_LCD ; Kiểm tra trạng thái bận của LCD

RET

Bảng mã lệnh của LCD 16xx, 20xx

R/S R/W D7 D6 D5 D4 D3 D2 D1 D0 Instruction/Description

Trang 9

 Sơ đồ Timing

 Kiểm tra trạng thái bận của LCD

LCD thực thi mỗi lệnh mất một khoảng thời gian, nên ta phải luôn kiểm tra xem LCD có bận không trước khi gởi lệnh hay dữ liệu đến nó bằng đoạn lệnh sau:

WAIT_LCD:

CLR RS ; Lệnh

SETB RW ; Chế độ đọc

MOV DATABUS,#0FFH

CLR EN ; Xung Enable

NOP

SETB EN

MOV A,DATABUS

JB ACC.7,WAIT_LCD ; Kiểm tra cờ bận bằng cách liên đọc nó

RET

 Khởi động LCD.

Trước khi sử dụng LCD thì ta phải khởi động và đặt cấu hình cho nó Việc này được thực hiện bằng cách gởi một số lệnh khởi động đến LCD

Trang 10

MOV A,#30H ;MODE 8 BIT,1 LINE

LCALL SEND_COM

MOV A,#0CH ;Cho phép LCD hiển thị

LCALL SEND_COM

RET

 Hiển thị kí tự

Giống đoạn mã gửi lệnh chỉ khác ở chổ thay RS = 1 WRITE_TEXT:

SETB RS ; Chế độ gửi dữ liệu

CLR RW

MOV DATABUS,A

CLR EN ; Xung Enable

NOP

SETB EN

LCALL WAIT_LCD

RET

5 Lưu đồ giải thuật

Trang 11

Khởi động LCD Đặt cờ cho phép hiển thị lên mức 1

Cho phép chuyển đổi dữ liệu

(WR = 0)

Chờ chuyển đổi dữ liệu xong

Chuyển dữ liệu sang

mã ASII

Cho phép đọc dữ liệu

số (RD = 0)

Lưu mã ASCII đã chuyển được vào R3, R2

Read ADC

Hex->ASCII

TEST_TEMP

t >= 100

Xóa cờ cho phép hiển thị DISP_FLAG

Yes

No

t = 100

Yes

No

Hiển thị text: “TEMP 100 O C”

1

No

Trang 12

6 Chương trình

$MOD51

;LCD

;ADC

;DATA

TEMP EQU 21H ;Byte lưu giá trị nhiệt độ (Hex)

LJMPMAIN

; **********************************************************

; MAIN

; **********************************************************

MAIN:

ACALL INIT_LCD ;Khởi đông LCD

LCALL CLEAR_LCD ;Xóa LCD

SAMPLE:

ACALL READ_ADC ;Lấy mẫu

ACALL HEX_ASCII ;Chuyển từ mã Hex->ASCII

ACALL TEST_TEMP ;Kiểm tra xem có quá 100oC hay không

ACALL DISPLAY ;Hiển thị trên LCD

Trang 13

; **********************************************************

; Giao tiếp ADC0804

; **********************************************************

READ_ADC:

NOP

CLR READ ;Đưa xung mức thấp đến chân RD (cho phép đọc

dữ liệu)

SETBREAD ;Đưa chân RD trở về mức cao (sẳn sàng tiếp tục đọc)

RET

; **********************************************************

; Chuyển mã

; HEX -> BCD -> ASCII (R3,R2)

; **********************************************************

HEX_ASCII:

MOV A,TEMP ;Đưa giá trị Hex vào thanh ghi A để xử lý

MOVB,#10

DIV AB ;A chứa nữa byte cao của mã BCD, B chứa nữa byte thấp

ADD A,#30H ;Mã ASCII của nhiệt độ (chỉ số hàng chục)

MOV R3,A ;Lưu vào R3

MOV A,B

ADD A,#30H ;Mã ASCII của nhiệt độ (chỉ số hàng đơn vị)

MOV R2,A ;Lưu vào R2

RET

; **********************************************************

; HIEN THI LCD

; **********************************************************

DISPLAY: ;HIEN THI "TEMP" & t

LCALL CLEAR_LCD

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'T' ;Hiển thị chuổi text “TEMP”

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

Trang 14

MOV A,#'M'

LCALL WRITE_TEXT

MOV A,#'P'

LCALL WRITE_TEXT

MOV A,#' ' ;Khoảng trắng

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,R3 ;Hiển thị chỉ số nhiệt độ

LCALL WRITE_TEXT

MOV A,R2

LCALL WRITE_TEXT

MOV A,#0DFH ;Kí tự oC

LCALL WRITE_TEXT

MOV A,#'C'

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,COUNT ;Bắt đầu từ số 0

LCALL WRITE_TEXT

MOV A,COUNT

CJNE A,#3AH,NEXT ;Đến số 9 thì Reset

NEXT:

; *********************************************************

; DELAY 0.5s

; *********************************************************

DELAY_500M:

MOV R4,#10 ;10 x 50000us = 0.5s

LOOP:

Trang 15

RET

; **********************************************************

; Kiểm tra xem có quá nhiệt độ hay không ?

; **********************************************************

TEST_TEMP:

MOV A,R3

SUBB A,#30H ;ASCII -> HEX

MOVB,#10

DIV AB ;Nếu A khác 0 thì  T >= 100oC

RET

TEST2:

MOV A,R2

SUBB A,#30H ;ASCII -> HEX

ACALL T100

RET

; **********************************************************

; Thông báo "OVER TEMP"

; **********************************************************

OVER_TEMP:

LCALL CLEAR_LCD

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'O' ;Chuổi text “OVER TEMP”

LCALL WRITE_TEXT

MOV A,#'V'

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

MOV A,#'R'

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'T'

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

MOV A,#'M'

LCALL WRITE_TEXT

MOV A,#'P'

LCALL WRITE_TEXT

ACALL DELAY_500M

Trang 16

; **********************************************************

; Hiển thị 1000C

; **********************************************************

T100:

LCALL CLEAR_LCD

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'T' ;Chuồi text “TEMP 100oC”

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

MOV A,#'M'

LCALL WRITE_TEXT

MOV A,#'P'

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'1'

LCALL WRITE_TEXT

MOV A,#'0'

LCALL WRITE_TEXT

MOV A,#'0'

LCALL WRITE_TEXT

MOV A,#0DFH

LCALL WRITE_TEXT

MOV A,#'C'

LCALL WRITE_TEXT

ACALL SPACE

RET

; **********************************************************

; LCD DISPLAY

; **********************************************************

INIT_LCD:

MOV A,#30H ;Chế độ 8 BIT,1 dòng

LCALL SEND_COM

MOV A,#0CH ;Cho phép LCD hiển thị

LCALL SEND_COM

RET

CLEAR_LCD:

Trang 17

SEND_COM:

CLR RS ;Đặt RS=0 cho xuất lệnh

CLR RW ;Đặt RW=0, Chọn chế độ ghi

MOV DATABUS,A ;Mã lệnh chứa trong thanh A

NOP

SETBEN

LCALL WAIT_LCD ;Đợi cho lệnh được thực thi hoàn toàn bời LCD

RET

WRITE_TEXT:

SETB RS ;Đặt RS=1 cho xuất dữ liệu

CLR RW ;Đặt RW=0, Chọn chế độ ghi

MOV DATABUS,A ;Mã ASCII của text chứa trong thanh ghi A

NOP

SETBEN

LCALL WAIT_LCD ;Đợi cho lệnh được thực thi hoàn toàn bời LCD

RET

WAIT_LCD:

CLR RS ;Gửi lệnh

SETB RW ;Chế độ đọc

MOV DATABUS,#0FFH ;Cấu hình P2 làm port nhập

NOP

SETBEN

MOV A,DATABUS ;Đọc dữ liệu từ LCD

JB ACC.7,WAIT_LCD ;Nếu bit 7 ở mức cao, LCD vẫn bận

RET

;***************************************************

SETB TR0

JNB TF0,$

CLR TR0

CLR TF0

RET

END

Trang 18

Tài liệu tham khảo

1) Vi xử lý của Hồ Trung Mỹ

2) Datasheet of ADC0804, LM35D

3) Cấu trúc và lập trình họ VDK 8051 của Nguyễn Tăng Cường 4) Tài liệu lý thuyết & TH Vi Điều khiển của thầy Phạm Quang Trí

Ngày đăng: 02/04/2023, 06:34

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w