资源简介

程序分为两部分,其中 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个文件信息

评论

共有 条评论