PIC 通過SPI串口控制TC77溫度傳感器
/****PIC單片機(jī)通過SPI串口可以讀取TC77傳感器的溫度數(shù)值****/
/****通過串口與上位機(jī)連接在串口調(diào)試工具中可顯示溫度的數(shù)字值**/
/*****************主程序************************/
#include "p18f4620.h"
#define TC77_CS LATAbits.LATA2 //片選信號,低電平有效
//初始化
void initial()
{
INTCON = 0x00;
ADCON1 = 0x07;
PIE1 = 0;
PIE2 = 0;
}
//串口初始化
void EUSART_Init()
{
TXSTA = 0xA4;
RCSTA = 0x90;
BAUDCON =0x00;
TRISC = TRISC|0x80;
TRISC = TRISC&0xBF;
SPBRG = 25;
}
//發(fā)送數(shù)據(jù)到串口
void send_ch(int d)
{
PIR1bits.TXIF = 0;
TXREG = d;
while(TXSTAbits.TRMT == 0);
}
//SPI配置TC77
void TC77_init(void)
{
TRISCbits.TRISC3 = 0;
TRISCbits.TRISC4 = 1;
TRISAbits.TRISA2 = 0;
SSPSTAT = 0xC0;
SSPCON1 = 0x20;
PIR1bits.SSPIF = 0;
}
//讀TC77溫度傳感器
unsigned int Read_TC77(void)
{
unsigned char temh,teml;
unsigned int temp;
TC77_CS = 0; //片選TC77
PIR1bits.SSPIF = 0;
SSPBUF = 0; // 讀高8位
while(!PIR1bits.SSPIF);
if(SSPSTATbits.BF)
temh=SSPBUF;
PIR1bits.SSPIF = 0;
SSPBUF = 0;//讀低八位
while(!PIR1bits.SSPIF);
if(SSPSTATbits.BF)
teml=SSPBUF;
TC77_CS = 1;
temp = temh;
temp = (temp << 6)+(teml >> 2); //換算為十六位數(shù)據(jù)
return temp;
}
//延時函數(shù)
void wait(unsigned char t)
{
unsigned char i;
unsigned int j;
for(i=0;i
}
//主函數(shù)
void main()
{
unsigned int T;
initial();
EUSART_Init();
TC77_init();
while(1)
{
T = Read_TC77();
send_ch(0xFF);
send_ch(T);
send_ch(T >> 8);
Nop();
Nop();
wait(10);
}
}