论坛风格切换切换到宽版
  • 4045阅读
  • 6回复

PLL例程:MB1507 C语言程序 for AVR ATmega8L [复制链接]

上一主题 下一主题
离线梭鱼
 
发帖
589
只看楼主 倒序阅读 0楼 发表于: 2010-01-04
#define pll_ld   pinc.3
#define pll_le   portc.2
#define pll_clk portc.1
#define pll_db   portc.0  

#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

uint pll_keyn, pll_keya, pll_keym = 128, pll_keyr = 5120;

// declare your global variables here

void pll_init()
{
pll_le = 0;
pll_clk = 0;
pll_db = 0;
}
       
void pll_set_ref()
{
uchar i;  
uint t, temp;
       
t = 0x2000;
temp = pll_keyr;
pll_db = 1;
pll_clk = 1;
pll_clk = 0;

for (i = 0; i < 14; i++)
{
  if (temp & t) pll_db = 1;
  else pll_db = 0;
  pll_clk = 1;
  pll_clk = 0;
  t = t >> 1;
}

pll_db = 1;
pll_clk = 1;
pll_clk = 0;

pll_le = 1;
pll_le = 0;
}

void pll_set_con()
{
uchar i;  
uint t, temp;
       
t = 0x0400;
temp = pll_keyn;

for (i = 0; i < 11; i++)
{
  if (temp & t) pll_db = 1;
  else pll_db = 0;
  pll_clk = 1;
  pll_clk = 0;
  t = t >> 1;
}

t = 0x0080;
temp = pll_keya;

for (i = 0; i < 8; i++)
{
  if (temp & t) pll_db = 1;
  else pll_db = 0;
  pll_clk = 1;
  pll_clk = 0;
  t = t >> 1;
}

pll_db = 0;
pll_clk = 1;
pll_clk = 0;

pll_le = 1;
pll_le = 0;
}

void pll_set_freq(ulong freq)
{                  
pll_keyn = freq / 256;
pll_keya = (freq / 2) % 128;

pll_set_ref();
pll_set_con();
}

使用10.24mhz晶振,设置80mhz:

  pll_set_freq(80000);

比较频率设为2khz,前置分频器设为128/129。
用atmega8l,1mhz内部rc时钟,于codevision环境下编译!!
离线BH7NAO
发帖
18519
只看该作者 1楼 发表于: 2010-01-05
记号一下 呵呵
离线BH7KQK
发帖
3425
只看该作者 2楼 发表于: 2010-01-05
路收,收藏了。。。。
我看见很多手台上都用mb1502,嘿嘿,扩频用得着。。
离线永远的FM
发帖
12230
只看该作者 3楼 发表于: 2010-01-05
mb1504很经典啊。。。。。在短波严重适合。
还有楼上茂利这么早就起来搞机啦?
离线田鼠
发帖
235
只看该作者 4楼 发表于: 2010-01-05
收藏了。。。。
离线BH7KQK
发帖
3425
只看该作者 5楼 发表于: 2010-01-05
[quote=永远的fm]mb1504很经典啊。。。。。在短波严重适合。
还有楼上茂利这么早就起来搞机啦?[/quote]

日早两竖与虫依,
夜晚一躺女不依。

深夜发贴实属无耐!!
离线bg3muy
发帖
119
只看该作者 6楼 发表于: 2010-11-02
正在琢磨这个东西,楼主可否加些注释呀,或者写一些此芯片要求的串行数据格式