| ??? 11/26/13 09:40 Read: times |
#190168 - Write_Byte Responding to: ???'s previous message |
Hi,
I've edited the code in the write function. I may do wrong in sending the Write address? #include <REG51F.H>
#include <stdio.h>
#include <INPUT_OUTPUT.h>
#include <delay1.h>
// Function declarations
void initRS();
void initPort();
void I2C_Init();
void I2C_Start();
void I2C_Restart();
void I2C_Stop();
void I2C_SendAck();
void I2C_SendNack();
bit I2C_Write(unsigned char Data);
unsigned char I2C_Read();
unsigned char I2C_GetAck();
#define SDA p1_0
#define SCL p1_1
//Main function
void main()
{
initRS();
initPort();
I2C_Init();
//unsigned char RxByte = 0;
I2C_Start();
I2C_Write(0x40);
I2C_Write(0xAA);
I2C_Write(0xF0);
//I2C_Read();
//I2C_SendAck();
I2C_Stop();
while(1)
{
}
}
//Function : I2C Write Byte transfer 1 bytes
bit I2C_Write(unsigned char Data)
{
unsigned char i; // Variable to be used in for loop
for(i=0;i<8;i++) // Repeat for every bit
{
SCL = 0; // Make SCL pin low
delay1(); // Data pin should change it's value,
// when it is confirm that SCL is low
if ((Data & 0x80) == 0) // Decimal = 128
SDA = 0;
else
SDA = 1;
delay1();
SCL = 1;
Data<<=1;
delay1();
SCL = 0; // All routines must exit with clock LOW or bus clear
}
// Get ACK from slave
//unsigned char i; // Variables to be used in for loop
SCL = 0;
delay1();
SDA = 1;
delay1();
SCL = 1;
delay1();
SCL = 0;
return SDA;
}
/*// Function : I2C Read Byte
unsigned char I2C_Read()
{
unsigned char i, Data=0;
for(i=0;i<8;i++)
{
SCL = 0;
SCL = 1;
delay1(); */
/*if(SDA)
Data |=1;
if(i<7)
Data<<=1;*/
/*Data<<=1;
if(SDA) data|=1;
}
SCL = 0;
SDA = 1;
return Data;
} */
// Function : To set initial values of SDA and SCL
void I2C_Init()
{
SDA = 1; // Set SDA pin HIGH
SCL = 1; // Set SCL pin LOW
}
// Function : Master sending START condition, HIGH to LOW transition on SDA while SCL keeping high
void I2C_Start()
{
SCL = 1;
SDA = 1;
delay1();
SDA = 0;
delay1();
SCL =0;
delay1();
}
void I2C_Restart()
{
SDA = 1;
delay1();
SCL = 1;
delay1();
SDA = 0;
delay1();
SDA = 0; //Always exit with clock LOW
delay1();
}
void I2C_Stop()
{
SDA = 0;
delay1();
SCL = 1;
delay1();
SDA = 1 ;
delay1();
}
void I2C_Ack()
{
SDA = 0;
SCL = 1;
SCL = 0;
}
void I2C_Nack()
{
SDA = 1;
SCL = 1;
SCL = 0;
}
// Initialize serial port
void initRS ()
{
SCON = 0x50; // SCON: mode 1, 8-bit UART, enable rcvr
TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload
TH1 = 253; // TH1: reload value for 9600 baud @ 11.0592MHz FDH
TR1 = 1; // TR1: timer 1 run
TI = 1; // TI: set TI to send first char of UART
}
//Initialize port
void initPort()
{
P1 = 0xFF;
P2 = 0x00;
P0 = 0x00;
}
Thanks. Regards, |
| Topic | Author | Date |
| i2c : PCF8575 interface with 8051 microcontroller | 01/01/70 00:00 | |
| did you notice | 01/01/70 00:00 | |
| How did you connect the LED's? | 01/01/70 00:00 | |
| LED connection to PCF8575 | 01/01/70 00:00 | |
| what happened to MSB of data? | 01/01/70 00:00 | |
Write_Byte | 01/01/70 00:00 |



