#include "H/Function_Init.H" void SPI1_Init(void); bit Uart1SendFlag = 0; //Uart1发送中断标志位 bit Uart1ReceiveFlag = 0; //Uart1接收中断标志位 bit SPI1Flag = 0; //SPI1数据传输完成标志位 bit TWI1Flag = 0; //TWI1中断标志位 /***************************************************** *函数名称:void USCI1_Test(void) *函数功能:USCI1测试 *入口参数:void *出口参数:void *****************************************************/ void USCI1_Test(void) { SPI1_Init(); while(1) { US1CON2 = 0xAA; while(!SPI1Flag); SPI1Flag = 0; Delay(1000); } } /***************************************************** *函数名称:void SPI1_Init(void) *函数功能:SPI1初始化 *入口参数:void *出口参数:void *****************************************************/ void SPI1_Init(void) { OTCON |= 0X40; //选择SPI1模式 US1CON0 = 0x3F; //设置SPI1为主设备,SCK空闲时间为高电平,SCK周期第二沿采集数据,时钟速率为Fsys/128 US1CON1 = 0x01; //MSB优先发送,8位传输,允许发送中断 US1CON0 |= 0x80; //开启SPI1 IE2 |= 0x01; EA = 1; } /***************************************************** *函数名称:void TWI1/PI/UART1_Int() interrupt 7 *函数功能:USCI1中断函数 *入口参数:void *出口参数:void *****************************************************/ #if (USCI1_Mode == SPI1) void Spi1_Int(void) interrupt 15 //SPI1中断函数 { if(US1CON1&0X08) //发送缓存器空标志判断 { US1CON1 &= ~0X08; } if(US1CON1&0X80) //数据传输标志位判断 { US1CON1 &= ~0X80; SPI1Flag = 1; } } #endif