上面的程序是从网上找的资料,不过有几个地方不是很明白
#define P_262 P1 //口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,_
sbit P_wr = P_262^1;
sbit Fclk_S2=P2^2; //CPLD选择Fclk控制线
sbit Fclk_S1=P2^1;
sbit Fclk_S0=P2^0;
sbit PFS0=P2^3;//工作模式工作模式选择0
sbit PFS1=P2^4;//工作模式工作模式选择1 //这一个,上面#define P_262 P1 //口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,_ 不是已经设置好了吗,这一个工作模式说的是哪一个呢
本帖最后由 paulhyde 于 2014-9-15 03:48 编辑
#define P_262 P1 //口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,_
sbit P_wr = P_262^1;
sbit Fclk_S2=P2^2; //CPLD选择Fclk控制线
sbit Fclk_S1=P2^1;
sbit Fclk_S0=P2^0; //上面三根时钟线根线是哪里的,不是很明白啊
本帖最后由 paulhyde 于 2014-9-15 03:49 编辑
#defineP_262 P1 //口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,
//写两比特的数据
void write(ucharadd,uchar dat2bit)
{
_262=(P_262&0x0f)|(add<<4);
_262=(P_262&0xf3)|((dat2bit<<2)&0x0c);
_wr=0;
delay_262();
_wr=1;
delay_262();
}
布线并没有按照这个设定来,怎么修改一下A3,A2,A1,A0,D1,D0的赋值呢
本帖最后由 paulhyde 于 2014-9-15 03:49 编辑
有没有大神能给一下自己写的程序让我可以参考一下呢,最好可以带注释了,问题暂时就这么多了
我们当初做用的FPGA的软核的NIOS II,程序忘记了,就觉得程控靠改时钟和Q值
回复 10楼longhaozheng 的帖子
好吧,在没有高人帮忙下,差不多弄出来了,现在在调试程序,不过,功能不是很对
回复 10楼longhaozheng 的帖子
等我调试完了,如果能通过的话,我把程序发出来给大家看一下
只能说,有时候可以有时候不可以,而且控制的,并不是我想要的
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define PI 3.141592653
ulong FLCK=900000;//0.9m
uchar NQ,N0;
sbit wr=P0^1;
sbit a0=P0^2;
sbit a1=P0^3;
sbit a2=P0^6;
sbit a3=P0^5;
sbit d0=P0^0;
sbit d1=P0^4;
void del(uchar t)
{
unsigned int i,j;
for(i=0; i
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 :
* 功能 :写入地址
* 输入 : 无
* 输出 : 无
***********************************************************************/
void address_262(uchar x)
{
x=(x&0x0f);
if((x&0x01)==0x01)a0=1;
else a0=0;
if((x&0x02)==0x02)a1=1;
else a1=0;
if((x&0x04)==0x04)a2=1;
else a2=0;
if((x&0x08)==0x08)a3=1;
else a3=0;
}
/********************************************************************
* 名称 :
* 功能 :写入数据
* 输入 : 无
* 输出 : 无
***********************************************************************/
void data_262(uchar x)
{
x=(x&0x03);
if(x&0x01)d0=1;
else d0=0;
if((x&0x02)==0x02)d1=1;
else d1=0;
}
/********************************************************************
* 名称 :
* 功能 :传送内容
* 输入 : 无
* 输出 : 无
***********************************************************************/
void send_data_262(uchar x,uchar y)//先地址,后数据
{
wr=1;
address_262(x);
del(2);
wr=0;
del(2);
data_262(y);
wr=1;
}
/********************************************************************
* 名称 :
* 功能 :设定max262的滤波器的工作模式
* 输入 : 无
* 输出 : 无
***********************************************************************/
//函数功能: 设定max262的滤波器的工作模式
work_mod_262(uchar x,uchar y)//x表示工作模式(0--3),y表示哪个滤波器,滤波器0或者滤波器1
{
x=(x&0x03);
y=(y&0x01);
send_data_262((0x00+y*0x08),x);
}
/********************************************************************
* 名称 :
* 功能 :设定max262的滤波器的中心频率
* 输入 : 无
* 输出 : 无
***********************************************************************/
void set_fre_262(uchar x,uchar y)//x输入频率对应的N,y表示哪个滤波器,滤波器0或者滤波器1
{
uchar temp;
y=(y&0x01);
temp=(x&0x03);
send_data_262((0x01+y*0x08),temp);
temp=((x&0x0c)>>2);
send_data_262((0x02+y*0x08),temp);
temp=((x&0x30)>>4);
send_data_262((0x03+y*0x08),temp);
}
/********************************************************************
* 名称 :
* 功能 :设定max262的Q值
* 输入 : 无
* 输出 : 无
***********************************************************************/
void set_q_262(uchar x,uchar y)//x输入Q值,y表示哪个滤波器,滤波器0或者滤波器1
{
uchar temp;
y=(y&0x01);
temp=x&0x03;
send_data_262((0x04+y*0x08),temp);
temp=((x&0x0c)>>2);
send_data_262((0x05+y*0x08),temp);
temp=((x&0x30)>>4);
send_data_262((0x06+y*0x08),temp);
temp=((x&0x40)>>6);
send_data_262((0x07+y*0x08),temp);
}
//***************************************************************
//基本计算
//***************************************************************
//根据截止频率fc计算中心频率f0
//
/*
uchar CopF0(float q, float fc)
{
q = pow(q, 2);
q = (float)q*2;
q = (float)(q-1)/q;//1-(1/q)
fc = (float)fc * sqrt(sqrt(1+pow(q,2))-q);
}
float CopF0_tx(float q, float fc)
{
q = pow(q, 2);
q = (float)q*2;
q = (float)(q-1)/q;//1-(1/q)
fc = fc * sqrt(sqrt(1+pow(q,2))+q);
}
*/
//根据中心频率求设定值
float CopFn(uchar mod, float f0)
{
if (1==mod)
{
N0= ((float)(FLCK/(1.11072*f0))-26);
}
else
{
N0= ((float)((FLCK*2/f0)/PI)-26);
}
return N0;
}
//根据Q求设定值QN
uchar CopQn(uchar mod, float q)
{
if (1==mod)
{
NQ= (128-(float)(q/90.51));
}
else
{
NQ= (128-(float)(q/64));
}
return NQ;
}
上面那个是我写的程序,可以看到效果的,不过,效果不理想而已,有需要的,就拿去吧