4223|3

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STC15F2K60S2 调试spi出现的问题 [复制链接]

   //芯片的工作频率为11.0592MHz
#include "STC15F2K60S2.h"
#include "intrins.h"
#define  BYTE unsigned char   
#define  WORD unsigned int
#define S1_S0 0x40              //P_SW P3.0 RXD P3.1 TXD
#define S1_S1 0x80         

#define SPIF        0x80        //SPSTAT.7  传输完成标志                              
#define WCOL        0x40        //SPSTAT.6  写冲突标志
#define SSIG        0x80        //SPCTL.7                                 
#define SPEN        0x40        //SPCTL.6                                 
#define DORD        0x20        //SPCTL.5                                 
#define MSTR        0x10        //SPCTL.4                                 
#define CPOL        0x08        //SPCTL.3                                 
#define CAHA        0x04        //SPCTL.2                                 
#define SPDHH       0x00        //CPU_CLK/4                              
#define SPDH        0x01        //CPU_CLK/16                              
#define SPDL        0x02        //CPU_CLK/64                              
#define SPDLL       0x03        //CPU_CLK/128  
   
void UartInit();      //MCU 串口1初始化
void InitSPI();       //MCU SPI初始化

void delay50us();  //延时函数 50us

///////////////////////////////////////////////////////////
void main()
{
        
delay50us();     //延时等待外围器件稳定
UartInit();                 //初始化串口
InitSPI();                  //初始化SPI   
SPDAT = 0X66;
     while (!RI);     //查询串口标志位
     RI=0;
  SBUF = SPDAT;
   
}   

///////////////////////////////////////////////////////////
//*********SPI初始化********///
void InitSPI()
{
    SPCTL = SPEN|MSTR; //0xdf 使能SPI,MSB先发送,主机,SCK空闲高,128分频
SPDAT = 0X66;                  //初始化SPI数据
    SPSTAT = SPIF | WCOL;       //清除SPI状态位
   
}

  void UartInit()  //9600bps@11.0592MHz
{
ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
    P_SW1 = ACC;    //P3.0 RXD P3.1 TXD
PCON &= 0x7F;  //波特率不倍速
SCON = 0x50;  //8位数据,可变波特率
AUXR |= 0x40;  //定时器1时钟为Fosc,即1T
AUXR &= 0xFE;  //串口1选择定时器1为波特率发生器
TMOD &= 0x0F;  //清除定时器1模式位
TMOD |= 0x20;  //设定定时器1为8位自动重装方式
TL1 = 0xDC;      //设定定时初值
TH1 = 0xDC;     //设定定时器重装值
ET1 = 0;    //禁止定时器1中断
TR1 = 1;      //启动定时器1

//ES = 1;             //使能串口中断
    //EA = 1;
}
void delay50us()
{
  BYTE i, j;
_nop_();
i = 1;
j = 134;
do
{
  while (--j);
} while (--i);
}

此帖出自单片机论坛

最新回复

参考一下ADI的代码,他们好像是模拟的SPI。  详情 回复 发表于 2015-4-16 12:29
点赞 关注
 

回复
举报

30

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
求助各位TX 小弟最近选用stc15做一个小项目,用到AD7705,但始终没调通,感觉spi总线没工作一样,就写了这段小程序,目的是想通过串口调试助手让下位机返回 SPDAT 这个寄存器里的值, 但是收到的确实"00” ,而不是我想象中的 "0X66"喃,还望指点,谢谢!
此帖出自单片机论坛
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
参考一下ADI的代码,他们好像是模拟的SPI。
此帖出自单片机论坛
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

4
 
jishuaihu 发表于 2015-4-16 12:29
参考一下ADI的代码,他们好像是模拟的SPI。

谢谢 我看一下
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表