基于51单片机。从L298使能端输入PWM信号对直流电机进行调速,这个pwm信号的汇编程序要怎么写? 急求!!!

2024年11月18日 23:28
有2个网友回答
网友(1):

/*********T0中断服务程序*****************/
/*********PWM产生***********************/
void time0(void) interrupt 1 using 2
{
TR0=0;//停止T0计数
TH0=0xff;//当晶振频率是12M时,每隔0.01ms中断一次,200次中断为PWM信号输出的周期,
TL0=0xf6;//PWM信号的频率=1000/(200*0.01ms)=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计数
}

网友(2):

void time0(void) interrupt 1 using 2
{
TR0=0;//停止T0计数
TH0=0xff;//当晶振频率是12M时,每隔0.01ms中断一次,200次中断为PWM信号输出的周期,
TL0=0xf6;//PWM信号的频率=1000/(200*0.01ms)=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计数
}