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

📄 newcoder071230.c

📁 MSP430单片机读取SSI接口的编码器
💻 C
字号:
#include "msp430x14x.h"
void init(void);
void Clk_0(void);
void Clk_1(void);
void Csn_0(void);
void Csn_1(void);
void delay(unsigned int long);
void OutToPcDb(double);
unsigned char Xor(unsigned char,unsigned char);
unsigned char Data1[18]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char Data[18] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned int AData=0;
double CoderAngle=0.0;
unsigned char Order=0x00;
int Index;
void main(void)
{
  unsigned char i;
  init();
	while(1)
 {
	  Index=0;
	  Csn_1();
	  Clk_1();
	  delay(10);
	  Csn_0();
	  delay(10);
	  Clk_0();
	  delay(10);
	  Clk_1();
	 while(Index<18)
	  {
		  if((P5IN&0x20)==0x20)
		  Data[Index]=1;
		  else
		  Data[Index]=0;
		  Index++;
		  delay(2);
		  Clk_0();
		  delay(2);
		  Clk_1();
	  }
//	  Data[17]=Data1[17];
//	  for(i=16;i>5;i--)
//	  {
//	     Data[i]=Data1[i]^Data1[i+1];
	  
//	  }
	  AData=2048*Data[0]+1024*Data[1]+512*Data[2]+256*Data[3]+128*Data[4]+64*Data[5]+32*Data[6]+16*Data[7]+8*Data[8]+4*Data[9]+2*Data[10]+Data[11];
	  CoderAngle=(double)AData/4095.0*360.0;
     if(Order==0xff)
      {
	      Order=0x00; 
	      OutToPcDb(CoderAngle);
      }
 }
}
void init(void)
{ 
  WDTCTL = WDTPW+WDTHOLD;                       //禁止看门狗
  P5SEL&=~0x60;
  P5DIR&=~0x20;
  P5DIR|=0x40;
  P1SEL&=~0x02;
  P1DIR|=0x02;
  BCSCTL1 |=0x40;
  BCSCTL2 |=0xc0;
  delay(1000);
  ME2 |= UTXE1+URXE1;                            //使能Uart1的TXD/RXD
  UCTL1 |= CHAR + SWRST;                         //8位字符,SWRST置1
  UTCTL1|=SSEL0;                                  //UCLK=ACLK

   
  UBR01 =0xD0;           //波特率19200
  UBR11 =0x00;
  UMCTL1 = 0x94;

  P3SEL |= 0xc0;
  P3DIR |= 0x40;
  UCTL1 &= ~SWRST;
  IE2 |= URXIE1; 
  _EINT(); 
}
void Clk_1(void)
{
  P1OUT&=~0x02; 
}
void Clk_0(void)
{
  P1OUT|=0x02;
}
void Csn_1(void)
{
 P5OUT&=~0x40;
}
void Csn_0(void)
{
 P5OUT|=0x40;
}
void delay(unsigned int long temp)
{
 while(temp--);
}
/************************************************************************************/
/**函数名: void OutToPcDb(double Angle)                                            **/
/**功  能: 将采样数组输出到PC机,ASCII码接收                                       **/
/**返回值: 无                                                                      **/
/**参  数: double Angle                                                            **/
/************************************************************************************/	
 void OutToPcDb(double DataIn)
	{
		 unsigned int i=0,j;
		 unsigned char ArrayTemp[5];
         unsigned int AngleInt;
         AngleInt = (int)(DataIn*10);
         if(AngleInt>=10000)
           ArrayTemp[i++] = AngleInt/10000+48;
         if(AngleInt>=1000)
           ArrayTemp[i++] = (AngleInt/1000)%10+48;
		 if(AngleInt>=100)  
		   ArrayTemp[i++] = (AngleInt/100)%10+48;
		   ArrayTemp[i++] = (AngleInt/10)%10+48;
		   ArrayTemp[i++] = 46;
		   ArrayTemp[i++] = AngleInt%10 +48;  
		   j=i;
		 for(i=0;i<j;i++)
	   	 {
	   	   TXBUF1=ArrayTemp[i];  
	       while((UTXIFG1 & IFG2)==0);
	   	 }
	   	 TXBUF1=10;  
	     while((UTXIFG1 & IFG2)==0);
	          
	}
/****************************************************************/
/**函数名: interrupt[UART1RX_VECTOR] void usart1_rx(void)      **/
/**功  能: 中断服务子程序 发送接收到的数据                     **/
/**返回值: 无                                                  **/
/**参  数: 无                                                  **/
/****************************************************************/ 	
	interrupt[UART1RX_VECTOR] void usart1_rx(void)
	{
	 while((IFG2 & UTXIFG1)==0);                             //等待接收完毕
	 Order=RXBUF1;
    }

⌨️ 快捷键说明

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