资源简介
程序分为两部分,其中
Master:该文件夹为SPI主模式程序,采用PIC18F4685单片机,内部晶振8M,使能内部4倍锁向环,FOSC=32M,编译器 MCC 3.42
Slave:该文件夹为SPI从模式程序,采用PIC16F883单片机,内部晶振8M,编译器 XC8 V1.11
代码片段和文件信息
#include “config.h“
#include “main.h“
#include “cpu.h“
#include
#pragma code high_vector=0x08
void interrupt_at_high_vector()
{
_asm
goto HighISR
_endasm
}
#pragma code
#pragma code low_vector=0x18
void interrupt_at_low_vector()
{
_asm
goto LowISR
_endasm
}
#pragma code
//低中断处理函数
#pragma interruptlow LowISR
void LowISR()
{
}
//高中断处理函数
#pragma interrupt HighISR
void HighISR()
{
if(INTCONbits.TMR0IF)
{
INTCONbits.TMR0IF=0;
b100msFlg=1;
}
}
void Timer0Init()// 100ms
{
T0CON=0x82;//16位8分频
INTCON2bits.TMR0IP=1;//低中断优先级
TMR0L=(unsigned char)T0COUNT;
TMR0H=(unsigned char)(T0COUNT>>8);
INTCONbits.TMR0IE=1;
INTCONbits.TMR0IF=0;
}
void SpiMasterInit()
{
SPI_SDO_TRIS=0;
SPI_SDI_TRIS=1;
SPI_CS_TRIS=0;
SPI_SCL_TRIS=0;
SPI_CS=1;//禁止从机
SSPSTAT=0;
SSPSTATbits.SMP=1;//1 = 在数据输出时间的末端采样输入数据
SSPSTATbits.CKE=0;//0 = 当时钟状态从空闲变为有效时进行发送1 = 当时钟状态从有效变为空闲时进行发送
SSPCON1=0x22;//SCK空闲时为低电平,主控模式,时钟=FOSC/64=500Kbps
}
void TargetInit()
{
unsigned char i;
//端口初始化
OSCCON=0B01110000;//8M内部OSC
OSCTUNE=0b11000000;//使能4xPLL,系统时钟=8*4=32MT=0.125us
INTCON2bits.NOT_RBPU=1;//禁止上拉
RCONbits.IPEN=1;//使能高低中断优先级
Timer0Init();
SpiMasterInit();
}
void SpiReadiWrite(unsigned char nCmd)
{
unsigned char TempVarinLen;
TempVar=SSPBUF; //清BF
PIR1bits.SSPIF = 0;
SSPCON1bits.WCOL = 0; //清WCOL
switch(nCmd)
{
case READ_CMD_00:nLen=1;break;
case READ_CMD_01:nLen=2;break;
case READ_CMD_02:nLen=3;break;
case READ_CMD_03:nLen=4;break;
case WRITE_CMD_00:nLen=1;break;
case WRITE_CMD_01:nLen=2;break;
case WRITE_CMD_02:nLen=3;break;
case WRITE_CMD_03:nLen=4;break;
}
//写命令
SPI_CS=0;
Delay10TCYx(10); //必须要延时,以使从机的SPI模块稳定
SSPBUF=nCmd;
while( !PIR1bits.SSPIF)
;
PIR1bits.SSPIF=0;
TempVar = SSPBUF; // Clears BF
Delay10TCYx(10);//125us
//开始读、写数据
while(nLen--)
{
if(nCmd&0x80)//写
SSPBUF=*(nSendBuf+nLen);
else
SSPBUF=0x55; //任意数据都可以,只是为了产生时钟脉冲
while( !PIR1bits.SSPIF)
;
PIR1bits.SSPIF=0;
if(nCmd<0x80)//读
*(nReceiveBuf+nLen)= SSPBUF;
Delay10TCYx(10);//125us
}
SPI_CS=1;
}
void main()
{
INTCON=0;
TargetInit();
INTCON|=0xC0;
nSendBuf[0]=0xAA;
nSendBuf[1]=0xBB;
nSendBuf[2]=0xCC;
nSendBuf[3]=0xDD;
while(1)
{
if(b100msFlg)
{
// SpiReadiWrite(READ_CMD_00);//返回0xAA
// SpiReadiWrite(READ_CMD_01);//返回0xBBAA
// SpiReadiWrite(READ_CMD_02);//返回0xCCBBAA
SpiReadiWrite(READ_CMD_03);//返回0xDDCCBBAA
//
// SpiReadiWrite(WRITE_CMD_00);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-11-23 16:06 PIC SPI主从通迅\
目录 0 2012-11-23 16:00 PIC SPI主从通迅\Master\
文件 2583 2012-11-14 13:40 PIC SPI主从通迅\Master\18f4685.lkr
文件 4653 2012-10-27 14:42 PIC SPI主从通迅\Master\config.h
文件 508 2012-11-20 15:36 PIC SPI主从通迅\Master\cpu.h
文件 3401 2012-11-23 15:58 PIC SPI主从通迅\Master\main.c
文件 786 2012-11-23 14:28 PIC SPI主从通迅\Master\main.h
文件 12720 2012-11-23 16:00 PIC SPI主从通迅\Master\main.o
文件 38094 2012-11-23 16:00 PIC SPI主从通迅\Master\master.cof
文件 2516 2012-11-23 16:00 PIC SPI主从通迅\Master\master.hex
文件 245662 2012-11-23 16:00 PIC SPI主从通迅\Master\master.map
文件 1755 2012-11-23 16:00 PIC SPI主从通迅\Master\master.mcp
文件 2064 2012-11-23 16:00 PIC SPI主从通迅\Master\master.mcs
文件 1836544 2012-11-23 16:00 PIC SPI主从通迅\Master\master.mcw
文件 3191 2012-11-23 15:54 PIC SPI主从通迅\Master\master.mptags
文件 141 2012-11-23 15:54 PIC SPI主从通迅\Master\master.tagsrc
目录 0 2012-11-23 16:03 PIC SPI主从通迅\Slave\
文件 642 2012-11-23 15:45 PIC SPI主从通迅\Slave\cpu.h
文件 175 2012-11-23 16:02 PIC SPI主从通迅\Slave\funclist
文件 3864 2012-11-23 15:46 PIC SPI主从通迅\Slave\main.c
文件 116 2012-11-23 16:02 PIC SPI主从通迅\Slave\main.d
文件 969 2012-11-23 15:24 PIC SPI主从通迅\Slave\main.h
文件 83601 2012-11-23 16:02 PIC SPI主从通迅\Slave\main.p1
文件 44759 2012-11-23 16:02 PIC SPI主从通迅\Slave\main.pre
文件 35890 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.as
文件 16398 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.cof
文件 1958 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.hex
文件 1395 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.hxl
文件 91025 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.lst
文件 17617 2012-11-23 16:02 PIC SPI主从通迅\Slave\slave.map
文件 1026 2012-11-23 16:03 PIC SPI主从通迅\Slave\slave.mcp
............此处省略11个文件信息
- 上一篇:STC15单片机ADC
- 下一篇:STK9.0.lic
相关资源
- Winsock2 SPI网络封包截获技术
- Proteus仿真:arduino通过SPI驱动lcd1602(
- dsPIC30F 在无传感器BLDC 控制中的应用
- 在对话框中放置一个Picture控件,拖动
- 网易新闻apicloud源码
- pic io口模拟iic的mcp7940代码
- stm32f103系列spi连接rc522的rfid读卡程序
- PIC单片机433遥控软件解码
- orCADPspice9.1仿真软件汉化补丁包.rar
- ICM20602数据读取及初始化配置
- pic16f690串口实验,成功
- RT1052 QSPI 驱动代码
- 自己设计的d触发器hspice代码,利用传
- Qt spi测试
- LINUX 串口与SPI操作
- SPI 读写SD卡 程序可以直接使用
- ColorPicker 颜色选择器依赖库
- PIC单片机 18B20温度传感器和六位数码
- ExampleCode_RDC_AD2S1210官方例程内含模拟
- spi测试程序,适合初学者
- AVR ATMEGA16 SPI双机通信的PROTEUS仿真 双
- VCSEL激光器的Pspice模型文件
- spiflash 驱动代码
- ad7794_spi操作源文件
- ADXL345 STM32 SPI 代码亲测可用
- 图像压缩,使用SPIHT算法进行图像压缩
- PIC串口发送接收多字节
- PIC单片机uart通信
- PIC 单片机软件模拟串口
- Auto Spice CMMI 26262差异对比
评论
共有 条评论