Minggu, 26 Februari 2012

Tutorial Komunikasi SPI (Serial Peripheral Integrated) Antar Mikrokontroler dengan Assembler

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

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

   
;***************** 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-