用计时器产生PWM不难,你设置个中断,中断程序里让你输出端口的状态异或1,这样就行了啊,自己试着调试调试嘛,这样才有乐趣,拿个示波器,你想怎么弄怎么弄,反正单片机只要供电合适,轻易又搞不坏,51又便宜,拿着玩行了。你自己还可以试着设置频率,用示波器验证你算得对不对,这样做一个东西,你就会对单片机内部的一些东西有深入的了解了
/T0中断服务程序/
/PWM产生/
void time0(void) interrupt 1 using 2
{
TR0=0;//停止T0计数
TH0=0xff;//当晶振频率是12M时,每隔001ms中断一次,200次中断为PWM信号输出的周期,
TL0=0xf6;//PWM信号的频率=1000/(200001ms)=500HZ
++t_0;//产生一次中断t_0加1
ACC=t_0;//将t_0的值赋值给ACC
CY=0;//清零CY
ACC-=motor_r;//用ACC减去右边电动机的参数(此参数决定了右边电机的转向和速度)
if(CY==1)//判断CY是否置1,如果为1,说明ACC-motor_r已经为负数,置位了CY
{
IN1=1;//IN1由原来的0变成了1
IN2=0;//IN2由原来的1变成了0
goto PWM_2;
}
IN1=0;//如果CY不等于1,IN1=0,IN2=1
IN2=1;
PWM_2:
ACC=t_0;//重新将t_0的值赋值给ACC
CY=0;//清零CY
ACC-=motor_l;//用ACC减去左边电动机的参数(此参数决定了左边电机的转向和速度)
if(CY==1)//判断CY是否置1,如果为1,说明ACC-motor_l已经为负数,置位了CY
{
IN3=1;//IN3由原来的0变成了1
IN4=0;//IN4由原来的1变成了0
goto HIGHT;
}
IN3=0;//如果CY不等于1,IN3=0,IN4=1
IN4=1;
HIGHT:
//ACC=t_0; //重新将t_0的值赋值给ACC
if(t_0!=0xc8)//判断t_0的值是否不等于200
goto EXIT;//如果不等于200,程序指针指向EXIT执行程序
ACC=0;//如果t_0的值等于200,清零ACC和t_0
t_0=ACC;
EXIT:
TR0=1;//打开TO计数
}
以上就是关于pwm是什么,要怎么写程序,谢谢!全部的内容,包括:pwm是什么,要怎么写程序,谢谢!、基于51单片机。从L298使能端输入PWM信号对直流电机进行调速,这个pwm信号的汇编程序要怎么写 急求!!!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)