www.pudn.com > DDS485.rar > init.c


#include  
#include  
#include  
#include  
 
//-----***-CPU寄存器以及外围接口初始化-***-----// 
void InitSeries(void) 
{ 
     PCON =    0x20;//----------------------------------------------------SMOD1=0;SMOD0=0;通讯速率不加倍,SCON.7作为UART的SM0位 
     SCON =    0xd0;//----------------------------------------------------串口工作在模式3,禁止串口接收 
     SSTAT=    0x60;//----------------------------------------------------串口工作在普通模式 
     BRGCON |= 0x02;//----------------------------------------------------选择波特率发生器用于产生UART的波特率,禁止使能 
     //12M 
     //BRGR1=0x27;//------------------------------------------------------装载高字节 
     //BRGR0=0x00;//------------------------------------------------------装载低字节 
     //11.0592M 
     //BRGR1=0x23;//--------------------------------------------------------装载高字节 
     //BRGR0=0xF0;//--------------------------------------------------------装载低字节 
     //7.373M 
     BRGR1=0x17;//--------------------------------------------------------装载高字节 
     BRGR0=0xF0;//--------------------------------------------------------装载低字节 
     BRGCON |= 0x01;//----------------------------------------------------使能拨特率发生器 
     ESR=0;//-------------------------------------------------------------禁止串口中断 
} 
void InitCpuIo(void) 
{ 
     P0M1=0x00; 
     P0M2=0x00; 
     P1M1=0xbc;//---------------------------------------------------------1011 1100 
     P1M2=0x0c;//---------------------------------------------------------0000 1100 
     P2M1=0x00;//---------------------------------------------------------设置P26为开漏 
     P2M2=0x00; 
     HwTxd=1; 
} 
void InitWDT(void) 
{ 
     WDL=255; 
     WDCON=0xE5; 
     WFEED1=0xA5;//-------------------------------------------------------喂狗 
     WFEED2=0x5A; 
} 
void InitINT1(void) 
{ 
     IT1=1;//-------------------------------------------------------------外部中断1采用低电平触发中断 
     IP1H=0x02; 
     IP1=0x02; 
     EX1=0;//-------------------------------------------------------------禁止外部中断 
} 
 
void InitInterrupt(void) 
{ 
    EC=ESPI=ECCU=EIEE=EBO=EX0=EWDRT=EI2C=0;//------禁止比较器中断 
    //ESPI=0;//----禁止SPI中断 
    //ECCU=0;//----禁止CCU中断 
    //EIEE=0;//----禁止内部EEP中断 
    //ET0=0;//-----禁止定时器0中断 
    //ET1=0;//-----禁止定时器1中断 
    //EBO=0;//-----禁止调掉中断 
    //EX1=0;//-----禁止外部中断1 
    //EWDRT=0;//---禁止看门狗中断 
    //EI2C=0;//----禁止IIC中断 
    EA=1; 
    ET0=1; 
    ET1=1; 
    ES=1;//-----使能串口中断0 
    EX1=0;//-----使能外部中断0 
    EKBI=0;//----使能键盘中断 
} 
 
void InitPWM()                      
{                                   
    //使用外部12M振荡器时:     CCU频率=((12000000/2)/6)*16=16000000MHz 
    //定时器重装值=CCU频率/红外线载频=16000000/38000=421=0x1a5 
    //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50% 
    //OCRAH=0x01; 
    //OCRAL=0xa5; 
    //TOR2H=0x03;                     
    //TOR2L=0x4a; 
    //使用外部11.0592M振荡器时:CCU频率=((11059200/2)/6)*16=14745600MHz 
    //定时器重装值=CCU频率/红外线载频=14745600/38000=388=0x184 
    //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50% 
    //OCRAH=0x01;                     
    //OCRAL=0x84;//---------------------------以上为内部晶振11.0592MHz 
    OCRAH=0x01; 
    OCRAL=0x03;//---------------------------以上为内部晶振7.373MHz 
    TOR2H=0x02;                     
    TOR2L=0x06; 
    TCR21=0x85;//---------------------------------------------------------PLL预分频为5+1 
    CCCRA=1;//------------------------------------------------------------非反相的PWM比较匹配时置位,在CCU定时器向下溢出时清0 
    PLLEN=1;//------------------------------------------------------------启动PLL 
    HwPwm=1; 
    while(PLLEN==0); 
    TCR20=0x82;//---------------------------------------------------------设置输出模式,非反相PWM 
} 
 
//-----***-数据初始化-***-----// 
 
void InitCpu(void) 
{ 
    unsigned char i,j=0x10; 
    DIVM=0x00; 
    AUXR1=0x00; 
    InitWDT(); 
    InitInterrupt(); 
    InitCpuIo();    
	InitSeries();	 
	InitINT1(); 
	InitPWM(); 
    Datastart();   
    inpulse=rbyteiic(0xa0,0x04); 
    for(i=0;i<4;i++) 
    { 
        iicEData[i]=rbyteiic(0xa0,i); 
        EData[i]=BcdToHex(iicEData[i]); 
    } 
    for(i=0;i<6;i++) 
    { 
        MeterAdd[i]=rbyteiic(0xa0,j); 
        j++; 
    } 
        wbyteiic(0xa0,0x05,0x00); 
        wbyteiic(0xa0,0x06,0x16); 
        wbyteiic(0xa0,0x07,0x00); 
    SendEndFg=1; 
}