欢迎来到天天文库
浏览记录
ID:55510190
大小:245.50 KB
页数:7页
时间:2020-05-15
《【51单片机】控制8路舵机源程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.仿真截图://仿真文件网盘地址:pan.baidu./s/1ntLqf3N//程序:#includesbitPWM0=P1^0;sbitPWM1=P1^1;sbitPWM2=P1^2;sbitPWM3=P1^3;sbitPWM4=P1^4;sbitPWM5=P1^5;sbitPWM6=P1^6;sbitPWM7=P1^7;sbitADD=P3^6;sbitSUB=P3^7;#defineucharunsignedchar#defineuintunsignedintuintt_up0=1500;//舵机PWM高电平时间1000~2000表示1ms到2ms
2、uintt_up1=1500;uintt_up2=1500;uintt_up3=1500;..uintt_up4=1500;uintt_up5=1500;uintt_up6=1500;uintt_up7=1500;uintt0_h;uintt0_l;voiddelayms(uintms){unsignedchara,b,c;while(ms--){for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}}voidtimer_init(){EA=1;ET0=1;PT0=1;TMOD=0x11;TH0=(65536-t_up0)
3、/256;TL0=(65536-t_up0)%256;}uchart0_flag=0;uintnum_max=65535;//直接用65535-t_up不用变量-t_up时,误差较大,原因暂时不明【注:65536不能存到uint类型变量中】uintt_change=63036;//换路周期2.5ms8路ucharerror0=45;ucharerror1=45;ucharerror2=52;ucharerror3=52;ucharerror4=57;ucharerror5=57;ucharerror6=63;ucharerror7=63;ucharerror8=70;uc
4、harerror9=70;..ucharerror10=76;ucharerror11=76;ucharerror12=82;ucharerror13=82;ucharerror14=88;ucharerror15=88;voidtimer0()interrupt1{if(t0_flag==0){PWM0=1;TH0=(num_max-t_up0+error0)/256;//+?是为了抵消执行语句花的时间TL0=(num_max-t_up0+error0)%256;t0_flag=1;}elseif(t0_flag==1){PWM0=0;TH0=(t_change+t_u
5、p0+error1)/256;TL0=(t_change+t_up0+error1)%256;t0_flag=2;}elseif(t0_flag==2){PWM1=1;TH0=(num_max-t_up1+error2)/256;//+?是为了抵消执行语句花的时间TL0=(num_max-t_up1+error2)%256;t0_flag=3;}elseif(t0_flag==3){PWM1=0;TH0=(t_change+t_up1+error3)/256;TL0=(t_change+t_up1+error3)%256;t0_flag=4;}elseif(t0_flag
6、==4){..PWM2=1;TH0=(num_max-t_up2+error4)/256;//+?是为了抵消执行语句花的时间TL0=(num_max-t_up2+error4)%256;t0_flag=5;}elseif(t0_flag==5){PWM2=0;TH0=(t_change+t_up2+error5)/256;TL0=(t_change+t_up2+error5)%256;t0_flag=6;}elseif(t0_flag==6){PWM3=1;TH0=(num_max-t_up3+error6)/256;//+?是为了抵消执行语句花的时间TL0=(num_m
7、ax-t_up3+error6)%256;t0_flag=7;}elseif(t0_flag==7){PWM3=0;TH0=(t_change+t_up3+error7)/256;TL0=(t_change+t_up3+error7)%256;t0_flag=8;}elseif(t0_flag==8){PWM4=1;TH0=(num_max-t_up4+error8)/256;//+?是为了抵消执行语句花的时间TL0=(num_max-t_up4+error8)%256;t0_flag=9;}elseif(t0_flag==9
此文档下载收益归作者所有