Professional Documents
Culture Documents
-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
- Ứ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ị
- Đ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ố
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
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.
- 4 băng thanh ghi chuyển đổi nhanh, mỗi băng 8 thanh ghi.
-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
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ở.
LM35 là cảm biến nhiệt độ bán dẫn thông dụng của hãng National Semiconductor .
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;
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.
//#include "delay.c"
#define OE P2_6
#define ADC_DATA P3
while(us_count!=0)
us_count--;
}
for(j=0;j<=time;j++)
sbit en0=P1^0;
sbit en1=P1^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;
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
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);
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)
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;
switch(channel)
case 0:
SEL_C=0;
SEL_B=0;
SEL_A=0;
sdata = adc0808_read_adc();
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;
P0=0xff;
P1=0xff;
adc0808Init();
display_7seg(0);
while(1)
display_7seg(adc0808_read_on_channel(0));
//delay_ms(100);