打印

请高手帮我看看这个串出程序,似乎不停的循环,求助

[复制链接]
1348|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhhushdu24|  楼主 | 2009-2-7 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请高手帮我看看这个程序,我的单片机用的是C8051F330.我是用它来控制锁相环.
程序是单片机向锁相环输出3组数据,每组数据包含3个8位二进制数.其中用到单片机3个I/O口,一个做时钟信号,一个控制信号,一个数据信号.
程序编译下载没问题,在线仿真也没问题.但用示波器查看三个口都一直有信号输出,似乎程序在一直不停的执行.
曾经怀疑是单片机在不停的复位,检查程序发现初始化时没有禁止看门狗,现在是改进后的程序,但问题仍然存在.小弟真的是没办法了.
请各位高手指点一下,或者帮忙改下这程序.在此多谢了?
#include<c8051F330.h>

sbit    DAT    =P1^0;//锁相环数据信号
sbit    SCK    =P1^1;//锁相环时钟信号
sbit    LE    =P1^2;//锁相环控制信号

sbit    Detect=P1^3;//程序完成检测信号

void InitDevice(void);//初始化
void Delay(unsigned char timer);
void PLLInit(void);//送数函数


unsigned char code m=0;
unsigned char code init[9]={0x34,0x03,0xC7,0x00,0x04,0x82,0x11,0x43,0x21};

void main()
{
    InitDevice();
    Delay(255);
    Delay(255);
    P0=0xFF;
    P1=0xFF;
    PLLInit();
    Delay(100);
    PLLInit();
    Delay(100);
    do        //死循环函数
    {
     LE=1;
     SCK=0;
     DAT=0;
    }while(m==0);//while(m!=0)
}



void InitDevice(void)

{
    OSCICN=0xC3;//内部振荡器SYSCLK=24.5M
    P0MDOUT=0x00;//
    P1MDOUT=0x07;//"1"为推挽输出
    P0SKIP=0xFF;//不跳过(全0)会使P0.0和P0.2口,从而使得它始终为0(强电平)
    P1SKIP=0xFF;//"1"为跳过
    XBR0=0x00;//0x02;//SPI I/O ENBALE?
    XBR1=0x40;//弱上拉允许,交叉开关允许
    //SPI0CFG=0x40;//主器件方式,第一个边沿采样
    //SPI0CN=0x03;//允许SPI,3线主方式
    //SPI0CKR=0x00;//SYSCLK=24.5M FSCK=24.5M
    IE=0x00;//禁止中断
    PCA0MD=0x00;//CLR WDTE,时钟源=系统
    PCA0CPL2=0xFF;//超时间隔=32.1mS for sysclk=2
    PCA0MD=0x40;//SETB WDTE
}
void Delay(unsigned char timer)
{
    unsigned char i,j;
    for(i=0;i<timer;i++)
        {
            for(j=0;j<255;j++)
                {
                    PCA0CPH2=0x00;//喂狗
                }
        }
}
void PLLInit(void)
{
unsigned char i,j,k,l,SendBit,SendNumber=0;
    l=3;
    do
        {
            LE=1;
            SCK=0;
            DAT=0;
            
            for(i=0;i<3;i++)//3组数据
                {
                    LE=0;
                    for(j=0;j<3;j++)//每组3个字节
                        {
                            SendBit=init[i*3+j];
                            for(k=0;k<8;k++)//每字节8位
                                {
                                    SendBit<<=1;//先送高位
                                    DAT=CY;
                                    SCK=1;
                                    Delay(25);
                                    SCK=0;
                                    
                                    l++;
                                    PCA0CPH2=0x00;//喂狗
                                 }
                        }
                        LE=1;
                }

                Delay(10);//0.00842231S
                //l--;

        }while(l==3);//与理论似乎不符(l赋值为3,当l==3循环结束)
        Detect=0;//测试点
}

相关帖子

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

本版积分规则

2

主题

2

帖子

0

粉丝