SPI (Serial Peripheral Integrated) memungkinkan kecepatan tinggi untuk transfer data sinkron antara AVR dan perangkat periferal atau antara beberapa perangkat AVR. Pada sebagian besar SPI digunakan untuk In System Programming (ISP). Interkoneksi antara dua perangkat SPI selalu terjadi antara perangkat MASTER dan perangkat SLAVE. Dibandingkan dengan beberapa perangkat periferal seperti sensor yang hanya dapat berjalan dalam modus SLAVE, SPI AVR dapat dikonfigurasi untuk kedua modus MASTER dan SLAVE.
Pada tutorial kali ini saya berikan contoh antarmuka mikrokontroler dengan SPI menggunakan bahasa Asembler, dengan software AVR studio atau winAVR. Sebelumnya sudah pernah saya posting tentang AVR Studio juga pada Tutorial LCD dengan AVR GCC dan Tutorial Led dan Keypad dengan Assembler.
Rangkaian komunikasi SPI untuk tutorial ini sbb:
Listing program untuk Master (button):
;=============================================================
; Program Antarmuka SPI Mikrokontroler dengan bahasa Assembler
; Programmer : Wahyu Rahmaniar
; Company : Technologination
;=============================================================
;
;Masukkan header untuk tipe AVR yang dipakai
.NOLIST
.INCLUDE "m32def.inc" ; Header untuk ATMEGA32
.LIST
.cseg
.org 0000 ;awal kode program pada alamat 0x0000
ldi r19,low(ramend)
out spl,r19
ldi r19,high(ramend)
out sph,r19
;-------------------- inisialisasi port --------------------
;ldi r16, 0b10111111
;out ddrb, r16
;ldi r19,0b00000000 ;set semua bit register temp
;out ddrc,r19 ;tuliskan ke register DDRC
;*****************MASTER SPI*****************
; DECLARE MASTER SPI :
LDI R16,(1<<DDB4)|(1<<DDB5)|(1<<DDB7)
OUT DDRB,R16
LDI R17,(1<<SPIE)|(1<<SPE)|(1<<MSTR)
OUT SPCR,R17
;*********************************************
MAIN:
IN R19,PINC
SBI PORTB,4
RCALL SEND
RJMP MAIN
SEND:
CBI PORTB,4
OUT SPDR,R19
Wait:
sbis SPSR,SPIF
rjmp Wait
SBI PORTB,4
RET
;=============================================================
; Program Antarmuka SPI Mikrokontroler dengan bahasa Assembler
; Programmer : Wahyu Rahmaniar
; Company : Technologination
;=============================================================
;
;Masukkan header untuk tipe AVR yang dipakai
.NOLIST
.INCLUDE "m32def.inc" ; Header untuk ATMEGA32
.LIST
.cseg
.org 0000 ;awal kode program pada alamat 0x0000
ldi r19,low(ramend)
out spl,r19
ldi r19,high(ramend)
out sph,r19
;-------------------- inisialisasi port --------------------
;ldi r16, 0b10111111
;out ddrb, r16
;ldi r19,0b00000000 ;set semua bit register temp
;out ddrc,r19 ;tuliskan ke register DDRC
;*****************MASTER SPI*****************
; DECLARE MASTER SPI :
LDI R16,(1<<DDB4)|(1<<DDB5)|(1<<DDB7)
OUT DDRB,R16
LDI R17,(1<<SPIE)|(1<<SPE)|(1<<MSTR)
OUT SPCR,R17
;*********************************************
MAIN:
IN R19,PINC
SBI PORTB,4
RCALL SEND
RJMP MAIN
SEND:
CBI PORTB,4
OUT SPDR,R19
Wait:
sbis SPSR,SPIF
rjmp Wait
SBI PORTB,4
RET
Listing program untuk SLAVE (LED):
;=============================================================
; Program Antarmuka SPI Mikrokontroler dengan bahasa Assembler
; Programmer : Wahyu Rahmaniar
; Company : Technologination
;=============================================================
;Masukkan header untuk tipe AVR yang dipakai
.NOLIST
.INCLUDE "m32def.inc" ; Header untuk ATMEGA32
.LIST
.cseg
.org 0000 ;awal kode program pada alamat 0x0000
ldi r19,low(ramend)
out spl,r19
ldi r19,high(ramend)
out sph,r19
;-------------------- inisialisasi port --------------------
ldi r19,0b11111111 ;set semua bit register temp
out ddrc,r19 ;tuliskan ke register DDRC
; Program Antarmuka SPI Mikrokontroler dengan bahasa Assembler
; Programmer : Wahyu Rahmaniar
; Company : Technologination
;=============================================================
;Masukkan header untuk tipe AVR yang dipakai
.NOLIST
.INCLUDE "m32def.inc" ; Header untuk ATMEGA32
.LIST
.cseg
.org 0000 ;awal kode program pada alamat 0x0000
ldi r19,low(ramend)
out spl,r19
ldi r19,high(ramend)
out sph,r19
;-------------------- inisialisasi port --------------------
ldi r19,0b11111111 ;set semua bit register temp
out ddrc,r19 ;tuliskan ke register DDRC
;***************** SlAVE SPI*****************
;DECLARE SLAVE SPI:
LDI R16,(1<<DDB6)
OUT DDRB,R16
ldi R17,(1<<SPE)
out SPCR,R17
;********************************************
MAIN:
RCALL RECEIVE
OUT PORTC,R16
RJMP MAIN
RECEIVE:
sbic PORTB,4
RJMP RECEIVE
sbis SPSR,SPIF
rjmp RECEIVE
IN R16,SPDR
RET
LED akan menyala sesuai dengan urutan button yang ditekan.
Simulasi dan listing program lengkap bisa didownload disini.
Tempat Jual Komponen dan Elektronik.
-ayuchan-