:00000001FF
Nhìn vào các đoạn mã (viết theo hệ 16) này Bạn sẽ thấy:
:08000000---7590F0---7F64---74FF---EFBE:00000001FF :00000001FF
:08000000 (mã địa chỉ)
7590F0 được hiểu như sau:
(mov data addr, #data, cần 3 byte),
Con số 75 là lệnh mov (trị địa chỉ), số 90h là trị địa chỉ của cảng p1 và số F0 là trị của 11110000b
7F64 được hiểu như sau:
(mov r7, #data, cần 2 byte)
Con số 7F là lệnh mov r7, #data, con số 64h là trị hệ 16 của con số 100 (trị thập phân).
74FF được hiểu như sau:
(mov a, #data, cần 2 byte)
Con số 74 là lệnh mov a, #data, con số FFh là trị hằng.
EFBE được hiểu như sau:
(mov a, r7, chỉ cần 1 byte)
Con số EFBE là mã của lệnh: mov a, r7. :00000001FF Đoạn kết thúc.
Qua thí dụ trên Bạn thấy mỗi câu lệnh nó có mã Code riêng của nó, trình biên dịch sẽ dịch các câu lệnh này ra dạng mã tương ứng. Nói chung Bạn cũng không cần để ý đến các mã Code của câu lệnh làm gì, Bạn hãy học cách dùng các câu lệnh trên để viết ra các chương trình nguồn cho đúng với ý tưởng của Bạn là được. Cách viết các câu lệnh rất đơn giản, cứ theo đúng cú pháp mà gõ, mỗi lệnh trên một dòng, các chú thích nếu có phải đặt sau dấu ";". Với trị có thể dùng số hệ thập lục phân (hệ đếm 16), hay hệ thập phân, hay hệ nhị phân đều được.
Ghi nhận của chúng tôi: Bạn không cần biết hết 254 lệnh, nhưng với các lệnh thường dùng thì phải hiểu cho thật rõ, cố gắng viết các chương trình nguồn ít tốn hao bộ nhớ, trình tự chương trình nên phân minh, dễ đọc, dễ thêm bớt, dễ sửa. Viết trước các đoạn chương trình con thường dùng để khi cần thì chỉ việc chọn và cắt dán vào chương trình đang soạn, làm vậy sẽ ít tốn thời gian và tránh được lỗi. Viết các chương trình nguồn,
công việc nhìn giống như chơi cờ tướng, ai cũng chỉ có bấy nhiêu lệnh mà thôi, nhưng có người cao cờ giải quyết vấn đề theo cách khác, người thấp cờ thì giải quyết theo cách khác. Thời gian chơi nhiều, làm nhiều Bạn cũng sẽ trở thành cao thủ lập trình thôi.
Muốn làm thực hành với các ic vi điều khiển, cần gì?
Đó là câu hỏi nhiều Bạn thường hỏi tôi. Theo tôi, Bạn cần có các thứ sau đây: (1) Một hộp nạp file mã lệnh (file có họ .hex) vào bộ nhớ của các ic vi điều khiển.
(2) Cần biết dùng một máy tính và nên tìm một phần mềm soạn thảo để gõ chương trình nguồn và nó làm được công việc biên dịch ra file mã (file có họ .hex).
(3) Một bo thực hành cơ bản với ic vi điều khiển AT89C51 và nhiều mạch điện ứng dụng ngoại vi.
Chúng ta sẽ thử nói đến các vấn đề này
Làm thực hành với bộ Kit lập trình đa năng
Giới thiệu bộ Kit thực hành với IC AT89C51. Hình chụp toàn phần cho thấy: Muốn tự học lập trình cho IC vi điều khiển AT89C51, tốt nhất Bạn vừa tìm hiểu câu lệnh vừa làm thực hành. Như vậy, Bạn hãy có trong tay bo thực hành đa năng này và một hộp nạp chương trình, dùng nạp file .hex vào bộ nhớ EEP-ROM trong ic vi điều khiển AT89C51. Trình tự làm thực hành thường như sau:
(1) Bạn tạo các kết nối giữa ic AT89C51 và các mạch điện chung quanh.
(2) Phát triển các ý tường và cụ thể hóa bằng cách viết ra file chương trình nguồn, với họ .asm.
(3) Dịch file nguồn có họ .asm ra file mã Code có họ là .hex
(4) Gắn ic AT89C51 vào bo thực hành, mở nguồn cấp điện để kiểm tra.
Hình chụp và sơ đồ mạch điện cho thấy:
IC vi điều khiển AT89C51 cho gắn trên một chân cấm 40 pin. Chung quanh IC trên 4 cảng là các port 0, port 1, port 2, port 3, mỗi port đều có dùng thêm một IC logic 74245 dùng làm tầng khuếch đại tín hiệu trên các đường xuất nhập của các cảng.
Một khóa điện tắt mở nguồn dùng để cấp điện cho mạch, mạch chạy với đường nguồn 5V. Một khóa SW (DIP 4: 1, 2, 3, 4) dùng định hướng cho tín hiệu đi vào hoặc đi ra qua các IC 74245. Bo có 3 nút nhấn, một nút Reset (Key 3), 2 nút nhấn đặt trên chân 15 (Key 1, P3.2/T1) và chân 14 (Key 2, P3.3/T0). Trên mạch còn dùng một tụ điện 0.047υF và điện trở 100K và nút nhấn Reset dùng để xác lập lại trạng thái khởi đầu cho IC vi điều khiển AT89C51.
Sơ đồ mạch điện bộ phận vi điều khiển trung ương với IC AT89C51 như hình sau:
Mạch dùng một thạch anh 12MHz (gắn trên chân 18, chân 19) để định tần cho mạch dao động tạo xung nhịp, do trong ic AT89C51 có mạch chia tần 1/12, vậy trong ic AT89C51 có xung nhịp chính có tần số 1MHz (hay có chu kỳ lệnh là 1us). Trong mạch dùng 2 tụ điện nhỏ 33pF để bù nhiệt ổn tần.
Trong mạch còn dùng 3 thanh điện trở RN6, RN5, RN4 để treo (Pull up) cho các cảng p3, p2, p0 lên mức áp cao. Trị số các điện trở trong thanh đều lấy 10K.
Ngoài ra trên mạch còn cho gắn nhiều chân cấm dạng 8 bit dùng để tạo kết nối giữa bộ phận điều khiển trung ương với các mạch điện ngoại vi khác.
Nguyên lý vận hành của mạch điện như sau: Ngay khi Bạn nhấn nút mở điện, Led chỉ
thị trong mạch sẽ phát sáng, lúc này mạch đã được cấp điện và bắt đầu cho chạy các chương trình đã có trong bộ nhớ EEP-ROM. Bạn có thể kiểm tra tác động của các chương trình thông qua các kết nối với các dạng mạch Test (cùng có trên bo thực hành) thông qua các cảng, p0, p1, p2, p3 của IC vi điều khiển AT89C51.
Ở bộ phận này, Bạn làm các phép đo kiểm tra như sau:
* Dùng Volt kế DC đo kiểm tra mức áp +5V trên các chân 40 của U8 (AT89C51), trên chân 20 của các IC00 (74245), IC11 (74245), IC33 (74245), IC22 (74245).
* Dùng Volt kế AC (đủ nhậy) đỂ KIỂM TRA TÍN HIỆU DẠNG SIN TRÊN CHÂN 18, 19 CỦA U8 (AT89C51), NẾU THẤY KIM LÊN LÀ MẠCH DAO ĐỘNG CÓ CHẠY.
* Set các khóa điện S4 để chọn hướng đi của các tín hiệu qua các IC logic chọn đường 74245. Nếu cho chân 1 của các IC 74245 nối masse thì tín hiệu sẽ đi ra (từ IC AT89C51 đến các mạch bên ngoài) và nếu cho chân 1 lên mức áp cao thì hướng đi của tín hiệu sẽ đi từ ngoài vào IC AT8951.
Các mạch điện thực hành:
Hình chụp cho thấy: Trên Kit thực hành IC vi điều khiển AT89C51 có một dãy 32 Led,
chia ra làm 4 nhóm, mỗi nhóm 8 Led. Tất cả các Led đều có chân cathode cho nối masse và ở mỗi Led đều có dùng điện trở hạn dòng 100 ohm. Vậy các Led này sáng với mức áp cao.
Sơ đồ mạch điện cho thấy, Bạn có thể dùng bó dây 8 đường để kết nối các dãy Led với các cảng xuất nhập trên IC vi điều khiển AT89C51. Việc dùng Led để theo dõi trạng thái mức áp cao (úng với bit 1) và mức volt thấp (ứng với bit 0) trên các port của IC AT89C51 sẽ giúp cho chúng ta nhanh chóng biết được hoạt động của các chương trình đã nạp vào EEP-ROM của AT89C51. Tên đặt cho các nhóm 8 Led là JP4, JP7, JP2 và JP3. Bạn hãy dùng bó dây cho nối các nhóm Led này vào các port của AT89C51 và cho chạy thử các chương trình đã viết và đã nạp vào IC AT89C51. Hãy kiểm tra hoạt động của chương trình thông qua sự sáng tắt của các Led.
Bạn xem hình và sơ đồ mạch điện:
Hình chụp cho thấy trên bo Kit thực hành có gắn 8 bộ Led dùng làm các đèn hiện số theo dạng mã 7 đoạn (các đoạn đánh dấu a, b, c, d, e, f, g và dot).
Ở đây đèn số 7 đoạn dùng loại Led có cực anode chung. Để làm hiện các con số trong dãy 8 đèn sốnày, mạch dùng tính tắt mở của các transistor pnp (2SA564). Các chân a, b, c, d, e, f, dot, là các chân cathode của các Led trong đèn số 7 đoạn, các chân này cho nối vào một trạm nối 8 bit với các điện trở hạn dòng. Ở đây có 2 bộ kết nối JP5 (dùng lấy tín hiệu giải mã con số) và bộ kết nối JP16 (dùng cấp mã quét cấp cho chân B của 8
transistor 2SA1015).
Trong mạch, chân chung anode ( chân Common) của các đèn số 7 đoạn được cho nối vào chân C của các transistor pnp 2SA564, trên chân B của các transistor này có điện trở hạn dòng 10K cho nối vào bộ chân cấm JP16. Từ bộ chân cấm 8 dây này Bạn sẽ cho kết nối với một cảng của IC vi điều khiển AT89C51 để nhận xung quét (để mỗi lần chỉ cho hiện một con số).
Các chân cấp dòng cho các cathode (a, b, c, d, e, f, dot) cho nối với bộ chân cấm JP5 qua các điện trở hạn dòng 220 ohm. Bộ chân cấm này cũng sẽ cho nối với một cảng (tùy chọn) trên IC vi điều khiển AT89C51 để cấp dòng cho các Led trong các đèn số để phát sáng.
Bạn xem hình và sơ đồ mạch điện:
Ở đây dùng bảng ma trận Led 8x8 (trên bảng Led có 64 Led đỏ và 64 Led xanh) dùng để cho hiện ra các hình ảnh và con chữ và số. Vậy trên bảng ma trận này Bạn có thể tạo ra các hình ảnh tùy ý bằng các điểm sáng tắt của các Led (Led đỏ cho hình màu đỏ, Led xanh cho hình màu xanh và phối hợp Led đỏ, Led xanh sẽ có hình màu vàng).
Để tăng độ ổn định và độ sáng, trên mạch dùng thêm các ic khuếch đại ULN2803A. Trong ic ULN2803 là 8 mạch khuếch đại với các cặp transistor ráp theo kiểu darlington, nên ngả vào có trở kháng rất lớn và không gây nặng tải lên các đường ra trên các chân của các cảng, mạch khuếch đại còn dùng các diode hạn biên và diode ghim áp để tăng độ an toàn. Nguyên lý làm việc của bảng đèn ma trận 8x8 như sau:
Khi chân số 24 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 1 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 1.
Khi chân số 23 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 1 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 1.
Khi chân số 22 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 2 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 2.
Khi chân số 20 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 2 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 2.
Khi chân số 18 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 3 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 3.
Khi chân số 17 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 3 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 3.
Khi chân số 16 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 4 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác đinh trạng thái sáng tắt của 8 Led đỏ ở cột 4.
Khi chân số 15 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 4 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 4.
Khi chân số 1 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 5 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 5.
Khi chân số 2 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 5 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 5.
Khi chân số 4 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 6 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái
sáng tắt của 8 Led đỏ ở cột 6.
Khi chân số 5 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 6 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 6.
Khi chân số 7 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 7 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 7.
Khi chân số 8 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 7 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 7.
Khi chân số 9 cho xuống mức áp thấp thì lúc này cathode của 8 Led đỏ ở cột 8 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led đỏ ở cột 8.
Khi chân số 10 cho xuống mức áp thấp thì lúc này cathode của 8 Led xanh ở cột 8 sẽ cho nối masse, lúc này 8 bit cho ra trên 8 chân 22, 19, 16, 13, 3, 6, 9, 12 sẽ xác định trạng thái sáng tắt của 8 Led xanh ở cột 8.
Trên bo test đặt 16 phím nhấn dùng ma trận 4x4, như vậy mạch dùng 8 dây. trong đó có 4 dây cho treo lên mức áp cao với một thanh điện trở. Sơ đồ mạch điện như hình vẽ:
mạch điện cho thấy, trên ma trận 4x4 có 16 phím nhấn. Ở đây Bạn có thể cho bộ kết nối J27 nối vào port 1. Bạn sẽ viết một chương trình để vận hành 16 phím này, Bạn có thể qui định một phím sẽ cho chạy một chương trình đã chọn định trước.
Bạn xem sơ đồ mạch điện:
Bạn dùng các đường trên các chân p1.0, p1.1, p1.2, p1.3 làm các hàng (row). Trong lập trình bàn phím, các hàng cho là ngả vào, vậy bình thường cho ở mức “0”. Dùng các chân p1.4, p1.5, p1.6 và p1.7 làm các cột (column). Trong lập trình bàn phím, các cột cho là ngả ra, vậy bình thường cho ở mức “1”.
Mã quét bàn phím sẽ cho tìm bit “0” trên các cột, chúng ta biết, khi có một phím nhấn xuống thì lúc này sẽ xuất hiện bit “0” trên các cột. Chương trình sẽ chuyển qua cho quét tìm phím nhấn, sau đó nhẩy đến chương trình con của phím và cho chạy chương trình này.
Chúng ta biết, tín hiệu trong thế giới tự nhiên thường ở dạng analog (tín hiệu analog lấy mức volt để chỉ trạng thái khác nhau của tín hiệu), như nhiệt độ, sức gió, âm thanh… Trong khi đó, các ic vi điều khiển (cũng như các ic vi xử lý) chỉ làm việc với tín hiệu dạng số (digital, tín hiệu digital còn gọi là tín hiệu bit, nó lấy mức áp cao thấp để chỉ trạng thái