logo资料库

用L298控制直流电机加减速的89c51单片机C程.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
求个用 L298 控制直流电机加减速的 89c51 单片机 C 程序 悬赏分:20 - 提问时间 2009-5-21 11:56 毕业设计用 其他回答 共 3 条 可没多少克里夫南大门 去查查 PWM,你就会做了 提问者: gefayb - 试用期 一级 回答者: 741302658 - 试用期 一级 2009-5-21 18:32 回答者: cc3000c - 魔法学徒 一级 2009-5-22 18:51 #include #include #define uchar unsigned char #define uint unsigned int sbit en1=P3^0; /* L298 的 Enable A */ sbit s1=P3^2; /* L298 的 Input 1 */ sbit s2=P3^3; /* L298 的 Input 2 */ uchar t=0; /* 中断计数器 */ uchar m1=0; /* 电机 1 速度值 */ uchar tmp1; /* 电机当前速度值 */ /* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */ void motor(uchar index, char speed) { if(speed>=-100 && speed<=100) { if(index==1) /* 电机 1 的处理 */ { m1=abs(speed); /* 取速度的绝对值 */ if(speed<0) /* 速度值为负则反转 */ { s1=0; s2=1; } else /* 不为负数则正转 */ { s1=1; s2=0; } }
} } void delay(uint j) /* 简易延时函数 */ { for(j;j>0;j--); } void main() { uchar i; TMOD=0x02; /* 设定 T0 的工作模式为 2 */ TH0=0x9B; /* 装入定时器的初值 */ TL0=0x9B; EA=1; /* 开中断 */ ET0=1; /* 定时器 0 允许中断 */ TR0=1; /* 启动定时器 0 */ while(1) /* 电机实际控制演示 */ { for(i=0;i<=100;i++) /* 正转加速 */ { motor(1,i); delay(5000); } for(i=100;i>0;i--) /* 正转减速 */ { motor(1,i); delay(5000); } for(i=0;i<=100;i++) /* 反转加速 */ { motor(1,-i); delay(5000); } for(i=100;i>0;i--) /* 反转减速 */ { motor(1,-i); delay(5000); } } }
void timer0() interrupt 1 /* T0 中断服务程序 */ { if(t==0) /* 1 个 PWM 周期完成后才会接受新数值 */ { tmp1=m1; } if(t=100) t=0; /* 1 个 PWM 信号由 100 次中断产生 */ }
分享到:
收藏