|
用51的P0口控制舵机,串口输入A0和A1分别控制舵机的旋转。以下为单片机程序,但是一直动不了。不知道原因。
另外想问一下,是否需要在P0的焊电阻?
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define Cycle 20000 //定义周期
uchar count=0; //中断步长
uchar jd=1;
//PWM的输出端口
sbit pwm=P0^0;
uchar serVal[2];
void Com_Init()
{
TMOD=0x20; //用定时器设置串口波特率
TH1=0xfd; //256-11059200/(32*12*9600)=253 (FD)
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
EA=1; //开启总中断
ES=1;
}
void Init_Timer0() //定时器0 初始化
{
TMOD |=0x01;
TH0=0xf8;
TL0=0xcc;
EA = 1;//打开总中断
ET0 = 1;//打开定时器0中断
TR0 = 1;//启动定时器0
PT0=1; //定时器0 设置为最高优先中断
PX0=0; // 外部中断0 设置最低中断
}
void ser() interrupt 4
{
RI=0;
serVal[0]=serVal[1];
serVal[1]=SBUF;
}
void send(uchar value1)
{
SBUF=value1;
while(!TI);
TI=0;
}
//按键检测
void keyscan()
{
if(serVal[0]=='A'){
switch(serVal[1])
{
case '0':
if(jd<6)jd++;
break;
case '1':
if(jd>1)jd--;
break;
default:break;
}
}
}
//主函数
void main(void)
{
Com_Init();//串口初始化
Init_Timer0();
while(1)
{
keyscan();
}
}
void timer0(void) interrupt 1
{
TH0 = 0xf8; //重新赋值
TL0 = 0xcc;
if(count<= jd)
pwm=1;
else
pwm=0;
count++;
count=count%10;
} |
|