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

📄 initcpu.txt

📁 用pic单片机实现的对锂电池冲电的程序
💻 TXT
字号:
使用LPC932制作的一款电表---InitCpu
redbug 发表于 2005-10-14 16:31:00  


#i nclude <REG932.H>
#i nclude <define.h>
#i nclude <Stdio.h>
#i nclude <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=1;
}
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();
}

⌨️ 快捷键说明

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