STC 89C51,单片机C语言程序,P10输出PWM方波

STC 89C51,单片机C语言程序,P10输出PWM方波,频率100HZ,初始占空比10,要求可以用串口输出占空比并实现在方波上,直接要源程序谢谢

串口还是P10?我下面贴出P10输出PWM的产生代码,希望对你能有帮助。

#include <reg51.h>
# t  10000/100   //修改10000更改周期 单位us  T(us)=10^6/f(hz) 至少10000us
# Duty_cycle 10 ///更改此更改占空比  0-100

unsigned char percent=0;
sbit work_pin P1^0;

void Timer0Init()  //定时器0初始化
{

TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0xff;
TL0=0x9c;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}


void  PWM_work()   interrupt 1   
{
TH0=0xff;
TL0=0c9c;  
percent++;
if(percent<=Duty_cycle*t/100)
{
work_pin=1;
if(percent>t)   percent=0;
}
else work_pin=0;
      

}


void main()
{
Timer0Init();
while(1);
}

追问

是从皮口输出波,但是可以在电脑上用串口更改占空比

追答#include <reg51.h>
# t  10000/100   //修改10000更改周期 单位us  T(us)=10^6/f(hz) 至少10000us

 
unsigned char percent=0;
sbit work_pin P1^0;
 
void Timer0Init()  //定时器0初始化
{
 
    TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
 
    TH0=0xff;  
    TL0=0x9c;  
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器          
}
 
 
void  PWM_work()   interrupt 1   
{   unsigned char Duty_cycle;
    Duty_cycle=SBUF;
    TH0=0xff;  
    TL0=0c9c;  
    percent++;
    if(percent<=Duty_cycle*t/100)
    {
    work_pin=1;
    if(percent>t)   percent=0;
    }
    else work_pin=0;
           
 
}
 
 


void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}

void Usart() interrupt 4
{
u8 receiveData;

receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI);  //等待发送数据完成
TI=0;  //清除发送完成标志位
}



void main()
{
UsartInit();
Timer0Init();
while(1);

}

追问

是从皮口输出波,但是可以在电脑上用串口更改占空比

不行不成功

追答

正常应该是可以的,有什么现象吗?

温馨提示:答案为网友推荐,仅供参考
相似回答