PCF8574 исходного кода для AT89C2051

J

john2020

Guest
Привет всем,Кто-нибудь есть рабочий пример водительского PCF8574A для AT89C2051?

Я пытаюсь мигать светодиодом almous около 6 часов с нулевым результатом ...

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Грустный" border="0" />SDATA на P1_6, SCLK на P1_7

Как включать / выключать светодиод на КПМ A0?
Я получил код, который я работал, here.any предложения othere?

Это очень краткий обычной битовой челка PCF8574 по адресу 0x70 (убедитесь, что у вас по этому адресу, у них две различные версии: 8574AT и 8574T с разными адресами, и каждый имеет 8 аппаратных выбора диапазонов)!Вы можете изменить славянский IIC-адрес, его определение в коде.Байт будет направлено также жестко, но может так же легко, быть направлены в обычные по адресу.

Отправьте код 8-битным значением 0xFEH для решения 0x70H, и будет работать на любом 8051.

Просто определить SDA и SCL как выходами с открытым коллектором, и добавить 4.7KOhm тянуть ИБП с этими двумя линиями.Возможно, вам придется добавить NOP к обычной ждать, если ваша 8051 работает быстрее, чем 87LPC764 я использовал.

Код является лишь "пара" байт долго, и doesen't полагаться на государство lengthly IIC-машины, любые аппаратные компоненты, таймеры, или специальные прерывания т.д. Она маленькая и грязная и выполняет свою работу.

;************************************************* ***************************
; Написать байт расширитель IIC
;
; Copyright (C) 2004 Саид Jackson - Экватор Technologies, Inc
;************************************************* ***************************

write_to_IIC_expander:

; Первоначальные автобус IIC государство
;
setb ПДД: если никто не ведет автобус,
setb SCL, это сейчас простаивает.

JNB ПДД, $; ждать автобус простаивает.
JNB SCL, $

; Генерировать сигнал запуска
;
CLR ПДД
acall wait_halfbit
CLR SCL

; 8574 мы используем, по адресу 0x70H:

MOV A, # 070h; адрес расширителя IIC
acall send_byte; отправить IIC адрес

; Ресивер должен реагировать с ACK.
; Этот код в настоящее время не убедитесь, что АСК не получено

acall wait_halfbit; показывать ACK
setb SCL; часы простоя линии (претендовать на читать ACK)
acall wait_halfbit

CLR SCL; начало databyte; Это фактическая байт будет направлен, в нашем примере своей 0xFEH:

MOV, # 0FEh; четко бит 0 экспандера IIC толькоacall send_byte; отправить IIC databyte

; Ресивер должен реагировать с ACK.
; Этот код в настоящее время не убедитесь, что АСК не получено

acall wait_halfbit; показывать ACK
setb SCL
acall wait_halfbit

; Отправить стоп-бит до конца сделку
;
CLR SCL; отправлять стоп-бит
CLR СДА; стоп-бит
acall wait_halfbit
setb SCL, снять часы.приемник сигналов на выборочных данных
acall wait_halfbit
setb ПДД, снять данные.Автобус сейчас простаивает.

Сход

;************************************************* ***************************
; Отправить 8-битное слово в МИК автобус
;************************************************* ***************************

send_byte:
MOV R0, # 08H; установка кол

next_bit:
acall wait_halfbit
RLC; вращать следующий бит на выполнение
MOV ПДД, C; IIC набор данных для выполнения значения
setb SCL; набор IIC часы
acall wait_halfbit; подождать
CLR SCL, снять часы.приемник сигналов на выборочных данных
DJNZ R0, next_bit; сделать следующий бит

setb СДА; простоя линии данных
Сход

;************************************************* ***************************
; Подождите одну половину периода разрядные IIC (5us на 100KHz) с часами на 12MHz 87LPC764
;************************************************* ***************************

wait_halfbit:
NOP
NOP
NOP
NOP
NOP
Сход

 

Welcome to EDABoard.com

Sponsor

Back
Top