LỜI NÓI ĐẦUKỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực khác nữa.. Mục
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
Lê Thị Nhung
Trang 2MỤC LỤC
Phần 1: Giới thiệu về vi điều khiển AT89S52……… 4
Phần 2: Thiết kế mạch……… 6
I.Thiết kế phần cứng……… 6
II.Thiết kế phần mềm……….8
Code của chương trình……… 9
Phần 3: Ứng dụng của mạch……… 21
Trang 3LỜI NÓI ĐẦU
Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực khác nữa So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do nó được tích hợp lại và
có khả năng lập trình được để điều khiển Nên rất tiện dụng và cơ động Với tính ưu việt của vi điều khiển thì trong phạm vi đồ án nhỏ này, em chỉ dùng vdk thiết kế đông hồ thời gian hiển thị lên LCD
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm những ứng dụng của vdk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng dụng khác trong đời sống hằng ngày cần đến
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót Vì vậy nhóm rất mong được sự góp ý của thầy cô và các bạn
Chúng em xin chân thành cảm ơn!
Nhóm sinh viên thực hiện: Nguyễn Xuân Tư
Lê Thị Nhung
Trang 4Phần 1: Giới thiệu về vi điều khiển AT89S52
AT89S52 là chíp được sản xuất bởi hãng Atmel kiểu DIP 40 chân Sau đây là sơ đồ chân của chíp:
AT89S52 gồm 4 port ,từ chân 32 đến chân 39 là port 0, từ chân 1 đến chân 8 là port 1, từ chân 21 đến chân 28 là port 2, và từ chân 10 đến chân 17 là port 3
Ngoài ra chíp còn 1 số chân khác như: PSEN,ALE,EA,RST,XTAL1,XTAL2,Vcc,GND.AT89S52 có 8 kbyte Flash ROM trên chip, khi chân EA được đặt ở mức logic cao vi điều khiển sẽ thực hiện chương trình trong bộ nhớ này bắt đầu từ địa chỉ 0000H
Khi EA được đặt ở mức logic thấp bộ vi điều khiển sẽ thực hiện chương trình ở bộ nhớ ngoài EPROM
AT89S52 có 256 byte RAM nội và được chia làm 4 bank
Trang 5Sau đây là sơ đồ cấu trúc bên trong của vi điều khiển 8051(8052):
Các hoạt động của AT89S52:
*Hoạt động định thời/đếm:
AT89S52 có 3 bộ định thời/đếm là timer0,timer1,timer2
Các thanh ghi của timer0 và timer1 gồm có:
Thanh ghi chế độ định thời TMOD dùng để đặt chế độ làm việc cho timer0 và timer1.Thanh ghi điều khiển timer TCON chứa các bit trạng thái và bit điều khiển cho timer0 và timer1
Thanh ghi chứa giá trị cửa các bộ định thời
Riêng timer2 thì có thanh ghi riêng là T2CON và T2MOD Timer2 ít dùng nên ở đây chỉ giới thiệu qua
*Hoạt động port nối tiếp :
AT89S52 có 1 cổng nối tiếp trên chip có thể hoạt động ở nhiều chế độ khác nhauvoiws các tốc độ khác nhau Chức năng chính của cổng nối tiếp là thực hiện chuyển đổi song song sang nối tiếp dữ liệu xuất và chuyển đổi nối tiếp sang song song với dữ liệu nhận để có thể giao tiếp với máy tính
Các thanh ghi của cổng nối tiếp là SBUF và SCON là 2 thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến cổng nối tiếp
Trang 6*Hoạt động của ngắt :
Trong thực tế người ta muốn tận dụng khả năng của CPU để làm thêm nhiều công việc khác nữa, chỉ khi nào có cần trao đổi dữ liệu mới cần yêu cầu CPU tạm dừng công việc hiện tại để phục vụ việc trao đổi dữ liệu Vì vậy 1 hệ thống sử dụng ngắt có thể đáp ứng nhanh các yêu cầu trao đổi dữ liệu trong khi vẫn có thể làm được các công việc khác
Tổ chức ngắt ở AT89S52 bao gồm:
- Ngắt ngoài đến từ chân INT0
- Ngắt ngoài đến từ chân INT1
- Ngắt do bộ timer0
- Ngắt do bộ timer1
- Ngắt do bộ timer2
- Ngắt do port nối tiếp
Sáu nguồn ngắt này được xóa khi reset và được đặt riêng bằng phần meemfboiwr các bit trong thanh ghi cho phép ngắt IE và thanh ghi ưu tiên ngắt IP
Phần 2: Thiết kế mạch
I.Thiết kế phần cứng:
Sơ đồ nguyên lý:
Trang 7Trong mạch sử dụng 1 chip AT89S52, 1 màn hình LCD, 4 nút nhấn tự phục hồi, 6 điện trở,
2 diod, 1 pin dự phòng, 6 điện trở, 3 tụ điện, và 1 thạch anh 12MHz
Các nút nấn SW1,SW2,SW3 được nối vào các chân 10, 11,12 của chíp để điều chỉnh tăng giảm
Sau đây là sơ đồ mạch in của mạch:
Trang 8
Phím tăng
có nhấn?
Phím giảm
có nhấn?
Giảm thông số đi
một đi vị
Gọi chương trình hiển thị
Tăng thông số lên
một đơn vị
Phím mode có nhấn không?
Nhấn lầnthứ nhất
Chỉnh ngày/tháng/năm
Chỉnh thứ
Trang 9Code của chương trình:
#include <reg52.h>
#include <intrins.h>
#include<stdio.h>
#include<string.h>
typedef unsigned char bit_8;
sbit nutchinh=P3^2; // khai bao nut chinh gio
sbit nutchinhtang=P3^1; // khai bao nut chon tang
sbit nutchinhgiam=P3^0;
bit_8 code *days[]={"Cnhat","T.hai","T.ba ","T.tu
","T.nam","T.sau","T.bay"}; // day mang ngay
bit_8 code *val[]={"0","1","2","3","4","5","6","7","8","9","10","11","12"};
#define DISABLE_INT IE=0x0; //cam toan bo
#define ENABLE_INT IE=0x81;//chon ngat ngoaitimer 0
Trang 10command(0xc3);
if(hh<=12){ if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}else{
command(0xcc);
data_in("am");
}else{
Trang 11data_in("pm");
}for(hmin=0;hmin<=5;hmin++){
command(0xc5);
data_in(":");
data_in(val[hmin]);
for(lmin=0;lmin<=9;lmin++){
command(0xc7);
data_in(val[lmin]);
for(hsec=0;hsec<=5;hsec++){
command(0xc8);
data_in(":");
data_in(val[hsec]);
for(lsec=0;lsec<=9;lsec++){
}}
if(hh==23&&lmin==0&&hmin==0){
day=day+1;
if(day==7)
day=0;
}}
hh=1;
date=date+1;
}month=month+1;
date=1;
if(month==13){
month=1;
lyear=lyear+1;
if(lyear==10){
lyear=0;
hyear=hyear+1;
}
Trang 12}
void ini()
{
command(0x38); //thiet dat font chu 5x7 ,che do 8 bit
command(0x0c); //bat hhien thi,tat con tro
command(0x01); //xoa man hinh
command(0x06); // tang con tro
Trang 15if(lyear==10){
lyear=0;
hyear++;
}command(0xca);
lyear ;
if(lyear==-1){
delay();
up1:while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0){
Trang 16up: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0){
command(0x80);
data_in("set time");
command(0xc4);
Trang 17if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}else{
data_in(val[hmin]);
data_in(val[lmin]);
command(0xca);
if(hh<12){
data_in("am");
}else{
data_in("pm");
}command(0xc5);
delay();
up3: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0){
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}else{
if(hh<12)
Trang 18data_in("am");
}else{
data_in("pm");
}command(0xc5);
delay();
goto up3;
}if(nutchinhgiam==0){
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}else{
if(hh<12){
data_in("am");
}else{
data_in("pm");
}command(0xc5);
delay();
goto up3;
}command(0xc8);
delay();
up4: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0){
lmin++;
Trang 19lmin ;
if(lmin==-1){
Trang 20data_in("am");
}else{
data_in("pm");
}command(0xc3);
if(hh<=12){
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}else{
Trang 21Mạch được ứng dụng nhiều trong thực tế vì mạch đơn giản dễ làm Song bên cạnh đó còn
có nhiều nhược điểm như code viết dài độ chính xác không cao so với dùng bộ thời gian thực real time
Hướng phát triển của đề tài: kết hợp vối bộ cảm biến nhiệt độ và cảm biến độ ẩm để tạo ra LỊCH VẠN NIÊN