با سلام و دورد
من خودم قبلا باهاش کار نکردم ولی کد زیر را برای PIC دیدم.
به تنظمیات SPI کد دقت کنید .
لازم نیست همه جا CS را LOW کنید و دوباره High
همچنین مقدار spi که float نیست شما در sprintf نوع را f انتخاب کردین اگر هم لازم بود اعداد اعشاری بنویسید از قسمت کانفیگ کدویژن sprintf را روی float تنظیم کنید.
قسمت های اضافی کد زیر را در نظر نگیرید ولی آخرای کد را بیتشر دقت کنید با قسمت کانفیگ .
اگر نتونستید اطلاع بدید خودم بنویسم بفرستم.
کد زیر برای16F876A هست:
#include <16F876A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define clk pin_c3 // set pin clock is using
#define din pin_c5 // set pin data in is using
#define cs pin_b2 // set pin load/cs is using
int16 temp1;
void main()
{
output_low(clk); // set clk line low
delay_us(1);
output_low(din); // set data line in low
delay_us(1);
output_low(cs); // set load/cs line high
delay_us(1);
setup_adc_ports(NO_ANALOGS);
// Configure TC72 temperature sensor
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_XMIT_L_TO_H | SPI_CLK_DIV_16);
while(1)
{
output_high(cs); // set cs line high
delay_us(1);
spi_write(0x80); // Write Address
delay_us(1);
spi_write(0x00); // Continuous mode
delay_ms(150); // Delay 150ms to let it complete conversion
spi_write(0x02); // Point to MSB temp register
delay_us(1);
temp1=spi_read(0); // read temp
delay_us(1);
output_low(cs);
printf("Temperature is: %lu\n\r",temp1);
}
}