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

Giáo trình Vi điều khiển: Phần 1

89 47 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

Thông tin cơ bản

Định dạng
Số trang 89
Dung lượng 1,92 MB

Nội dung

Giáo trình “Vi điều khiển” trong bộ giáo trình nghề Điện tử công nghiệp, được xây dựng và biên soạn trên cơ sở chương trình khung đào tạo nghề do Bộ Lao động – Thương binh và Xã hội ban hành và được chi tiết hóa trong chương trình đào tạo nghề Điện tử công nghiệp của Trường Cao đẳng nghề Yên Bái. Giáo trình gồm 2 phần, sau đây là phần 1.

GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái LỜI NĨI ĐẦU Giáo trình “Vi điều khiển” giáo trình nghề Điện tử cơng nghiệp, xây dựng biên soạn sở chương trình khung đào tạo nghề Bộ Lao động – Thương binh Xã hội ban hành chi tiết hóa chương trình đào tạo nghề Điện tử cơng nghiệp Trường Cao đẳng nghề Yên Bái Đối tượng phục vụ học sinh sinh viên khoá đào tạo trình độ cao đẳng nghề, trung cấp nghề Điện tử công nghiệp sở sản xuất làm tài liệu học tập nghiên cứu Các nhà quản lý người sử dụng nhân lực sở sản xuất làm tài liệu tham khảo Giáo trình mơn học “Vi điều khiển” biên soạn theo nguyên tắc: Tính định hướng thị trường lao động, tính hệ thống khoa học, tính ổn định linh hoạt, hướng tới liên thông, chuẩn đào tạo nghề nước giới, tính đại sát thực với sản xuất Trong q trình thực nhóm biên soạn tham khảo nhiều tài liệu liên quan trường bạn, sách kỹ thuật chuyên gia đồng thời tham khảo nhiều tài liệu trường đào tạo, hãng sản xuất; yêu cầu thực tế, kiến thức nhóm biên soạn cố gắng cập nhật thể giáo trình Ngồi có tham gia đóng góp ý kiến tích cực cán bộ, kỹ sư kỹ thuật chuyên ngành tỉnh để giáo trình hồn thiện Giáo trình mơn học “Vi điều khiển” Hội đồng thẩm định Trường Cao đẳng nghề Yên Bái nghiệm thu trí đưa vào sử dụng làm tài liệu thống nhà trường phục vụ giảng dạy học tập học sinh sinh viên Giáo trình biên soạn lần đầu nên cố gắng song khó tránh khỏi thiếu sót, chúng tơi mong nhận ý kiến đóng góp người sử dụng đồng nghiệp để giáo trình ngày hồn thiện Xin trân trọng giới thiệu! HIỆU TRƯỞNG Thạc sỹ: Trịnh Tiến Thanh GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái MỤC LỤC GIỚI THIỆU VỀ MÔ ĐUN Vị trí, ý nghĩa, vai trò mơ đun Mục tiêu môdun Mục tiêu thực mô đun Nội dung mơ đun Bài 1: Sơ lược lịch sử hướng phát triển Lịch sử phát triển Vi điều khiển 2.1 Nguyên lý cấu tạo 2.2 Các kiểu cấu trúc nhớ 10 Lĩnh vực ứng dụng 11 Hướng phát triển 11 Bài 2: Cấu trúc họ vi điều khiển 8051 13 Tổng quan 13 Sơ đồ chân 14 2.1 Port 15 2.2 Port 15 2.3 Port 15 2.4 Port 15 2.5 Chân cho phép nhớ chương trình PSEN 16 2.6 Chân cho phép chốt địa ALE 16 2.7 Chân truy xuất ROM EA 16 2.8 Chân RESET 17 2.9 Các chân XTAL1 XTAL2 17 Cấu trúc PORT I/O 17 Tổ chức nhớ 18 4.1 Vùng RAM đa 19 4.2 Vùng RAM địa bít 21 4.3 Các dãy ghi 22 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Các ghi đặc biệt (SFR) 23 5.1 Từ trạng thái chương trình PSW 23 5.2 Thanh ghi B 25 5.3 Con trỏ stack 26 5.4 Con trỏ dử liệu DPTR 26 5.6 Các ghi port 26 5.7 Các ghi định thời 27 5.8 Các ghi port nối tiếp 27 5.9 Các ghi ngắt 28 5.10 Thanh ghi điều khiển nguồn 28 Bộ nhớ 29 6.1 Truy xuất nhớ chương trình 30 6.2 Truy xuất nhớ dử liệu 32 6.3 Giãi mả địa 34 6.4 Các khơng gian nhớ chương trình liệu gối 34 Các cải tiến 8032/8052 35 Hoạt động RESET 36 Bài tập 37 Bài 3: TẬP LỆNH 8051 39 Mở đầu 39 Các cách định địa 39 2.1 Định địa ghi 39 2.2 Định địa trực tiếp 40 2.3 Định địa gián tiếp 41 2.4 Định địa tức thời 42 2.5 Định địa tương đối 43 2.6 Định địa tuyệt đối 44 2.7 Định địa dài 45 2.8 Định địa theo số 45 Các nhóm lệnh 47 3.1 Nhóm lệnh số học 47 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 3.2 Nhóm lênh logic 55 3.3 Nhóm lệnh truyền liệu 66 3.4 Nhóm lênh Boolean( Các lệnh bit) 68 3.5 Nhóm lệnh rẽ nhánh chương trình 78 Luyện tập 88 Bài 4: BỘ ĐỊNH THỜI 90 Mở đầu 90 Thanh ghi SFR timer 91 2.1 Thanh ghi chế độ TMOD 91 2.2 Thanh ghi điều khiển TCON 92 Các chế độ làm việc 93 3.1 Chế độ time 13 bit (Mode 0) 94 3.2 Chế độ time 16 bit (Mode 1) 94 3.3 Chế độ tự nạp lại bit ( Mode 2) 97 3.4 Chế độ tách biệt time ( Mode 3) 97 Nguồn cung cấp xung cho time 98 4.1 Chức định thời 98 4.2 Chức đếm kiện 98 Khởi động, dừng, điều khiển timer 99 Khởi tạo truy xuất ghi timer 100 6.1 Đọc thời gian hoạt động 101 6.2 Thời gian ngắn thời gian dài 101 Time 8052 102 7.1 Chế độ tự động nạp lại 105 7.2 Chế độ thu nhận 106 Luyện tập 107 8.1 Phương pháp 107 8.2 Bài tập 107 Bài 5: CỔNG NỐI TIẾP 110 Mở đầu 110 1.1 Khái niệm truyền liệu đơn công song công 111 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 1.2 Truyền thơng nối tiếp dị đóng khung liệu 111 1.3 Các bít bắt đầu dừng 111 1.4 Tốc độ truyền liệu 112 1.5 Chuẩn RS232 112 Thanh ghi điều khiển 113 2.1 Thanh ghi SCON 113 2.2 Thanh ghi SBUF 115 Chế độ làm việc 116 3.1 Thanh ghi dịch bit 116 3.2 Chế độ UART bit có tốc độ baud thay đổi 117 3.3 UART bit với tốc độ baud cố định 118 3.4 Chế độ UART với tốc độ baud cố định 118 Khởi tạo truy xuất ghi PORT nối tiếp 118 4.1 Cho phép nhận 118 4.2 Bit liệu thứ 119 4.3 Thêm vào bit chẵn – lẻ 119 4.4 Các cờ ngắt 120 Truyền thông đa xử lý 120 Tốc độ Baud 122 6.1 Tạo tốc độ baud Timer 123 6.2 Tạo tốc độ baud Timer 125 Luyện tập 125 Bài 6: Ngắt (Interrupt) 127 Mở dầu 127 Tổ chức ngắt 8051 128 2.1 Cho phép không cho phép ngắt 128 2.2 Mức ưu tiên 129 2.3 Chuỗi pooling 130 Xử lý ngắt 130 Các vec tơ ngắt 131 Thiết kế chương trình dùng ngắt 132 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 4.1 Chương trình phục vụ ngắt kích thước nhỏ 133 4.2 Chương trình phục vụ ngắt kích thước lớn 134 Ngắt cổng nối tiếp 137 Các ngắt 139 Đồ thị thời gian ngắt 144 Bài tập 146 Bài 7: Phần mềm hợp ngữ 147 Mở đầu 147 Hoạt động ASSEMBLER 148 Cấu trúc chương trình liệu 150 Tính biểu thức hợp dịch 154 4.1 Các biểu thức toán tử 154 4.2 Chuỗi kí tự ( character string) 154 4.3 Bộ đếm vị trí ( location counter) 155 4.4 Các toán tử số học ( arithmetic operation) 155 4.5 Các toán tử logic 155 4.6 Toán tử quan hệ ( relation operator) 156 4.7 Các toán tử khác 156 4.8 Thứ tự ưu tiên toán tử 156 4.9 Các dẫn cho Assembler 157 Các điều khiển ASSEMBLER 159 Hoạt động liên kết 160 MACRO 161 7.1 Truyền tham số cho macro 161 7.2 Macro với nhãn cục 162 7.3 Tác vụ Repeat ( lặp lại) 163 7.4 Các tác vụ điều khiển 164 Luyện tập 165 8.1 Phương pháp viết chương trình hợp ngữ 165 8.2 Luyện tập 165 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái GIỚI THIỆU VỀ MƠ ĐUN Vị trí, ý nghĩa, vai trò mơ đun Đây mơ đun chuyên ngành học sau học viên hoàn tất mơ đun hỗ trợ trước như: Linh kiện điện tử, mạch điện tử, vi mạch tương tự, kỹ thuật số Điện tử công nghiệp lĩnh vực ứng dụng công nghệ điện tử để điều khiển thiết bị thực u cầu tự động hóa q trình sản xuất Trong thực tế việc ứng dụng vi điều khiển cho yêu cầu phổ biến tính linh hoạt, độ ổn định khả giải vấn đề phức tạp Chính việc nắm bắt cấu tạo nguyên lý hoạt động hệ dùng vi điều khiển đièu cần thiết cho công tác vận hành sửa chữa người công nhân ngành sửa chữa thiết bị điện tử công nghiệp Mục tiêu mơdun Sau hồn tất mơ-đun này, học viên có lực: • Giải thích ngun lý hoạt động hệ dùng vi điều khiển • Thay khối chức hư hỏng hệ dùng vi điều khiển • Viết chương trình ứng dụng đơn giản Mục tiêu thực mô đun • Vận hành thiết bị dây chuyền sản xuất dùng vi điều khiển • Xác định nguyên nhân gây hư hỏng thường xảy thực tế • Sửa chữa thay linh kiện hư hỏng • Kiểm tra viết chương trình điều khiển Nội dung mơ đun Mô đun vi điều khiển bao gồm học sau : 1.Sơ lược lịch sử hướng phát triển vi điều khiển 2.Cấu trúc họ 8051 3.Tập lệnh 8051 4.Bộ định thời 5.Cổng nối tiếp 6.Ngắt 7.Phần mềm ASEMBLER GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Bài 1: Sơ lược lịch sử hướng phát triển Lịch sử phát triển Việc phát minh transistor vào năm 1948 thời điểm bắt đầu cho trình phát triển máy tính với tính ngày cao kích thước ngày nhỏ Linh kiện hội đủ ưu điểm vi xử lý Máy tính điện tử mỹ năm 1946 tên gọi ENIAC sử dụng 18.000 bóng đèn điện tử sau năm 1960 IBM thay model 1410 với tồn linh kiện transistor Vì chức phức tạp nên việc lắp ráp hệ thống khó khăn tốn kém, phát sinh ý tưởng phải tìm cách thu nhỏ kích thước linh kiện rời như: Transistor, diode, điện trở kết đời công nghệ vi mạch Theo yêu cầu chuyên viên tên lửa quan NASA ln đòi hỏi tính ổn định kích thước thật nhỏ nên vào năm 1958 Jack Kilby hãng Texas instrument thiết kế vi mạch năm 1963 công ty Rockwell cho đời tên lửa Minerva II chế tạo toàn vi mạch Trong lĩnh vực dân vào năm 1961 công ty Fairchild lần giới thiệu FF không dùng transistor rời mà tích hợp vi mạch đơn tinh thể Các hệ vi mạch sản xuất theo công nghệ lưỡng cực, trường hợp cần nhiều lớp khuếch tán, nhiều lỗ tiếp xúc đường dẫn giá thành lên đến 10 - 20 đô la mạch Nhờ kỹ thuật MOS mật độ tích hợp tăng cao hẳn kỹ thuật lưỡng cực Hướng phát triển sau công nghệ CMOS bao gồm transistor trường bổ túc làm giảm cơng suất tiêu thụ thời điểm ln có transistor bị khóa Với u cầu ngày phức tạp đa dạng làm cho việc sản xuất vi mạch với số lượng lớn khó khăn, điều dẫn đến suy nghĩ vi mạch có khả lập trình, vi mạch có cấu tạo giống chức thay đổi sau lập trình phương pháp làm chảy đường dẫn điện Không vào năm 1974 hãng INTEL sản xuất chip vi xử lý lập trình theo yêu cầu khách hàng mở đầu cho kỹ nguyên vi xử lý gọi cách mạng cơng nghiệp lần thứ II Vi điều khiển Một vi xử lý giao tiếp với bên ngồi thơng qua khối vào - để lưu trữ liệu lại phải cần đến nhớ Dữ liệu nhận vào xử lý chương trình sau kết tín hiệu điều khiển đưa đến khối Đầu tiên ba khối chức kết hợp với nhau: Đơn vị xử lý trung tâm, khối vào-ra nhớ để tạo thành micro computer, bus hệ thống có nhiệm vụ kết nối khối kể với Do yêu cầu giảm nhỏ kích thước giá thành sản xuất, người ta tích hợp khối chức micro computer linh kiện đặt tên vi điều khiển (microcontroller) GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 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 Hình 1.1 Cấu trúc máy tính Hình 1.2 Cấu trúc vi điều khiển GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Hình 1.3 Sơ đồ khối vi điều khiển 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 Trình song song (truy xuất đồng thời nhớ liệu nhớ chương) Hình 1.4 Cấu trúc Von Neumann 10 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 3.4.6 Các phép tốn bít với cờ nhớ CY Ngồi thực tế cờ nhớ CY thay đổi lệnh lơ-gíc số học 8051 có số lệnh mà thao tác trực tiếp cờ nhớ CY Các lệnh cho bảng 3.7 Trong lệnh sau bảng 3.7 trình bày cơng dụng lệnh JNC, CLR SETB nhiều ví dụ số chương trước Dưới ta tiếp tục làm quen với số ví dụ cách sư dụng số lệnh khác từ bảng 3.7 Một số lệnh cho bảng 3.7 làm việc với phép tốn lơ-gíc AND OR Các ví dụ mục cách sử dụng chúng nào? chương nhiều ví dụ việc sử dụng lệnh đơn phạm vi ứng dụng thực tế Bảng 3.7: Các lệnh liên quan đến cờ nhớ CY Lệnh chức SETB C Thực (tạo) CY = CLR C Xố bít nhớ CY = CPL C Bù bít nhớ MOV b, C Sao chép trạng thái bít nhớ vào vị trí bít b = CY MOV C, b Sao chép bít b vào trạng thái bít nhớ CY = b JNC đích Nhảy tới đích CY = JC đích Nhảy tới đích CY = ANL C bít Thực phép AND với bít b lưu vào CY ANL C./ bít Thực phép AND với bít đảo lưu vào CY ORL C bít Thực phép OR với bít lưu vào CY ORL C./ bít Thực phép OR với bít đảo lưu vào CY Ví dụ 3.35: Hãy viết chương trình để lưu cất trạng thái bít P1.2 P1.3 vào vị trí nhớ tương ứng RAM Lời giải: MOV C, P1.2 ; Lưu trạng thái P1.2 vào CY MOV 06, C ; Lưu trạng thái CY vào bít RAM MOV C, P1.3 ; Lưu trạng thái P1.2 vào CY 75 GT: Vi điều khiển MOV Trường Cao đẳng nghề Yên Bái 07, C ; Lưu trạng thái CY vào vị trí RAM 07 Ví dụ 3.36: Giả sử vị trí nhớ 12H RAM giữ trạng thái việc có điện thoại hay khơng Nếu trạng thái cao có nghĩa có gọi kiểm tra lần cuối Hãy viết chương trình để hiển thị “có lời nhắn mới” (“New Message”) hình LCD bít 12H RAM có giá trị cao Nếu có giá trị thấp LCD hiển thị “khơng có lời nhắn mới” (“No New Message”) Lời giải: MOV C, 12H JNC NO ; Sao trạng thái bít 12H RAM vào CY ; Kiểm tra xem cờ CY có giá trị cao không MOV DPTR, # 400H ; Nếu nạp địa lời nhắn LCAL DISPLAY ; Hiển thị lời nhắn SJMP ; Thoát NEXT NO: MOV DSTR, #420H LCAL DISPLAY EXIT: ; Nạp địa lời nhắn ; Hiển thị Thốt ; data to be displayed on LCD ORG 400H YES-MG: DB “NEW Message” ORG 420H NO-MG: DB “No New Message” Ví dụ 3.37: Giả sử bít P2.2 dùng để kiểm tra đèn ngồi bít P2.5 dùng để kiểm tra đèn tồ nhà Hãy trình bày làm để bật đèn tắt đèn nhà Lời giải: SETB C ; Đặt CY = ORL C, P2.2, C ; Thực phép OR với CY MOV P2.2, C ; Bật đèn chưa bật CLR C ; Xoá CY = ANL C, P2.5 MOV ; CY = (P2.5 AND CY) P2.5, C ; Tắt nó chưa tắt 3.4.7 Đọc chân đầu vào thơng qua chốt cổng 76 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Trong việc đọc cổng số lệnh đọc trạng thái chân cổng, số lệnh khác đọc số trạng thái chốt cổng Do vậy, đọc cổng có hai khả năng: Đọc trạng thái chân vào Đọc chốt cổng Chúng ta phải phân biệt hai dạng lệnh lẫn lộn chúng nguyên nhân lỗi lập trình cho 8051, đặc biệt kết nối với phần cứng bên Trong phần ta bàn sơ qua lệnh a Các lệnh đọc cổng vào Như nói chương để biến bít cổng 8051 thành cổng đầu vào, phải ghi (lơ-gíc cao) vào bít Ssu cấu hình bít cổng đầu vào, ta sử dụng lệnh định để nhận liệu chân vào CPU Bảng 3.8 lệnh nói Bảng 3.8: Các lệnh đọc cổng vào Giả lệnh Ví dụ Mơ tả MOV A, PX MOV A, P2 Chuyển liêuj chân P2 vào ACC JNB PX.Y, JNB P2.1, đích Nhảy tới đích nếu, chân P2.1 = JB PX.Y, JB P1.3, đích Nhảy đích nếu, chân P1.3 = MOV C, PX.Y MOV C, P2.4 Sao trạng thái chân P2.4 vào CY a) Đọc chốt cho cổng đầu Một số lệnh nội dung chốt cổng thay cho việc đọc trạng thái chân Bảng 3.9 cung cấp danh sách lệnh Ví dụ, xét lệnh “ANL P1, A” Trình tự thao tác thực lệnh sau: Nó chốt cổng chuyển liệu vào CPU Dữ liệu AND với nội dung ghi A Kết ghi ngược lại chốt cổng Dữ liệu chân cổng thay đổi có giá trị chốt cổng Từ bàn luận ta kết luận rằng, lệnh đọc chốt cổng thường đọc giá trị, thực phép tính (và thay đổi nó) sau ghi ngược 77 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái lại chốt cổng Điều thường gọi “Đọc-sửa-ghi”, (“Read-ModifyWrite”) Bảng 3.9: liệt kê lệnh đọc-sửa-ghi sử dụng cổng tốn hạng đích hay nói cách khác, dùng cho cổng cấu cổng giả lệnh Ví dụ ANL PX ANL P1, A ORL PX ORL P2, A XRL PX XRL P0, A JBC PX.Y, đích JBC P1.1, đích CPL PX CPL P1.2 INC PX INC P1 DEC PX DEC P2 DJN2 PX.Y, đích DJN2 P1, đích MOV PX.Y, C MOV P1.2, C CLR PX.Y CLR P2.3 SETB PX.Y SETB P2.3 3.5 Nhóm lệnh rẽ nhánh chương trình 3.5.1 Tạo vòng lặp 8051 Qúa trình lặp lại chuỗi lệnh với số lần định gọi vòng lặp Vòng lặp hoạt động sử dụng rộng rãi mà vi sử lý thực Trong 8051 hoạt động vòng lặp thực lệnh “DJNZ ghi, nhãn” Trong lệnh ghi giảm xuống, khơng khơng nhảy đến địa đích tham chiếu nhãn Trước bắt đầu vòng lặp ghi nạp với đếm cho số lần lặp lại Lưu ý rằng, lệnh việc giảm ghi định để nhảy kết hợp vào lệnh đơn Ví dụ 3.38: Viết chương trình để: a) xố ACC sau 78 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái b) cộng vào ACC 10 lần Lời giải: MOV A, #0 ; Xoá ACC, A = MOV R2, #10 ; Nạp đếm R2 = 10 A, #10 ; Cộng 03 vào ACC DJNZ R2, AGAIN ; Lặp lại R2 = (10 lần) MOV R5, A ; Cắt A vào ghi R5 BACK: ADD Trong chương trình ghi R2 sử dụng đếm Bộ đếm lúc đầu đặt 10 Mỗi lần lặp lại lệnh DJNZ giảm R2 không nhảy đến địa đích gắn với nhãn “AGAIN” Hoạt động lặp lại tiếp tục R2 trở không Sau R2 = khỏi vòng lặp thực đứng trường hợp lệnh “MOV R5, A” Lưu ý lệnh DJNZ ghi ghi ghi R0 - R7 3.5.2 Vòng lặp bền vòng lặp Như trình bày ví dụ 3.2 số đếm cực đại 256.Vậy điều xảy ta muốn lặp hành động nhiều 256 lần? Để làm điều ta sử dụng vòng lặp bên vòng lặp gọi vòng lặp lồng (Nested Loop) Trong vòng lặp lồng ta sử dụng ghi để giữ số đếm Ví dụ 3.39: Hãy viết chương trình a) nạp ghi ACC với giá trị 55H b) bù ACC 700 lần Lời giải: Vì 700 lớn 256 (là số cực đại mà ghi vó thể chứa được) nên ta phải dùng hai ghi để chứa số đếm Đoạn mã trình bày cách sử dụng hai ghi R2 R3 để chứa số đếm MOV A, #55H MOV R3, #10 ; Nạp R3 = 10 số đếm vòng lặp ngồi NEXT: MOV R2, #70 ; Nạp R2 = 70 số đếm vòng lặp AGAIN: CPL ; Nạp A = 55H A ; Bù ghi A DJNZ R2, AGAIN DJNZ R3, NEXT ; Lặp lại 70 lần (vòng lặp trong) Trong chương trình ghi R2 dùng để chứa số đếm vòng lặp Trong lệnh “DJNZ R2, AGAIN” R2 = thẳng xuống lệnh “JNZ R3, NEXT” thực Lệnh ép CPU nạp R2 với số đếm 79 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 70 vòng lặp bắt đầu lại q trình tiếp tục R3 trở không vòng lặp ngồi kết thúc 3.5.3 Các lệnh nhảy có điều kiện a) Các lệnh nhảy có điều kiện 8051 tổng hợp bảng 3.10 Các chi tiết lệnh cho phụ lục AppendixA Trong bảng 3.10 lưu ý số lệnh JZ (nhảy A = 0) JC (nhảy có nhớ) nhảy điều kiện định thoả mãn Kế tiếp ta xét số lệnh nhảy có điều kiện với Ví dụ 3.40: Lệnh JZ (nhảy A = 0) Trong lệnh nội dung ghi A kiểm tra Nếu khơng nhảy đến địa đích Ví dụ xét đoạn mã sau: MOV A, R0 ; Nạp giá trị R0 vào A JZ OVER ; Nhảy đến OVER A = MOV A, R1 ; Nạp giá trị R1 vào A JZ OVER ; Nhảy đến OVER A = OVER Trong chương trình R0 R1 có giá trị nhảy đến địa có nhãn OVER Lưu ý lệnh JZ sử dụng ghi A Nó kiểm tra xem ghi A có khơng khơng khơng áp dụng cho ghi khác Quan trọng ta thực lệnh số học đếm giảm để sử dụng lệnh JNZ ví dụ 3.41 Ví dụ 3.41: Viết chương trình để xác định xem R5 có chứa giá trị khơng? Nếu nạp cho giá trị 55H Lời giải: MOV A, R5 ; Sao nội dung R5 vào A JNZ NEXT ; Nhảy đến NEXT A không MOV R5, #55H ; NEXT: b) Lệnh JNC (nhảy khơng có nhớ, cờ CY = 0) Trong lệnh bit cờ nhớ ghi cờ PSW dùng để thực định nhảy Khi thực lệnh “JNC nhãn” xử lý kiểm tra cờ nhớ xem có bật khơng (CY = 1) Nếu khơng bật CPU bắt đầu nạp thực lệnh từ địa nhãn Nếu cờ CY = khơng nhảy thực lệnh JNC 80 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Cần phải lưu ý có lệnh “JC nhãn” Trong lệnh JC CY = nhảy đến địa đích nhãn Ta xét ví dụ lệnh ứng dụng chương sau Ngồi có lệnh JB (nhảy bit có mức cao) JNB (nhảy bit có mức thấp) Bảng 3.10: Các lệnh nhảy có điều kiện Lệnh Hoạt động JZ Nhảy A = JNZ Nhảy A ≠ DJNZ Giảm nhảy A = CJNE A, byte Nhảy A ≠ byte CJNE re, # data Nhảy Byte ≠ data JC Nhảy CY = JNC Nhảy CY = JB Nhảy bit = JNB Nhảy bit = JBC Nhảy bit = xố Ví dụ 3.42: Hãy tìm tổng giá trị 79H, F5H E2H Đặt vào ghi R0 (byte thấp) R5 (byte cao) Lời giải: MOV A, #0 ; Xoá ghi A = MOV R5, A ; Xoá R5 ADD A #79H ; Cộng 79H vào A (A = + 79H = 79H) JNC N-1 INC R5 N-1: ADD A, #0F5H ; Nếu khơng có nhớ cộng ; Nếu CY = 1, tăng R5 ; Cộng F5H vào A (A = 79H + F5H = 6EH) CY = JNC N-2 INC R5 N-2: ADD A, #0E2H ; Nhảy CY = ; Nếu CY = tăng R5 (R5 = 1) ; Cộng E2H vào A 81 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái (A = GE + E2 = 50) CY = JNC OVER ; Nhảy CY = INC R5 ; Nếu CY = tăng R5 OVER: MOV R0, A ; Bây R0 = 50H R5 = 02 c) Tất lệnh nhảy có điều kiện phép nhảy ngắn Cần phải lưu ý tất lệnh nhảy có điều kiện phép nhảy ngắn, có nghĩa địa đích phải nằm khoảng -127 đến +127 byte nội dung đếm chương trình PC 3.5.4 Các lệnh nhảy khơng điều kiện Lệnh nhảy không điều kiện phép nhảy điều khiển truyền khơng điều kiện đến địa đích Trong 8051 có hai lệnh nhảy khơng điều kiện là: LJMP (nhảy xa) SJMP (nhảy gần) a) Nhảy xa LJMP: Nhảy xa LJMP lệnh byte byte mã lệnh hai byte lại địa 16 bit đích Địa đích 02 byte có phép phép nhảy đến vị trí nhớ khoảng 0000 - FFFFH Hãy nhớ rằng, đếm chương trình 8051 16 bit, cho không gian địa 64k byte, nhớ chương trình ROM chíp lớn 8051 có 4k byte ROM chíp cho khơng gian chương trình, byte q giá Vì lý mà có lệnh nhảy gần SJMP có byte so với lệnh nhảy xa LZ0MP dài byte Điều tiết kiệm số byte nhớ nhiều ứng dụng mà khơng gian nhớ có hạn hẹp b) Lệnh nhảy gồm SJMP Trong byte byte mã lệnh byte thứ hai tương đối địa đích Đích tương đối phạm vi 00 - FFH chia thành lệnh nhảy tới nhảy lùi: Nghĩa -128 đến +127 byte nhớ tương đối so với địa thời đếm chương trình Nếu lệnh nhảy tới địa đích nằm khoảng 127 byte từ giá trị thời đếm chương trình Nếu địa đích phía sau nằm khoảng -128 byte từ giá trị hành PC 3.5.5 Tính tốn địa lệnh nhảy gần Ngồi lệnh nhảy gần SJMP tất lệnh nhảy có điều kiện JNC, JZ DJNZ lệnh nhảy gần thực tế chúng lệnh byte Trong lệnh byte thứ mã lệnh, byte thứ hai địa tương đối Địa đích tương đối so với giá trị đếm chương trình Để tính tốn địa đích byte thứ hai cộng vào ghi PC lệnh đứng sau lệnh nhảy Để hiểu điều xét ví dụ 3.43 82 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Ví dụ 3.43: Sử dụng tệp tin liệt kê kiểm tra việc tín toán địa nhảy trước 01 0000 ORG 0000 02 0000 7800 MOV R0, #0 03 0002 7455 MOV A, #55H 04 0004 6003 JZ NEXT 05 0006 08 NIC R0 06 0007 04 07 0008 04 08 0009 2477 09 000B 10 AGAIN: INC A INC A ADD A, #77h 5005 JNC OVER 000D E4 CLR A 11 000E F8 MOV R0, A 12 000F F9 MOV R1, A 13 0010 FA MOV R2, A 14 0011 FB MOV R3, A 15 0012 2B ADD A, R3 16 0013 50F2 JNC AGAIN 17 0015 80FE 18 0017 NEXT: OVER: HERE: SJMP SHERE END Lời giải: Trước hết lưu ý lệnh JZ JNC lệnh nhảy trước Địa đích lệnh nhảy trước tính tốn cách cộng giá trị PC lệnh sau vào byte thứ hai lệnh nhảy gần gọi địa tương đối dòng 04 lệnh “JZ NEXT” có mã lệnh 60 toán hạng 03 địa 0004 0005 03 địa tương đối, tương đối so với địa lệnh là: “INC R0” 0006 Bằng việc cộng 0006 vào địa đích nhãn NEXT 0009 tạo Bằng cách tương tự dòng lệnh “JNC OVER” có mã lệnh toán hạng 50 05 50 mã lệnh 05 địa tương đối Do vậy, 05 cộng vào OD địa lệnh “CLA A” đứng sau lệnh “JNC OVER” cho giá trị 12H địa nhãn OVER Ví dụ 3.44: Hãy kiểm tra tính tốn địa lệnh nhảy lùi ví dụ 3.43 Lời giải: 83 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Trong danh sách liệt kê chương trình lệnh “JNC AGAIN” có mã lệnh 50 địa tương đối F2H Khi địa tương đối F2H cộng vào 15H địa lệnh đứng lệnh nhảy ta có 15H + F2H = 07 (và phần nhớ bỏ đi) Để ý 07 địa nhãn AGAIN Và xét lệnh “SJMP HERE” có mã lệnh 80 địa tương đối FE giá trị PC lệnh 0017H cộng vào địa tương đối FEH ta nhận 0015H địa nhãn HERE (17H + FEH = 15H) phần nhớ bỏ đi) Lưu ý FEH -2 17h + (-2) = 15H 3.5.6 Tính tốn địa đích nhảy lùi Trong trường hợp nhảy tới giá trị thay số dương khoảng từ đến 127 (00 đến 7F dạng Hex) lệnh nhảy lùi giá trị thay số âm nằm khoảng từ đến -128 giải thích ví dụ 3.44 Cần phải nhấn mạnh rằng, SJMP nhảy tới hay nhảy lùi lệnh nhảy địa địa đích khơng lớn -128 đến +127 byte so với địa gắn liền với lệnh đứng sau lệnh SJMP Nếu có nỗ lực vi phạm luật hợp ngữ tạo lỗi báo lệnh nhảy phạm vi 3.5.7 Các lệnh gọi CALL Một lệnh chuyển điều khiển khác lệnh CALL dùng để gọi chương trình Các chương trình thường sử dụng để thực thi công việc cần phải thực thường xuyên Điều làm cho chương trình trở nên có cấu trúc ngồi việc tiết kiệm thêm khơng gian nhớ Trong 8051 có lệnh để gọi là: Gọi xa CALL gọi tuyệt đối ACALL mà định sử dụng lệnh phụ thuộc vào địa đích 3.5.8 Lệnh gọi xa LCALL Trong lệnh byte byte mã lệnh, hai byte sau dùng cho địa chương trình đích Do LCALL dùng để gọi chương trình vị trí phạm vi 64k byte, không gian địa 8051 Để đảm bảo sau thực chương trình gọi để 8051 biết chỗ quay trở tự động cất vào ngăn xếp địa lệnh đứng sau lệnh gọi LCALL Khi chương trình gọi, điều khiển chuyển đến chương trình xử lý cất đếm chương trình PC vào ngăn xếp bắt đầu nạp lệnh vào vị trí Sau kết thúc thực chương trình lệnh trở RET chuyển điều khiển cho nguồn gọi Mỗi chương trình cần lệnh RET lệnh cuối (xem ví dụ 3.45) Các điểm sau cần phải lưu ý từ ví dụ 3.45 84 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Lưu ý đến chương trình DELAY thực lệnh “LCALL DELAY” địa lệnh kế “MOV A, #0AAH” đẩy vào ngăn xếp 8051 bắt đầu thực lệnh địa 300H Trong chương trình DELAY, lúc đầu đếm R5 đặt giá trị 255 (R5 = FFH) Do vậy, vòng lặp lặp lại 256 lần Khi R5 trở điều khiển rơi xuống lệnh quay trở RET mà kéo địa từ ngăn xếp vào đếm chương trình tiếp tục thực lệnh sau lệnh gọi CALL Ví dụ 3.45: Hãy viết chương trình để chốt tất bit cổng P1 cách gửi đến giá trị 55H AAH liên tục Hãy đặt độ trễ thời gian lần xuất liệu tới cổng P1 Chương trình sử dụng để kiểm tra cổng 8051 chương Lời giải: ORG 0000 BACK: MOV A, #55H ; Nạp A với giá trị 55H MOV P1, A ; Gửi 55H đến cổng P1 LCALL DELAY ; Tạo trễ thời gian MOV A, #0AAH ; Nạp A với giá trị AAH MOV P1, A ; Gửi AAH đến cổng P1 LCALL DELAY ; Giữ chậm SJMP ; Lặp lại vô tận BACK ; - Đây chương trình tạo độ trễ thời gian ORG 300H ; Đặt chương trình trễ thời gian địa 300H DELAY: MOV R5, #FFH ; Nạp đếm R5 = 255 (hay FFH) AGAIN: DJNZ R5, AGAIN ; Tiếp tục R5 không RET ; Trả điều khiển nguồn gọi (khi R5 = 0) END ; Kêt thúc tệp tin hợp ngữ Lượng thời gian trễ ví dụ 3.45 phục thuộc vào tần số 8051 Tuy nhiên ta tăng thời gian độ trễ cách sử dụng vòng lặp lồng DELAY: ; Vòng lặp lồng giữ chậm 85 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái MOV R4, #255 ; Nạp R4 = 255 (FFH dạng hex) NEXT: MOV R5, #255 ; Nạp R5 = 255 (FFH dạng hex) AGAIN: DJNZ R5, AGAIN ; Lặp lại RT = DJNZ R4, NEXT ; Giảm R4 ;Tiếp tục nạp R5 R4 = RET ; Trở (khi R4 = 0) 3.5.9 Lệnh gọi CALL vai trò ngăn xếp Ngăn xếp trỏ ngăn xếp ta nghiên cứu chương cuối Để hiểu tầm quan trọng ngăn xếp vi điều khiển khảo sát nội dung ngăn xếp trỏ ngăn xếp ví dụ 3.45 Điều trình bày ví dụ 3.46 Ví dụ 3.46: Hãy phân tích nội dung ngăn xếp sau thực lệnh LCALL 001 0000 ORG 00 002 0000 7455 55H BACK: MOV A, #55H ; Nạp A với giá trị ; Gửi 55H tới cổng P1 003 0002 F590 MOV P1, A 004 0004 120300 LCALL DELAY ; Tạo trễ thời gian 005 0007 74AA MOV A, #0AAH ; Nạp A với giá trị AAH 006 0009 F590 MOV P1, A ; Gửi AAH tới cổng P1 007 000B 120300 LCALL DELAY ; Tạo trễ thời gian 008 000E 80F0 SJMP BACK ; Tiếp tục thực 009 0010 010 0010 ; Đây chương trình giữ chậm 011 0300 MOV 300H 012 0300 013 0300 7DFF 014 0302 DDFE AGAIN: 015 0304 22 RET ; Trở nguồn gọi 016 0305 END ; Kết thúc nạp tin hợp ngữ DELAY: MOV R5, #FFH ; Nạp R5 = 255 DJNZ R5, AGAIN ; Dừng Lời giải: 86 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái Khi lệnh LCALL thực địa lệnh “MOV A, #0AAH” cất vào ngăn xếp Lưu ý byte thấp vào trước byte cao vào sau Lệnh cuối chương trình gọi phải lệnh trở RET để chuyển CPU kéo (POP) byte đỉnh ngăn xếp vào đếm chương trình PC tiếp tục thực lệnh địa 07 Sơ đồ bên khung ngăn xếp sau lần gọi LCALL 0A 09 00 08 07 SSP = 09 3.5.10 Lệnh gọi tuyệt đối ACALL (Absolute call) Lệnh ACALL lệnh byte khác với lệnh LCALL dài byte Do ACALL có byte nên địa đích chương trình phải nằm khoảng 2k byte địa có 11bit byte sử dụng cho địa Khơng có khác biệt ACALL LCALL khái niệm cất đếm chương trình vào ngăn xếp hay chức lệnh trở RET Sự khác địa đích lệnh LCALL nằm đâu phạm vi 64k byte không gian địa 8051, địa lệnh ACALL phải nằm khoảng byte Trong nhiều biến 8051 hãng cung cấp ROM chíp có 1k byte Trong trường hợp việc sử dụng ACALL thay cho LCALL tiết kiệm số byte nhớ khơng gian ROM chương trình Ví dụ 3.47: Một nhà phát triển sử dụng chíp vi điều khiển Atmel AT89C1051 cho sản phẩm Chíp có 1k byte ROM Flash chíp Hỏi lệnh LCALL ACALL lệnh hữu ích lập trình cho chíp Lời giải: Lệnh ACALL hữu ích lệnh byte Nó tiết kiệm byte lần gọi sử dụng Tất nhiên, việc sử dụng lệnh gọn nhẹ, lập trình hiệu cách có hiểu biết chi tiết tất lệnh hỗ trợ vi xử lý cho sử dụng chúng cách khôn ngoan Xét ví dụ 3.48 Ví dụ 3.48: Hãy viết lại chương trình ví dụ 3.45 cách hiệu mà bạn có thể: Lời giải: ORG 87 GT: Vi điều khiển BACK: Trường Cao đẳng nghề Yên Bái MOV A, #55H ; Nạp Avới giá trị 55H MOV P1, A ; Xuất giá trị A cổng P1 ACALL DELAY CPL A ; Bù thành ghi A SJMP BACK ; Tiếp tục thực vô hạn ; Giữ chậm ; Đây chương trình giữ chậm DELAY DELAY: MOV R5, #0FFH ; Nạp R5 = 255 (hay FFH) làm cho đếm AGAIN: DJNZ R5, AGAIN ; Dừng R5 = RET ; Trở END Bài tập Các lệnh “SETB A”, “CLR A”, “CPL A” hay sai? Các cổng vào/ ghi đánh địa theo bít Các lệnh hay sai? Đánh dấu lệnh a) SETB P1 e) SETB B4 b) SETB P2.3 f) CLR c) CLR ACC.5 g) CLR d) CRL 90H 80H PSW.3 h) CLR 87H Hãy giết chương trình tạo xung vng với độ đầy xung 75%, 80% chân P1.5 P2.7 tương ứng Viết chương trình hiển thị P1.4 có giá trị cao chương trình tạo âm (sóng dung vng 50% độ đầy xung) chân P2.7 Nhưng địa bít gán cho cổng P0, P1, P2 P3 cho ghi PCON, A, B PSW Những địa bít thuộc cổng hay ghi nào? a) 85H b)87H c) 88H d)8DH e)93H f) A5H g)A7H h) B3H i) D4H j) D8H Hãy viết chương trình lưu ghi A, B vào R3 R5 băng nhớ tương ứng Cho lệnh khác cho “CLR C”, so sánh chúng 88 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 10 Làm để kiểm tra trạng thái bít cờ OV, CY, P AC Hãy tìm địa bít cờ 11 Các địa sau thuộc vùng RAM nào? a) 05H b) 47 c) 18H d) 2DH e) 53H g) 15H h) 67H h) 55H i) 14H k) 37FH 12 Các địa nhỏ 80H gán cho địa 20-2FH RAM phải không? (Đúng/ sai) 89 ... 1C 1B 1A 19 18 8D Địa byte TH1 22 17 16 15 14 13 12 11 10 8C Địa byte TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B Địa byte TL1 20 07 06 05 04 03 02 01 00 8A Địa byte TL0 89 Địa byte TMOD 1F Bank 18 17 88... 11 1 1. 4 Tốc độ truyền liệu 11 2 1. 5 Chuẩn RS232 11 2 Thanh ghi điều khiển 11 3 2 .1 Thanh ghi SCON 11 3 2.2 Thanh ghi SBUF 11 5 Chế độ làm vi c ... 11 0 Mở đầu 11 0 1. 1 Khái niệm truyền liệu đơn công song công 11 1 GT: Vi điều khiển Trường Cao đẳng nghề Yên Bái 1. 2 Truyền thông nối tiếp dị đóng khung liệu 11 1 1. 3 Các

Ngày đăng: 12/02/2020, 22:49

TỪ KHÓA LIÊN QUAN