stm8 读取电表芯片 att7053 io口模拟 spi
2015-10-08 15:09
369 查看
unsigned long SPI_Read( unsigned char address )
{
signed char
i;
unsigned long
temp_data;
temp_data = 0;
ATT7053_SCK_LOW; /* 确保CLK初始状态是 */
Delay1us( 1 );
ATT7053_CS_HIGH;
Delay1us( 2 );
ATT7053_CS_LOW;
Delay1us( 5 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
ATT7053_MOSI_LOW; /* 0表示主机向从机读数据 */
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
if ( (address & (0x01 << i) ) >> i )
ATT7053_MOSI_HIGH; /* address 地址从0x00到0x7F */
else
ATT7053_MOSI_LOW;
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 1 );
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
temp_data = temp_data | 1;
Delay1us( 1 );
for ( i = 0; i < 23; i++ )
{
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
miso_val = 1;
else
miso_val = 0;
temp_data = (temp_data << 1) | miso_val;
Delay1us( 1 );
}
ATT7053_CS_HIGH;
return(temp_data);
}
void SPI_Write( unsigned char address, unsigned int write_data )
{
signed char
i;
unsigned int
temp_data;
temp_data = 1;
ATT7053_SCK_LOW; /* 确保CLK初始状态是0 */
Delay1us( 100 );
ATT7053_CS_HIGH;
Delay1us( 50 );
ATT7053_CS_LOW;
Delay1us( 100 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
ATT7053_MOSI_HIGH; /* 1表示主机向从机写数据 */
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (address & (0x01 << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 40 );
for ( i = 23; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (write_data & (temp_data << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
ATT7053_CS_HIGH;
}
{
signed char
i;
unsigned long
temp_data;
temp_data = 0;
ATT7053_SCK_LOW; /* 确保CLK初始状态是 */
Delay1us( 1 );
ATT7053_CS_HIGH;
Delay1us( 2 );
ATT7053_CS_LOW;
Delay1us( 5 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
ATT7053_MOSI_LOW; /* 0表示主机向从机读数据 */
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
if ( (address & (0x01 << i) ) >> i )
ATT7053_MOSI_HIGH; /* address 地址从0x00到0x7F */
else
ATT7053_MOSI_LOW;
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 1 );
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
temp_data = temp_data | 1;
Delay1us( 1 );
for ( i = 0; i < 23; i++ )
{
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
miso_val = 1;
else
miso_val = 0;
temp_data = (temp_data << 1) | miso_val;
Delay1us( 1 );
}
ATT7053_CS_HIGH;
return(temp_data);
}
void SPI_Write( unsigned char address, unsigned int write_data )
{
signed char
i;
unsigned int
temp_data;
temp_data = 1;
ATT7053_SCK_LOW; /* 确保CLK初始状态是0 */
Delay1us( 100 );
ATT7053_CS_HIGH;
Delay1us( 50 );
ATT7053_CS_LOW;
Delay1us( 100 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
ATT7053_MOSI_HIGH; /* 1表示主机向从机写数据 */
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (address & (0x01 << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 40 );
for ( i = 23; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (write_data & (temp_data << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
ATT7053_CS_HIGH;
}
相关文章推荐
- opencv第一次成功人脸检测(初级)
- Jenkins CI持续集成(基于Git)
- hdu 1061 Rightmost Digit
- 算法导论12.4随机构建二叉搜索树 练习总结
- arc和mrc混用
- ios开发——日常之在Xcode6 后如何创建类目和延展(category&extension&protocol)
- .net在linux下部署项目
- qt入门小程序
- 数据输入控件使用简介
- iOS开发--点击屏幕获得屏幕坐标
- Sichuan Province 2012 F Fold The Paper
- stm8 io口 spi模拟,可用于RC522
- 面试题151-175
- 如何将APP安装包发布到360手机助手上
- C# 自定义拓展方法(this修饰符)
- iOS﹣ Autolayout NSLayoutConstraint
- 深入理解Android之Gradle
- css透明度
- 关于 iOS 中两个时间实现联动的解决方案
- javascript之,深扒typeof,instanceof操作符