Код: int8 temp_address = 0, temp_count = 0;
//interrupt vector if(i2c_start bit){ //ако имаме I2C Start бит (ще се предава адрес) SetSlave; //правя устройството Slave EnableExternalInterrupt; //разрешавам INT0 ClearI2CInterrupt; //Чиситя I2C Interrupt flag } if(ExternalInterrupt){ //ако имам INT0 (преход 0->1 на SCL) temp_address |= ReadPortB2; //чета PortB2 (т.е. чета SDA при преход 0->1 на SCL) temp_address <<= 1; //и записвам съответния бит в temp_addres if(temp_count++ == 6){ //ако сме прочели 7 бита SSPADD = temp_address; //записвам temp_addres в регистър SSPADD DisableExternalInterrupt; //забранявам INT0 temp_address = 0; temp_count = 0; } ClearExternalInterrupt; //чистя INT0 flag } //other interrupt conditions ...
main(){
initialize_rs232(); initialize_i2c(); clear_all_interrupts();
while(1){
i2cToRS232(); //пращам данните от I2C към RS232. Устройството е Slave
RS232toI2c(); //правя устройството Master и започвам да пращам //данни от RS232 към I2C ManipulateCommandsFromUser(); BlinkLED(); }
|