完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用串口发送命令控制开发板上的步进电机,但是没反应,请大家帮忙看看。下面是程序:
/*----------------------------------------------- 名称:四相五线步进电机的PC机简单控制 ------------------------------------------------*/ #include ***it WELA=P2^7;//数码管位选锁存器信号 unsigned char k; unsigned char code F_Rotation[4]={0x20,0x10,0x08,0x04}; //正转表格,换算成二进制 0010 0000,0001 0000,0000 1000,0000 0100 unsigned char code B_Rotation[4]={0x04,0x08,0x10,0x20}; //反转表格,换算成二进制 0000 0100,0000 1000,0001 0000,0010 0000 /******************************************************************/ /* 延时函数 */ /******************************************************************/ void Delay(unsigned int i)//延时 { while(--i); } void delay1(unsigned int xms) { unsigned int a,b; for(a=110;a>0;a--) for(b=xms;b>0;b--); } /******************************************************************/ /* 串口初始化 */ /******************************************************************/ void init_serial() { TMOD=0x20; //定时器1方式2 自动重装模式 TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; //串口中断允许; SM1=1; REN=1; ES=1; // 开串口中断 EA=1; //总中断允许 PCON=0x80; //设置SMOD=1 速率翻倍 } /******************************************************************/ /* 正转 */ /******************************************************************/ void clockwise() { unsigned char i; for(i=0;i<4;i++) //4相 { P0=F_Rotation[i]; //输出对应的相 可以自行换成反转表格 Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 } } /******************************************************************/ /* 反转 */ /******************************************************************/ void cclockwise() { unsigned char i; for(i=0;i<4;i++) //4相 { P0=B_Rotation[i]; //输出对应的相 可以自行换成反转表格 Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 } } /******************************************************************/ /* 接收处理函数 */ /******************************************************************/ void dwith() { if(k=='w') {delay1(10);clockwise();} else if(k=='s') {delay1(10);cclockwise();} } /******************************************************************/ /* 主函数 */ /******************************************************************/ main() { init_serial(); P0=0XFF;//关掉数码管的位选信号。阻止数码管受到P0口信号的影响。 Delay(500); WELA=1; Delay(500); WELA=0; while(1) { dwith(); } } void ser_inter() interrupt 4 { while(!RI); k=SBUF; RI=0; } |
|
相关推荐
2个回答
|
|
各位,解决了! 原来是波特率设置的问题,嘿嘿!真的是粗心了!把SMOD设置为1了 然后串口调试工具却没有做相应的更改。
|
|
|
|
这个要顶顶阿。。。同求
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 17:54 , Processed in 1.086592 second(s), Total 70, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号