1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chuong 2 lap trinh hop ngu tren vi dieu khien MCS 51 smith n studio

22 219 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 22
Dung lượng 416,64 KB

Nội dung

Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Chương 2: LẬP TRÌNH HỢP NGỮ TRÊN VI ĐIỀU KHIỂN MCS-51 Chương giới thiệu cách thức lập trình MCS-51 giải thích hoạt động lệnh sử dụng cho họ MCS-51 Các ký hiệu cần ý: i d u t S Rn : ghi từ R0 – R7 (bank ghi hành) Ri : ghi từ R0 – R1 (bank ghi hành) @Rn : định địa gián tiếp bit dùng ghi Rn @DPTR : định địa gián tiếp 16 bit dùng ghi DPTR direct : định địa trực tiếp RAM nội (00h – 7Fh) hay SFR (80h – FFh) (direct) : nội dung nhớ địa direct #data8 : giá trị tức thời bit #data16 : giá trị tức thời 16 bit bit : địa bit nhớ định địa bit (00h – 7Fh địa bit 20h – 2Fh địa byte) y u g n e o Các phương pháp định địa ™ Định địa trực tiếp Định địa trực tiếp dùng cho ghi chức đặc biệt RAM nội 8951 Giá trị địa trực tiếp bit thêm vào phía sau mã lệnh Nếu địa trực tiếp từ 00h – 7Fh RAM nội 8951 (128 byte), địa từ 80h – FFh địa ghi chức đặc biệt (xem bảng 1.2, chương 1) N Các lệnh sau có kiểu định địa trực tiếp: h it MOV A, P0 MOV A, 30h Lệnh chuyển nội dung từ Port vào ghi A Khi biên dịch, chương trình thay từ gợi nhớ P0 địa trực tiếp Port (80h) đưa vào byte mã lệnh Lệnh thứ hai chuyển nội dung RAM nội có địa 30h vào ghi A m S ™ Định địa gián tiếp Định địa gián tiếp dùng cho RAM nội RAM ngoại Trong chế độ này, địa RAM xác định thông qua ghi (R0, R1, SP cho địa bit DPTR cho địa 16 bit) Các lệnh sau có kiểu địa gián tiếp: MOV A, @R0 Phạm Hùng Kim Khánh Trang 35 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 MOVX A, @DPTR Lệnh chuyển nội dung cúa RAM nội có địa chứa ghi R0 vào ghi A (giả sử R0 = 30h chuyển nội dung ô nhớ 30h) Lệnh thứ hai chuyển nội dung RAM ngoại vào ghi A (địa RAM chứa DPTR) ™ Định địa ghi ™ Định địa tức thời o i d u t S Các ghi từ R0 – R7 truy xuất cách định địa trực tiếp hay gián tiếp Ngoài ra, ghi truy xuất cách dùng bit mã lệnh để chọn ghi (8 ghi có địa trực tiếp thay đổi tuỳ theo bank ghi sử dụng) Giá trị số đưa trực tiếp vào mã lệnh chương trình Trong hợp ngữ, số xác định cách sử dụng dấu # Lệnh: MOV A, #10h có chế độ địa tức thời y u g ™ Định địa chỉ số n e Quá trình định địa chỉ số dùng cho nhớ chương trình, dùng để đọc liệu bảng tìm kiếm Chế độ thường dùng ghi 16 bit (PC hay DPTR) để vị trí bảng ghi A vị trí phần tử bảng N Các vấn đề liên quan lập trình hợp ngữ h it 2.1 Cú pháp lệnh Một lệnh chương trình hợp ngữ có dạng sau: Nhãn Lệnh Tốn hạng Chú thích A: MOV A, #10h ; Đưa giá trị 10h vào ghi A LED EQU 30h ; Định nghĩa ô nhớ chứa mã led On_Led BIT 00h ; Cờ trạng thái led m S Trường nhãn định nghĩa ký hiệu (có thể địa chương trình, liệu, tên đoạn hay cấu trúc lập trình) Trường nhãn không bắt đầu số không trùng với từ khố có sẵn Trường lệnh chứa từ gợi nhớ cho lệnh MCS-51 hay lệnh giả dùng cho chương trình dịch Phạm Hùng Kim Khánh Trang 36 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Trường toán hạng chứa thông số liên quan đến lệnh sử dụng Trường thích dùng để ghi chương trình hợp ngữ Trường phải bắt đầu dấu ; chương trình dịch bỏ qua từ đặt sau dấu ; o Lưu ý chương trình dịch khơng phân biệt chữ hoa chữ thường 2.2 - Khai báo liệu i d u t S Khi khai báo số, chữ h cuối xác định số số thập lục phân; chữ b cuối xác định số nhị phân chữ d cuối (hay khơng có) xác định số thập phân Lưu ý số thập lục phân, bắt đầu chữ A → F phải thêm số vào phía trước dụ: 1010b ; Số nhị phân 1010h ; Số thập lục phân 1010 ; Số thập phân y u g n e 0F0h ; Số thập lục phân bắt đầu chữ F nên phải thêm vào phía trước số - Khi dùng dấu # phía trước số, liệu tức thời khơng dùng dấu # địa nhớ Lưu ý dùng RAM nội dùng địa từ 00 – 7Fh vùng địa từ 80h – 0FFh dùng cho ghi chức đặc biệt Đối với họ 89x52, RAM nội có 256 byte byte địa cao (từ 80h – 0FFh) truy xuất trực tiếp mà phải truy xuất gián tiếp h it dụ: MOV A,30h MOV A,#30h MOV A,80h m S MOV R0,#80h MOV A,@R0 - N ; ; ; ; ; ; Chuyển nội dung ô nhớ 30h vào A Chuyển giá trị 30h vào A Chuyển nội dung Port vào A (80h địa Port Chuyển nội dung ô nhớ 80h vào A (chỉ dùng cho họ 89x52) Để định nghĩa trước vùng nhớ nhớ chương trình, dùng dẫn DB (define byte – định nghĩa byte) hay DW (define word – định nghĩa byte) dụ: Định nghĩa trước liệu cho led sau: Phạm Hùng Kim Khánh Trang 37 Giáo trình Vi điều khiển Led: DB Lập trình hợp ngữ vi điều khiển MCS-51 01h,02h,04h,08h,10h,20h,40h,80h Đoạn chương trình xác định nhãn Led có chứa giá trị từ 01h đến 80h Nếu nhãn Led đặt địa 100h giá trị tương ứng sau: Địa 100h 101h 102h 103h 104h 105h 106h 107h - Giá trị 01h 02h 04h 08h 10h 20h 40h 80h n e o i d u t S Để dễ nhớ dễ hiểu lập trình, chương trình dịch cho phép dùng ký tự thay cho ô nhớ lệnh giả EQU, BIT dụ: y u g LED EQU 30h ON_LED BIT 00h Giả sử chương trình hợp ngữ có lệnh sau: MOV A,LED SETB ON_LED N Khi biên dịch, chương trình dịch tự động chuyển thành dạng lệnh sau: h it MOV A,30h SETB 00h m S 2.3 Các toán tử ™ Các toán tử số học: Bao gồm toán tử +, -, *, /, mod dụ: Các lệnh sau tương đương: MOV A,#12h MOV A,#21 mod MOV A,#12/4 Phạm Hùng Kim Khánh MOV A,#10h + 2h MOV A,#1 MOV A,#3 Trang 38 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 ™ Các toán tử logic: Bao gồm toán tử: OR, AND, NOT, XOR o dụ: Các lệnh sau tương đương: MOV A,#01h MOV A,#-5 MOV A,#24h MOV A,#03h AND 91h MOV A,#NOT MOV A,#20h OR 04h ™ Các toán tử quan hệ: i d u t S Bao gồm toán tử: EQ (=), NE (), LT ( =) Lưu ý khí sử dụng tốn tử quan hệ, có kết quả: sai (= 0) hay (= FFh hay FFFFh tuỳ theo kết bit hay 16 bit) dụ: Các lệnh sau tương đương: MOV A,#00h MOV A,#0FFh MOV DPTR,#0FFFFh n e MOV A,#5 EQ MOV A,#7 < MOV DPTR,#5 NE y u g ™ Các toán tử khác: Bao gồm toán tử: SHR (dịch phải), SHL (dịch trái), HIGH (byte cao), LOW (byte thấp), (, ) dụ: Các lệnh sau tương đương: MOV A,#06h MOV A,#01h MOV A,#02h h it 2.4 - m S N MOV A,#03h SHL MOV A,#HIGH 0123h MOV A,#LOW 0102h Cấu trúc chương trình Cấu trúc chương trình hợp ngữ mô tả sau: ORG 0000h ; Đặt lệnh LJMP main địa LJMP main ; 0000h (địa bắt đầu ; reset AT89C51) ORG 0030h ; Vùng địa 0003h – 002Fh Main: ; dùng để chứa chương trình ; phục vụ ngắt Phạm Hùng Kim Khánh Trang 39 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 … CALL Subname o … ; -Subname: … … RET END ; kết thúc chương trình i d u t S Các lệnh giả ORG cho biết lệnh phía sau đặt vị trí chương trình Lưu ý khởi động, chương trình AT89C51 thực thi địa 0000h nên thông thường địa có lệnh LJMP main để xác định chương trình bắt đầu nhãn main y u g n e Các dấu ; xác định thích, chương trình dịch bỏ qua tất phần nằm sau dấu ; Các địa từ 0003h – 002Fh phục vụ cho mục đích xử lý ngắt nên khơng sử dụng Tuy nhiên, chương trình khơng cần xử lý ngắt sử dụng vùng địa - h it - m S - N Khi thực soạn thảo chương trình hợp ngữ, dùng chương trình soạn thảo không định dạng (như NotePad, Norton Commander, …) thường lưu file với phần mở rộng asm, a51 (tuỳ theo chương trình dịch) Sau soạn thảo, dùng chương trình dịch để chuyển từ file văn thành file hex (có thể dùng sim51.exe, oh.exe) Ngồi ra, có nhiều chương trình soạn thảo bao gồm chương trình dịch bên (xem thêm phần phụ lục) Khi dịch file hex, dùng mạch nạp để nạp file hex vào AT89C51 (xem thêm phụ lục) Phạm Hùng Kim Khánh Trang 40 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Tập lệnh 3.1 Nhóm lệnh chuyển liệu o 3.1.1 RAM nội Các lệnh nhóm lệnh chuyển liệu RAM nội mô tả bảng sau: Bảng 2.1 – Các lệnh chuyển liệu RAM nội Lệnh MOV A,(byte) MOV (byte),A MOV (byte1),(byte2) MOV DPTR,#data16 PUSH (byte) POP (byte) XCH A,(byte) XCHD A,@Ri Hoạt động A = (byte) (byte) = A (byte1) = (byte2) DPTR = data16 SP = SP + [SP] = (byte) (byte) = [SP] SP = SP – Chuyển đổi liệu ACC (byte) Chuyển đổi bit thấp ACC @Ri h it N i d u t S Chu thi Chế độ địa Tức thời x Trực tiếp Gián tiếp x x x x x x y u g x n e x Thanh ghi x x 1 x 2 x x x x x x ™ Lệnh MOV (Move): m S Di chuyển liệu ghi nhớ 128 byte RAM có địa từ 80h – FFh (chỉ có 8x52) truy xuất cách định địa gián tiếp Các dạng lệnh MOV sau: MOV A, Rn MOV Rn, A MOV A, direct MOV direct, A MOV A,@Ri MOV @Ri,A Phạm Hùng Kim Khánh ; Chuyển nội dung ghi Rn vào ghi A ; Chuyển nội dung ghi A vào ghi Rn ; Chuyển nội dung ô nhớ trực tiếp vào ghi A ; Chuyển nội dung ghi A vào ô nhớ trực tiếp ; Chuyển nội dung nhớ có địa chứa Ri vào A ; Chuyển nội dung củaA vào nhớ có địa chứa Ri Trang 41 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 MOV A, #data8 ; Chuyển giá trị bit vào A MOV Rn, direct; Chuyển nội dung ô nhớ trực tiếp vào ghi Rn MOV direct, Rn ; Chuyển nội dung ghi Rn vào ô nhớ trực tiếp MOV Rn, #data8; Chuyển giá trị bit vào Rn MOV direct, direct; Chuyển nội dung ô nhớ trực tiếp MOV direct, @Ri; Chuyển nội dung ô nhớ có địa chứa Ri vào ô nhớ trực tiếp MOV @Ri, direct; Chuyển nội dung ô nhớ trực tiếp vào ô nhớ có địa chứa Ri MOV direct, #data8; Chuyển giá trị bit vào ô nhớ trực tiếp MOV @Ri, #data8; Chuyển giá trị bit vào nhớ có địa chứa Ri MOV C, bit ; Chuyển giá trị bit vào cờ C MOV bit, C ; Chuyển giá trị cờ C vào bit MOV DPTR, #data16 ; Chuyển giá trị tức thời 16 bit vào ghi DPTR n e o i d u t S Trong lệnh MOV, sử dụng địa trực tiếp từ 80h – FFh thay từ gợi nhớ ghi chức đặc biệt dụ: lệnh MOV A, 80h thay lệnh MOV A, P0 (xem thêm bảng 1.2, chương 1) y u g Khi lệnh MOV thực truy xuất bit, bit địa trực tiếp (từ 00h – 7Fh) hay từ gợi nhớ định nghĩa Các bit định nghĩa trước mô tả sau: Bảng 2.2 – Các bit định nghĩa trước 8951 Thanh ghi A PSW h it m S Các ghi Port N Từ gợi nhớ ACC.0 – ACC.7 CY hay C AC F0 RS1 RS0 OV P P0.0 – P0.7 P1.0 – P1.7 P2.0 – P2.7 P3.0 – P3.7 Phạm Hùng Kim Khánh Địa bit E0h – E7h D7h D6h D5h D4h D3h D2h D0h 80h – 87h 90h – 97h A0h – A7h B0h – B7h Thanh ghi B SCON IP Từ gợi nhớ B.0 – B.7 SM0 SM1 SM2 REN TB8 RB8 TI RI PS PX1 PT1 PX0 PT0 Địa bit F0h – F7h 9Fh 9Eh 9Dh 9Ch 9Bh 9Ah 99h 98h BCh BBh BAh B9h B8h Trang 42 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 EA ES EX1 ET1 EX0 ET0 AFh ACh ABh AAh A9h A8h TF1 TR0 TF0 TR0 IE TCON IE1 IT1 IE0 IT0 dụ: Lệnh MOV C, P0.0 thay lệnh MOV C, 80h ™ Lệnh PUSH / POP: 8Fh 8Eh 8Dh 8Ch 8Bh 8Ah 89h 88h o i d u t S Các lệnh cho phép cất hay lấy nội dung stack Khi thực lệnh PUSH, nội dung ghi SP tăng lên cất byte vào stack Khi thực lệnh POP, byte lấy từ stack sau giảm SP giá trị Lưu ý sử dụng 8951, nhớ nội có 128 byte (00h – 7Fh) nên giá trị SP không vượt 7Fh (nếu vượt qua liệu bị dùng lệnh PUSH liệu không xác định dùng lệnh POP) Còn 8x52, RAM nội 256 byte nên khơng có tượng y u g Các dạng lệnh PUSH / POP: PUSH direct POP direct ; Cất vào stack ; Lấy liệu từ stack n e Lưu ý lệnh PUSH POP dùng cho địa trực tiếp nên thực lệnh PUSH Rn ghi Rn có địa khác tuỳ theo bank ghi sử dụng h it N Xét ghi R0: địa R0 ứng với bank 00h, 08h, 10h, 18h Mặc định reset, bank sử dụng nên ghi Rn có địa từ 00h – 07h Khi thay dùng lệnh PUSH R0, ta thay lệnh PUSH 00h ™ Lệnh XCH / XCHD (Exchange / Exchange Digit): m S Lệnh XCH / XCHD dùng để hoán chuyển bit / bit thấp ghi A với ghi khác hay nhớ (lệnh XCHD dùng cho nhớ nội định địa gián tiếp) Các dạng lệnh sau: XCH A,(byte) ; Hoán chuyển bit XCHD A,@Ri ; Hoán chuyển bit thấp dụ: Xét đoạn lệnh: MOV A, #30h Phạm Hùng Kim Khánh ; A = 30h Trang 43 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 MOV R0, #54h ; R0 = 54h MOV 30h, #20h ; Ô nhớ 30h chứa giá trị 20h hay ;(30h) = 20h XCH A, R0 ; Hoán chuyển A R0 Ỉ A = 54h ; R0 = 30h XCHD A, @R0 ; Chuyển bit thấp A ô nhớ ; R0 = 30h Æ @R0: nội dung ô nhớ 30h Æ 20h ;Chuyển bit thấpỈ A = 50h (30h) = 24h o 3.1.2 RAM ngoại i d u t S Các lệnh nhóm lệnh chuyển liệu RAM ngoại mô tả sau: Bảng 2.3 – Các lệnh chuyển liệu RAM ngoại Lệnh Hoạt động Chu thi MOVX A, @Ri Đọc nội dung từ RAM ngoại địa Ri MOVX @Ri, A Ghi vào RAM ngoại địa Ri MOVX A, @DPTR Đọc nội dung từ RAM ngoại địa DPTR MOVX @DPTR, A Ghi vào RAM ngoại địa DPTR (MOVX : Move eXternal) y u g n e Đối với lệnh đọc / ghi liệu RAM ngoại, cho phép thực định địa gián tiếp Khi địa RAM bit dùng ghi R0 hay R1 địa 16 bit phải dùng ghi DPTR Lưu ý dùng địa bit bit địa cao khơng sử dụng nên Port sử dụng cho mục đích khác dùng địa 16 bit Port có nhiệm vụ xuất bit địa cao N Khi thực lệnh đọc từ RAM ngoại, chân RD xuống mức thấp h it thực lệnh ghi, chân WR xuống mức thấp 3.1.3 Bảng tìm kiếm Các lệnh nhóm lệnh tìm kiếm liệu bảng mơ tả sau: m S Bảng 2.4 – Các lệnh tìm kiếm liệu Lệnh Hoạt động Đọc nội dung nhớ chương trình địa A + DPTR Đọc nội dung nhớ chương trình địa MOVC A, @A +PC A + PC (MOVC: Move Code) MOVC A, @A + DPTR Phạm Hùng Kim Khánh Chu thi 2 Trang 44 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Các lệnh cho phép tìm kiếm liệu định nghĩa sẵn nhớ chương trình (nếu nhớ chương trình ROM ngoại tín hiệu đọc PSEN ) Các ghi DPTR hay PC (Program Counter: đếm chương trình – xác định địa lệnh thực hiện) chứa vị trí bảng tìm kiếm ghi A chứa vị trí phần tử (thơng thường kích thước phần tử bảng tìm kiếm byte) dụ: Lấy phần tử thứ bảng LED_7S: i d u t S MOV A, #2 ; Phần tử thứ MOV DPTR, #LED_7S ; Địa bảng tìm kiếm MOVC A, @A + DPTR ; Đọc nội dung phần tử ……… LED_7S: DB data8, data8, data8, data8, … ; Nội dung bảng tìm kiếm đặt tuỳ ý nhớ chương trình Để sử dụng ghi PC tìm kiếm liệu, trinh tìm kiếm phải thưc thơng qua chương trình bảng phải đặt sau chương trình n e dụ: Lấy phần tử thứ bảng LED_7S: o MOV A, #2 ; Phần tử thứ CALL Read_Led7s …… Read_Led7s: MOVC A, @A+PC RET LED_7S: DB 0, data8, data8, data8, data8, … ; Nội dung bảng tìm kiếm Lưu ý đoạn lệnh trên, thực lệnh MOVC, ghi PC đến lệnh lệnh RET bảng LED_7S Do đó, bảng tìm kiếm trường hợp khơng có phần tử mà bắt đầu phần tử Để chương trình giống cách thực dùng DPTR, cần phải thay đổi chương trình sau: h it N y u g dụ: Lấy phần tử thứ bảng LED_7S: m S MOV A, #2 ; Phần tử thứ CALL Read_Led7s …… Read_Led7s: INC A ; Tăng nội dung A lên để hiệu chỉnh vị trí bảng MOVC A, @A+PC RET Phạm Hùng Kim Khánh Trang 45 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 LED_7S: DB data8, data8, data8, data8, … ; Nội dung bảng tìm kiếm 3.2 Nhóm lệnh xử lý bit Họ MCS-51 chứa xử lý bit hoàn chỉnh RAM nội có 128 bit xử lý bit ghi chức đặc biệt hỗ trợ lên tới 128 bit (các bit SFR xem bảng 2.2) Các địa bit từ 00h – 7Fh nằm RAM nội địa từ 80h – FFh nằm SFR o i d u t S Các lệnh nhóm lệnh logic mô tả bảng sau: Bảng 2.5 – Các lệnh logic Lệnh Hoạt động Chu thi ANL C,bit C = C AND bit ANL C,/bit C = C AND (NOT bit) ORL C,bit C = C OR bit ORL C,/bit C = C OR (NOT bit) MOV C,bit C = bit MOV bit,C Bit = C CLR C C=0 CLR bit Bit = SETB C C=1 SETB bit Bit = 1 CPL C C = NOT C CPL bit Bit = NOT bit JC rel Nhảy đến nhãn rel C = JNC rel Nhảy đến nhãn rel C = JB bit,rel Nhảy đến nhãn rel bit = JNB bit,rel Nhảy đến nhãn rel bit = JBC bit,rel Nhảy đến nhãn rel bit = sau xố bit ANL: And logic; ORL: Or logic; CLR: Clear; CPL: Complement Bit: bit RAM nội từ 00h – 7Fh hay SFR theo bảng 2.2 Rel: địa tương đối (cho phép vùng từ -128 ÷ 127 byte nhớ chương trình) dụ: Chuyển từ bit 00h vào P1.0 MOV C, 00h ; Chuyển bit 00h vào cờ Carry MOV P1.0, C ; Chuyển cờ Carry vào P1.0 Lưu ý tập lệnh logic lệnh XOR mà phải thực phần mềm, cụ thể sau: h it N y u g n e m S Thực lệnh C = C XRL bit: Phạm Hùng Kim Khánh Trang 46 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 JNB bit, next CPL C Next: Ngoài ra, lệnh nhảy dùng địa tương đối, nghĩa cho phép vùng từ -128 ÷ 127 byte Nếu cần nhảy đến dịa xa phải dùng lệnh nhảy khác, mơ tả phần sau 3.3 Nhóm lệnh chuyển điều khiển i d u t S Nhóm lệnh chuyển điều khiển bao gồm lệnh nhảy, lệnh liên quan đến chương trình con, mơ tả sau: Bảng 2.6 – Các lệnh chuyển điều khiển Lệnh Hoạt động JMP addr Nhảy tới nhãn addr JMP @A+DPTR Nhảy tới địa A + DPTR CALL addr Gọi chương trình địa addr RET Trở từ chương trình RETI Trở từ chương trình phục vụ ngắt NOP Khơng làm JMP: Jump RET: Return RETI: Return from Interrupt NOP: No Operation Lệnh h it N y u g Hoạt động Tức thời n e Chu thi 2 2 Chu thi Chế độ địa Trực tiếp Gián tiếp Thanh ghi Nhảy đến nhãn rel JZ rel Chỉ dùng cho ghi A A = Nhảy đến nhãn rel JNZ rel Chỉ dùng cho ghi A A ≠ (byte) = (byte) - DJNZ Nếu (byte) ≠ x x (byte),rel nhảy đến nhãn rel CJNE Nhảy đến nhãn rel x x A,(byte),rel A ≠ (byte) CJNE (byte), Nhảy đến nhãn rel x x #data8,rel (byte) ≠ data8 JZ: Jump if Zero; JNZ: Jump if Not Zero DJNZ: Decrement and Jump if Not Zero m S Phạm Hùng Kim Khánh o 2 2 Trang 47 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 CJNE: Compare and Jump if Not Equal ™ Lệnh JMP (Jump): Lệnh JMP bao gồm lệnh: LJMP (Long jump), AJMP (Absolute jump) SJMP (Short jump) cho phép nhảy đến vị trí chương trình Lệnh LJMP có kích thước byte byte mã lệnh byte chứa địa nhãn nên phạm vi biểu diễn địa 64K (2 byte = 16 bit Ỉ phạm vi biểu diễn 216 = 26 x 210 = 64K) Do lệnh LJMP thực nhảy đến vị trí chương trình địa sử dụng lệnh LJMP địa tuyệt đối o i d u t S Lệnh SJMP có kích thước byte có byte mã lệnh byte địa nên phạm vi biểu diễn địa 256 byte Trong lệnh này, địa sử dụng địa tuyệt đối mà địa tương đối (khoảng nhảy tính từ vị trí bắt đầu lệnh) Do byte địa sử dụng phương pháp bù nên phạm vi biểu diễn từ -128 ÷ + 127, nghĩa phạm vi nhảy lệnh SJMP phạm vi từ - 128 đến 127 byte Phạm vi thực mơ tả hình vẽ y u g n e 128 byte SJMP rel h it N 127 byte Hình 2.1 – Phạm vi thực lệnh SJMP Lệnh AJMP có kích thước byte địa chứa 11 bit nên phạm vi biểu diễn địa 211 (2K) Trong đó, vùng địa tối đa MCS-51 64K nên thực lệnh AJMP, 64K chương trình phải chia thành vùng 2K (tổng cộng 32 vùng) lệnh AJMP thực vùng m S Tuy nhiên, lập trình cho MCS-51, thơng thường chương trình dịch cho phép sử dụng lệnh JMP thay cho lệnh Khi biên dịch, chương trình dịch tự động thay lệnh thích hợp Phạm Hùng Kim Khánh Trang 48 Giáo trình Vi điều khiển 0000h Lập trình hợp ngữ vi điều khiển MCS-51   Phạm vi thực 2K AJMP rel o 07FFh F800h 2K AJMP rel FFFFh y u g n e i d u t S Phạm vi thực Hình 2.2 – Phạm vi thực lệnh AJMP Lệnh JMP @A + DPTR cho phép chọn vị trí nhảy khác tuỳ theo giá trị ghi A Địa nhảy đến tổng giá trị ghi A DPTR dụ: N MOV DPTR, # JUMP_TABLE MOV A, INDEX_NUMBER MOV B, #3 MUL AB JMP @ A + DPTR ……… JUMP_TABLE: LJMP LABEL0 LJMP LABEL1 LJMP LABEL2 LJMP LABEL3 LJMP LABEL4 h it m S Phạm Hùng Kim Khánh ; ; ; ; Địa bảng nhảy Vị trí nhảy x3 lệnh LJMP có kích thước ; ; ; ; ; Vị Vị Vị Vị Vị trí trí trí trí trí nhảy nhảy nhảy nhảy nhảy Trang 49 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 ™ Lệnh CALL, RET, RETI: Lệnh CALL dùng để gọi chương trình con, bao gồm lệnh: ACALL (Absolute Call) LCALL (Long Call) Vị trí gọi lệnh CALL giống xét lệnh JMP Khi lập trình, thơng thường chương trình dịch cho phép thay lệnh CALL biên dịch, lệnh CALL thay lệnh ACALL hay LCALL tuỳ theo vị trí gọi lệnh Lưu ý thực lệnh CALL chương trình phải kết thúc lệnh RET i d u t S Ngoài ra, sử dụng chương trình phục vụ ngắt, kết thúc phải dùng lệnh RETI Lệnh RETI lệnh RET khác chỗ lệnh RETI báo cho hệ thống điều khiển ngắt biết trình xử lý ngắt thực xong ™ Lệnh JZ, JNZ: o Lệnh JZ JNZ dùng để kiểm tra nội dung ghi A Lệnh JZ nhảy A = JNZ nhảy A ≠ Lưu ý phạm vi nhảy cho phép khoảng từ -128 ÷ 127 byte (giống sử dụng lệnh SJMP) ™ Lệnh DJNZ: y u g n e Lệnh DJNZ thường dùng để tạo vòng lặp Số lần lặp chuyển vào ghi đếm đầu vòng lặp (thanh ghi đếm dùng ghi nhớ) dụ: N MOV R7, #10 ; Lặp 10 lần LOOP: …… …… DJNZ R7, LOOP h it ™ Lệnh CJNE: m S Lệnh CJNE dùng để so sánh giá trị với nhau, giá trị khác thực lệnh nhảy Lưu ý tập lệnh MCS-51 khơng có lệnh lớn hay nhỏ nên thực lệnh cách kết hợp lệnh CJNE nội dung cờ Carry Trong lệnh CJNE, byte nhỏ byte thứ hai CF = Ngược lại (byte lớn hay byte thứ hai) CF = dụ: Kiểm tra nội dung ghi A, A nhỏ 10 xuất giá trị ghi A Port Ngược lại xuất giá trị 10 Port Phạm Hùng Kim Khánh Trang 50 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 CJNE A,#10,Khacnhau; JMP Xuat10 ; Khacnhau: JC XuatA ; Xuat10: ; MOV P1,#10 SJMP Tiep XuatA: MOV P1,A Tiep: 3.4 So sánh A với 10 Nếu A = 10 xuất giá trị 10 o Nếu CF = (A < 10) xuất nội dung A P1 Nhóm lệnh logic i d u t S Nhóm lệnh logic bao gồm lệnh liên quan đến xử lý logic theo byte, mô tả sau: Bảng 2.7 – Các lệnh logic Lệnh ANL A,(byte) ANL (byte),A ANL (byte),#data8 ORL A,(byte) ORL (byte),A XRL A,(byte) XRL (byte),A m S XRL (byte),#data8 RR A RLC A RL A Phạm Hùng Kim Khánh N n e Chu thi Chế độ địa y u g A = A AND (byte) (byte)=(byte) AND A (byte)=(byte)AND data8 A = A OR (byte) (byte)=(byte) OR A (byte)=(byte) OR data8 A = A XOR (byte) (byte)=(byte) XOR A (byte)=(byte) XOR data8 A=0 A = NOT A Quay phải ghi A bit Quay phải ghi A CF bit Quay trái ghi A bit h it ORL (byte),#data8 CLR A CPL A Hoạt động Tức thời x x Trực tiếp x x Gián tiếp x Thanh ghi x x x x x x x x x x 1 1 x x x 1 Chỉ dùng cho ghi A Chỉ dùng cho ghi A 1 Chỉ dùng cho ghi A Chỉ dùng cho ghi A Chỉ dùng cho ghi A Trang 51 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Quay trái ghi A Chỉ dùng cho ghi A CF bit Đổi vị trí nibble cao SWAP A Chỉ dùng cho ghi A thấp ACC RL: Rotate Left, RLC: Rotate Left through Carry RR: Rotate Right; RRC: Rotate Right through Carry RLC A ™ Lệnh ANL, ORL, XRL: 1 i d u t S Các lệnh logic thực giống lệnh xử lý bit thực bit ghi hay nhớ Lệnh XRL dùng để đảo tất bit sau: XRL P0, #0FFh ™ Lệnh RR, RRC, RL, RLC: o Các lệnh dùng để quay phải hay quay trái ghi A bit n e dụ: Giả sử ghi A = 39h (0011 1001b), CF = Nội dung ghi A sau thực lệnh quay tương ứng sau: RR A: Trước quay: 0 N Sau quay: 0 h it y u g 1 0 1 1 0 RL A: A = 0111 0010b (72h) RRC A: Trước quay: m S 0 ACC 1 CF 0 1 CF Sau quay: ACC Phạm Hùng Kim Khánh 1 Trang 52 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 RLC A: A = 0111 0011b (73h); CF = ™ Lệnh SWAP: o Lệnh SWAP A dùng để hoán chuyển nội dung nibble ghi A Dụ: Nếu nội dung ghi A = 39h sau thực lệnh SWAP A, nội dung ghi A 93h 3.5 Nhóm lệnh số học i d u t S Các lệnh nhóm lệnh số học mô tả bảng sau: Bảng 2.8 – Các lệnh số học Lệnh ADD A,(byte) ADDC A,(byte) SUBB A,(byte) INC A INC (byte) INC DPTR DEC A DEC (byte) Hoạt động h it MUL AB m S DIV AB DA A A=A+ (byte) A=A+ (byte) + C A=A(byte) - C A=A+1 (byte) = (byte) + DPTR = DPTR + A=A-1 (byte) = (byte) - Chế độ địa Tức thời Trực tiếp x x x x x x B_A = B x A A = A div B B = A mod B Hiệu chỉnh số BCD Gián tiếp Thanh ghi n e x x x x x Chỉ dùng cho ghi tích luỹ ACC y u g x N Chu thi x x x Chỉ dùng cho ghi trỏ lệnh DPTR Chỉ dùng cho ghi tích luỹ ACC x x x Chỉ dùng cho ghi tích luỹ ACC ghi B Chỉ dùng cho ghi tích luỹ ACC ghi B Chỉ dùng cho ghi tích luỹ ACC 4 ™ Lệnh ADD: Thực cộng ghi tích luỹ A toán hạng khác Lệnh ADD ảnh hưởng đến cờ Carry (C), Overflow (OV) Auxiliary (AC) Phạm Hùng Kim Khánh Trang 53 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 Lệnh ADD có chế độ địa khác nhau: - ADD A, #30h - ADD A, 30h ; định địa trực tiếp (A = A + [30h] [30h] giá trị RAM nội có địa 30h) - ADD A, @R0 ; định địa gián tiếp (A = A + [R0] [30h] giá trị RAM nội có địa chứa ghi R0) MOV R0,#30h ; định địa tức thời (A = A + 30h) ; R0 = 30h o i d u t S ADD A,@R0 ; A = A + [R0] = A + [30h] (cộng nội dung ghi ACC với RAM nội có địa 30h) - ; định địa ghi (A = A + R0) ADD A,R0 ™ Lệnh ADDC, SUBB: n e Thực cộng hay trừ nội dung ghi A với toán hạng khác có dùng thêm cờ Carry Lệnh ADDC SUBB ảnh hưởng đến cờ C, OV AC ™ Lệnh MUL: y u g Nhân nội dung ghi A với ghi B Lệnh MUL ảnh hưởng đến cờ OV xoá cờ C (C = 0) dụ: MOV MOV MUL ™ N A,#50 ; 50 x 25 = 1250 Ỉ 04E2h B,#25 ; byte cao = 04h, byte thấp = E2h AB ; B = 04h, A = E2h Lệnh DIV: h it Chia nội dung ghi A cho ghi B Lệnh DIV ảnh hưởng đến cờ OV xoá cờ C (C = 0) m S dụ: MOV MOV DIV ™ A,#250 ; 250 / 40 = dư 10 B,#40 ; AB ; B = 0Ah (10), A = 06h Lệnh DA A: Hiệu chỉnh nội dung ghi A sau thực phép toán liên quan đến số BCD Quá trình thực lệnh DA A mô tả sau: Phạm Hùng Kim Khánh Trang 54 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 - Nếu A[3-0] > hay AC = A[3-0] = A[3-0] + - Nếu A[7-4] > hay C = A[7-4] = A[7-4] + o Lệnh DA A ảnh hưởng đến cờ C h it N y u g n e i d u t S m S Phạm Hùng Kim Khánh Trang 55 Giáo trình Vi điều khiển Lập trình hợp ngữ vi điều khiển MCS-51 BÀI TẬP CHƯƠNG Xác định giá trị biểu thức sau: o a (10 SHL 2) OR ( 1000 1000b) b (5*2 – 10 SHR 1) AND (11h) c HIGH(10000) d LOW(-30000) i d u t S Viết đoạn chương trình đọc nội dung ô nhớ 30h Nếu giá trị đọc lớn hay 10 xuất 10 P0, ngược lại xuất giá trị vừa đọc P0 Viết đoạn chương trình xuất giá trị nhớ 30h – 3Fh P1 (giữa lần xuất có thời gian trì hỗn) n e Viết đoạn chương trình theo yêu cầu sau: - Đọc liệu từ P1 (10 lần) lưu giá trị đọc lần vào nhớ 30h – 39h (mỗi lần đọc có trì hỗn khoảng thời gian) - Tìm giá trị lớn ô nhớ 30h – 39h, lưu vào ô nhớ 3Ah xuất giá trị P2 - Kiểm tra nội dung ô nhớ 3Ah, = quay lại đầu chương trình, ngược lại xuất giá trị P3 N y u g Viết đoạn chương trình theo yêu cầu: h it - m S B1: Kiểm tra bit P3.0: P3.0 Thực = Đến bước = Đến bước - B2: Đọc liệu từ P2, đảo tất bit xuất P0 Sau quay lại bước - B3: xuất nội dung ô nhớ 30h P1 quay lại bước Phạm Hùng Kim Khánh Trang 56 ... s n Trường lệnh chứa từ gợi nhớ cho lệnh MCS- 51 hay lệnh giả dùng cho chương trình dịch Phạm Hùng Kim Khánh Trang 36 Giáo trình Vi điều khi n Lập trình hợp ngữ vi điều khi n MCS- 51 Trường t n. .. khi n MCS- 51 JNB bit, next CPL C Next: Ngoài ra, lệnh nhảy dùng địa tương đối, nghĩa cho phép vùng từ - 128 ÷ 127 byte N u c n nhảy đ n dịa xa phải dùng lệnh nhảy khác, mô tả ph n sau 3.3 Nhóm lệnh... chuy n điều khi n i d u t S Nhóm lệnh chuy n điều khi n bao gồm lệnh nhảy, lệnh li n quan đ n chương trình con, mơ tả sau: Bảng 2. 6 – Các lệnh chuy n điều khi n Lệnh Hoạt động JMP addr Nhảy tới nhãn

Ngày đăng: 27/02/2018, 21:58

TỪ KHÓA LIÊN QUAN