打印
[51单片机]

求助关于多次调用子函数的问题!

[复制链接]
780|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
面包所长|  楼主 | 2016-7-12 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了个锁相环频率合成器,需要用单片机来发送数据,之前都是设置输出一个频点,现在我想设置输出一个频点后,延迟一段时间再输出另外一个频点,改了程序 可还是输出一个单频点,调试了一段时间,没有调出来,来此求助大家了,下面就是部分程序,运行的时候,只运行了子程序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&registe5)==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&registe4)==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&registe3)==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&registe2)==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&registe1)==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&registe0)==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&registe5)==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&registe4)==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&registe3)==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&registe2)==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&registe1)==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&registe0)==0x0)               
                        DATA=0;
                else
                        DATA=1;
                SCLOCK=0;
                SCLOCK=1;

                temp1=temp1>>1;
        }
        temp1=0x80000000;
        LE=1;
}

相关帖子

沙发
dirtwillfly| | 2016-7-12 18:43 | 只看该作者
觉得很少有网友能把楼主的程序读完

使用特权

评论回复
板凳
面包所长|  楼主 | 2016-7-12 19:18 | 只看该作者
dirtwillfly 发表于 2016-7-12 18:43
觉得很少有网友能把楼主的程序读完

不需要读完,就是红色的那部分!哈哈

使用特权

评论回复
地板
JerryWu75| | 2016-7-12 20:59 | 只看该作者
你的delay的入口参数定义是int,调用delay(50000), 这个50000是负数吧?

使用特权

评论回复
5
面包所长|  楼主 | 2016-7-12 21:22 | 只看该作者
JerryWu75 发表于 2016-7-12 20:59
你的delay的入口参数定义是int,调用delay(50000), 这个50000是负数吧?

什么意思???delay()函数在后面有写,我没贴出来

使用特权

评论回复
6
JerryWu75| | 2016-7-13 09:53 | 只看该作者
你的delay定义是delay(int),如果你的int定义的是16位整形,那么它的取值范围是-32768 ~ 32767, 你调用delay(50000)实际上传入的是delay(-15536)

使用特权

评论回复
7
面包所长|  楼主 | 2016-7-13 17:18 | 只看该作者
JerryWu75 发表于 2016-7-13 09:53
你的delay定义是delay(int),如果你的int定义的是16位整形,那么它的取值范围是-32768 ~ 32767, 你调用delay( ...

哦 忽略这个问题了 谢谢了 我改成了5000 还是不行

使用特权

评论回复
8
JerryWu75| | 2016-7-15 13:17 | 只看该作者
先单独的看看2个频率能不能正常出来,再找其他的问题.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

32

帖子

0

粉丝