PIC学习 SPI模块部分

2019-04-15 11:57发布

PIC16F877A的SPI通信模块应用面很广,由于本人要进行ZIGBEE开发,所以么,SPI通信就得学啦! 这里涉及到了几个跟SPI通信有关的寄存器: SSPCON 同步串行端口控制寄存器 高                                                                                                   低 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 WCOL:写冲突检测位,软件清零 WCOL=1 前一个数据未完成发送,又有数据写入 WCOL=0 无冲突 SSPOV:接受溢出标志位 仅用于从动方式 SSPOV=1时SSPBUF中还有上次接受的数据,又接到新的数据 产生溢出 SSPSR中数据被丢失 SSPEN:同步串行端口使能位 SSPEN=1时,使能同步串行端口 RC3 RC4 RC5 被设定为SCK SDI SDA引脚 CKP:时钟极性选择(其实这个没有太大作用的) SSPM3~SSPM0:同步串行端口模式选择 这个么 我自己做了个表格 SSPM3~SSPM0 主控/从动 时钟 0000 主控 FOSC/4 0001 主控 FOSC/16 0010 主控 FOSC/64 0011 主控 TMR输出/2 0100 从动 SCK 0101 从动 SCK 同步串行端口状态寄存器 SSPSTAT 高                                             低 SMP CKE D/A P S R/W UA BF SMP:采样位 SMP=1 数据输入期间采样 SMP=0 数据输入完毕采样 (个人认为这个并不重要) 注:从动模式的时候SMP=0 CKE:SPI工作模式选择 CKP:与CKE组成4种情况 (不那么重要我就不写了) D/A P S R/W UA 与SPI无关 BF:缓冲区状态标志 用于接受数据 BF=0 没有接收数据 SSPBUF为空 BF=1 接收到了数据 SSPBUF为满   后来我借鉴了一下SPI初始化汇编程序 写了一段C语言程序 PICC下编译通过 #include "pic.h"
#include "pic1687x.h" void SPIinstall()
{
     PIR1=0;
     SSPCON=0x32;
     SSPSTAT=0xC0;
     TRISC=0x03;
} void SPISend(unsigned char Data_Send)
{
     SSPBUF=Data_Send;
     do
     {
                      ;
     }
     while(SSPIF==0);
     SSPIF=0x00;
} void main()
{
     SPIinstall();
     unsigned char Data;
     Data=1;
     SPISend(Data);
}   第一次写笔记 可能写的有点像流水账 呵呵