A-01. ภาษาแอสเซมบลีของ AVR
การเขียนโปรแกรมภาษาแอสเซมบลีสำหรับ AVR บน VMLAB มีขั้นตอนดังนี้
การสร้างโปรเจคใหม่
Run โปรแกรม VMLAB
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