
软件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,保证引脚配置正确。
--------
长时间不鼓捣这东西了,具体液闷还得请你自己细致测验。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)