實現(xiàn)方法:運用PWM輸出功能輸出一定頻率(F)的脈沖,在一定的時間、以一定的頻率輸出的脈沖個數(shù)是確定的。所以根據(jù)所要輸出的脈沖個數(shù)(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(xiàn)=12M/2/256
所需要中斷的次數(shù)(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產(chǎn)生
CCAP0H = CCAP0L = pwm_num; //占空比
CCAPM0 = 0x42; //脈寬調(diào)節(jié)模式
}
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;
}
}