单片机控制舵机程序,用的是原字的定时器中断实验改的
单片机源程序如下:
- #include "pwm.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- u8 JD=0;
- u32 a0,a1;
- u8 flag1=0,flag2=0;//定时器计数20ms到了的标志
- int main(void)
- {
- u16 t1=0,t2=0;
- u8 YS[6]={0,60,120,180,120,60};
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为115200
- PWM_Init(); //LED端口初始化
- TIM3_Int_Init(9,71);//10us
- // t1=(t1/180)*2000;
- while(1)
- {/*
- PWM0=1;
- delay_us(500+t1);//延时
- PWM0=0;
- delay_ms(20);//延时
- */
- // if(flag1==1)
- // {
- // flag1=0;
- // t2++;
- // if(t2==50)
- // JD=60;
- // if(t2==100)
- // JD=120;
- // if(t2==150)
- // JD=180;
- // if(t2==200)
- // JD=120;
- // if(t2==250)
- // JD=60;
- // if(t2==300)
- // {
- // JD=0;
- // t2=0;
- // }
- // }
- if(flag2==1)
- {
- flag2=0;
- JD=YS[t2];
- t2++;
- if(t2>=6)
- {
- t2=0;
- }
- }
- }
- }
-
-
- //定时器3中断服务程序
- void TIM3_IRQHandler(void) //TIM3中断
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
- {
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
- a0++;a1++;
- /*************PWM0**************/
- if(a0==(50+JD))
- {
- PWM0=0;
- }
- if(a0>=2000)
- {
- a0=0;
- PWM0=1;
- flag1=1;
- }
- if(a1>=100000)
- {
- a1=0;
- flag2=1;
- }
- }
- }
复制代码
所有代码51hei提供下载:
舵机程序.7z
(184.97 KB, 下载次数: 18)
|