**********************************************
          *   Ime programa:Serial_EEPROM.asm
*
          *  Ovaj listing je vlasništvo časopisa mikroElektronika.
          *  Dozvoljeno je kopiranje i korišćenje programa u 
          *  njegovom izvornom obliku 
          * © Copyright 1998,99 mikroElektronika
*
*  Autor:Velimir Cvetković
**********************************************
regs equ $1000 * Register block base address
ddrc equ $07 * Data Direction Portc
portc equ $06 * Portc ( SDA, SCL)
portb equ $04 * BUSY indicator on pb4
* Variable:
org $350
r_w rmb 1 * $350 read = 1, write = 0
block rmb 1 * $351 block0 = 0, block1 = 1
opcode rmb 1 * Operation Code
brojac1 rmb 1 * Counter (0 < brojac1 < 255)
rd rmb 1 * Code for reading operation
wr rmb 1 * Code for writting operation
* Constantes:
rd0 fcb %10101101 * Reading block0
wr0 fcb %10101100 * Writting block0
rd1 fcb %10101111 * Reading block1
wr1 fcb %10101110 * Writting block1
 
org $250
bytes rmb 256 * Baffer for reading bytes
org $100
pocetak ldx #regs
ind_on bset portb,x $10
ldaa block * Testing op. and block
beq block0
ldd rd1
staa rd
stab wr
l5 clr brojac1
l3 bsr start
ldaa wr
staa opcode
bsr dev_sel
jsr b_addr
ldab r_w
bne citanje
jsr write
l4 bsr stop
inc brojac1
ldab brojac1
bne l3
ind_off bclr portb,x $10 * operation is finesh
bra *
block0 ldd rd0
staa rd
stab wr
bra l5
**************************
* START subroutine *
**************************
start jsr wait
clr portc,x
bset ddrc,x $03 *ddrc-izlaz
bset portc,x $03 * sda=1, scl=1
bclr portc,x $01 *sda=0
bclr portc,x $02 *scl=0
rts
citanje bsr start
ldaa rd
staa opcode
bsr dev_sel
jsr read
bra l4
************************
* STOP subroutine *
************************
stop clr portc,x
bset ddrc,x $03 *ddrc-izlaz
bset portc,x $02 *scl=1
bset portc,x $01 *sda=1
rts
**************************************
* DEVICE SELECT subroutine *
**************************************
dev_sel bset ddrc,x $03
ldy #$08
ldaa opcode
clock1 rola
bcc zero
bset portc,x $01 *sda=1
clock2 bset portc,x $02 *sda=1
bclr portc,x $02 *sda=0
dey
bne clock1
bclr ddrc,x $01 *portc-ulaz
ldab portc,x
bset portc,x $02 *sda=1
bclr portc,x $02 *sda=0
andb #%00000001
bne dev_sel
rts
clock bset ddrc,x $03 * portc-izlaz
bset portc,x $02 * scl=1
bclr portc,x $02 * scl=0
rts
 
zero bclr portc,x $01 *data=0
bra clock2
b_addr clr portc,x
bset ddrc,x $03 *portc-izlaz
ldaa brojac1
ldy #$08 * broj rotacija
w1 rola
bcc zero1
bset portc,x $01 * sda=1
w2 bset portc,x $02 * scl=1
bclr portc,x $02 * scl=0
dey
bne w1
bclr ddrc,x $01 *portc-ulaz
ldab portc,x
bset portc,x $02 * scl=1
bclr 0portc,x $02 * scl=0
andb #%00000001
bne b_addr
rts
zero1 bclr portc,x $01 * sda=0
bra w2
 
**************************
* WRITE subroutine *
**************************
write clr portc,x
bset ddrc,x $03 *portc-izlaz
ldaa brojac1
ldy #$08 * broj rotacija
w11 rola
bcc zero2
bset portc,x $01 * sda=1
w22 bset portc,x $02 * scl=1
bclr portc,x $02 * scl=0
dey
bne w11
bclr ddrc,x $01 *portc-ulaz
bsr wait
ldab portc,x
bset portc,x $02 * scl=1
bclr portc,x $02 * scl=0
andb #%00000001
bne write
rts
zero2 bclr portc,x $01 * sda=0
bra w22
****************
* Wait 10ms *
****************
wait pshx
ldx #1000
tl2 dex
bne tl2
pulx
rts
*************************
* READ subroutine *
*************************
read clr portc,x
bclr ddrc,x $01 * portc-ulaz
bset ddrc,x $02
clra
ldy #$08
l1 bset portc,x $02 * scl=1
asla
ldab portc,x
bclr portc,x $02 * scl=0
andb #%00000001
aba
dey
bne l1
bset portc,x $01 * sda=1
bset portc,x $02 * scl=1
bclr portc,x $02 * scl=0
bclr portc,x $01 * sda=0
pshx
ldx #bytes
ldab brojac1
abx
staa 0,x
pulx
rts
end

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji