Предыдущая Следующая

Простой термометр

135

Листинг 6.1. Продолжение

/Подпрограмма рестарта Restart:

rsi:

sbi

nop

cbi

nop

rcall

nop

cbi

sbis

DDRB, SCL DDRB, SDA wait5us DDR3, SCL PinB,SCL

соединения I1с

; Повторяем условие старта ; Ниспадающий фронт SCL

; Установка SDA в 1

; Цикл задержки

; Нарастающий фронт SCL

Состояние ожидания ведомого устройства ?

rjmp RSI

rcall wait5us .•Подпрограмма старта передачи Start: nop

clz

sbi DDRB,SDA rcall wait4us WriteByte: nop clz sec

rol dbyt rjmp bitl WriteBit: nop

lsl' dbyt

Цикл задержки

SDA = лог. 0: условие старта Цикл задержки

Запись байта в ведомое устройство

Флаг переноса С = 1 Сдвигаем влево, C->LSB, MSB-Особая обработка разряда 1

bitl: пор

breq

sbi

brcc

пор

cbi

rjmp WriteLow: nop

sbi DDRB,SDA

nop

SCL_High: nop

rcall wait4us cbi DDRB,SCL

GetAck DDRB,SCL WriteLow

DDRB,SDA SCL_High

wb1:

nop sbis

rjmp

rcall

rjmp

PinB,SCL wb1

wait5us WriteBit

Если dbyt пустой, . . .

... то передача завершена

SCL = лог. О Ниспадающий фронт SCL

Переход, если флаг С = 0 Чтобы уравновесить время выполнения SDA - высокоомный Установка SDA в 1

; SDA = лог. 0 Установка SDA в 0 Чтобы уравновесить длительность такта

; Цикл задержки

; SCL - высокоомный Ниспадающий

; фронт SCL

; Состояние ожидания ведомого

; устройства ?

; Цикл задержки

136

Глава 6

Листинг 6.1. Продолжение

GetAck: пор

GA1:

sbi cbi

пор sbis

rjmp

cbr

sbic

sbr

rcall

ret

DDR3,SCL DDRB,SDA

rcall wait5us cbi DDRB,SCL

PinB,SCL GA1

Fig, l«Ack PinB,SDA Fig, l«Ack wait4us

Считывание бита квитирования от зедомого

SCL = лог. О Ниспадающий фронт SCL 3DA - зысокоомный SDA -высокоомное состояние Цикл задержки

SCL - высокоомный Нарастающий фронт SCL

Состояние ожидания зедомого устройства

Флаг Ack = О Если SDA = 1, флаг Ack = 1 Цикл задержки

.•Подпрограмма чтения данных из LM75

ReadByte: ldi

RBI:

RB2 :

sbi rcall cbi sbis

rjmp

rcall

clc

sbic

sec

rol

brcc

nop dbyt,1 DDRB, SCL wait5us DDRB, SCL PinB,SCL

RB2

wait5us

PinB,SDA

dbyt RBI

; Вывод бита квитирования SetAck:

sbi DDRB, SCL

sbrs Fig,Ack

SAl: SA2 :

SA3 :

rimp

Cbi

rjmp

sbi

rcall

cbi

sbis

SAl

DDRB, SDA SA2

DDRB, SDA wait5us DDRB, SCL PinB,SCL

Назначаем в качестве счетчика бит Ниспадающий фронт SCL Цикл задержки Нарастающий фронт SCL Состояние ожидания ведомого устройства ?

Цикл задержки Флаг С = О Если SDA = 1

Carry = 1 Сдвигаем прочитанный бит в байте Переход, если чтение не завершено

Ниспадающий фронт SCL Пропускаем следующую команду, если Ack = 1 Переход, если Ack = О Установка SDA в 1

Установка SDA з О Цикл задержки Нарастающий фронт SCL Состояние ожидания ведомого устройства ?

Простой термометр

137

Листинг 6.1. Продолжение

rjmp SA3

rcall wait5us ret

.•Подпрограмма передачи флага STOP Stopp:

nop

sbi DDRB,SCL

sbi DDRB,SDA

rcall wait5us

cbi DDRB,SCL

rcall wait5us

cbi DDRB,SDA

; Цикл задержки

rcall wait5us ret

Вывод условия зазершения SCL = лог. О Ниспадающий фронт SCL SDA = лог. 0. Установка SDA в 0 Цикл задержки


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz