Conversation Between namqn and cachep47
Showing Visitor Messages 1 to 2 of 2
-
Em cần một ví hoàn chỉnh về I2C cho PIC 16F877A về truyền và nhận ,Anh có thể giúp Em được không ? Em đang làm đồ án tốt nghiệp về nó mà, cần truyền đi 2 byte dữ liệu ? thanks !!!
-
Chào a namqn ! Anh kiểm tra hộ Em chương trình về I2C này được không ?
Chương trình cho Mater: gửi dữ liệu đi và nhận dữ liệu về cho lên cổng B
#include<16F877A.H>
#include<def_877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use Delay(Clock=2000000)
#use i2c(master, sda=PIN_C4, scl=PIN_C3,fast) //che do master, toc do
#define SLAVE_ADDRESS 0xa0
//toc do fast
int8 read_I2C()
{
int8 value;
i2c_start();
i2c_write(SLAVE_ADDRESS + 1);
value = i2c_read();
i2c_stop();
return value;
}
void write_I2C(int8 a)
{
i2c_start();
i2c_write(SLAVE_ADDRESS);
i2c_write(a);
i2c_stop();
}
void main()
{
int8 value_write;
int8 value_read;
value_write=0;
value_read=0;
trisb=0;
while(true)
{
value_read=read_I2C();//doc gia tri cua slave goi cho master
delay_ms(100); //delay khoang 100ms
portb=value_read;
write_I2C(value_write);//goi du lieu cho master
delay_ms(100);
value_write++; //tang value_write len 1 sau moi lan lap
}
}
Chương trình cho Slaver : Nhận dữ liệu về và gửi trả lai cho Mater
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(Clock=2000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)
int8 value =0;
#INT_SSP
void i2c_isr()
{
int8 state;
state = i2c_isr_state();
if(state < 0x80)
value = i2c_read();
if(state == 0x80){
i2c_write(value);
}
}
void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_SSP);
set_tris_b(0x00);
while(1){
output_b(value);
}
}