最近做了个锁相环频率合成器,需要用单片机来发送数据,之前都是设置输出一个频点,现在我想设置输出一个频点后,延迟一段时间再输出另外一个频点,改了程序 可还是输出一个单频点,调试了一段时间,没有调出来,来此求助大家了,下面就是部分程序,运行的时候,只运行了子程序fashe2,输出了2500MHz
void delay(int);
void fashe1();
void fashe2();
void main()
{
fashe1(); //调用子函数fashe1
delay(50000);
fashe2(); //调用子函数fashe2
while(1);
}
void fashe1() //子函数fashe1输出2400MHz
{
unsigned long int registe0,registe1,registe2,registe3,registe4,registe5,temp1;
int i;
Init_Device();
registe5=0x580005;
registe4=0x85003C;
registe3=0x4B3;
registe2=0x4E42;
registe1=0x8008009;
registe0=0x780000;
temp1=0x80000000;
SCLOCK=1;
DATA=0;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste5)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++) //Update C Latch
{
if((temp1®iste4)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste3)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste2)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste1)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
delay(5000);
for(i=0;i<32;i++)
{
if((temp1®iste0)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
}
void fashe2() //子函数fashe2输出2500MHz
{
unsigned long int registe0,registe1,registe2,registe3,registe4,registe5,temp1;
int i;
Init_Device();
registe5=0x580005;
registe4=0x85003C;
registe3=0x4B3;
registe2=0x4E42;
registe1=0x8008009;
registe0=0x7D0000;
temp1=0x80000000;
SCLOCK=1;
DATA=0;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste5)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++) //Update C Latch
{
if((temp1®iste4)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste3)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste2)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
for(i=0;i<32;i++)
{
if((temp1®iste1)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
LE=0;
delay(5000);
for(i=0;i<32;i++)
{
if((temp1®iste0)==0x0)
DATA=0;
else
DATA=1;
SCLOCK=0;
SCLOCK=1;
temp1=temp1>>1;
}
temp1=0x80000000;
LE=1;
}
void delay(int length)
{
while (length >=0)
length--;
}
此帖出自
小平头技术问答
fashe1(); //调用子函数fashe1
delay(50000);
fashe2(); //调用子函数fashe2
delay(50000);
}while(1);
你想要的结果是这样的吧,应该是一直交替的执行的两个函数。
如果是8位机或者16位机,那么你的延时函数就是个问题,50000这么大的数是溢出了起不到延时作用,如果确实是这种问题,那么你可以尝试将delay(50000);换成5个delay(10000);试试
C8051F310单片机 ,这个延迟是我随便写的,我还没有考虑你说的问题 谢谢提醒
一周热门 更多>