??? 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 |