?? initcpu.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 + -