标题:
基于STC12单片机的16路舵机控制源程序
[打印本页]
作者:
Tera
时间:
2019-11-5 10:53
标题:
基于STC12单片机的16路舵机控制源程序
基本思路为pca用于产生50hz脉冲,两个定时器分别控制8个舵机
单片机源程序如下:
#include"STC12C5A60S2.h" //@12Mhz
#include<intrins.h>
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u16 time;//PCA counts 20ms
u8 pwm_turn[2]={0,0};
u8 data1[8]={1500,1500,1500,1500,1500,1500,1500,1500};
u8 data2[8]={1500,1500,1500,1500,1500,1500,1500,1500};
void sys_init()
{
P0M0=0xff;
P2M0=0xff;
time=20000;
CCON=0;
CL=0;
CH=0;
CMOD=0x00;
CCAP0L=time;
CCAP0H=time>>8;
CCAPM0=0x49;
CR=1;
TMOD|=0X11;
TH0=0XFE;
TL0=0X0C;
TH1=0XFC;
TL1=0X18;
ET0=1;//打开定时器0中断允许
ET1=1;//打开定时器1中断允许
EA=1;
}
void main()
{
int j,k;
for(j=0;j<100;j++)
for(k=0;k<100;k++);
sys_init();
while(1);
}
void Timer0() interrupt 1
{
if(pwm_turn[0]>8)
{
pwm_turn[0]=0;
TR0=0;
P0=0;
}
else
{
pwm_turn[0]++;
P0<<=1;
}
TH0=(65536-data1[pwm_turn[0]])>>8;
TL0=(65536-data1[pwm_turn[0]])%256;
}
void Timer1() interrupt 3
{
if(pwm_turn[1]>8)
{
pwm_turn[1]=0;
TR1=0;
P2=0;
}
else
{
pwm_turn[1]++;
P2<<=1;
}
TH1=(65536-data2[pwm_turn[1]])>>8;
TL1=(65536-data2[pwm_turn[1]])%256;
}
void PCA() interrupt 7
{
CCF0=0;
TR0=1;//打开定时器
TR1=1;//打开定时器
P0=0x01;
P2=0x01;
time+=20000;
CCAP0L=time;
CCAP0H=time>>8;
}
复制代码
所有资料51hei提供下载:
Text1.rar
(673 Bytes, 下载次数: 15)
2019-11-5 10:52 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1