Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Đâ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
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
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
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 đồ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 độ
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
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
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
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
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
TIỂU LUẬN VI XỬ LÝ
;***********************************************************
************
; 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
;------------------------------------------------------
; 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 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
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
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
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