⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usarts.c

📁 一个基于AD9954的430单片机编程
💻 C
字号:
/*-----------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------*/
#include  "includes.h"

/*-----------------------------------------------------------------------------------------------------
变量
-----------------------------------------------------------------------------------------------------*/
#if SPI0_EN
char SPI0SendDat[256];                         //发送的数据
char SPI0Sendn;                                //记录发送到数据所在的位置
char SPI0Datn;                                 //记录所存放数据的最后一个加1,构成循环队列
#endif

#if SPI1_EN
char SPI1SendDat[256];                         //发送的数据
char SPI1Sendn;                                //记录发送到数据所在的位置
char SPI1Datn;                                 //记录所存放数据的最后一个加1,构成循环队列
#endif

#if SPI0_EN
/*-----------------------------------------------------------------------------------------------------
功能:初始化USART0工作在SPI方式
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
void InitSPI0(void)
{
#if SPI0_ADD_EN
  SPI0_ADD_PORT_DIR=0xFF;
#endif
  SPI0Sendn=0;
  SPI0Datn=0;
  P3DIR|=0x0E;
  P3SEL|=0x0E;
  U0CTL= CHAR | SYNC | MM & ~SWRST ;                    //8位数据,SPI方式,主方式,清除重置位
  U0TCTL|= CKPH | SSEL0 | STC ;                          //__|- 的相位和极性,ACLK时钟源,3pin模式
  U0BR0=0x02;                                           //波特率为BRCLK的1/2      
  U0BR1=0;                                              
  ME1|=USPIE0;                                          //使能该模块
//  IE1=UTXIE0;                                           //允许发送中断,放在初始化的最后,完成初始化后直接进入中断发送
}

/*-----------------------------------------------------------------------------------------------------
功能:SPI0发送中断服务历程
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
#pragma vector=USART0TX_VECTOR
__interrupt void SPI0Send(void)
{
#if SPI0_ADD_EN
//  unsigned int dt;
  
  if(SPI0SendDat[SPI0Sendn]!=SPI0SendDat[SPI0Sendn-2]) while(!(U0TCTL&TXEPT));
  SPI0_ADD_PORT_OUT=SPI0SendDat[SPI0Sendn];
//  for(dt=0;dt<1000;dt++);
  SPI0Sendn++;
#endif
//  printf("0x%x\n",SPI0SendDat[SPI0Sendn]);
  U0TXBUF=SPI0SendDat[SPI0Sendn++];
  if(SPI0Sendn==SPI0Datn) IE1&=~UTXIE0;                 //停止发送
}
#endif

#if SPI1_EN
/*-----------------------------------------------------------------------------------------------------
功能:初始化USART1工作在SPI方式
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
void InitSPI1(void)
{
#if SPI1_ADD_EN
  SPI1_ADD_PORT_DIR=0xFF;
#endif
  SPI1Sendn=0;
  SPI1Datn=0;
  P4DIR|=0x38;
  P4SEL|=0x38;
  U1CTL= CHAR | SYNC | MM & ~SWRST ;                    //8位数据,SPI方式,主方式,清除重置位
  U1TCTL|= CKPH | SSEL0 | STC ;                          //__|- 的相位和极性,ACLK时钟源,3pin模式
  U1BR0=0x02;                                           //波特率为BRCLK的1/2      
  U1BR1=0;                                              
  ME2|=USPIE1;                                          //使能该模块
//  IE1=UTXIE0;                                           //允许发送中断,放在初始化的最后,完成初始化后直接进入中断发送
}

/*-----------------------------------------------------------------------------------------------------
功能:SPI1发送中断服务历程
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
#pragma vector=USART1TX_VECTOR
__interrupt void SPI1Send(void)
{
#if SPI1_ADD_EN
//  unsigned int dt;
  
  if(SPI1SendDat[SPI1Sendn]!=SPI1SendDat[SPI1Sendn-2]) while(!(U1TCTL&TXEPT));
  SPI1_ADD_PORT_OUT=SPI1SendDat[SPI1Sendn];
//  for(dt=0;dt<1000;dt++);
  SPI1Sendn++;
#endif
  U1TXBUF=SPI1SendDat[SPI1Sendn++];
  if(SPI1Sendn==SPI1Datn) IE2&=~UTXIE1;                 //停止发送
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -