1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu LẬP TRÌNH HỢP NGỮ AVR potx

34 327 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Lập Trình Hợp Ngữ AVR
Tác giả ThS. Phạm Thế Duy
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Điều Khiển Và Xử Lý Tín Hiệu
Thể loại Giáo trình
Năm xuất bản 2010
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 34
Dung lượng 1,03 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

6.2.1 Các chỉ thị trong assemblerAssembler làm việc trên các file nguồn chứa đựng các lệnh gợi nhớ mnemonic, các nhãn label và các chỉ thị directive.. Lệnh gợi nhớ và chỉ thị thường kèm

Trang 1

GIẢNG VIÊN: THS PHẠM THẾ DUY

ĐIÊÊN THOẠI/EMAIL: 0903661501 DUYPT@PTITHCM.EDU.VN

HỌC VIÊÊN CÔNG NGHÊÊ BƯU CHÍNH VIỄN THÔNG

LÂÊP TRÌNH HỢP NGỮ

AVR

Trang 3

6.1 GIỚI THIỆU TẬP LỆNH AVR

Ký hiệu các toán hạng (operand)

Rd : Các thanh ghi R0 – R31 hoặc R16 – R31 (tuỳ thuộc lệnh).

Trang 4

CÁC LỆNH SỐ HỌC VÀ LOGIC

Gợi nhớ Toán hạng Mô tả Thực hiện Cờ Clock

SBIW Rd, K - tức thời theo từ Rd+1:Rd ← Rd+1:Rd – K Z,C,N,V 2

AND Rd, Rr Logic AND Rd ← Rd AND Rr Z,N,V 1

ANDI Rd, K AND với số tức thời Rd ← Rd AND K Z,N,V 1

OR Rd, Rr Logical OR Rd ← Rd OR Rr Z,N,V 1

ORI Rd, K OR với số tức thời Rd ← Rd OR K Z,N,V 1

EOR Rd, Rr Exclusive OR Rd ← Rd XOR Rr Z,N,V 1

Trang 5

RJMP k Nhảy tương đối PC ← PC + k + 1 None 2

None 3

CPSE Rd,Rr So sánh và 0 nhảy khi bằng if (Rd = Rr) PC ← PC + 2 or 3 None 1 / 2 / 3

CPI Rd,K So sánh với số tức thời Rd - K Z,C,N,V,H 1

SBRC Rr, b 0 nhảy khi bit = 0 (Skip) if (Rr(b)=0) PC ← PC + 2or3 None 1 / 2 / 3

SBRS Rr, b 0 nhảy nếu bit = 1 if (Rr(b)=1) PC ← PC + 2or3 None 1 / 2 / 3

SBIC P, b 0 nhảy nếu bit I/O = 0 if(I/O(P,b)=0) PC←PC+2or3 None 1 / 2 / 3

SBIS P, b 0 nhảy nếu bit I/O= 1 if(I/O(P,b)=1) PC ← PC+2or3 None 1 / 2 / 3

BRBS s, k Rẽ nhánh khi cờ trạng thái=1 if (SREG(s) = 1)then PC←PC+k + 1 None 1 / 2

BRBCs, k Rẽ nhánh khi cờ trạng thái=0 if (SREG(s) = 0) then PC←PC+k + 1 None 1 / 2

CÁC LỆNH RẼ NHÁNH

Trang 6

BREQ k Rẽ nhánh nếu bằng if (Z = 1) then PC← PC + k + 1 None 1 / 2

BRNE k Rẽ nhánh nếu không bằng if (Z = 0) then PC← PC + k + 1 None 1 / 2

BRCS k Rẽ nhánh nếu CF=1 if (C = 1) then PC← PC + k + 1 None 1 / 2

BRCC k Rẽ nhánh nếu CF=0 if (C = 0) then PC← PC + k + 1 None 1 / 2

BRSH k Rẽ nhánh nếu > hoặc = if (C = 0) then PC ← PC + k + 1 None 1 / 2

BRLO k Rẽ nhánh nếu nhỏ hơn if (C = 1) then PC ← PC + k + 1 None 1 / 2

BRMI k Rẽ nhánh nếu âm if (N = 1) then PC ← PC + k + 1 None 1 / 2

BRPL k Rẽ nhánh nếu dương if (N = 0) then PC ← PC + k + 1 None 1 / 2

BRGE k Rẽ nhánh > hoặc =, có dấu if (NxorV= 0) then PC←PC+ k + 1 None 1 / 2

BRLT k Rẽ nhánh < hoặc =, có dấu if (NxorV= 1) then PC← PC + k + 1 None 1 / 2

BRHS k Rẽ nhánh nếu HF = 1 if (H = 1) then PC ← PC + k + 1 None 1 / 2

BRHC k Rẽ nhánh nếu HF = 0 if (H = 0) then PC ← PC + k + 1 None 1 / 2

BRTS k Rẽ nhánh nếu TF = 1 if (T = 1) then PC ← PC + k + 1 None 1 / 2

BRTC k Rẽ nhánh nếu TF = 0 if (T = 0) then PC ← PC + k + 1 None 1 / 2

BRVS k Rẽ nhánh nếu OF = 1 if (V = 1) then PC ← PC + k + 1 None 1 / 2

BRVC k Rẽ nhánh nếu OF = 0 if (V = 0) then PC ← PC + k + 1 None 1 / 2

BRIE k Rẽ nhánh nếu IF = 1 if (I = 1) then PC ← PC + k + 1 None 1 / 2

BRID k Rẽ nhánh nếu IF = 1 if (I = 0) then PC ← PC + k + 1 None 1 / 2

CÁC LỆNH RẼ NHÁNH

Trang 7

MOV Rd, Rr Chép thanh ghi Rd ← Rr None 1

LD Rd, X+ Nạp gián tiếp và tăng Rd ← (X), X ← X + 1 None 2

LD Rd, -X Giảm và nạp gián tiếp X ← X - 1, Rd ← (X) None 2

LD Rd, Y+ Nạp gián tiếp và tăng Rd ← (Y), Y ← Y + 1 None 2

LD Rd, -Y Giảm và nạp gián tiếp Y← Y - 1, Rd ← (Y)

None 2

LD Rd, Z+ Nạp gián tiếp và giảm Rd ← (Z), Z ← Z+1 None 2

LD Rd, -Z Giảm và nạp gián tiếp Z ← Z - 1, Rd ← (Z) None 2

LDD Rd, Z+q Nạp gián tiếp với độ dời Rd ← (Z + q) None 2

CÁC LỆNH TRUYỀN DỮ LIỆU

Trang 8

ST X+, Rr Lưu gián tiếp và giảm (X) ← Rr, X ← X + 1 None 2

ST -X, Rr Giảm và lưu gián tiếp X ← X - 1, (X) ← Rr None 2

ST Y+, Rr Lưu gián tiếp và tăng (Y) ← Rr, Y ← Y + 1 None 2

ST -Y, Rr Giảm và lưu gián tiếp Y ← Y - 1, (Y) ← Rr None 2

ST Z+, Rr Lưu gián tiếp và tăng (Z)← Rr, Z ← Z + 1 None 2

ST -Z, Rr Giảm và lưu gián tiếp Z ← Z - 1, (Z) ← Rr None 2

CÁC LỆNH TRUYỀN DỮ LIỆU

Trang 9

LSL Rd Dịch trái logic Rd(n+1) ← Rd(n),Rd(0) ← 0,C ← Rd(7) Z,C,N,V,H 1

LSR Rd Dịch phải logic Rd(n) ← Rd(n+1),Rd(7) ← 0,C ← Rd(0) Z,C,N,V 1

ROL Rd Quay trái qua CF Rd(0) ← C,Rd(n+1) ← Rd(n),C ← Rd(7) Z,C,N,V,H 1

ROR Rd Quay phải qua CF Rd(7) ← C,Rd(n) ← Rd(n+1),C ← Rd(0) Z,C,N,V 1

ASR Rd Dịch phải số học Rd(n) ← Rd(n+1), n=0 6 Z,C,N,V 1

SWAP Rd Chuyển đổi Nibbles Rd(3 0) Rd(7 4) Rd(3 0) Rd(7 4)   None 1

BSET s Lập cờ SREG(s) ← 1 SREG(s) 1

CBI P, b Clear Bit in I/O Register I/O(P, b) ← 0 None 2

BST Rr, b Bit Store from Register to T T ← Rr(b) T

Trang 10

SEI Cho phép ngắt tổng I ← 1 I 1

SES Lập cờ kiểm tra dấu S ← 1 S 1

CLS Xóa cờ kiểm tra dấu S ← 0 S 1

SEV Lập cờ tràn bù 2 V ← 1 V 1

CLV Xóa cờ tràn bù 2 V ← 0 V 1

SET Lập T trong SREG T ← 1 T 1

CLT Xóa T trong SREG T ← 0 T 1

SEH Lập cờ HF trong SREG H ←1 H 1

CLH Xóa cờ HF trong SREG H ← 0 H 1

CÁC LỆNH KIỂM TRA BIT

Trang 12

6.2.1 Các chỉ thị trong assembler

Assembler làm việc trên các file nguồn chứa đựng các lệnh gợi nhớ (mnemonic), các nhãn (label) và các chỉ thị (directive) Lệnh gợi nhớ và chỉ thị thường kèm theo các toán hạng (operand).

Một dòng mã (code) không được hơn 120 ký tự.

Một dòng nhập vào có thể ở 1 trong 4 dạng sau:

Trang 13

6.2.1 Các chỉ thị trong assembler (tt)

Ví dụ : đoạn chương trình nhỏ

; Doan chuong trinh vi du

label: .EQU var1=100 ; Đặt var1 = 100 ; Đặt var1 = 100

Trang 15

Chỉ thị Mô tả

6.2.1 Các chỉ thị trong assembler (tt)

Trang 16

table: BYTE tab_size ; reserve tab_size bytes

.CSEG

Trang 17

6.2.2 Cú pháp các chỉ thị của assembler (tt)

• Cú pháp:

Chỉ thị DB: để đặt trước bộ nhớ trong bộ nhớ chương trình hoặc bộ nhớ EEPROM.

eeconst: DB 0xff

Trang 18

Chỉ thị DEF: đặt ký hiệu cho các thanh ghi

• Cú pháp:

.DEF Symbol = Register

• Ví dụ:

.DEF temp = R16 DEF ior = R0

.CSEG

ldi temp, 0xf0 ; Load 0xf0 into temp register

in ior, 0x3f ; Read SREG into ior register eor temp, ior ; Exclusive or temp and ior 6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 19

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 20

Chỉ thị DW: Định nghĩa các từ hằng trong bộ nhớ chương trình hoặc

eevar: DW 0xffff

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 21

Chỉ thị ENMACRO: Kết thúc macro

• Cú pháp:

.ENDMACRO

• Ví dụ:

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 22

.EQU porta = io_offset + 2

Chỉ thị ESEG: Xác định bắt đầu của đoạn dữ liệu EEPROM

.ESEG

DSEG ; Start data segment

vartab: BYTE 4 ; Reserve 4 bytes in SRAM

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 24

Chỉ thị LIST: Mở file thống kê

• Cú pháp:

.LIST

• Ví dụ:

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 25

Chỉ thị LISTMAC: Chỉ thị này báo cho assembler biết khi macro được gọi, sự khai triển macro được cho thấy trong file thống kê được tạo bởi assembler

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 26

Chỉ thị MACRO: Bắt đầu macro

• Cú pháp:

.MACRO macroname

• Ví dụ:

Chỉ thị NOLIST: Tắt việc phát file thống kê

• Cú pháp:

.NOLIST

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 27

Chỉ thị ORG: Đặt giá trị đếm

• Cú pháp:

.ORG expression

• Ví dụ:

variable: BYTE 1 ; Reserve a byte at SRAM adr.67H

eevar: DW 0xfeff ; Initialize one word CSEG

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 28

Chỉ thị SET: Bắt đầu macro

• Cú pháp:

.SET label = expression

• Ví dụ:

.SET io_offset = 0x23 SET porta = io_offset + 2

6.2.2 Cú pháp các chỉ thị của assembler (tt)

Trang 29

6.2.3 Các biểu thức trong assembler

Biểu thức có thể bao hàm các toán hạng (operand), các toán tử (operator) và các hàm (function)

Trang 30

Hàm:

Các dạng của hàm:

6.2.3 Các biểu thức trong assembler

Trang 31

Toán tử Ký hiệu Độ ưu tiên Mô tả

thức bằng 0, kết quả =0 nếu biểu thức khác 0.

ldi r16, !0xf0 ; Load r16 with 0x00

trong biểu thức.

ldi r16, ~0xf0 ; Load r16 with 0x0f

ldi r16,-2 ; Load -2(0xfe) in r16

ldi r30,label*2 ; Load r30 with label*2

6.2.3 Các biểu thức trong assembler

Trang 32

Toán tử Ký hiệu Độ ưu tiên Mô tả

biểu thức.

ldi r30,label/2 ; Load r30 with label/2

ldi r30,c1+c2 ; Load r30 with c1+c2

ldi r17,c1-c2 ;Load r17 with c1-c2

vị trí.

ldi r17,1<<bitmask ;Load r17 with 1 shifted left bitmask times

6.2.3 Các biểu thức trong assembler

Trang 33

Toán tử Ký hiệu Độ ưu tiên Mô tả

số vị trí.

ldi r17, c1>>c2

6.2.3 Các biểu thức trong assembler

Trang 34

Toán tử Ký hiệu Độ ưu tiên Mô tả

thức.

ldi r18,High(c1&c2) ;Load r18 with an expression

thức khác 0, ngược lại kết quả = 0 ldi r18,Low(c1&&c2)

hai biểu thức khác 0, ngược lại kết quả = 0.

6.2.3 Các biểu thức trong assembler

Ngày đăng: 23/02/2014, 23:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w