谁给个stc51单片机程序,能产生50Hz方波频率

如题所述

第1个回答  2015-12-26


#include<reg51.h>
#include<intrins.h>

sbit  K1 =P3^2 ;           //PWM值增加键
sbit  K2 =P3^3;            //PWM值减少键
unsigned char PWM=0x7f ;   //赋初值

void delayms(unsigned char ms);
void delay(unsigned char t);

/*********************************************************/
void main()
{  
    P1=0xff;
    TMOD=0x21 ;
    TH0=0xfc ;           //1ms延时常数
    TL0=0x66 ;           //频率调节

    TH1=PWM ;            //脉宽调节
    TL1=0 ;

EA=1;
ET0=1;
ET1=1;
    
    TR0=1 ;

   while(1)
   {
do{
    if(PWM!=0xff)
  {PWM++ ;delayms(10);}
       
  }
    while(K1==0);

do{
      if(PWM!=0x02)
    {PWM-- ;delayms(10);}
  }
    while(K2==0);
  }
}

/*********************************************************/
// 定时器0中断服务程序  (频率)
/*********************************************************/
void timer0() interrupt 1 
{  
    TR1=0 ;
    TH0=0xfc ;
    TL0=0x66 ;
    TH1=PWM ;
    TR1=1 ;
    P1=0x00 ;      //启动输出
}

/*********************************************************/
// 定时器1中断服务程序 (脉宽)
/*********************************************************/
void timer1() interrupt 3 

    TR1=0 ;
    P1=0xff ;     //结束输出
}

/*********************************************************/
// 延时子程序
/*********************************************************/  
void delay(unsigned char t)
 { 
   while(t--)   ;
 }

/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms) 

{
   unsigned char i ;
   while(ms--)
    {
      for(i = 0 ; i < 120 ; i++) ;
    }
}

/*********************************************************/

在这上面改吧。

追问

这么复杂

有简单的吗?

追答

这不复杂,你就用一个定时器就行,完了改一下定时器的值,在里面做IO状态取反,就完事了、

本回答被网友采纳
第2个回答  2020-04-09
#include <reg52.h> //调用51常规库头文件
sbit out=P1^0; //声明p1.0 I/O口作为方波输出
void main( ) //主程序
{
TMOD=0x01; //设定时器工作模式1
TH0=0xb8; //定时器初值 在主频11.0592Mhz下,约0.02秒溢出一次
TL0=0x00;
TR0=1; //启动定时器T0
while(1) //主循环
{
if(TF0==1) // 如果T0定时记录溢出
{
TF0=0; //溢出信号清零
TH0=0xb8; //重新赋予初始值
TL0=0x00; //重新赋予初始值
out=~out; //输出翻转一次,每0.02秒翻转一次0变1,1变0.即25Hz。
}
}
}