完成办法:运用PWM输出功用输出必定频率(F)的脉冲,在必定的时刻、以必定的频率输出的脉冲个数是确认的。所以依据所要输出的脉冲个数(PlusCount)能够确认输出脉冲的时刻(TImePlus)。
TImePlus=PlusCount/F;
守时咱们选用T0的工作方法3,即主动重装形式。
EA=1
TMOD=0x02;//主动重装形式
AUXR = 0x80;//T0 为12T形式
TH0=TL0=256;
void TImer0() interrupt 1
{
TImeCount++;
if(TimeCount==InitCount)
{
CR = TR0=0;//中止T00; // PLUS STOP
TimeCount=0;
}
}
因而,中止一次的时刻(T)为:256us
脉冲输出方法为:SYSclk/2
因而,F=12M/2/256
所需求中止的次数(InitCount)为,
InitCount=TimeCount/T
=PlusCount/F/T = PlusCount/12M/2/256/256us = PlusCount/6
源代码如下:
#include“stc12cxx.h”
#include “intrins.h”
#define uchar unsigned char
#define uint unsigned int
unsigned long TimeCount=0,InitCount;
void Init()//初始化子程序
{EA=1;
ET0=1;
P1M0 = 0xff;
P1M1 = 0xff; //Set all P1 as Open-Drain mode
TMOD=0x02;//主动重装形式
AUXR = 0x00;//T0 为12T形式
TH0=TL0=256;
}
void PWM_heat(uchar pwm_num)
{
CCON = 0;
CL = 0;
CH = 0;
//CMOD = 0x00; //SYSclk/12
CMOD = 0x02; //SYSclk/2
//CMOD = 0x04; //T0发生
CCAP0H = CCAP0L = pwm_num; //占空比
CCAPM0 = 0x42; //脉宽调理形式
}
void PulsOut(unsigned long PulsCount)
{
InitCount =PulsCount/6;//(PulsCount/23435)*4000;
PWM_heat(0x7f);
TR0=CR = 1; //发动1;//发动T0
}
void main()
{
Init();
PulsOut(234500);
while (1);
{
}
}
void Timer0() interrupt 1
{
TimeCount++;
if(TimeCount==InitCount)
{
CR = TR0=0;//中止T00; // PLUS STOP
TimeCount=0;
}
}
来历;21ic