找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2031|回复: 0
打印 上一主题 下一主题
收起左侧

基于STC12单片机的16路舵机控制源程序

[复制链接]
跳转到指定楼层
楼主
ID:635836 发表于 2019-11-5 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基本思路为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)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表