Em đang mô phỏng cái mạch đo nhiệt độ sử dụng Sensor nhiệt LM35 và ADC0804 giao tiếp với 8051 hiển thị trên led 7 đoạn. Code em đã viết xong nhưng hoạt động không đúng. Cụ thể là khi em thay đổi nhiệt độ trên LM35 thì hiển thị không chính xác. Em loay hoay đã rất lâu mà không biết lỗi tại đâu.
Mong các anh chị bớt chút thời gian chỉ giúp !
Dưới đây là code và file mô phỏng đính kèm.
P/s: Mô phỏng bằng phần mềm Proteus v 7.10
Mong các anh chị bớt chút thời gian chỉ giúp !
Dưới đây là code và file mô phỏng đính kèm.
Code:
;*******************************************************************************
; CHUONG TRINH : DO NHIET DO HIEN THI TREN LED 7 DOAN
; ******************************
; MO TA :
; - Phan cung :
; + AT89C51 (thach anh 12MHz)
; + 4 Led 7 Seg (Anot chung)
; + 1 IC chuyen doi tin hieu tuong tu - so ADC0804
; + 1 Temperature Sensors LM35
; - Ket noi :
; + Cac thanh A-B-C-D-E-F-G cua Led 7 Seg lan luot noi voi P3.0, ... , P3.7 cua 8051
; + Anot cua cac Led 1 den 4 (tinh tu trai sang) P1.0 den P1.3 thong qua cac Tranzito dem PNP
; + Cac dau ra DB0 den DB7 cua ADC duoi noi toi P0.0 den P0.7 cua 8051
; + Cac chan RD, WR, INTR cua ADC duoc noi voi P2.0, P2.1, P2.2 cua 8051
; - Chu thich :
; + Cac LED 7 doan tich cuc muc 0
; - Ten file : ADC0804_LM35_LED7Seg.asm
;
; HOAN THANH : ... - Successful
;
; COPYRIGHT : Ck33spkt
;*******************************************************************************
;
;--------------------------------------------
; C O N S T A N T ;
;--------------------------------------------
DATA_IN equ P0
READ bit P2.0
WRITE bit P2.1
INTR bit P2.2
CS bit P2.3
DATA_OUT equ P3
MACHU_C equ 30h ; cac o nho tu 30h den 33h luu giu ma 7 doan
MACHU_DO equ 31h
LED_DV equ 32h
LED_CH equ 33h
;
org 0000h
mov P2, #0ffh ; chon P0, P2 lam dau vao
mov P0, #0ffh
mov P1, #0ffh ; tat LED
mov MACHU_C, #0c6h ; dua ma 7 seg cua chu C vao o nho 30h
mov MACHU_DO, #9ch ; dua ma 7 seg cua dau DO vao o nho 31h
clr INTR ; dat INTR = 0 de dam bao hoat dong binh thuong
;--------------------------------------------
; MAIN: ;
; - Thuc hien viec doc ADC va hien thi du ;
; lieu ra led 7 doan bang phuong phap quet. ;
; - Trong main co cac chuong trinh con nhu;
; sau:
;
;===========================================;
; M A I N P R O G R A M ;
;===========================================;
main:
acall doc_adc
acall xuly
acall hien_thi
sjmp main
;--------------------------------------------
; Ket thuc ham main ;
;--------------------------------------------
;
;--------------------------------------------
; doc _adc: ;
; - Thuc hien viec doc ADC de lay du lieu ;
; dua vao thanh ghi Acc de xu ly. ;
; - Ket thuc chuong trinh, thanh ghi Acc ;
; chua ma hex.
;--------------------------------------------
doc_adc:
clr WRITE ; dat WR = 0
setb WRITE ; dat WR = 1 de bat dau chuyen doi
jb INTR, $ ; cho ket thuc chuyen doi
clr READ ; ket thuc chuyen doi: cho phep doc du lieu
mov A, DATA_IN ; doc du lieu vao thanh ghi a
ret ; ket thuc cong viec doc adc
;--------------------------------------------
; xuly: ;
; - Thuc hien viec chuyen doi du lieu nhan;
; duoc tu ADC thanh ma BCD roi chuyen thanh ;
; ma 7 Seg. ;
; - Ket thuc chuong trinh o nho 32h va 33h;
; chua ma 7 Seg. ;
;--------------------------------------------
xuly:
mov B, #100 ; nap 100 vao thanh ghi B
div AB ; chia A cho 10 (bo di so hang tram, chi lay so hang chuc va hang don vi)
mov R1, B ; luu so du vao R1
mov B, #10
mov A, R1 ; luu so du vao A
div AB ; chia A cho 10
acall bcd_to_7seg ; doi so bcd hang chuc thanh ma 7 doan
mov LED_CH, A ; cat ma 7 doan cua led hang chuc
mov A, B ; dua phan du vao Acc
acall bcd_to_7seg ; doi so bcd hang don vi thanh ma 7 doan
mov LED_DV, A ; cat ma 7 doan cua led hang don vi
ret ; ket thuc cong viec xu ly du lieu
;--------------------------------------------
;--------------------------------------------
; hien_thi:
; - Thuc hien viec lay ma 7 doan tu cac o ;
; nho va xuat ra P3 va quet Led. ;
;--------------------------------------------
hien_thi:
mov P1, #11111110b ; khoi tao xung quet, led chu C sang
mov DATA_OUT, MACHU_C ; xuat du lieu ma chu C
acall delay_5ms ; tre 5ms
mov DATA_OUT, #0ffh ; tat LED
;
mov A, P1 ; A = P1
RL A ; quay trai thanh ghi A 1 don vi
mov P1, A ; P1 = A: quet led do
mov DATA_OUT, MACHU_DO ; xuat du lieu ma chu DO
acall delay_5ms ; tre 5ms
mov DATA_OUT, #0ffh ; tat LED
;
mov A, P1 ; A = P1
RL A ; quay trai thanh ghi A 1 don vi
mov P1, A ; P1 = A: quet led don vi
mov DATA_OUT, LED_DV ; xuat du lieu ma chu don vi
acall delay_5ms ; tre 5ms
mov DATA_OUT, #0ffh ; tat LED
;
mov A, P1 ; A = P1
RL A ; quay trai thanh ghi A 1 don vi
mov P1, A ; P1 = A: quet led chuc
mov DATA_OUT, LED_CH ; xuat du lieu ma chu hang chuc
acall delay_5ms ; tre 5ms
mov DATA_OUT, #0ffh ; tat LED
ret ; ket thuc cong viec hien thi du lieu
;--------------------------------------------
; bcd_ to_7seg:
; - Thuc hien viec doi ma bcd thanh ma 7s ;
;--------------------------------------------
bcd_to_7seg:
mov dptr, #ma7seg
movc A, @A+dptr
ret
;--------------------------------------------
; CHUONG TRINH CON TAO TRE ;
;--------------------------------------------
delay_5ms:
push 00
push 01
push 02
mov R0, #5
mov R1, #2
mov R2, #248
djnz R2, $
djnz R1, $-4
djnz R0, $-8
pop 02
pop 01
pop 00
ret
;--------------------------------------------
ma7seg: ; ma 7 doan cho led Anot chung
; 0 1 2 3 4 5 6 7 8 9
; | | | | | | | | | |
db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
;--------------------------------------------
;
end

Comment