Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiển MCS-51 Chương 2: LẬPTRÌNHHỢPNGỮTRÊNVIĐIỀUKHIỂN MCS-51 Chương giới thiệu cách thức lậptrì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ươngtrì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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ươngtrì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ậptrìnhhợpngữ h it 2.1 Cú pháp lệnh Một lệnh chươngtrìnhhợpngữ 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ươngtrình dịch Phạm Hùng Kim Khánh Trang 36 Giáo trìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ươngtrìnhhợpngữ Trường phải bắt đầu dấu ; chươngtrình dịch bỏ qua từ đặt sau dấu ; o Lưu ý chươngtrì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 Ví 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 Ví 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) Ví dụ: Định nghĩa trước liệu cho led sau: Phạm Hùng Kim Khánh Trang 37 Giáo trìnhViđiềukhiển Led: DB Lậptrìnhhợpngữviđiềukhiển MCS-51 01h,02h,04h,08h,10h,20h,40h,80h Đoạn chươngtrì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ươngtrình dịch cho phép dùng ký tự thay cho ô nhớ lệnh giả EQU, BIT Ví dụ: y u g LED EQU 30h ON_LED BIT 00h Giả sử chươngtrìnhhợpngữ có lệnh sau: MOV A,LED SETB ON_LED N Khi biên dịch, chươngtrì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 Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiển MCS-51 Các toán tử logic: Bao gồm toán tử: OR, AND, NOT, XOR o Ví 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) Ví 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), (, ) Ví 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ươngtrình Cấu trúc chươngtrìnhhợpngữ 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ươngtrình ; phục vụ ngắt Phạm Hùng Kim Khánh Trang 39 Giáo trìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiển MCS-51 … CALL Subname o … ; -Subname: … … RET END ; kết thúc chươngtrình i d u t S Các lệnh giả ORG cho biết lệnh phía sau đặt vị trí chươngtrình Lưu ý khởi động, chươngtrình AT89C51 thực thi địa 0000h nên thông thường địa có lệnh LJMP main để xác định chươngtrình bắt đầu nhãn main y u g n e Các dấu ; xác định thích, chươngtrì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ươngtrì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ươngtrìnhhợp ngữ, dùng chươngtrì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ươngtrình dịch) Sau soạn thảo, dùng chươngtrì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ươngtrình soạn thảo bao gồm chươngtrì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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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 Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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 Ví 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 Ví dụ: Xét đoạn lệnh: MOV A, #30h Phạm Hùng Kim Khánh ; A = 30h Trang 43 Giáo trìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ươngtrình địa A + DPTR Đọc nội dung nhớ chươngtrì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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiển MCS-51 Các lệnh cho phép tìm kiếm liệu định nghĩa sẵn nhớ chươngtrình (nếu nhớ chươngtrình ROM ngoại tín hiệu đọc PSEN ) Các ghi DPTR hay PC (Program Counter: đếm chươngtrì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) Ví 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ươngtrì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ươngtrình bảng phải đặt sau chươngtrìnhn e Ví 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ươngtrình giống cách thực dùng DPTR, cần phải thay đổi chươngtrình sau: h it N y u g Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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) Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ềukhiển i d u t S Nhóm lệnh chuyển điềukhiển bao gồm lệnh nhảy, lệnh liên quan đến chươngtrình con, mơ tả sau: Bảng 2.6 – Các lệnh chuyển điềukhiể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ươngtrình địa addr RET Trở từ chươngtrình RETI Trở từ chươngtrì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 22 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 22 Trang 47 Giáo trìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ươngtrì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ươngtrì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ươngtrì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ậptrình cho MCS-51, thơng thường chươngtrình dịch cho phép sử dụng lệnh JMP thay cho lệnh Khi biên dịch, chươngtrình dịch tự động thay lệnh thích hợp Phạm Hùng Kim Khánh Trang 48 Giáo trìnhViđiềukhiển 0000h Lậptrìnhhợpngữviđiềukhiể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 Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiển MCS-51 Lệnh CALL, RET, RETI: Lệnh CALL dùng để gọi chươngtrì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ươngtrì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ươngtrình phải kết thúc lệnh RET i d u t S Ngoài ra, sử dụng chươngtrì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ềukhiể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ớ) Ví 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 = Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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 Nn 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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 Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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 VÍ 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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) Ví 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 Ví 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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ìnhViđiềukhiểnLậptrìnhhợpngữviđiềukhiể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ươngtrì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ươngtrì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ươngtrì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ươngtrì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