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

📄 tea5767.c

📁 Tea5767的3线控制程序
💻 C
字号:
#include <iom8.h>
#include "TEA5767.h"
#include "global.h"

void Init_Tea5767(unsigned long freq)
{
  //初始化IO端口

  DDRC |= (CLK|READ_WRITE|DATA);

  DDRC &= ~MPX;

  
  Set_Freq(freq);

}

void Write_5767(unsigned char * senddata)
{
  Send_START();          //发送开始

//  PORTC &= ~CLK;
//  delay_us(10);
  PORTC |= READ_WRITE ;
  
  Send_Byte(*senddata);    //load 95.5M pll  0x2d7e 0b01101111 0b01111110
  Send_Byte(*(senddata+1));
  Send_Byte(*(senddata+2));    
  Send_Byte(*(senddata+3));
  Send_Byte(*(senddata+4));
  
}


void Read_5767(unsigned char * receivedata)
{
  Receive_START();
//  PORTC &= ~CLK;
//  delay_us(10);
//  PORTC &= ~READ_WRITE ;

  receivedata[0] = Receive_Byte();
  receivedata[1] = Receive_Byte();
  receivedata[2] = Receive_Byte();
  receivedata[3] = Receive_Byte();
  receivedata[4] = Receive_Byte();

}

void Send_Byte(unsigned char data)
{
  unsigned char temp,i;
  DDRC |= DATA;

  for (i = 0; i<8; i++)
  {
    temp = 0x80;
    PORTC &= ~CLK;
    temp &= data;
    if (temp == 0)
    {
      PORTC &= ~DATA;
    }
    else 
    {
      PORTC |= DATA;
    }
    delay_us(10);
    PORTC |= CLK;
    data = (data << 1);
    delay_us(10);
  }
}


unsigned char  Receive_Byte(void)
{
  unsigned char temp,data,i;
  data = 0x00;
  DDRC &= ~DATA;
  
  for ( i = 0; i<8; i++)
  {
    PORTC &= ~CLK;
    
    PORTC |= CLK;    
    
//    delay_us(10);
    temp = PINC & DATA; 
    
    if (temp == DATA)
    {
      data |= 0x01;
    }

    PORTC &= ~CLK;
//    delay_us(10);
   
    if (i != 7)
      data = (data << 1);
  }
  
  return data;
}


//
void Send_START(void)
{

  PORTC &= ~CLK;
  PORTC |= READ_WRITE ;
  delay_us(10);
  PORTC &= ~READ_WRITE;
  delay_us(10);
  PORTC |= READ_WRITE ;

  PORTC &= ~CLK;
}

void Receive_START(void)
{
  PORTC &= ~CLK;

  PORTC &= ~READ_WRITE ;
  delay_us(10);
  PORTC |= READ_WRITE;
  delay_us(10);
  PORTC &= ~READ_WRITE ;

  PORTC &= ~CLK;
}

//由PLL计算频率
unsigned long PLL_2_Freq(unsigned int pll)		
{
    unsigned long frequency;
    unsigned char hlsi;
    unsigned int npll=0;
    npll=pll;
    hlsi=0;//WriteData[2]&0x10;
    if (hlsi)
        frequency=(unsigned long)((float)npll*(float)8.192-225);    //频率单位:KHz
    else
        frequency=(unsigned long)((float)npll*(float)8.192+225);    //频率单位:KHz
    return (frequency+50);
}
//由频率计算PLL
//Freq       0.1M
unsigned int Freq_2_PLL(unsigned long Freq)	//	955,2d6e
{
    unsigned char hlsi;
    unsigned int pll=0;
    hlsi=0;//WriteData[2]&0x10;
    if (hlsi)
        pll=(unsigned int)(((float)Freq+225)*4/32.768);    //频率单位:k
    else
        pll=(unsigned int)(((float)Freq-225)*4/32.768);    //频率单位:k
    return pll;
}

void Search_up(unsigned long freq)
{
  unsigned char Data[5];
  
  unsigned int pll;

  pll =  Freq_2_PLL(freq);	
    
  Data[0] = ((pll>>8)&0x003F)|0x40 ;
  
  Data[1] = pll&0x00FF;
  
  Data[2] = 0xE0;   //向上搜索
  
  Data[3] = 0x90;
  Data[4] = 0x00;	

  Write_5767(Data);

}
void Search_down(unsigned long freq)
{
  unsigned char Data[5];
  
  unsigned int pll;

  pll =  Freq_2_PLL(freq);	
    
  Data[0] = ((pll>>8)&0x003F)|0x40 ;
  
  Data[1] = pll&0x00FF;
  
  Data[2] = 0x20;   //向下搜索
  
  Data[3] = 0x90;
  Data[4] = 0x00;	

  Write_5767(Data);

}

void Set_Freq(unsigned long freq)
{
  unsigned char Data[5];
  
  unsigned int pll;

  pll =  Freq_2_PLL(freq);	
  
  Data[0] = (pll>>8)&0x003F ;
  
  Data[1] = pll&0x00FF;
  
  Data[2] = 0x20;
  
  Data[3] = 0x90;
  Data[4] = 0x00;	

  Write_5767(Data);
  
}


⌨️ 快捷键说明

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