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

📄 main.c

📁 msp430f413和prt6000程序c语言
💻 C
字号:
   #include<msp430x21x1.h>
   #include"PTR6000.H"
   #define si  BIT2
   #define max_rt 0x10
   #define tx_ds  0x20
   #define rx_dr  0x40
   #define flush_tx 0xe1
   #define flush_rx 0xe2
unsigned char dat1;
void INT_CLK(void);
extern unsigned char read_shuju=0;
unsigned char sent_addr[5]={0x34,0x43,0x10,0x10,0x01};
  //$$$$$$$$$$$$$$$$$$$$$$$$
   unsigned int send_date[16]={
                                    16,17,18,19,20,21,22,23,
                                    24,25,26,27,28,29,30,31};
   unsigned int receive_date[16]={0} ;
  //$$$$$$$$$$$$$$$$$$$$$$$
   void Init_Port(void);
   void write(uchar b);
   uchar read(void);
   void  w_txaddr(uchar addr,uchar *com);
   void w_register(uchar addr,uchar com); //写寄存器
   uchar r_register(uchar addr);       //读寄存器
   void w_tx(void);
   void r_rx(void); 
   void clr_tx(void);
   void clr_rx(void);    //一般读完rx_fifo会自动清除,不必调用该函数  
     
    void main()
      {
       uchar read_data,i;
       WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
        _DINT();                       //关闭中断
       Init_Port();
       //P1OUT |= BIT0;
       P1OUT |= BIT1;
       P1OUT |= BIT2;
       P1OUT |= BIT3;
       P2OUT=0XFF;
       INT_CLK();
       w_register(0x23,0x03);
       _NOP();
       dat1=r_register(0x03);
       ce_Low();
     
       w_register(0x20,0x0A);     //设为发射机
       read_shuju=r_register(0x00);
       w_txaddr(0x30,sent_addr);
       w_register(0x21,0x01);
       w_register(0x22,0x01);
       w_register(0x31,0x08);     //设置数据宽度
       read_data=r_register(0x00);
       w_register(0x27,r_register(0x07));  //清中断
       w_tx();
       ce_High();
       for(i=0;i<15;i++);
       while((P1IN&0x01)==0x01);
       ce_Low();
       read_data=r_register(0x07);
       w_register(0x27,read_data);  //清中断
       switch(read_data&0xf0)       //判断中断信号屏蔽低字节
            {case max_rt:while(1);
             case rx_dr :r_rx();break;
             case tx_ds :clr_tx();break;
             default: while(1);
            }
       //P5OUT |= BIT6;
       while(1);
      }

   void Init_Port(void)
{
        P1SEL &= ~BIT0;
        P1SEL &= ~BIT1;
        P1SEL &= ~BIT2;
        P1SEL &= ~BIT3;
       // P2SEL = 0;      //将P2口设置成普通I/O口
	P2DIR |= BIT3;      //CE
        P2DIR |= BIT2;      //CSN
        P1DIR |= BIT0;      //IRQ
        P1DIR |= BIT1;      //MISO
        P1DIR |= BIT2;      //MOSI
        P1DIR |= BIT3;      //SCK
  
        //P1DIR &= ~(BIT0);
        //P1IES |= BIT0;    //开中断
        //P1IE  |= BIT0;    
	return;
}
 void write(uchar b)   //高位在前,低位在后
     {char i,j;
         for(i=0;i<8;i++)
    {
      if((b&0x80)==0x80)
      {
      mo_High();
      }
      else
      {
      mo_Low();
      }
      sck_High();
      for (j=10;j>0;j--);//延迟一段时间
      sck_Low();
      b<<=1;
    }
     }
 uchar read(void)
     {
     uchar i,j,a=0;
     for(i = 0;i < 8;i++)
    {
    	if(P1IN & si)
    	{
    	    a |= (0x01 << (7-i));
    	}
        sck_High();
        for(j = 10;j > 0;j--);
        sck_Low();
    }
     return(a);
     }
 void w_register(uchar addr,uchar com)   //写寄存器
     {
      sck_Low();
      csn_Low();
      write(addr);
      write(com);
      csn_High();
      }
 uchar r_register(uchar addr)       //读寄存器
      {
       uchar date;
       sck_Low();
       csn_Low();
       write(addr);
       date=read();
       csn_High();
       return(date);
       }
  void w_tx(void)
       {uchar i;
        sck_Low();
        csn_Low();
        write(0xa0);
        for(i=0;i<8;i++)         //写tx_fifo
           write(send_date[i]);
        csn_High();
        }
  void r_rx(void)
        {uchar i;
         sck_Low();
         csn_Low();
         write(0x61);
         for(i=0;i<8;i++)
         receive_date[i]=read();
         csn_High();
        }
  void clr_tx(void)
        {
         sck_Low();
         csn_Low();
         write(flush_tx);
         csn_High();
        }
   void clr_rx(void)    //一般读完rx_fifo会自动清除,不必调用该函数
        {
         sck_Low();
         csn_Low();
         write(flush_rx);
         csn_High();
        }


void  w_txaddr(uchar addr,uchar *com)
{
  uchar i;
  sck_Low();
  csn_Low();
  write(addr);
  for(i=0;i<5;i++)
  {
    write(com[i]);
  }
  csn_High();
}
void INT_CLK(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  DCOCTL  = CALDCO_8MHZ;
  BCSCTL1 = CALBC1_8MHZ;
  BCSCTL2 = 0x16;
}

⌨️ 快捷键说明

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