STC12C5A60S2初始化KEIL C 程序
//独立频率输出,PCA定时器 串口独立波特率 串口接收,发送
// ICL7135 AD中断测量;
void MCU_INT(void) //初始化
{
// 定时器0 icl7135 AD 外部中断0
TMOD = 0x29; // 定时器T1工作于模式1 ,定时器T0工作于模式1 控制定时器T0的启停
TR0=1; //;启动定时器T0
IT0=1; //下沿INT0中断
EX0=1; //外部中断0允许
TR1=1;
EA = 1;
// t1独立输出频率
INT0
由
AUXR=0x40; //定时器1为8051的12倍
WAKE_CLKO=0x22; //t1独立输出频率
TH1=0xfa; // 1T clkout1=(fosc/2)/(256-TH0) 3m/2/6=250k
// //PCA定时器寄存器值,50ms,6M
CCON=0x00;//
CL=0x00;
CH=0x00; // Reset PCA base timer
CMOD= 0x10;//中断使能 系统时钟 fosc/12
//time(sec) * Fosc / 12, for 50ms @ 3MHz, T_Value = 0.05 * 3000000 / 12 = 12500
T_Value0=12500;
T_PCA0 = T_Value0;
CCAP0L = T_PCA0;
CCAP0H = T_PCA0 >> 8; //Initial PCA module-0
T_PCA0 += T_Value0;
CCAPM0=0x49; //软件定时器,使能中断,pca模块0
CR=1; //启动pca
// 串口1 独立波特率发生器BRT
SCON=0x50;
PCON=0X80;
BRT= 0XF3;
AUXR|=0x11; // 允许独立波特率 独立波特率发生器作为串口1 //说明书 49页
ES=1;
//看门独
WDT_CONTR=0x3c; //说明书95页 fosc=3M 32*393216/3000000 = 4.19s
}
void Init0 (void ) interrupt 0 using 1 //外部中断0 //定时器0中断
{
uchar i;
if(ADOVER==0)
{ i++;
TR0 = 0; //定时器0关
EX0 = 0; //关中断
if(i>2)
{
ADHWHEEL=TH0;
ADLWHEEL=TL0;
ADOVER=1;
i=0;
}
TMOD = 0x29;
TR0=1; //;启动定时器T1
IT0=1; //下沿INT0中断
EX0=1; //外部中断0允许
TH0=0;
TL0=0;
}
}
void PCA_INT (void ) interrupt 7 using 2 {
CCF0=0;
CCAP0L = T_PCA0;
//PCA 定时器 50ms
CCAP0H = T_PCA0 >> 8;
T_PCA0 += T_Value0;
led2=~led2;
}
void Send_UART(uchar senddata) {
ES=0;
TI=0;
SBUF=senddata;
while(TI==0);
TI=0;
ES=1;
}
//独立波特率发生
void UART_INT(void) interrupt 4 using 3 //串口接收中断
{
uchar i;
if(RI==1)
{
i=SBUF;
Send_UART(i);
RI=0;
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容