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