MỤC LỤC
CHƯƠNG 1.4
GIỚI THIỆU CHUNG.4
1.1 GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN. 4
1.1.1 Các dòng vi điều khiển hiện nay . 4
1.2 Họ vi điều khiển 8051. 5
1.3 Giới thiệu board mạch Easy8051 . 6
1.3.1 Những tính năng chính của Easy8051 . 6
1.3.2 Tài nguyên phần cứng. 7
CHƯƠNG 2: THỰC HÀNH .8
BÀI THỰC HÀNH SỐ 1: CHỨC NĂNG ĐIỀU KHIỂN CỔNG I/O LED ĐƠN .8
1. Mục đích. 8
2. Yêu cầu. 8
3. Sơ đồ nguyên lý . 8
4. Lựa chọn thiết bị.11
5. Trình tự thực hiện .12
6. Lưu ý: .13
BÀI THỰC HÀNH SỐ 2: LED 7 THANH .14
1.Mục đích.14
2.Yêu cầu.14
3. Sơ đồ nguyên lý .14
Nguyên lý hoạt động:.15
4.Lựa chọn thiết bị.17
5.Trình tự thực hiện .18
6.Lưu ý .19
BÀI THỰC HÀNH SỐ 3: CHỨC NĂNG NGẮT TIMER – ĐỒNG HỒ SỐ .20
1.Mục đích.20
2.Yêu cầu.20
3.Sơ đồ nguyên lý .202
4. Lựa chọn thiết bị.32
5.Trình tự thực hiện .32
Lưu ý .33
BÀI THỰC HÀNH SỐ 4: CHỨC NĂNG NGẮT NGOÀI – BỘ ĐO TẦN SỐ .34
1.Mục đích.34
2.Yêu cầu.34
3.Sơ đồ nguyên lý .34
4.Lựa chọn thiết bị.37
5.Trình tự thực hiện .38
6.Lưu ý .38
86 trang |
Chia sẻ: Thành Đồng | Ngày: 11/09/2024 | Lượt xem: 47 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Báo cáo thực hành Vi điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Tụ 104 sẽ giảm nhiễu đó. Tụ 104 cũng có thể bỏ đi không lắp vì ta có thể khử nhiễu
bằng phần mềm.
20
BÀI THỰC HÀNH SỐ 3
LẬP TRÌNH CHỨC NĂNG NGẮT TIMER - ĐỒNG HỒ SỐ
1.Mục đích
Sủ dụng bộ định thời với chức năng ngắt timer
Giao tiếp với led 7 thanh, phím bấm.
2.Yêu cầu
- Tính toán, lựa chọn được các thông số của linh kiện, giá trị điện trở, dòng, áp cấp led
7 thanh
- Lập trình điều khiển hiển thị được đồng hồ số theo yêu cầu.
- Nắm bắt được cờ ngắt của bộ định thời, chức năng các phần tử trong sơ đồ mạch.
- Lập trình được các bài toán yêu cầu, hiểu rõ từng câu lệnh, từng hàm, chương trình
con về quy tắc, cấu trúc câu lệnh cũng như chức năng tác dụng của nó.
3.Sơ đồ nguyên lý
Nguyên lý:
Biến giây : s ; biến phút : m ; biến giờ : h
Tạo độ trễ 1 giây, khi hết 1 giây thì tăng biến s lên 1 đơn vị. Nếu s =60 thì s= 0 và m
tăng lên 1 đơn vị ;nếu m= 60 thì m=0 và tăn h lên 1 đơn vị . nếu h =24 thì h=0
- Khi muốn điều chỉnh đồng hồ ( cấp mức 0 vào chân của vi điều khiển)
+ Nhấn phím P2_0 để chọn chế độ điều chỉnh phút - giờ - giây
+ Khi muốn tăng giờ hay phút , nhấn phím P2_1
+ Khi muốn giảm giờ hay phút , nhấn phím P2_2
+ Bấm phím P2_0 một lần nữa để về chế độ chạy bình thường
Chương trình điều khiển
#include
////////////////////
#define SW1 P2_0
21
#define SW2 P2_1
#define SW3 P2_2
/////////////// khai bao bien
int k,m;
int sl,chon=0,gi=0,p=0;
int a,b,c,d,e,f;
unsigned char display[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(int time)
{ int i;
for(i=0;i<time;i++)
{}; }
///////////////////////////////khoi tao ngat
void khoitaongat(void)
{
EA = 0; //cam ngat toan cuc
TMOD = 0x10;//Timer che do 1 , 16 bit
// TH0=0x00; //Gia
//TL0=0x00;
TH1 = 0xfc;
TL1 = 0x66;
ET1 =1;
//ET0=1; //cho phep ngat timer 0
EA =1; //cho phep ngat toan cuc
TR1 =1;
//TR0 =1; //chay timer 0 bat dau dem so chu ky may }
22
/////////////////////////////// hien thi
void hienthi(unsigned int k, unsigned int p, unsigned int gi)
{ a=gi/10; //tram nghin
b=gi 10; //chuc nghin
/////
c=p/10; // nghin
d=p%10; //tram
///////
e =k/10; //chuc
f=k%10; //don vi
/////////////////////
if(chon==0)
{ for(sl=0;sl<10;sl++)
{ P0=display[a]; //display chuc gio
P1_0=0;
delay(50);
P1_0=1;
//////////////////////////////
P0=display[b]; //display don vi gio
P1_1=0;
delay(50);
P1_1=1;
////////////////////////
P0=display[c]; //display chuc phut
23
P1_2=0;
delay(50);
P1_2=1;
/////////////////////
P0=display[d];//display don vi phut
P1_3=0;
delay(50);
P1_3=1;
//////////////////////////////
P0=display[e]; //display chuc giay
P1_4=0;
delay(50);
P1_4=1;
////////////////////////////////////
P0=display[f]; //display don vi giay
P1_5=0;
delay(50);
P1_5=1; }
}else
if(chon==1)
{ P0=display[f]; //display don vi giay
P1_5=0;
delay(100);
P1_5=1;
delay(500); }
24
else
if(chon==2)
{ P0=display[e]; //display chuc giay
P1_4=0;
delay(100);
P1_4=1;
delay(500); }
else
if(chon==3)
{ P0=display[d];//display don vi phut
P1_3=0;
delay(100);
P1_3=1;
delay(500); }
else
if(chon==4)
{ P0=display[c]; //display chuc phut
P1_2=0;
delay(100);
P1_2=1;
delay(500); }
else
if(chon==5)
{ P0=display[b]; //display don vi gio
P1_1=0;
25
delay(100);
P1_1=1;
delay(500); }
else
if(chon==6)
{ P0=display[a]; //display chuc gio
P1_0=0;
delay(100);
P1_0=1;
delay(500); }
}
////////////////////////////
void timer1ms (void) interrupt 3 //ngat timer 1
{ TR1 =0;
if(chon==0)
{ m=m+1;
if(m==1000)
{
k=k+1;
m=0; }
}
TH1 = 0xfc;
TL1 = 0x66;
TF1 =0;
TR1=1;
26
}
/////////////// chuong trinh chinh
void main(void)
{ khoitaongat();
k=0;
m=0;
while(1)
{ if(SW1==0)
{ do
{ delay(100);
if(SW1==1)
{ chon=chon +1; }
}
while(SW1==0); }
if(chon==7)chon=0;
//////////////////////////////////////////
switch(chon)
{ case 0://chay binh thuong (khong cai dat)
{ if(k==60)
{ k=0;
p=p+1; }
if(p==60)
{ p=0;
gi=gi+1; }
if(gi==24) gi=0;
27
hienthi(k,p,gi);
break; }
///////////////////////////////////
case 1: //cai dat don vi cua giay
{ if(SW2==0) //tang
{ do
{ delay(100);
if(SW2==1)
{ k=k+1;
if(k==10)k=0; }
} while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
{ do
{ delay(100);
if(SW3==1)
{ k=k-1;
if(k<0)k=0; }
} while(SW3==0);
}hienthi(k,p,gi);
Break; }
//////////////////////////////////////////////////////////////////
case 2: //cai dat chuc cua giay
{ ////////////////////////
if(SW2==0) //tang
28
{ do
{ delay(100);
if(SW2==1)
{ k=k+10;
if(k>60)
k=k%10; }
} while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
{ do
{ delay(100);
if(SW3==1)
{ if(k>10)
{ k=k-10; }
else
if(k==10)k=k%10; }
} while(SW3==0);
}hienthi(k,p,gi);
break; }
///////////////////////////////////////////////////////////////////////
case 3: //cai dat don vi cua phut
{ ////////////////////////
if(SW2==0) //tang
{ do
{ delay(100);
29
if(SW2==1)
{ p=p+1;
if(p==10)p=0; }
} while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
{ do
{ delay(100);
if(SW3==1)
{ p=p-1;
if(p<0)p=0; }
} while(SW3==0);
} hienthi(k,p,gi);
break; }
//////////////////////////////////////////////////////////////////
case 4: //cai dat chuc cua phut
{ ////////////////////////
if(SW2==0) //tang
{ do
{ delay(100);
if(SW2==1)
{ p=p+10;
if(p>=60)
p=p%10; }
30
} while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
{ do
{ delay(100);
if(SW3==1)
{ if(p>10)
{ p=p-10; }
else
if(p==10)p=p%10; }
} while(SW3==0);
} hienthi(k,p,gi);
break; }
///////////////////////////////////////////////////////////////////////
case 5: //cai dat don vi cua gio
{ ////////////////////////
if(SW2==0) //tang
{ do
{ delay(100);
if(SW2==1)
{ gi=gi+1;
if(gi==24)gi=0; }
} while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
31
{ do
{ delay(100);
if(SW3==1)
{ gi=gi-1;
if(gi<0)gi=0; }
} while(SW3==0);
} hienthi(k,p,gi);
break; }
//////////////////////////////////////////////////////////////////
case 6: //cai dat chuc cua gio
{ ////////////////////////
if(SW2==0) //tang
{ delay(100);
if(SW2==1)
{ gi=gi+10;
if(gi>24)
gi=gi%10; } }
while(SW2==0); }
///////////////////////////////
if(SW3==0)//giam
{ do
{ delay(100);
if(SW3==1)
{ if(gi>10)
{ gi=gi-10; }
32
else
if(gi==10)gi=gi%10; } }
while(SW3==0); }
hienthi(k,p,gi);
break; } } } }
4. Lựa chọn thiết bị
- Model led:
+ 6 led 7 thanh ( sd model led 7 thanh như bài thực hành số 3)
+ 2 led đơn ( sd trong model led đơn bài thực hành số 1)
- 3 button
Hình 3.1: Vị trí 3 button T1, T2, T3 trên bo mạch
- Cổng điều khiển: port 0, port 1, port 2, port 3
Hình 3.2: Vị trí 3 port P0,P1, P2, P3 trên bo mạch
5.Trình tự thực hiện
- Bước 1: Dùng jump cắm 1 hàng 5x2 kết nối PORT-2 vào 3 button T1, T2 VÀ T3
- Bước 2: Vẽ mạch mô phỏng proteus
33
Hình 3.3 Mô phỏng proteus đồng hồ số hiện thị trên led 7 thanh
- Bước 3: Biên dịch chương trình mẫu, mô phỏng trên Proteus và nạp chương trình
vào kit thực hành Easy8051 để chắc chắn các khối mạch cần dùng hoạt động tốt.
- Bước 4: Viết chương trình, chạy mô phỏng và chạy trên kit thực hành 8051 theo yêu
cầu sau : đồng chạy gần đúng với thời gian thực, điều chỉnh được tăng hay giảm giờ,
phút.
Lưu ý
Khai báo đúng hàm timer,lựa chọn đúng hàm timer
Làm mạch thực tế đúng theo mô phỏng
34
BÀI THỰC HÀNH SỐ 4
BỘ ĐO TẦN SỐ
1.Mục đích
- Sủ dụng bộ định thời với chức năng ngắt timer.
- Sử dụng chức năng ngắt ngoài.
- Giao tiếp với led 7 thanh, phím bấm.
2.Yêu cầu
- Tính toán trễ đúng 1s
- Lập trình điều khiển hiển thị được giá trị tần số theo yêu cầu.
- Nắm bắt được cờ ngắt của bộ định thời, chức năng các phần tử trong sơ đồ mạch.
3.Sơ đồ nguyên lý
Nguyên lý hoạt động: sử dụng bộ định thời tạo trễ 1s, đêm số xung vào trong 1s, số
xung đếm được chính là tần số và được hiển thị ra led 7 thanh
Begin
w = 0;
dem = 0;
bg= 0;
w = w+1:
bg = 1;
dem < 1000; w = w;
dem = dem + 1;
Đ
hienthi(w);
S
Hình 4.1: Lưu đồ thuật toán mạch đo tần số.
35
Chương trình điều khiển
#include
unsigned char display[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int k,w=0,dem=0;
int sl =0;
int a,a1,b,b1,c,c1,d,d1,e,f,bg=0;
//////////////delay
void delay(int d)
{ int i;
for(i=0;i<d;i++)
{;}}
////////khoi tao ngat
void khoitaongat (void)
{ EA =0; //cam ngat toan cuc
TMOD = 0x01; //Timer 0 che do 16 bit
TH0 = 0xfc; //nap gia tri 252 vao TH0
TL0 = 0x67; //gia tri khoi tao 103 TL0
ET0 = 1; //cho phep ngat timer 0
IT0 = 1; //ngat theo suon xuong
EX0 = 1;//Cho phep ngat ngoai 0
EA = 1; //cho phep ngat toan cuc
TR0 = 1; //chay timer 0 bat dau dem so chu ky may }
//////////////////////
void hienthi(long k)
{ a=k/100000; //tram nghin
a1=k%100000;
b=a1/10000; //chuc nghin
b1=a1%10000;
c=b1/1000; // nghin
c1=b1%1000;
d=c1/100; //tram
d1=c1%100;
e =d1/10; //chuc
f=d1%10; //don vi
for(sl=0;sl<10;sl++)
{ P0=display[a]; //display tram nghin
P1_0=0;
delay(50);
36
P1_0=1;
//////////////////////////////////////////////
P0=display[b]; //display chuc nghin
P1_1=0;
delay(50);
P1_1=1;
//////////////////////////////////////////////
P0=display[c]; //display nghin
P1_2=0;
delay(50);
P1_2=1;
//////////////////////////
P0=display[d];//display tram
P1_3=0;
delay(50);
P1_3=1;
/////////////////////////////
P0=display[e]; //display chuc
P1_4=0;
delay(50);
P1_4=1;
///////////////
P0=display[f]; //display don vi
P1_5=0;
delay(50);
P1_5=1; } }
////////////// ngat timer 0
void timer0(void) interrupt 1
{ TH0=0xfc; //
TL0=0x67; //
if(bg==1) dem=dem+1;
TR0 =1; }
//////////////////////////
void main(void)
{ khoitaongat();
while(1)
{ hienthi(w) ; } }
37
////////////ngat ngoai 0
void count0(void) interrupt 0
{ bg=1;
if(dem<1000)
{ w=w+1; }
else
if(dem>=1000)
{ w=w; }
}
4.Lựa chọn thiết bị
- Model led:
+ 6 led 7 thanh ( sd model led 7 thanh như bài thực hành số 3)
- Cổng điều khiển: port 0, port 1, port 3
Hình 4.2: Vị trí 4 port P0,P1, P2, P3 trên bo mạch
38
5.Trình tự thực hiện
Hình 4.3: Mô phỏng proteus mạch đo tần số
6.Lưu ý
Xác định chuẩn các giá trị ngắt, đảm bảo sai số ± 0,5%. Sử dụng hàm ngắt chống hiện
tượng nhấp nháy led. Nắm rõ chức năng ngắt timer,ngắt ngoài, ngắt theo sườn xuống.
39
BÀI THỰC HÀNH SỐ 5
LẬP TRÌNH CHỨC NĂNG NGẮT TRUYỀN THÔNG NÔI TIẾP
1.Mục đích
- Biết được cách giao tiếp giữa 8051 với máy tính qua cổng RS232
2.Yêu cầu
Viết chương trình truyền dữ liệu từ 8051 lên máy tính và ngược lại
3.Sơ đồ nguyên lý
Hình 5.1: Sơ đồ nguyên lý sử dụng chức năng ngắt truyền thống nối tiếp
bật các led trên port 2.
Nguyên lý hoạt động:
Khi nhận các bit qua chân RxD của nó thì 8051 phải trải qua các bước sau:
Nó nhận bit Start báo rằng bit sau nó là bit dữ liệu đầu tiên cần phải nhận.
Ký tự 8 bit được nhận lần lượt từng bit một. Khi bit cuối cùng được nhận thì một
byte được hình thành và đặt vào trong SBUF.
Khi bit Stop được nhận thì 8051 bật RT = 1 để báo rằng toàn bộ ký tự được nhận
và phải lấy đi trước khi nó bị byte mới nhận về ghi đè lên.
Bằng việc kiểm tra bit cờ RI khi nó được bật lên chúng ta biết rằng một ký tự đã
được nhận và đang nằm trong SBUF. Sao nội dung SBUF vào nơi an toàn trong
một thanh ghi hay bộ nhớ khác trước khi nó bị mất.
Sau khi SBUF được ghi vào nơi an toàn thì cờ RI được xoá về 0 để chuẩn bị kiểm
tra chu trình tiếp theo.
40
Hình 5.2: Lưu đồ thuật toán sử dụng chức năng ngắt truyền thống nối tiếp
bật các led trên port 2.
Chương trình điều khiển
Ví dụ :
Hãy lập trình cho 8051 để nhận các byte dữ liệu nối tiếp tốc độ 9600 baud và
bật các Led trên Port 2 tương ứng: Máy tính gửi xuống số 1: 1 Led sáng, số 2: 2 Led
sáng, , số 8: 8 Led sáng, nếu các ký tự khác thì tắt tất cả các Led.
Lời giải:
#include //Khai báo thư viện cho 89c51
char c;
main() //Chương trình chính
{
TMOD=0x20; //Chọn Timer1, chế độ 2
TH1=0xFD; //Cài đặt tốc độ 9600 baud
Begin
char c;
RI==1;
RI=0;
c =SBUF;
Hien thi ra led 7 thanh
Lặp vô hạn
41
SCON=0x50; //0101 0000: Chọn chế độ 1, Cho phép nhận
TR1=1; //Khởi động Timer1
while(1) //Vòng lặp vô hạn
{ while(RI==1) //Vòng lặp kiểm tra cờ nhận RI
{ //Nếu RI=1 tức là đã nhận đủ 1 byte.
c=SBUF; //lưu dữ liệu nhận được vào biến c
RI=0; //Xóa cờ nhận RI.
}
switch(c) //Kiểm tra ký tự vừa nhận được: tương ứng
{ //trường hợp nào thì thực thi lệnh tươngứng.
case '1':
P2=0xFE;
break;
case '2':
P2=0xFC;
break;
case '3':
P2=0xF8;
break;
case '4':
P2=0xF0;
break;
case '5':
P2=0xE0;
break;
case '6':
P2=0xC0;
break;
case '7':
P2=0x80;
break;
case '8':
P2=0x00;
break;
default: //mặc định là tắt tất cả Led.
P2=0xFF;
break;
}
}
}
4.Lựa chọn thiết bị
a. Module LED : Gồm 8 led đơn:
42
i. 8 led đơn được nối trực tiếp với vi điều khiển
ii. 8 led đơn được kết nối với Header 5x2, ký hiệu CN7 (LED)
Hình5.3– Vị trị khối 8 Led đơn trên board mạch
b. Một MAX 232
c. Một COMPIM
5.Trình tự thực hiện
- Bước 1: Dùng jump cắm 1 hàng 5x2 kết nối PORT-1 vào LED
- Bước 2: Vẽ mạch mô phỏng trên Proteus
43
Hình 5.3: Mô phỏng trên proteus chức năng truyền thông nối tiếp điều khiển 8 led đơn
6.Lưu ý
- Tầm quan trọng của cờ RT
- Từ mô tả trên đây ta rút ra kết luận rằng bằng việc kiểm tra cờ RI ta biết 8051 đã
nhận được một byte ký tự chưa. Sai khi cờ RI=1, nếu ta không sao được nội dung của
thanh ghi SBUF vào nơi an toàn thì có nguy cơ ta bị mất ký tự vừa nhận được. Quan
trọng hơn là phải nhớ rằng cờ RI được 8051 bật lên nhưng lập trình viên phải xoá nó
sau khi nhận được dữ liệu. Cũng nên nhờ rằng, nếu ta sao nội dung SBUF vào nơi an
toàn trước khi RI được bật thì ta đã mạo hiểm sao dữ liệu chưa đầy đủ.
44
BÀI THỰC HÀNH SỐ 6
LED MA TRẬN
1.Mục đích
- Giúp cho sinh viên biết cách quét led ma trận led để hiển thị hay tạo hiệu ứng theo ý
muốn
2.Yêu cầu
- Biết cách ghép nối các led ma trận với nhau( sử dụng IC 74HC595)
- Mô phỏng mạch trên proteus chạy từ trái sang phải dòng chữ bất kỳ
3.Sơ đồ nguyên lý
Nguyên lý hoạt động: quét dòng và quét
Các file đính kèm theo tài liệu này:
- bao_cao_thuc_hanh_vi_dieu_khien.pdf