[an error occurred while processing this directive]
Ответ: Нате.
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Total 15 апреля 2003 г. 09:11
В ответ на: Программная реализация I2C для AVR ??? (+) отправлено Yevy 15 апреля 2003 г. 01:30

NAME i2c

#define __i2c_port 0x03
#define __scl_bit 2
#define __sda_bit 3

#define __i2c_dir __i2c_port-1
#define __i2c_pin __i2c_port-2

public i2c_init,i2c_start,i2c_stop,i2c_read,i2c_write

RSEG CODE
i2c_init:
cbi __i2c_port,__scl_bit
cbi __i2c_port,__sda_bit
sbi __i2c_dir,__scl_bit
cbi __i2c_dir,__sda_bit
rjmp __i2c_delay2
i2c_start:
cbi __i2c_dir,__sda_bit
cbi __i2c_dir,__scl_bit
clr r16
nop
sbis __i2c_pin,__sda_bit
ret
sbis __i2c_pin,__scl_bit
ret
rcall __i2c_delay1
sbi __i2c_dir,__sda_bit
rcall __i2c_delay1
sbi __i2c_dir,__scl_bit
ldi r16,1
__i2c_delay1:
ldi r22,10
rjmp __i2c_delay2l
i2c_stop:
sbi __i2c_dir,__sda_bit
sbi __i2c_dir,__scl_bit
rcall __i2c_delay2
cbi __i2c_dir,__scl_bit
rcall __i2c_delay1
cbi __i2c_dir,__sda_bit
__i2c_delay2:
ldi r22,20
__i2c_delay2l:
dec r22
brne __i2c_delay2l
ret
i2c_read:
ldi r23,8
clr r30
__i2c_read0:
cbi __i2c_dir,__scl_bit
rcall __i2c_delay2
clc
sbic __i2c_pin,__sda_bit
sec
sbi __i2c_dir,__scl_bit
rcall __i2c_delay2
rol r30
dec r23
brne __i2c_read0
mov r23,r16
mov r16,r30
; ld r23,y+
tst r23
brne __i2c_read1
cbi __i2c_dir,__sda_bit
rjmp __i2c_read2
__i2c_read1:
sbi __i2c_dir,__sda_bit
__i2c_read2:
rcall __i2c_delay1
cbi __i2c_dir,__scl_bit
rcall __i2c_delay2
sbi __i2c_dir,__scl_bit
rcall __i2c_delay1
cbi __i2c_dir,__sda_bit
rjmp __i2c_delay1

i2c_write:
mov r30,r16
; ld r30,y+
ldi r23,8
__i2c_write0:
lsl r30
brcc __i2c_write1
cbi __i2c_dir,__sda_bit
rjmp __i2c_write2
__i2c_write1:
sbi __i2c_dir,__sda_bit
__i2c_write2:
rcall __i2c_delay2
cbi __i2c_dir,__scl_bit
rcall __i2c_delay2
sbi __i2c_dir,__scl_bit
dec r23
brne __i2c_write0
cbi __i2c_dir,__sda_bit
rcall __i2c_delay1
cbi __i2c_dir,__scl_bit
rcall __i2c_delay2
ldi r16,1
sbic __i2c_pin,__sda_bit
clr r16
sbi __i2c_dir,__scl_bit
ret

END

Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru