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

STC89C51,单片机C语言程序,P10输出PWM方波,频率100HZ,初始占空比10,要求可以用串口输出占空比并实现在方波上,直接要源程序谢谢... STC 89C51,单片机C语言程序,P10输出PWM方波,频率100HZ,初始占空比10,要求可以用串口输出占空比并实现在方波上,直接要源程序谢谢 展开
 我来答
Handsome灬橙子
2018-05-05 · TA获得超过197个赞
知道小有建树答主
回答量:90
采纳率:77%
帮助的人:41.8万
展开全部

串口还是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);

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式