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.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG I
- -Báo Cáo Tiểu Luận
Môn : Kỹ Thuật Vi Xử Lý
Đề Tài : Lập trình điều khiển cho led trái tim
Giảng Viên : Phạm Văn Cường
Nhóm 12 (D11VT8): Nguyễn Thị Nga Nguyễn Văn Quyết
Lê Đình Thủy
Trần Tuấn Anh Đậu Xuân Tú
Trang 2Lờ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
Nội dung báo cáo gồm 3 phần:
I – Cơ sở lý thuyết
II – Nội dung thiết kế
III – MÔ PHỎNG – SẢN PHẨM
Trang 3Lập trình điều khiển cho led trái tim
I – Cơ sở lý thuyết
1-Giới thiệu chung về bộ vi điều khiển:
Bộ vi điều khiển viết tắt là Micro-contronller, là mạch tích hợp trên một chíp có thể lập trình được, dùng để điều khiển hoạt động của hệ thống Theo các tập lệnhcủa người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo lường thời gian và tiến hành đọc mở một cơ cấu nào đó
Trong các thiết bị điện và điện tử dân dụng, thiết bị tự động hoá… các bộ
vi điều khiển, điều khiển hoạt động của các thiết bị này Trong hệ thống sản xuất
tự động, bộ vi điều khiển được sử dụng trong điều khiển robot, dây chuyền tựđộng… Các hệ thống càng thông minh thì vai trò của vi điều khiển càng quantrọng
2- Giới thiệu tổng quan về họ Vi điều khiển 8051 (AT89C51)
AT89C51 là một vi điều khiển 8 bit, chế tạo theo công nghệ CMOS chấtlượng cao, công suất thấp với 4 KB PEROM (Flash Programeable and erasable readonly memory)
Các đặc điểm của 8951 được tóm tắt như sau:
- 4KB bộ nhớ, có thể lập trình lại nhanh, có khả năng ghi xóa tới 1000chu kỳ
Trang 4- Tần số hoat động từ 0 Hz đến 24 MHz
- 3 mức khóa bộ nhớ lập trình
- 2 bộ Timer/Counter 16 bit
- 128 Byte RAM nội
- 4 Port xuất/nhập (I/O) 8 bit
- Giao tiếp nối tiếp
- 64 KB vùng nhớ mã ngoài
- 64 KB vùng nhớ dữ liệu ngoài
- Xử lý Boolean (hoạt động trên bit đơn)
- 210 vị trí nhớ có thể định vị bit
- 4μs cho hoạt động nhân hoặc chias cho hoạt động nhân hoặc chia
a – Sơ đồ khối và sơ đồ chân của AT89C51
OTHER REGISTER
128 byte RAM
128 byte RAM 8032\8052 ROM
0K:
8031\8032 4K:8951 8K:8052
TEMER1
Trang 5Hình 1 – Sơ đồ khối của AT89C51
Hình 2 – Sơ đồ chân của AT89C51
b – Chức năng các chân của AT89C51
P0 P1 P2 P3 Address\Data TXD RXD
Trang 6+ Port 0 (P0.0 – P0.7 hay chân 32 – 39): Ngoài chức năng xuất nhập ra, port
0 còn là bus đa hợp dữ liệu và địa chỉ (AD0 – AD7), chức năng này sẽ được sửdụng khi AT89C51 giao tiếp với thiết bị ngoài có kiến trúc bus
Hình 3 – Port 0
+ Port 1 (P1.0 – P1.7 hay chân 1 – 8): có chức năng xuất nhập theo bit và
byte Ngoài ra, 3 chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP, 2chân P1.0 và P1.1 được dùng cho bộ Timer 2
Trang 7Hình 4 – Port 1
+ Port 2 (P2.0 – P2.7 hay chân 21 – 28): là một port có công dụng kép Là
đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ
mở rộng
Hình 5 – Port 2
+ Port 3 (P3.0 – P3.7 hay chân 10 – 17): mỗi chân trên port 3 ngoài chức
năng xuất nhập ra còn có một số chức năng đặc biệt sau:
Bit Tên Chức năng chuyển đổi
P3.0 RXD Dữ liệu nhận cho port nối tiếpP3.1 TXD Dữ liệu truyền cho port nối tiếp
P3.4 T0 Ngõ vào của Timer/Counter 0P3.5 T1 Ngõ vào của Timer/Counter 1P3.6 WR Xung ghi bộ nhớ dữ liệu ngoàiP3.7 RD Xung đọc bộ nhớ dữ liệu ngoài
Trang 8Hình 6 – Port 3
+ RST (Reset – chân 9): mức tích cực của chân này là mức 1, để reset ta
phải đưa mức 1 (5V) đến chân này với thời gian tối thiểu 2 chu kỳ máy (tươngđương 2µs đối với thạch anh 12MHz
+ XTAL 1, XTAL 2: AT89C51 có một bộ dao động trên chip, nó thường được
nối với một bộ dao động thạch anh có tần số lớn nhất là 33MHz, thông thường là12MHz
+ EA (External Access): EA thường được mắc lên mức cao (+5V) hoặc mức
thấp (GND) Nếu ở mức cao, bộ vi điều khiển thi hành chương trình từ ROM nội.Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng
+ ALE (Address Latch Enable): ALE là tín hiệu để chốt địa chỉ vào một thanh
ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ Sau đó các đường port 0 dùng đểxuất hoặc nhập dữ liệu trong nửa chu kỳ sau của bộ nhớ
+ PSEN (Program Store Enable): PSEN là điều khiển để cho phép bộ nhớ
chương trình mở rộng và thường được nối với đến chân /OE (Output Enable) của
Trang 9một EPROM để cho phép đọc các bytes mã lệnh PSEN sẽ ở mức thấp trong thờigian đọc lệnh Các mã nhị phân của chương trình được đọc từ EPROM qua Bus vàđược chốt vào thanh ghi lệnh của bộ vi điều khiển để giải mã lệnh Khi thi hànhchương trình trong ROM nội, PSEN sẽ ở mức thụ động (mức cao).
+ Vcc, GND: AT89C51 dùng nguồn một chiều có dải điện áp từ 4V – 5.5V
được cấp qua chân 40 (Vcc) và chân 20 (GND)
3- Tổng quan và tính toán cho LED phát quang
a- Hoạt động và phân cực cho LED
LED phát quang được phát sáng khi chúng ta cấp nguồn cho nó thì nó sẽ phát sáng Có rất nhiều LED phát quang với mầu sắc, kích thước chủng loại khác nhau
Và được ứng dụng trong thắp sáng, trang trí
Bản chất của LED chính là một diode có khả năng phát sáng khi phân cực thuận Khi Led sáng thi điện áp rơi trên LED có giá trị nhỏ nhất là 0.7V và lớn nhất gần 2V tùy từng loại LED Tùy vào từng loại LED mà có giá trị dòng qua LED khác nhau để LED sáng bình thường Thông thường thì nguồn cấp cho LED 3V thì chúng ta
không cần điện trở hạn dòng nhưng đối với nhiều mạch người ta không thể dùng thêm một nguồn nữa nên người ta dùng nguồn cho LED chung với nguồn điều khiển (5V) và lắp thêm con điện trở nối tiếp cho LED Mục đích là để hạn dòng cho
Trang 10LED không cho dòng qua LED lớn hơn giá trị định mức Nếu mà quá dòng thì LED
sẽ cháy Tính toán điện trở đó như thế nào?
b- Cách tính toán điện trở hạn dòng cho LED
Nếu chúng ta sử dụng nguồn 3V thì không cần phải điện trở mà có thể lắp trực tiếp được nhưng nếu mà cho nguồn lớn hơn 3V thì cần phải có thêm một con điện trở hạn dòng cho LED
Chúng ta áp dụng lý thuyết mạch điện vào tính toán điện trở này như sau:
Trang 11c- Điều khiển LED với 8501
LED phát quang chúng ta chỉ cần phân cực thuận là nó sẽ sáng.Trong 8501 chỉ điều khiển được mức 1 (5V) và mức 0 (0V) nên do đó LED khi mắc vào chân của
8501 sẽ được điều khiển tắt hoặc mở tùy thuộc vào trạng thái của chân 8501 được điều khiển như thế nào? Có hai cách mắc LED và chân 8501
+ Mắc ở chế độ xả dòng
Với mắc ở chế độ này thì LED sẽ sáng rất tối vì công suất của chân 8501 rất yếu Không đủ cấp dòng cho LED sáng với chế độ định mức Nên phương pháp này sẽ làm LED sáng tối nên không hiểu quả Chân 8501 ở mức 1 thì LED sáng và mức 0 thì tắt
+ Mắc ở chế độ hút dòng
Trang 12Mắc kiểu này thì LED sáng hết công suất Đây là phương pháp ghép trực tiếp nhưng vi xử lý nó chỉ chịu được một giá trị dòng nhất định qua nó Nếu mà quá nhiều LED ghép nối thế này thì tất cả dòng sẽ qua vi xử lý gây ra quá dòng trên vi
xử lý gây nên cháy chíp và chíp nóng không hoạt động được lâu Phương pháp nàychỉ mang tính lắp ít LED và điều khiển không đồng thời Giải pháp là gắn thêm mộttransitor đệm Đối với mắc kiểu này thì mức 1 thì LED tắt và mức 0 thì LED tắt.Điều khiển LED đơn này cũng rất là đơn giản Nó dựa vào cách ghép nối với vi xử
lý và đưa mức cần thiết ra chân vi xử lý thì LED sẽ sáng và tắt theo ý muốn của chúng ta
II- NỘI DUNG THIẾT KẾ
Mạch trái tim với 32 LED ghép nối với 8501
1- Mạch nguyên lý
Mỗi PORT của 89C52 có độ dài 8 bit, do vậy không thể truy xuất lên từng PORT một lúc được Ta chỉ có thể làm lần lượt với từng Port của 89C52 Nhưng với điều khiển LED, Thời gian thực hiên rất nhanh, và coi như thực hiện gần như cùng một lúc Sau đây mình sẽ điều khiển 32 LED được xếp thành một hình trái tim
Trang 14Mạch nguyên lý trên là ghép trực tiếp không dùng đệm Theo nguyên tắc vẫn chạyđược nhưng không đảm bảo cho con 8501 hoạt động tốt và không bị quá dòng Nhưng với bài toán này chúng ta có thể ghép trực tiếp với LED thường và điều khiển không đồng thời Mạch vẫn chạy ổn định.
2- Thuật toán điều khiển
Việc điều khiển 32 LED đơn này cũng không khó Ta cứ cho LED này bật rồi LED kiatắt theo hiệu ứng của chúng ta Các thời điểm được tính là rất nhanh Việc chuyển
từ thời điểm này sang thời điểm kia được qua một thời gian trễ nếu cần thiết Ta chỉ cần xuất mức 0 ra chân 8501 là LED sáng và mức 1 ra chân của 8501 là LED tắt
Phần lập trình
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
unsigned int i,j;
//###### ham delay tôi thoi gian tre 0.5s ######
void delay(unsigned int ms)
Trang 19unsigned char E[]={0x0e,0x0d,0x0b,0x07}; unsigned chare[]={0x70,0xb0,0xd0,0xe0};
unsigned char F[]={0x06,0x05,0x03}; unsigned char f[]={0x60,0x50,0xc0};unsigned char G[]={0x02,0x01}; unsigned char g[]={0x40,0x80};
Trang 20for(i=0;i<5;i++){
P0=P1=D[i];delay(300);P2=P3=d[i];delay(300);}
for(i=0;i<4;i++){
P0=P1=E[i];delay(300);P3=P2=e[i];delay(300);}
for(i=0;i<3;i++){
P0=P1=F[i];delay(300);P3=P2=f[i];delay(300);}
for(i=0;i<2;i++){
P0=P1=G[i];
Trang 25P0=P1=P2=P3=0x00;delay(500);
P0=P1=P2=P3=0xff;delay(500);
P0=P1=P2=P3=0x00;delay(500);
}
}
void main(void){
Trang 26hieuung6();delay(500);
hieuung7();delay(500);
hieuung8();delay(500);
hieuung9();delay(500);
hieuung10();delay(500);
}
}
Trang 27III- MÔ PHỎNG – SẢN PHẨM
1- Mạch in
Trang web tham khảo phần cơ sở lý thuyết : hoiquandientu.com