Báo cáo thực hành Vi điều khiển

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

pdf86 trang | Chia sẻ: Thành Đồng | Ngày: 11/09/2024 | Lượt xem: 47 | Lượt tải: 0download
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:

  • pdfbao_cao_thuc_hanh_vi_dieu_khien.pdf