完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是想控制舵机从-90转动到+90,但是仿真会每次先转会-90再转动到指定位置,求大神指点
# include #define uchar unsigned char #define uint unsigned int uint c,d,t; /*a为舵机1的脉冲宽度,b为舵机2的脉冲宽度,单位1/1000 ms */ /*c、d为中间变量*/ uint a=2500; uint b=2500; /*数值1500即对应1.5ms,为舵机的中间90度的位置*/ /*以下定义输出管脚*/ ***it p12=P2^0; ***it p13=P2^1; //***it p37=P3^7; /*以下两个函数为定时器中断函数*/ void time0_init() //定时器初始化 { TMOD=0x11; /*设初值*/ p12=1; p13=1; //a=2500; //b=2500; /*数值1500即对应1.5ms,为舵机的中间90度的位置*/ c=a;d=b; TH0=-(a/256); TL0=-(a%256); TH1=-(b/256); TL1=-(b%256); /*设定定时器初始计数值*/ EA=1; ET0=1; TR0=1;EX0=1;EX1=1; ET1=1; TR1=1; PX0=0;PX1=0;PT1=1;PT0=1;/*设定中断优先级*/ } /*定时器1,控制舵机1,输出引脚为P12,可自定义*/ void timer0(void) interrupt 1 using 1 {p12=!p12; /*输出取反*/ c=20000-c; /*20000代表20 ms,为一个周期的时间*/ TH0=-(c/256); TL0=-(c%256); /*重新定义计数初值*/ if(c>=500&&c<=2500)c=a; else c=20000-a; /*判断脉宽是否在正常范围之内*/ } /*定时器2,控制舵机2,输出引脚为P13,可自定义*/ void timer1(void) interrupt 3 using 1 {p13=!p13; d=20000-d; TH1=-(d/256); TL1=-(d%256); if(d>=500&&d<=2500)d=b; else d=20000-b; } void delay(long j) /////ms延时函数 { for(j;j>0;j--); } /*主程序*/ void main(void) { time0_init(); for(a=2500;a>500;a--) { a=a-10; c=a; delay(4000); b=b-10; d=b; delay(4000); } } |
|
相关推荐
2个回答
|
|
自己顶一下,大家帮我看看
|
|
|
|
转动之间的延时没做好。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1017 浏览 0 评论
1517 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
3282 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
976 浏览 0 评论
【原创】收藏!单片机输出4种波形的函数信号发生器毕设(Proteus仿真+原理图+源码和论文)
4461 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 14:48 , Processed in 0.748735 second(s), Total 72, Slave 58 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号