标题: 基于STC12单片机的16路舵机控制源程序 [打印本页]

作者: Tera    时间: 2019-11-5 10:53
标题: 基于STC12单片机的16路舵机控制源程序
基本思路为pca用于产生50hz脉冲,两个定时器分别控制8个舵机

单片机源程序如下:
  1. #include"STC12C5A60S2.h" //@12Mhz
  2. #include<intrins.h>
  3. typedef unsigned int u16;          //对数据类型进行声明定义
  4. typedef unsigned char u8;

  5. u16 time;//PCA counts 20ms
  6. u8 pwm_turn[2]={0,0};
  7. u8 data1[8]={1500,1500,1500,1500,1500,1500,1500,1500};
  8. u8 data2[8]={1500,1500,1500,1500,1500,1500,1500,1500};

  9. void sys_init()
  10. {
  11.         P0M0=0xff;
  12.         P2M0=0xff;
  13.        
  14.         time=20000;
  15.         CCON=0;
  16.         CL=0;
  17.         CH=0;
  18.         CMOD=0x00;
  19.         CCAP0L=time;
  20.         CCAP0H=time>>8;
  21.         CCAPM0=0x49;
  22.         CR=1;
  23.        
  24.         TMOD|=0X11;
  25.         TH0=0XFE;
  26.         TL0=0X0C;
  27.         TH1=0XFC;
  28.         TL1=0X18;       
  29.         ET0=1;//打开定时器0中断允许       
  30.         ET1=1;//打开定时器1中断允许
  31.        
  32.         EA=1;
  33. }

  34. void main()
  35. {
  36.         int j,k;
  37.         for(j=0;j<100;j++)
  38.         for(k=0;k<100;k++);
  39.         sys_init();
  40.         while(1);
  41. }
  42. void Timer0() interrupt 1
  43. {       
  44.         if(pwm_turn[0]>8)
  45.         {
  46.                 pwm_turn[0]=0;
  47.                 TR0=0;
  48.                 P0=0;
  49.         }
  50.         else
  51.         {
  52.                 pwm_turn[0]++;
  53.                 P0<<=1;
  54.         }
  55.         TH0=(65536-data1[pwm_turn[0]])>>8;
  56.         TL0=(65536-data1[pwm_turn[0]])%256;
  57. }
  58. void Timer1() interrupt 3
  59. {
  60.         if(pwm_turn[1]>8)
  61.         {
  62.                 pwm_turn[1]=0;
  63.                 TR1=0;
  64.                 P2=0;
  65.         }
  66.         else
  67.         {
  68.                 pwm_turn[1]++;
  69.                 P2<<=1;
  70.         }
  71.         TH1=(65536-data2[pwm_turn[1]])>>8;
  72.         TL1=(65536-data2[pwm_turn[1]])%256;
  73. }
  74. void PCA() interrupt 7
  75. {
  76.         CCF0=0;
  77.         TR0=1;//打开定时器
  78.         TR1=1;//打开定时器
  79.         P0=0x01;
  80.         P2=0x01;
  81.         time+=20000;
  82.         CCAP0L=time;
  83.         CCAP0H=time>>8;       
  84. }
复制代码

所有资料51hei提供下载:
Text1.rar (673 Bytes, 下载次数: 15)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1