//------------------------------------------------- ini SPI
SSPCON1bits.SSPEN = 0 ; //disable SPI
SSPCON1 =0x31 ; //SPI Master, Idle high, Fosc/16 空闲状态时,时钟为高电平
SSPCON1bits.SSPEN = 1 ; // enable SPI
SSPSTATbits.CKE = 1; //1 = 当时钟从有效状态转换到空闲状态时开始发送
SSPSTATbits.SMP = 1; //1 = 在数据输出时间的末端采样输入数据
TRISCbits.TRISC5 = 0; // SDO
TRISCbits.TRISC3 = 0; // SCK
TRISCbits.TRISC4 = 1; // SDI
PIR1bits.SSPIF = 0 ; // clear interrupt flag
PIE1bits.SSPIE =1 ; // SSP int enable (BANK 1)
IPR1bits.SSPIP = 1; //High priority
//------------------------------------------------------------------------
// High priority interrupt routine */
#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
if(PIR1bits.SSPIF)
{
PIR1bits.SSPIF = 0;
RxDataBuf[PSIcnt++] = SSPBUF;
if (PSIcnt < 8) // 如果发了8个,退出,不再发
SSPBUF = TxDataBuf[PSIcnt++];
}
}
//**************************************************************
//spi ini
SSPCON1bits.SSPEN = 0 ; //disable SPI
SSPCON1 =0x32 ; //SPI Master, Idle high, Fosc/16 空闲状态时,时钟为高电平
SSPCON1bits.SSPEN = 1 ; // enable SPI
SSPSTATbits.CKE = 1; //1 = 当时钟从有效状态转换到空闲状态时开始发送
SSPSTATbits.SMP = 1; //1 = 在数据输出时间的末端采样输入数据
TRISCbits.TRISC5 = 0; // SDO
TRISCbits.TRISC3 = 0; // SCK
TRISCbits.TRISC4 = 1; // SDI
PIR1bits.SSPIF = 0 ; // clear interrupt flag
// PIE1bits.SSPIE =1 ; // SSP int enable (BANK 1)
IPR1bits.SSPIP = 1; //High priority
#include "p18f4520.h"
#include "main.h"
#include "delays.h"
#include "interrupt.h"
//********************************主函数************************************* 不用中断 测试
#pragma code
void
main ()
{
unsigned char i,j;
Initialization(); //系统初始化
SSPBUF = 0x66;
j= 0;
while(1)
{
if(PIR1bits.SSPIF)
{
PIR1bits.SSPIF = 0;
i=SSPBUF;
j++;
SSPBUF = j;
}
Nop();
}
}
文章评论(0条评论)
登录后参与讨论