Cơ bản về lập trình hợp ngữ, TS Nguyễn Hồng Quang

26 638 0
Cơ bản về lập trình hợp ngữ, TS Nguyễn Hồng Quang

Đ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

Cơ lập trình hợp ngữ TS Nguyễn Hồng Quang Electrical Engineering Ví dụ chương trình hợp ngữ 8051 Electrical Engineering Tổng quan lệnh máy tính • Các mức lập trình phần mềm máy tính – Mã máy mức ứ thấp thấ hất thường th biểu biể diễn diễ dạng hex file, lưu dạng hex, ihx, bin – Hợp ngữ ngôn ngữ tương ứng với loại Vi xử lý đọc dạng tiếng Anh, lưu dạng asm – Ngôn ngữ cấp cao nhằm mục tiêu chuyển chương trình thành dạng đọc văn tiếng Anh Ngôn ngữ cho phép chương trình chạy nhiều loại vi điều khiển khác Ví dụ file c, pas, cs, bas Electrical Engineering Hợp ngữ (Assembly) • Vi xử lý có tập lệnh theo • Các lệnh biểu diễn dạng mã nhị phân viết dạng gợi nhớ (mnemonics) • Chu lệnh thường bắt đầu sau: – Vi xử lý bắt đầu reset, lưu bảng vecto ngắt đọc liệu từ địa chương trình (kích hoạc chân /PSEN 8051) – Tùy thuộc vào mã lệnh, vi xử lý bắt đầu đọc tiếp toán tử tương ứng xử lý lệnh nhận – Kết có lại lưu vào vùng liệu tương ứ ứng – Bắt đầu trình đọc lệnh kết thúc • Mỗi lệnh thường có số chu kỳ lệnh thời gian thực tùy theo loại Electrical Engineering Quá trình tạo mã máy Electrical Engineering Ví dụ file lst, hex Electrical Engineering Tập ghi Các ghi – A, B, R0 to R7 : ghi bit – DPTR : [DPH:DPL] ghi 16 bit – PC : Bộ đếm chương trình (Instruction Ptr) 16bits – tập ghi từ (R0-R7) – Thanh ghi trỏ ngăn xếp SP – Thanh ghi trạng thái chương trình PSW (Program Status Word (Flags)) C Carry CY, CY Aux A Carry C AC AC, R Reg B Bank k selector, l t O Overflow, fl Parity – Thanh ghi đặc biệt (SFRs) Bộ định thời (Timers), Ngắt (Interrupt) điểu khiển vào nối tiếp (serial), nguồn Electrical Engineering Hợp ngữ – nét (assembly) [nhãn:] [từ gợi nhớ] [các toán hạng] [; giải] Giá trị có dấu thăng đứng trước # – #55, #32 etc Số Hex kết thúc chữ H – #55H, #32H Thường với ới số bắt đầu đầ chữ #0FFH, #0FFH #0C1H, #0D2H - Ví dụ lệnh : No operation : NOP ! Electrical Engineering Ví dụ Label: Label: mov A, #25h Label: mov A, #5Fh Electrical Engineering Thanh ghi A Sủ dụng thường xuyên với lệnh mov Ví dụ lệnh thường dùng – mov A, R0 – Mã máy (Opcode) : E8 Ngoài ghi có lệnh khác – Instruction : push ACC – Mã máy : C0 E0 Electrical Engineering 10 Thanh ghi A, B • ACC (Accumulator, (Accumulator Addresses E0h E0h, BitAddressable): Dùng lưu trữ giá trị trung gian MOV A,#20h -> MOV E0h,#20h • B (B Register, Addresses F0h, BitAddressable): Sử dụng phép nhân chia 11 Electrical Engineering Ví dụ • MUL AB, AB nhân số bít A, A B lưu kết 16, A chứa byte thấp, B chứa byte cao • DIV AB, chia A B, kết lưu vào A, dư lưu vào B Electrical Engineering 12 Tập ghi R0-R7 • R0 R0, R1, R1 … R7 dùng làm ghi trung gian • Có thể có banks • Chon Bank tùy thuộc vào phần mềm, cụ thể sử dùngg bit RS1:RS0 S S bits trongg PSW SW • Ngầm định bank 13 Electrical Engineering Ví dụ cụ thể ORG MOV MOV MOV ADD ADD ADD 0H R5, #25H R7, #34H A, #0 A, R5 A, R7 A, #12H ; Bắt đầu (origin) ngăn nhớ ; Nạp 25H vào R5 ; Nạp 34H vào R7 ; Nạp vào ghi A ; Cộng nôi dụng R5 vào A (A = A + R5) ; Cộng nội dung R7 vào A (A = A + R7) ; Cộng giá trị 12H vào A (A = A + 12H) HERE: SJMP HERE ; lại vòng lặp Electrical Engineering 14 Mã máy ví dụ Địa ROM Ngôn ngữ máy 0000 7D25 0002 7F34 0004 7400 0006 2D 0007 2F 0008 2412 000A 800A Hợp ngữ MOV R5, #25H MOV R7, #34H MOV A, #0 ADD A, R5 ADD A, R7 ADD A, #12H HERE: SJMP HERE Electrical Engineering 15 Thanh ghi DPTR (Data pointer) • Được dùng để truy xuất nhớ RAM • Sử dụng ghi bít để tạo địa 16 bit • Chỉ có lệnh tăng DPTR, lệnh giảm • 82 H (DPL) (DPL), 83H (DPH) Electrical Engineering 16 Ví dụ DPTR MOV A A, #55 H MOV DPTR, # 1000H MOVX @DPTR, A • Chương trình chuyển số liệu từ ghi A, địa 1000H Electrical Engineering 17 Con trỏ chương trình (PC) • The Program Counter (PC) Con trỏ byte để chương trình lệnh • PC = 0000h khởi động • PC tăng 1,2, byte tùy theo lệnh cụ thể • Không thể đọc trực tiếp giá trị PC • Không thểể PC=2430h có thểể thực lệnh tương đương LJMP 2430h Electrical Engineering 18 Con trỏ ngăn xếp – stack pointer(SP) • Dùng để trỏ vị trí lấy giá trị khỏi ngăn xếp • Giá trị mặc định 07h • Khi sử dụng lệnh PUSH, tự động tăng lên • Các lệnh làm việc với stack – PUSH, POP, ACALL, LCALL, RET, and RETI – Quan tâm tới SP sử dụng ngắt 19 Electrical Engineering Kết cấu nhớ • Bộ nhớ chương trình – Chứa ROM, RAM – Giới hạn 64 Kbyte • Bộ nhớ External RAM – Static, flash RAM – Giới hạn 64 Kbyte Electrical Engineering 20 10 Ram • Dung lượng 128 b t bytes • Chia làm phần – Register banks – Vùng RAM đa mục đích – Vùng RAM dùng mục đích chuyên dụng 23 Electrical Engineering Register Bank • Phép cộng liệu – ADD A A, R4 • Tương đương với – ADD A, 04H, với mặc định ghi địa 00H – Việc thay đổi mặc định định phần mềm • Register Bank định bit RS0 RS1 h h ghi hi trạng thái hái PSW Electrical Engineering 24 12 Bit memory • Khoảng g giá g trị từ 20h – 3Fh, 40h-7Fh, 16 bytes, 128 bit • Lệnh làm việc bit: – SETB 24h – CLR 24h • MOV 20h,#0FFh -> SETB 0H, SETB 1H, ,SETB7H Electrical Engineering 25 Lưu ý làm việc với bit • SP mặc định 07h, 07h cần sử dụng băng ghi khác cần phải định nghĩa lại SP vị trí cao hơn, tương tự với vùng làm việc bit • Bit 80h trở lên vùng ghi đặc biệt (SFR), ví dụ: – MOV P0, #02h tương đương với SETB 81h Electrical Engineering 26 13 (Vùng nhớ đặt biệt) SFR • Bộ nhớ RAM khoảng 80H – FFH (128byte) • Chỉ có 21 ghi hợp lệ • Thực chức phục vụ riêng cho 8051 • Làm việc iệ h làm việc iệ với ới nhớ hớ RAM A bình thường 27 Electrical Engineering Bảng SFR Electrical Engineering 28 14 Lưu ý • Các ghi theo cột dọc thứ làm việc theo bit • Các ghi SFR lại bắt buộc làm việc theo byte • loại ghi SFR – Cổng vào – Điều khiển – Các ghi khác Electrical Engineering 29 Các cổng vào I/O • P0 (Port 0, Address 80h, 80h Bit-Addressable): – Bit cổng tương ứng với chân P0.0 – Bit cổng tương ứng với chân P0.7 – SETB 80.0 b SETB P0.0 • P1 (Port 1, Address 90h, Bit-Addressable) • P2 (Port 2, Address A0h, Bit-Addressable ) • P3 (Port 1, Address B0h, Bit-Addressable ) Electrical Engineering 30 15 Lưu ý • Nếu sử dụng RAM cổng P0, P0 P2 dùng vào tạo liệu địa • Cổng P3 dùng cho mục đích đặc biệt khác Electrical Engineering 31 Stack pointer (con trỏ ngăn xếp) • SP (Stack Pointer Pointer, Address 81h): • Con trỏ địa ngắn xếp • Ngầm định trỏ 07H – Nếu có lệnh PUSH, trỏ tự động tăng lên 1, SP + 1;; • Các lệnh dùng trỏ SP là: PUSH, POP, LCALL, RET, RETI ngắt Electrical Engineering 32 16 PCON (power control register) • PCON (Power Control Control, Addresses 87h) • Sử dụng để đặt 8051 trạng thái Sleep, tiết kiệm lượng – – – – RAM giữ nguyên giá trị Mạch dao động ộ g ngừng g g lại ALE, PSEN giữ mức không tích cực Vcc cần giá trị V Electrical Engineering 33 PSW (program status word) • PSW (Program Status Word, Addresses D0h Bit-Addressable): D0h, Bit Addressable): Lưu trữ cờ làm việc 8051, PSW.7 Cờ nhớ CY Carry Flag, thực phép số học PSW.6 Cờ PSW PSW.1 PSW.5, PSW Dành riêng PSW.4, PSW.3 -> Chọn dãy ghi tích cực PSW.3 Cờ tràn OV PSW.0 P Parity Flag –Cờ chẵn lẻ, xác định số bit lẻ chứa A, P =1 A có số lẻ bit Electrical Engineering 34 17 PSW tiếp Cờ nhớ CY: Khi có nhớ bit D7, cờ thiết lập sau lệnh cộng trừ bit, lên xoá lệnh “SETB C” “CLR C” Cờ AC: Cờ báo có nhớ từ bit D3 sang D4 phép cộng ADD trừ SUB Dùng phép tính số học BCD Cờ chẵn lẻ P: Cờ chẵn lẻ phản ánh số bit ghi A lỡ chẵn hay lẻ Nếu ghi A chứa số chẵn bit P = Do vậy, P = A có số lẻ bit Cờ tràn OV: Cờ thiết lập kết phép tính số có dấu lớn tạo bit bậc cao làm tràn bit dấu 35 Electrical Engineering Ví dụ: Lệnh ADD PSW 38 + 2F 67 CY = C AC = P=1 Electrical Engineering 0011 1000 0010 1111 0110 0111 36 18 Ví dụ PSW tiếp Electrical Engineering 37 Thanh ghi thời gian • TCON CON (Timer ( e Control, Co t o , Addresses dd esses 88 88h,, Bitt Addressable): Xác định thức làm việc định thời, bật tắt, ngắt • TMOD (Timer Mode, Addresses 89h): Chế độ làm việc bit, 16 bít • TL0/TH0 (Timer Low/High, Addresses ) Timer 0, g giá trịị ộ đếm 8Ah/8Ch): • TL1/TH1 (Timer Low/High, Addresses 8Bh/8Dh): Timer 1, giá trị đếm Electrical Engineering 38 19 Cổng nối tiếp • SCON (Serial Control, Control Addresses 98h, 98h Bit-Addressable): Các giá trị khởi đầu cho làm việc với cổng nối tiếp • SBUF (Serial Control, Addresses 99h): Dữ liệu trao đổi giưa vi điều khiển thiết bị ngoại vi qua cổng nối tiếp 39 Electrical Engineering Ngắt • IE (Interrupt Enable Enable, Addresses A8h): Cho phép không cho phép ngắt • IP (Interrupt Priority, Addresses B8h, Bit-Addressable): Xác định mức độ ưu tiên ngắt Electrical Engineering 40 20 Bộ nhớ SFR 89c52 41 Electrical Engineering Lệnh nhảy LJMP new address new_address new_address: Mov, Nhã (l Nhãn (label), b l) đượ dịch dị h chương hươ trình t ì h dịch dị h Electrical Engineering 42 21 Các lệnh nhảy • SJMP SJMP, + +-128 128 bytes giới hạn • AJMP, kbytes block giới hạn • LJMP – bytes Electrical Engineering 43 Lênh gọi chương trình • LCALL – Gọi chương trình theo tên – Lưu trữ PC vào stack • RET – Kết thúc chương g trình – Lấy giá trị PC từ stack Electrical Engineering 44 22 Thời gian chu kỳ lệnh • Chu kỳ lệnh thời gian tối thiểu để thực lệnh byte • Đối với 8051, 12 xung clock thực chu kỳ lệnh • Nếu tần số 12 MHZ, chu kỳ lệnh 1/1000 000 giây 1/1000.000 • Các lệnh toán học yêu cầu 2-3 chu kỳ lệnh 45 Electrical Engineering Ví dụ • Hãy ãy tìm t độ ttrễễ tthời gian g a cho c o chương c ươ g ttrình co sau G Giảả thiết tần số dao động thạch anh 11.0592MHz Electrical Engineering 46 23 Ví dụ định thời Thời gian trễ bên vòng lặp [250 (1 + + + + + 2)] x 1.0851μs = 1627.5μs Cộng thêm hai lệnh vòng lặp ta có 1627.5μs + x 1.085μs = 1629.67μs Electrical Engineering 47 Các lệnh phụ trợ trình biên dịch Lệnh chuyển hướng hợp ngữ – ORG xxxxH H : bắt đầu đầ xxxxH H – EQU : định nghĩa giá trị count EQU 25 – DB : define byte, defines data DATA1 DB 28 DATA1: DATA2: DB “hello world” – END : end of assembly fil Electrical Engineering 48 24 Các lệnh phụ • Lệnh ORG: Chỉ lệnh ORG dùng để báo bắt đầu địa Số sau ORG có kể dạng Hex thập phân Một số hợp ngữ sử dụng dấu chấm đứng trước“.ORG” thay cho “ORG” • lệnh EQU: Lệnh EQU dùng gắn giá trị số với nhãn liệu cho nhãn xuất chương trình giá trị số thay nhãn COUNT EQU 25 MOV R3, #count 49 Electrical Engineering Các lệnh phụ Lệnh DB (định nghĩa byte) Lệnh DB dùng để định nghĩa liệu bit Bất kể ta sử dụng số dạng thức hợp ngữ chuyển đối chúng thành dạng Hex Lệnh DB lệnh mà sử dụng để định nghĩa chuỗi ASCII lớn ký tự Electrical Engineering 50 25 Lệnh phụ • DW: define word (định nghĩa từ liệu), liệu) cách dùng tương tự DB – temp: DW ‘A’, 1342H, • DS (define storage) – Length – Buffer: B ff EQU 25H DS Length L th • END, END dùng báo cho hợp ngữ kết thúc trình dịch thời điểm nhận lệnh 51 Electrical Engineering Ví dụ Begin: Mov A,# MOV P1,A Call wait Mov A,# 255 Mov P1,A Call Wait Jmp Begin ; (A) = ; Gửi cổng P1 ; Gọi chương trình tạo trễ ; (A) =255 ; Gửi cổng P1 ; Gọi chương trình tạo trễ ; Nhảy trở lại Begin Mov R7, #255 Mov R6, #255 Djnz R6, Schl Djnz R7, Schl Ret ; (R7)=255 - Số đếm vòng ;(R6)= 255- Số đếm vòng ;Nếu (R6)  thi quay lại Schl ; Nếu (R7)  thi quay lại Schl Wait: Schl 1: Schl 2: End Electrical Engineering 52 26

Ngày đăng: 10/08/2016, 21:31

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan