You are on page 1of 16

THIẾT KẾ BỘ ĐO NHIỆT ĐỘ SỬ DỤNG 8051 VÀ LM35

PHẦN I: LÝ THUYẾT CHUNG


I. MỤC ĐÍCH, YÊU CẦU

-Sự cần thiết , quan trọng và tính khả thi vào lợi ích của mạch số , nhằm dùng kiến thức số học
và kỹ thuật số vào thực tiễn

-Tìm hiểu nguyên tắc hoạt động của thiết bị cảm biến (cảm biến nhiệt LM35), ADC0808,
AT89s52

- Yêu cầu của bài : Đo sử dụng vi điều khiển họ 8051 đo nhiệt độ hiển thị LED 7 thanh dùng
cảm biến LM35

II. Ý NGHĨA

- Thấy được tính khoa học và ứng dụng thực tế của đề tài

- 8051 là họ vi điều khiển có nhiều tính năng, khả năng xử lí nhanh

- Ứng dụng của ADC trong việc chuyển đổi tín hiệu tương tự sang tín hiệu số . Tín hiệu tương tự
là tín hiệu lấy dc từ bộ cảm biến

-Mạch hiển thị LED 7 đoạn nên dễ dàng cho người sử dụng theo dõi nhiệt độ hiển thị

PHẦN II : LÝ THUYẾT VÀ CÁC LINH KIỆN


I. CƠ SỞ LÝ THUYẾT

Các linh kiện sử dụng trong mạch

- Sử dụng vi điều khiển họ 8051

- Đo nhiệt độ bằng cảm biến LM35 thông qua bộ thiết kế mạch chuyển đổi ADC0808 để chuyển
tín hiệu tương tự sang tín hiệu số

- Hiển thị bằng LED 7 đoạn

II. Các linh kiện sử dụng trong đo lường


Hình : ADC0808

Với :
IN0 tới IN7 : 8 ngõ đầu vào tương tự
DDR A,B,C : là 3 chân giải mã chọn 1 trong 8 ngõ vào
Z1 tới Z8 : ngõ ra song song 8 bit
ALE : Cho phép chốt yêu cầu
START : xung bắt đầu chuyển đổi
CLK : xung dao dộng cho quá trình biến đổi A-D
OE : Cho phép dữ liệu đầu ra
Ref+/- : Chân tham chiếu điện áp

Bảng chọn kênh :


Cấu trúc bên trong của ADC0808 và giản đồ xung hoạt động
Dòng ADC này hoạt động và tương thích tốt với hầu hết các vi điều khiển nên được

ứng dụng rộng rãi.

2. Giới thiệu chung về họ vi điều khiển 8051 và IC 89s52

2.1 Giới thiệu

Kiến trúc cơ bản bên trong 8051 bao gồm các đặt tính sau:

- 8-bit ALU, thanh ghi 8-bit, 8-bit data bus và 2x16-bit địa chỉ bus/program.

- 32 thanh ghi (4 bit-định địa chỉ 8-bit).

- 4 băng thanh ghi chuyển đổi nhanh, mỗi băng 8 thanh ghi.

- 2 bus địa chỉ 16-bit.

- 128 bytes RAM trên chip (IRAM).

- 4 KiB ROM trên chip.

- Bốn cổng vào ra 8-bit.

- 2 bộ đếm/định thời 16-bit


2.2 . Sơ đồ cấu trúc chung của họ 8051

-Trong bài chúng ta sử dụng vi điều khiển AT89S52, 1 vi điều khiển thuộc họ 8051

AT89S52 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc cóthể xóa và lập trình
nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 3TIMER/COUNTER 16 Bit, 5 vectơ ngắt có
cấu trúc 2 mức ngắt, một Port nối tiếpbán song công, 1 mạch dao động tạo xung Clock và bộ dao
động ON-CHIP
Hình ảnh và sơ đồ của vi điều khiển

2.3. Sơ đồ chân của họ 8051 :

Chức năng :
- Chân 40 nối dương nguồn 5V
- Chân 20 nối đất (Mass,GND)
- Chân 29 (PSEN): là tín hiệu điều khiển xuất ra của 8051, nó cho phép chọn bộ nhớ ngoài
và được nối chung với chân OE (output) của EPROM ngoài để cho phép đọc các byte của
chương trình ( ở đây là đọc các lệnh- khác với đọc dữ liệu).
- Chân 30 (ALE) là tín hiệu điều khiển xuất ra của 8051, nó cho phép kênh Bus địa chỉ và
Bus dữ liệu của Port 0.
- Chân 31 (EA) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài đối với 8051.
- P0 từ chân 39-> 32 tương ứng là các chân P0_0 -> P0_7
- P1 từ chân 1->8 tương ứng với các chân P1_0 -> P1_7
- P2 từ chân 21->28 tương ứng là các chân P2_0->P2_7
- P3 từ chân 10->17 tương ứng là các chân P3_0->P3_7
- Riêng cổng 3 có 2 chức năng ở mỗi chân như trên hình vẽ :
- P3.0 – RxD : chân nhận dữ liệu nối tiếp khi giao tiếp với RS232 (COM)
- P3.1 – TxD : phân truyền dữ liệu nối tiếp khi giao tiếp RS232
- P3.2 – INT0 : interupt 0, ngắt ngoài 0.
- P3.3 – INT1 : interupt 1 ngắt ngoài 1.
- P3.4 – T0 : Timer 0 đầu vào timer 0.
- P3.5 – T1 : Timer 1 đầu vào timer 1.
- P3.6 – WR : Điều khiển ghi dữ liệu
- P3.7 – RD : Điều khiển đọc dữ liệu
- Chân 18,19 nối với thạch anh tạo thành mạch dao động cho vi điều khiển, vi xử lý.
- Tần số thạch anh thường dùng trong các ứng dụng là 12Mhz và 11.092MHz (Giao tiếp
với cổng COM), tần số tối đa là 24Mhz.

3. LED 7 thanh

-Ta xư dụng phương pháp quét LED để tiết kiệm được chân của vi điều khiển.
Phương pháp này là ta sẽ bật tắt các đèn LED liên tục hơn 24 hình trên giây thì mắt
thường sẽ không cảm nhận thấy điều đó và thấy rằng các LED đang sáng đồng thời

->Như vậy đối với phương pháp này chúng ta tiết kiệm được một số lượng lớn chân
vi xử lý và đồng thời tiếp kiệm được năng lượng tiêu thụ do phương pháp quét LED trong thời
gian ngắn. Khi đó tối đa trong 1 thời điểm có 1 LED sáng toàn bộ thôi. Cần phải tính toán giá trị
dòng vào cho LED sao cho LED sáng đẹp bằng cách thêm bớt điện trở.

4. Cảm biến nhiệt LM35

Giới thiệu về cảm biến nhiệt độ LM35

LM35 là cảm biến nhiệt độ bán dẫn thông dụng của hãng National Semiconductor .

Đặc tính của LM35 :

 Chuẩn hóa theo thang đo nhiệt đọ Cesius


 Đầu ra tuyến tính 10mV/1độC
 Dải nhiệt độ đo được từ -55 tới 150 độ tùy theo kiểu đóng vỏ
 Dòng tiêu thụ rất nhỏ cỡ 60uA, nên nhiệt tự tỏa rất nhỏ hầu như không ảnh hưởng đến kết
quả đo.
Sai số nhỏ , chỉ khoảng 0.5độ C
PHẦN III: NỘI DUNG THIẾT KẾ
1. Sơ đồ nguyên lý

 Phân tích mạch :

Cảm biến nhiệt LM35 được nối với đầu vào IN0 tương ứng với chân chọn địa
chỉ đầu vào ADD A = ADD B = ADD C = 0;

Đầu ra số của ADC0808 được nối với Port 1 của 8051 .

Vì cảm biến LM35 làm loại LM35DZ với dải nhiệt độ max là 128 độ C
nên giá trị điện áp max là 1.28V tương ứng với giá trị số đầu ra là 255.= > cần
đưa điện áp tham chiếu Vref(+) = 1.28V, Vref(-) = 0.

Nguồn xung chuyển đổi clock với tần số 640Khz .


Khối hiển được nối với port P0 và được hiển thị theo phương pháp quét a not.

 Nguyên lý hoạt động :


Ta đặt cho hệ thống trong dải đo từ 15 0C đến 400C nếu hệ thống đo được
trong khoảng này và báo về bộ xử lý thì sẽ không có hiện tượng gì xảy ra,
khi hệ thống đo đo được giá trị ngoài khoảng này thì hệ thống sẽ xử lý và
đưa ra cảnh báo ở ngoài loa, nếu hệ thống đang hoạt động mà ấn stop thì giá
trị đo được sẽ được lưu lại cho lần đo tiếp theo.
Việc đo và tính toán được thực hiện qua các thiết bị như cảm biến các
con IC, các transistor , cùng một số thiết bị khác

2. Code chương trình


#include <AT89X52.h>

//#include "delay.c"

#define ALE P2_3

#define OE P2_6

#define START P2_4

#define EOC P2_5

#define CLK P2_7

#define SEL_A P2_0

#define SEL_B P2_1

#define SEL_C P2_2

#define ADC_DATA P3

void delay_us(unsigned short us_count)

while(us_count!=0)

us_count--;
}

void delayms(unsigned int time)

unsigned int i=0 , j=0;

for(i=0; i<=1000; i++)

for(j=0;j<=time;j++)

unsigned char i=0;

unsigned char font[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x80,0x10,0xC6};

sbit en0=P1^0;

sbit en1=P1^1;

sbit en2 = P1^2;

sbit en3 = P1^3;

unsigned short time_tick=0;

void timer0() interrupt 1

{
CLK=~CLK;

void Control_7seg(unsigned int numled) // lap trinh hien thi tren led

switch(numled)

case 0: // nghin

en0=0;en1=1;en2=1;en3=1;

break;

case 1: // tram

en0=1;en1=0;en2=1;en3=1;

break;

case 2:// chuc

en0=1;en1=1;en2=0;en3=1;

break;

case 3: // dvi

en0=1;en1=1;en2=1;en3=0;

break;

case 4:

en0=1;en1=1;en2=1;en3=1;

break;

}
void display_7seg(unsigned short dat) // ham tinh gia tri nhiet do

unsigned int tram=0,chuc =0 ,dvi=0;

dvi = dat%10;

chuc=(dat/10)%10;

tram = (dat/100);

Control_7seg(4);

Control_7seg(2);

P0=font[dvi];

delay_us(80);

Control_7seg(4);

Control_7seg(1);

P0=font[chuc];

delay_us(80);

Control_7seg(4);

Control_7seg(0);

P0=font[tram];

delay_us(80);

Control_7seg(4);

Control_7seg(3);

P0=0xC6;

delay_us(80);

//Control_7seg(4);

void adc0808Init(void) // ham khoi tao ADC


{ // lap trinh phan cung ADC

EOC=1;

ALE=0;

OE=0;

START=0;

TMOD=0x02;

TH0=0xFD;

IE=0x82;

TR0=1;

unsigned char adc0808_read_adc(void)// doc gia tri ADC(lay tin hieu tu ADC vao 8051)

unsigned char rdata=0;

rdata=0;

ALE=1;

START=1;

delay_us(1);

ALE=0;

START=0;

while(EOC==1);

while(EOC==0);

OE=1;

rdata=ADC_DATA;
delay_us(1);

OE=0;

return rdata;

unsigned char adc0808_read_on_channel(unsigned char channel)

unsigned char sdata=0;

switch(channel)

case 0:

SEL_C=0;

SEL_B=0;

SEL_A=0;

sdata = adc0808_read_adc();

sdata = (unsigned char )(1.95 * sdata);

break;

case 1:

SEL_C=0;

SEL_B=0;

SEL_A=1;

sdata = adc0808_read_adc();

break;

case 2:

SEL_C=0;

SEL_B=1;
SEL_A=0;

sdata = adc0808_read_adc();

break;

return sdata;

void main(void) // CT chinh

P0=0xff;

P1=0xff;

adc0808Init();

display_7seg(0);

while(1)

display_7seg(adc0808_read_on_channel(0));

//delay_ms(100);

You might also like