单片机:STC89C52RC
晶振:11.0592M
创想:P0口控制舵机 脚位使用高低电位定义 不使用sbit 定义 因为舵机接在固定的端口会抖动 运行时想控制哪个就控制哪个对别的不产生作用 这样就解决了抖动 停不下来的问题 但是由于本人的编程是那么的菜 只能套用他人的程序 也只能做到FF010100FF顺时针运动 FF010200FF逆时针运动 FF010000FF短暂的停顿 PS:90度 1382 停止是行不通的 要的是没P0除去定义 谢谢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
int buffer[3];
int rec_flag=0;
uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382)
uint pwm_flag=0;
uint code ms0_5Con=461; //0.5ms计数 (实际是460.8,取整得461)
uint code ms2_5Con=2304; //2.5ms计数
/*-----------------------串口初始化----------------------------*/
void UART_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
IT0=0;
EX0=1;
}
/*------------------------舵机定时器--------------------------*/
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位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=-ms2_5Con>>8; //给定初值,2.5ms中断
TL0=-ms2_5Con;
EA=1; //总中断打开
ET0=1; //定时器0中断打开
TR0=1; //定时器0开关打开
}
/*-------------------------主函数---------------------------*/
void main(void)
{
UART_Init(); //初始化串口
Timer0Init();//舵机定时初始化
while(1)
{
}
}
/*--------------------串口解析执行-------------------------*/
void Communication_Decode(void)
{
if(buffer[0]==0x01)
{
switch(buffer[1])
{
case 0x00:P0=0x00;return;
case 0x01:pwm[0]=400;return;
case 0x02:pwm[0]=2222;return;
default : P0=0xff;return;
}
}
}
/*------------------------舵机中断函数--------------------------*/
void SteeringGear() interrupt 1
{
switch(pwm_flag)
{
case 1: P0=0x01;TH0=-pwm[0]>>8; TL0=-pwm[0];break;
case 2: P0=0x02;break;
default:TH0=0xff; TL0=0x80; pwm_flag=0;
}
pwm_flag++;
}
/*------------------------串口中断函数--------------------------*/
void INT_UartRcv(void) interrupt 4
{
static int i;
if(RI==1)
{
RI = 0;
if(rec_flag==0)
{
if(SBUF==0xff)
{
rec_flag=1;
i=0;
}
}
else
{
if(SBUF==0xff)
{
rec_flag=0;
if(i==3)
{
Communication_Decode();
}
i=0;
}
else
{
buffer[i]=SBUF;
i++;
}
}
}
else
{
TI = 0;
}
}
|