电位器控制舵机 随动,
单片机是STC15W408AS 暂时没有用PWM模块,只是用的定时器0中断发出PWM,P3.2脚接4.7K电阻到舵机信号线, P1.1接5K电位器,但是接上电后舵机不稳定,电位器转到头了 ,舵机开始抖动,无法运转,求高手看看指教谢谢! 程序如下:
#include <reg51.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit k=P3^2;
uint a=0,v,c;
/*********************************
定义相应操作位
***********************************/
sfr AUXR = 0x8e; //辅助寄存器
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //ADC高8位结果
sfr ADC_LOW2 = 0xBE; //ADC低2位结果
sfr P1ASF = 0x9D; //P1口第2功能控制寄存器
#define ADC_POWER 0x80 //ADC
电源控制位
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540个时钟
/*********************************
10微秒 定时器初始化
***********************************/
void Init
timer0(void) //10微秒@11.0592MHz
{
ET0 = 1; //使能定时器0中断
EA = 1;
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x91; //设置定时初值
TH0 = 0xFF; //设置定时初值
TR0 = 1; //定时器0开始计时
}
/*********************************
读取ADC结果
***********************************/
uint GetADCResult(uchar ch)
{
int V;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4个NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
V=ADC_RES;
return V;
}
/*----------------------------
软件延时
----------------------------*/
void Delay(uint n)
{
uint x;
while (n--)
{
x = 5000;
while (x--);
}
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0x02; //设置P1口为AD口
ADC_RES = 0;
//清除结果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC上电并延时
}
/*----------------------------
舵机控制
----------------------------*/
void kongzhi()
{
c=(v+50);
if(a<=c)
k=1;
else
k=0;
}
/*----------------------------
主函数
----------------------------*/
void main ()
{
InitTimer0();
while(1)
{
InitADC();
GetADCResult(1);
v=GetADCResult(1);
c=0;
}
}
void timer0int()interrupt 1
{
TL0 =0x91; //设置定时初值
TH0 =0xFF; //设置定时初值
a++;
kongzhi();
if(a=2000)
a=0;
}
-
谢谢哥们,可是没有示波器啊,直接调试的,舵机抖舵 ,不按照正常走啊
哥们 我 这个是完整的啊程序啊
一周热门 更多>