嵌入式 > 技术百科 > 详情

STC12C系列单片机输出固定脉冲个数

发布时间:2025-09-19 发布时间:
|

实现方法:运用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;
  
   }
}


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
家庭网络:从带宽共享走向内容共享