采用12C2052AD的一氧化碳浓度报警程序(中)
- UID
- 852722
|
采用12C2052AD的一氧化碳浓度报警程序(中)
/*****************主程序***********************************************************/
Void Main()
{
Uint A=0;
PWM=1;
Pwm();
Delayms(1000);//延时
InitADC();
Contrl=0;
Delayms(600);
Ceshi();
Delayms(600);
Sound=0;
OK=1;
BAOJING=1;
START=0;
Contrl=1;//初次开机要先加热一分钟以上。在这里等待一分钟
Wei1=0;//开启显示 数码管,做指示用
For(A=0;A<53;A++)
{
Delayms(1000);
ADC(6);
Sendchar();
}
Wei1=1;
Contrl=0;//关闭5V,成为1.5V低电平加热90S
Wei2=0;
For(A=0;A<80;A++)
{
Delayms(1000);
}
Wei2=1;
A=0;
While(1)
{
ADC(6);
Contrl=0;
Run_t0();
If(START)
{
Delayms(5);
}
A++;
If(A==6235)
{
A=0;
Sendchar();
}
}
}
//
Void Run_t0()
{
Cnt=0;
High=1;//首次启动加热5V高电平。标志位置1
Low=0;//低电平1.5V加热标志
TMOD=0x01;
TH0=-(50000/256);
TL0=-(50000%256);
ET0=1;
EA=1;
Contrl=1;//首次启动定时开启5V
TR0=1;
}
//
Void Time0() Interrupt 1//Using **
{
Cnt++;
TR0=0;
If((Cnt==120)&&High) //5V加热达到60S,这里加括号为了阅读方便。但是有时候要注意优先级。==比&就高得多
{
TR0=0;
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
If((Cnt==600)&&High) //5V加热达到60S,这里加括号为了阅读方便。但是有时候要注意优先级。==比&就高得多
{
TR0=0;
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
If((Cnt==1200)&&High) //5V加热达到60S,这里加括号为了阅读方便。但是有时候要注意优先级。==比&就高得多
{
TR0=0;
Contrl=0;//开启1.5V,即关闭5V
Cnt=0;
High=0;//停止加热高5V后清标志位
Low=1;
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
If((Cnt==180)&&Low)//1.5V加热达到90S
{
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
If((Cnt==1000)&&Low)//1.5V加热达到90S
{
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
If((Cnt==1800)&&Low)//1.5V加热达到90S
{
Contrl=1;//开启5V
Cnt=0;
Low=0;
High=1;//
TH0=-(50000/256);
TL0=-(50000%256);
ADC(6);
}
TR0=1;
}
//
Void Pwm()
{
CR=0;
START=0;
//PCA模块工作于PWM模式 C程序
CMOD = 0x02; //用定时器0溢出做PCA脉冲
CL = 0x00; //PCA定时器低8位 地址:E9H
CH = 0x00; //PCA高8位 地址 F9H
CCON=0x00;
CCAP0L = TimeL; //PWM模式时他俩用来控制占空比
CCAP0H = TimeH; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
CCAPM0 = 0x42; //0100,0010 Setup PCA Module 0 In PWM Mode
// ECOM0=1使能比较 PWM0=1 使能CEX0脚用作脉宽调节输出
/*********************
PCA 模块工作模式设置 (CCAPMn 寄存器 N= 0-3四种)
7 6 5 4 3 2 1 0
- ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
选项: 0x00 无此操作
0x20 16位捕捉模式,由 CEXn上升沿触发
0x10 16位捕捉模式,由CEXn下降沿触发
0x30 16位捕捉模式,由CEXn的跳变触发
0x48 16位软件定时器
0x4c 16位高速输出
0x42 8位PWM输出
每个PCA模块另外还对应两个寄存器:CCAPnH和CCAPnL 。 捕获或者比较时,它们用来
保存16位计数值,当工作于PWM模式时,用来控制占空比
*******************************/
CR=1; //Start PCA Timer.
} |
|
|
|
|
|