欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)超高精度6路舵機(jī)控制源程序
[打印本頁]
作者:
轉(zhuǎn)正の茂茂
時(shí)間:
2018-4-6 22:29
標(biāo)題:
51單片機(jī)超高精度6路舵機(jī)控制源程序
51控制多路舵機(jī)
單片機(jī)源程序如下:
#include <reg52.h> //包含單片機(jī)寄存器的頭文件
#define uchar unsigned char
#define uint unsigned int
P0M1=0X00;
P0M0=0XFF;//設(shè)置P0 為強(qiáng)推挽輸出
sbit servo0=P0^0;
sbit servo1=P0^1;
sbit servo2=P0^2;
sbit servo3=P0^3;
sbit servo4=P0^4;
sbit servo5=P0^5;
sbit servo6=P0^6;
sbit servo7=P0^7;
uchar serVal[2];
uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(實(shí)際是1382.4,取整得1382)
uchar pwm_flag=0;
uint code ms0_5Con=461; //0.5ms計(jì)數(shù) (實(shí)際是460.8,取整得461)
uint code ms2_5Con=2304; //2.5ms計(jì)數(shù)
/********************************************************************
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
***********************************************************************/
void Com_Init()
{
TMOD |= 0x20; //用定時(shí)器設(shè)置串口波特率
TH1=0xFD; //256-11059200/(32*12*9600)=253 (FD)
TL1=0xFD;//同上
TR1=1;//定時(shí)器1開關(guān)打開
REN=1; //開啟允許串行接收位
SM0=0;//串口方式,8位數(shù)據(jù)
SM1=1;//同上
EA=1; //開啟總中斷
ES=1; //串行口中斷允許位
}
/********************************************************************
* 功能 : 舵機(jī)PWM中斷初始化
***********************************************************************/
void Timer0Init()
{
//0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
//2.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)
TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH0=-ms2_5Con>>8; //給定初值,17ms中斷
TL0=-ms2_5Con;
EA=1; //總中斷打開
ET0=1; //定時(shí)器0中斷打開
TR0=1; //定時(shí)器0開關(guān)打開
}
/********************************************************************
* 功能 : 舵機(jī)PWM中斷, //舵機(jī)控制函數(shù) 周期為20ms 一個(gè)循環(huán)20MS = 8*2.5ms
***********************************************************************/
void SteeringGear() interrupt 1
{
switch(pwm_flag)
{
case 1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
case 3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;
case 5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
case 7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
case 9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
case 13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;
case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;
case 15: servo7=1;TH0=-pwm[7]>>8; TL0=-pwm[7]; break;
case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
default: TH0=0xff; TL0=0x80; pwm_flag=0;
}
pwm_flag++;
}
void SetSteeringGear(uchar i, uchar val)
{
uint a = (val+46)*10;
if(a<ms0_5Con)
a=ms0_5Con;
if(a>ms2_5Con)
a=ms2_5Con;
pwm[i]=a;
serVal[0]=255; //清除緩存
}
void SteeringGearUp(uchar i)
{
if(pwm[i]>ms0_5Con)
pwm[i]=pwm[i]-10;
}
void SteeringGearDown(uchar i)
{
if(pwm[i]<ms2_5Con)
pwm[i]=pwm[i]+10;
}
/********************************************************************
* 功能 : 串口中斷接收數(shù)據(jù)
***********************************************************************/
void ser() interrupt 4
{
serVal[0]=serVal[1];
serVal[1]=SBUF;
RI=0;//串口中斷清0
}
/*********************************************************************************
** 函數(shù)功能 : 主函數(shù)
*********************************************************************************/
void main()
{
bit started=0; //路由是否已經(jīng)啟動(dòng)完畢
Com_Init();//串口初始化
Timer0Init();//舵機(jī)初始化
while(1)
{
if(serVal[0]=='w' && serVal[1]=='d'){
started=1; //路由啟動(dòng)最后會(huì)出現(xiàn):ar71xx-wdt,由此判斷路由已經(jīng)啟動(dòng)
}
if(started)
{
if(serVal[0]==0){
switch(serVal[1])
{
case 'A': SteeringGearUp(0); break;
case 'B': SteeringGearDown(0); break;
case 'C': SteeringGearUp(1); break;
case 'D': SteeringGearDown(1); break;
case 'E': SteeringGearUp(2); break;
case 'F': SteeringGearDown(2); break;
case 'G': SteeringGearUp(3); break;
case 'H': SteeringGearDown(3); break;
case 'I': SteeringGearUp(4); break;
case 'J': SteeringGearDown(4); break;
case 'K': SteeringGearUp(5); break;
case 'L': SteeringGearDown(5); break;
default:break;
}
serVal[0]=255; //清除緩存
}else if(serVal[0]==1){
SetSteeringGear(0,serVal[1]);
}else if(serVal[0]==2){
SetSteeringGear(1,serVal[1]);
}else if(serVal[0]==3){
SetSteeringGear(2,serVal[1]);
}else if(serVal[0]==4){
SetSteeringGear(3,serVal[1]);
}else if(serVal[0]==5){
SetSteeringGear(4,serVal[1]);
}else if(serVal[0]==6){
SetSteeringGear(5,serVal[1]);
}
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
51單片機(jī)超高精度6路舵機(jī)控制程序-087b81f04afe04a1b071de51.doc
(41 KB, 下載次數(shù): 53)
2018-4-6 22:29 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
guangxin
時(shí)間:
2018-4-8 14:09
51單片機(jī)超高精度6路舵機(jī)控制程序-087b81f04afe04a1b071de51.doc資源有問題,不能下載
作者:
guangxin
時(shí)間:
2019-5-22 13:39
這個(gè)程序能用嗎,不會(huì)有問題吧
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1