intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình asembly cho MCS-51

Chia sẻ: Lê Quảng Vàng | Ngày: | Loại File: PDF | Số trang:0

98
lượt xem
14
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'lập trình asembly cho mcs-51', kỹ thuật - công nghệ, điện - điện tử phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Lập trình asembly cho MCS-51

  1. Lập trình Assembly cho MCS-51 MCS-51 & Assembly language 1 Plan † Tập lệnh MCS-51 † Ngôn ngữ Assembly sử dụng phần mềm Keil † Giới thiệu Phần mềm mô phỏng mạch điện Proteus † Ví dụ MCS-51 & Assembly language 2
  2. Tập lệnh † Vi xử lý đều có một tập lệnh † Các lệnh được được cất trong bộ nhớ chương trình dưới dạng các mã lệnh nhị phân † Để thuận tiện cho việc lập trình: „ Các mã lệnh được quy ước viết ở dạng “gợi nhớ” (mnemonic) „ Cần chương trình dịch các mnemonic qua mã máy (Assembler): Hợp ngữ MCS-51 & Assembly language 3 Chương trình sử dụng hợp ngữ EDITOR PROGRAM Myfile.asm ASSEMBLER PROGRAM Myfile.lst Other obj file Myfile.obj LINKER PROGRAM Myfile.abs OH PROGRAM MCS-51 & Assembly language 4 Myfile.hex
  3. Một số thuật ngữ † Assembly: „ là một cách thể hiện các code lệnh của một CPU dưới dạng các ký hiệu mà con người có thể dễ dàng đọc † Assembler: „ phần mềm chạy trên máy tính có khả năng dịch các file viết bằng Assembly sang dạng object file † Object code: „ Chứa các mã lệnh ở dạng binary † Object file: „ Object code „ Thông tin về “relocation” phục vụ cho linhker MCS-51 & Assembly language 5 † Linhker „ Chương trình có khả năng tập hợp các object file để tạo thành một chương trình duy nhất có thể “executable” † Segment „ Là một đơn vị bộ nhớ code hoặc data. „ Có nhiều kiểu segment trong một chương trình Assembly † Absolute segment: cố định không thể thay đổi † Relocatable segment: có các thuộc tính đi kèm cho phép linker ghép nhiều segments lại với nhau trước khi tạo ra một chương trình executable MCS-51 & Assembly language 6
  4. Tập lệnh MCS-51 † Gồm 255 lệnh: „ 139 lệnh 1 byte „ 92 lệnh 2 byte „ 24 lệnh 3 byte † Được chia thành các nhóm lệnh „ Số học „ Logic „ Chuyển data „ Kiểm tra điều kiện (Boolean Instructions) „ Điều khiển chương trình MCS-51 & Assembly language 7 Assembly cho MCS-51 (Standard) † Keil cung cấp 4 tools „ A51 Macro Assembly (\Keil\C51\Bin\A51.EXE) „ BL51 Linker/Locator (\Keil\C51\Bin\BL51.EXE) „ LIB51 Library Manager (\Keil\C51\Bin\LIB51.EXE) „ OH51 Object-Hex Converter (\Keil\C51\Bin\OH51.EXE) MCS-51 & Assembly language 8
  5. Các bước tạo một chương trình sử dụng Keil ASM PL/M – 51: là ngôn ngữ bậc cao được Intel phát MCS-51 & Assembly triển vào những năm 1980 language 9 Cấu trúc một chương trình ASM † Các lệnh (statements) ASM gồm „ Các từ khóa điều khiển chương trình assembler (assembler control) „ Các từ khóa định hướng cho chương trình dịch (assembler directive) „ Các lệnh máy (instruction) † Mỗi dòng chỉ có thể chứa duy nhất một lệnh assembler control hoặc assembler directive hoặc mnemonic † Mỗi lệnh phải viết trên một dòng † Các tham biến hoặc các toán hạng của các lệnh được phân biệt với các lệnh ít nhất bởi một space † Chương trình assembly phải được kết thúc bởi asm directive END, các statements sau từ khóa END sẽ bị bỏ qua MCS-51 & Assembly language 10
  6. $TITLE (Demo Program #1) CSEG AT 0000h JMP $ END TITLE assembler control JMP instruction mnemonic CSEG, END assembler derective MCS-51 & Assembly language 11 Lệnh máy [label:] mnemonic [operand] [, operand] [, operand] [;comment] [] có nghĩa rằng trường đó là optional label: nhãn được dùng để đánh dấu địa chỉ mà tại đó lệnh được đặt mnemonic dạng gợi nhớ của lệnh máy operand toán hạng comment lời chú thích MCS-51 & Assembly language 12
  7. Directive † Định hướng cho chương trình dịch ASM „ Cách xử lý các lệnh mnemonic trong chương trình „ Định nghĩa các ký tự, đặt trước các ô nhớ,... † Không sinh ra code lệnh executable (ngoại trừ một số directive DB và DW), bao gồm các nhóm: „ Segment control „ Symbol definition „ Memory Initialization „ Reserving Memory „ Program linkage „ Address control „ Other MCS-51 & Assembly language 13 Segment control † Generic Segments „ Có tên và một lớp các thuộc tính đi kèm „ Các Generic Segment có cùng tên ở các object file khác nhau sẽ được ghép lại thành một segment khi linhker „ Các từ khóa: SEGMENT, RSEG † Absolute Segments „ Dùng để định nghĩa các vùng nhớ xác định „ Các từ khóa: CSEG, BSEG, DSEG, ISEG, XSEG MCS-51 & Assembly language 14
  8. SEGMENT segment SEGMENT class reloctype alloctype segment tên của segment SEGMENT từ khóa class chỉ ra không gian các lớp bộ nhớ (code, data, idata, xdata...) reloctype xác định hoạt động relocation cho linker allotype xác định hoạt động allocation cho linker MCS-51 & Assembly language 15 RSEG RSEG segment RSEG từ khóa segment tên của generic segment đã được định nghĩa trước đó bởi từ khóa SEGMENT RSEG Được dùng để Lựa chọn một generic segment đã được định nghĩa bởi SEGMENT Ví dụ: MYPROG SEGMENT CODE ; declare a segment RSEG MYPROG ; select the segment MOV A, #0 MOV P0, A MCS-51 & Assembly language 16
  9. BSEG, CSEG, DSEG, ISEG, XSEG BSEG AT address defines an absolute BIT segment. CSEG AT address defines an absolute CODE segment. DSEG AT address defines an absolute DATA segment. ISEG AT address defines an absolute IDATA segment. XSEG AT address defines an absolute XDATA segment. Thông báo với chương trình linker một segment tại một địa chỉ định trước MCS-51 & Assembly language 17 Đinh nghĩa các ký hiệu (Symbol directive) † Cho phép sử dụng các ký hiệu để biểu diễn thanh ghi. địa chỉ, các số † Các ký hiệu đã được định nghĩa sẽ không được định nghĩa lại, ngoại trừ lệnh SET MCS-51 & Assembly language 18
  10. EQU, SET symbol EQU expression symbol EQU register symbol SET expression symbol SET register symbol tên của ký hiệu expression biểu thức số, có thể chứa các ký hiệu nhưng phải được khai báo trước đó register thanh ghi: A, R0-R7 symbol được định nghĩa với EQU sẽ không được định nghĩa lại Không thể sử dụng EQU để định nghĩa lại các symbol đã định nghĩa bởi SET và ngược lại MCS-51 & Assembly language 19 Ví dụ: LIMIT EQU 1200 VALUE EQU LIMIT – 200 + 'A' SERIAL EQU SBUF ACCU EQU A COUNT EQU R5 VALUE SET 100 VALUE SET VALUE / 2 COUNTER SET R1 TEMP SET COUNTER TEMP SET VALUE * VALUE MCS-51 & Assembly language 20
  11. BIT, DATA, CODE, IDATA, XDATA symbol BIT bit_address defines a BIT symbol symbol CODE code_address defines a CODE symbol symbol DATA data_address defines a DATA symbol symbol IDATA idata_address defines an IDATA symbol symbol XDATA xdata_address defines a XDATA symbol symbol is the name of the symbol to define. The symbol name can be used anywhere an address of this memory class is valid. bit_address is the address of a bit in internal data memory in the area 20H .. 2FH or a bit address of an 8051 bit-addressable SFR. code_address is a code address in the range 0000H .. 0FFFFH. data_address is a data memory address in the range 0 to 127 or a special function register (SFR) address in the range 128 .. 255. idata_address is an idata memory address in the range 0 to 255. xdata_address is an xdata memory address in the range 0 to 65535. MCS-51 & Assembly language 21 Ví dụ: DATA_SEG SEGMENT BITADDRESSABLE RSEG DATA_SEG ; a bit-addressable rel_seg ENABLE_FLAG BIT 60H ; an absolute bit DONE_FLAG BIT 24H.2 ; an absolute bit P1_BIT2 EQU 90H.2 ; a SFR bit RESTART CODE 00H INTVEC_0 CODE RESTART + 3 INTVEC_1 CODE RESTART + 0BH INTVEC_2 CODE RESTART + 1BH SERBUF DATA SBUF ; redfinition of SBUF RESULT DATA 40H RESULT2 DATA RESULT + 2 PORT1 DATA 90H ; a SFR symbol BUFFER IDATA 60H BUF_LEN EQU 20H BUF_END IDATA BUFFER + BUF_LEN – 1 MCS-51 & Assembly language 22
  12. sfr, sbit sfr sfr_symbol = address; sbit sfr_symbol = bit-address; sfr_symbol is the name of the special function register (SFR) symbol to define. address is an SFR address in the range 0x80 – 0xFF. bit-address is address of an SFR bit in the format address ^ bitpos or sfr_symbol ^ bitpos. address or sfr_symbol refers to an bitaddressable SFR and bitpos specifies the bit position of the SFR bit in the range 0 – 7. Ví dụ: sfr P0 = 0x80; sfr P1 = 0x90; sbit P0_0 = P0^0; sbit P1_1 = 0x90^1; MCS-51 & Assembly language 23 Khởi tạo bộ nhớ (Memory initialization) † Khởi tạo các giá trị trong bộ nhớ code † Từ khóa „ DB define byte (8 bits) „ DW define word (16 bits) MCS-51 & Assembly language 24
  13. label: DB expression , expression ... label: DW expression , expression … label: is the symbol that is given the address of the initialized memory. expression is a byte value. Each expression may be a symbol, a character string, or an expression. Ví dụ: REQUEST: DB 'PRESS ANY KEY TO CONTINUE', 0 TABLE: DW TABLE, TABLE + 10, ZERO ZERO: DW 0 MCS-51 & Assembly language 25 Reserving memory † Khai báo dung lượng vùng bộ nhớ sẽ được sử dụng † Từ khóa „ DBIT khai báo vùng bộ nhớ bit „ DS khai báo vùng bộ nhớ byte MCS-51 & Assembly language 26
  14. DBIT, DS label: DBIT expression label: DS expression label is the symbol that is given the address of the reserved memory. The label is a typeless number and gets the current address value and the memory class of the active segment. The label can only be used where a symbol of this type is allowed. expression is the number of bit (DBIT) or bytes (DS) to reserve. The expression cannot contain forward references, relocatable symbols, or external symbols. Ví dụ: ON_FLAG: DBIT 1 ; reserve 1 bit OFF_FLAG: DBIT 1 GAP: DS (($ + 16) AND 0FFF0H) – $ DS 20 TIME: DS 8 MCS-51 & Assembly language 27 Liên kết chương trình (Program linkage) † Sử dụng các đinh hướng liên kết chương trình cho phép „ Phân chia một chương trình thành các module (file) riêng biệt „ Các module “trao đổi” với nhau thông qua tên và các tham chiếu † Có 3 kiểu định hướng „ PUBLICđưa ra danh sách các ký hiệu (symbol) được dùng bên ngoài module. Symbol phải được định nghĩa trong module co từ khóa PUBLIC „ EXTRN đưa ra danh sách các symbol mà module có thể sử dụng nhưng các symbol này được định nghĩa trong module khác „ NAME chỉ ra tên của mudule MCS-51 & Assembly language 28
  15. PUBLIC PUBLIC symbol , symbol … symbol must be a symbol that was defined somewhere within the source file. Forward references to symbol names are permitted. All symbol names, with the exception of register symbols and segment symbols, may be specified with the PUBLIC directive. Multiple symbols must be separated with a comma (,). Ví dụ: PUBLIC PUT_CRLF, PUT_STRING, PUT_EOS PUBLIC ASCBIN, BINASC PUBLIC GETTOKEN, GETNUMBER MCS-51 & Assembly language 29 EXTRN EXTRN class (symbol , symbol … ) class is the memory class where the symbol has been defined and may be one of the following: BIT, CODE, DATA, IDATA, XDATA, or NUMBER (to specify atypeless symbol). symbol is an external symbol name. Ví dụ: EXTRN CODE (PUT_CRLF), DATA (BUFFER) EXTERN CODE (BINASC, ASCBIN) MCS-51 & Assembly language 30
  16. NAME NAME modulename modulename is the name to use for the object module and can be up to 40 characters long. The modulename must adhere to the rules for symbol names. Nếu tên của module không được chỉ ra bởi directive NAME thì tên file (không có phần mở rộng) sẽ được sử dụng Chỉ được một NAME được sử dụng trong một file MCS-51 & Assembly language 31 Address control † Định hướng cho chương trình dịch biết địa chỉ nơi sẽ đặt code lệnh hoặc địa chỉ của các thanh ghi sử dụng † Có 2 kiểu „ ORG thay đổi nội dung của bộ đếm địa chỉ đến một giá trị mới. Các statements tiếp theo sau sẽ được đặt bắt đầu từ địa chỉ mới đó „ USING chỉ ra bank thanh ghi nào được sử dụng cho R0 đến R7 MCS-51 & Assembly language 32
  17. ORG ORG expression expression must be an absolute or simple relocatable expression without any forward references. Only absolute addresses or symbol values in the current segment may be used. Nếu ORG xuất hiện trong một absolute segment thì giá trị expression là giá trị tuyệt đối Nếu ORG xuất hiện trong một relocatable segment thì giá trị của expression được coi là giá trị offset Ví dụ: ORG 100H ORG RESTART MCS-51 & Assembly language 33 USING USING expression expression is the register bank number which must be a value between 0 and 3. USING không tạo ra bất kỳ một code lệnh thay đổi register bank, nó chỉ đơn giản là sử dụng địa chỉ tuyệt đối của các thanh ghi USING 3 PUSH AR2 ; Push register 2 in bank 3 USING 1 PUSH AR2 ; Push register 2 in bank 1 MCS-51 & Assembly language 34
  18. Phần mềm Proteus † Phần mềm của hãng Labcenter Electronics Ltd (http://www.labcenter.co.uk) † Gói phần mềm „ Vẽ mạch nguyên lý, mạch in „ Mô phỏng sử dụng SPICE „ VSM (Virtrual System Modelling) cho phép mô phỏng chế độ mixed giữa tương tự và số (bao gồm cả các hệ thống có sử dụng các chip vi điều khiển) † Giá phần mềm tùy thuộc vào tính năng mà khách hàng lựa chọn † Tài liệu tham khảo có rất ít, chủ yếu là các file help đi kèm MCS-51 & Assembly language 35 MCS-51 & Assembly language 36
  19. Ví dụ 1 † Viết chương trình assembler kiểm tra cổng P1.5, nếu „ bằng 0 thì thiết lập P1.6 = 1 „ bằng 1 thì thiết lập P1.6 = 0 † Quá trình kiểm tra đượclặp lại cho đến khi tắt nguồn MCS-51 & Assembly language 37 Ví dụ 2 † Viết chương trình assembler phát ra xung vuông có chu kỳ 20ms với duty cycle 50% tại cổng P1.0 (sử dụng timer). Biết tần số clock của MCU là 12MHz MCS-51 & Assembly language 38
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2