1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình vi điều khiển

130 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

LỜI NĨI ĐẦU Cùng với mơ đun ngành Điện tử công nghiệp, mô đun Vi điều khiển mô đun kỹ thuật chuyên ngành quan trọng ngành điện tử, mô đun ứng dụng rộng rãi ngành kỹ thuật lĩnh vực điều khiển khác Mô đun ứng dụng cho tất sinh viên ngành Sửa chữa thiết bị tự động hóa trường ta Bởi để tạo điều kiện cho việc học tập nghiên cứu mô đun học viên thuận lợi trình học tập Bộ môn Điện tử thuộc Khoa Điện – Điện tử - Ti học Trường cao đẳng nghề số 20/QK3 tổ chức biên soạn tài liệu: “ Vi điều khiển ” làm giảng lưu hành hội Trong trình biên soạn chắn khơng tránh khỏi thiếu sót, mong nhận thông cảm góp ý chân thành bạn đồng nghiệp giáo trình ngày hồn thiện Xin chân thành cảm ơn! MỤC LỤC LỜI NÓI ĐẦU MỤC LỤC BÀI 1: SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN Lịch sử phát triển Vi điều khiển Lĩnh vực ứng dụng Hướng phát triển BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 Tổng quan Sơ đồ chân Cấu trúc Port I/O Tổ chức nhớ 4.1 Bộ nhớ chương trình (ROM) 4.2 Bộ nhớ liệu Các ghi chức đặc biệt Bộ nhớ 6.1 Truy xuất nhớ chương trình ngồi 6.2 Truy xuất nhớ liệu ngồi 6.3 Giải mã địa 6.4 Các không gian nhớ chương trình liệu gối Các cải tiến 8032/8052 Hoạt động Reset BÀI 3: TẬP LỆNH 8051 Mở đầu Các cách định địa 2.1 Định địa ghi 2.2 Định địa trực tiếp 2.3 Định địa gián tiếp 2.4 Định địa tức thời 2.5 Định địa tương đối 2.6 Định địa tuyệt đối 2.7 Định địa dài 2.8 Định địa theo số Các nhóm lệnh 2 5 7 9 12 12 12 13 15 18 19 20 22 22 23 24 25 25 25 25 26 26 26 26 27 28 28 28 3.1 Nhóm lệnh số học 3.2 Nhóm lệnh logic 3.3 Nhóm lệnh truyền liệu 3.4 Nhóm lênh Boolean (xử lý bít) 3.5 Nhóm lệnh rẽ nhánh chương trình BÀI 4: BỘ ĐỊNH THỜI Mở đầu Thanh ghi SFR timer 2.1 Thanh ghi chế độ TMOD 2.2 Thanh ghi điều khiển TCON Các chế độ làm việc 3.1 Chế độ Timer 13 bit (chế độ 0) 3.2 Chế độ Timer 16 bit (chế độ 1) 3.3 Chế độ tự nạp lại bit (Chế độ 2) 3.4 Chế độ tách biệt Timer (Chế độ 3) Nguồn cung cấp xung cho Timer 4.1 Chức định thời 4.2 Chức đếm kiện Khởi động, dừng, điều khiển Timer Khởi tạo truy xuất ghi Timer 6.1 Đọc thời gian hoạt động 6.2 Thời gian ngắn thời gian dài Timer 8052 BÀI 5: CỔNG NỐI TIẾP Mở đầu Thanh ghi điều khiển Chế độ làm việc 3.1 Thanh ghi dịch bit 3.2 Chế độ UART bit có tốc độ baud thay đổi 3.3 UART bit với tốc độ baud cố định 3.4 Chế độ UART với tốc độ baud cố định Khởi tạo truy suất ghi PORT nối tiếp 4.1 Cho phép nhận 4.2 Bít liệu thứ 4.3 Thêm vào bít chẵn - lẻ 4.4 Các cờ ngắt 28 37 46 52 54 61 61 63 63 64 65 65 66 66 66 67 67 67 68 69 69 70 72 74 74 75 75 76 78 80 80 81 81 81 81 82 Truyền thông đa xử lý Tốc độ BAUD BÀI 6: NGẮT Mở đầu Tổ chức ngắt 8051 Xử lý ngắt Thiết kế chương trình dùng ngắt Ngắt cổng nối tiếp Các ngắt Đồ thị thời gian ngắt BÀI 7: PHẦN MỀM HỢP NGỮ Mở đầu Hoạt động Assembler Cấu trúc chương trình liệu Tính biểu thức hợp dịch Các điều khiển Assembler Hoạt động liên kết Macro TÀI LIỆU THAM KHẢO 82 83 85 85 86 88 89 95 96 101 103 103 104 106 110 123 125 126 130 BÀI 1: SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN Lịch sử phát triển Bộ Vi xử lý có khả vượt bậc so với hệ thống khác khả tính tốn, xử lý, thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu toán hệ thống lớn.Tuy nhiên ứng dụng nhỏ, tầm tính tốn khơng địi hỏi khả tính tốn lớn việc ứng dụng vi xử lý cần cân nhắc Bởi hệ thống dù lớn hay nhỏ, dùng vi xử lý đòi hỏi khối mạch điện giao tiếp phức tạp Các khối bao gồm nhớ để chứa liệu chương trình thực hiện, mạch điện giao tiếp ngoại vi để xuất nhập điều khiển trở lại, khối liên kết với vi xử lý thực cơng việc Để kết nối khối đòi hỏi người thiết kế phải hiểu biết tinh tường thành phần vi xử lý, nhớ, thiết bị ngoại vi Hệ thống tạo phức tạp, chiếm nhiều không gian, mạch in phức tạp vấn đề trình độ người thiết kế Kết giá thành sản phẩm cuối cao, không phù hợp để áp dụng cho hệ thống nhỏ Vì số nhược điểm nên nhà chế tạo tích hợp nhớ số mạch giao tiếp ngoại vi với vi xử lý vào IC gọi Microcontroller-Vi điều khiển Vi điều khiển có khả tương tự khả vi xử lý, cấu trúc phần cứng dành cho người dùng đơn giản nhiều Vi điều khiển đời mang lại tiện lợi người dùng, họ không cần nắm vững khối lượng kiến thức lớn người dùng vi xử lý, kết cấu mạch điện dành cho người dùng trở nên đơn giản nhiều có khả giao tiếp trực tiếp với thiết bị bên Vi điều khiển xây dựng với phần cứng dành cho người sử dụng đơn giản hơn, thay vào lợi điểm khả xử lý bị giới hạn (tốc độ xử lý chậm khả tính tốn hơn, dung lượng chương trình bị giới hạn) Thay vào đó, Vi điều khiển có giá thành rẻ nhiều so với vi xử lý, việc sử dụng đơn giản, ứng dụng rộng rãi vào nhiều ứng dụng có chức đơn giản, khơng địi hỏi tính tốn phức tạp Vi điều khiển ứng dụng dây chuyền tự động loại nhỏ, robot có chức đơn giản, máy giặt, ôtô v.v Năm 1976 Intel giới thiệu vi điều khiển (microcontroller) 8748, chip tương tự vi xử lý chip họ MCS-48 Độ phức tạp, kích thước khả Vi điều khiển tăng thêm bậc quan trọng vào năm 1980 intel tung chip 8051, Vi điều khiển họ MCS-51 chuẩn công nghệ cho nhiều họ Vi điều khiển sản xuất sau Sau nhiều họ Vi điều khiển nhiều nhà chế tạo khác đưa thị trường với tính cải tiến ngày mạnh Vi điều khiển 2.1 Nguyên lý cấu tạo Điểm cần lưu ý vi điều khiển sơ đồ khối cấu tạo Cấu tạo họ microcontroller chủ yếu dựa kiểu tiêu chuẩn bao gồm tính quan trọng nhất, nhiều chủng loại phù hợp với lĩnh vực ứng dụng đặc biệt khác nhau, kết hợp thêm thiết bị ngoại vi để tăng khả giảm nhỏ kích thước đến mức tối thiểu ứng dụng chuyên biệt như: Kết nối bus, kết nối video điều khiển trực tiếp cấu hiển thị LCD Với kiểu tiêu chuẩn đủ dùng cho hầu hết ứng dụng 2.2 Các kiểu cấu trúc nhớ Các vi xử lý vi điều khiển chủ yếu chế tạo theo kiểu cấu trúc khác nhau: Cấu trúc Von Neumann Harvard 2.2.1 Cấu trúc Von Neumann Trong cấu trúc Von Neumann có vùng địa tuyến tính bao gồm tất liệu lệnh điều khiển, độ lớn vùng địa phụ thuộc vào chiều dài đếm chương trình, khơng trang bị thêm linh kiện phụ việc định địa nhớ chương trình nhớ liệu khơng độc lập với Trong cấu trúc tồn bus liệu bus địa để đọc-ghi liệu đọc lệnh điều khiển chương trình khơng có khả thực song song (truy xuất đồng thời nhớ liệu nhớ chương trình) 2.2.2 Cấu trúc Harvard Gồm hai vùng địa riêng biệt cho nhớ liệu nhớ chương trình nên truy xuất song song liệu lệnh điều khiển, cấu trúc đặc biệt thích hợp với vi điều khiển 16 32 bít làm tăng tốc độ làm việc Nếu có hệ thống bus thường thấy vi điều khiển bít việc truy xuất nhớ liệu nhớ chương trình thực thơng qua tín hiệu điều khiển, khơng có u cầu ghi vào nhớ chương trình cấu trúc cịn cho phép tăng tính an tồn chương trình Lĩnh vực ứng dụng - Hầu hết thiết bị điện tử sử dụng chip vi điều khiển - Ứng dụng nhiều lĩnh vực khác nhau: + Điện thoại di động + Các thiết bị đo lường điện tử + Tivi, CD players, radio,… + Bàn phím PC + Các hệ thống bảo vệ, báo cháy… + Các máy in Hướng phát triển Yêu cầu đặt cho vi điều khiển tăng lĩnh vực ứng dụng với tốc độ xử lý ngày nhanh kích thước nhỏ gọn, cơng suất tiêu thụ thấp Vấn đề đặt liệu với vi điều khiển bít có cịn phù hợp hay khơng ? tương lai phải thay vi điều khiển 16/32 bít Khác với vi xử lý việc phát triển ln kèm theo việc nâng cao khả tính toán cách mở rộng hệ thống bus Đối với vi điều khiển không thiết phải thế, vi điều khiển bít đủ cho nhiều ứng dụng vi điều khiển 16 bít hoàn toàn dư thừa, trường hợp cần giảm giá thành, kích thước cơng suất tiêu thụ vi điều khiển bít giải pháp tối ưu Một vài ứng dụng cần vi điều khiển có nhiều khối ngoại vi, có ứng dụng lại cần ngoại vi tốc độ cao, hướng phát triển tương lai tăng khả CPU khối ngoại vi Một hướng đơn giản tăng tần số xung đồng hồ để rút ngắn thời gian thực chương trình, giảm thời gian biến đổi A/D tăng tần số giới hạn timer Tuy nhiên linh kiện bên phải có khả làm việc tần số cao, tăng tần số đồng làm tăng công suất tiêu thụ vi điều khiển Việc tối ưu hóa cấu trúc chương trình nhớ góp phần nâng cao khả hệ thống Trong ứng dụng đa nhiệm, phương pháp phân đoạn phân dãy hóa có ý nghĩa lớn BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 Tổng quan Các thành viên họ MCS-51 (Atmel) có đặc điểm chung sau: + Có 4/8/12/20 Kbyte nhớ FLASH ROM bên để lưu chương trình Nhờ Vi điều khiển có khả nạp xố chương trình điện đến 10000 lần + 128 Byte RAM nội + Port xuất/nhập bit + Từ đến định thời 16-bit + Có khả giao tiếp truyền liệu nối tiếp + Có thể mở rộng khơng gian nhớ chương trình ngồi 64KByte (bộ nhớ ROM ngoại): chương trình người lập trình viết có dung lượng lớn dung lượng nhớ ROM nội, để lưu chương trình cần nhớ ROM lớn hơn, cách giải kết nối Vi điều khiển với nhớ ROM từ bên (hay gọi ROM ngoại) Dung lượng nhớ ROM ngoại lớn mà Vi điều khiển kết nối 64Kbyte + Có thể mở rộng khơng gian nhớ liệu 64KByte (bộ nhớ RAM ngoại) + Bộ xử lí bit (thao tác bit riêng rẽ) 210 bit truy xuất đến bit Sơ đồ chân Hình 2.1 Sơ đồ chân vi điều khiển 8051 * Port (P0) Port gồm chân (từ chân 32 đến 39) có hai chức năng: - Chức xuất/nhập :các chân dùng để nhận tín hiệu từ bên ngồi vào để xử lí, dùng để xuất tín hiệu bên ngồi, chẳng hạn xuất tín hiệu để điều khiển led đơn sáng tắt - Chức bus liệu bus địa (AD7-AD0) : chân (hoặc Port 0) làm nhiệm vụ lấy liệu từ ROM RAM ngoại (nếu có kết nối với nhớ ngồi), đồng thời Port cịn dùng để định địa nhớ * Port (P1) - Port P1 gồm chân (từ chân đến chân 8), có chức làm đường xuất/nhập, khơng có chức khác * Port (P2) Port gồm chân (từ chân 21 đến chân 28) có hai chức năng: - Chức xuất/nhập - Chức bus địa cao (A8-A15): kết nối với nhớ ngồi có dung lượng lớn,cần byte để định địa nhớ, byte thấp P0 đảm nhận, byte cao P2 đảm nhận * Port (P3) Port gồm chân (từ chân 10 đến 17): - Chức xuất/nhập - Với chân có chức riêng thứ hai bảng sau Bit Tên Chức P3.0 RxD Ngõ vào nhận liệu nối tiếp P3.1 TxD Ngõ xuất liệu nối tiếp P3.2 INT0 Ngõ vào ngắt cứng thứ P3.3 INT1 Ngõ vào ngắt cứng thứ P3.4 T0 Ngõ vào Timer/Counter thứ P3.5 T1 Ngõ vào Timer/Counter thứ P3.6 WR Ngõ điều khiển ghi liệu lên nhớ P3.7 RD Ngõ điều khiển đọc liệu từ nhớ bên P1.0 T2 Ngõ vào Timer/Counter thứ P1.1 T2X Ngõ Nạp lại/thu nhận Timer/Counter thứ * Chân cho phép nhớ chương trình 10 Cú pháp Ký hiệu EQU biểu thức Chỉ dẫn gán giá trị số cho ký hiệu, ví dụ N27 EQU 27 ; gán giá trị 27 cho N27 HERE EQU $ ; gán giá trị đếm ; vị trí cho HERE OR EQU 0DH ; đặt OR 0DH MESSAGE DB ‘This is a message’ LENGTH EQU $-MESSAGE ; “LENGTH” độ dài “MASSAGE” Các dẫn định nghĩa kí hiệu khác Chỉ dẫn SET tương tự EQU khác sau định nghĩa lại kí hiệu dẫn SET khác Các dẫn DATA, IDATA, XDATA, BIT CODE gán địa kiểu đoạn tương ứng cho kí hiệu, dẫn khơng phải nhất, kết tương tự nhận cách dùng dẫn EQU Tuy nhiên, dùng chung cung cấp khả kiểm tra loại ASM51 Xem ví dụ sau: FLAG EQU 05H FLAG BIT 05H SETB FLAG SETB FLAG MOV FLAG 1, # MOV FLAG 2, # Việc sử dụng FLAG dòng lệnh cuối xuất thông báo lỗi “ data segment address expected” ASM 51 vài FLAG định nghĩa địa bít dẫn bit nên dùng lệnh set bit dùng lệnh MOV byte Mặc dù FLAG có giá trị 05H định nghĩa EQU khơng có khơng gian địa tương ứng, ưu điểm EQU mà nói khác khuyết điểm, cách định nghĩa kí hiệu địa tương ứng với vùng nhớ xác định thông qua dẫn BIT, DATA, XDATA … người lập trình tận dụng ưu điểm ASM 51 nhờ khả kiểm tra tránh rắc rối dùng sai kí hiệu Khởi tạo dành trước vùng nhớ Các dẫn khởi tạo dành trước vùng nhớ có độ dài word, byte bít Vùng nhớ dành trước bắt đầu vị trí xác định giá trị hành đếm vị trí đoạn tác động hành, đặt nhãn phía trước dẫn này, dẫn là: 116 DS (define storage) Cú pháp [ nhãn:] DS biểu thức Vùng nhớ dành trước dẫn byte, dùng cho kiểu đoạn ngoại trừ BIT, biểu thức phải biểu thức thời gian dịch hợp lệ khơng có tham chiếu thuận khơng định vị lại tham chiếu Khi nhận thấy phát biểu DS chương trình, đếm vị trí đoạn hành tăng lên giá trị biểu thức, tổng giá trị đếm vị trí với giá trị biểu thức khơng vượt giới hạn không gian địa hành Các phát biểu sau tạo vùng đệm 40 byte đoạn liệu nội: DSEG AT 30H ; đặt đoạn liệu (tuyệt đối, bên trong) LENGTH EQU 40 BUFFER: DS LENGTH ; dành trước 40 byte Nhãn BUFFER biểu diễn địa vị trí đầu tiêu vùng nhớ dành trước Trong ví dụ địa 30H AT 30H định nghĩa DSEG Vùng nhớ bị xóa lệnh sau: MOV R7 , # LENGTH MOV R0, # BUFFER Loop: MOV @ R0, # DJNZ R7, Loop (tiếp tục) Để tạo vùng đệm 1000 byte RAM bắt đầu 4000H, dẫn sau sử dụng: XSTART EQU 4000H XLENGTH EQU 1000 XSEG AT XSTART XBUFFER DS XLENGTH Có thể xóa vùng đệm lệnh sau MOV DPTR, # XBUFFER Loop:CLR A MOVX @DPTR, A INC DPTR MOV A, DPL CJNE A, # Low (XBUFFER + XLENGTH + 1), Loop MOV A, DPH CJNE A, # HIGH (XBUFFER + XLENGTH + 1), Loop (tiếp tục) Ví dụ minh họa sử dụng toán tử ASM 51 biểu thức 117 thời gian dịch hợp lệ; khơng có lệnh so sánh trỏ liệu với giá trị bất tức thời nên cần phải so sánh hai lần, với byte cao với byte thấp DPTR, lệnh CJNE làm việc với ghi A ghi nên byte DPTR phải chuyển vào A trước lệnh CJNE, vòng lập kết thúc DPTR XBUFFER + XLENGTH + (phải cộng thêm DPTR tăng lênh sau lệnh MOVX) DBIT Cú pháp: [ nhãn:] DBIT biểu thức Chỉ dẫn dành trước vùng nhớ có đơn vị BIT dùng đoạn BIT Biểu thức phải biểu thức thời gian dịch hợp lệ khơng có tham chiếu thuận Khi gặp phát biểu DBIT chương trình, đếm vị trí đoạn bít hành tăng lên giá trị biểu thức Lưu ý đoạn BIT, đơn vị đếm vị trí bít, khơng phải byte, dẫn sau tạo ba cờ đoạn BIT tuyệt đối BSEG ; đoạn BIT (tuyệt đối) KBFLAG: DBIT ; trạng thái bàn phím PRFLAG: DBIT ; trạng thái máy in DKFLAG: DBIT ; trạng thái đĩa Vì ví dụ khơng có định nghĩa địa cho BSEG, địa cờ định nghĩa DBIT xác định (nếu người ta muốn làm thế) cách kiểm tra bảng kí hiệu file LST M51 Nếu định nghĩa lần áp dụng BSEG KBFLAG đặt vị trí 00H (bít địa byte 20H) Nếu bít khác định nghĩa trước BSEG sau bít đặt sau bít cuối định nghĩa DB (define byte) Cú pháp: [nhãn:] DB biểu thức [, biểu thức] [….] Chỉ dẫn DB khởi tạo vùng nhớ mã với giá trị byte thực tế dẫn đặt số liệu vùng nhớ mã, đoạn mã phải tác động Danh sách biểu thức chuỗi gồm nhiều giá trị byte (mỗi byte biểu thức cách dấu phẩy) Chỉ dẫn DB cho phép dùng chuỗi kí tự (được bao dấu móc đơn) dài kí tự phần biểu thức Mỗi kí tự chuỗi biến đổi thành mã ASCII tương ứng Nếu nhãn sử dụng gán địa byte Ví dụ: CSEG AT 0100H SQUARES DB 0,1,4,9,16,25 ; bình phương số MESSAGE: DB ‘Login’, ; kí tự kết thúc chuỗi NULL Khi hợp dịch 118 kết dạng hexa gán cho nhớ chương trình bên ngồi Địa Nội dung 0100 00 0101 01 0102 04 0103 09 0104 10 0105 19 0106 4C 0107 6F 0108 67 0109 69 010A 6E 010B 3A 010C 00 DW (define word) Cú pháp: [nhãn:] DW biểu thức [, biểu thức] […] Tương tự DB khác dẫn dùng đến vị trí nhớ (16 bít) gán cho đề mục liệu CSEG AT 200H DW $, ‘A’, 1234H, , ‘RC’ Kết dạng thập lục phân sau Địa Nội dung 0200 02 0201 00 0202 00 0203 41 0204 12 0205 34 0206 00 0207 02 0208 42 0209 43 Liên kết chương trình Các dẫn liên kết chương trình cho phép modul (file) hợp dịch riêng liên kết với cách cho phép tham chiếu 119 modul cách đặt tên modul, modul xem file (trong thực tế modul gồm nhiều file) PUBLIC Cú pháp: PUBLIC [, kí hiệu] […] Chỉ dẫn PUBLIC cho phép danh sách modul xác định biết sử dụng bên ngồi modul hợp dịch hành Một kí hiệu khai báo PUBLIC phải định nghĩa modul hành qua việc khai báo PUBLIC cho phép modul tham chiếu modul khác Vd: PUBLIC INCHAR, OUTCHAR, INLINE, OUTSTR EXTRN Cú pháp: EXTRN kiểu đoạn kí hiệu [ ,kí hiệu] […] Chỉ dẫn EXTRN liệt kê kí hiệu tham chiếu modul hành, kí hiệu định nghĩa modul khác Danh sách kí hiệu bên ngồi phải có kiểu đoạn kèm theo với kí hiệu danh sách (Các kiểu đoạn CODE, XDATA, DATA, IDATA, BIT NUMBER NUMBER kí hiệu khơng kiểu định nghĩa EQU) kiểu đoạn cho biết phương pháp mà kí hiệu sử dụng thơng tin quan trọng thời gian liên kết để bảo đảm kí hiệu sử dụng cách thích hợp modul khác Các dẫn PUBLIC EXTRN hoạt động chung với Hãy xem hai file sau MAIN.SRC MESSAGES.SRC, chương trình HELLO GOODBYE định nghĩa modul MESSAGES, modul khác sử dụng nhờ dẫn PUBLIC, chương trình gọi modul MAIN chúng không định nghĩa Chỉ dẫn EXTRN khai báo kí hiệu định nghĩa modul khác Các file MAIN.SRC MESSAGES.SRC khơng phải chương 120 trình hồn chỉnh chúng phải hợp dịch riêng sau liên kết với để tạo thành chương trình thực Trong trình liên kết tham chiếu bên ngồi tính với địa chèn vào đích lệnh gọi NAME Cú pháp: NAME tên modul Tên modul áp dụng quy tắc tên kí hiệu, khơng cho biết tên, modul lấy tên file (khơng có đường dẫn phần mở rộng) Nếu khơng có dẫn NAME chương trình bao gồm modul cho file Khái niệm modul vấn đề chương trình nhỏ kể chương trình kích thước trung bình Vd: Bao gồm vài file hồn chỉnh với segment định vị lại Tuy nhiên, chương trình lớn (vài ngàn dịng lệnh nhiều hơn) nên chia nhỏ vấn đề thành nhiều modul modul gồm nhiều file chứa chương trình có chung mục đích Các dẫn chọn segment Khi trình dịch hợp ngữ gặp dẫn hướng mã lệnh liệu vào segment chọn segment khác chọn dẫn chọn segment Chỉ dẫn chọn segment định vị lại chọn trước tạo chọn segment tuyệt đối RSEG (Relocatable segment) Cú pháp: RSEG tên segment Trong “tên segment” tên segment định vị lại định nghĩa trước dẫn SEGMENT, dẫn RSEG hướng mã lệnh liệu theo sau vào segment có tên kèm theo gặp dẫn chọn segment khác Chọn segment tuyệt đối RSEG dùng để chọn segment định vị lại segment tuyệt đối chọn dẫn sau: CSEG (AT địa chỉ) DSEG (AT địa chỉ) ISEG (AT địa chỉ) BSEG (AT địa chỉ) XSEG (ATđịa chỉ) Các dẫn chọn segment tuyệt đối vùng mã lệnh, vùng liệu trong, vùng liệu gián tiếp, vùng bít, vùng liệu Nếu segment tuyệt đối cung cấp (bằng thơng báo “AT địa chỉ”) trình dịch hợp ngữ kết thúc segment tuyệt đối cuối có kiểu segment xác định tạo segment tuyệt đối khác bắt đầu địa Nếu 121 khơng xác định địa tuyệt đối segment tuyệt đối cuối kiểu segment xác định tiếp tục Nếu khơng có segment tuyệt đối thuộc kiểu chọn trước địa tuyệt đối bỏ qua segment tạo bắt đầu vị trí Không cho phép tham chiếu thuận địa bắt đầu phải tuyệt đối Mỗi segment có đếm vị trí riêng đếm ln đặt khởi tạo, segment mặc định segment mã lệnh tuyệt đối trạng thái ban đầu assembler vị trí 0000H segment mã lệnh địa tuyệt đối Khi segment khác chọn lần đếm vị trí segment trước cịn trì giá trị tác động cuối cùng, segment trước chọn lại, đếm vị trí nhận giá trị tác động sau Chỉ dẫn ORG dùng để thay đổi đếm vị trí segment chọn hành Hình 7.2 ví dụ việc định nghĩa, khởi tạo segment tuyệt đối định vị lại Hình 7.2 Định nghĩa khởi tạo segment tuyệt đối định vị lại Hai dòng mơ tả kí hiệu ONCHIP EPROM segment loại DATA (RAM trong) CODE Dòng bắt đầu segment tuyệt đối BIT khởi tạo địa bit 70H(bít byte 2EH), sau FLAG1 FLAG2 tạo nhãn với địa bit tương ứng 70H 71H Chỉ dẫn RSEG dụng bắt đầu segment định vị lại ONCHIP vùng RAM TOTAL COUNT nhãn tương ứng với vị trí byte SUM16 nhãn tương ứng với vị trí word Chỉ dẫn RSEG dòng 13 bắt đầu segment định vị lại EPROM, vùng nhớ chương trình Nhãn BEGIN địa lệnh 122 thể EPROM Lưu ý xác định địa nhãn TOTAL, COUNT, BEGIN nhãn nằm segment định vị lại File đối tượng phải xử lý trình liên kết / định vị với địa đầu xác định đoạn ONCHIP EPROM, file liệt kê M51 tạo tŕnh liên kết cho biết địa tuyệt đối nhãn Tuy nhiên, FLAG1 FLAG2 luôn tương ứng với địa bít 70H 71H chúng định nghĩa đoạn tuyết đối BIT Các điều khiển Assembler Các điều khiển hợp dịch tạo khuôn dạng cho file liệt kê file đối tượng cách điều phối hoạt động ASM51, thường điều khiển hợp dịch ảnh hưởng đến hình thức file liệt kê khơng ảnh hưởng đến chương trình, chúng đưa vào dịng lệnh hợp dịch chương trình đưa vào file nguồn điều khiển hợp dịch file nguồn phải bắt đầu dấu $ nằm cột thứ Có hai loại điều khiển hợp dịch: Loại loại tổng quát Các điều khiển đặt dịng lệnh vị trí bắt đầu file nguồn, có điều khiển đặt trước điều khiển khác Các điều khiển tổng quát đặt nơi file nguồn Hình 7.3 trình bày điều khiển hợp dịch hỗ trợ ASM51 123 Hình 7.3 Các điều khiển hợp dịch hỗ trợ ASM51 124 Hoạt động liên kết Khi phát triển chương trình ứng dụng lớn thông thường nên chia công việc thành chương trình modul chứa đoạn mã lệnh (các chương trình thường viết riêng), phương pháp gọi lập trình theo modul Các modul thường loại định vị lại có nghĩa chúng không xác định địa cụ thể vùng nhớ chương trình liệu nên phải cần chương trình liên kết / định vị để kết nối modul thành modul đối tượng tuyệt đối chạy Hình 7.4 Hoạt động liên kết RL51 Intel chương trình liên kết / định vị điển hình nhân modul định vị lại làm ngõ vào sau tạo chương trình mã máy chạy file liệt kê chứa đồ nhớ bảng kí hiệu Khi modul định vị lại kết nối, tất giá trị kí hiệu ngồi tính tốn chèn giá trị tính vào file kết quả, chương trình RL51 khởi động sau: RL51 input-list [ to output-file] [ location-controls] Input-list danh sách modul đối tượng định vị lại (các file) phân cách dấu phẩy, output-file tên modul đối tượng tuyệt đối tạo ra, khơng cung cấp tên cho modul tên mặc định chọn tên modul vào khơng có phần mở rộng, điều khiển vị trí thiết lập địa bắt đầu cho segment đặt tên Giả sử có ba modul file (MAIN.OBJ, MESSAGES.OBJ SUBROUTINES.OBJ) chúng kết nối để tạo chương trình EXAMPLE, modul nói chứa hai segment định vị lại EPROM thuộc loại CODE ONCHIP thuộc loại DATA Giả sử đoạn mã lệnh thực địa 4000H đoạn liệu bắt đầu địa 30H (trong RAM nội), dòng lệnh sử dụng sau: RL51 MAIN.OBJ, MESSAGES.OBJ, SUBROUTINES.OBJ TO EXAMPLE & CODE (EPROM(4000H) DATA (ONCHIP (30H)) Kí tự & cho biết dịng lệnh cṇ tiếp tục 125 Nếu chương trình bắt đầu nhãn START dòng lệnh modul MAIN thực thiện bắt đầu 4000H, modul MAIN không kết nối trước tiên nhãn START khơng phải vị trí bắt đầu MAIN điểm nhập chương trình xác định cách kiểm tra bảng kí hiệu file liệt kê EXAMPLE.M51 tạo RL51 Mặc định file EXAMPLE.M51 chứa đồ liên kết, cần bảng kí hiệu file nguồn phải dùng điều khiển $DEBUG Macro Khả xử lý macro MPL (macro processing facility) ASM51 khả thay chuỗi Macro cho phép thường xuyên sử dụng đoạn mã lệnh định nghĩa lần dạng ghi nhớ đơn giản áp dụng nơi đâu chương trình cách chèn dạng mã gợi nhớ vào Phương pháp lập trình mở rộng kỹ thuật bàn trước Macro định nghĩa nơi đâu chương trình nguồn sau sử dụng giống lệnh khác Cú pháp định nghĩa macro sau: % * DEFINE (call – pattern) (macro – body) Mỗi lần định nghĩa, mẫu gọi (call-pattern) macro giống lệnh gợi nhớ, dùng lệnh hợp ngữ cách đặt vào vùng gợi nhớ chương trình Các macro phân biệt với lệnh hợp ngữ dấu % đặt phía trước Khi chương trình nguồn hợp dịch, thứ thân macro thay mẫu gọi macro Các macro cung cấp phương tiện đơn giản để thay khối lệnh hợp ngữ phức tạp mã gợi nhớ đơn giản dễ hiểu Ví dụ định nghĩa macro sau đặt phần mở đầu file nguồn % * DEFINE PUSH – DPTR) (PUSH DPH PUSH DPL) Sau phát biểu % PUSH – DPTR Sẽ xuất file liệt kê sau PUSH DPH PUSH DPL Ví dụ macro điển hình lệnh ngăn xếp 8051 làm việc với địa trực tiếp nên việc chuyển liệu vào DPTR phải cần đến hai lệnh PUSH; macro tương tự tạo để POP liệu từ DPTR Những ưu điểm khác dùng macro + Chương trình nguồn dễ đọc lệnh macro dễ nhận hoạt động lệnh hợp ngữ tương đương + Chương trình nguồn viết ngắn gọn + Giảm lỗi Giúp lập trình viên khơng cần phải bận tâm đến chi tiết nhỏ nhặt Hai 126 ưu điểm sau có quan hệ với nhau, macro viết sửa lỗi xong chúng sử dụng mà khơng sợ gây lỗi Trong ví dụ PUSH – DPTR, ne71u dùng lệnh PUSH POP thay dùng macro push pop lập trình viên vơ tư đảo thứ tự lệnh PUSH POP (byte cao byte thấp cất vào trước), điều tạo lỗi Khi dùng macro chi tiết cần quan tâm lần macro viết xong sau dùng đến không lo xảy lỗi Do việc thay macro dựa nguyên tắc kí tự nên định nghĩa macro phải thật cẩn thận với kí hiệu xuống dịng, tab… để bảo đảm chanh lề phù hợp phát biểu macro với lệnh hợp ngữ cịn lại chương trình, cần đến phép thử sửa lại Có nhiều đặc tính cải tiến khả xử lý ASM51 cho phép truyền thơng số, nhãn cục bộ, thao tác lập, điều khiển luồng hợp dịch… Truyền thông số Một macro với thông số truyền từ chương trình có dạng thức sửa đổi sau: % * DEFINE (macro-name (parameter-list) (macro-body) Ví dụ macro sau định nghĩa % * DEFINE (CMPA # (VALUE)) (CJNE A, # % VALUE, $+3) Thì lời gọi macro sau % CMPA # (20H) Sẽ mở rộng thành lệnh sau file liệt kê CJNE A, # 20H, $ +3 Mặc dù 8051 khơng có lệnh so sánh tích lũy dễ dàng tạo cách dùng lệnh CJNE với “$+3” (lệnh kế tiếp) đích đến lệnh nhảy có điều kiện; lệnh gọi nhớ CMPA # giúp người dễ nhớ, bên cạnh việc dùng macro cịn giúp lập trình viên khơng cần nhớ đến chi tiết thích “$+3” Hãy xem ví dụ khác thật tốt 8051 có lệnh sau đây: JUMP IF ACCUMULATOR CREATER THAN X JUMP IF ACCUMULATOR CREATER THAN OR EQUAL TO X JUMP IF ACCUMULATOR LESS THAN X JUMP IF ACCUMULATROR LESS THAN OR EQUAL TO X Các thao tác tạo cách dùng CJNE sau JC JNC, chi tiết phức tạp VD để nhảy đến nhãn GREATER-THAN nội dung tích lũy lớn mã ASCII kí hiệu “Z” (5AH) thực chuỗi lệnh sau: CJNE A, 5BH, $+3 JNC CREATER-THAN Lệnh CJNE lấy nội dung A trừ cho 5BH (“Z” +1) bit carry set clear thích thợp Lệnh CJNE đặt C = nội dung A từ 00H đến 5AH (5AH-5BH < 0, nên C = 1, 5BH – 5AH = C = 0) Việc nhảy đến nhãn CREATER – THAN khơng có carry thực với giá 127 trị A 5BH, 5CH, 5DH … FFH Công việc đơn giản tạo lệnh gợi nhớ tương tự cách định nghĩa macro, macro “ jump if greater than” % * DEFINE ( JGT (VALUE, LABEL ) ( CJNE A, # % VALUE + 1, $ + ; JGT JNC % LABEL ) Để thử lại A chứa mã ASCII lớn “Z” nói, macro gọi sau: % JGT (‘Z’, GEARTER-THAN) ASM51 biến dòng lệnh thành CJNE A, # 5BH, $ + ; JGT JNC GREATER-THAN Bằng cách sử dụng macro lập trình viên tránh chi tiết rắc rối dễ sinh lỗi Các nhãn cục Các nhãn cục dùng macro với dạng thức sau % * DEFINE (macro-name [ ( parameter-list) ] ) [ LOCAL list-of-local-labels ] ( macro-body ) Ví dụ: % * DEFINE (DEC – DPTR) LOCAL SKIP (DEC DPL ; giảm DPTR MOV A, DPL CJNE A, # 0FFH, % SKIP DEC DPH % SKIP: ) Cách gọi macro % DEC – DPTR ASM51 mở rộng thành DEC DPL MOV A, DPL CJNE A, # 0FFH, SKIP ØØ DEC DPH SKIP ØØ: Lưu ý nhãn cục không xung đột với nhãn tên nơi khác chương trình nguồn ASM51 nối thêm mã số vào mã cục macro mở rộng lần sử dụng nhãn cục tên lại nhận thêm mã số khác Macro có ảnh hưởng phụ; ghi A dùng làm nơi lưu trữ tạm thời cho DPL nên macro áp dụng đoạn mã có dùng ghi A cho mục đích khác giá trị A bị gây lỗi cho chương trình, để khắc phục định nghĩa macro nên cất A vào ngăn xếp trình bày sau % * DEFINE (DEC-DPTR) LOCAL SKIP (PUSH ACC DEC DPL ; giảm DPTR MOV A, DPL 128 CJNE A, #0FFH, % SKIP DEC DPH POP ACC ) % SKIP: Thao tác lặp Sau vài macro có sẵn % REPEAT (expression) (text) Ví dụ điền 100 lệnh NOP vào vùng nhớ % REPEAT (100) (NOP ) Các thao tác điều khiển luồng Việc hợp dịch có điều kiện đoạn mã lệnh cung cấp định nghĩa macro điều khiển ASM51, cú pháp sau: % IF (expression) THEN (balanced text) [balanced text] Ví dụ: INTERNAL EQU ; = 8051 serial I/O drivers % IF (INTERNAL) THEN (INCHAR: ; 9/8051 drivers ; OUTCHAR: ; ) ELSE INCHAR: , ; 8051 dirvers , OUTCHAR: , , , ) Trong ví dụ này, ký hiệu INTERNAL cho giá trị để chọn chương trình cịn cổng nối tiếp 8051 để chọn chương trình cho UART bên ngoài, trường hợp 8251 Macro IF làm cho 8051 hợp dịch chương trình cịn bỏ qua chương trình khác Các chương trình INCHAR OUTCHAR sử dụng nơi chương trình mà khơng cần quan tâm đến cấu hình phần cứng cần chương trình hợp dịch với giá trị cho INTERNAL chương trình tương ứng thực 129 TÀI LIỆU THAM KHẢO Đề cương môđun/môn học nghề Sửa chữa thiết bị điện tử công nghiệp”, Dự án Giáo dục kỹ thuật Dạy nghề (VTEP), Tổng cục Dạy Nghề, Hà Nội, 2003 Microprocessor and IC families - Walter H Buchbaum Sc.D Mikrocompute Lehrbuch - HPI Fachbuchreihen Pflaum Verlag Munchen 8051 Development Boad, Rev - Paul Stoffregen Họ vi điều khiển - Tống văn On - Đại học Bách khoa TP.HCM - 2005 130

Ngày đăng: 16/12/2023, 16:09

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN