|
发表于 2013-7-12 10:10:22
|
显示全部楼层
Comment = Compiled LIB file, no comment included
copyright = MCS Electronics
www = http://www.mcselec.com
email = avr@mcselec.com
comment = I2C soft slave library
libversion = 1.11.6.8
date = 2 april 2002
statement = No SOURCE code from the library may be distributed in any form
statement = Of course this does not applies for the COMPILED code when you have a BASCOM-AVR license
statement = It is not allowed to use the ASM in any other development tool other than BASCOM !
statement = Based on Atmel AN 302. AN302 contained some bugs.
history = No known bugs.
[_I2C_SLAVE]
_i2c_slave_init:
* Cbi _i2c_slave_DDR, _i2c_slave_sda
* Cbi _i2c_slave_DDR, _i2c_slave_scl
* Cbi _i2c_slave_PORT, _i2c_slave_sda
* Cbi _i2c_slave_PORT, _i2c_slave_scl
*BASIC: Config Int0 = Falling
*BASIC: ENABLE INT0
*BASIC: Config Timer0 = Counter , Edge = Falling
.OBJ 9478
.OBJ 9508
_I2C_SLAVE_int0:
.OBJ 938F
* in r24,sreg
.OBJ 938F
.OBJ 939F
.OBJ 930F
.OBJ 931F
i2c_get_adr:
.OBJ E011
Wlo_ga0:
* sbic _I2C_SLAVE_PIN,_i2c_slave_scl
rjmp wlo_ga0
rjmp first_ga
Do_ga:
Wlo_ga:
*sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_ga
first_ga:
.OBJ 9408
Whi_ga:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_ga
* sbis _i2c_slave_PIN,_i2c_slave_sda
.OBJ 9488
.OBJ 1F11
brcc do_ga
Wlo_ca:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_ca
.OBJ 2F81
*sts {_i2c_slave_address_received},R24
*Lds R25,{_i2c_slave_address}
.OBJ 7F8E
.OBJ 1789
breq i2c_adr_ack
rjmp i2c_adr_miss
I2c_adr_ack:
* sbi _i2c_slave_DDR,_i2c_slave_sda
Whi_aa:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_aa
.OBJ 9516
brcc i2c_master_write
i2c_master_read:
* sbi _i2c_slave_DDR,_i2c_slave_scl
@genus(100)
call I2c_master_needs_data
.OBJ 9408
.OBJ 1F00
* cbi _i2c_slave_DDR,_i2c_slave_scl
Wlo_mr:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_mr
brcc fb_low_mr
* cbi _i2c_slave_DDR,_i2c_slave_sda
rjmp fb_mr
Fb_low_mr:
* sbi _i2c_slave_DDR,_i2c_slave_sda
Fb_mr:
.OBJ F00
loop_mr:
Whi_mr:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_mr
Wlo_mr2:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_mr2
brcc b_low_mr
* cbi _i2c_slave_DDR,_i2c_slave_sda
.OBJ F00
brne loop_mr
rjmp done_mr
B_low_mr:
* sbi _i2c_slave_DDR,_i2c_slave_sda
.OBJ F00
brne loop_mr
done_mr:
Whi_mr2:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_mr2
Wlo_mr3:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_mr3
*cbi _i2c_slave_DDR,_i2c_slave_sda
Whi_ra:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_ra
.OBJ 9408
* sbis _i2c_slave_PIN,_i2c_slave_sda
.OBJ 9488
brcc i2c_master_read
Wlo_ra:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_ra
rjmp i2c_wait_cond
i2c_master_write:
Wlo_mw0:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_mw0
* cbi _i2c_slave_DDR,_i2c_slave_sda
Whi_mw:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_mw
* in r24,_i2c_slave_PIN
* andi r24,_i2c_pinmask
Do_mw:
* in r25,_i2c_slave_PIN
* andi r25,_i2c_pinmask
.OBJ 1798
breq do_mw
* sbrs r25,_i2c_slave_scl
rjmp receive_data
* sbrs r25,_i2c_slave_sda
rjmp i2c_get_adr
rjmp i2c_slave_stop
receive_data:
.OBJ E002
* sbrc r24,_i2c_slave_sda
.OBJ E003
Do_rd:
Wlo_rd:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_rd
.OBJ 9408
Whi_rd:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_rd
* sbis _i2c_slave_PIN,_i2c_slave_sda
.OBJ 9488
.OBJ 1F00
brcc do_rd
i2c_dat_ack:
Wlo_da:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_da
* sbi _i2c_slave_DDR,_i2c_slave_sda
Whi_da:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_da
* sbi _i2c_slave_DDR,_i2c_slave_scl
@genus(100)
call I2c_master_has_data
* cbi _i2c_slave_DDR,_i2c_slave_scl
rjmp i2c_master_write
_i2c_slave_timer0:
* push r24
* in r24,sreg
.OBJ 938F
.OBJ 939F
.OBJ 930F
.OBJ 931F
i2c_adr_miss:
Whi_dac:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_dac
Wlo_dac:
* sbic _i2c_slave_PIN,_i2c_slave_scl
rjmp wlo_dac
*BASIC: Disable Timer0
*BASIC: ENABLE INT0
i2c_wait_cond:
Whi_wc:
* sbis _i2c_slave_PIN,_i2c_slave_scl
rjmp whi_wc
* in r24,_i2c_slave_PIN
* andi r24,_i2c_pinmask
Do_wc:
* in r25,_i2c_slave_PIN
* andi r25,_i2c_pinmask
.OBJ 1798
breq do_wc
* sbrs r25,_i2c_slave_scl
rjmp i2c_skip_byte
* sbrs r25,_i2c_slave_sda
rjmp i2c_get_adr
i2c_slave_stop:
*BASIC: CONFIG INT0=LOW level
*BASIC: CONFIG INT0=falling
I2c_exit:
.OBJ 911F
.OBJ 910F
.OBJ 919F
.OBJ 918F
* out sreg,r24
.OBJ 918F
.OBJ 9518
i2c_skip_byte:
.OBJ EF89
* Out TCNT0,r24
*BASIC: ENABLE TIMER0
*BASIC: DISABLE INT0
rjmp i2c_exit
[END]
|
|