5
#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();

TermoMetro

Embed Size (px)

DESCRIPTION

Código em C para leitura de um termômetro digital serial.

Citation preview

Page 1: TermoMetro

#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();

Page 2: TermoMetro

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();

Page 3: TermoMetro

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();

Page 4: TermoMetro

}

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);

}

Page 5: TermoMetro