IO口模拟SPI

本文介绍了一种使用C51单片机通过I/O口模拟SPI总线的操作方法,包括SPI初始化、写入及读取数据的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO口模拟SPI 

******************************************************************************* 

模块名称: spi.h 

模块说明: c51单片机的i/o模拟spi操作 


创建时间: 2008/11/25 

创建者: 



********************************************************************************/ 


#ifndef SPI_H 

#define SPI_H 




sbit SPIS_N = P2^1; 

sbit SPIC = P2^3; 

sbit SPID = P2^2; 

sbit SPIQ = P2^4; 


extern void spi_reset(); 

extern void spi_write(unsigned char spi_bValue); 

extern unsigned char spi_read(); 



#endif 

/******************************************************************************* 

模块名称: spi.c 

模块说明: c51单片机的i/o模拟spi操作 


创建时间: 2008/11/25 

创建者: 

********************************************************************************/ 


#include "includes.h" 


#define set_spi_cs() SPIS_N =1 

#define clr_spi_cs() SPIS_N =0 

#define set_spi_clk() SPIC =1 

#define clr_spi_clk() SPIC =0 

#define set_spi_di() SPID =1 

#define clr_spi_di() SPID =0 

#define read_spi_do() SPIQ 




//------------------------------------------ 

void spi_reset() 

{ 

set_spi_cs(); 

} 

//----------------------------------------- 

void spi_write(unsigned char spi_bValue) 

{ 

unsigned char no; 


clr_spi_cs(); 


for (no=0;no<8;no++) 

{ 

clr_spi_clk(); 


if ((spi_bValue &0x80)==0x80) 

set_spi_di(); 

else 

clr_spi_di(); 


set_spi_clk(); 


spi_bValue = (spi_bValue <<1); 

} 

} 

//---------------------------------------------- 

unsigned char spi_read() 

{ 

unsigned char no,spi_bValue; 


clr_spi_cs(); 


for (no=0;no<8;no++) 

{ 

clr_spi_clk(); 


spi_bValue = (spi_bValue <<1); 


set_spi_clk(); 


if (read_spi_do() ==1) 

spi_bValue |=0x01; 

else 

spi_bValue &=~0x01; 


} 


return spi_bValue; 

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值