你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
查看全部评分
xiajintaord 发表于 2018-8-10 17:25 http://www.sublimetext.com/
simulate_spi.rar
2018-8-14 15:17 上传
点击文件名下载附件
895 Bytes, 下载次数: 80, 下载积分: ST金币 -1
Your UAT Feedback is needed within today.
5.18活动板子会不会是STM32L4呢
STM32隐藏
STM32 CUBE软件中找不到STM32L4系列单片机
应用
AAA
tiwen
BBBB
aaa
2222
#include<reg52.h>
//---------------------------------------------------------
#define uchar unsigned char
#define SDA P3_6
#define SCL P3_7
//-----------------------------------------------------------------------
void delay_100us();
void delay_1s();
void i2c_start();
void i2c_stop();
void get_ack();
void i2c_send_byte(uchar mydata);
void i2c_write_byte(uchar dev_addr_wr,uchar word_addr,uchar mydata);
uchar i2c_read_byte(uchar dev_addr_wr,uchar dev_addr2_rd,uchar word_addr);
//------------------------------------------------------------------------
/*void main()
{
uchar temp;
while(1)
{
i2c_write_byte(0xa2,0x00,0x00);
temp=i2c_read_byte(0xa2,0xa3,0x02);
delay_1s();
P1= temp;
}
}*/
//----------------------------------------- //here are the functions
void delay_100us()
{
unsigned char i;
for(i=5;i>0;i--)
{;}
}
//-----------------------------------------
void delay_1s()
{
unsigned char i,j,k;
for(i=100;i>0;i--)
for(j=50;j>0;j--)
for(k=100;k>0;k--)
{;}
}
//------------------------------------------
void i2c_start()
{
SCL=0;
delay_100us();
SDA=1; //a falling edge of sda when scl is high
delay_100us();
SCL=1;
delay_100us();
SDA=0;
delay_100us();
SCL=0; //keep the SDA and SCL low;
delay_100us();
}
//---------------------------------------
void i2c_stop()
{
SCL=0; //a upper edge of sda when scl is high
delay_100us();
SDA=0;
delay_100us();
SCL=1;
delay_100us();
SDA=1;
delay_100us();
SDA=0;
delay_100us();
SCL=0; //keep the SDA and SCL low;
}
//---------------------------------------
void get_ack()
{
do
{
SCL=0;
delay_100us();
SDA=1;
delay_100us();
SCL=1;
delay_100us();
}
while(SDA);
}
//----------------------------------------
void i2c_send_byte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
SCL=0;
delay_100us();
SDA=byte&0x80;
delay_100us();
SCL=1;
delay_100us();
SCL=0;
delay_100us();
byte=byte<<1;
}
get_ack();
}
//----------------------------------------
void i2c_write_byte(uchar dev_addr_wr,uchar word_addr,uchar mydata)
{
i2c_start();
i2c_send_byte(dev_addr_wr);
i2c_send_byte(word_addr);
i2c_send_byte(mydata);
i2c_stop();
}
//----------------------------------------
uchar i2c_read_byte(uchar dev_addr_wr,uchar dev_addr_rd,uchar word_addr)
{
uchar temp,i;
temp=0xff;
//---------------
i2c_start();
i2c_send_byte(dev_addr_wr);
i2c_send_byte(word_addr);
i2c_stop(); //inital the address of device and word
//-------------------------------------------------------------------------
i2c_start();
i2c_send_byte(dev_addr_rd);
for(i=0;i<8;i++)
{
SCL=0;
delay_100us();
SDA=1;
delay_100us();
SCL=1;
delay_100us();
if(SDA)
{
temp|=0x01;
}
else
{
temp&=0xfe;
}
delay_100us();
SCL=0;
delay_100us();
temp=temp<<1;
}
SCL=0;
SDA=1;
SCL=1;
SCL=0; //read data from device
//-----------------------------------------------------------------------
i2c_stop(); //stop the device
return temp;
}
评分
查看全部评分
嗯谢谢你 这个配色对眼睛好
00 01工作模式的模拟 SPI 已经调试完成了,都在下面的附件里面;
大家基本上用的都是硬件的 SPI,但有时候受限于成本,硬件资源不足的情况下,像 IIC 一样软件模拟的 SPI 也是一个不错的选择啊。
仅仅是修改部分代码,主要是针对 SCLK 时序,要理解 SPI 在不同的工作模式下的数据收发时序;
00 01工作模式的模拟 SPI 已经调试完成了,都在下面的附件里面;
大家基本上用的都是硬件的 SPI,但有时候受限于成本,硬件资源不足的情况下,像 IIC 一样软件模拟的 SPI 也是一个不错的选择啊。
仅仅是修改部分代码,主要是针对 SCLK 时序,要理解 SPI 在不同的工作模式下的数据收发时序;
simulate_spi.rar
2018-8-14 15:17 上传
点击文件名下载附件
下载积分: ST金币 -1895 Bytes, 下载次数: 80, 下载积分: ST金币 -1
评分
查看全部评分