SPI如何读取温湿度传感器

SPI如何读取温湿度传感器,第1张

看你用的是那种单片机和温度新片了,我用过Microchip公司的TC77温度芯片,百度上能找到它的资料,用软数或团件模拟SPI通信或直接用硬件SPI通信都可以,我用的是PIC18F4550单片机,用PICC进行编程:团唤

软件SPI通信程序:

#include "C:\sample\spi.h"

unsigned char rw_spi(unsigned char val)

{unsigned char Bit_counter

for(Bit_counter=8Bit_counter!=0Bit_counter--)

{output_low(pin_b1)

output_low(pin_b0)

if(val&0x80) output_high(pin_b0)

val<<=1

output_high(pin_b1)

if(input(pin_b0)) val|=1

}

output_low(pin_b1)

return val

}

void main()

{

unsigned char value

setup_adc_ports(NO_ANALOGS|VSS_VDD)

setup_adc(ADC_OFF)

setup_psp(PSP_DISABLED)

setup_spi(SPI_SS_DISABLED)

setup_wdt(WDT_OFF)

setup_timer_0(RTCC_INTERNAL)

setup_timer_1(T1_DISABLED)

setup_timer_2(T2_DISABLED,0,1)

setup_timer_3(T3_DISABLED|T3_DIV_BY_1)

setup_comparator(NC_NC_NC_NC)

setup_vref(FALSE)

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

// TODO: USER CODE!!

while(1)

{output_high(pin_b2)

output_high(pin_d0)

delay_ms(1000)

output_low(pin_d0)

delay_ms(1000)

output_low(pin_b2)

value=rw_spi(0x00)

putc(value)

value=rw_spi(0x00)

putc(value)

output_high(pin_b2)

delay_ms(10)

output_low(pin_b2)

rw_spi(0x00)

rw_spi(0x00)

}

}

硬件SPI程序:

#include "C:\sample\spifyt.h"

#int_SSP

#define EEPROM_ADDRESS BYTE

void SSP_isr(void)

{

}

void main(EEPROM_ADDRESS address)

{

int data=0

setup_adc_ports(NO_ANALOGS|VSS_VDD)

setup_adc(ADC_OFF)

setup_psp(PSP_DISABLED)

setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4)

setup_wdt(WDT_OFF)

setup_timer_0(RTCC_INTERNAL)

setup_timer_1(T1_DISABLED)

setup_timer_2(T2_DISABLED,0,1)

setup_comparator(NC_NC_NC_NC)

setup_vref(FALSE)

enable_interrupts(INT_SSP)

enable_interrupts(GLOBAL)

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

//薯橘 TODO: USER CODE!!

while(1){

delay_ms(2000)

output_low(pin_b2)

spi_write(0x9)

spi_write(0x80)

delay_ms(11)

spi_write(0x18)

spi_write(address)

data=spi_read(0)

putc(data)

delay_ms(20)

data=spi_read(0)

putc(data)

delay_ms(100)

output_high(pin_b2)

}

}

希望对你有用。。

没说是什么问题!

【1】HC595输出不对头?...解决办法:选罩如择了某位八段,要要延迟一段时间,大约1us这样的,以便保证SPI输出的数据的前沿在SPI_CS之后。另外一个产生错误的可能是“不断检测SPI_READY位”!建议不要接着检测,而是估计发送一个字节所花的时间,再考虑一个延迟。例如,发送一个字节为物埋启10us,则检测之前先延迟6us左右,再检测SPI_READY标志,不影响你的发送速率。这样做的原因是很多SPI核设计不是很好,还有可能是ARM7的IO速率与指令速率匹配。一个IO_R/W周期很长,而一个指令周期很短;

【2】位码不对?...................解决办法:严格检查PORT_DIR,保证引脚配置正确。

--------

长时间不鼓捣这东西了,具体液闷还得请你自己细致测验。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12375491.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存