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; }