Muốn dùng ic lập trình AT89C51 để điều khiển các dãy đèn, Bạn hãy ráp các phần mạch cơ bản như hình trên: * Dùng đường nguồn 5V có độ ổn định tốt cấp cho ic. Chân 20 cho nối masse, chân 40 cho nối với nguồn 5V. * Trên chân số 9 gắn tụ 10µF và điện trở 8.2K tạo chức năng reset mỗi khi bo được cấp điện. * Trên chân 18, 19 gắn thạch anh định tần, ở đây dùng thạch anh 12MHz, vậy chu kỳ lệnh là 1µs, gắn 2 tụ nhỏ 33pF bù nhiệt ổn tần. * Trên chân 31 cho lên mức áp 5V để khai báo là chỉ dùng bộ nhớ trong. * Trên cảng p0 dùng thanh 8 điện trở 10Kx8 cho treo áp để ổn định mức bit 1 đối với cảng này. Với các mạch điện như trên, ic lập trình AT89C51 sẽ sẳn sàng chạy các câu lệnh mà Bạn đã cho nạp vào bộ nhớ EEPROM của nó. Các bit cho xuất nhập trên 4 cảng, loại cảng 8 bit, đó là cảng p0, p1, p2, p3. Bây giờ công việc còn lại của chúng ta là viết các chương trình nguồn dùng để điều khiển các dãy đèn màu làm việc thẳng với đường nguồn nhà đèn 220V. Viết các chương trình nguồn. Chúng ta biết để làm sáng một dãy đèn thì dùng bit 0 và để tắt một dãy đèn thì dùng bit 1. Do vậy chúng ta có thể chọn bit trên các đường ra bằng câu lệnh set bit (setb) hay clear bit (clr). Cũng có thể dùng lệnh move (mov) để mỗi câu lệnh cùng lúc tác động vào 8 bit. Phần 1: hãy viết chương trình nguồn ở cấp độ đơn giản trực quan.
Mạch điện cơ bản chạy ic AT89C51. Muốn dùng ic lập trình AT89C51 để điều khiển các dãy đèn, Bạn hãy ráp các phần mạch cơ bản như hình trên: * Dùng đường nguồn 5V có độ ổn định tốt cấp cho ic. Chân 20 cho nối masse, chân 40 cho nối với nguồn 5V. * Trên chân số 9 gắn tụ 10µF và điện trở 8.2K tạo chức năng reset mỗi khi bo được cấp điện. * Trên chân 18, 19 gắn thạch anh định tần, ở đây dùng thạch anh 12MHz, vậy chu kỳ lệnh là 1µs, gắn 2 tụ nhỏ 33pF bù nhiệt ổn tần. * Trên chân 31 cho lên mức áp 5V để khai báo là chỉ dùng bộ nhớ trong. * Trên cảng p0 dùng thanh 8 điện trở 10Kx8 cho treo áp để ổn định mức bit 1 đối với cảng này. Với các mạch điện như trên, ic lập trình AT89C51 sẽ sẳn sàng chạy các câu lệnh mà Bạn đã cho nạp vào bộ nhớ EEPROM của nó. Các bit cho xuất nhập trên 4 cảng, loại cảng 8 bit, đó là cảng p0, p1, p2, p3. Bây giờ công việc còn lại của chúng ta là viết các chương trình nguồn dùng để điều khiển các dãy đèn màu làm việc thẳng với đường nguồn nhà đèn 220V. Viết các chương trình nguồn. Chúng ta biết để làm sáng một dãy đèn thì dùng bit 0 và để tắt một dãy đèn thì dùng bit 1. Do vậy chúng ta có thể chọn bit trên các đường ra bằng câu lệnh set bit (setb) hay clear bit (clr). Cũng có thể dùng lệnh move (mov) để mỗi câu lệnh cùng lúc tác động vào 8 bit. Phần 1: hãy viết chương trình nguồn ở cấp độ đơn giản trực quan. org 0000h start: call kieu_1 call kieu_2 mov r7, #10 tiep_tuc: call kieu_3 djnz r7, tiep_tuc call kieu_4 call kieu_2 jmp start ; kieu_1: mov p1, #00000000b call delay mov p1, #00011000b call delay mov p1, #00111100b call delay mov p1, #01111110b call delay mov p1, #11111111b call delay ret ; kieu_2: mov p1, #11111111b call delay mov p1, #01111111b call delay mov p1, #10111111b call delay mov p1, #11011111b call delay mov p1, #11101111b call delay mov p1, #11110111b call delay mov p1, #11111011b call delay mov p1, #11111101b call delay mov p1, #11111110b call delay mov p1, #11111111b ret ; kieu_3: mov p1, #11111111b call delay mov p1, #11111110b call delay mov p1, #11111101b call delay mov p1, #11111011b call delay mov p1, #11110111b call delay mov p1, #11101111b call delay mov p1, #11011111b call delay mov p1, #10111111b call delay mov p1, #01111111b call delay mov p1, #11111111b call delay ret ; kieu_4: mov p1, #01111111b call delay mov p1, #00111111b call delay mov p1, #00011111b call delay mov p1, #00001111b call delay mov p1, #00000111b call delay mov p1, #00000011b call delay mov p1, #00000001b call delay mov p1, #00000000b call delay mov p1, #00000001b call delay mov p1, #00000011b call delay mov p1, #00000111b call delay mov p1, #00001111b call delay mov p1, #00011111b call delay mov p1, #00111111b call delay mov p1, #01111111b call delay mov p1, #11111111b call delay mov p1, #00000000b call delay call delay mov p1, #11111111b call delay mov p1, #00000000b call delay call delay mov p1, #11111111b call delay mov p1, #00000000b call delay call delay mov p1, #11111111b call delay mov p1, #00000000b call delay call delay mov p1, #11111111b call delay mov p1, #00100010b call delay mov p1, #01001000b call delay mov p1, #00001001b call delay mov p1, #00100101b call delay mov p1, #01001010b call delay mov p1, #10010100b call delay mov p1, #01101001b call delay call delay ret ; delay: mov r7, #10 v_r6: mov r6, #200 v_r5: mov r5, #250 djnz r5, $ djnz r6, v_r5 djnz r7, v_r6 ret end Ghi nhận: Trong chương trình nguồn này, chúng ta chủ yếu dùng câu lệnh mov để đặt 8 bit cho xuất ra trên cảng p1. Ứng với bit 0 là dãy đèn sáng và bit 1 là dãy đèn sẽ tắt. Dùng đoạn chương trình làm trể để có nhịp nhấp nháy rõ nét. Các kiểu nhấp nháy viết thành các chương trình con cho đặt tên nhãn là kiểu 1, kiểu 2, kiểu 3, kiểu 4 , và khi muốn dùng kiểu nhấp nháy nào thì dùng câu lệnh call để gọi ra. Qua các câu lệnh trên Bạn thấy dùng ic lập trình để định kiểu nhấp nháy của các dãy đèn cực kỳ đơn giản. Phải không? Đoạn chương trình này Bạn có thể viết trong trang văn bản của trình MIDE-51, viết xong, Bạn đặt cho nó một cái tên với họ là .asm, rồi gõ phím F9 để cho dịch các câu lệnh ra dạng mã viết ở dạng hệ thập lục phân, các mã lệnh này đặt trong file có họ là .hex. Bây giờ Bạn dùng hộp nạp ROM, cho nạp các câu mã lệnh này vào nằm trong bộ nhớ EEPROM của ic AT89C51, thế là xong chuyện, bây giờ cho gắn ic AT89C51 vào bo thực hành, Bạn sẽ thấy các Led chỉ thị trên bo nhấp nháy theo đúng các câu lệnh mà Bạn đã soạn. Và nếu gắn các dãy đèn vào bo Bạn sẽ thấy cả một trời sao nhấp nháy đúng theo ý muốn của Bạn. Thích không? Hình này cho thấy chương trình nguồn đã được viết trong trang văn bản của M-IDE for MSC51 và sau đó cho dịch ra file .hex để cho nạp các câu mã lệnh vào bộ nhớ trong của ic AT89C51. File .hex có nội dung như sau: :100000001200151200347F0A12006EDFFB1200ABE3 :1000100012003480EB759000120175759018120172 :100020007575903C12017575907E1201757590FF83 :10003000120175227590FF12017575907F1201757E :100040007590BF1201757590DF1201757590EF12F2 :1000500001757590F71201757590FB120175759019 :10006000FD1201757590FE1201757590FF22759055 :10007000FF1201757590FE1201757590FD120175E4 :100080007590FB1201757590F71201757590EF125E :1000900001757590DF1201757590BF12017575902D :1000A0007F1201757590FF1201752275907F120104 :1000B0007575903F12017575901F12017575900F3F :1000C000120175759007120175759003120175750F :1000D0009001120175759000120175759001120161 :1000E0007575900312017575900712017575900F63 :1000F00012017575901F12017575903F120175758B :10010000907F1201757590FF1201757590001201B4 :10011000751201757590FF120175759000120175C9 :100120001201757590FF120175759000120175121C :1001300001757590FF12017575900012017512011D :10014000757590FF120175759022120175759048B2 :10015000120175759009120175759025120175755A :10016000904A12017575909412017575906912018B :1001700075120175227F0A7EC87DFADDFEDEFADF88 :02018000F62265 :00000001FF Phần 2: Dùng bảng để tạo ra các dạng nhấp nháy cho các dãy đèn. Trong đoạn chương trình nguồn này chúng ta tạo dạng nhấp nháy của các dãy đèn bằng cách đặt các bit 0 vào các đoạn mã tạo ra trong bảng, và dùng câu lệnh movc a, @a+dptr để lấy các đoạn mã này xuất ra trên các cảng tùy chọn để tắt mở đèn theo thiết kế của Bạn. org 0000h start: clr a ; xóa trị trong thanh ghi a mov dptr, #kieu_1 ; đặt bảng kiểu 1 vào thanh ghi con trỏ dptr mov r6, #20 ; chọn số lần nhấp nháy là 20 llai1: mov r7, #10 ; trong kiểu chớp này có 10 mẫu ttuc1: call outp1 ; cho xuất mã lấy trong bảng ra cảng p1 djnz r7, ttuc1 ; dò trị r7, làm lại 10 lần clr a ; cho xóa trị trong thanh ghi a djnz r6, llai1 ; dò trị trong r6, lập lại 20 lần jmp start ; quay lại từ đầu outp1: ; chương trình cho xuất mã trên cảng p1 movc a, @a+dptr ; lấy mã trong bảng theo trị của a, mã cho cất vào a mov p1, a ; xuất mã lấy được ra cảng p1 để tắt mở đèn theo bit call delay ; gọi trình làm chậm inc a ; tăng trị trong a lên +1 để lấy mã tiếp theo ret ; quay lại sau câu lệnh call outp1 kieu_1: ; đặt tên bảng là kiểu 1, kiểu này có 10 mẫu db 11111111b db 11111110b db 11111101b db 11111011b db 11110111b db 11101111b db 11011111b db 10111111b db 01111111b db 11111111b delay: ; chương trình làm chậm mov r5, #10 v_r4: mov r4, #50 v_r3: mov r3, #200 djnz r3, $ djnz r4, v_r3 djnz r5, v_r4 ret end ; dừng biên dịch tại dòng này Phát triển thành một chương trình nguồn dài hơn. org 0000h start: ; đặt tên nhãn cho lệnh nhẩy clr a ; xóa sạch thanh ghi a mov dptr, #kieu_1 ; đặt bảng nháy kiểu 1 vào thanh ghi địa chỉ mov r6, #20 ; định số lần lập lại là 20 llai1: mov r7, #10 ; số mã trong bảng kiểu 1 là 10 ttuc1: call outp1 ; cho xuất mã tắt mở đèn trên cảng p1 djnz r7, ttuc1 ; dò trị trong r7, lập lại 10 lần clr a ; trả trị thanh ghi a về 0 djnz r6, llai1 ; dò trị trong r6, cho nháy kiểu 1 20 lần ; viết tương tự như trên, cho xuất mã trên p2 clr a mov dptr, #kieu_2 mov r6, #20 llai2: mov r7, #9 ttuc2: call outp2 djnz r7, ttuc2 clr a djnz r6, llai2 ; viết tương tự như trên, cho xuất mã trên p0, p1, p2, p3 clr a mov dptr, #kieu_4 mov r6, #10 llai3: mov r7, #11 ttuc3: call outp0p1p2p3 djnz r7, ttuc3 clr a djnz r6, llai3 ; viết tương tự như trên, cho xuất mã trên p0 clr a mov dptr, #kieu_3 mov r6, #5 llai4: mov r7, #10 ttuc4: call outp0 djnz r7, ttuc4 clr a [...]... trên, Bạn thấy chỉ với một kiểu mạch điện không quá phức tạp, chúng ta đã biết cách dùng các ic lập trình để điều khiển nhiều dãy đèn nhấp nháy treo trong các công viên lớn, hay trang trí cho các nhà hàng ngoài trời Tôi nghĩ công việc này cũng mang đến nhiều thu nhập cho các Bạn trẻ thích nghiên cứu ứng dụng của môn điện tử Khi có dịp chúng ta sẽ... tạo bảng mã, mỗi mã 8 bit, sau đó định kiểu nhấp nháy, muốn dãy đèn nào sáng thì đặt bit 0, muốn tắt thì đặt bit 1 Sau cùng đếm xem trong bảng có bao nhiêu mẫu mã để khai báo số lần lấy mã cho xuất ra trên các cảng Sau khi đã có chương trình nguồn, cho dịch ra các dòng mã hệ thập lục phân, nạp các dòng mã này vào nằm trong bộ nhớ ROM của các ic. .. p3, p3 @a+dptr a delay a p3, mã p2 @a+dptr a delay a p2, xuất p1 @a+dptr a delay a p1, movc mov mov mov mov call inc trên a, xuất llai4 start p0 p0, p1, p2, p3 @a+dptr a a a a delay a ret ; tạo các bảng kieu_1: db db db db db db db db db 01111111b db kieu_2: db 11111111b db 01111110b db db db db db db 01111110b db kieu_3: db db db db db db db db db 00000000b db kieu_4: db db 00000000b db 00011000b