Tải bản đầy đủ (.pdf) (30 trang)

Thiết kế mạch đo nhiệt độ, độ ẩm có giao tiếp với máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 30 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN

ĐỒ ÁN 1
Đề tài : Thiết kế mạch đo nhiệt độ, độ ẩm có giao tiếp với máy tính
Giáo viên hướng dẫn

:

Nhóm sinh viên thực hiện :

1


Mục lục
MỤC LỤC
DANH MỤC HÌNH VẼ
DANH MỤC BẢNG
 Chương 1. Giới thiệu chung
Giới thiệu chung về sơ đồ các khối trong mạch và các linh kiện được sử dụng
trong mạch.
 Chương 2.Chức năng cảu các khổi
I/ Khối cảm biến nhiệt độ LM35
II/ Khối cảm biến độ ẩm HS1101
III/ Bộ chuyển đổi ADC 0804
IV/ Khối vi điều khiển 8051
 Chương 3. Mạch nguyên lý và thi công
I/ Mcahj nguyên lý
II/ Giải thuật chương trình
III/Thi công
PHỤ LỤC


DANH MỤC HÌNH VẼ
HÌnh 1. . Sơ đồ khối của mạch đo nhiệt độ và độ ẩm có giao tiếp với máy tính
Hình 2. Sơ đồ chân của LM35
Hình 3. Cách mắc cảm biến HS1101 với IC 555
Hình 4.
Hình 5.
Hình 6
Hình 7.

Sơ đồ chân của ADC 0804
Sơ đồ chân 8051 cùng cách mắc cơ bản ban đầu.
.Sơ đồ nguyên lý mạch
Thử nghiệm mạch đo ở điều kiện nhiệt độ phòng

Hình 8. Thử nghiệm mạch đo ở điều kiện tăng nhiệt độ cao ( dùng bật lửa )
Hình 9. Thử nghiệm mạch giao tiếp với máy tính ( hiển thị Nhiệt độ )
Hình 10. Thử nghiệm mạch giao tiếp với máy tính ( hiển thị Độ ẩm )
DANH MỤC BẢNG
2


Bảng 1. . Các giá trị của tần số thay đổi theo độ ẩm
Bảng 2. Bảng liệt kê các chân ADC 0804 cùng các công dụng đã sử dụng

Lời mở đầu
Trong ứng dụng hàng ngày, nhu cầu theo dõi nhiệt độ và độ ẩm ngày
càng trở nên phổ biến và thiết thực và sử dụng trong: Sản xuất chế biến nông
nghiệp Hiển thị và thực thi điều khiển (quạt gió, máy sấy, điều hòa, hay báo động)
Datalog dữ liệu về môi trường tại một khu vực Theo dõi môi trường, chế độ làm
việc của một số các dây chuyền, thiết bị có yêu cầu cao.Khái niệm về đo nhiệt độ

và độ ẩm đã có từ rất lâu, trong tất cả các đại lượng vật lý thì nhiệt độ và độ ẩm
được quan tâm nhiều nhất. Nhiệt độ và độ ẩm là yếu tố ảnh hưởng trực tiếp đến
tính chất của vật chất và môi trường sống. Trong công nghiệp sản
xuất và trong lĩnh vực đo lường điều khiển, quá trình đo và xử lí nhiệt độ, độ ẩm
giữ một vai trò quan trọng.
Trong các thiết bị đó có các thiết bị đòi hỏi về cảm biến đo và điều chỉnh
nhiệt độ, độ ẩm của không khí như điều hòa, chuống báo cháy, lò vi sóng… Do đó
ta có thể thấy tầm quan trọng và tính thực tế của việc đo và điều chỉnh nhiệt độ và
độ ẩm trong các thiết bị tự động hóa cũng như trong đời sống hàng ngày. Ở đồ án
này, chúng em nhận được đề tài thiết kế “Mạch đo nhiệt độ và độ ẩm cho môi
trường, dùng cảm biến LM35 để đo nhiệt độ và HS1101 để đo độ ẩm, giao tiếp với
máy tính qua RS232 ”. Đây cũng là một trong những đề tài rất sát với thực tế,
mang tính ứng dụng thực tiễn cao. .
Trong đồ án chắc hẳn còn nhiều sai sót, chúng em rất mong nhận được
sự chỉ bảo, hướng dẫn của cô để đồ án hoàn thiện hơn.
Chúng em chân thành cảm ơn cô !

3


CHƯƠNG 1 . GIỚI THIỆU CHUNG
Ở đề tài này, nhóm em đã sử dụng :





Cảm biến đo nhiệt độ LM35, cảm biến đo độ ẩm HS1101
Bộ chuyển đổi tín hiệu tương tự sang số ADC0804
Vi điều khiển 89S52

Bộ tạo dao động NE555
 Bô giao tiếp với máy tính sử dụng RS232
 Bộ hiển thị số LCD LM032L
Sơ đồ khối :

Hình 1. Sơ đồ khối của mạch đo nhiệt độ và độ ẩm có giao tiếp với máy tính
 Khối cảm biến LM35 nhận nhiệt độ từ môi trường bên ngoài
chuyển thành mức điện áp DC tương ứng đưa vào bộ chuyển đổi
ADC0804.
 Khối cảm biến HS1101 nhận độ ẩm từ môi trường ngoài , thông
qua khối NE555 để tạo dao động giá trị điện dung của HS1101 hay chính là
độ ẩm của môi trường
4


 Khối vi điều khiển 89S52 nhận dữ liệu dạng số từ khối chuyển đổi
ADC0804 và từ NE555 và kèm theo tín hiệu điều khiển đến LCD để hiển
thị .
 Khối giao tiếp máy tính sử dụng RS232, nhận tín hiệu từ vi điều
khiển và giao tiếp với máy tính qua cổng COM.
CHƯƠNG 2, CHỨC NĂNG CÁC KHỐI
I/ Khối cảm biến nhiệt độ LM35
 Nguyên lý hoạt động chung của IC cảm biến nhiệt:
 IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển
thành tín hiêu điện dưới dạng dòng điện hay điện áp . Dựa vào đặc
tính rất nhạy của các bán dẫn với nhiệt độ, tạo ra điện áp hay dòng
điện , tỉ lệ tuyến tính với nhiệt độ môi trường. Đo tín hiệu điện ta biết
được giá trị của nhiệt độ cần đo.
 Có rất nhiều loại IC cảm biến nhiệt , nhưng được sử dụng thông dụng
nhờ rẻ tiền và dễ kiếm là LM35.



LM35 có độ biến thiên theo nhiệt độ là 10mV/1
1,5

C . Sai số lớn nhất là

C khi nhiệt độ lớn hơn 100 C

Hình 2.Sơ đồ chân của LM35
 Phạm vi sử dụng -55 C -150 C
 Tín hiệu đầu ra tuyến tính liên tục với những thay đổi của đầu vào
 Giới hạn trong đồ án của nhóm em là nhiệt độ phòng từ 2

C -150 C
5


 Tính toán nhiệt dộ đầu ra của LM35 :
Ở đây, việc đo nhiệt độ ta sử dụng cách LM35  ADC0804 
89S52. Do đó ta có
U=t.k với U là điện áp đầu ra Vout
t là nhiệt độ môi trường cần đo
k là hệ số theo nhiệt độ (10mV/1 C )
Điện áp cấp cho LM35 là 5V , ADC 8bit , vậy bước thay đổi của
LM35 sẽ là

5
5


. Giá trị ADC đo được thì điện áp đầu vào của
8
2
256

t.k
LM35 là

5
256

2
 10 .256.t

5

 0.512t

Vậy nhiệt độ ta đo được t=giá trị ADC/0.512=1.95.ADC
II/ Khối cảm biến độ ẩm HS1101
HS1101 là loại cảm biến đo độ ẩm. Độ chính xác  2%. Dải nhiệt độ hoạt
động từ -400  1000 C . Cảm biến này được dùng phổ biến trong đời sống ,
ngoài ra thường kết hợp với cảm biến LM35 để đo nhiệt độ.


HS1101 cơ bản là một tụ có điện dung biến thiên theo độ ẩm, giá trị điện
dung sẽ thay đổi khi độ ẩm thay đổi . Nguyên lý mạch là tạo ra dao động
và tần số thay đổi tương ứng theo giá trị điện dung hay chính là độ ẩm của
môi trường .. Do vậy, để đo được độ ẩm ta sẽ phải thiết kế mạch đo điện
dung của HS1101. Trong thực tế người ta thường ghép nối HS1101 với IC

NE555 (theo datasheet của nhà sản xuất). Khi đó giá trị điện dung của
HS1101 thay đổi thì làm thay đổi tần số đầu ra của IC 555. Như vậy chỉ
cần đo tần số đầu ra là có thể đo được điện dung của HS1101 hay độ ẩm
của môi trường .

6




Sau đây là cách mắc HS1101 với NE555

Hình 3. Cách mắc cảm biến Hs1101 với IC 555
 Cách thức tính độ ẩm :
Giá trị điện dung của HS1101 thay đổi thì làm thay đổi tần số đầu ra của
IC555 (Fout), bây giờ chỉ cần tần số tại đầu ra của IC555 để tìm ra độ ẩm
hiện tại
 Ta có công thức tính tần số như sau :

F

1
1

thigh  tlow (C @ % RH *( R4  2* R 2)*ln 2)
Trong đó

F

là tần số


là điện dung theo độ ẩm
C @ % RH
 Ta có công thức liên hệ giữa độ ẩm và điện dung
7
3
5
2
3
1
 C ( pF )  C @55%*(1.25*10 RH 1.36*10 RH  2.19*10 RH  9.0*10 )
trong đó C(pF) là điện dung đo được
C@55%~180pF
Từ 2 công thức trên ta có được mối liên hệ giữa độ ẩm và tần số
Giá trị điện trở
R2
R4
576.000
49.900

C@55%
180pF
7


Độ ẩm (RH)
Tần số (F)
0
7.410
1

7.392
2
7.374
3
7.357
4
7.340
………………………………………………………….
………………………………………………………….
94
6.121
95
6.104
96
6.087
97
6.070
98
6.053
99
6.036
100
6.019
Bảng 1. Các giá trị của tần số thay đổi theo độ ẩm

III/ Bộ chuyển đổi ADC0804
 Để kết nối giữa nguồn tín hiệu tương tự với các hệ thống xử lý số
người ta dùng các mạch chuyển đổi tương tự sang số(ADC) nhằm
biến đổi tín hiệu tương tự sang số
 Chuyển đổi ADC có rất nhiều phương pháp, song mỗi phương

pháp đều có các thông số cơ bản :
 Độ chính xác của bộ chuyển đổi
 Tốc độ chuyển đổi
 Dải biến đổi của tín hiệu tương tự đầu vào
 Các thông số của ADC0804
 Chip này có điện áp Vcc là +5V và độ phân giải 8 bit
 Thời gian chuyển dổi phụ thuộc vào tần số đồng hồ được cấp
tới chân CLK và CLK IN và không bé hơn 110  s
 Chức năng các chân

8


Hình 4.Sơ đồ chân của ADC 0804
STT
1

Chân
CS(chip set)

2

RD(read)

3

WR (write)

4 , 19


CLK IN(4)
CLK R (19)

Chức năng
Chân chọn chip. Đầu vào tích cực mức
thấp để kích hoạt ADC0804, để truy cập
thì chân này cũng phải mức thấp.
Chân nhận tín hiệu vào tích cực ở mức
thấp.Các bộ chuyển đổi của 0804 sẽ
chuyển đổi đầu vào tương tự thành số
nhị phân và giữ nó ở một thanh ghi
trong . Chân RD được dử dụng để cho
phép đưa tín hiệu đã được chuyển đổi
tới đầu ra của 0804. Khi CS=0 nếu có 1
xung cao xuống thấp đến chân RD thì
dữ liệu ra dạng 8 bit được đưa tới chân
dữ liệu (DB0-DB7)
Chân vào tích cực mức thấp , được dùng
báo cho ADC biết để bắt đầu quá trình
chuyển đổi. Nếu CS=0 khi WR tạo ra
xung cao xuống thấp thì ADC bắt đầu
quá trình chuyển đổi giá trị đầu vào
tương tự Vin thành số nhị phân 8 bit .
Khi việc chuyển đổi hoàn tất thì chân
INTR được đưa xuống mức thấp.
là chân vào nối tới đồng hồ ngoài được
sử dụng để tạo thời gian. Tuy nhiên
ADC0804 cũng có một bộ tạo xung
đồng hồ riêng. Để dùng đồng hồ riêng
9



thì các chân CLK IN và CLK R (chân
số 19) được nối với một tụ điện và một
điện trở.
5
INTR
Chân ngắt tích cực mức thấp . Bình
thường chân này ở trạng thái cao và khi
việc chuyển đổi tương tự số hoàn tất thì
nó chuyển xuống mức thấp để báo cho
CPU biết là dữ liệu chuyển đổi sẵn sàng
để lấy đi. Sau khi INTR xuống thấp, cần
đặt CS = 0 và gửi một xung cao xuống
thấp tới chân RD để đưa dữ liệu ra.
6,7
Vin + (6)
Đây là 2 đầu vào tương tự vi sai, trong
Vin - (7)
đó Vin = Vin(+) – Vin(-). Thông thường
Vin(-) được nối tới đất và Vin(+) được
dùng làm đầu vào tương tự và sẽ được
chuyển đổi về dạng số.
9
Vref/2
Chân điện áp đầu vào được dùng làm
điện áp tham chiếu. Nếu chân này hở thì
điện áp đầu vào tương tự cho ADC0804
nằm trong dải 0 đến +5V. Tuy nhiên, có
nhiều ứng dụng mà đầu vào tương tự áp

đến Vin khác với dải 0 đến +5V. Chân
Vref/2 được dùng để thực hiện các điện
áp đầu ra khác 0 đến +5V.
20
Vcc
Chân nguồn nuôi +5V. Chân này còn
được dùng làm điện áp tham chiếu khi
đầu vào Vref/2 để hở.
11-18 D7-D0
Các chân ra dữ liệu số (D7 là bit cao
nhất MSB và D0 là bit thấp nhất LSB).
Các chân này đượ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 RD
đưa xuống mức thấp. Để tính điện áp
đầu ra ta tính theo công thức sau:
Dout = Vin / Kích thước bước.
Kích thước bước=Vin/256
Bảng 2. Bảng liệt kê các chân ADC 0804 cùng các công dụng đã sử
dụng
IV/ Khối vi điều khiển 8051


Sơ đồ chân

10


Hình 5. Sơ đồ chân 8051 cùng cách mắc cơ bản ban đầu.
 Chức năng các chân

 Các Port :
 Port 0: là port có 2 chức năng ở các chân 32 – 39 của 89S52.
Trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có
chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ
nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu
 Port 1: là port IO trên các chân 1-8. Các chân được ký hiệu
P1.0, P1.1, P1.2, … có thể dùng cho giao tiếp với các thiết bị
ngoài nếu cần. Port 1 không có chức năng khác, vì vậy chúng
chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.
 Port 2: là 1 port có tác dụng kép trên các chân 21 - 28 được
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ
đối với các thiết bị dùng bộ nhớ mở rộng
 Port 3: là port có tác dụng kép trên các chân 10 - 17. Các chân
của port này có nhiều chức năng, các công dụng chuyển đổi có
liên hệ với các đặc tính đặc biệt của 89S52 như ở bảng sau:
 Các ngõ tín hiệu điều khiển
 Ngõ tín hiệu PSEN (Program store enable):
- PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép
đọc bộ nhớ chương trình mở rộng thường được nói đến chân
11











0E\ (output enable) của Eprom cho phép đọc các byte mã
lệnh.
- PSEN ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã
lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và
được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã
lệnh. Khi 89S52 thi hành chương trình trong ROM nội
PSEN sẽ ở mức logic 1.
Ngõ tín hiệu điều khiển ALE (Address Latch Enable ) :
- Khi 89S52 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là
bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và
địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều
khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối
chúng với IC chốt.
- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian
port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự
động. Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao
động trên chip và có thể được dùng làm tín hiệu clock cho các
phần khác của hệ thống. Chân ALE được dùng làm ngõ vào
xung lập trình cho Eprom trong 89S52.
Ngõ tín hiệu EA\(External Access):
- Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc
mức 0. Nếu ở mức 1, 89S52 thi hành chương trình từ ROM nội
trong khoảng địa chỉ thấp 8 Kbyte. Nếu ở mức 0, 89S52 sẽ thi
hành chương trình từ bộ nhớ mở rộng. Chân EA\ được lấy làm
chân cấp nguồn 21V khi lập trình cho Eprom trong 89S52.
Ngõ tín hiệu RST (Reset) :
-Ngõ vào RST ở chân 9 là ngõ vào Reset của 89S52. Khi ngõ
vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh
ghi bên trong được nạp những giá trị thích hợp để khởi động hệ
thống. Khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:
- Bộ dao động được tích hợp bên trong 89S52, khi sử dụng
89S52 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ
như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho
89S52 là 12Mhz

12


CHƯƠNG 3. MẠCH NGUYÊN LÝ VÀ THI CÔNG
I/ Mạch nguyên lý

13


Hình 6.Sơ đồ nguyên lý mạch

14


II/ GIẢI THUẬT CHƯƠNG TRÌNH

Start

Khởi tạo cài đặt :
( Khởi tạo Uart ; LCD ; ngắt Timer )
Đo Nhiệt Độ

Đo Độ Ẩm


Truyền dữ liệu lên PC

Hiển Thị LCD

End

15


Đo Nhiệt Độ

Đo Độ Ẩm

Khởi động ADC

Đọc tần số f 0

Đọc giá trị ADC

i=0

i = i+1

Chuyển đổi giá trị ADC đọc
được

S
Xuất nhiệt độ ra LCD

f 0  f i 

Đ
Độ ẩm = i

Xuất độ ẩm ra LCD
Truyền dữ liệu lên PC

S

RI = 1
Đ

SBUF = ‘N’

Đ

S
S

SBUF = ‘D’

Đ
Xuất dữ liệu ra cổng UART

S
End

16


III/ THI CÔNG


Hình 7. Thử nghiệm mạch đo ở điều kiện nhiệt độ phòng

Hình 8. Thử nghiệm mạch đo ở điều kiện tăng nhiệt độ cao ( dùng bật lửa )

17


Hình 9. Thử nghiệm mạch giao tiếp với máy tính ( hiển thị Nhiệt độ )

Hình 10. Thử nghiệm mạch giao tiếp với máy tính ( hiển thị Độ ẩm )

18


Phụ Lục
Code chương trình :

#include"main.h"
#include<stdio.h>
#include"..\Lib\Delay.h"
// Khai bao ket noi voi LCD
sbit LCD_RS = P0^0;
sbit LCD_EN = P0^1;
#define LCD_DATA P2
// Khai bao ket noi ADC
#define ADC0804_DATA

P1


sbit ADC0804_CS = P3^3;
sbit ADC0804_RD = P3^4;
sbit ADC0804_WR = P3^5;
sbit ADC0804_INTR = P3^6;
/// Bien toan cuc
unsigned int tanso;
unsigned int xung,dem;
unsigned char doam;
// Ham gui lenh cho LCD
void Lcd_Cmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_DATA = cmd;
LCD_EN = 0;

19


LCD_EN = 1;
if(cmd<=0x02)
{
Delay_ms(2);
}
else
{
Delay_ms(1);
}

}
// Ham gui ki tu ra LCD

void Lcd_Chr_Cp( char c) // gui ki tu tai vi tri con tro
{
LCD_RS = 1;
LCD_DATA = c;
LCD_EN = 0;
LCD_EN = 1;
Delay_ms(1);
}
//Xuat ra man hinh LCD 1 ky tu, ngay tai vi tri dong row, cot col
void Lcd_Chr(unsigned char row, unsigned char col, char c)
{
unsigned char cmd;
// Di chuyen co tro den vi tri can thiet
cmd = (row==1?0x80:0xC0) + col - 1;
Lcd_Cmd(cmd);

20


// Xuat ky tu
Lcd_Chr_Cp(c);
}
// Xuat 1 chuoi ki tu ngay tai vi tri hien tai
void Lcd_Out_Cp(char *str)
{
unsigned char i = 0;
while(str[i]!=0)
{
Lcd_Chr_Cp(str[i]);
i++;

}
}
void Lcd_Out(unsigned char row, unsigned char col, char *str) // Di chuyen co
tro den vi tri can thiet
{

unsigned char cmd;
cmd = (row==1?0x80:0xC0) + col - 1;
Lcd_Cmd(cmd);

Lcd_Out_Cp(str);
}
void Lcd_Init()

// Khoi tao LCD

{
Lcd_Cmd(0x30);
Delay_ms(5);
Lcd_Cmd(0x30);
Delay_ms(1);
Lcd_Cmd(0x30);
21


Lcd_Cmd(0x38);

// So dong hien thi la 2, font 5x8

Lcd_Cmd(0x01);


// Xoa noi dung hien thi

Lcd_Cmd(0x0C);

// Bat hien thi va tat con tro

}
//========================================================
=========================================================
==

unsigned char ADC0804_Read()
{
unsigned char kq;
// Chon chip
ADC0804_CS = 0;
// Tao xung bat dau chuyen doi
ADC0804_WR = 0;
ADC0804_WR = 1;

// Doi cho den khi chuyen doi xong
while(ADC0804_INTR);
// Doc gia tri sau khi chuyen doi
ADC0804_RD = 0;
kq = ADC0804_DATA;
ADC0804_RD = 1;
return kq;
}
code unsigned int

f[100]={7410,7392,7374,7357,7340,7323,7307,7290,7274,7259,
7243,7228,7213,7198,7183,7169,7155,7140,7127,7113,
22


7099,7086,7072,7059,7046,7033,7020,7007,6995,6982,
6969,6957,6945,6932,6920,6908,6896,6884,6872,6860,
6848,6836,6824,6812,6800,6788,6776,6764,6752,6740,
6728,6716,6704,6692,6680,6668,6656,6643,6631,6619,
6606,6594,6581,6568,6556,6543,6530,6517,6504,6491,
6477,6464,6450,6437,6423,6409,6395,6381,6367,6352,
6338,6323,6309,6294,6279,6264,6248,6233,6217,6202,
6186,6170,6154,6137,6121,6104,6087,6053,6036,6019};
void ngat0(void) interrupt 0

// Ngat ngoai 0

{
xung++;
}
void ngat_timer_0(void) interrupt 1

// Ngat timer

{
dem++;
if(dem >= 3600)
{
dem=0;
tanso = xung;

xung=0;
}

23


}
unsigned int HS1101_GetHumi(unsigned int tanso)
{
unsigned int i;
for(i=0;i<101;i++)
{
if((tanso)>f[i]) return i;
}
return 100;
}
void Uart_Init()
{
// Khoi tao UART o mode 1, 9600 baud
SM0 = 0; SM1 = 1;

TMOD &= 0x0F;
dong nap lai

// Chon UART mode 1

// 0010 xxxx - Timer1 hoat dong o che do 8bit tu

TMOD |= 0x20;
TH1 = 0xFD;

TR1 = 1;
TI = 1;
REN = 1;

// Toc do baud 9600
// Timer1 bat dau chay
// San sang gui du lieu
// Cho phep nhan du lieu

}

void Uart_Write(char c)
{
while(TI == 0);
TI = 0;
24


SBUF = c;
}

void Uart_Write_Text(char * str)
{
unsigned char i = 0;
while(str[i]!=0)
{
Uart_Write(str[i]);
i++;
}
}

char Uart_Data_Ready()
{
return RI;
}

char Uart_Read()
{
RI = 0;
return SBUF;
}
void main(void)
{
unsigned char adc_value;
unsigned int t;
unsigned char *i;

25


×