#include <pic.h>
#include<string.h>
#include<STDIO.H>
__CONFIG(0x3F32); //晶片配置字 選擇HS模式振蕩器,關WDT
typedef unsigned char uchar;
typedef unsigned int uint;
uchar resive=0;
uchar resive1=0;
uchar send_buf[16]={'S',0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xc,0xD,0xe,0xf};
uchar send_num=0;
uchar resive_flag=0;
#define CS RA5
uchar spi_data_buf;
//函數名稱:delay_ms
//函數功能:軟體延時T*ms
//傳回值:無
void delay_ms(uint T) //機關時間Tms延時
{
uchar time;
while(T--)
for(time=0;time<250;time++);
}
/
//序列槽初始化
void UART_INT()
{
PIR1|=0x30;
SYNC=0;
SPEN=1;
RCIE=1;
CREN=1;
TXIE=1;
TXEN=1;
BRGH=1;
RCIF=0;
RX9=0;
TX9=0;
SPBRG=0X19;//異步接收 波特率9600
TRISC7=1;
TRISC6=0;
}
//函數名稱:SPI_INIT
//函數功能:SPI初始化 作為從機
//傳回值:無
void SPI_INIT()
{
PIR1|=0x08; //SPI中斷使能
TRISC3=1; // SCK 輸入
TRISC4=1; // SDI 輸入
TRISC5=0; // SDO 輸出
TRISA5=1; // SS 輸入
SSPBUF=0x00;
SSPCON=0x34; // SSPEN CKP SSPM 0100
SSPIE=1;
SSPIF=0;
}
//函數名稱:spi_send_byte()
//函數功能:SPI發送資料
//傳回值:無
void spi_send_byte(unsigned char byte)
{
SSPBUF = byte;
while(BF==0); //等待發送完畢
SSPIF = 0;
}
void main()
{
SPI_INIT();//SPI初始化
UART_INT();
INTCON|=0xC0; //從模式時候打開
while(1)
{
uart_send(resive1);
delay_ms(1000);
uart_send(resive);
//uart_send(resive_buf);
delay_ms(1000);
}
}
void interrupt isr(void)
{
if(SSPIF==1)
{
SSPIF=0;
resive=SSPBUF;
if((resive)==0x05 && (resive_flag==0))
{
resive_flag=1;
SSPBUF=send_buf[send_num];
send_num++;
if(send_num>15)
{
send_num=0;
}
}
else
{
SSPBUF=0X55;
}
WCOL=0;
}
else if(RCIF)
{
RCIF=0;
resive1=RCREG;
}
else if(TXIF&&TXIE)
{
TXIE = 0;
}
}