Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

вот, так и говори что в старый асм проект надо добавить часы.

Отправлено колян безпарольный 08 января 2009 г. 14:03
В ответ на: Плата готовая, проект старый с переферийным разъемом расширения. отправлено пользователем Cralex 08 января 2009 г. 13:56

i2c асмовое

;Используемые регистры
;I2Csign-адреса устройств
;
WriteTimer:
mov I2Csign,#10100000b
jmp WriteI2C
ReadTimer:
mov I2Csign,#10100001b
jmp ReadI2C
ReadTimerB:
mov I2Csign,#10100001b
jmp ReadI2Cb
WriteTimerB:
mov I2Csign,#10100000b
jmp WriteI2Cb

WriteFrq:
mov I2Csign,#10100010b
jmp WriteI2C
WriteFrqB:
mov I2Csign,#10100010b
jmp WriteI2Cb
ReadFrq:
mov I2Csign,#10100011b
jmp ReadI2C
ReadFrqB:
mov I2Csign,#10100011b
jmp ReadI2Cb
WriteEEPROM:
mov I2Csign,#10101110b
jmp WriteI2C
ReadEEPROM:
mov I2Csign,#10101111b
jmp ReadI2C
WriteEEPROMb:
mov I2Csign,#10101110b
jmp WriteI2Cb
ReadEEPROMb:
mov I2Csign,#10101111b
jmp ReadI2Cb



StartI2Cw:
mov A, I2Csign
clr ACC.0
sjmp StartI2C
StartI2Cr:
mov A, I2Csign
setb ACC.0
StartI2C:
setb SDA
nop
setb SCL
nop
nop
clr SDA ;Условие START
nop
nop
clr SCL
;Tlow=1.2 [3.0]
PutI2C:
setb C
rlc A
1$: mov SDA, C
clr C
setb SCL ;Thigh=0.6 [1.0]
rlc A
clr SCL ;Tlow=1.2 [3.0]
jnz 1$

setb SDA
setb SCL
mov C, SDA ;Подтверждение приема (0=ОК!)
clr SCL
ret

GetI2C:
mov A, #1
1$: setb SCL
mov C, SDA
rlc A
clr SCL
jnc 1$
ret

Ans0: clr SDA
Ans1: setb SCL
clr SCL
setb SDA
ret

StopI2Cerr:
1$: setb C
StopI2C:
clr SDA
setb SCL
nop ;Tsu,sto=0.6 [1.0]
setb SDA
ret


WriteI2C: ;R5=адр.м/сх, A=<байт>
; Выход: C=1 - ошибка
; B,R7,R6 - раб.регистры
mov B, A
mov R7, #3+1 ; к-во попыток записи
clr F0
1$: mov R6, #0 ; тайм-аут ожидания ответа
2$: call StartI2Cw
jnc 4$
3$: call StopI2C
djnz R6, 2$ ; ожидание - примерно 42 цикла
jmp StopI2Cerr ; Выход по ошибке 2
4$: mov A, R5
call PutI2C
jc 3$
jnb F0, 5$

mov A, B
call PutI2C
jc 3$
call StopI2C
jbc F0, 2$

5$: call StartI2Cr
jc 3$
call GetI2C
call Ans1
call StopI2C
cjne A, B, 6$
inc R5
RET

6$: setb F0 ; Признак записи
djnz R7, 1$
mov A, #44+1 ; СОБЫТИЕ 45: ошибка записи в РР-1

7$: setb C
RET

ReadI2C: ;R1=адр.м/сх
; Выход: A=<байт>, C=1 - ошибка
call StartI2Cw
jc 1$
mov A, R5
call PutI2C
jc 1$
call StartI2Cr
jnc 2$

1$: jmp StopI2Cerr ; Выход по ошибке 2 (нет ответа РР)

2$: call GetI2C
call Ans1
inc R5
clr C
jmp StopI2C



ReadI2Cb:
;R5-колчество принемаемых байт
;R0-указатель начала буфера в ОЗУ
;R1-указатель начала в устройстве
call StartI2Cw
jc 1$
mov A,R1
call PutI2C
jc 1$
call StartI2Cr
jnc 3$

1$: jmp StopI2Cerr ; Выход по ошибке

2$: call Ans0
3$: call GetI2C
mov @R0, A
inc R0
djnz R5, 2$

call Ans1
clr C
jmp StopI2C


WriteI2Cb:

;R5-колчество записываемых байт
;R0-указатель начала буфера в ОЗУ
;R1-указатель начала в устройстве
inc R5

call StartI2Cw
jc 3$
mov A,R1
2$: call PutI2C
jc 1$
mov A,@R0
inc R0
djnz R5, 2$
jmp StopI2C

3$: inc R5
1$: jmp StopI2Cerr ; Выход по ошибке





Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сложите три и три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru