Giáo trình Vi điều khiển (Nghề: Điện công nghiệp - Cao đẳng) nhằm cung cấp cho người học những kiến thức cơ bản về vi điều khiển họ 8051 từ đó có thể giải thích được nguyên lý hoạt động của hệ dùng vi điều khiển và viết được các chương trình ứng dụng dùng vi điều khiển. Mời các bạn cùng tham khảo!
BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƢỜNG CAO ĐẲNG CƠ ĐIỆN XÂY DỰNG VIỆT XÔ KHOA: ĐIỆN – ĐIỆN TỰ ĐỘNG HĨA GIÁO TRÌNH MƠ ĐUN:VI ĐIỀU KHIỂN NGHỀ:ĐIỆN CƠNG NGHIỆP TRÌNH ĐỘ CAO ĐẲNG Ban hành kèm theo Quyết định số: /QĐ- ngày tháng năm 20 …… ……………… Ninh Bình, năm 2018 Ninh Bình 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin đƣợc phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Lập trình vi điều khiển mơ đun chun mơn mang tính đặc trƣng cao thuộc nghề Điện công nghiệp Mô đun có ý nghĩa định đến kỹ nhƣ kiến thức ngƣời học Sau học tập mơ đun này, học viên có đủ kiến thức để học tập tiếp mô đun nâng cao nhƣ Trang bị điện Kỹ thuật lập trình Giáo trình đƣợc thiết kế theo mô đun thuộc hệ thống mơ đun/ mơn học chƣơng trình đào tạo nghề Điện cơng nghiệp cấp trình độ Cao đẳng, đƣợc dùng làm giáo trình cho học viên khóa đào tạo chun ngành Ngồi ra, tài liệu đƣợc sử dụng cho đào tạo ngắn hạn cho kỹ thuật viên, công nhân kỹ thuật tham khảo Mô đun đƣợc triển khai sau môn học, mô đun điện tử bản, kỹ thuật xung – số Các kỹ lắp ráp, lập trình hay sửa chữa mạch điện tử khả trình máy cơng nghiệp yêu cầu bắt buộc kỹ thuật viên nghề Điện công nghiệp Mặc dù cố gắng, song sai sót khó tránh Tác giả mong nhận đƣợc ý kiến phê bình, nhận xét bạn đọc để giáo trình đƣợc hồn thiện Ninh Bình, ngày tháng năm 2019 Nguyễn Trung Toàn - Chủ biên Phạm Việt Anh Bùi Thế Văn MỤC LỤC VI ĐIỀU KHIỂN BÀI CÁC KHẢI NIỆM CƠ BẢN VỀ CẤU TRÚC CỦA VI ĐIỀU KHIỂN Giới thiệu chung Thuật ngữ Đơn vị xử lý trung tâm 10 Bộ nhớ bán dẫn RAM ROM 11 Các Bus địa 11 5.1 Bus liệu 11 5.2 Bus điều khiển 12 Các thiết bị xuất/nhập 12 6.1 Các thiết bị lƣu trữ lớn 12 6.2 Các thiết bị giao tiếp với ngƣời 12 6.3 Các thiết bị điều khiển/kiểm tra 13 So sánh vi xử lý vi điều khiển 13 Các tiêu chuẩn chọn loại vi điều khiển 15 BÀI 16 CẤU TRÚC PHẦN CỨNG CỦA VI ĐIỀU KHIỂN 8051 16 Giới thiệu chung 16 1.1 Cấu trúc vi điều khiển 16 1.2 Sơ đồ khối 17 Sơ đồ chân chức chân 17 Tổ chức nhớ bên 19 3.1 Tổ chức nhớ 19 3.2 RAM đa dụng 20 3.3 RAM truy xuất bit 20 3.4 Các bank ghi 21 Các ghi chức đặc biệt 21 4.1 Thanh ghi trạng thái chƣơng trình 21 4.2 Thanh ghi B 22 4.3 Con trỏ Ngăn xếp SP (Stack Pointer) 22 4.4 Con trỏ liệu DPTR (Data Pointer) 22 4.5 Các ghi Port (Port Register) 22 4.6 Các ghi Timer (Timer Register) 23 4.7 Các ghi Port nối tiếp (Serial Port Register) 23 4.8 Các ghi ngắt (Interrupt Register) 23 4.9 Thanh ghi điều khiển nguồn PCON (Power Control Register) 23 5.Tổ chức nhớ 23 5.1 Truy xuất nhớ chƣơng trình ngồi 24 5.2 Truy xuất nhớ liệu 25 Các phiên vi điều khiển họ MCS51 27 6.1 Bộ vi điều khiển 8031 27 6.2 Bộ vi điều khiển 8052 27 6.4 Bộ vi điều khiển 8751 27 6.5 Bộ vi điều khiển DS5000 Dallas Semiconductor: 28 Hoạt động reset vi điều khiển 28 BÀI 30 NGƠN NGỮ LẬP TRÌNH VI ĐIỀU KHIỂN 8051 30 Giới thiệu chung 30 Ngơn ngữ lập trình Asembly 30 2.1 Các cách định địa 30 2.2 Các nhóm lệnh 34 Ngơn ngữ lập trình C 39 3.1 Cấu trúc chƣơng trình 40 3.2 Câu lệnh lập trình 46 BÀI 48 TẬP LỆNH CỦA VI ĐIỀU KHIỂN 8051 48 Giới thiệu chung 48 Các chế độ định địa 48 Các nhóm lệnh 51 Điều khiển giao tiếp với LED đơn 52 4.1 Phân tích sơ đồ nguyên lý 52 4.2 Phân tích sơ đồ thuật toán 53 4.3 Viết chƣơng trình điều khiển 53 4.4 Mô hoạt động 55 Điều khiển giao tiếp với LED đoạn 56 5.1 Phân tích sơ đồ nguyên lý 56 5.2 Phân tích lƣu đồ thuật tốn 57 5.3 Viết chƣơng trình điêu khiển 57 5.4 Mô hoạt động 59 Điều khiển giao tiếp với LED ma trận 60 6.1 Phân tích sơ đồ nguyên lý 60 6.2 Phân tích lƣu đồ thuật tốn 61 6.3 Viết chƣơng trình điều khiển 61 6.4 Mô hoạt động 65 Điều khiển giao tiếp với LCD 16x2 66 7.1 Phân tích sơ đồ nguyên lý 66 7.2 Phân tích lƣu đồ thuật toán 67 7.3 Viết chƣơng trình điều khiển 68 7.4 Mô hoạt động 70 BÀI 71 GIỚI THIỆU HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI 71 TRONG VI ĐIỀU KHIỂN 8051 71 Giới thiệu chung 71 Bộ định thời vi điều khiển 8051 71 2.1 Thanh ghi điều khiển chế độ timer TMOD 71 2.2 Thanh ghi điều khiển timer TCON 72 2.3 Các chế độ làm việc 73 Phƣơng pháp lập trình điều khiển định thời 75 Ứng dụng định thời gian lập trình điều khiển thiết bị ngoại vi 76 4.1 Lập trình điều khiển 76 4.2 Lựa chọn kiểm tra linh kiện 78 4.3 Lắp ráp mạch 78 4.4 Kiểm tra, chạy thử 78 Ứng dụng đếm kiện lập trình điều khiển thiết bị ngoại vi 79 4.1 Lập trình điều khiển 79 4.2 Lựa chọn kiểm tra linh kiện 80 4.3 Lắp ráp mạch 80 4.4 Kiểm tra, chạy thử 80 BÀI 6: HOẠT ĐỘNG NGẮT TRONG VI ĐIỀU KHIỂN 8051 81 Giới thiệu chung 81 Ngắt vi điều khiển 8051 82 2.1 Thanh ghi cho phép không cho phép ngắt 82 2.2 Thanh ghi ƣu tiên ngắt 82 2.3 Chuỗi Pooling 83 2.4 Vector ngắt 83 Lập trình điều khiển ngắt 84 Ứng dụng ngắt ngồi lập trình điều khiển thiết bị ngoại vi 84 4.1 Lập trình điều khiển 84 4.2 Lựa chọn kiểm tra linh kiện 86 4.3 Lắp ráp mạch 86 4.4 Kiểm tra chạy thử 87 Ứng dụng ngắt định thời lập trình điều khiển thiết bị ngoại vi 87 5.1 Lập trình điều khiển 87 5.2 Lựa chọn kiểm tra linh kiện 88 5.3 Lắp ráp mạch 88 5.4 Kiểm tra, chạy thử 88 MÔ ĐUN: VI ĐIỀU KHIỂN Mã mơ đun: MĐ 25 Vị trí, tính chất, ý nghĩa vai trị mơ đun - Mơ đun lập trình vi điều khiển học sau mơn học Kỹ thuật số, Linh kiện điện tử mạch điện tử - Là mô đun đào tạo chuyên ngành - Mơ đun có vai trị cung cấp cho ngƣời học kiến thức vi điều khiển họ 8051 từ giải thích đƣợc ngun lý hoạt động hệ dùng vi điều khiển viết đƣợc chƣơng trình ứng dụng dùng vi điều khiển Mục tiêu mô đun: - Hiểu cấu tạo nguyên lý hoạt động vi điều khiển 8051 - Giải thích đƣợc nguyên lý hoạt động hệ dùng vi điều khiển - Viết đƣợc chƣơng trình ứng dụng dùng vi điều khiển - Thay khối chức hƣ hỏng hệ dùng vi điều khiển - Vận hành đƣợc thiết bị dây chuyền sản xuất dùng vi điều khiển - Có ý thức sử dụng trang thiết bị vận hành đƣợc thiết bị có hiệu quả, tuổi thọ cao Nội dung mô đun: Thời gian(giờ) Số Tên mô đun Tổng Lý Thực Kiểm TT số thuyết hành tra* Các khái niệm cấu trúc 4 vi điều khiển Cấu trúc phần cứng vi điều 4 khiển Ngôn ngữ lập trình vi điều khiển 24 14 Tập lệnh vi điều khiển 8051 36 25 Giới thiệu hoạt động định 10 thời vi điều khiển 8051 Giới thiệu hoạt động ngắt vi 12 5 điều khiển Tổng 90 34 50 BÀI CÁC KHẢI NIỆM CƠ BẢN VỀ CẤU TRÚC CỦA VI ĐIỀU KHIỂN Mã bài: MĐ 25.01 Giới thiệu: Ứng dụng vi điều khiển để giải toán điều khiển cỡ nhỏ cỡ trung phổ biến lĩnh vực đời sống Việc giới thiệu lịch sử đời trình phát triển vi điều khiển nhằm cung cấp cho ngƣời học tổng quan vi điều khiển nhƣ hƣớng phát triển tƣơng lai Mục tiêu: - Hiểu lịch sử phát triển vi điều khiển - Hiểu đƣợc cấu trúc chung vi điều khiển - Biết đƣợc lĩnh vực ứng dụng hƣớng phát triển tƣơng lai vi điều khiển Nội dung chính: Giới thiệu chung Vi xử lý (viết tắt µP hay uP), đơi cịn đƣợc gọi vi xử lý, linh kiện điện tử đƣợc chế tạo từ tranzito thu nhỏ tích hợp lên vi mạch tích hợp Khối xử lý trung tâm (CPU) vi xử lý đƣợc nhiều ngƣời biết đến nhƣng nhiều thành phần khác máy tính có vi xử lý riêng nó, ví dụ card hình (video card) có vi xử lý Hình 1.1 Bộ vi xử lý Intel 80486DX2 Trƣớc xuất vi xử lý, CPU đƣợc xây dựng từ mạch tích hợp cỡ nhỏ riêng biệt, mạch tích hợp chứa khoảng vào chục tranzito Do đó, CPU bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp ngày nay, cơng nghệ tích hợp phát triển, CPU tích hợp lên vài vi mạch tích hợp cỡ lớn, vi mạch tích hợp cỡ lớn chứa hàng ngàn hàng triệu tranzito Nhờ cơng suất tiêu thụ giá thành vi xử lý giảm đáng kể Vi điều khiển máy tính đƣợc tích hợp chíp, thƣờng đƣợc sử dụng để điều khiển thiết bị điện tử Vi điều khiển, thực chất, hệ thống bao gồm vi xử lý có hiệu suất đủ dùng giá thành thấp (khác với vi xử lý đa dùng máy tính) kết hợp với khối ngoại vi nhƣ nhớ, mô đun vào/ra, mô đun biến đổi số sang tƣơng tự tƣơng tự sang số, Ở máy tính mơ đun thƣờng đƣợc xây dựng chíp mạch ngồi Vi điều khiển thƣờng đƣợc dùng để xây dựng hệ thống nhúng Nó xuất nhiều dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phƣơng tiện, dây chuyền tự động, v.v Hầu hết vi điều khiển ngày đƣợc xây dựng dựa kiến trúc Harvard, kiến trúc định nghĩa bốn thành phần cần thiết hệ thống nhúng Những thành phần lõi CPU, nhớ chƣơng trình (thơng thƣờng ROM nhớ Flash), nhớ liệu (RAM), vài định thời cổng vào/ra để giao tiếp với thiết bị ngoại vi mơi trƣờng bên ngồi - tất khối đƣợc thiết kế vi mạch tích hợp Vi điều khiển khác với vi xử lý đa chỗ hoạt động với vài vi mạch hỗ trợ bên Thuật ngữ Một máy tính ( Computer ) đƣợc định nghĩa hai điểm : + Khả đƣợc lập trình để thao tác liệu mà không cần đến can thiệp ngƣời + Khả lƣu trữ khôi phục liệu Tổng quát hơn, hệ máy tính ( Computer system ) bao gồm thiết bị ngoại vi ( peripheral device ) để truyền thông với ngƣời nhƣ chƣơng trình ( program ) đế xử lý liệu Thiết bị phần cứng ( hardware ) chƣơng trình phần mềm ( software ) Chúng ta bắt đầu với phần cứng máy tính cách khảo sát sơ đồ khối máy tính cổ điển: Hình 1.2 Sơ đồ khối máy tính cổ điển ALU (đơn vị logic số học) thực tốn cho máy tính bao gồm: +, *, /,-, phép toán logic, … - Control (điều khiển): điều khiển, kiểm soát đƣờng liệu thành phần máy tính - Memory (bộ nhớ): lƣu trữ chƣơng trình hay kết trung gian - Input (nhập), Output (Xuất): xuất nhập liệu (còn gọi thiết bị ngoại vi) Về kiến trúc vi xử lý gồm phần cứng sau: Đơn vị xử lý trung tâm CPU (Central Processing Unit) Các nhớ (Memories) Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O Ports)) Các đếm/bộ định thời (Timers) Hệ thống BUS (Địa chỉ, liệu, điều khiển) Ngoài với loại vi điều khiển cụ thể cịn có thêm số phần cứng khác nhƣ biến đổi tƣơng tự-số ADC, biến đổi số-tƣơng tự DAC, mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não vi xử lý CPU, phần cứng khác quan chấp hành dƣới quyền CPU Mỗi quan có chế hoạt động định mà CPU phải tuân theo giao tiếp với chúng Hình 1.3 Sơ đồ khối hệ vi xử lý Để giao tiếp điều khiển quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu tín hiệu địa (Address), tín hiệu liệu (Data) tín hiệu điều khiển (Control) Về mặt vật lý tín hiệu đƣờng nhỏ dẫn điện nối từ CPU đến ngoại vi chí ngoại vi với Tập hợp đƣờng tín hiệu có chức gọi bus Nhƣ ta có bus địa chỉ, bus liệu bus điều khiển Đơn vị xử lý trung tâm CPU có cấu tạo gồm có đơn vị xử lý số học lôgic (ALU), ghi, khối lôgic mạch giao tiếp Chức CPU tiến hành thao tác tính tốn xử lý, đƣa tín hiệu địa chỉ, liệu điều khiển nhằm thực nhiệm vụ ngƣời lập trình đƣa thơng qua lệnh (Instructions) 10 Mặc định giá trị ghi TLx, THx Nghĩa Timer/Counter hoạt động, đếm đếm từ 65535 (với chế độ 16 bit) xảy tràn Nghĩa đếm đếm đƣợc (65535 – + =65536 lần) xảy tràn Nhƣng ta muốn cho đếm đếm 100 lần tràn Vậy ta phải ghán giá trị cho ghi TLx, THx để bắt đầu đếm từ giá trj mà ta gán, tràn (=65535) đƣợc 100 lần đếm Vậy ta phải gán cho TLx, THx giá trị: 65536 -100 = 65436 Do phải gán cho ghi bit, nên ta phải đổi số 65436 thành byte thấp vào cao để gán cho TLx, THx 65436 đổi sang dạng hexa ta đƣợc: 0xFF9C Do ta gán TLx = 0x9C THx = 0xFF Việc tính tốn giá trị gán cho ghi TLx, THx quan trọng Nó yêu cầu bạn phải biết tần số hoạt động Timer/Counter, thời gian bạn muốn xảy kiện tràn Từ bạn tính số lần Timer/Counter cần đếm (gọi n) để giá trị bị tràn Sau lấy 65536 – n (với chế độ 16 bit), đƣợc giá trị cần gán cho TLx, THx Lấy ví dụ này: Ta cần cài đặt Timer/Counter hoạt động để 10ms xảy tràn Biết thạch anh 12MHz Tính giá trị cần gán cho ghi TL0, TH0 Với thạch anh 12MHz, ==>tần số hoạt động Timer/Counter là: (1/12)*12 = 1MHz nghĩa xung nhịp (1us) đếm tăng thêm giá trị ==> Để 10ms = 10000us xảy tràn cần cho đếm đếm 10000 lần (n=10000) ==>giá trị gán cho TL0, TH0: 65536 -10000 = 55536 = 0xD8F0 ==> TL0 = 0xF0, TH0 = 0xD8 Bƣớc 3: Bật bit TRx để khởi động Timer/Counter Ứng dụng định thời gian lập trình điều khiển thiết bị ngoại vi Bộ định thời gian vi điều khiển đƣợc ứng dụng nhiều toán điều khiển thiết bị Các toán cần điều khiển tuần tự, khởi động dừng thiết bị Bộ định thời gian đóng cắt cách xác, giải pháp tiết kiệm tối ƣu chi phí nhân cơng thời gian vận hành 4.1 Lập trình điều khiển Ví dụ: Tạo xung có tần số 2KHz chân P2.0, độ rộng mức chiếm 70%, độ rộng mức chiếm 30% Biết mạch sử dụng thạch anh có tần số 12MHz - Do mạch sử dụng thạch anh có tần số 12MHz => tần số xung nhịp cấp cho timer/counter (1/12)*12=1MHz (Mỗi xung clock 1us) - Do yêu cầu xung có tần số f = 2KHz =>T = 1/f = 0.5ms = 500us =>Cần cho timer/counter đếm 500 lần - Độ rộng mức chiếm 70% => ta set chân P2.0 lên timer/counter cho đếm 350 lần - Độ rộng mức chiếm 30% => tiếp theo, clear chân P2.0 cho timer/counter đếm 150 lần 76 - Chúng ta hình dung qua hình vẽ dƣới: Hình 5.5 Độ rộng xung Ở chọn timer/counter 0, để thực toán Do giá trị gán cho ghi đếm vƣợt 255 nên ta sử dụng timer/counter mode 16 bit (TMOD = 0x01) 77 4.2 Lựa chọn kiểm tra linh kiện Trong toán này, cần lựa chọn linh kiện sau: - Vi điều khiển 8051 - Thạch anh 12MHz: tìm kiếm từ khóa “CRYSTAL” - OsiloScope: lấy phần thiết bị đo lƣờng - Đèn LED - Tụ điện xoay chiều 33pF: tìm kiếm từ khóa “CAP” 4.3 Lắp ráp mạch Sau lấy linh kiện, tiến hành xếp linh kiện đấu nối theo sơ đồ Hình 5.6 Sơ đồ mạch điều khiển động rộng xung 4.4 Kiểm tra, chạy thử Khi kết nối đƣợc mạch theo sơ đồ, tiến hành nạp file hex từ chƣơng trình vào chip vi điều khiển, ấn nút Play để chạy mô Chúng ta nhấp chuột vào OsiloScope.Trên hình OsiloSope hiển thị tần số đầu chân PWM Nếu độ rộng xung không theo yêu cầu đề ta kiểm tra lại Timer chƣơng trình viết Để quan sát rõ chỉnh độ chia OsiloScope 78 Ứng dụng đếm kiện lập trình điều khiển thiết bị ngoại vi 4.1 Lập trình điều khiển Ở phần ta sử dụng định thời 8051 để tạo độ trễ thời gian Các định thời đƣợc dùng nhƣ đếm (counter) kiện xảy bên 8051 Công dụng đếm kiện đƣợc tình bày phần Chừng cịn liên quan đến công dụng định thời nhƣ đếm kiện vấn đề mà ta nói lập trình định thời phần trƣớc đƣợc áp dụng cho việc lập trình nhƣ đếm ngoại trừ nguồn tần số Đối với định thời/bộ đếm dùng nhƣ định thời nguồn tần số tần số thạch anh 8051 Tuy nhiên, đƣợc dùng nhƣ đếm nguồn xung để tăng nội dung ghi TH TL từ bên 8051 Ở chế độ đếm, lƣu ý ghi TMOD TH, TL giống nhƣ định thời đƣợc bàn phần trƣớc, chí chúng có tên gọi Các chế độ đếm giống - Bit C/T ghi TMOD Xem lại phần bit C/T ghi TMOD: ta thấy định nguồn xung đồng hồ cho đếm: Ø Nếu bit C/T = định thời nhận xung đồng hồ từ giao động thạch anh 8051 Ø Nếu bit C/T = định thời đƣợc sử dụng nhƣ đếm nhận xung đồng hồ từ nguồn bên 8051 Do vậy, bit C/T = đếm tăng lên xung đƣợc đƣa đến chân P3.4 (T0) counter0 chân P3.5 (T1) counter1 - Ví dụ : Chƣơng trình sau sử dụng đếm 1, đếm xung chân P3.5 hiển thị số đếm đƣợc (trong ghi TL1) lên cổng P2: #include //khai báo thƣ viện 89x51 main() //chƣơng trình { TMOD=0x60; //0x60=0110 000 : C/T=1, đếm 1, chế độ tự nạp TH1=0x00; //xóa đếm ban đầu P3_5=1; //set chân vào cho đếm TR1=1; //khởi động đếm while(1) //vịng lặp vơ hạn { P2=TL1; //hiển thị số đếm đƣợc cổng P2 } 79 } 4.2 Lựa chọn kiểm tra linh kiện Trong toán này, cần lựa chọn linh kiện sau: - Vi điều khiển 8051 - Thạch anh 12MHz: tìm kiếm từ khóa “CRYSTAL” - OsiloScope: lấy phần thiết bị đo lƣờng - Đèn LED đoạn - Tụ điện xoay chiều 33pF: tìm kiếm từ khóa “CAP” - Nút ấn “Button” 4.3 Lắp ráp mạch Sau lựa chọn linh kiện, lấy linh kiện phần mềm Protues vẽ sơ đồ kết nối nhƣ hình Port điều khiển liệu cấp cho LED đoạn Hình 5.7 Điều khiển đếm ngồi 4.4 Kiểm tra, chạy thử Khi kết nối đƣợc mạch theo sơ đồ, tiến hành nạp file hex từ chƣơng trình vào chip vi điều khiển, ấn nút Play để chạy mô Chúng ta chạy thử chƣơng trình cách ấn Nút Khi tác động xung vào giá trị đèn LED đƣợc tăng lên đơn vị Nếu tác động nút mà đèn khơng hiển thị lại bảng mã LED đoạn khai báo đếm chƣơng trình Trong ví dụ sử dụng counter1 nhƣ đếm kiện để đếm lên xung đồng hồ đƣợc cấp đến chân P3.5 Các xung đồng hồ biểu diễn số ngƣời qua cổng số vòng quay kiện khác mà chuyển đổi thành xung 80 BÀI 6: HOẠT ĐỘNG NGẮT TRONG VI ĐIỀU KHIỂN 8051 Mã bài: MĐ 25.06 Giới thiệu: Mục tiêu: - Hiểu đƣợc tác dụng thực tế hệ thống sử dụng ngắt - Lập trình đƣợc tốn sử dụng ngắt Nội dung chính: Giới thiệu chung Ngắt xuất điều kiện, kiện làm tạm dừng chƣơng trình điều kiện đƣợc phục vụ chƣơng trình khác Ngắt có vai trị quan trọng thiết kế thực ứng dụng vi điều khiển Chúng cho phép hệ thống đáp ứng không đồng với kiện xử lý kiện chƣơng trình khác hoạt động Một hệ thống đƣợc điều khiển ngắt tạo ảo giác thực đồng thời nhiều công việc lúc Dĩ nhiên, thời điểm CPU thực nhiều lệnh nhƣng tạm dừng chƣơng trình để thực chƣơng trình khác sau trở lại chƣơng trình Điểm khác hệ thống điều khiển ngắt, ngắt không xảy nhƣ kết lệnh (nhƣ lệnh gọi chƣơng trình con) mà đáp ứng với kiện xảy cách khơng đồng với chƣơng trình có nghĩa khơng biết trƣớc chƣơng trình bị ngắt lúc Chƣơng trình xử lý ngắt đƣợc gọi chƣơng trình phục vụ ngắt (Interrupt service routine) viết tắt ISR hay quản lý ngắt ISR hoạt động để đáp ứng ngắt thƣờng thực thao tác vào đến thiết bị Khi xảy ngắt chƣơng trình tạm thời dừng lại rẽ nhánh đến ISR ISR thực thao tác cần thiết kết thúc với lệnh trở từ ngắt chƣơng trình lại tiếp tục từ nơi tạm dừng Nhƣ nói chƣơng trình hoạt động mức sở ISR hoạt động mức ngắt có dùng thuật ngữ: “phía trƣớc” (foreground) để mức sở “phía sau” (backgrround) để mức ngắt Một ví dụ điển hình ngắt ứng dụng lị vi sóng: Chƣơng trình điều khiển phần tử tạo lƣợng vi sóng để nấu ăn, nhƣng nấu hệ thống cần phải đáp ứng việc nhập tay cửa lị ví dụ tăng giãm thời gian nấu Khi ngƣời sử dụng thả nút nhấn, ngắt đƣợc tạo (có thể tín hiệu chuyển từ mức cao xuống mức thấp) chƣơng trình bị dừng lại, chƣơng trình ISR hoạt động đọc mã bàn phím thay đổi q trình nấu tƣơng ứng sau chấm dứt cách chuyển điều khiển cho chƣơng trình chính, chƣơng trình lại tiếp tục từ nơi bị ngắt Một điểm quan trọng ví dụ việc nhập tay xảy cách không đồng có nghĩa khơng biết trƣớc khơng đƣợc điều khiển phần mềm chạy hệ thống Đó đặc điễm ngắt 81 vectơ ngắt Cờ ngắt xảy Trình phục vụ ngắt Chƣơng trình hành Cách nhìn ngắn gọn chƣơng trình thực thi khơng có ngắt Cách nhìn ngắn gọn chƣơng trình thực thi có ngắt Bắt đầu trình phục vụ ngắt Kết thúc trình phục vụ ngắt Hình 6.1 Thực chương trình Ngắt vi điều khiển 8051 2.1 Thanh ghi cho phép không cho phép ngắt Mỗi nguồn ngắt đƣợc cho phép không cho phép thông qua ghi chức đặc biệt có bit đƣợc địa hóa IE (Interrupt Enable) địa 0A8H Mô tả Bit Symbol Address (1: cho phép, 0: không cho phép) IE.7 EA AFH Cho phép, khơng cho phép tồn cục IE.6 AEH Khơng xác định IE.5 ET2 ADH Cho phép ngắt timer 2(có 8952) IE.4 ES ACH Cho phép ngắt nối tiếp IE.3 ET1 ABH Cho phép ngắt timer1 IE.2 EX1 AAH Cho phép ngắt bên (INT 1) IE.1 ET0 A9H Cho phép ngắt timer0 IE.0 EX0 A8H Cho phép ngắt bên (INT 0) 2.2 Thanh ghi ƣu tiên ngắt Khi có nhiều ngắt đƣợc cho phép, số ngắt đƣợc chọn ƣu tiên cao Nếu ngắt đƣợc chọn ƣu tiên làm cho ngắt khác thực thi tạm dừng trình phục vụ ngắt ƣu tiên kết thúc Trong tình khác, hai ngắt xảy lúc, ngắt có mức ƣu tiên cao làm trƣớc Ở vi điều khiển 89xxx, chƣơng trình có sử dụng ngắt đƣợc chia làm mức: mức (thƣờng cho chƣơng trình chính), mức ngắt ƣu tiên ngắt có ngắt đƣợc ƣu tiên cao có nhiều ngắt đƣợc cho phép Mỗi nguyên nhân ngắt riêng rẽ đƣợc lập trình để có hai mức ƣu tiên thông qua ghi chức đặt biệt IP (interrupt priority) 82 Bit Symbol Bit Address IP.7 IP.6 IP.5 IP.4 IP.3 ET2 ES ET1 ADH ACH ABH IP.2 EX1 AAH IP.1 ET0 A9H IP.0 EX0 A8H Description (1: ƣu tiên, 0: không ƣu tiên) Không sử dụng Không sử dụng Ƣu tiên ngắt định thời Ƣu tiên ngắt port nối tiếp Ƣu tiên ngắt định thời Ƣu tiên ngắt bên (INT 1) Ƣu tiên ngắt định thời Ƣu tiên ngắt bên ngồi (INT 0) 2.3 Chuỗi Pooling Nếu nhƣ có nhiều ngắt xuất đồng thời, chuỗi vòng xác định ngắt thực trƣớc Chuỗi vòng là: Ngắt 0, ngắt định thời 0, ngắt 1, ngắt định thời 1, ngắt port nối tiếp, ngắt định thời Hình 6.2 Cấu trúc ngắt 8051 2.4 Vector ngắt Khi có kiện ngắt (Cờ ngắt) xuất hiện, chƣơng trình ngắt bắt đầu địa cố định – gọi vectơ ngắt Interrupt Flag Interrupt Vector System Reset RST 0000h External IE0 0003H Timer TF0 000BH External IE1 0013H 83 Timer Serial Port Timer2 TF1 001BH RI, TI 0023H TF2 & EXF2 002BH (vđk 8952) Lập trình điều khiển ngắt Để sử dụng ngắt ngồi 8051, cấu hình theo bƣớc sau: - Bƣớc 1: Bật bit cho phép ngắt (EX0 = 1), (EX1 = 1), bật hai sử dụng ngắt ngồi - Bƣớc 2: Cấu hình chế độ ngắt kích phát sƣờn kích phát mức cho ngắt ngồi 0, cách bật xóa bit IT0, IT1 - Bƣớc 3: Bật bit cho phép ngắt toàn cục (EA = 1) - Bƣớc 4: Viết chƣơng trình phục vụ ngắt Chƣơng trình ngắt cho 8051 Keil C đƣợc viết theo cú pháp sau Ví dụ, để sử dụng ngắt ngồi ta phải điền x 0, ngắt điền x (dựa theo bảng trên) Ví dụ chƣơng trình ngắt phục vụ ngắt ta thƣờng viết nhƣ sau: Ứng dụng ngắt ngồi lập trình điều khiển thiết bị ngoại vi 4.1 Lập trình điều khiển Các ngắt ngồi xảy có mức thấp cạnh xuống chân /INT0 /INT1 vi điều khiển Các cờ tạo ngắt bít IE.0 IE.1 ghi TCON, cờ tạo ngắt bị xóa phần cứng CPU trỏ đến ISR ngắt loại tác động cạnh, ngắt tác động mức nguồn tạo ngắt bên sẻ điều khiển mức cờ ngắt Việc chọn lựa ngắt tác động mức thấp tác động cạnh âm đƣợc đƣợc lập trình thơng qua bít IT0 IT1 ghi TCON VD: Nếu IT1 = ngắt ngồi đƣợc kích mức thấp chân INT1 IT1 = ngắt đƣợc kích cậnh âm Trong chế độ mẫu chân INT1 mức cao chu kỳ mức thấp chu kỳ cờ IE1 TCON đƣợc set sau cờ sẻ yêu cầu ngắt Vì chân ngắt ngồi đƣợc lấy mẫu chu kỳ máy lần nên ngỏ vào phải đƣợc trì 12 chu kỳ dao động để bảo đãm việc lấy mẫu thích hợp Nếu loại tác động cạnh nguồn ngồi phải giữ mức cao chu kỳ mức thấp chu kỳ để bảo đảm nhận đƣợc chuyển mức IE0 IE1 đƣợc xóa tự động CPU trỏ đến ngắt Nếu ngắt ngồi loại tác động mức nguồn ngồi phải trì mức tác động ngắt yêu cầu thực đƣợc tạo Sau phải trở mức khơng tác động trƣớc ISR hoàn tất 84 trƣớc ngắt khác đƣợc tạo Thông thƣờng thao tác ISR làm cho nguồn tạo ngắt trả tín hiệu ngắt trở trạng thái khơng tác động Ví dụ: Viết chƣơng trình sử dụng nút nhấn để điều khiển hiển thị số có chữ số led số nhƣ sau: Mặc định bắt đầu, led hiển thị số Mỗi lần nhấn nút 1, giá trị led tăng đơn vi Khi giá trị led lớn 9, led hiển thị quay trở lại số Mỗi lần nhấn nút 2, giá trị led giảm đơn vị, giá trị led nhỏ thua 0, led hiển thị số Ta sử dụng nút nhấn nối vào chân ngắt ngoài: Nút nối vào chân ngắt (chân P3.2), nút nối vào chân ngắt (chân P3.2) Port đƣợc sử dụng để xuất giá trị hiển led Trong chƣơng trình, ta sử dụng biến x, kiểu có dấu(signed), để sử dụng làm biến tăng giảm hiển thị led Một mảng gồm 10 phần tử chứa mã led anot chung số từ 0->9 đƣợc khai báo đầu chƣơng trình Tiếp theo, hàm main, cấu hình sử dụng ngắt ngồi Do yêu cầu toán nhấn nút tăng giá trị biến, nên sử dụng ngắt kích phát mức bit IT1 =1, IT0 =1 Trong vịng lặp vơ tận while(1), cần xuất giá trị biến x led 7, việc tăng giảm biến đƣợc thực chƣơng trình phục vụ ngắt ngồi Chƣơng trình thực ngắt đƣợc viết nhƣ sau: 85 4.2 Lựa chọn kiểm tra linh kiện Trong toán này, cần lựa chọn linh kiện sau: - Vi điều khiển 8051 - Thạch anh 12MHz: tìm kiếm từ khóa “CRYSTAL” - OsiloScope: lấy phần thiết bị đo lƣờng - Đèn LED đoạn - Tụ điện xoay chiều 33pF: tìm kiếm từ khóa “CAP” - Nút ấn “Button” - Điện trở 10k 4.3 Lắp ráp mạch - Sau lấy linh kiện, lắp ráp mạch theo sơ đồ sau Trong trình lắp ráp mạch, cần lƣu ý sơ đồ nút ấn kết nối vào vi điều khiển Sơ đồ mô đƣợc vẽ nhƣ sau Hình 6.3 Mạch sử dụng ngắt ngồi 86 4.4 Kiểm tra chạy thử Khi kết nối đƣợc mạch theo sơ đồ, tiến hành nạp file hex từ chƣơng trình vào chip vi điều khiển, ấn nút Play để chạy mô Khi ta tác động Nút giá trị hiển thị LED đoạn tăng lên đơn vị Khi ta tác động Nút giá trị hiển thị LED đoạn giảm đơn vị Trong trình hoạt động LED hiển thị giá trị khơng ta cần kiểm tra lại chƣơng trình hiển thị chƣơng trình phục vụ ngắt Ứng dụng ngắt định thời lập trình điều khiển thiết bị ngoại vi 5.1 Lập trình điều khiển Các ngắt Timer xảy kiện tràn Timer, cờ tràn TF0 hoăc TF1 đƣợc đặt Khi ISR đƣợc đáp ứng, cờ TF0 hoăc TF1 tự động đƣợc xóa phần mềm Ví dụ: Hãy viết chƣơng trình nhận liên tục liệu Bit cổng P0 gửi đến cổng P1 lúc tạo sóng vng chu kỳ 200ms chân P2.1 Hãy sử dụng bộTimer0 để tạo sóng vng, tần số 8051 XTAL = 11.0592MHz Lời giải: Chu kỳ 200ms, nửa chu kỳ 100ms Ta có: 100ms/1,085ms=92 Suy giá trị cần nạp cho timer0 là: -92 A4H Ta sử dụng timer0 bit #include main() { TMOD=0x02; TL0=0xA4; TH0=0xA4; TR0=1; IE=0x82; while(1) { P1=~P0; } //khai báo thu viện cho VÐK 89x51 //chọn timer0, chế độ 2, 8Bit tự nạp lại //nạp giá trị cho TL0 //nạp giá trị cho TH0 //khởi động timer0 //cho phép ngắt timer0 //vòng lặp vô hạn //Cập nhật giá trị cho cổng P1 từ P0 } void songvuong(void) interrupt //Khai báo trình phục vụ ngắt cho timer0 { TR0=0; //Ngừng timer0 P2_1=~P2_1; //Đảo trạng thái chân P2_1 TR0=1; //Khởi động timer0 //Không cần xóa cờ TF0, 8051 tự động xóa } 87 5.2 Lựa chọn kiểm tra linh kiện Trong toán này, cần lựa chọn linh kiện sau: - Vi điều khiển 8051 - Thạch anh 12MHz: tìm kiếm từ khóa “CRYSTAL” - OsiloScope: lấy phần thiết bị đo lƣờng - Đèn LED đơn - Tụ điện xoay chiều 33pF: tìm kiếm từ khóa “CAP” - Nút ấn “Button” - Điện trở 10k 5.3 Lắp ráp mạch Sau lấy linh kiện, ta tiến hành vẽ mạch kết nối theo sơ đồ sau: Hình 6.4 Mạch sử dụng ngắt định thời 5.4 Kiểm tra, chạy thử Sau kết nối mạch xong, tiến hành nạp file hex vào vi điều khiển ấn nút Play để chạy mô Khi ta tác động nút ấn có xung vng hiển thị đầu Port Nếu ta tác động mà khơng có xung đầu cần kiểm tra lại sơ đồ đấu nút ấn, sau kiểm tra phần chƣơng trình ngắt 88 Yêu cầu đánh giá kết học tập * Về kiến thức: - Hiểu cấu tạo vi điều khiển 8051 - Ứng dụng định thời để tạo thời gian trễ - Biết công dụng cách sử dụng ngắt - Truyền liệu kiểu nối tiếp - Giải thích sơ đồ mạch - Viết chƣơng trình ứng dụng theo yêu cầu *Về kỹ năng: - Lắp ráp đƣợc mạch điều khiển theo sơ đồ có sẵn - Phân tích đƣợc tƣợng phán đốn ngun nhân gây hƣ hỏng mạch điều khiển thiết bị đo - Sửa đƣợc chƣơng trình điều khiển * Về thái độ - Nghiêm túc, tích cực, chủ động học tập - Chấp hành nghiêm chỉnh nội quy xƣởng phòng thực hành vi điều khiển 89 TÀI LIỆU THAM KHẢO [1]- Tống Văn On, Hoàng Đức Hải, Họ vi điều khiển 8051, NXB Lao đông xã hội, Hà Nội 2005 [2]- Ngô Diên Tập, Lập trình hợp ngữ, NXB Khoa học kỹ thuật, Hà Nội 1998 [3]- Ngô Diên Tập, Vi xử lý đo lường điều khiển, NXB Khoa học kỹ thuật, Hà Nội 1999 [4]- Đỗ Xuân Thụ, Hồ Khánh Lâm, Kỹ thuật vi xử lý máy tính, NXB Giáo dục, Hà Nội 2000 [5]- Nguyễn Tăng Cƣờng, Phan Quốc Thắng, Cấu trúc lập trình vi điều khiển, NXB Khoa học kỹ thuật, Hà Nội 2004 [6]- Ngô Diên Tập, Vũ Trung Kiên, Phạm Xuân Khánh, Kiều Xuân Thực, Giáo trình vi xử lý cấu trúc máy tính, NXB Giáo dục, Hà Nội 2007 90 ... niệm cấu trúc 4 vi điều khiển Cấu trúc phần cứng vi điều 4 khiển Ngôn ngữ lập trình vi điều khiển 24 14 Tập lệnh vi điều khiển 8051 36 25 Giới thiệu hoạt động định 10 thời vi điều khiển 8051 Giới... tiêu mô đun: - Hiểu cấu tạo nguyên lý hoạt động vi điều khiển 8051 - Giải thích đƣợc nguyên lý hoạt động hệ dùng vi điều khiển - Vi? ??t đƣợc chƣơng trình ứng dụng dùng vi điều khiển - Thay khối... Bộ vi điều khiển 8031 27 6.2 Bộ vi điều khiển 8052 27 6.4 Bộ vi điều khiển 8751 27 6.5 Bộ vi điều khiển DS5000 Dallas Semiconductor: 28 Hoạt động reset vi điều