You are on page 1of 6

H v Tn: MSSV:

Hong c Quang 09101212

#include <16F877A.h> #include <i2c.h> #FUSES #USE #DEFINE #DEFINE #DEFINE NOWDT,NOPROTECT,NOLVP,PUT,HS DELAY(CLOCK=16M) WRITE 0 READ 1 SLAVER 0X68 TIME[7];

UNSIGNED CHAR VOID { SET_TIME() I2C_START();

I2C_WRITE(SLAVER <<1WRITE); I2C_WRITE(0X00); // DIA CHI O NHO DAU TIEN TRONG REALTIME I2C_WRITE(0X59); // CHINH GIAY I2C_WRITE(0X45); //CHINH PHUT I2C_WRITE(0X08); //CHINH GIO I2C_WRITE(0X03); //CHINH THU I2C_WRITE(0X08); //CHINH NGAY I2C_WRITE(0X05); //CHINH THANG I2C_WRITE(0X12); //CHINH NAM I2C_STOP(); }

VOID {

GET_TIME()

I2C_START(); I2C_WRITE(SLAVER<<1WRITE); //WRITE

I2C_WRITE(0X00); //CHON DIA CHI O NHO DAU TIEN I2C_STOP(); I2C_START(); //RESTART //RESTART //LENH READ, LUC NAY DA CO DC

I2C_WRITE(SLAVER<<1READ); FOR { } TIME[6]= I2C_READ(1); I2C_STOP(); } ////// (I=0,I<6,I++) TIME[I] = I2C_READ(0);

// NACK KHONG READ NUA

i2c.c

#include <htc.h> #include "i2c.h" void i2c_start(){ SEN = 1; while(SEN); } void i2c_stop(){ PEN = 1; while(PEN); } unsigned char i2c_read(unsigned char ack){ RCEN = 1; while(RCEN); ACKDT = ack; ACKEN = 1; while(ACKEN);

return SSPBUF; } unsigned char i2c_write(unsigned char d){ WCOL = 0; SSPIF = 0; SSPBUF = d; asm("nop"); asm("nop"); asm("nop"); if(WCOL) return 2; // write collision else { while(!SSPIF); if(ACKSTAT) return 1; // not acknowledge return 0; // everything is ok } } void i2c_init(){ RC3 = 1; RC4 = 1; TRISC3 = 1; TRISC4 = 1; //control by mssp SSPADD = 9; // Baudrate = Fosc/4/(SSPADDR+1) SMP = 1; // slew rate control disabled for 100KHz baudrate SSPCON2 = 0; SSPCON = 0x28; //I2C Master Hardware mode } ////////////////////////////////////////////////////////////////////// #ifndef _I2C_H_ #define_I2C_H_ void i2c_start(); void i2c_stop(); void i2c_init(); unsigned char i2c_read(unsigned char ack); // ack = 1: Not Acknowledge // ack = 0: Acknowledge unsigned char i2c_write(unsigned char d); // d: 8-bit data #endif

i2c.h

Bt u qu trnh c, master s to ra tn hiu start Sau master gi 1 byte n slave gm 7bit a ch v 1 bit cui read hoc write( write=0, read =1) Slave c ng a ch s gi tn hiu ACK v master Master tip tc gi byte d liu cha a ch ca thanh ghi m master mun c trong slave slave s gi tn hiu ACK v bo nhn d liu master thc hin restart master tip tc gi 1 byte n slave gm 7 bit a ch ca slave cn giao tip v 1 bit Read slave gi v tn hiu ACK bo nhn d liu thnh cng bc tip theo ta khng cn gi d liu cha byte a ch ca thanh ghi u tin trong slave na tip theo l slave gi d liu 8 trong thanh ghi ca slave v master nu master khng mun nhn d liu na th s pht ra tn hiu NACK, ngay sau l lnh Stop. Kt thc qu trnh c. gi s nu master mun nhn d liu na th master se pht tn hiu ACK. Tip tc nhn d liu.

bt u qu trnh c d liu master s to ra lnh Start, sau master gi i 1 byte d liu gm c 7 bit a ch tng ng ca slave cn giao tip v 1 bit write, slave c ng a ch s gi tn hiu ACK v master bo kt ni thnh cng. Master tip tc gi byte d liu cha a ch ca thanh ghi bn trong slave m master cn truy cp. Slave s gi ACK bo kt ni thnh cng Master s gi d liu 1 byte , slave nhn c s gi tn hiu ACK v master bo nhn c. Nu master khng mun ghi na, master s gi tn hiu Stop. Dng qu trnh ghi. Master s gi a ch thanh ghi ch 1 ln thi sau a ch thanh ghi s t ng tng dn ln.

You might also like