当前位置:文档之家› IO口模拟SPI接口

IO口模拟SPI接口

//头文件
#include
#include

/*********************************************
模拟SPI接口I/O定义
*********************************************/
sbit CS =P3^2; //片选信号 (输入)
sbit SCK =P3^3; //时钟信号 (输入)
sbit MISO=P3^4; //主站输入 从站输出 (输出)
sbit MOSI=P3^5; //主站输出 从站输入 (输入)

#define SET_CS() CS=1 //片选信号置高
#define RESET_CS() CS=0 //片选信号置低
#define SET_SCK() SCK=1 //时钟信号置高
#define RESET_SCK() SCK=0 //时钟信号置低

//自定义变量
unsigned char spi_flag=0,SPI_Data=0;

//自定义函数
extern void Usart_Send(unsigned char Data);

/************************************************************************
程序描述:系统初始化程序
*******************************************************************************/
void System_Init()
{
//串口参数初始化
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3; //baud*2 4800、数据位8、停止位1、效验位无 (12M)
TL1 = 0xF3;
TR1 = 1; //允许定时器1计数
ES = 1; //开串口中断*/

//定时器0初始化
TMOD|= 0x01; //定时器工作方式1
TH0 = 0xFC; //1ms
TL0 = 0x18;
TR0 = 1; //允许定时器0计数
ET0 = 1; //开定时器0中断

IP=0x03; //设置定时器0中断高优先级

//IT1=0; //低电平触发
IT1=1; //下降沿触发
//EX1=1; //外部中断1允许

EA=1; //开总中断


}

/************************************************************************
程序描述:模拟SPI通信主程序
*******************************************************************************/
main()
{

System_Init();

while(1)
{


/*if(MOSI==1)
Usart_Send(0x01);
else
Usart_Send(0x00);*/


}
}

/************************************************************************
程序描述:定时器0中断程序
*******************************************************************************/
void T0_inter(void) interrupt 1
{
TH0 = 0xFC; //1ms
TL0 = 0x18;

if(CS==0)
{
EX1=1;
//Usart_Send(0xbb);
}

if(CS==1)
{
EX1=0;
//Usart_Send(SPI_Data);
}

}

/************************************************************************
程序描述:外部中断0服务程序
*******************************************************************************/
void ExINT1_Interrupt(void) interrupt 2 using 0
{
SPI_Data = SPI_Data<<1;

if(MOSI==1)
{
SPI_Data |= 0x01;
//Usart_Send(0x01);
}
else
{
SPI_Data

&= ~0x01;
//Usart_Send(0x00);
}

spi_flag++;

if(spi_flag==8)
{
spi_flag=0;
Usart_Send(SPI_Data);
SPI_Data=0;
}
}

相关主题
文本预览
相关文档 最新文档