搜索
bottom↓
回复: 3

发个锁相环1504程序

[复制链接]

出0入0汤圆

发表于 2008-8-27 00:14:01 | 显示全部楼层 |阅读模式
#include <avr\io.h>
#include <util\delay.h>
#include <avr\eeprom.h>
#include <avr\pgmspace.h>
#include <avr\interrupt.h>
#include "1504.h"
#include "lcd12864.h"

#define  LE     4
#define  DATA   3
#define  CLK    2

#define CLR_LE   PORTC&=~(1<<LE)
#define SET_LE   PORTC|=(1<<LE)
#define CLR_DATA PORTC&=~(1<<DATA)
#define SET_DATA PORTC|=(1<<DATA)
#define CLR_CLK  PORTC&=~(1<<CLK)
#define SET_CLK  PORTC|=(1<<CLK)
volatile unsigned char AutoSearchStop=0;
extern volatile unsigned int  Timer0InterTimes,Freq[],EEAddr,FreqH[],FreqL;
extern volatile unsigned char Station,Channel[4],Segment,Select[4];

void ShortDelay(void)
{
    _delay_us(2);
}

void PLL_Reference(unsigned int R,unsigned char SW)
{
    char i;
    CLR_CLK;
    CLR_LE;
    R<<=1;
    R|=1; //C为1移入16位数据,C为0,移入18位数据
    if(SW)
        R|=0x8000;               
    for(i=0;i<16;i++)
    {
        if(R&0x8000)
            SET_DATA;
        else
            CLR_DATA;
                ShortDelay();
        SET_CLK;
        ShortDelay();
        CLR_CLK;
                ShortDelay();
                R<<=1;  
    }
    SET_LE;
    ShortDelay();
    CLR_LE;
        ShortDelay();
}

void PLL_Programe(unsigned char A,unsigned int N)
{
    unsigned char i,temp_A=A;
    unsigned int  temp_N=N;
       
    CLR_CLK;
    CLR_LE;

    temp_A<<=1;
    temp_N<<=5;//11位数据变为16位数据
    for(i=0;i<11;i++)//传送N
    {
        if(temp_N&0x8000)
            SET_DATA;
        else
            CLR_DATA;
                ShortDelay();
        SET_CLK;
                ShortDelay();
        CLR_CLK;
                ShortDelay();
                temp_N<<=1;
    }
    for(i=0;i<8;i++)  //传送A
    {
        if(temp_A&0x80)  
                        SET_DATA;
        else        
                    CLR_DATA;
        ShortDelay();
        SET_CLK;
                ShortDelay();
        temp_A<<=1;
        CLR_CLK;
                ShortDelay();
    }
        ShortDelay();
    SET_LE;
    ShortDelay();
    CLR_LE;
        ShortDelay();
}

void MSM1504_Init(void)
{
        DDRC|=(1<<LE)|(1<<DATA)|(1<<CLK);
}
void SetFreq(unsigned int F)
{   
    unsigned int N,A;
        if(Segment==1)
            F+=465;
        else
        F+=1070;
    N=F/32;
    A=F%32;
    PLL_Programe(A,N);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2008-8-27 09:17:19 | 显示全部楼层
顶!我这个程序包里也有MB1504的函数
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=822285&bbs_page_no=1&search_mode=3&search_text=RedStone&bbs_id=9999

出0入0汤圆

发表于 2011-8-25 21:17:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-9-2 20:21:39 | 显示全部楼层
很好,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 10:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表