STC 89C51,单片机C语言程序,P10输出PWM方波
STC89C51,单片机C语言程序,P10输出PWM方波,频率100HZ,初始占空比10,要求可以用串口输出占空比并实现在方波上,直接要源程序谢谢...
STC 89C51,单片机C语言程序,P10输出PWM方波,频率100HZ,初始占空比10,要求可以用串口输出占空比并实现在方波上,直接要源程序谢谢
展开
1个回答
展开全部
串口还是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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询