資源簡介
程序分為兩部分,其中
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
評論
共有 條評論