Tải bản đầy đủ (.doc) (12 trang)

THIẾT KẾ HỆ ĐIỀU HÀNH THỜI GIAN THỊC TRÊN HỌ VI ĐIỀU KHIỂN 8051

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 (202.67 KB, 12 trang )

Bộ Công Thương
Trường ĐHCN Hà Nội
Báo Cáo:Bài Tập Lớn Môn VĐK
Đề tài: THIẾT KẾ HỆ ĐIỀU HÀNH THỜI GIAN THỊC TRÊN HỌ VI
ĐIỀU KHIỂN 8051

Giáo viên hướng dẫn:NGUYỄN ANH DŨNG

Sinh viên thực hiện: TRẦN VĂN ANH
TỐNG VĂN HÙNG
PHÙNG VĂN LÂP

Lớp:CĐ DDT2-K9
File đính kèm 006.rar


Lời Nói Đầu
Với sự ra đời của chip 8051 vào năm 1980 do INTEL sản xuất,nó đã tạo ra bước
tiến quoan trọng trong lĩnh vưc vi điều khiển.vói sự ra đó đã giúp cho viêc thiết
kế các hệ thống như đo lường,điều khiển tự động,truyền thông ngày càng đơn
giản gọn nhẹ và chính xác hơn.ngày nay các chíp thế hệ sau của 8051 ngay càng
được tăng cường thêm cá tính năng cũng như rung lượng,đã giúp cho họ vi điều
khiển 8051 trở thành 1 trong những bộ vi điều khiển 8bit mạnh và linh hoạt nhất
trong những năm gần đây.
Đó là việc nghiên cứu và tìm hiểu về vi điều khiển,trong đó đặc biệt là họ vi
điều khiển 8051 la điều cần thiết với sinh viên khoa điện tử chúng em nói chung
cũng như sinh viên các khoa khác co liên quoan tới môn học.nhưng do thời gian
tìm hiểu và kiến thức về môn học còn có nhiều hạn chế,cho nên trong đề tài
nghiên cứu về vi điều khiển của chúng em còn gì thiếu sót và hạn chế mong thầy
chỉ bảo giúp cho chúng em hiểu sâu hơn về môn học này,chúng em xin chân
thành cảm ơn.


I,Giới thiệu tổng quan về họ 8051 (AT89S52):
Với chíp 8051 lần đầu tiên được đưa ra thị trường thì nó có các đặc chưng
được tóm tắt như sau:


- 4KB ROM
- 128byte RAM
- 4 pori xuất nhập (I/O)8-bit
- 2 bộ định thời 16-bit
- Mạch giao tiếp nối tiếp
- Không gian nhớ chương trình (mã) ngoài 64k
- Không gian nhớ rữ liệu ngoài 64k
- Bộ xử lý bit (thao tác trên các bít riêng rẽ)
- 210 vị chí được định địa chỉ,mỗi vị chí 1bit
- Nhân/chia trong 4 micro giây
Còn đối với vi điều khiển 8052 thì nó có thêm bộ định thời thứ 3
Dưới đây là hình dạng thực tế và sơ đồ chân của vi điều khiển AT89S52:


Hình 1.1:hình dạng thực tế và sơ đồ chân của AT89S52
Hình 1.2:sơ đồ khối của vi điều khiển 89s52
1.Chức năng từng chân trong sơ đồ:
Như ta thấy trong sơ đồ hình 1.1 chên 32 trong 40 chân của AT89S52 có công
dụng xuất nhập,tuy nhiên 24 trong 32 đường này có 2 mục đích.mỗi đường có
thể hoạt động xuất/nhập hoặc hoạt động như một đường điều khiển hoặc hoạt
động như một đường địa chỉ/dữ liệu da hợp.
a.Port 0(từ chân 32 tới 39)có hai công dụng.một là được sử dụng làm nhiệm vụ
xuất nhập,hai là port 0 chở thành bus địa chỉ và bus dữ liệu đa hợp.
b.Port 1(từ chân 1 tới chân 8)chỉ có một công dụng là xuất nhập và được dùng
để giao tiếp với thiết bị bên ngoài khi có yêu cầu.

c.Port 2(từ chân 21 tới 28)có hai công dụng.hoặc làm nhiệm vụ xuất nhập hoặc
là byte địa chỉ cao của bus địa chỉ 16-bit.
d.Port 3(từ chân 10 tới chân số 17)có hai công dụng.khi không hoạt động xuất
nhập các chân của port 3 có các chức năng riêng.
Bảng chức năng các chân của port 3 va 2 chân port 1.0 và port 1.1 của port 1:
Bit tên địa chỉ bit chức năng
P3.0 RxD B0H chân nhận dữ liệu của port nối tiếp
P3.1 TxD B1H chân phát dữ liệu của port nối tiếp
P3.2 INT0 B2H ngõ vào ngắt ngoài 0
P3.3 INT1 B3H ngõ vào ngắt ngoài 1
P3.4 T0 B4H ngõ vào của bộ định thời/đếm 0
P3.5 T1 B5H ngõ vào của bộ định thời/đếm 1
P3.6 WR B6H điều khiển ghi bộ nhớ dữ liệu ngoài
P3.7 RD B7H điều khiển đọc bộ nhớ dữ liệu ngoài
P1.0 T2 90H ngõ vào bộ định thời /đếm 2
P1.1 T2EX 91H nạp lại /thu nhận của bộ định thời 2
e.chân cho phép bộ nhớ trương trình psen:
đây là tín hiệu xuất trên chân 29.Nó điều khiển cho phép ta truy xuất bộ nhớ
ttruw[ng trinh ngoài,chân này thường nối với chân cho phép xuất OEtín hiệu
psen ở logic 0 trong suốt thời gian tìm nạp lệnh.các mã nhị phân của trương
trình được đọc từ EP-ROM,qua bú dữ liệu được chốt vào thang ghi IR của 8051
để được giả mã.
f.Chân cho phép chốt địa chỉ ALE:
8051 sử dụng 30 chân,chân xuất tí hiệu cho phép chốt dịa chỉ ALE để giải đa
hợp bus dũ liệu và bus địa chỉ.chân ALE xuất yins hiệu để chốt địa chỉ vào
thanh ghi ngoài trong suốt ½ đầu của chu kỳ bộ nhớ.sau khi điều này được thực
hieenjcacs chân port 0 sẽ xuất nhập dữ liệu hợp hệ trong suốt ½ thứ 2 của chu kỳ
bộ nhớ.
g.Chân reset (rst)
Nằm ở chân 29laf ngõ vào xóa chính dùng để thiết lập trạng thái ban đầu cho hệ

thống hay gọi tắt là reset hệ thống.khi ngõ này được cheo ở mức tối thiểu 2 chu
kỳ máy,các thanh ghi bên trong của 8051 được nạp các giá trị thích hợp cho việc
khở động lại hệ thống.
Trạng thái của các thanh ghi khi reset,khi reset thì giá trị của các thanh ghi như
ở dưới bảng sau:

h.Chân XTAL1 và XTAL2:
Giao động bên trong của thạch anh được ghép nối với bên ngoài ở 2 chân
XTAL1 và XTAL1 (chân 18 và 19) vói tần số danh dịnh cả thạch anh là
12MHZ.
i.Chân truy xuất ngoài EA:
nằm ở chân 31 nó có thể được nối với 5v(logic 1) hoặc GND (logic 0),nếu chân
này được nối lên 5v thì 8052/8051 thực thi chương trình trong ROM nội.nếu nối
với GND (và chân psen cũng ở mức logic 0)thì chương trình thực thi chứa ở bộ
nhớ ngoài.
II.hoạt động định thời,cổng nối tiếp ,ngắt và xủ ly ngắt của họ 8051:
1.hoạt động đinh thời:như ta đã biết ở trên voi 8051 ta chỉ có 2 timer đó là timer
0 va timer 1 còn đối với 8052 thì chúng ta co thêm bộ định thời thứ 3 là
timer2,các timer này có rất nhiều ứng dụng quoan trọng trong các lĩnh vực như
đo lường,điều khiển.
2.cổng nối tiếp:
AT89S52 có một cổng nối tiếp trên chíp có thể hoạt động ở nhiều chế độ khác
nhau.chức năng chủ yếu của cổng nối tiếp là chuển đổi song song và nối tiếp với
các dữ liệu chuyển đổinối tiếp sang song song với dữ liệu nhập để có thể giao
tiếp với may tính qua cổng nối tiếp hoặc các thiết bị tương tự.
3.ngắ và xử lý ngắt:
Để tận dụng khả năng của cpu chúng ta phải sử dụng đến ngắt,ngắt giúp ta tạm
ngừng công việc của cpu để phục vụ việc chao đổi rữ liệu.sau khi hoàn thành
việc chao đổi dữ liệu thì cpu phải quoay về làm nốt công việc dang bị gián
doạn.điều này giúp cho cpu làm việc hiệu quả hơn rất nhiều.

Với AT89S52 ta có 6 nguồn ngắt:
-Ngắt ngòai đến từ chân #INT0
-Ngắt ngoài đến từ chân #INT1
-Ngắt do bộ timer 0
-Ngắt do bộ timer 1
-Ngắt do bộ timer 2
-Ngắt do port nối tiếp
III : THIẾT KẾ ÚNG DỤNG HỆ ĐIỀU HÀNH THỜI GIAN THỰC.
Sơ đồ nguyên lý:
Sơ đồ mạch in:
Sơ đồ mô phỏng:
CHƯƠNG TRÌNH
#include<reg52.h>
#include<rtx51tny.h> //xu ly da nhiem- thoi gian thuc voi RTX51
#include<stdio.h>
#include<math.h>
#define on 0
#define off 1
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
unsigned int j,u,y;
//khai bao cac chu so hien thi tren led 7 thanh
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay1us(unsigned int n) //ham tao tre 1us
{
unsigned int i;
for (i = 0;i<n;i++);
}
void hienthi7(unsigned int x ) //ham hien thi led 7 thanh

{
unsigned int dvi,chuc,tram,nghin;
nghin = x/1000;
tram = (x%1000)/100;
chuc = (((x%1000)%100)/10);
dvi = (((x%1000)%100)%10);

P1 = M[nghin]; //hien thi hang nghin
P3 = 0x01;
delay1us(200);
P1 = M[tram]; //hien thi hang tram
P3 = 0x02;
delay1us(200);
P1 = M[chuc]; //hien thi hang chuc
P3 = 0x04;
delay1us(200);
P1 = M[dvi]; //hien thi hang don vi
P3 = 0x08;
delay1us(200);
}
void led500ms(void) _task_ 1 //led 1 nhap nhay voi chu ki 500ms
{
while(1)
{
led1 = on;
os_wait (K_TMO,25,0); //tao tre 250ms
led1 = off;
os_wait (K_TMO,25,0);
led1 = on;
os_wait (K_TMO,25,0);

led1 = off;
os_wait (K_TMO,25,0);
y++; //tang gia tri dem led 7 thanh sau 1s
if (y==10000) //kiem tra gia tri led 7 thanh va reset ve 0000
y=0;
}
}
void led800ms(void) _task_ 2//led 2 nhap nhay voi chu ki 800ms
{
while(1)
{
led2 = on;
os_wait (K_TMO,40,0); //tao tre 400ms
led2 = off;
os_wait (K_TMO,40,0);
}
}
void led1400ms(void) _task_ 3 //led 3 nhap nhay voi chu ki 1.4s
{
while(1)
{
led3 = on;
os_wait (K_TMO,70,0); //tao tre 700ms
led3 = off;
os_wait (K_TMO,70,0);
}
}
void led7(void) _task_ 4 //led 7 thanh dem tu 0000 den 9999
{
while(1)

{
for (u=0;u<400;u++)
hienthi7(y);
}
}
void startup(void) _task_ 0 //ham chinh-khoi dong cac task
{
os_create_task (1); //khoi tao tien trinh 1
os_create_task (2); //khoi tao tien trinh 2
os_create_task (3); //khoi tao tien trinh 3
os_create_task (4); //khoi tao tien trinh 4
os_delete_task (0); //xoa task_0
}

×