2652|0

20

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于c8051f020的spi通讯 [复制链接]

我用keil的模拟仿真,设置断点,看到的SPI0DAT 一直是0,程序还会卡住,卡到等待SPIF置1,一直动不了,求大神们帮忙看一下程序,
我想问的是我的spi编程的思路是不是错的,还有c8051f020的nss是直接自己会随着传数据改变还是得自己编程设置,



void main(void )
{

    Watchdog_Init ();                   // Disable the Watchdog Timer first
   Oscillator_Init ();
   PORT_Init ();
   SPI0_Init ();
   
   while(1)
   {
    lcdpoint1 = & NCDdata1;
    lcdpoint2 = & NCDdata2;
     Initialize_LCD();
    Display_LCD_String(1,lcdpoint1,10) ;
    ShowString(0,1,lcdpoint2,10)     ;
    DelayMS(50);
    SPIF = 0;
      
      SPI0DAT = NCDdata2[k]-0x30;
          DelayMS(10);
        while(SPIF ==0)    ;
        SPIF = 0;
      
      k++;
      if(k==10)    k=0;
   
    }
}

void Watchdog_Init (void)
{
   WDTCN     = 0xDE;                   // Disable the Watchdog Timer
   WDTCN     = 0xAD;
}


// This function initializes the system clock to use the internal oscillator
// at 16 MHz.
//
//-----------------------------------------------------------------------------
void Oscillator_Init (void)
{
   OSCICN = 0x05;                      //  // 系统时钟初始化为片内的 24.5MHz / 8
}


//
// P0.0  -  SCK  (SPI0), Push-Pull,  Digital
// P0.1  -  MISO (SPI0), Open-Drain, Digital
// P0.2  -  MOSI (SPI0), Push-Pull,  Digital
// P0.3  -  NSS  (SPI0), Open-Drain, Digital
//
// P0.7  -  SLAVE_SEL,   Push-Pull,  Digital

void PORT_Init (void)
{
   P0MDOUT = 0x0f;                     // Make SCK, MOSI, and SLAVE_SEL
                                       // push-pull
  // P1MDOUT = 0x40;                     // Make the LED push-pull

   XBR0 = 0x02;                        // Enable the SPI on the XBAR
   XBR2 = 0x40;                        // Enable the XBAR and weak pull-ups
   P2MDOUT  = 0xf0;                       // P2口设为推挽方式
     P3MDOUT = 0x00;
}


void SPI0_Init()
{
   SPI0CFG  = 0x07;                                  // SPI transmits 8 bits
   SPI0CN    = 0x03;                   // Master, SPI enabled

   // SPI clock frequency equation from the datasheet
   SPI0CKR   = (SYSCLK/(2*SPI_CLOCK))-1;

//  EIE1 |= 0x01;                       // Enable SPI interrupts
}
此帖出自51单片机论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表