Upload
wellinton-marcio
View
222
Download
8
Embed Size (px)
DESCRIPTION
Código em C para leitura de um termômetro digital serial.
Citation preview
#include <p18f4520.h>
#include <i2c.h>
#include <delays.h>
#include <stdio.h>
#pragma config OSC = HS
#pragma config LVP = OFF
#pragma config WDT = OFF
#define BASE_ADDR 0b10011010
unsigned char x;
void init_tc74(unsigned char base_addr)
{
IdleI2C();
StartI2C();
while (SSPCON2bits.SEN);
IdleI2C();
WriteI2C(base_addr);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
WriteI2C(0x01);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
WriteI2C(0b01000000);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
StopI2C();
while ( SSPCON2bits.PEN );
IdleI2C();
}
void read_tc74()
{
unsigned char read;
Delay10KTCYx(25);
IdleI2C();
StartI2C();
while (SSPCON2bits.SEN);
IdleI2C();
WriteI2C(0x9A);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
WriteI2C(0x00);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
RestartI2C();
while (SSPCON2bits.RSEN);
IdleI2C();
WriteI2C(0x9A |0x01);
while (SSPCON2bits.ACKSTAT);
IdleI2C();
x = ReadI2C();
while(SSPCON2bits.RCEN);
NotAckI2C();
while(SSPCON2bits.ACKEN);
IdleI2C();
StopI2C();
while ( SSPCON2bits.PEN );
IdleI2C();
}
void main(void)
{
int temp;
char temp_str[5];
ADCON1 = 0x0F;
TRISD = 0;
TRISA = 0xFF;
TRISB = 0xFF;
TRISC = 0xFF;
TRISE = 0x07;
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49;
init_tc74(BASE_ADDR);
read_tc74();
while(1);
}