ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:18.25KB ,
资源ID:4148354      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4148354.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(L298控制直流电机加减速的89c51单片机C程序.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、L298控制直流电机加减速的89c51单片机C程序L298控制直流电机加减速的89c51单片机C程序#include #include #define uchar unsigned char #define uint unsigned int sbit en1=P30; /* L298的Enable A */ sbit s1=P32; /* L298的Input 1 */ sbit s2=P33; /* L298的Input 2 */ uchar t=0; /* 中断计数器 */ uchar m1=0; /* 电机1速度值 */ uchar tmp1; /* 电机当前速度值 */ /* 电机控

2、制函数 index-电机号(1,2); speed-电机速度(-100100) */ void motor(uchar index, char speed) if(speed=-100 & speed=100) if(index=1) /* 电机1的处理 */ m1=abs(speed); /* 取速度的绝对值 */ if(speed0;j-); void main() uchar i; TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值 */ TL0=0x9B; EA=1; /* 开中断 */ ET0=1; /* 定时器0允许中断 */ TR

3、0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示 */ for(i=0;i0;i-) /* 正转减速 */ motor(1,i); delay(5000); for(i=0;i0;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次中断产生 */ 本程序实现串口对直流电机的控制*/#include #include

4、#define uchar unsigned char#define uint unsigned int/*/define a status world which sended back to computer#define COMMAND_STATUS 0#define STATUS_LEFT 1#define STATUS_RIGHT 2#define STATUS_SAFETYL 4 #define STATUS_SAFETYR 8 #define COMMAND_LEFT 1/Turn left #define COMMAND_RIGHT 2/Turn right#define CO

5、MMAND_STOP 3#define COMMAND_SPEED 4#define STOP 0#define LEFT 1#define RIGHT 2#define A_OUTPUT_ENABLEP3_4/输出使能#define B_OUTPUT_ENABLE P3_5#define MotorA 1#define MotorB 2#define motorA_r P1_7#define motorA_l P1_6#define motorB_r P1_5#define motorB_l P1_4/* 全局变量定义*/uchar motor, command, cmddata; /* U

6、sed to receive commands with rs232 */uchar bytenr=0; /*Used to record how many byte we will receive*/uchar Cycle=100;uchar directionA=0; /* current rotating direction */uchar directionB=0;uchar PWidthA=50;uchar PWidthB=50;uint speedA=0; /* Default speed */uint speedB=0;uchar ticks=0; /* counter used

7、 for speed calculation */uchar serialtimeout=0; /* used when windows crashes ;-) */*/funtion name:void Timer0_Int (void)/*/void Timer0_Int (void) interrupt 1 using 1serialtimeout+; / Ignore all received bytes after about 2 secondsif (!serialtimeout)bytenr=0; P3_7= P3_7; / invert P3.7, nice for debug

8、ging ticks+; if(ticks=Cycle) ticks=0;if(ticks 2) bytenr=0; /reset byte counter / motor should always be zero */ if(motor=MotorA) switch (command) /* command handler */ case COMMAND_STOP: directionA=0; break; case COMMAND_LEFT: /turn left directionA=1; break; case COMMAND_RIGHT: /turn right direction

9、A=2; break; case COMMAND_SPEED: /改变速度 speedA=cmddata; if(speedA1) /保证脉宽不会太窄 PWidthA=speedA; break; else if(motor=MotorB) switch (command) /* command handler */ case COMMAND_STOP: directionB=0; break; case COMMAND_LEFT: /turn left directionB=1; break; case COMMAND_RIGHT: /turn right directionB=2; bre

10、ak; case COMMAND_SPEED: /改变速度 speedB=cmddata; if(speedB1) /保证脉宽不会太窄 PWidthA=speedB; break; /* serial initil*/void Init_serialCOM(void) SCON = 0x50 ; /SCON: serail mode 1, 8-bit UART, enable REN TMOD |= 0x20 ; /TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80 ; /SMOD=1; Baud*2 TH1 = 0xF4 ; /Baud:4800

11、 fosc=11.0592MHz TL1 =0xF4; EA=1 ; /Enable Serial Interrupt ES=1; TR1 = 1 ; / timer 1 run /* seting timer0*/void Set_Timer0(void) TMOD &= 0xf0;/* Set timer 0 */TMOD |= 0x01;/* set timer 0 as Gate=0 Timer, mode 1 */TH0 = 0xff; /* Timint 10ms */TL0 = 0x00;TR0 = 1; /* Enable timer 0 */ET0 = 1; /* Enabl

12、e timer 0 interrupt */EA=1; /* Enable all enabled interrupts */* Main loop*/void main (void)Init_serialCOM();/serial initionSet_Timer0(); /int modeSendChar(PWidthA);SendChar(PWidthB);/A_OUTPUT_ENABLE=1;B_OUTPUT_ENABLE=1; /forbid output while (1) ; /here can add some user code 大家来讨论下L298是怎么驱动直流电机的为什么

13、我用单片机的I/O控制L298的IN1,IN2 ,ENA 直流减速电机不转动呢? 而直接在上面加H/L电平却能控制呢 ?是不是L298又什么要求,我还不知道.,不过我用仿真软件跑的很好 请高手帮忙诊断下,谢谢程序如下:#includesbit P1_1=P11;/ENA 左使能 sbit P1_2=P12;/IN1sbit P1_3=P13;/IN2sbit P1_4=P14;/ENB 右使能sbit P1_5=P15; /IN3sbit P1_6=P16; /IN4sbit P2_0=P20;/前进sbit P2_1=P21;/后退sbit P2_2=P22; /左转sbit P2_3=P2

14、3; /右转#define ENA P1_1#define IN1 P1_2#define IN2 P1_3#define ENB P1_4#define IN3 P1_5#define IN4 P1_6unsigned int i,k=0;void int_tmer0 ();void forwoard();void backwoard();void left();void right();void stop();void init();void int_tmer0 () interrupt 1 i+;TH0=0x3C;TL0=0xB0;if(i=100)i=0; switch(k+) case 0: P2_0=1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1