Pls help me

L

Londres

Guest
J'utilise MSP430F449 de communiquer RTC (PCF8563) par un logiciel I2C.Ici, je donne le code pour I2C PIC picrocontroller.Pls tout me convertir à une utilisation dans mon micro contrôleur.Ici, je suis en joignant les circuits de la mine et le cordon d'alimentation du circuit donné.

Dans mon circuit pas source de tension est connecté à la SDA, SCL lignes.le code,

Cet exemple montre comment mettre en œuvre un logiciel I2C maître, y compris l'horloge stretching.Il est écrit en C pour le processeur PIC, mais devrait être applicable à la plupart des processeurs avec des modifications mineures à l'I / O pin définitions.Il est approprié de contrôle de l'ensemble de nos modules I2C based robot.Étant donné que les lignes SDA et SCL sont de type drain ouvert, nous utilisons la Tristate registre de contrôle pour contrôler la production, le maintien du registre de sortie faible.Les broches du port restent à lire,
alors ils
sont définis comme SCL_IN et SDA_IN.Cette définition et l'initialisation est probablement tout ce que vous
aurez besoin de changer pour un autre processeur.

# define TRISB4 SCL / / bus I2C
# define TRISB1 SDA / /
# define SCL_IN RB4 / /
# define SDA_IN RB1 / /

Pour initialiser l'ensemble des ports de sortie résistants à 0 et le Tristate registres à 1 ce qui désactive les sorties et leur permet d'être tiré par le haut résistances.
SCL SDA = = 1;
SCL_IN = SDA_IN = 0;

Nous utilisons un petit retard de routine entre le SDA et le SCL changements de donner une séquence sur le bus I2C.Ce
n'est rien de plus que d'une sous-routine d'appel et de retour.
void i2c_dly (void)
(
)

La suite de 4 fonctions à la primitive démarrer, d'arrêter,
de lire et d'écrire les séquences.Toutes les transactions I2C peut être réalisée à partir de ceux-ci.
void i2c_start (void)
(
SDA = 1; / / i2c bit start séquence
i2c_dly ();
SCL = 1;
i2c_dly ();
SDA = 0;
i2c_dly ();
SCL = 0;
i2c_dly ();
)

void i2c_stop (void)
(
SDA = 0; / / i2c bit d'arrêt de séquence
i2c_dly ();
SCL = 1;
i2c_dly ();
SDA = 1;
i2c_dly ();
)

unsigned char i2c_rx (char ack)
(
char x, d = 0;
SDA = 1;
for (x = 0; x <8; x ) (
d <<= 1;
do (
SCL = 1;
)
while (SCL_IN == 0) / / attendre toute SCL horloge stretching
i2c_dly ();
if (SDA_IN) d | = 1;
SCL = 0;
)
if (ack) SDA = 0;
else SDA = 1;
SCL = 1;
i2c_dly (); / / send (N) ACK bit
SCL = 0;
SDA = 1;
return d;
)

bit i2c_tx (unsigned char d)
(
char x;
static bit b;
for (x = 8, x, x -) (
if (d & 0x80) SDA = 1;
else SDA = 0;
SCL = 1;
d <<= 1;
SCL = 0;
)
SDA = 1;
SCL = 1;
i2c_dly ();
b = SDA_IN / / ACK bit possible
SCL = 0;
return b;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top