Đo nhiệt độ hiển thị kết quả trên màn hình máy tính
Download Hyper terminal for Win7 tại đây
Code
Soure file Usart.c
#include
#include
#include "i2c.h"
__CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. word
__CONFIG(BORV21); //2nd config. word
#define _XTAL_FREQ 4000000
//Global variables
unsigned char cmd_byte;
unsigned char temp;
//Interrupt Service Routine
void interrupt ISR(void)
{
}
//Required main function
void main(void)
{
char i,c;
char buf[10];
BRG16 = 0;
// BAUDCTL = BAUDCTL & 0xF7;
TXSTA = 0x24; //Che do high-speed, cho phep phat du lieu
RCSTA = 0x90; //Nhan du lieu lien tuc, dung cac chan TX/RX
//baud rate = Fosc / (16*(n+1))
//n = Fosc/((baud rate)*16) - 1
SPBRG = 25; //Gia tri ung voi baud rate = 9600, xtal 4 MHz
//SPBRGH khong can dung den
TRISC3 = 1; //configure PORTC<3> as input
TRISC4 = 1; //configure PORTC<4> as input
TRISB = 0; //make PORTB an output
//Set the slew rate and baud rate for 50 kHz operation
SMP = 1; //set for Standard speed slew rate
SSPADD = 19; //set the required baud rate (warning!)
//Configure as I2C master with Fosc/4 clock source
SSPM3 = 1; //set to I2C master mode with Fosc/4 clock source
SSPEN = 1; //Enable SDA and SCL pins to operate in I2C mode
SSPCON2 = 0; //ensure SSPCON2 is cleared
//Put '00000000' into variable cmd_byte.
//This is the read command that will be sent to the TC74
cmd_byte = 0x00;
while (1) {
// while(RCTF==0)
// C=RCREG;
// TXREG=c;
// while (TRMT==0)
SEN = 1; //Initiate a START condition
while (SEN); //
SSPBUF = 0x90; //send address of TC74 w/0 in the LSB (write action)
while (RW); //wait for write to complete
while (ACKSTAT); //Wait for ACK from TC74
while (TRMT == 0);
SSPBUF = cmd_byte; //send READ command
_delay(8);
while (RW);
//------------------
while (ACKSTAT); //Get ACK from TC74
while (TRMT == 0);
RSEN = 1; //send repeated start
while (RSEN);
SSPBUF = 0x91; //send TC74 address with READ bit set
_delay(8);
while (RW);
//------------------
while (ACKSTAT);
while (TRMT == 0); //Get ACK from TC74
RCEN = 1; //enable receive mode
while (RCEN); //wait until temperature data received
temp = SSPBUF;
//------------------
ACKDT = 1; //NACK
ACKEN = 1; //send NACK condition
while (ACKEN);
PEN = 1; //send STOP condition
while (PEN);
//------------------
// PORTB = temp;
// while (GODONE);
// temp = ADRESH;
//Gia su da co ket qua A/D
//Xoa bo dem ky tu
for (i = 0; i < 10; i++) buf[i] = 0;
//Chuyen doi tu unsigned char sang ky tu ASCII
utoa(buf, temp, 10);
i = 0;
while (buf[i] != 0) {
TXREG = buf[i];
i++;
while (TRMT == 0);
}
TXREG = '\n';
while (TRMT == 0);
TXREG = '\r';
for (i = 0; i < 10; i++) __delay_ms(100);
}
}
Header file i2c.h
#ifndef _I2C_H_
#define _I2C_H_
void i2c_start();
void i2c_stop();
void i2c_init();
unsigned char i2c_read(unsigned char ack);
unsigned char i2c_write(unsigned char d);
#endif
No comments:
Post a Comment