⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 个人学习参考!禁止使用到产品上! 任何人不得公开发布!
💻 C
字号:
/*========================================*/
/*系统名称:DDSF-CECG-JiangSu             */
/*函数名称:初始化  		              */
/*程序编写:步爱军			              */
/*开始日期:2005-01-01			          */
/*完成日期:				              */
/*修改记录:  				              */
/*软件版本:DDSF-CECG-002                 */
/*版本说明:用户数据保存在外部            */
/*外部器件:LM75、AT24C02、HT1621、LPC932 */
/*          R8025、ADE7755                */
/*========================================*/

#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>

//-----***-CPU寄存器以及外围接口初始化-***-----//
void InitSeries(void)
{
     PCON=PCON | 0x30;             //SMOD1=0;SMOD0=0;通讯速率不加倍,SCON.7作为UART的SM0位
     SCON=SCON | 0xd0;             //串口工作在模式3,禁止串口接收
     SSTAT=0x60;                   //串口工作在普通模式
     BRGCON=BRGCON | 0x02;         //选择波特率发生器用于产生UART的波特率,禁止使能
     //晶振12M通讯速率1200
     BRGR1=0x27;                   //装载高字节
     BRGR0=0x00;                   //装载低字节
     //晶振11.0592通讯速率1200
	 //BRGR1=0x23;                 //装载高字节
     //BRGR0=0xF0;                 //装载低字节
     BRGCON=BRGCON | 0x01;         //使能拨特率发生器
     DIR=1;
     ESR=1;					       //使能串口中断
}
void InitCpuIo(void)
{
     P0M1=0x00;
     P0M2=0x38;                     //设置P0.3、P0.4、P0.5为仅为输入
     P1M1=0x2c;
     P1M2=0x0c;
     P2M1=0x40;                     //设置P26为开漏
     P2M2=0x40;
}
void InitTime0(void)
{
     TMOD=TMOD | 0X01;             //
     TAMOD=TAMOD | 0X00;           //定时器工作于模式1
     TH0=0X02;
     TL0=0X40;
     AUXR1=AUXR1 | 0X10;           //定时器0中断反转IO口
     TR0=0;
     ET0=0;                        //使能中断
}
void InitTime1(void)
{
     TMOD=TMOD | 0X10;             //
     TAMOD=TAMOD | 0X00;           //定时器工作于模式1
     TH1=0X00;
     TL1=0X00;
     TR1=1;
     ET1=1;                        //使能中断
}
void InitWDT(void)
{
     ACC=WDCON;                  //看门狗启动,并选择看门狗定时器作为定时
     ACC=ACC|0x84;
     WDL=0x4E;
     WDCON=ACC;
     WFEED1=0xA5;                  //喂狗
     WFEED2=0x5A;
}
void InitINT0(void)
{
     TCON=TCON | 0X00;            //外部中断0采用低电平触发中断
     EX0=1;                       //开启中断
}
void InitINT1(void)
{
	TCON=TCON | 0X00;            //外部中断1采用低电平触发中断
    EX1=1;		                 //使能外部中断
}
void Initkey(void)               //初始化键盘中断
{
    //KBPATN=0xff;               //
    KBCON=0x00; 
    KBMASK=0x38;			     //设置P0.1->P0.0为中断源
	EKBI=0;
}
void InitCclk(void)
{
     DIVM=0x00;                   //CCLK=11059200/2;
}
void InitEEPROM(void)
{
    DEECON=0x30;
    EIEE=0;
}
void InitPWM()      //使用外部12M振荡器时:CCU频率=((12000000/2)/6)*16=16000000MHz
{
    TOR2H=0x03;     //定时器重装值=CCU频率/红外线载频=16000000/38000=421=0x1a5
    TOR2L=0x4a;
    OCRAH=0x01;     //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50%
    OCRAL=0xa4;
    TCR21=0x85;     //PLL预分频为5+1
    CCCRA=1;        //非反相的PWM比较匹配时置位,在CCU定时器向下溢出时清0
    PLLEN=1;        //启动PLL
    PWM=1;
    while(PLLEN==0);
    TCR20=0x82;     // 设置输出模式,非反相PWM
}
void InitCMP(void)
{
    PT0AD=0x06;     //禁止CIN2A上的数字输入功能
    CMP2=0x28;      //0010 1000,CMP1使能,内部Ref,CIN1A
    Delay(10);	    //延迟10us,以等待比较器稳定
    CMP2&=0xFE;     //清除比较器中断标志位
    EC=1;           //比较器中断输出使能
}
void InitCpu(void)
{
    InitWDT();
	InitSeries();
	InitCpuIo();
	InitTime0();
	InitTime1();	
	InitINT0();
	InitINT1();
	InitCclk();
	Initkey();
	InitEEPROM();
	InitPWM();
	InitCMP();
}
//-----***-液晶显示驱动器初始化-***-----//

void InitLcd(void)
{
    LcdSendCommand(0x01);
    LcdSendCommand(0x29);
    LcdSendCommand(0x18);
    LcdSendCommand(0x03);
}
//-----***-时钟发生器运行初始化-***-----//
void InitRTC(void)
{
	IicByteWrite(0x64,0xe0,0x23);
    IicByteWrite(0x64,0xf0,0xa0);
}
//-----***-命令以及重要参数检验、初始化-***-----//
void InitCmd(void)
{
	unsigned char data ii;
	if((PowerStA==0x55)|(PowerStB==0xAA))
    {
        PowerStA=0x55;
        PowerStB=0xaa;
    }
    else
    {
        DIR=1;
        ClerBuf();
    	DataPickup();	
    	SeriesBufDptr=0;
    	SendOverFg=1;
    	LcdDelay=20;	
    	InfraredBufDptr=0;
    	TimeSendFg=0;
    	DataProtectFg=0;
    	InfraredBufDptr=0;
    	SeriesBufDptr=0;
    	LcdRunData=1;
    	LcdTimeFg=1;
    	ReverseFgToLcd=0;
    	ReverseFgToData=0;
    	PulseParseFg=0;
    	PowerStA=0x55;
        PowerStB=0xaa;
        ii=IicByteRead(0xa0,0x00);
        if(ii==0xff)
        {
           ii=IicByteRead(0xa0,0x80);
           if(ii==0xbb)
           {
               ii=IicByteRead(0xa0,0xf0);
               if(ii==0xff)
               {
                   IicByteWrite(0xa0,0x00,0xbb);
                   ii=IicByteRead(0xa0,0x00);
                   if(ii==0xaa)
                   {
                      IicByteWrite(0xa0,0x80,0xaa);
                      ii=IicByteRead(0xa0,0x80);
                      if(ii==0xaa)
                      {
                          IicByteWrite(0xa0,0xf0,0xaa);
                          ii=IicByteRead(0xa0,0xf0);
                          if(ii==0xaa)
                          {
                              ClerData();
                          }
                      }
                   }                   
                }
            }
        }    	
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -