KỸ THUẬT LẬP TRÌNH ASSEMBLY Hướng dẫn lập trình Assembly Cho AVR sử dụng AVRstudio 4.2 Hướng dẫn lập trình AVR với nội dung hướng dẫn bạn làm quen với vi điều khiển AVR phần mềm AVRstudio4.2 Nội dung tài liệu Hướng dẫn bạn cách để viết chương trình assembly điều khiển vào liệu Tài liệu chia làm phần: Phần 1: Các thị hợp dịch ASSEMBLY Phần 2:Viết mã lệnh cho chương trình ASSEMBLY Phần3: Điều khiển vào liệu thiết bị tích hợp AVR Phần 1: Các thị hợp dịch Chương trình dịch Assembly làm việc file chương trình nguồn file nguồn bao gồm : lệnh , nhãn dẫn.Chúng xếp file nguồn Một dịng lệnh có chiều dài cực đại :120 kí tự Mọi dịng lệnh đặt trước nhãn,nó chuỗi kí tự kết thúc dấu chấm.Nhãn sẻ dụng đích cho lệnh nhảy, Và thị rẽ nhánh.Và sử dụng tên biến nhớ chương trình nhớ liệu Một dịng lệnh bốn dạng sau: [nhan: ] chỉ_thị [tốn_hạng] [;lời thích] [nhan: ] lệnh [tốn_hạng] [;lời thích] ;chú thích dịng trống (khơng chứa kí tự nào) Một lời thích ln sau dấu chấm phảy(“;”)và khơng dịch sang mã máy có tác dụng cho người đọc chương trình dẽ hiểu Chương trình Assembly hỗ trợ số thị.Các thị không dịch mã nhị phân (mã máy).Và sử dụng để điwuf khiển trình dịch cụ thể : điều khiểu ghi lệnh vào nhớ chương trình, định nghĩa biến … Dưới bảng thị : Chỉ thị Mô tả BYTE Định nghĩa biến kiểu byte CSEG Đoạn mã chương trình DB Định nghĩa hắng số kiểu byte DEF Định nghĩa tên gợi nhớ cho ghi DEVICE Định nghĩa loại VĐK cho chương trình DSEG Đoạn liệu DW Định nghĩa số kiểu byte (word) ENDMACRO Kêt thúc macro EQU Thay biểu thức kí tự ESEG Đoạn EEPROM EXIT Thoát từ file INCLUDE Sử dụng mã nguồn từ file khác LIST Cho phép tạo file list LISTMAC Cho phép thêm macro vào list gọi MACRO Bắt đầu macro NOLIST Không cho phép tạo file list ORG Thiết lập mốc chương trình SET Gán nhãn cho giá trị Tất thị đặt sau dấu chấm (“.”) 1.1.BYTE : Chỉ thị giành trước tài nguyên nhớ SRAM.Chỉ thị phải sau nhãn có tham số,nó số byte giành trước.Chỉ thị dùng đoạn liệu Cú pháp : LABEL: BYTE expression Ví dụ: DSEG var1: BYTE ; var2 : BYTE 10; CSEG ldi r30,low(var1); Nếu bạn học qua ngơn ngữ cấp cao thực vùng nhớ biến.Dữ liệu không tự động ghi vào bạn dùng lệnh tác động đến mà thơi.Nhãn địa đầu đoạn nhớ giành trước 1.2.Chỉ thị CSEG: Chỉ thị định nghĩa điểm bắt đầu đoạn mã chương trình.Một file nguồn assembly chứa nhiều đoạn mã chương trình ,và chúng lại liên kết thành đoạn mã lệnh dịch.Chỉ thị BYTE không sử dụng đoạn này.Một đoạn chương trình khơng định nghĩa mã lệnh hay liệu mặc định đoạn mã lệnh.Mối đoạn mã lệinh có địa riêng 16 bit (hay từ).Chỉ thị ORG sử dụng để đặt vị trí đoạn mã lệnh số nhớ chương trình Chỉ thị khơng kèm theo tham số Cú pháp: CSEG Ví dụ: DSEG var1: BYTE CSEG CONST: DW MOV R1,R0 1.3.DB: Định nghĩa số kiểu byte lưu nhớ chương trình hợac nhớ EEPROM.Và thị theo sau nhãn Chỉ thị thường sử dụng việc lưu giữ bảng biểu thức (nhưng tính giá trị cuối cùng) Các nhãn địa khởi đầu cho giá trị ban đầu bảng.Chỉ dẫn đặt đoạn mã đoạn nhớ EEPROM Các phần tử bảng phân biệt dấu phảy Cú pháp: Label: DB danh_sach_biểu_thức Ví dụ: CSEG Sin: DB 0,1,2,3,4,6,7 ESEG const: DB 1,2,3 Chú ý: Một số hay biểu thức (phải có kết quả) nằm khoảng –128 đến 255.Nếu số só âm lưu dạng 8bit mã bù 4.DEF: Chỉ thị có tác dụng cho phép lập trình viên đặt tên cho ghi.Thay nhớ ghi lập trình viên đặt tên cho với tên gợi nhớ Cú pháp: DEF tên_gợi_nhớ=thanh_ghi Ví dụ: DEF xh=R28 DEF xl=R29 Chú ý: Một ghi có nhiều tên gợi nhó gán cho điều nguy hiểm vơ tình bạn làm liệu ghi mà bạn không mong muốn 1.5.DEVICE: Chỉ thị cho chương trình dịch biết loại vi điều khiển mà ta viết chương trình Cú pháp: DEVICE Loại_vi_điều_khiển Ví dụ: DEVICE AT90S8535 Chỉ thị báo cho lỗi sinh mà chương trình dịch tìm thấy lệnh thiếtbị ngoại vi không hỗ trợ loại vi điều khiển 1.6.DSEG: Chỉ thị định nghĩa điểm bắt đầu đoạn liệu.Một file nguồn có nhiều đoạn liệu dịch chúng chúng gộp liên kết vào đoạn.Một đoạn liệu bình thường chứa thị BYTE.Mỗi đoạn liệu có trỏ vị trí riêng trỏ bit (vì chúng nhớ RAM).Chỉ thị ORG sử dụng để đặt biến vị trí xác định RAM (chỉ thị nói sau) Cú pháp: DSEG var1: BYTE table: BYTE table_size 1.7.DW: Đây thị cho phép người sử dụng định nghĩa số dạng byte nhớ chương trình bộn nhớ EEPROM hồn tồn tương tự thị DB Cú pháp: Label: DW danh_sách_biểu_thức Ví dụ: Var: DW 12,354,3434,31345 1.8.ENDMACRO: Kết thúc macro.Chỉ thị không kèm tham số Cú pháp: Endmacro Ví dụ: Macro subi16 subi r16,low(@0) subi r17,high(@0) Endmacro 1.9.EQU: Chỉ thị EQU gán giá trị biểu thức cho nhãn.Nhãn sau gán giá trị trở thành số không định lại giá trị Cú pháp: EQU const=expression Ví dụ: EQU io=0x23 EQU ios=io-10 1.10 ESEG: Hoàn toàn giống với CSEG 1.11 EXIT: Chỉ thị EXIT báo cho chương trình dịch biết dừng việc đọc file lại.Bình thường chương trình dịch chạy hết file kết thúc.Nhưng file có chứa thị chương trình dịch gặp thị kết thúc qúa trình đọc Cú pháp: EXIT 1.12.INCLUDE Chỉ thị báo cho chương trình dịch biết bắt đầu đợc từ file xác định hết file thị ngừng đọc (EXIT) Cú pháp: Include “tên_file” ; Đôi tên file đường dẫn Ví dụ: ;Nội dung file iodef.asm” EQU sreg = 0x3f EQU sphigh=0x3e EQU splow=0x3d ;Trong chương trình INCLUDE “iodef.asm” in r0,sreg ; đọc ghi trang thái 1.13.LIST: Cho phép chương trình dịch tạo file list Cú pháp: LIST Chú ý:Mặc định chương trình dịch cho phép tạo file list thị kèm với thị NOLIST 1.14.LISTMAC: Hoàn toàn giống với LIST với macro 1.15.MACRO: Chỉ dẫn khai báo macro.Vậy macro gì? Macro thực đoạn chương trình Khi mà macro gọi đoạn chương trình dán vào vị trí gọi macro Tham số theo sau thị tên macro.Một macro có tới 10 tham số Cú pháp: Macro macro_name Ví dụ: Macro sub16 ……… ;lệnh ……….;lênh Endmacro CSEG sub16 ;goi macro 1.16.NOLIST: 1.17 ORG: Chỉ thị ORG thiết lập trỏ tuyệt đối Giá trị thiết lập tham số cho thị này.Nếu thị nằm đoạn liệu vị trí thiết lập vị trí SRAM cụ thể vị trí bắt đầu biến đước khai báo sau thị BYTE Còn thị khai báo đoạn chương trình vị trí tuyệt đối nằm nhớ chương trình đoạn mã lệnh theo sau ghi vào bơin nhớ chương trình từ trỏ đó.Và đoạn ESEG tương tự.Nếu thị sau nhãn nhãn có giá trị tham số thị Cú pháp: org tham_só Label: org tham_số Ví dụ: DSEG org 0x60 var1: BYTE ESEG org 0x20 evar: DB 0xff CSEG org 0x10 mov r0,r1 1.18.SET: Gán giá trị cho nhãn.Nhãn sử dụng thay cho giá trị hồn tồn bị thay đổi phụ thuộc vào chương trình.( Đây điểm khác biệt so với thị EQU) Một số thị khác : IFDEF IFNDEF IF IFDEF |.IFNDEF ELSE | ELIF ENDIF Ví dụ: MACRO SET_BAT IF @0>0x3F MESSAGE "Address larger than 0x3f" lds @2, @0 sbr @2, (1