初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2016-5-3
- 在线时间
- 31 小时
|
9金钱
想用51单片机控制CDCE906输出矩形波,可研究了好久都没弄出来,求大神指教。现象是Y1输出的波形是52M左右,并且频率有微弱减小
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^7;
sbit scl=P2^6;
/*
void delay1(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
;
} */
/**********延时***************/
void delay()
{
; ;
}
/***************I2C*********************/
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止信号
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //应答
{
uchar i=0;
scl=1;
delay();
while((sda==1)&&(i<255))
i++;
scl=0;
delay();
}
void I2C_init() //初始化
{
sda=1;
delay();
scl=1;
delay();
}
/******************向I2C写字节********************/
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;///溢出
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
/*************写命令,写数据**********/
void write_add(uchar CommandCode,uchar date)
{
start();
write_byte(0xd2);
respons();
write_byte(CommandCode);
respons();
write_byte(date);
respons();
stop();
}
/****************CDCE906设置*************/
void cdce906 ()
{
uint N;
for(N=5;N<255;N=N+15)
{
write_add(0x83,0xa0); //PLL2 AUX
write_add(0x84,0x05); // M=5
write_add(0x85,N); // N未知
write_add(0x86,0x00); //高速Fvco
write_add(0x89,0x40); //选择PLL2
write_add(0x8d,0x05); //P值为5
write_add(0x94,0x38); //设置Y1输出
write_add(0x9a,0x00); // 重新设置
}
}
/****************主函数**********************/
void main()
{
I2C_init();
cdce906();
while(1)
{ ; }
}
|
|