pcf 8574 problem



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Killer01" <killer_at_nospam_zsk.lub.pl>
Subject: pcf 8574 problem
Date: Thu, 5 Dec 2002 11:01:08 +0100


Korzystajac z procedur I2C Slawomira Skrzynskiego napislaem a asemblerze
program wysylajacy dana 11111111B a nastepnie 11011111B pod adres 8574.
Nozki ukladu A0, A1, A2 podlaczone sa do masy. W programi w przypadku braku
potwierdzenia odbioru danej przez 8574 zapalana jest dioda. I tu zaczynaja
sie schody. Uklad ma po wlaczeniu ma wyjsciu stan H, podobnie dzieje sie z
procesorem.
Po wyslaniu danej uklad wysyla (chyba) bit potwierdzenia odbioru bo dioda
sie nie zapala, ale nie ma danej ktora wyslalem na porty 8574 (caly czas sa
jedynki - wszedzie). UKlad na 100% jest sprawny bo mam jego 4 sztuki i na
innych urzadzeniach on dziala.

Oto program:

SDA EQU P1.1
SCL EQU P1.0
LJMP START
ORG 100H
START:
CLR SDA
CLR SCL
CLR P3.0
CLR P3.1

MOV A,#11111111B ;wartosc ktora ma zostac wyslana
PUSH ACC
ACALL IIC_START ;warunek startu
MOV A,#01110000B ;adres pcf 8574
ACALL IIC_WRITE ;zapis
JC BLAD ;sprawdza ACK (c=0 transmija powiodla sie)
POP ACC
ACALL IIC_WRITE ;zapis wartosci 11111111B
JC BLAD2
MOV A,#11011111B
ACALL IIC_WRITE
JC BLAD
ACALL IIC_STOP ;warunek stopu

SJMP $

BLAD:
SETB P3.0
SJMP $

BLAD2:
SETB P3.1
SJMP $

IIC_WAIT:
PUSH B
MOV B,A
IIC_WAIT_1:
ACALL IIC_START
MOV A,B
ACALL IIC_WRITE
JC IIC_WAIT_1
ACALL IIC_READ_NP
ACALL IIC_STOP
POP B
RET


IIC_START:
SETB SCL
SETB SDA
LCALL CZEKAJ
CLR SDA
LCALL CZEKAJ
CLR SCL
RET



IIC_STOP:
CLR SDA
SETB SCL
LCALL CZEKAJ
SETB SDA
RET



IIC_WRITE:
PUSH ACC
PUSH B
MOV B,#8
IIC_WR_3:
RLC A
JC IIC_WR_1
CLR SDA
SJMP IIC_WR_2
IIC_WR_1:
SETB SDA
IIC_WR_2:
ACALL IIC_CK_H
ACALL IIC_CK_L
DJNZ B,IIC_WR_3
SETB SDA
ACALL IIC_CK_H
MOV C,SDA
ACALL IIC_CK_L
POP B
POP ACC
RET



IIC_READ_P:
ACALL IIC_RD
CLR SDA
ACALL IIC_CK_H
ACALL IIC_CK_L
SETB SDA
RET




IIC_READ_NP:
ACALL IIC_RD
SETB SDA
ACALL IIC_CK_H
ACALL IIC_CK_L
RET



IIC_CK_L:
NOP
NOP
NOP
NOP
CLR SCL
RET



IIC_CK_H:
NOP
NOP
NOP
NOP
SETB SCL
RET


IIC_RD:
PUSH B
MOV B,#8
SETB SDA
IIC_RD_1:
ACALL IIC_CK_H
MOV C,SDA
RLC A
ACALL IIC_CK_L
DJNZ B,IIC_RD_1
POP B
RET

CZEKAJ:
NOP
NOP
RET


--
Prosze o pomoc, moze ktos sie juz z czyms z takim spotkal, a moze cos robie
zle.
Pozdrawiam
Killer
killer_at_nospam_zsk.lub.pl