Está en la página 1de 33

chào các bạn!

Đây là mạch đo nhiệt độ của mình lúc đầu bị nhảy độ, tưởng tiêu rồi may mà máy tính
của thầy bị virut,
nên bữa sau sửa được bây giờ chạy ngon rồi
1. Thông tin cá nhân
-Họ Tên: Huỳnh Anh Tuấn
-MSSV : 05111110
-Email :sauthegian@yahoo.com
-ĐT :0956582621
2.Tên Đề Tài
-Ứng dụng vi điều khiển 89S52 để hiện thị nhiệt độ lên led 7 đoạn thông qua cảm biến
nhiệt LM35
-Các yêu cầu cần giải quyết:
+ Đo lường được nhiệt độ
+ Chuyển kết quả đo lường từ tương tự sang tín hiệu số.
+ chuyển đổi và hiển thi kết quả lên led 7 đoạn
3.Các phương án có thể lựa chọn, ưu khuyết điểm của từng phương án.
+ Để đo lường nhiệt độ thì có thể dùng nhiều loại cảm biến nhiệt khác, mỗi loại có một
ưu điểm riêng
phù hợp với từng nhu cầu riêng. Ở đây nhu cầu của mình là đo nhiệt độ môi trường bình
thường nên sử dụng LM35
là tối ưu nhất vì: đây là loại cảm biến có độ chính xác cao, tầm hoạt động tuyến tính từ 0-
128 độ C, tiêu tán công
suất thấp..
+ Tương tự vậy chuyển đổi từ tương tự sang số cũng có nhiều loại ic nói chung al2 giống
nhau như , adc0808
,adc0809,adc0804c,adc08041... ở đây tôi dùng adc 0809 chỉ đơn giàn là nó có sẵng ở nhà.
+ Còn vấn đề hiển thị thì có thể hiển thị trên led 7 đoạn hay LCD, với qui mô của đề tài
thì 7 đoạn là hợp lí, vừa rẻ
vừa đẹp.
Trên là những hướng chi tiết. Còn tổng quát mà nói thì có thể dùng nhiều cách để đo
nhiệt độ hiển thị kết quả
và điều khiển thì có thể dùng nhưng loại VDK hiện đại hơn như AVR, pic những loại này
có tích hợp sẵng ADC nên sẽ gọn
và tối ưu hơn,cũng có thể sử dụng các ngôn ngữ lập trình tốt hơn như C. Tuy nhiên tôi chỉ
mới tiếp cận VĐK nên phải tìm
hiểu từ cái cơ bản trước vừa làm giữa kì vừa có kiến thức thi cuối kì.
4.Sơ Đồ mạch nguyên lý
đồ mạch layout5.
Lưu đồ giải thuật
-Code chương Trình:
ale bit p1.5
start bit p1.6
eoc bit p1.7

org 000h
td: lcall cdoi
lcall hex_bcd
lcall bcd_7doan
lcall hienthi
sjmp td

cdoi: setb ale


clr ale

setb start
jb eoc,$
clr start

mov r7,#250
de: lcall hienthi
djnz r7,de
mov a,p3
ret

hex_bcd:
mov b,#10
div ab
mov 10h,b
mov 11h,a
ret

bcd_7doan:
mov dptr,#900h
mov a,10h
movc a,@a + dptr
mov 21h,a

mov a,11h
movc a,@a + dptr
mov 22h,a
mov 20h,#086h
ret

hienthi:

mov r6,20
repeat2:
mov r5,100
repeat1:
mov r0,#20h
mov a,#0feh
djnz r5,repeat1
djnz r6,repeat2
ht: mov p0,@r0
mov p2,a
lcall delay
mov p2,#0ffh
inc r0
rl a
cjne a,#0f7h,ht
ret

delay: mov 7fh,#100


djnz 7fh,$
ret

ORG 900H
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
END
6. Hình ảnh mô tả mô hình đã thi công khi đang hoạt động

7. -Kết quả đạt được


Hiển thì chính xác nhiệt độ trên led 7 đoạn, không bị nhiễu.
-Hạn chế của đề tài
Không hiển thị được nhiệt độ lẻ( ví dụ như 25.5) nên khi nhiệt độ môi trương dao động
khoảng
từ( 0.5-0.6) thì sẽ hiển thị dao động tăng hay giảm một độ.
-Hướng phát triển
+SỬ DỤNG CÁC LOẠI VI ĐIỀU KHIỂN MỚI HƠN NHƯ AVR, PIC. DÙNG NGÔN
NGỮ LẬP TRÌNH TRỰC QUAN HƠN NHƯ C.
+HIỂN THỊ TRÊN LCD
+GIAO TIẾP VỚI PC QUA CỔNG COM VỚI GIAO DIỆN VB HAY VS C++ ĐỂ
HIỂN THỊ KẾT QUẢ.
+HIỂN THỊ VÀ ĐIỀU KHIỂN NHIỆT ĐỘ TRONG LÒ NHIỆT, DỤNG CỤ BẾP(như
lò nướng...)
bai moi
A - Lý thuyết về ADC
1. Các thiết bị ADC:
Các bộ chuyên đổi ADC thuộc trong những thiết bị được sử dụng rộng rãi nhất để thu dữ
liệu. Các máy tính số sử dụng các giá trị nhị phân, nhưng trong thế giới vật lý thì mọi đại
lượng ở dạng tương tự(liên tục). Nhiệt độ áp suất (khí hoặc chất lỏng), độ ẩm và vận tốc
và một số ít trong những đại lượng vật lý của thế giới thực tại mà ta gặp hàng ngày. Một
đại lượng vật lý được chuyển đổi về dòng điện hoặc điện apqua một thiết bị được gọi là
các bộ biến đổi. các bộ biến đổi cũng có thể được coi như các bộ cảm biến.
Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và nhiều đại lượng tự
nhiên khác.nhưng chúng đều cho ra các tín hiệu dạng dòng điện hoặc điện áp ở dạng liên
tục. Do vậy, ta cần một bộ chuyển đổi tương tự số sao cho bộ vi điều khiển có thể đọc
được chúng. Một chip ADC được sử dụng rộng rãi là ADC 804.
2. Chip ADC 804:
Chip ADC 804 là bộ chuyển đổi tương tự số trong họ các loạt ADC 800 từ hang National
Semiconductor. Nó cũng được nhiều hang khác sản xuất, nó làm việc với +5v và có độ
phân giải là 8 bít. Ngoài độ phân giải thì thời gian chuyển đổi cũng là một yếu tố quan
trọng khác khi đánh giá một bộ ADC. Thời gian chuyển đổi được định nghĩa như là thời
gian mà bộ ADC cần để chuyển một đầu vào tương tự thành một số nhị phân.
Trong ADC 804 thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ được cấp tới
chân CLK và CLK IN nhưng không thể nhanh hơn 110µs. Các chân của ADC 804 được
mô tả như sau:
a). Chân chọn chíp: Là một đầu vào tích cực mức thấp được sử dụng để kích hoạt chíp
ADC 804. Để truy cập ADC 804 thì chân này phải ở mức thấp.
b). Chân (đọc): Đây là một tín hiệu đầu vào được tích cực mức thấp. Các bộ ADC
chuyển đổi đầu vào tương tự thành số nhị phân tương đương với nó và giữ no trong một
thanh ghi trong. được sử dụng để nhận dữ liệu được chuyển đổi ở đầu ra của ADC 804.
Khi CS = 0 nếu một xung cao – xuống – thấp được áp đến chân thì đầu ra số 8 bít được
hiển diện ở các chân dữ liệu D0 – D7. Chân cũng được coi như cho phép đầu ra.
c) Chân ghi (thực ra tên chính xác là “Bắt đầu chuyển đổi”). Đây là chân đầu vào tích
cực mức thấp được dùng để báo cho ADC 804 bắt đầu quá trình chuyển đổi. Nếu CS = 0
khi tạo ra xung cao – xuống – thấp thì bộ ADC 804 bắt đầu chuyển đổi giá trị đầu vào
tương tự V¬¬in ¬về số nhị phân 8 bít. Lượng thời gian cần thiết để chuyển đổi thay đổi
phụ thuộc vào tần số đưa đến chân CLK IN và CLK R. Khi việc chuyển đổi dữ liệu được
hoàn tất thì chân INTR được ép xuống thấp bởi ADC 804.
d) Chân CLK IN và CLK R:
Chân CLK IN là một chân đầu vào được nối tới một nguồn đồng hồ ngoài khi đồng hồ
ngoài được sử dụng để tạo ra thời gian. Tuy nhiên ADC 804 cũng có một máy tạo xung
đồng hồ. Để sử dụng máy tạo xung đồng hồ trong(cũng còn được gọi là máy tạo đồng hồ
riêng ) của 804 thì các chân CLK IN và CLK R được nối tới một tụ điện và một điện trở
như chỉ ra trên hình 12.5. Trong trường hợp này tần số đồng hồ được xác định bằng biểu
thức :
Giá trị tiêu biểu của các đại lượng trên R = 10kΩ và C = 150pF và tần số nhận được là f
= 606kHz và thời gian chuyển đổi sẽ mất là 110µs.

Kiểm tra ADC 804 ở chế độ chạy tự do


e) Chân ngắt (ngắt hay gọi chính xác hơn là “kết thúc chuyển đổi”).
Đây là chân đầu ra tích cực mức thấp. Bình thường nó ở trạng thái cao và khi việc chuyển
đổi hoàn tất thì nó xuống thấp để báo cho CPU biết là dữ liệu được chuyển đổi sẵn sàng
để lấy đi. Sau khi xuống thấp, ta đặt CS = 0 và gửi xung cao 0 xuống – thấp tới chân lấy
dữ liệu ra của 804.
f) Chân V¬in (+) và V¬in(-).
Đây là các đầu vào tương tự vi sai mà V¬in = V¬in (+) - V¬in(-). Thông thường V¬in(-)
được nối xuống đất và V¬in(+) được dùng như đầu vào tương tự được chuyển đổi về
dạng số .
g) Chân Vcc.
Đây là chân nguồn nối + 5v, nó cũng được dùng như điện áp tham chiếu khi đầu vào
Vref/2(chân 9) để hở.
h) Chân Vref/2
Chân 9 là một điện áp đầu vào được dùng cho điện áp tham chiếu. Nếu chân này hở thì
điện áp đầu vào tương tự cho ADC 804 nằm trong dải 0 đến +5V. Chân Vref/2 được
dùng để thực thi các điện áp đầu vào khác ngoài dải 0 đến +5V
Bảng điện áp Vref/2 liên hệ với dải V¬in
Ghi chú: -
- Khi hở thì đo được ở đó khoảng 2,5 V
- Kích thước bước (độ phân dải) là sự thay đổi nhỏ nhất mà ADC có thể phân biệt được.
i) Các chân dữ liệu D0 – D7
Các chân dữ liệu D0 – D7 (D7 là bít cao nhất MBS và D0 là bít thấp nhất LSB) là các
chân đầu ra dữ liệu số. Đây là những chân được đệm ba trạng thái và dữ liệu được chuyển
đổi chỉ được truy cập khi chân CS=0 và chân bị đưa xuống thấp. Để tính điện áp đầu ra
ta có thể sử dụng công thức sau:

Với là đầu ra dữ liệu số(dạng thập phân). là điện áp đầu vào tương tự và độ phân dải là
sự thay đổi nhỏ nhất được tính như là (2 x ) chia cho 256 đối với ADC 8 bít.
k) Chân đất tương tự và chân đất số.
Đây là những chân đầu vào cấp đất chung cho cả tín hiệu số và tương tự. Đất tương tự
được nối tới đất của chân tương tự, còn đất số được nối tới đất của chân . Lý do mà ta
phải có hai đất là để cách ly tín hiệu tương tự từ các điện áp ký sinh tạo ra việc chuyển
mạch số được chính xác. Trong phần trình bày của chúng ta thì các chân này được nối
chung với một đất. Tuy nhiên, trong thực tế thu đo dữ liệu các chân đất này được nối tách
biệt.
Từ những điều trên ta kết luận rằng các bước cần phải thực hiện khi chuyển đổi dữ liệu
bởi ADC 804 là:
- Bật CS=0 và gửi một xung thấp lên cao tới chân để bắt đầu chuyển đổi.
- Duy trì hiển thị chân . Nếu xuống thấp thì việc chuyển đổi được hoàn tất và ta có thể
sang bước kế tiếp. Nếu cao tiếp tục thăm dò cho đến khi nó xuống thấp.
- Sau khi chân xuống thấp, ta bật CS=0 và gửi một xung cao - xuống - thấp đến chân
để lấy dữ liệu ra khỏi chíp ADC 804. Phân chia thời gian cho quá trình này được trình
bày trên hình sau.
Phân chia thời gian đọc và ghi của ADC 804 .
3. Kiểm tra ADC 804
Chúng ta có thể kiểm tra ADC 804 bằng cách sử dụng sơ đồ mạch trên hình thiết lập này
được gọi là chế độ kiểm tra chạy tự do và được nhà sản xuất khuyến cáo nên sử dụng.
Hình trên trình bày một biến trở được dùng để cắp một điện áp tương tự từ 0 đến 5V tới
chân đầu vào.
Vin (+) của ADC 804 các đầu ra nhị phân được hiển thị trên các đèn LED của bảng huấn
luyện số. Cần phải lưu ý rằng trong chế độ kiểm tra chạy tự do thì đầu vào CS được nối
tới đất và đầu vào WR được nối tới đầu ra INTR. Tuy nhiên theo tài liệu của hãng
National Semiconductor “nút WR và INTR phải được tạm thời đưa xuống thấp kế sau
chu trình cấp nguồn để bảo đảm hoạt động”.

Hình: Nối ghép ADC 804 với nguồn đồng hồ riêng.


Ví dụ:
Hãy thử nối ghép ADC 804 với 8051 theo sơ đồ 12.7. Viết một chương trình để hiển thị
chân INTR và lấy đầu vào tương tự vào thanh ghi A. Sau đó gọi một chương trình chuyển
đổi mã Hex ra ASCII và một chương trình hiển thị dữ liệu. Thực hiện điều này liên tục.
Lời giải
Đặt P2.6 = WR (bắt đầu chuyển đổi cần một xung thấp lên cao)
Đặt chân P2.7 = 0 khi kết thúc chuyển đổi
Đặt P2.5 = RD (xung cao - xuống - thấp sẽ đọc dữ liệu từ ADC)
P1.0 – P1.7 của ADC 804
MOV P1, # 0FFH chọn P1 là cổng đầu vào
BACK: CLR P2.6 Đặt WR = 0
SETB P2.6 Đặt WR = 1 để bắt đầu chuyển đổi
HERE: JB P2.7, HERE Chờ cho P2.7 to để kết thúc chuyểnđổi
CLR P2.5 Kết thúc chuyển đổi, cho phép đọc RD
MOV A, P1 Đọc dữ liệu vào thanh ghi A
ACALL CONVERSION Chuyển đổi số Hex ra mã ASCII
ACALL DATA-DISPLAY Hiển thị dữ liệu
SETB P2.5 Đưa RD = 1 để cho lần đọc sau
SJMP BACK

Hình : Nối ghép ADC 804 với đồng hồ từ XTAL2 của 8051
Trên hình trên ta có thể thấy rằng tín hiệu đồng hồ đi vào ADC 804 là từ tần số thạch anh
của 8051. Vì tần số này quá cao nên ta sử dụng hai mạch lật Rlip – Flop kiểu D (74LS74)
để chia tần số này cho 4. Một mạch lật chia tần số cho 2 nếu ta nối đầu tới đầu vào D.
Đối với tần số cao hơn thì ta cần sử dụng nhiều mạch Flip – Plop hơn.
4. Phối ghép với một cảm biến nhiệt của 8051
Các bộ biến đổi chuyển đổi các đại lượng vật lý ví dụ nhhư cường độ ánh sáng, nhiệt độ,
lưu tốc và tốc độ thành các tín hiệu điện phụ thuộc vào bộ biến đổi mà đầu ra có thể là
dạng tín hiệu điện áp, dòng, trở kháng, hay dung kháng. Nhiệt độ được biến đổi thành về
các tín hiệu điện dử dụng một bộ biến đổi gọi là bộ cảm biến nhiệt, một bộ cảm biến
nhiệt đáp ứng sự thay đổi nhiệt độ bằng cách thay đổi trở kháng nhưng đáp ứng của nó
không tuyến tính.
Trở kháng của bộ cảm biến nhiệt theo nhiệt độ

Hướng dẫn chọn các loại cảm biến họ LM34


Hướng dẫn chọn các loại cảm biến họ LM35

5. Chip ADC 808/809 với 8 kênh tương tự


Một chip hữu ích của National Semiconductor là ADC 808/809. Trong khi ADC 804 chỉ
có một đầu vào tương tự thì chip này có 8 kênh đầu vào. Như vậy nó cho phép ta hiển thị
lên 8 bộ biến đổi khác nhau chỉ qua một chip duy nhất. Lưu ý rằng, ADC 808/809 có đầu
ra dữ liệu 8 bít như ADC 804.8 kênh đầu vào tương tự được dồn kênh và được chọn theo
bảng 12.10 sử dụng ba chân địa chỉ A, B và C

Bộ biến đổi ADC 808/809

Chọn kênh tương


tự của ADC 808

Trong ADC 808 / 809 thì Vrer(+) và Vrer(¬-) thiết lập điện áp tham chiếu. nếu Vref(-
1)=Gnd và Vref(+)= 5V thì độ phân dải là 5V/256 = 19.53 mV. Do vậy để có độ phân dải
10mV ta cần đặt Vref(+) = 2.56 V và Vref(-) = Gnd. Từ hình ( bộ biến đổi ADC 808/809
ta thấy có chân ALE. Ta sử dụng các địa chỉ A, B và C để chọn kênh đầu vào INO- IN7
và kích hoạt chân ALE để chốt địa chỉ. Chân Setcomplete để bắt đầu chuyển đổi (Start
conversion). Chân EOC được dùng để kết thúc chuyển đổi (End – Of – Conversion) và
chân OE là cho phép đọc đầu ra (out put enable)
6. Các bước lập trình cho ADC 808/809
Các bước chuyển dữ liệu từ đầu vào của ADC 808/809 và bộ vi điều khiển như sau
a. Chọn một kênh tương tự bằng cách tạo địa chỉ A,B và C
b. Kích hoạt chân ALE ( cho phép chốt điậ chỉ Address Latch Enable). Nó cần xung thấp
lên cao để chốt địa chỉ
c. Kích hoạt chân SC bằng xung cao xung thấp để bẳt đầu chuyển đổi
d. Hiển thị OEC để báo kết thúc chuyển đổi đầu ra cao xuống thấp báo rằng dữ liệu đã
được chuyển đổi và cần được lấy đi
f. Kích hoạt OE cho phép đọc dữ liệu ra của ADC. Một xung cao xuống thấp tới chân OE
sẽ đem dữ liệu ra khỏi chíp ADC
Trong ADC 808/809 không có đồng hồ riêng và do vậy phải cấp xung đồng bộ ngoài đến
chân CLK

Tập lệnh hiển thị nhiệt độ trên led 7 đoạn :


Chương trình đo và hiển thị trên LED 7 đoạn (4 led 7 đoạn)
Tập lệnh:

ORG 0000H
MOVT MOD,01H khởi động time 0 ở chế độ 1
LOOP
MOV P3,#00H Chọn kênh INO
MOV A,#01H
MOV DPTR,#6000H
MOVX@DPTR,A tạo xung START/ALE
MOV R3,#60
DJZN R3,$ Delay 0,12ms
MOVXA,@DPTR Đọc data từ 8051 về
MOVB,#5
MUL AB Nhân A với 5
MOV R7,B Cất 8 bit cao vào R7
MOV R6,A Cất 8 bit thấp vào R6
ACALL BIN16TOBCD Đổi thành BCD nén
ACALL OUT _LED Xuất ra 4 LED 7 đoạn
SJMP LOOP Quay lại nhãn LOOP

Chương trình con quét LED 4 đoạn

OUT_LED
MOV A,R6 Load chục _đơn vị
ANLA,#0FH Xóa digit cao
ORLA,#70H Chọn LED hàng đơn vị
ACALL DELAY 3ms Xuất ra và tạo trễ 3ms

MOV A.R6 Load chục_đơn vị


SWAP A Đảo 2 digit
ANAL,#0FH Xóa digit cao
ORL A,#0B0H Chon led hàng chục
ACALL DELAY 3ms Xuất ra và tạo trễ 3ms

MOV A,R7 Load nghin/trăm


ANLA ,#0FH Xóa dgit cao
ORL A,0D0H Chọn LED hàng trăm
ACALL DELAY 3m Xuất ra và tạo trễ 3ms

MOV A,R7 Load nghin_trăm


SWAP A Đảo 2 digit
ANLA ,#0FH Xóa digit cao
ORL A,#0E0H Chọn LED hàng nghìn
ACALL DELAY3m Xuất ra và tạo trễ 3ms
RET

DELAY 3m
MOV DPTR ,#2000H Chon/CS1
MOVX@DPTR,A Xuất ra
MOV R1.#6 Tạo trễ 3ms

LAP:
MOV R2,#250
DJNZ R2,$
DJNZ R1,LAP
RET

Chương trình con đổi số nhị phân 16bit<_9999 trong R7,R6 thành BCD nén R7;R6

BIN 16 TOBCD
PUSH ACC Cất A vào Stack
PUSH B Cất B vào Stack
MOV B,#10
ACALLL DIV _16_8 Chia R7,R6 cho 10
PUSH B Cất hàng đơn vị vào Stack
MOV A,R6
MOVB ,#10
ACALL DIV_16_8 Chia tiếp cho 10
PUSH B Cất hàng chục vào Stack
MOV A,R6
MOV B,#10
DIV AB Chia tiếp cho 10
PUSH B Cất hàng trăm vào Stack
SWAP A Đảo hàng nghìn lên digit cao
POP B Lấy hàng trăm ra B
ORL A,B Kết hợp nghìn/trăm

MOV R7,A Đưa vào R7


POP ACC Lấy hàng chục ra A
SWAP A Đảo hàng chục lên digit cao
POP B Lấy hàng đơn vị ra B
ORL A,B Kết hợp chục/đơn vị
MOV R6,A Đưa vào R6
POP B Lấy lại B
POP ACC Lấy lại A
RET

DIV_16_8
PUSH 02H Cất R2 vào stack
PSH ACC Cât A vào stack
MOV R2,#16 Cho dịch 16 lần
CLR A
DIVEDE

XCHA,R6
CLRC Dịch bit7 của R6 vào
RLCA Carry :bit 0 của R6

XCHA,R6 Bằng 0
XCHA,R7 Dịch bit carry vào
CLR A Bit 0 của R7
XCHA,R7
CLR A Dịch bit 7 của R7
CJNE A,B,NOT_EQ
SJMPA_GREA TEA_EQ_B
NOT_EQ
JC BELOW
A_GRE A TER_EQ_B
SUBB A,B Cất số dư vào A
XCH A,R6
ORL A,#1 Thương số băng 1
XCH A,R6 Thương số tiến đến R6
BELOW
DJNZ,R2,DIVIDE Dịch 16 lần
XCH A,B Cất số dư vào B
POP ACC Lấy lại A
POP 02H Lấy lại R2
RET

Khối cảm biến nhiệt:

Khối led 7 đoạn ;

Khối MCU ROM RAM ADC:


Mạch hiển thị nhiệt độ đo trên led 7 đoạn:

Read more: http://www.ant7.com/forum/forum_posts.asp?


TID=6993&get=last#ixzz0unVvYi3t
Bai khac
Đề Tài 42: Tìm Hiểu Ví Dụ C51 ADC Program
SVTH : Bùi Quang Hiếu
MSSV : 0608055
Lớp : ĐHĐT2A1

TIỂU LUẬN VI XỬ LÝ

Đề Tài Chọn 42 : Tìm Hiểu Ví Dụ C51 ADC Program


Đề Tài Báo Cáo : Mạch Báo Giờ Và Nhiệt Độ

A) Sơ Lược : Gồm 3 phần


1) Giới thiệu các linh kiện cần dùng
2) Sơ đồ mạch và nguyên lý hoạt động
3) Chương trình lệnh Assembler
B) Nội Dung
1) Giới Thiệu Sơ Lược Các Linh Kiện Cần Dùng
*Linh kiện cần dùng gồm : AT89C51, ADC0809 , Sensor LM35 , IC 74LS14 , 8 Led
7 đoạn Anot chung , và một vài linh kiện khác.
a) Chíp AT89C51
*AT89C51 là một Microcomputer 8 bit loại CMOS, có tốc độ cao và công suất thấp
với bộ nhớ Flash có thể lập trình được. Nó được sản xuất với công nghệ bộ nhớ
không bay hơi mật độ cao của hãng Atmel, và tương thích với chuẩn công nghiệp của
80C51 và 80C52 về chân ra và bộ lệnh. Vì lý do đó, kể từ đây về sau ta sẽ dùng thuật
ngữ “80C51”(hoặc “8051”)
*Những đặc trưng của AT89C51 :
+ Tương thích với các sản phẩm MSC-51
+ 4 kByte bộ nhớ Flash có thể lập trình lại với 1000 chu kỳ đọc/xóa
+ Hoạt động tĩnh đầy đủ: 0Hz đến 24MHz
+ Khóa bộ nhớ chương trình 3 cấp
+ 128 Byte Ram nội
+ 32 đường xuất nhập lập trình được(tương ứng 4 port)
+ Hai Timer/Counter 16 bit
+ Một port nối tiếp
+ Mạch đồng hồ và bộ dao động trên chip
*AT89C51 có tất cả 40 chân. Mỗi chân có chức năng như các đường I/O
(Xuất/Nhập), trong đó 24 chân có công dụng kép: mỗi đường có thể hoạt động như
một đường I/O hoặc như 1 đường điều khiển hoặc như thành phần của bus địa chỉ và
bus dữ liệu. Chức năng của từng chân và 4 port của AT89C51 tương tự như chip
8051.
*Sơ đồ chân của chip AT89C51:
b) Giới Thiệu ADC0809
*Bộ ADC0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi từ tương tự
sang số 8 bit , bộ chọn 8 kênh và một bộ logic điều khiển tương thích .Bộ chuyển đổi
AD 8 bit này dùng phương pháp chuyển đổi xấp xỉ tiếp. Bộ chọn kênh có thể truy
xuất bất kỳ kênh nào trong các ngõ vào tương tự một cách độc lập.
*Thiết bị này loại trừ khả năng cần thiết điều chỉnh diểm 0 bên ngoài và khả năng
điều chỉnh tỉ số làm tròn nên ADC0809 dễ dàng giao tiếp với các bộ vi xử lý.
*Sơ đồ chân ADC0809:
*Ý nghĩa các chân:
- IN0 đến IN7 : 8 ngõ vào tương tự.
- A, B, C : giải mã chọn một trong 8 ngõ vào.
- Z-1 đến Z-8 : ngõ ra song song 8 bit
- ALE : cho phép chốt địa chỉ
- START : xung bắt đầu chuyển đổi
- CLK : xung đồng hồ
- REF(+) : điện thế tham chiếu (+)
- REF(-) : điện thế tham chiếu (-)
- VCC : nguồn cung cấp
*Các đặc điểm của ADC0809:
- Độ phân giải 8 bit
- Tổng sai số chưa chỉnh định(+)(-)LSB;(+)(-)1LSB
- Thời gian chuyển đổi : 100µs ở tần số 640kHz
- Nguồn cung cấp +5V
- Điện áp ngõ vào 0-5V
- Tần số xung clock 10kHz – 1280kHz
- Nhiệt độ hoạt động -40(0C) đến 85(0C)
- Dễ dàng giao tiếp với vi xử lý hoặc dùng riêng
- Không cần điều chỉnh zero hoặc đầy thang
c) Cảm Biến Nhiệt Độ LM35
* LM35 có độ biến thiên theo nhiệt độ : 10mV/1(0C)
* Độ chính xác cao, tính năng cảm biến nhiệt độ rất nhạy, ở nhiệt độ 25(0C) nó có
sai số không quá 1%. Với tầm đo từ 0(0C) đến 128(0C) , tín hiệu ngõ ra tuyến tính
liên tục với những thay đổi của tín hiệu nhõ vào.
* Thông số kỹ thuật:
- Tiêu tán công suất thấp .
- Dòng làm việc từ 400µA đến 5mA.
- Dòng ngược 15mA.
- Dòng thuận 10mA.
- Độ chính xác: khi làm việc ở nhiệt độ 25(0C) với dòng làm việc 1mA thì điện áp
ngõ ra từ 2,94V đến 3,04V.
* Đặc tính điện:
- Theo thông số của nhà sản xuất LM35, quan hệ giữa điện áp và ngõ ra như sau:
Vout =0.01*T(0K)=2,73+0,01*T(0C).
Vậy ứng với tầm hoạt động từ 0(0C) đến 100(0C) ta có sự biến thiên điện áp ngõ ra là
:
Ở 0(0C) thì điện áp ngõ ra Vout = 2,73V
Ở 5(0C) thì điện áp ngõ ra Vout = 2,78V
……………………………………….
Ở 100(0C) thì điện áp ngõ ra Vout = 3,71V
Tầm biến thiên điện áp tương ứng với nhiệt độ từ 0(0C) đến 100(0C) là 1V
2) Sơ Đồ Mạch Và Nguyên Lý Hoạt Động
a) Sơ Đồ Nguyên Lý :

b) Nguyên Lý Hoạt Động


Cảm Biến nhiệt độ LM35 có nhiệm vụ chuyển đổi tín hiệu tương tự là sự thay đổi
của nhiệt độ thành tín hiệu điện ở đầu ra. Tín hiệu điện này được đưa vào bộ chuyển
đổi ADC0809 (Analog Digital Conversion) . ADC0809 có nhiệm vụ biến đổi tín hiệu
điện áp thành tín hiệu số bằng các số nhị phân 0,1.Để cho ADC hoạt động thì IC
74LS14 có nhiệm vụ cấp xung vào chân START của ADC. Khi ADC đã hoạt động
thì tín hiệu tương tự được chuyển đổi sang tín hiệu số 8 bit và được đưa ra ở đầu ra từ
chân Q0 đến Q7 của ADC. Tín hiệu 8 bit này được đưa vào port 3 của AT89C51. Vi
xử lý sẽ xử lý tín hiệu này và hiển thị kết quả qua led 7 đoạn.
3) Lệnh Viết Cho Vi Xử Lý Bằng Assembler:

;***********************************************************
************
; 89C51 + ADC0809 + LED 7SEG - ANOD COMM
;***********************************************************
************
;R0 : DEM 10S HTHI GIO- 3 S HIEN THI TEMPRATURE
;R1
;R2 : BIEN DEM 0--100 <=> 1S
;R3
;R4
;R5 : BIEN CAP NHAT TEM VALUE AFTER 100 TIMES
;R6
;R7 : DELAY
;-----------------------------
;12H--13H--14H--15H--16H--17H
;CH DCH CP DVP CG DVG
;-----------------------------
;20H-------21H--22H--23H---24H
; HUNDER 2 7 * C
;-----------------------------
;--CO CHO BIET BAO GIO HOAC NHIET DO
;FL_HOR_TEM =0 : BAO GIO
;FL_HOR_TEM =1 : BAO NHIET DO
;-----------------------------------
FL_HOR_TEM BIT 24H.0
;-----------------------------------

ORG 0000H
SJMP MAIN
;-------------NGAT DO TIMER
ORG 0BH
LJMP NGAT_TIMER0

;-------------VAO PRO MAIN


MAIN:
MOV SP,#30H ; NHAP DIA CHI BAT DAU CHUONG TRINH
;KHOI DONG SAU KHI BAT NGUON "TURN ON POWER"
;------------------------------------------------------
; vung Ram luu tru: hh:mm:ss
;------------------------------------------------------
MOV 12H,#00H
MOV 13H,#00H
MOV 14H,#00H
MOV 15H,#00H
MOV 16H,#00H
MOV 17H,#00H
;------------------------------------------------------
; vung Ram luu tru Temprature :27*C
;------------------------------------------------------
MOV 20h,#00h
MOV 21h,#00h
MOV 22h,#00h
MOV 23h,#00h

;------------------------------------------------------
; THIET LAP MAC DINH FL_HOR_TEM=0 LA HIEN THI GIO
;------------------------------------------------------
CLR FL_HOR_TEM ;FL_HOR_TEM=0
;--------LAY TEM LAN DAU TIEN-------------------------
CALL CON_ADC
MOV R5,#0

MOV IE,#10000010B ;KHOI TAO NGAT CHO PHEP


;--- INT1_T0_INT0

MOV TMOD,#11H
MOV TL0,#LOW(-9216) ;XTAL11.0592 =>Tclk = 12/11.0592 = 1,08507uS
MOV TH0,#HIGH(-9216) ; 9216x(100lan)x[Thoigianmay(12/11.0592)]=1s OK!
chinh xac 99.99%
SETB TR0

LAP:
CALL HIEN_THI
CALL TEST_PHIM
CALL KIEM_TRA1S
SJMP LAP
;**********************************************
HIEN_THI:
JNB FL_HOR_TEM,HIEN_THI_GIO ;IF FL_HOR_TEM=0 THEN "HIEN THI
GIO"
LJMP HIEN_THI_TEM ;ELSE FL_HOR_TEM=1 THEN "HIEN THI NHIET DO"
HIEN_THI_GIO:
;----HIEN THI DATA LEN CAC LED-----------
MOV DPTR,#BANG_MA_LED
;LED1
MOV P0,#11111110B
MOV A,17H
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1
mov p2,#0ffh; Chong nhieu
;LED2
MOV P0,#11111101B
MOV A,16H
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1
mov p2,#0ffh ; Chong Nhieu
;LED3
MOV P0,#11111011B
MOV A,15H
MOVC A,@A+DPTR

ANL A,#10111111B

MOV P2,A
LCALL DELAY1
mov p2,#0ffh ;Chong Nhieu
;LED4
MOV P0,#11110111B
MOV A,14H
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1
mov p2,#0ffh ;Chong Nhieu
;LED5
MOV P0,#11101111B
MOV A,13H
MOVC A,@A+DPTR

ANL A,#10111111B
MOV P2,A
LCALL DELAY1
mov p2,#0ffh ;Chong Nhieu
;LED6
MOV P0,#11011111B
MOV A,12H
;KIEM TRA -DE TAT MO LED CH
CJNE A,#0,MOLED_CH ; Neu CH khac 0 thi Nhay den MOLED_CH
; Neu CH la 0 thi tat led CH
MOV P2,#0ffh ; Xoa Led CH khi no la so:"0"
LCALL DELAY1
MOV P2,#0ffh ;Chong Nhieu
LJMP THOAT_HIENTHI

;---- MOLED_CH--------
MOLED_CH:
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1
MOV P2,#0FFH ;Chong Nhieu
LJMP THOAT_HIENTHI

;===========================================================
==
HIEN_THI_TEM:
;-------------------------HIEN THI NHIET DO----------------------------------
;---BEFOR DISPLAY VALUE TEMPRATURE WE MUST CONVECTER
ANALOG TO DISGITAL------

INC R5
PUSH ACC
MOV A,R5
CJNE A,#100,CHUA_CAP_NHAT
;----CAP NHAT LAI TEM VALUE------
CALL CON_ADC
MOV R5,#0
CHUA_CAP_NHAT:
POP ACC
;--------------------------------
; ghcbaFed
; : 10000000B
; : 11110000B ;CHU C
; : 01100011B ;SO 0 NHO

MOV P0,#11111110B
MOV P2,#11110000B ;CHU C
LCALL DELAY1
mov p2,#0ffh; Chong nhieu
LCALL DELAY1

MOV P0,#11111101B
MOV P2,#01100011B ;SO 0 NHO
LCALL DELAY1
mov p2,#0ffh; Chong nhieu
LCALL DELAY1

;--------HIENTHI GIA TRIN TEM-----------


MOV P0,#11111011B
MOV A,22H
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1

mov p2,#0ffh ; Chong Nhieu


LCALL DELAY1
MOV P0,#11110111B
MOV A,21H
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1

mov p2,#0ffh ;Chong Nhieu


LCALL DELAY1
MOV P0,#11101111B
MOV A,20H
CJNE A,#00,HIENTHI_TEM_100
LJMP THOAT_HIENTHI
HIENTHI_TEM_100:
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1
mov p2,#0ffh ;Chong Nhieu
LCALL DELAY1

THOAT_HIENTHI:

RET
;****************************************************

KIEM_TRA1S:
;-----KIEM TRA XEM DU 1s CHUA ?-------------
CJNE R2,#100,KET_THUC

MOV R2,#00H
;------------------------PROCESS
TEMPRATURE-------------------------------------------------
INC R0
CJNE R0,#10,R0_BY_13 ; IF R010 THEN JUMPER TO TEST IT BY 13 ?
SETB FL_HOR_TEM ; ELSE R0=10 THEN SET FLAG=1 FOR HTHI
TEMPRATURE
LJMP CONT_UPDATE_NO_HT ; TIEP TUC CAP NHAT NHUNG KHONG HIEN
THI GIA TRI GIO

R0_BY_13:
CJNE R0,#13,CONT_UPDATE_NO_HT ; IF R0=13 THAT MEAN IS
"TEMPRATURE DISPLAY IN 3S"
CLR FL_HOR_TEM ; AFTER 3S IT WILL RE_DISPLAY VALUE OF HOUR
; SO WE MUST RESET VALUE OF FLAG = 0
MOV R0,#0
;----------------------------------------------------------- ----------------------------

CONT_UPDATE_NO_HT:

INC 17H
MOV A,17H
CJNE A,#10,KET_THUC
MOV 17H,#00
INC 16H
MOV A,16H
CJNE A,#6,KET_THUC
MOV 16H,#00
INC 15H
MOV A,15H
CJNE A,#10,KET_THUC
MOV 15H,#00
INC 14H
MOV A,14H
CJNE A,#6,KET_THUC

MOV 14H,#00
INC 13H
MOV A,13H
CJNE A,#03,TANG_DVH_LEN_10
;--NEU LA 3 THI KTRA TIEP----
MOV A,12H
CJNE A,#01,KET_THUC ; DUNG DVH LA 3 VA CH KHONG LA 1 THI NHAY
TOI CP DE CP=0
MOV 12H,#00H
MOV 13H,#01H
LJMP KET_THUC

;----TANG DVH LEN 10 KHI NO KHONG PHAI LA S0 3----------


TANG_DVH_LEN_10:
CJNE A,#10,KET_THUC
MOV 13H,#00
INC 12H

KET_THUC:
RET
;*********************************************************** ****

;----- DELAY----------
DELAY1:
MOV R7,#10H
DJNZ R7,$

RET
;*********************************************************** ****
;CHUONG TRINH CON NGAT TIMER0
NGAT_TIMER0:
INC R2 ;tre 1us
MOV TL0,#LOW(-9216) ;XTAL11.0592 =>Tclk = 12/11.0592 = 1,08507uS
MOV TH0,#HIGH(-9216) ; 9216x(100lan)x[Thoigianmay(12/11.0592)]=1s OK!
chinh xac 99.99%
SETB TR0

RETI
;*******************************************************
;
TEST_PHIM:
JB P3.3,PHIM2
CALL NGAT_PHUT
LJMP THOAT_PHIM1
;*******************************************************

PHIM2:
JB P3.2,THOAT_TEST_PHIM
CALL NGAT_GIO
LJMP THOAT_PHIM2
;--------------------------------------

THOAT_PHIM1:
TT_KT1:
JNB P3.3,HIEN_THI_T1
LJMP THOAT_TEST_PHIM
HIEN_THI_T1:
CALL HIEN_THI
LJMP TT_KT1

THOAT_PHIM2:
TT_KT2:
JNB P3.2,HIEN_THI_T2
LJMP THOAT_TEST_PHIM
HIEN_THI_T2:
CALL HIEN_THI
LJMP TT_KT2

THOAT_TEST_PHIM:
RET

;*********************************************************** ****
;CHUONG TRINH CON NGAT INTO
NGAT_PHUT:
;---CAM BAO NHIET
CLR FL_HOR_TEM
MOV R0,#0

INC 15H
MOV A,15H
CJNE A,#10,THOAT1
MOV 15H,#0H
INC 14H
MOV A,14H
CJNE A,#6,THOAT1
MOV 14H,#0H
THOAT1:
RET

;CHUONG TRINH CON NGAT INT1


NGAT_GIO:
CLR FL_HOR_TEM
;---CAM BAO NHIET
CLR FL_HOR_TEM
MOV R0,#0

INC 13H
MOV A,13H

CJNE A,#03,NGAT_11
MOV A,12H
CJNE A,#1,THOAT2
MOV 12H,#0H
MOV 13H,#1
LJMP THOAT2
NGAT_11:
CJNE A,#10,THOAT2
MOV 13H,#0
MOV 12H,#1
SJMP THOAT2

THOAT2:

RET

;*********************************************
CON_ADC:

;***********************
CHON_NGO_VAO:
CLR P3.4
CLR P3.5
CLR P3.6

BATDAU_ADC:
ACALL START
ACALL LAYDATA
ACALL CHUYEN_DOI
RET
;===========================================================
===
;QUA TRINH BIEN DOI BAT DAU KHI CO CANH XUONG O TREN CHAN
START
START:
SETB P3.7
NOP
NOP
NOP
CLR P3.7
;DOI 100US DE QUA TRINH BIEN DOI XONG
CALL DELA::24Ỷ22::S
RET
;===========================================================
===
LAYDATA:
MOV A,P1
RET
;===========================================================
===
CHUYEN_DOI:

MOV B,#51
DIV AB
; ------LUU HANG TRAM-------
MOV 20H,A
MOV A,B
;CHIA TIEP
MOV B,#10
DIV AB
;-------LUU CHUC-------------
MOV 21H,A
;-------LUU TRAM--------------
MOV 22H,B
;
;20H = SE GIU GIA TRI HANG TRAM
;21H = SE GIU GIA TRI HANG CHUC
;22H = GIU GIA TRI HANG DON VI
;==========================

RET

;*********************************************************** ********
DELA::24Ỷ22::S:
MOV TH1,#HIGH(-120)
MOV TL1,#LOW(-120)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1

RET

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

BANG_MA_LED:
DB 11000000B;0
DB 11001111B
DB 01100100B
DB 01000110B
DB 01001011B
DB 01010010B
DB 01010000B
DB 11000111B
DB 01000000B
DB 01000010B;9

END

Read more: http://www.ant7.com/forum/forum_post.asp?TID=3953#ixzz0vPKgAQ16

También podría gustarte