📄 i2c+spi.c
字号:
#include "i2c+spi.h"
// this file includes software I2C and SPI procedures for reading and writing...
// note the TRIS change in mp3_i2cRead()
void mp3_i2cStart() {
set_tris_c(TRIS_C_I2CSEND);
output_high(I2C_SDA);
nop; nop;
output_high(I2C_SCL);
delay_us(3);
output_low(I2C_SDA);
delay_us(3);
output_low(I2C_SCL);
}
void mp3_i2cStop() {
set_tris_c(TRIS_C_I2CSEND);
output_low(I2C_SDA);
nop; nop;
output_high(I2C_SCL);
delay_us(3);
output_high(I2C_SDA);
delay_us(3);
}
byte mp3_i2cRead() {
int i;
byte data = 0;
set_tris_c(TRIS_C_I2CRECV);
for (i=0; i<8; i++) {
output_high(I2C_SCL);
delay_us(3);
data <<= 1;
data |= input(I2C_SDA);
output_low(I2C_SCL);
delay_us(3);
}
set_tris_c(TRIS_C_I2CSEND);
output_low(I2C_SDA);
nop; nop;
output_high(I2C_SCL);
delay_us(3);
output_low(I2C_SCL);
//printf("got 0x%x ", data);
return data;
}
boolean mp3_i2cWrite(byte data) {
signed int i;
set_tris_c(TRIS_C_I2CSEND);
for (i=7; i>=0; i--) {
output_bit(I2C_SDA, bit_test(data, i));
delay_us(3);
output_high(I2C_SCL);
delay_us(3);
output_low(I2C_SCL);
delay_us(3);
}
i = -1;
set_tris_c(TRIS_C_I2CRECV);
output_high(I2C_SCL);
while (input(I2C_SDA) && i != 0) { nop; nop; i--; }
output_low(I2C_SCL);
if (i == 0) { return 0; }
return 1;
}
/***************************************************************/
boolean mp3_spiwrite(byte data) {
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 7));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 6));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 5));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 4));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 3));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 2));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 1));
output_high(SPI_CLK);
nop; nop; nop;
output_low(SPI_CLK);
output_bit(SPI_SDO, bit_test(data, 0));
output_high(SPI_CLK);
nop; nop; nop;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -