Está en la página 1de 2

#include <16f877a.

h> //inicia el pic #device adc=8 //activa la conversion analoga digital #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG,NOPROTECT // se colocan los fusibles para proteger le programa #USE DELAY(CLOCK=20000000) // un reloj interno de 20mhz #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0xc0,FORCE_HW) // el envio por i 2c desde esclavo por el pin 4 y 3 del puerto c #use standard_io(a) //se declaran los puertos #use standard_io(c) //se declaran los puertos #include <lcd.c> //activa la libreria del lcd int address; // int buffer[0x10];// variables del uso del i2c int value;// int value1;// #INT_SSP // activa la interrupcion por ssp void ssp_interupt () { // funcion de interrupcion ssp int incoming; BYTE state; state = i2c_isr_state(); if(state==0x00) { address=i2c_read(0); } else if(state<0x80 && state>0x00) //Master is sending data { incoming=i2c_read(0); if(state==1) //First received byte is address {buffer[1]=incoming; }ELSE if(state==2) //Second received byte is data { buffer[2]=incoming; } ELSE if(state==3) //Second received byte is data { buffer[3]=incoming; } ELSE //Second received byte is data { buffer[0] = incoming; } } if(state == 0x80) //Master is requesting data { i2c_write(value); //escribe el valor a enviar en value delay_Us(800); //delay entre los envios para evitar malos entendidos :) i2c_write(value1);//escribe el valor a enviar en value1 delay_Us(800); //delay entre los envios para evitar malos entendidos :) }}

void main(){ //inicia la funcion principal setup_adc(ADC_CLOCK_INTERNAL); //activa el reloj interno setup_adc_ports(AN0_AN1_AN3); // las conversion analogo digital enable_interrupts(global); // interrupcion global enable_interrupts(int_ssp);// interrupcion envio de i2c while(true){ // mientras sea verdad

set_adc_channel(0); // lee el valor en an0 value=read_adc(); //lo guarda en value q luego sera enviado por i2c set_adc_channel(1); // lee el valor en an1 value1=read_adc(); //lo guarda en value1 q luego sera enviado por i2c } }

También podría gustarte