A-01. ภาษาแอสเซมบลีของ AVR

การเขียนโปรแกรมภาษาแอสเซมบลีสำหรับ AVR บน VMLAB มีขั้นตอนดังนี้

การสร้างโปรเจคใหม่

  1. Run โปรแกรม VMLAB

  2. Project-> New project

Step 1 สร้าง Directory เพื่อเก็บ Project

Step 2 เลือกไมโคร ATmega168

Step 3 เลือก Add this เพิ่มไฟล์ภาษา แอสเซมบลี้ ใว้ใน Project

คลิก OK

รูปที่ 1.1

ตัวอย่างไฟลโปรเจค

เปิด Template File ที่ได้มา แล้วแก้ไข ตามโปรแกรมที่ 1

; ******************************************************

; BASIC .ASM template file for AVR

; ******************************************************

.include "C:\VMLAB\include\m168def.inc"

; Define here the variables

;

.def temp =r16

; Define here Reset and interrupt vectors, if any

;

reset:

rjmp start

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03

reti ; Addr $04

reti ; Addr $05

reti ; Addr $06 Use 'rjmp myVector'

reti ; Addr $07 to define a interrupt vector

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B This is just an example

reti ; Addr $0C Not all MCUs have the same

reti ; Addr $0D number of interrupt vectors

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

; Program starts here after Reset

;

start:

nop ; Initialize here ports, stack pointer,

nop ; cleanup RAM, etc.

nop ;

nop ;

forever:

nop

nop ; Infinite loop.

nop ; Define your main system

nop ; behaviour here

rjmp forever

โปรแกรมที่ 1

; ******************************************************

; BASIC .ASM template file for AVR

; ******************************************************

.include "C:\VMLAB\include\m168def.inc"

; Define here the variables

;

.def d0 = R18

.def d1 = R19

.def d2 = R20

.equ dmax = 0x5678

;---------------------------------------------------------

.DSEG

.ORG 0x60

v1: .BYTE 1

v2: .BYTE 1

;---------------------------------------------------------

; Define here Reset and interrupt vectors, if any

;

reset:

.CSEG

.org $0000

jmp start

; Program starts here after Reset

;

start: LDI R16,0b00110110 ;…………………………………………………………………

LDI R17,0X59 ;…………………………………………………………………

LDI d0,15 ;…………………………………………………………………

MOVW R1:R0,R17:R16 ;…………………………………………………………………

LDI d1,low(dmax) ;…………………………………………………………………

LDI d2,high(dmax) ;…………………………………………………………………

STS v1,d0 ;…………………………………………………………………

STS v2,d1 ;…………………………………………………………………

LDS d2,v1+1 ;…………………………………………………………………

HERE: RJMP HERE

แปลโปรแกรม

Project -> Build

กำหนดค่าตัวแปรที่ต้องการดู

Debug -> Watch manager แล้วคลิกเลือกตัวแปร แล้วปิดหน้าต่าง

แสดงค่าตัวแปร

View -> Watch

View -> Registers/Flag

View -> Data Memory

View

Run Prgram ที่ละสเต็ป

Run -> Step into หรือ F7

หน้าต่าง Registers และหน้าต่าง Watch จะเป็นตามรูปที่ 1.2

รูปที่ 1.2