|
我用51單片機(jī)兩個(gè)定時(shí)器產(chǎn)生兩路PWM同時(shí)控制兩個(gè)舵機(jī)轉(zhuǎn)動(dòng),只能實(shí)現(xiàn)一個(gè)受控,另一個(gè)不受控制怎么回事?
單片機(jī)源程序如下:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
//--定義使用的IO口--//
sbit PWM_v=P1^0;
sbit PWM_c=P1^1;
sbit jia_v=P3^0;
sbit jian_v=P3^1;
sbit jia_c=P3^2;
sbit jian_c=P3^3;
//定義變量
u16 value_v,value_c,timer,timer1;
//*******************************
void delay(u16 i)//延時(shí)10us
{
while(i--);
}
/*******************************************************************************
* 函 數(shù) 名 : Timer1Init
* 函數(shù)功能 : 定時(shí)器1初始化
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;
TH0 = 0xFF;
TL0 = 0x9C; //0.1ms
ET0=1;
EA=1;
TR0=1;
}
//************************************************************************************
void Timer1Init()
{
TMOD|=0X10;//選擇為定時(shí)器1模式,工作方式1,僅用TR1打開(kāi)啟動(dòng)。
TH1 = 0xFF;
TL1 = 0x9C; //0.1ms
ET1=1;//打開(kāi)定時(shí)器1中斷允許
EA=1;//打開(kāi)總中斷
TR1=1;//打開(kāi)定時(shí)器
}
void keyscan()
{
if(jia_v==0)
{
delay(1000);
if(jia_v==0)
{
value_v++;
timer1=0;
if(value_v==25)
{
value_v=25;
}
}
}
while(!jia_v);
if(jian_v==0)
{
delay(1000);
if(jian_v==0)
{
value_v--;
timer1=0;
if(value_v==0)
{
value_v=0;
}
}
}
while(!jian_v);
//**************************************************
if(jia_c==0)
{
delay(1000);
if(jia_c==0)
{
value_c++;
timer1=0;
if(value_c==25)
{
value_c=25;
}
}
}
while(!jia_c);
if(jian_c==0)
{
delay(1000);
if(jian_c==0)
{
value_c--;
timer1=0;
if(value_c==0)
{
value_c=0;
}
}
}
while(!jian_c);
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{
value_v=5;
value_c=5;
Timer0Init(); //定時(shí)器0初始化
Timer1Init(); //定時(shí)器1初始化
value_v=5;
while(1)
{
keyscan();
}
}
/*******************************************************************************
* 函 數(shù) 名 : Time1
* 函數(shù)功能 : 定時(shí)器1的中斷函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Timer0() interrupt 1
{
TH1 = 0xFF;
TL1 = 0x9C; //0.1ms
timer=timer+1;
timer=timer%40;
if(timer <value_c)
{
PWM_c=1;
}
else
{
PWM_c=0;
}
}
//********************************************************************************************************************
void Time1(void) interrupt 3 //3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2 4 串口中斷
{
TH1 = 0xFF;
TL1 = 0x9C; //0.1ms
timer1=timer1+1;
timer1=timer1%40;
if(timer1 <value_v)
{
PWM_v=1;
}
else
{
PWM_v=0;
}
}
|
|