Đồ án Đo nhiệt độ sử dụng on chip 89c51

Là loại cảm biến nhiệt có áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân. Vì vậy một mạch bù điểm zero của thang Kelvin không cần thiết. Hệ số tỉ lệ tuyến tính là 10mV/oC. Sai số do không tuyến tính là 1.8mV cho toàn thang. Tầm nhiệt độ hoạt động: LM35, LM35A : -55°C 150°C LM35C, LM35CA -40°C - 110°C LM35D 0°C + 100°C

doc21 trang | Chia sẻ: lvcdongnoi | Ngày: 15/06/2013 | Lượt xem: 3345 | Lượt tải: 9download
Bạn đang xem nội dung tài liệu Đồ án Đo nhiệt độ sử dụng on chip 89c51, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
PHẦN I : MỤC ĐÍCH NGHIÊN CỨU VÀ LỰA CHỌN LINH KIỆN MỤC ĐÍCH NGHIÊN CỨU: ỨNG DỤNG CỦA : AT89C51 Thiết kế cảm biến nhiệt điện tử, báo giá trị nhiệt bằng số trên màm hình LCD cho người sử dụng biết. Thiết bị này có thể cảnh báo được khi nhiệt độ vượt quá giới hạn trên hay giới hạn dưới để người sử dụng biết. LÍ DO CHỌN LINH KIỆN: AT89C51: Đây là ứng dụng không quá phước tạp. Tốc độ thược hiện lệnh không đòi hỏi nhanh. Vi điều khiển này có bộ nhớ kiểu EPROM. Công suất tổn hao năng lượng thấp. ADC0804: Do chúng ta chỉ sử dụng một kênh nhiệt độ đầu vào. Tốc độ biến thiên của nhiệt độ đầu vào là không nhanh nên tốc độ xử lý của ADC không yêu cầu nhanh. ADC0804 có giá thành rẻ và dễ sử dụng và điều khiển. LCD LM016L : Ghép nối với hệ vi xử lý không quá phức tạp. Dễ quan sát kết quả. Có thể hiện thị chữ và số. Có thể hiện thị được nhiều kí tự cùng một lúc. Không cồng kềnh và chiếm nhiều diện tích như các thiết bị cùng hiển thị khác. Có thể điều chỉnh được mức độ nét của màn hình. Cảm biến LM35 : Có điện áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân. Không cần mạch bù điểm 0 của thang Kelvin. Sai số toàn thang nhỏ 1.8mV. PHẦN I I : GIỚI THIỆU CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH ADC 0804: Sơ đồ chân: Sơ đồ chân của ADC0804 DB0 -DB7: 8 chân lối ra dữ liệu. RD :lối vào đọc. WR : lối vào ghi. INTR : lối ra ngắt. CLKR/CLK IN: lối vào điều khiển xung nhịp. VIN + : lối vào analog dương. ADC 0804 Chức năng các chân chính của ADC0804: DB0 – BD7: Là lối ra số, dữ liệu đã chuyển đổi xuất hiện trên 8 cổng ra này. Bộ biến đổi 8 bít có 256 khả năng kết hợp (từ 0 tới 256) các mẫu bít lối ra. Với dòng áp toàn dãi là +5V, bộ biến đổi có độ phân giải là 5/256 = 19.53 mV. RD :Là chân điều khiển đọc dữ liệu và khi RD ở mức thấp (logic 0) dữ liệu xuất hiện trên 8 chân lối ra . Khi đầu ra ở mức cao dữ liệu không tồn tại ở đầu ra. WR : Lối vào WR bình thường ở mức logic cao và lối vào này sec được kéo xuống mức logic thấp ,sau đó lại trở lại mức logic cao để bắt đầu quá trình biến đổi. INTR : Là lối ra ngắt của bộ biến đổi ADC . Một sườn xung sau ( từ mức cao xuống mức thấp ) được tạo ra trên chân này khi quá trình chuyển đổi kết thúc .Lối này thường được sử dụng để tạo ra một ngắt trong vi điều khiển sao cho dữ liệu đã được chuyển đổi có thể được đọc. ADC0804 chứa một bộ tạo dao động bên trong và cần có một tụ điện và điện trở bên ngoài nối với chân CKLR và CKL IN để khởi động bộ dao động. VIN +: Là chân lối vào của điện áp tương tự. VREF\2: chân điện áp tham chiếu xác định độ phân giải, dải đầu vào của ADC Quan hÖ ®iÖn ¸p Vref/2 víi Vin Vref/ 2(V) Vin(V) KÝch th−íc b−íc (mV) Hë * 0 ®Õn 5 5/256 = 19.53 2.0 0 ®Õn 4 4/255 = 15.62 1.5 0 ®Õn 3 3/256 = 11.71 1.28 0 ®Õn 2.56 2.56/256 = 10 1.0 0 ®Õn 2 2/256 = 7.81 0.5 0 ®Õn 1 1/256 = 3.90 Hoạt động của ADC trong qua trình biến đổi Đặt WR và RD lên mức cao. Bắt đầu quá trình biến đổi bằng cách đặt WR xuống mức thấp. Đặt WR trở về mức cao. Phát hiện điểm kết thúc của quá trình biến đổi khi INTR xuống mức thấp. Đặt RD xuống mức thấp và đọc dữ liệu từ DB0 –DB7. Đặt RD lên mức cao. ( Quá trình trên sẽ được lặp lại nhiều lần khi cần nhiều quá trình biến đổi) VI ĐIỀU KHIỂN AT8951 : Port 0 : Có 2 chức năng ở các chân 32-39. Thiết kế bộ nhớ nhỏ là chân I/O, thiết kế bộ nhớ lớn nó được kết hợp bus địa chỉ và bus dữ liệu. Port 1: Có chức năng là Port I/O ở các chân P1.0 đến P1.7. Port 3 :Có các chân P3.0 đến P3.7, là port có tác dụng kép và là port có nhiều chức năng đặc biết trong vi xử lý. bit tên Chức năng chuyển đổi P3.0 RXD Ngõ vào dữ liệu nối tiếp P3.1 TXD Ngõ xuất dữ l ệu nối tiếp P3.2 INT0\ Ngõ vào ngắt cứng thứ 0 P3.3 INT1\ Ngõ vào ngắt cứng thứ 1 P3.4 T0 Ngõ vào T/C thứ 0 P3.5 T1 Ngõ vào T/C thứ 1 P3.6 WR\ Tín hiệu ghi dữ liệu lên bộ nhớ ngoài P3.7 RD\ Tín hiệu đọc bộ nhớ dữ liệu ngoài AT 89C51 LCD LM016L 20x2 Sơ đồ chân : D0 –D7 : Chân vào ra dữ liệu. E :chân cho /không cho giao tiếp với LCD. RS :Chân qui định dữ liệu/lệnh gửi tới LCD. RW : Chân qui định hướng truyền dữ liệu giữa LCD và vi điều khiển. Nguyên lý hoạt động : Đường E cho phép hay không việc giao tiếp với LCD. Nếu E=1 cho phép, sau đó kiểm tra trạng thái chân RS và RW. Nếu E=0 cấm. E khởi tạo quá trình truyền dữ liệu từ vi điều khiển tới LCD. Đường RS qui định dữ liệu/ lệnh được gửi tới LCD. RS=1 Dữ liệu (kí tự) đang được viết lên LCD. RS=0 Lệnh đang được viết lên LCD. Đường RW - Qui định hướng truyền dữ liệu giữa LCD và VĐK. Nếu RW=0 VĐK viết dữ liệu lên LCD. RW=1 vi điều khiển đọc dữ liệu từ LCD. Chân D0 - D7: Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD ,hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1. Một số lệnh của LCD: Mã (Hex) Lệnh đến thanh ghi của LC 1 Xoá màn hình hiển thị 2 Trở về đầu dòng 4 Giảm con trỏ 6 Tăng con trỏ 5 Dịch hiển thị sang phải 7 Dịch hiển thị sang trái 8 Tắt con trỏ, tắt hiển thị A Tắt hiển thị, bật con trỏ C Bật hiển thị, tắt con trỏ E Bật hiển thị, nhấp nháy con trỏ F Tắt con trỏ, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phả 80 ép con trỏ về đầu dòng thứ nhất C0 ép con trỏ về đầu dòng thứ hai 38 Hai dòng và ma trận 5 × 7 Quá trình điều khiển LCD: Bước 1 : Khởi tạo cho LCD. Bước 2 : Gán các giá trị cho các bit điều khiển các chân RS,RW,E cho phù hợp với các chế độ : Hiển thị kí tự lên LCD hay thực hiện 1 lệnh của LCD. Bước 3: Xuất 1 byte dữ liệu ra cổng điều khiển 8 bit dữ liệu của LCD. Bước 4: delay. Bước 5: Quay vòng lại bước 1. Cảm biến nhiệt LM35 LM35 : Precision Centigrade Temperature Sensors Là loại cảm biến nhiệt có áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân. Vì vậy một mạch bù điểm zero của thang Kelvin không cần thiết. Hệ số tỉ lệ tuyến tính là 10mV/oC. Sai số do không tuyến tính là 1.8mV cho toàn thang. Tầm nhiệt độ hoạt động: LM35, LM35A : -55°C 150°C LM35C, LM35CA -40°C - 110°C LM35D 0°C + 100°C PHẦN III : THIẾT KẾ Phần cứng HIỂN THỊ ( LCD) Sơ đồ khối của mạch: VI XỬ LÍ (AT89C51) CONVERTER (ADC 0804) CẢM BIẾN (LM35) CẢNH BÁO (ĐÈN LED) Sơ đồ mạch chi tiết : Phần mềm: Lưu đồ thuật toán : START Khởi tạo giá trị ban đầu Bắt đầu chuyển đổi (/WR=0 /WR=1) /INTR=0 Sai Đúng RD=0 Hiển thị ra LCD Kiểm tra P1≤100 Cảnh báo Sai Đúng END RD=1 Chương trình: Chương trình điều khiển LCD: #define RS P3_0 // Chan dieu khien LCD #define RW P3_1 // Chan doc/ghi LCD #define E P3_2 // Chan bat/tat LCD char i,j,k,m,n; /*************** Ham tao tre *****************/ void delay(int i) { while(i--); } /************ Ham lenh cho LCD hien thi ***************/ void LCDwrite(char a) { RS=1; RW=0; P2=a; E=1; E=0; } /********* Ham dieu khien LCD thuc hien 1 lenh *********/ void LCDcontrol(char a) { RS=0; RW=0; P2=a; E=1; E=0; } Chương trình điều khiển quá trình chuyển đổi: #define RD P3_5 #define WR P3_6 #define INTR P3_7 while(1) { WR=0; WR=1; while(INTR); RD=0; RD=1; } Chương trình kiểm tra điều kiện nhiệt độ: if (P1>CB) // Neu nhiet do cao hon CB { n++; if(n==2) n=0; P3_3=1; // Nhap nhay den LED delay(10000); P3_3=0; } else P3_3=0; Chương trình phần mềm cho hệ thống cảm biến nhiệt: /*========== Bài tập lớn môn học KT Vi xử lý ===============*/ // Chương trình đo , cảnh báo nhiệt độ sử dụng AT89C51 // Học viên thực hiện : Đỗ Tiến Hướng // Hồ Văn Linh // Ngày thực hiện : 22/5/2010 // Linh kiện : AT89C51 - ADC0804 - LM016L - LM35 /*===================================================*/ #include "AT89X51.h" #include "string.h" // Thư viện xử lý chuỗi ký tự #define RD P3_5 // Chan doc ADC #define WR P3_6 // Chan ghi ADC #define INTR P3_7 // Chan ngat ADC #define RS P3_0 // Chan dieu khien LCD #define RW P3_1 // Chan doc/ghi LCD #define E P3_2 // Chan bat/tat LCD #define CB 100 // Nhiet do canh bao //========================================================= char line1 [] = " HE THONG DO NHIET DO SU DUNG AT89C51 HOC VIEN :$ DO TIEN HUONG &$ HO VAN LINH "; char line2 [] = " NHIET DO : \337C"; char i,j,k,m,n; /********************* Ham tao tre **************************/ void delay(int i) { while(i--); } /************** Ham lenh cho LCD hien thi **********************/ void LCDwrite(char a) { RS=1; RW=0; P2=a; E=1; E=0; } /************* Ham dieu khien LCD thuc hien 1 lenh **************/ void LCDcontrol(char a) { RS=0; RW=0; P2=a; E=1; E=0; } /*************** Chuong trinh chinh *********************/ void main() { LCDcontrol(0x38); delay(40); // LCD 2 dong 5x7 LCDcontrol(0x0C); delay(40); // Bat hien thi , tat con tro j=0; k=0; m=0; n=0; while(1) ; vong lap vo han { k++; if(k==3) { j++; k=0; } if(j==strlen(line1)) j=0; i=0; LCDcontrol(0x80); delay(40); // Dua con tro ve dau dong 1 /*************** Hien thi dong 1 LCD ***************/ while(i!=20) // Hien thi 20 ky tu { if ((line1[(i+j)%strlen(line1)]=='$')&&(i==0)) { m++; if (m!=15) { k--; } else m=0; } if(line1[(i+j)%strlen(line1)]!='$') // Khong hien thi ky tu '$' { LCDwrite(line1[(i+j)%strlen(line1)]); delay(40); } else { LCDwrite(' '); delay(40); // Thay the '$' bang ' ' } i++; } /************ Hien thi dong 2 LCD ******************/ LCDcontrol(0xC0); delay(40); // Dua con tro ve dau dong 2 i=0; while(line2[i]) { LCDwrite(line2[i]); delay(40); i++; } LCDcontrol(0x10); delay(40); // Dich con tro sang trai 2 o hien thi LCDcontrol(0x10); delay(40); P1=0xff; /************ Hien thi so chi nhiet do **************/ if(n!=1) // Neu co canh bao , nhap nhay so chi nhiet do tren LCD { WR=0; WR=1; while(INTR); // Cho den khi ADC bien doi xong RD=0; // cho phep dau ra ADC LCDcontrol(0x10); delay(40); // Dich con tro sang trai 3 o hien thi LCDcontrol(0x10); delay(40); LCDcontrol(0x10); delay(40); // Tinh toan , chuyen thanh ma ASCII va hien thi nhiet do ra LCD LCDwrite(P1/100+48); delay(40); // Hien thi chu so hang tram LCDwrite((P1%100)/10+48); delay(40);//Hien thi chu so hang chuc LCDwrite(P1%10+48);delay(40); // Hien thi chu so hang don vi RD=1; } /******** Canh bao ***********/ if (P1>CB) // Neu nhiet do cao hon CB { n++; if(n==2) n=0; P3_3=1; // Nhap nhay den LED delay(10000); P3_3=0; } else P3_3=0; } } Chương trình mã nguồn ASM : ;================= Bai tap lon mon hoc VXL ====================== ; Ung dung 80C51 vao mach do nhiet do dung ngon ngu ASM ; Nguoi thuc hien : Đỗ Tiến Hướng ; Hồ Văn Linh ; Ngay thuc hien : 21/6/2010 ;================================================================ RS EQU P3.0 RW EQU P3.1 E EQU P3.2 RD1 EQU P3.5 ; tich cuc thap - Chan cho phep dau ra ADC WR1 EQU P3.6 ; tich cuc thap - Bat dau viec chuyen doi INTR EQU P3.7 ; tich cuc thap - Ket thuc viec chuyen doi LED EQU P3.3 MAX EQU 100 ;============================================================== ORG 00H JMP MAIN ;==================== ORG 50H LINE1 : DB ' ',' ','C','H','U','O','N','G',' ','T','R','I','N','H',' ','D','O',' ','N','H','I','E','T',' ','D','O',' ',' ',' ','D','O',' ','T','I','E','N',' ','H','U','O','N','G',' ','&',' ','H','O',' ','V','A','N',' ','L','I','N','H',' ',' ',' ',' ' LINE2 : DB ' ',' ','N','H','I','E','T',' ','D','O',' ',':',' ',' ',' ',' ',' ',' ','C',' ' ;=============================================================== ORG 100H MAIN : CLR LED ; khoi tao gia tri ban dau LCD MOV A,#38H ; ma tran LED 2 dong 5x7 CALL LCDC CALL TRE MOV A,#0CH ; bat hien thi, tat con tro hien thi CALL LCDC CALL TRE ;======================== MOV R6,#0 MOV R7,#0 MOV R5,#1 LAP_MAIN : CALL TACGIA ; hien thi dong 1 LCD INC R6 CJNE R6,#60,HTADC MOV R6,#0 HTADC : ; hien thi dong 2 LCD CALL ADC JMP LAP_MAIN ;=============================================================== NHAY : ; nhap nhay so chi nhiet do MOV R4,#255 DKR5 : DJNZ R4,DKR5 INC R5 CJNE R5,#2,ENDN MOV R5,#0 ENDN : CPL LED RET ;=============================================================== TACGIA : ; hien thi dong chu chay MOV A,#80H ; dua con tro hien thi ve dau dong 1 CALL LCDC CALL TRE MOV DPTR,#LINE1 TG : MOV A,R6 ADD A,R7 MOV B,#60 DIV AB MOV A,B MOVC A,@A+DPTR CALL LCDW CALL TRE INC R7 CJNE R7,#20,TG MOV R7,#0 RET ;=============================================================== ADC : MOV P1,#0FFH SETB INTR CLR WR1 ; bat dau chuyen doi SETB WR1 LAP_INTR : ; Cho den khi ADC bien doi xong JNB INTR,HT JMP LAP_INTR ;========================= HT : CLR RD1 MOV DPTR,#LINE2 MOV A,#0C0H ; dua con tro ve dau dong thu 2 CALL LCDC CALL TRE MOV R1,#0 HT_LINE2 : ; hien thi chuoi LINE2 MOV A,R1 MOVC A,@A+DPTR CALL LCDW CALL TRE INC R1 CJNE R1,#14,HT_LINE2 MOV R1,#0 ;================== CJNE R5,#1,QUA ; Neu R5 khac 1 thi bo qua ko hien thi nhiet do MOV A,P1 ; Doc gia tri nhiet do vao A MOV B,#100 DIV AB ADD A,#48 ; Cong A voi 48 chuyen thanh ma ASCII CALL LCDW CALL TRE MOV A,B MOV B,#10 DIV AB ADD A,#48 CALL LCDW CALL TRE MOV A,B ADD A,#48 CALL LCDW CALL TRE MOV A,#"C" CALL LCDW CALL TRE JMP KTLED QUA : ; hien thi 3 dau cach thay cho so chi nhiet do MOV A,#" " CALL LCDW CALL TRE MOV A,#" " CALL LCDW CALL TRE MOV A,#" " CALL LCDW CALL TRE MOV A,#"C" CALL LCDW CALL TRE ;================== KTLED : ; kiem tra dieu kien nhiet do MOV A,P1 CJNE A,#MAX,KT ; so sanh A voi gia tri MAX CLR LED JMP END_ADC KT : JC NHO ; neu CF=1 tuc la A<MAX CALL NHAY JMP END_ADC NHO : MOV R5,#1 CLR LED END_ADC : SETB RD1 ; ket thuc hien thi RET ;=============================================================== LCDW : ; gui du lieu ra LCD SETB RS CLR RW MOV P2,A SETB E CLR E RET LCDC : ; gui lenh ra LCD CLR RS CLR RW MOV P2,A SETB E CLR E RET TRE : ; tao thoi gian tre MOV R2,#50 TRE1: MOV R3,#100 TRE2: DJNZ R3,TRE2 DJNZ R2,TRE1 RET ;=============================================================== END

Các file đính kèm theo tài liệu này:

  • docthuyet trinh.doc
Luận văn liên quan